Merge "Flag-guards changes to status bar and lockscreen."
diff --git a/Android.bp b/Android.bp
index 56d6557..b715b73 100644
--- a/Android.bp
+++ b/Android.bp
@@ -150,6 +150,8 @@
"core/java/android/content/pm/dex/ISnapshotRuntimeProfileCallback.aidl",
"core/java/android/content/pm/permission/IRuntimePermissionPresenter.aidl",
"core/java/android/database/IContentObserver.aidl",
+ "core/java/android/debug/IAdbManager.aidl",
+ "core/java/android/debug/IAdbTransport.aidl",
":libcamera_client_aidl",
":libcamera_client_framework_aidl",
"core/java/android/hardware/IConsumerIrService.aidl",
diff --git a/apct-tests/perftests/core/src/android/util/ArraySetPerfTest.java b/apct-tests/perftests/core/src/android/util/ArraySetPerfTest.java
new file mode 100644
index 0000000..0c1f289
--- /dev/null
+++ b/apct-tests/perftests/core/src/android/util/ArraySetPerfTest.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.util;
+
+import android.perftests.utils.BenchmarkState;
+import android.perftests.utils.PerfStatusReporter;
+import android.support.test.filters.LargeTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.function.Predicate;
+
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+public class ArraySetPerfTest {
+ private static final int NUM_ITERATIONS = 100;
+ private static final int SET_SIZE_SMALL = 10;
+ private static final int SET_SIZE_LARGE = 50;
+
+ @Rule
+ public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
+
+ @Test
+ public void testValueAt_InBounds() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ ArraySet<Integer> set = new ArraySet<>();
+ set.add(0);
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ set.valueAt(0);
+ }
+ }
+ }
+
+ @Test
+ public void testValueAt_OutOfBounds_Negative() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ ArraySet<Integer> set = new ArraySet<>();
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ try {
+ set.valueAt(-1);
+ } catch (ArrayIndexOutOfBoundsException expected) {
+ // expected
+ }
+ }
+ }
+ }
+
+ /**
+ * Tests the case where ArraySet could index into its array even though the index is out of
+ * bounds.
+ */
+ @Test
+ public void testValueAt_OutOfBounds_EdgeCase() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ ArraySet<Integer> set = new ArraySet<>();
+ set.add(0);
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ try {
+ set.valueAt(1);
+ } catch (ArrayIndexOutOfBoundsException expected) {
+ // expected
+ }
+ }
+ }
+ }
+
+ /**
+ * This is the same code as testRemoveIf_Small_* without the removeIf in order to measure
+ * the performance of the rest of the code in the loop.
+ */
+ @Test
+ public void testRemoveIf_Small_Base() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ Predicate<Integer> predicate = (i) -> i % 2 == 0;
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ ArraySet<Integer> set = new ArraySet<>();
+ for (int j = 0; j < SET_SIZE_SMALL; ++j) {
+ set.add(j);
+ }
+ }
+ }
+ }
+
+ @Test
+ public void testRemoveIf_Small_RemoveNothing() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ Predicate<Integer> predicate = (i) -> false;
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ ArraySet<Integer> set = new ArraySet<>();
+ for (int j = 0; j < SET_SIZE_SMALL; ++j) {
+ set.add(j);
+ }
+ set.removeIf(predicate);
+ }
+ }
+ }
+
+ @Test
+ public void testRemoveIf_Small_RemoveAll() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ Predicate<Integer> predicate = (i) -> true;
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ ArraySet<Integer> set = new ArraySet<>();
+ for (int j = 0; j < SET_SIZE_SMALL; j++) {
+ set.add(j);
+ }
+ set.removeIf(predicate);
+ }
+ }
+ }
+
+ @Test
+ public void testRemoveIf_Small_RemoveHalf() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ Predicate<Integer> predicate = (i) -> i % 2 == 0;
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ ArraySet<Integer> set = new ArraySet<>();
+ for (int j = 0; j < SET_SIZE_SMALL; ++j) {
+ set.add(j);
+ }
+ set.removeIf(predicate);
+ }
+ }
+ }
+
+ /**
+ * This is the same code as testRemoveIf_Large_* without the removeIf in order to measure
+ * the performance of the rest of the code in the loop.
+ */
+ @Test
+ public void testRemoveIf_Large_Base() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ Predicate<Integer> predicate = (i) -> i % 2 == 0;
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ ArraySet<Integer> set = new ArraySet<>();
+ for (int j = 0; j < SET_SIZE_LARGE; ++j) {
+ set.add(j);
+ }
+ }
+ }
+ }
+
+ @Test
+ public void testRemoveIf_Large_RemoveNothing() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ Predicate<Integer> predicate = (i) -> false;
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ ArraySet<Integer> set = new ArraySet<>();
+ for (int j = 0; j < SET_SIZE_LARGE; ++j) {
+ set.add(j);
+ }
+ set.removeIf(predicate);
+ }
+ }
+ }
+
+ @Test
+ public void testRemoveIf_Large_RemoveAll() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ Predicate<Integer> predicate = (i) -> true;
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ ArraySet<Integer> set = new ArraySet<>();
+ for (int j = 0; j < SET_SIZE_LARGE; ++j) {
+ set.add(j);
+ }
+ set.removeIf(predicate);
+ }
+ }
+ }
+
+ @Test
+ public void testRemoveIf_Large_RemoveHalf() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ Predicate<Integer> predicate = (i) -> i % 2 == 0;
+ while (state.keepRunning()) {
+ for (int i = 0; i < NUM_ITERATIONS; ++i) {
+ ArraySet<Integer> set = new ArraySet<>();
+ for (int j = 0; j < SET_SIZE_LARGE; ++j) {
+ set.add(j);
+ }
+ set.removeIf(predicate);
+ }
+ }
+ }
+}
diff --git a/api/current.txt b/api/current.txt
index 8a50ec7..5ab3f6a 100755
--- a/api/current.txt
+++ b/api/current.txt
@@ -1209,6 +1209,7 @@
field public static final int shareInterpolator = 16843195; // 0x10101bb
field public static final int sharedUserId = 16842763; // 0x101000b
field public static final int sharedUserLabel = 16843361; // 0x1010261
+ field public static final int shell = 16844180; // 0x1010594
field public static final int shortcutDisabledMessage = 16844075; // 0x101052b
field public static final int shortcutId = 16844072; // 0x1010528
field public static final int shortcutLongLabel = 16844074; // 0x101052a
@@ -10833,6 +10834,7 @@
method public int describeContents();
method public void dump(android.util.Printer, java.lang.String);
method public static java.lang.CharSequence getCategoryTitle(android.content.Context, int);
+ method public boolean isProfileableByShell();
method public boolean isVirtualPreload();
method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
field public static final int CATEGORY_AUDIO = 1; // 0x1
@@ -22925,6 +22927,8 @@
method public java.util.Map<java.util.Locale, java.lang.String> getLabels();
method public java.util.Locale getLocale();
method public int getMasteringIndication();
+ method public int getPresentationId();
+ method public int getProgramId();
method public boolean hasAudioDescription();
method public boolean hasDialogueEnhancement();
method public boolean hasSpokenSubtitles();
@@ -22935,6 +22939,18 @@
field public static final int MASTERING_NOT_INDICATED = 0; // 0x0
}
+ public static class AudioPresentation.Builder {
+ ctor public AudioPresentation.Builder(int);
+ method public android.media.AudioPresentation build();
+ method public android.media.AudioPresentation.Builder setHasAudioDescription(boolean);
+ method public android.media.AudioPresentation.Builder setHasDialogueEnhancement(boolean);
+ method public android.media.AudioPresentation.Builder setHasSpokenSubtitles(boolean);
+ method public android.media.AudioPresentation.Builder setLabels(java.util.Map<android.icu.util.ULocale, java.lang.String>);
+ method public android.media.AudioPresentation.Builder setLocale(android.icu.util.ULocale);
+ method public android.media.AudioPresentation.Builder setMasteringIndication(int);
+ method public android.media.AudioPresentation.Builder setProgramId(int);
+ }
+
public class AudioRecord implements android.media.AudioRouting {
ctor public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException;
method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
@@ -36816,6 +36832,7 @@
method public android.database.Cursor queryChildDocuments(java.lang.String, java.lang.String[], android.os.Bundle) throws java.io.FileNotFoundException;
method public abstract android.database.Cursor queryDocument(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
method public android.database.Cursor queryRecentDocuments(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
+ method public android.database.Cursor queryRecentDocuments(java.lang.String, java.lang.String[], android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
method public abstract android.database.Cursor queryRoots(java.lang.String[]) throws java.io.FileNotFoundException;
method public android.database.Cursor querySearchDocuments(java.lang.String, java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
method public void removeDocument(java.lang.String, java.lang.String) throws java.io.FileNotFoundException;
@@ -36900,6 +36917,7 @@
public final class MediaStore {
ctor public MediaStore();
+ method public static java.util.Set<java.lang.String> getAllVolumeNames(android.content.Context);
method public static android.net.Uri getDocumentUri(android.content.Context, android.net.Uri);
method public static android.net.Uri getMediaScannerUri();
method public static android.net.Uri getMediaUri(android.content.Context, android.net.Uri);
@@ -36907,9 +36925,12 @@
method public static java.lang.String getVolumeName(android.net.Uri);
field public static final java.lang.String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE";
field public static final java.lang.String ACTION_IMAGE_CAPTURE_SECURE = "android.media.action.IMAGE_CAPTURE_SECURE";
+ field public static final java.lang.String ACTION_REVIEW = "android.provider.action.REVIEW";
+ field public static final java.lang.String ACTION_REVIEW_SECURE = "android.provider.action.REVIEW_SECURE";
field public static final java.lang.String ACTION_VIDEO_CAPTURE = "android.media.action.VIDEO_CAPTURE";
field public static final java.lang.String AUTHORITY = "media";
field public static final android.net.Uri AUTHORITY_URI;
+ field public static final java.lang.String EXTRA_BRIGHTNESS = "android.provider.extra.BRIGHTNESS";
field public static final java.lang.String EXTRA_DURATION_LIMIT = "android.intent.extra.durationLimit";
field public static final java.lang.String EXTRA_FINISH_ON_COMPLETION = "android.intent.extra.finishOnCompletion";
field public static final java.lang.String EXTRA_FULL_SCREEN = "android.intent.extra.fullScreen";
@@ -37035,7 +37056,7 @@
public static final class MediaStore.Audio.Media implements android.provider.MediaStore.Audio.AudioColumns {
ctor public MediaStore.Audio.Media();
method public static android.net.Uri getContentUri(java.lang.String);
- method public static android.net.Uri getContentUriForPath(java.lang.String);
+ method public static deprecated android.net.Uri getContentUriForPath(java.lang.String);
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/audio";
field public static final java.lang.String DEFAULT_SORT_ORDER = "title_key";
field public static final java.lang.String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/audio";
@@ -37157,6 +37178,7 @@
field public static final java.lang.String DATE_ADDED = "date_added";
field public static final java.lang.String DATE_MODIFIED = "date_modified";
field public static final java.lang.String DISPLAY_NAME = "_display_name";
+ field public static final java.lang.String HASH = "_hash";
field public static final java.lang.String HEIGHT = "height";
field public static final java.lang.String MIME_TYPE = "mime_type";
field public static final java.lang.String SIZE = "_size";
@@ -41646,6 +41668,7 @@
field public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 2048; // 0x800
field public static final int PROPERTY_RTT = 1024; // 0x400
field public static final int PROPERTY_SELF_MANAGED = 256; // 0x100
+ field public static final int PROPERTY_VOIP_AUDIO_MODE = 4096; // 0x1000
field public static final int PROPERTY_WIFI = 8; // 0x8
}
@@ -42798,6 +42821,7 @@
method public int getLevel();
method public int getRsrp();
method public int getRsrq();
+ method public int getRssi();
method public int getRssnr();
method public int getTimingAdvance();
method public void writeToParcel(android.os.Parcel, int);
@@ -43077,6 +43101,7 @@
method public int getLevel();
method public boolean isGsm();
method public void writeToParcel(android.os.Parcel, int);
+ field public static final int INVALID = 2147483647; // 0x7fffffff
}
public final class SmsManager {
@@ -45845,6 +45870,7 @@
ctor public deprecated Scene(android.view.ViewGroup, android.view.ViewGroup);
method public void enter();
method public void exit();
+ method public static android.transition.Scene getCurrentScene(android.view.View);
method public static android.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context);
method public android.view.ViewGroup getSceneRoot();
method public void setEnterAction(java.lang.Runnable);
@@ -54395,6 +54421,7 @@
method public void setLong(int, java.lang.String, long);
method public void setOnClickFillInIntent(int, android.content.Intent);
method public void setOnClickPendingIntent(int, android.app.PendingIntent);
+ method public void setOnClickResponse(int, android.widget.RemoteViews.RemoteResponse);
method public void setPendingIntentTemplate(int, android.app.PendingIntent);
method public void setProgressBar(int, int, int, boolean);
method public void setRelativeScrollPosition(int, int);
@@ -54415,6 +54442,7 @@
method public void showPrevious(int);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.widget.RemoteViews> CREATOR;
+ field public static final java.lang.String EXTRA_SHARED_ELEMENT_BOUNDS = "android.widget.extra.SHARED_ELEMENT_BOUNDS";
}
public static class RemoteViews.ActionException extends java.lang.RuntimeException {
@@ -54422,6 +54450,13 @@
ctor public RemoteViews.ActionException(java.lang.String);
}
+ public static class RemoteViews.RemoteResponse {
+ ctor public RemoteViews.RemoteResponse();
+ method public android.widget.RemoteViews.RemoteResponse addSharedElement(int, java.lang.String);
+ method public static android.widget.RemoteViews.RemoteResponse fromFillInIntent(android.content.Intent);
+ method public static android.widget.RemoteViews.RemoteResponse fromPendingIntent(android.app.PendingIntent);
+ }
+
public static abstract class RemoteViews.RemoteView implements java.lang.annotation.Annotation {
}
diff --git a/api/system-current.txt b/api/system-current.txt
index 7e29535..10cf633 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -100,6 +100,7 @@
field public static final java.lang.String MANAGE_AUTO_FILL = "android.permission.MANAGE_AUTO_FILL";
field public static final java.lang.String MANAGE_CARRIER_OEM_UNLOCK_STATE = "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE";
field public static final java.lang.String MANAGE_CA_CERTIFICATES = "android.permission.MANAGE_CA_CERTIFICATES";
+ field public static final java.lang.String MANAGE_DEBUGGING = "android.permission.MANAGE_DEBUGGING";
field public static final java.lang.String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS";
field public static final java.lang.String MANAGE_IPSEC_TUNNELS = "android.permission.MANAGE_IPSEC_TUNNELS";
field public static final java.lang.String MANAGE_ROLE_HOLDERS = "android.permission.MANAGE_ROLE_HOLDERS";
@@ -810,9 +811,12 @@
public final class RoleManager {
method public void addRoleHolderAsUser(java.lang.String, java.lang.String, android.os.UserHandle, java.util.concurrent.Executor, android.app.role.RoleManagerCallback);
+ method public boolean addRoleHolderFromController(java.lang.String, java.lang.String);
method public void clearRoleHoldersAsUser(java.lang.String, android.os.UserHandle, java.util.concurrent.Executor, android.app.role.RoleManagerCallback);
- method public java.util.Set<java.lang.String> getRoleHoldersAsUser(java.lang.String, android.os.UserHandle);
+ method public java.util.List<java.lang.String> getRoleHolders(java.lang.String);
+ method public java.util.List<java.lang.String> getRoleHoldersAsUser(java.lang.String, android.os.UserHandle);
method public void removeRoleHolderAsUser(java.lang.String, java.lang.String, android.os.UserHandle, java.util.concurrent.Executor, android.app.role.RoleManagerCallback);
+ method public boolean removeRoleHolderFromController(java.lang.String, java.lang.String);
field public static final java.lang.String EXTRA_REQUEST_ROLE_NAME = "android.app.role.extra.REQUEST_ROLE_NAME";
}
diff --git a/api/test-current.txt b/api/test-current.txt
index d453395..b393d20 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -578,12 +578,6 @@
method public static boolean isEncodingLinearPcm(int);
}
- public final class AudioPresentation {
- ctor public AudioPresentation(int, int, java.util.Map<java.lang.String, java.lang.String>, java.lang.String, int, boolean, boolean, boolean);
- method public int getPresentationId();
- method public int getProgramId();
- }
-
public final class BufferingParams implements android.os.Parcelable {
method public int describeContents();
method public int getInitialMarkMs();
@@ -1213,6 +1207,7 @@
public class TelephonyManager {
method public int getCarrierIdListVersion();
+ method public boolean isRttSupported();
method public void refreshUiccProfile();
method public void setCarrierTestOverride(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
field public static final int UNKNOWN_CARRIER_ID_LIST_VERSION = -1; // 0xffffffff
@@ -1328,6 +1323,14 @@
}
+package android.util {
+
+ public final class ArraySet<E> implements java.util.Collection java.util.Set {
+ method public E valueAtUnchecked(int);
+ }
+
+}
+
package android.util.proto {
public final class EncodedBuffer {
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index ca049b0..5620184 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -2399,6 +2399,10 @@
// Peak RSS usage of the process. Value is read from the VmHWM field in /proc/PID/status or
// from memory.max_usage_in_bytes under /dev/memcg if the device uses per-app memory cgroups.
optional int64 rss_high_watermark_in_bytes = 9;
+
+ // Elapsed real time when the process started.
+ // Value is read from /proc/PID/stat, field 22. 0 if read from per-app memory cgroups.
+ optional int64 start_time_nanos = 10;
}
/*
diff --git a/cmds/statsd/src/external/StatsPuller.cpp b/cmds/statsd/src/external/StatsPuller.cpp
index 436a880..e3f251a 100644
--- a/cmds/statsd/src/external/StatsPuller.cpp
+++ b/cmds/statsd/src/external/StatsPuller.cpp
@@ -46,6 +46,7 @@
if (elapsedTimeNs - mLastPullTimeNs < mCoolDownNs) {
(*data) = mCachedData;
StatsdStats::getInstance().notePullFromCache(mTagId);
+ StatsdStats::getInstance().notePullDelay(mTagId, getElapsedRealtimeNs() - elapsedTimeNs);
return true;
}
if (mMinPullIntervalNs > elapsedTimeNs - mLastPullTimeNs) {
@@ -55,7 +56,9 @@
}
mCachedData.clear();
mLastPullTimeNs = elapsedTimeNs;
+ int64_t pullStartTimeNs = getElapsedRealtimeNs();
bool ret = PullInternal(&mCachedData);
+ StatsdStats::getInstance().notePullTime(mTagId, getElapsedRealtimeNs() - pullStartTimeNs);
for (const shared_ptr<LogEvent>& data : mCachedData) {
data->setElapsedTimestampNs(elapsedTimeNs);
data->setLogdWallClockTimestampNs(wallClockTimeNs);
@@ -64,6 +67,7 @@
mergeIsolatedUidsToHostUid(mCachedData, mUidMap, mTagId);
(*data) = mCachedData;
}
+ StatsdStats::getInstance().notePullDelay(mTagId, getElapsedRealtimeNs() - elapsedTimeNs);
return ret;
}
diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp
index c9b361d..9633980 100644
--- a/cmds/statsd/src/external/StatsPullerManager.cpp
+++ b/cmds/statsd/src/external/StatsPullerManager.cpp
@@ -167,13 +167,13 @@
// process_memory_state
{android::util::PROCESS_MEMORY_STATE,
{{4, 5, 6, 7, 8, 9},
- {2, 3},
+ {2, 3, 10},
1 * NS_PER_SEC,
new StatsCompanionServicePuller(android::util::PROCESS_MEMORY_STATE)}},
// native_process_memory_state
{android::util::NATIVE_PROCESS_MEMORY_STATE,
- {{3, 4, 5, 6, 7},
- {2},
+ {{3, 4, 5, 6},
+ {2, 7},
1 * NS_PER_SEC,
new StatsCompanionServicePuller(android::util::NATIVE_PROCESS_MEMORY_STATE)}},
// temperature
diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp
index 023d835..d2919c5 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.cpp
+++ b/cmds/statsd/src/guardrail/StatsdStats.cpp
@@ -335,7 +335,8 @@
void StatsdStats::updateMinPullIntervalSec(int pullAtomId, long intervalSec) {
lock_guard<std::mutex> lock(mLock);
- mPulledAtomStats[pullAtomId].minPullIntervalSec = intervalSec;
+ mPulledAtomStats[pullAtomId].minPullIntervalSec =
+ std::min(mPulledAtomStats[pullAtomId].minPullIntervalSec, intervalSec);
}
void StatsdStats::notePull(int pullAtomId) {
@@ -348,6 +349,24 @@
mPulledAtomStats[pullAtomId].totalPullFromCache++;
}
+void StatsdStats::notePullTime(int pullAtomId, int64_t pullTimeNs) {
+ lock_guard<std::mutex> lock(mLock);
+ auto& pullStats = mPulledAtomStats[pullAtomId];
+ pullStats.maxPullTimeNs = std::max(pullStats.maxPullTimeNs, pullTimeNs);
+ pullStats.avgPullTimeNs = (pullStats.avgPullTimeNs * pullStats.numPullTime + pullTimeNs) /
+ (pullStats.numPullTime + 1);
+ pullStats.numPullTime += 1;
+}
+
+void StatsdStats::notePullDelay(int pullAtomId, int64_t pullDelayNs) {
+ lock_guard<std::mutex> lock(mLock);
+ auto& pullStats = mPulledAtomStats[pullAtomId];
+ pullStats.maxPullDelayNs = std::max(pullStats.maxPullDelayNs, pullDelayNs);
+ pullStats.avgPullDelayNs = (pullStats.avgPullDelayNs * pullStats.numPullDelay + pullDelayNs) /
+ (pullStats.numPullDelay + 1);
+ pullStats.numPullDelay += 1;
+}
+
void StatsdStats::noteAtomLogged(int atomId, int32_t timeSec) {
lock_guard<std::mutex> lock(mLock);
@@ -394,6 +413,16 @@
config.second->metric_dimension_in_condition_stats.clear();
config.second->alert_stats.clear();
}
+ for (auto& pullStats : mPulledAtomStats) {
+ pullStats.second.totalPull = 0;
+ pullStats.second.totalPullFromCache = 0;
+ pullStats.second.avgPullTimeNs = 0;
+ pullStats.second.maxPullTimeNs = 0;
+ pullStats.second.numPullTime = 0;
+ pullStats.second.avgPullDelayNs = 0;
+ pullStats.second.maxPullDelayNs = 0;
+ pullStats.second.numPullDelay = 0;
+ }
}
string buildTimeString(int64_t timeSec) {
@@ -498,8 +527,14 @@
dprintf(out, "********Pulled Atom stats***********\n");
for (const auto& pair : mPulledAtomStats) {
- dprintf(out, "Atom %d->%ld, %ld, %ld\n", (int)pair.first, (long)pair.second.totalPull,
- (long)pair.second.totalPullFromCache, (long)pair.second.minPullIntervalSec);
+ dprintf(out,
+ "Atom %d->(total pull)%ld, (pull from cache)%ld, (min pull interval)%ld, (average "
+ "pull time nanos)%lld, (max pull time nanos)%lld, (average pull delay nanos)%lld, "
+ "(max pull delay nanos)%lld\n",
+ (int)pair.first, (long)pair.second.totalPull, (long)pair.second.totalPullFromCache,
+ (long)pair.second.minPullIntervalSec, (long long)pair.second.avgPullTimeNs,
+ (long long)pair.second.maxPullTimeNs, (long long)pair.second.avgPullDelayNs,
+ (long long)pair.second.maxPullDelayNs);
}
if (mAnomalyAlarmRegisteredStats > 0) {
diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h
index 7d95b54..777d865 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.h
+++ b/cmds/statsd/src/guardrail/StatsdStats.h
@@ -263,16 +263,34 @@
void setUidMapChanges(int changes);
void setCurrentUidMapMemory(int bytes);
- // Update minimum interval between pulls for an pulled atom
+ /*
+ * Updates minimum interval between pulls for an pulled atom.
+ */
void updateMinPullIntervalSec(int pullAtomId, long intervalSec);
- // Notify pull request for an atom
+ /*
+ * Notes an atom is pulled.
+ */
void notePull(int pullAtomId);
- // Notify pull request for an atom served from cached data
+ /*
+ * Notes an atom is served from puller cache.
+ */
void notePullFromCache(int pullAtomId);
/*
+ * Records time for actual pulling, not including those served from cache and not including
+ * statsd processing delays.
+ */
+ void notePullTime(int pullAtomId, int64_t pullTimeNs);
+
+ /*
+ * Records pull delay for a pulled atom, including those served from cache and including statsd
+ * processing delays.
+ */
+ void notePullDelay(int pullAtomId, int64_t pullDelayNs);
+
+ /*
* Records when system server restarts.
*/
void noteSystemServerRestart(int32_t timeSec);
@@ -302,9 +320,15 @@
void dumpStats(int outFd) const;
typedef struct {
- long totalPull;
- long totalPullFromCache;
- long minPullIntervalSec;
+ long totalPull = 0;
+ long totalPullFromCache = 0;
+ long minPullIntervalSec = LONG_MAX;
+ int64_t avgPullTimeNs = 0;
+ int64_t maxPullTimeNs = 0;
+ long numPullTime = 0;
+ int64_t avgPullDelayNs = 0;
+ int64_t maxPullDelayNs = 0;
+ long numPullDelay = 0;
} PulledAtomStats;
private:
@@ -368,6 +392,7 @@
FRIEND_TEST(StatsdStatsTest, TestTimestampThreshold);
FRIEND_TEST(StatsdStatsTest, TestAnomalyMonitor);
FRIEND_TEST(StatsdStatsTest, TestSystemServerCrash);
+ FRIEND_TEST(StatsdStatsTest, TestPullAtomStats);
};
} // namespace statsd
diff --git a/cmds/statsd/src/stats_log.proto b/cmds/statsd/src/stats_log.proto
index e8f74d3..8bfa360 100644
--- a/cmds/statsd/src/stats_log.proto
+++ b/cmds/statsd/src/stats_log.proto
@@ -370,6 +370,10 @@
optional int64 total_pull = 2;
optional int64 total_pull_from_cache = 3;
optional int64 min_pull_interval_sec = 4;
+ optional int64 average_pull_time_nanos = 5;
+ optional int64 max_pull_time_nanos = 6;
+ optional int64 average_pull_delay_nanos = 7;
+ optional int64 max_pull_delay_nanos = 8;
}
repeated PulledAtomStats pulled_atom_stats = 10;
diff --git a/cmds/statsd/src/stats_log_util.cpp b/cmds/statsd/src/stats_log_util.cpp
index 2498d9f..44fa72e 100644
--- a/cmds/statsd/src/stats_log_util.cpp
+++ b/cmds/statsd/src/stats_log_util.cpp
@@ -59,6 +59,10 @@
const int FIELD_ID_TOTAL_PULL = 2;
const int FIELD_ID_TOTAL_PULL_FROM_CACHE = 3;
const int FIELD_ID_MIN_PULL_INTERVAL_SEC = 4;
+const int FIELD_ID_AVERAGE_PULL_TIME_NANOS = 5;
+const int FIELD_ID_MAX_PULL_TIME_NANOS = 6;
+const int FIELD_ID_AVERAGE_PULL_DELAY_NANOS = 7;
+const int FIELD_ID_MAX_PULL_DELAY_NANOS = 8;
namespace {
@@ -434,6 +438,14 @@
(long long)pair.second.totalPullFromCache);
protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_MIN_PULL_INTERVAL_SEC,
(long long)pair.second.minPullIntervalSec);
+ protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_AVERAGE_PULL_TIME_NANOS,
+ (long long)pair.second.avgPullTimeNs);
+ protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_MAX_PULL_TIME_NANOS,
+ (long long)pair.second.maxPullTimeNs);
+ protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_AVERAGE_PULL_DELAY_NANOS,
+ (long long)pair.second.avgPullDelayNs);
+ protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_MAX_PULL_DELAY_NANOS,
+ (long long)pair.second.maxPullDelayNs);
protoOutput->end(token);
}
diff --git a/cmds/statsd/tests/guardrail/StatsdStats_test.cpp b/cmds/statsd/tests/guardrail/StatsdStats_test.cpp
index f37f908..6069516 100644
--- a/cmds/statsd/tests/guardrail/StatsdStats_test.cpp
+++ b/cmds/statsd/tests/guardrail/StatsdStats_test.cpp
@@ -244,6 +244,39 @@
EXPECT_TRUE(sensorAtomGood);
}
+TEST(StatsdStatsTest, TestPullAtomStats) {
+ StatsdStats stats;
+
+ stats.updateMinPullIntervalSec(android::util::DISK_SPACE, 3333L);
+ stats.updateMinPullIntervalSec(android::util::DISK_SPACE, 2222L);
+ stats.updateMinPullIntervalSec(android::util::DISK_SPACE, 4444L);
+
+ stats.notePull(android::util::DISK_SPACE);
+ stats.notePullTime(android::util::DISK_SPACE, 1111L);
+ stats.notePullDelay(android::util::DISK_SPACE, 1111L);
+ stats.notePull(android::util::DISK_SPACE);
+ stats.notePullTime(android::util::DISK_SPACE, 3333L);
+ stats.notePullDelay(android::util::DISK_SPACE, 3335L);
+ stats.notePull(android::util::DISK_SPACE);
+ stats.notePullFromCache(android::util::DISK_SPACE);
+
+ vector<uint8_t> output;
+ stats.dumpStats(&output, false);
+ StatsdStatsReport report;
+ bool good = report.ParseFromArray(&output[0], output.size());
+ EXPECT_TRUE(good);
+
+ EXPECT_EQ(1, report.pulled_atom_stats_size());
+
+ EXPECT_EQ(android::util::DISK_SPACE, report.pulled_atom_stats(0).atom_id());
+ EXPECT_EQ(3, report.pulled_atom_stats(0).total_pull());
+ EXPECT_EQ(1, report.pulled_atom_stats(0).total_pull_from_cache());
+ EXPECT_EQ(2222L, report.pulled_atom_stats(0).min_pull_interval_sec());
+ EXPECT_EQ(2222L, report.pulled_atom_stats(0).average_pull_time_nanos());
+ EXPECT_EQ(3333L, report.pulled_atom_stats(0).max_pull_time_nanos());
+ EXPECT_EQ(2223L, report.pulled_atom_stats(0).average_pull_delay_nanos());
+ EXPECT_EQ(3335L, report.pulled_atom_stats(0).max_pull_delay_nanos());
+}
TEST(StatsdStatsTest, TestAnomalyMonitor) {
StatsdStats stats;
diff --git a/config/boot-image-profile.txt b/config/boot-image-profile.txt
index 2d51038..ff436f1 100644
--- a/config/boot-image-profile.txt
+++ b/config/boot-image-profile.txt
@@ -2184,6 +2184,56 @@
HPLandroid/graphics/drawable/VectorDrawable$VPath;->setPathData(Landroid/util/PathParser$PathData;)V
HPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getProperty(Ljava/lang/String;)Landroid/util/Property;
HPLandroid/graphics/drawable/VectorDrawable;->getOpticalInsets()Landroid/graphics/Insets;
+HPLandroid/graphics/text/LineBreaker;-><init>(III[ILandroid/graphics/text/LineBreaker$1;)V
+HPLandroid/graphics/text/LineBreaker;->computeLineBreaks(Landroid/graphics/text/MeasuredText;Landroid/graphics/text/LineBreaker$ParagraphConstraints;I)Landroid/graphics/text/LineBreaker$Result;
+HPLandroid/graphics/text/LineBreaker;->access$100()J
+HPLandroid/graphics/text/LineBreaker;->access$200(J)I
+HPLandroid/graphics/text/LineBreaker;->access$300(JI)I
+HPLandroid/graphics/text/LineBreaker;->access$400(JI)F
+HPLandroid/graphics/text/LineBreaker;->access$500(JI)F
+HPLandroid/graphics/text/LineBreaker;->access$600(JI)F
+HPLandroid/graphics/text/LineBreaker;->access$700(JI)I
+HPLandroid/graphics/text/LineBreaker$Builder;-><init>()V
+HPLandroid/graphics/text/LineBreaker$Builder;->setBreakStrategy(I)Landroid/graphics/text/LineBreaker$Builder;
+HPLandroid/graphics/text/LineBreaker$Builder;->setHyphenationFrequency(I)Landroid/graphics/text/LineBreaker$Builder;
+HPLandroid/graphics/text/LineBreaker$Builder;->setJustified(I)Landroid/graphics/text/LineBreaker$Builder;
+HPLandroid/graphics/text/LineBreaker$Builder;->setIndents([I)Landroid/graphics/text/LineBreaker$Builder;
+HPLandroid/graphics/text/LineBreaker$Builder;->build()Landroid/graphics/text/LineBreaker;
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;-><init>()V
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setWidth(F)V
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setIndent(FI)V
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setTabStops([II)V
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->getWidth()F
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->getFirstWidth()F
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->getFirstWidthLineCount()I
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->getTabStops()[I
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->getDefaultTabStop()I
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$800(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)F
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$900(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)I
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1000(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)F
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1100(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)[I
+HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1200(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)I
+HPLandroid/graphics/text/LineBreaker$Result;-><init>(JLandroid/graphics/text/LineBreaker$1;)V
+HPLandroid/graphics/text/LineBreaker$Result;->getLineCount()I
+HPLandroid/graphics/text/LineBreaker$Result;->getLineBreakOffset(I)I
+HPLandroid/graphics/text/LineBreaker$Result;->getLineWidth(I)F
+HPLandroid/graphics/text/LineBreaker$Result;->getLineAscent(I)F
+HPLandroid/graphics/text/LineBreaker$Result;->getLineDescent(I)F
+HPLandroid/graphics/text/LineBreaker$Result;->hasLineTab(I)Z
+HPLandroid/graphics/text/LineBreaker$Result;->getLineHyphenEdit(I)I
+HPLandroid/graphics/text/MeasuredText;-><init>(J[CLandroid/graphics/text/MeasuredText$1;)V
+HPLandroid/graphics/text/MeasuredText;->getChars()[C
+HPLandroid/graphics/text/MeasuredText;->getWidth(II)F
+HPLandroid/graphics/text/MeasuredText;->getMemoryUsage()I
+HPLandroid/graphics/text/MeasuredText;->getBounds(IILandroid/graphics/Rect;)V
+HPLandroid/graphics/text/MeasuredText;->getCharWidthAt(I)F
+HPLandroid/graphics/text/MeasuredText;->getNativePtr()J
+HPLandroid/graphics/text/MeasuredText$Builder;-><init>([C)V
+HPLandroid/graphics/text/MeasuredText$Builder;->appendStyleRun(Landroid/graphics/Paint;IZ)Landroid/graphics/text/MeasuredText$Builder;
+HPLandroid/graphics/text/MeasuredText$Builder;->appendReplacementRun(Landroid/graphics/Paint;IF)Landroid/graphics/text/MeasuredText$Builder;
+HPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder;
+HPLandroid/graphics/text/MeasuredText$Builder;->setComputeLayout(Z)Landroid/graphics/text/MeasuredText$Builder;
+HPLandroid/graphics/text/MeasuredText$Builder;->build()Landroid/graphics/text/MeasuredText;
HPLandroid/hardware/Camera$AutoFocusCallback;->onAutoFocus(ZLandroid/hardware/Camera;)V
HPLandroid/hardware/Camera$EventHandler;->handleMessage(Landroid/os/Message;)V
HPLandroid/hardware/Camera$Parameters;->getFlashMode()Ljava/lang/String;
@@ -13145,7 +13195,7 @@
HSPLandroid/app/ActivityManagerInternal;->notifyAppTransitionFinished()V
HSPLandroid/app/ActivityManagerInternal;->notifyAppTransitionStarting(Landroid/util/SparseIntArray;J)V
HSPLandroid/app/ActivityManagerInternal;->notifyDockedStackMinimizedChanged(Z)V
-HSPLandroid/app/ActivityManagerInternal;->notifyKeyguardFlagsChanged(Ljava/lang/Runnable;)V
+HSPLandroid/app/ActivityManagerInternal;->notifyKeyguardFlagsChanged(Ljava/lang/Runnable;I)V
HSPLandroid/app/ActivityManagerInternal;->notifyKeyguardTrustedChanged()V
HSPLandroid/app/ActivityManagerInternal;->notifyNetworkPolicyRulesUpdated(IJ)V
HSPLandroid/app/ActivityManagerInternal;->onLocalVoiceInteractionStarted(Landroid/os/IBinder;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;)V
@@ -31250,9 +31300,10 @@
HSPLandroid/text/Layout;->setJustificationMode(I)V
HSPLandroid/text/Layout;->shouldClampCursor(I)Z
HSPLandroid/text/MeasuredParagraph;-><init>()V
-HSPLandroid/text/MeasuredParagraph;->applyMetricsAffectingSpan(Landroid/text/TextPaint;[Landroid/text/style/MetricAffectingSpan;IIJ)V
-HSPLandroid/text/MeasuredParagraph;->applyReplacementRun(Landroid/text/style/ReplacementSpan;IIJ)V
-HSPLandroid/text/MeasuredParagraph;->applyStyleRun(IIJ)V
+HPLandroid/text/MeasuredParagraph;->getMeasuredText()Landroid/graphics/text/MeasuredText;
+HSPLandroid/text/MeasuredParagraph;->applyMetricsAffectingSpan(Landroid/text/TextPaint;[Landroid/text/style/MetricAffectingSpan;IILandroid/graphics/text/MeasuredText$Builder;)V
+HSPLandroid/text/MeasuredParagraph;->applyReplacementRun(Landroid/text/style/ReplacementSpan;IILandroid/graphics/text/MeasuredText$Builder;)V
+HSPLandroid/text/MeasuredParagraph;->applyStyleRun(IILandroid/graphics/text/MeasuredText$Builder;)V
HSPLandroid/text/MeasuredParagraph;->breakText(IZF)I
HSPLandroid/text/MeasuredParagraph;->buildForBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;
HSPLandroid/text/MeasuredParagraph;->buildForMeasurement(Landroid/text/TextPaint;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;
@@ -31287,6 +31338,7 @@
HSPLandroid/text/PackedObjectVector;->setValue(IILjava/lang/Object;)V
HSPLandroid/text/PackedObjectVector;->size()I
HSPLandroid/text/PrecomputedText$Params;-><init>(Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;II)V
+HPLandroid/text/PrecomputedText;->getCharWidthAt(I)F
HSPLandroid/text/PrecomputedText;->createMeasuredParagraphs(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;IIZ)[Landroid/text/PrecomputedText$ParagraphInfo;
HSPLandroid/text/Selection$END;-><init>(Landroid/text/Selection$1;)V
HSPLandroid/text/Selection$MEMORY;-><init>(Landroid/text/Selection$1;)V
@@ -32750,15 +32802,8 @@
HSPLandroid/view/IWindowManager;->isWindowTraceEnabled()Z
HSPLandroid/view/IWindowManager;->lockNow(Landroid/os/Bundle;)V
HSPLandroid/view/IWindowManager;->openSession(Landroid/view/IWindowSessionCallback;Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;)Landroid/view/IWindowSession;
-HSPLandroid/view/IWindowManager;->overridePendingAppTransition(Ljava/lang/String;IILandroid/os/IRemoteCallback;)V
-HSPLandroid/view/IWindowManager;->overridePendingAppTransitionAspectScaledThumb(Landroid/graphics/GraphicBuffer;IIIILandroid/os/IRemoteCallback;Z)V
-HSPLandroid/view/IWindowManager;->overridePendingAppTransitionClipReveal(IIII)V
-HSPLandroid/view/IWindowManager;->overridePendingAppTransitionInPlace(Ljava/lang/String;I)V
-HSPLandroid/view/IWindowManager;->overridePendingAppTransitionMultiThumb([Landroid/view/AppTransitionAnimationSpec;Landroid/os/IRemoteCallback;Landroid/os/IRemoteCallback;Z)V
HSPLandroid/view/IWindowManager;->overridePendingAppTransitionMultiThumbFuture(Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/os/IRemoteCallback;Z)V
HSPLandroid/view/IWindowManager;->overridePendingAppTransitionRemote(Landroid/view/RemoteAnimationAdapter;)V
-HSPLandroid/view/IWindowManager;->overridePendingAppTransitionScaleUp(IIII)V
-HSPLandroid/view/IWindowManager;->overridePendingAppTransitionThumb(Landroid/graphics/GraphicBuffer;IILandroid/os/IRemoteCallback;Z)V
HSPLandroid/view/IWindowManager;->prepareAppTransition(IZ)V
HSPLandroid/view/IWindowManager;->reenableKeyguard(Landroid/os/IBinder;)V
HSPLandroid/view/IWindowManager;->refreshScreenCaptureDisabled(I)V
diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt
index d4465eb..7382cd3 100644
--- a/config/hiddenapi-light-greylist.txt
+++ b/config/hiddenapi-light-greylist.txt
@@ -1418,7 +1418,6 @@
Landroid/view/IWindowManager;->getDockedStackSide()I
Landroid/view/IWindowManager;->getInitialDisplayDensity(I)I
Landroid/view/IWindowManager;->getInitialDisplaySize(ILandroid/graphics/Point;)V
-Landroid/view/IWindowManager;->getPendingAppTransition()I
Landroid/view/IWindowManager;->hasNavigationBar()Z
Landroid/view/IWindowManager;->isKeyguardLocked()Z
Landroid/view/IWindowManager;->isKeyguardSecure()Z
@@ -1455,7 +1454,6 @@
Landroid/webkit/IWebViewUpdateService;->getValidWebViewPackages()[Landroid/webkit/WebViewProviderInfo;
Landroid/webkit/IWebViewUpdateService;->isFallbackPackage(Ljava/lang/String;)Z
Landroid/widget/RelativeLayout$DependencyGraph$Node;-><init>()V
-Landroid/widget/RemoteViews$OnClickHandler;-><init>()V
Landroid/widget/ScrollBarDrawable;-><init>()V
Lcom/android/ims/ImsConfigListener$Stub;-><init>()V
Lcom/android/ims/internal/IImsCallSession$Stub;-><init>()V
diff --git a/config/preloaded-classes b/config/preloaded-classes
index 95bcf0e..b6bff9c 100644
--- a/config/preloaded-classes
+++ b/config/preloaded-classes
@@ -1240,6 +1240,12 @@
android.graphics.pdf.PdfDocument
android.graphics.pdf.PdfEditor
android.graphics.pdf.PdfRenderer
+android.graphics.text.LineBreaker
+android.graphics.text.LineBreaker$Builder
+android.graphics.text.LineBreaker$ParagraphConstraints
+android.graphics.text.LineBreaker$Result
+android.graphics.text.MeasuredText
+android.graphics.text.MeasuredText$Builder
android.hardware.Camera
android.hardware.Camera$CameraInfo
android.hardware.Camera$Face
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index 3189d08..579144b 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -16,17 +16,15 @@
package android.accounts;
-import static android.Manifest.permission.GET_ACCOUNTS;
-
+import android.annotation.BroadcastBehavior;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.Size;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.SdkConstant.SdkConstantType;
-import android.annotation.BroadcastBehavior;
import android.annotation.UnsupportedAppUsage;
import android.app.Activity;
import android.content.BroadcastReceiver;
@@ -36,27 +34,24 @@
import android.content.IntentFilter;
import android.content.IntentSender;
import android.content.res.Resources;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
import android.database.SQLException;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Parcelable;
-import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
import com.android.internal.R;
+
import com.google.android.collect.Maps;
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import java.lang.SuppressWarnings;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -510,7 +505,7 @@
* {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1}.
*
* @param account The account to query for user data
- * @return The user data, null if the account or key doesn't exist
+ * @return The user data, null if the account, key doesn't exist, or the user is locked
*/
public String getUserData(final Account account, final String key) {
if (account == null) throw new IllegalArgumentException("account is null");
@@ -880,7 +875,7 @@
* @param userdata String values to use for the account's userdata, null for
* none
* @return True if the account was successfully added, false if the account
- * already exists, the account is null, or another error occurs.
+ * already exists, the account is null, the user is locked, or another error occurs.
*/
public boolean addAccountExplicitly(Account account, String password, Bundle userdata) {
if (account == null) throw new IllegalArgumentException("account is null");
@@ -1349,7 +1344,7 @@
* @param account The account for which an auth token is to be fetched. Cannot be {@code null}.
* @param authTokenType The type of auth token to fetch. Cannot be {@code null}.
* @return The cached auth token for this account and type, or null if
- * no auth token is cached or the account does not exist.
+ * no auth token is cached, the account does not exist, or the user is locked
* @see #getAuthToken
*/
public String peekAuthToken(final Account account, final String authTokenType) {
@@ -1420,7 +1415,7 @@
}
/**
- * Sets one userdata key for an account. Intended by use for the
+ * Sets one userdata key for an account. Intended by use for the
* authenticator to stash state for itself, not directly by applications.
* The meaning of the keys and values is up to the authenticator.
*
@@ -3082,7 +3077,7 @@
}
/**
- * Asks the user to enter a new password for an account but not updating the
+ * Asks the user to enter a new password for the account but not updating the
* saved credentials for the account until {@link #finishSession} is called.
* <p>
* This method may be called from any thread, but the returned
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 3cc5e37..a666819 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -131,8 +131,6 @@
import com.android.internal.app.WindowDecorActionBar;
import com.android.internal.policy.PhoneWindow;
-import dalvik.system.VMRuntime;
-
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
@@ -7272,31 +7270,6 @@
}
}
- // This property is set for all non-user builds except final release
- boolean isApiWarningEnabled = SystemProperties.getInt("ro.art.hiddenapi.warning", 0) == 1;
-
- if (isAppDebuggable || isApiWarningEnabled) {
- if (!mMainThread.mHiddenApiWarningShown && VMRuntime.getRuntime().hasUsedHiddenApi()) {
- // Only show the warning once per process.
- mMainThread.mHiddenApiWarningShown = true;
-
- String appName = getApplicationInfo().loadLabel(getPackageManager())
- .toString();
- String warning = "Detected problems with API compatibility\n"
- + "(visit g.co/dev/appcompat for more info)";
- if (isAppDebuggable) {
- new AlertDialog.Builder(this)
- .setTitle(appName)
- .setMessage(warning)
- .setPositiveButton(android.R.string.ok, null)
- .setCancelable(false)
- .show();
- } else {
- Toast.makeText(this, appName + "\n" + warning, Toast.LENGTH_LONG).show();
- }
- }
- }
-
mActivityTransitionState.enterReady(this);
getApplication().dispatchActivityPostStarted(this);
}
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 3b2a21e..9079f1a 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -5878,14 +5878,17 @@
}
}
- // Allow application-generated systrace messages if we're debuggable.
- boolean isAppDebuggable = (data.appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
- Trace.setAppTracingAllowed(isAppDebuggable);
- ThreadedRenderer.setDebuggingEnabled(isAppDebuggable || Build.IS_DEBUGGABLE);
- if (isAppDebuggable && data.enableBinderTracking) {
+ // Allow binder tracing, and application-generated systrace messages if we're profileable.
+ boolean isAppProfileable = data.appInfo.isProfileableByShell();
+ Trace.setAppTracingAllowed(isAppProfileable);
+ if (isAppProfileable && data.enableBinderTracking) {
Binder.enableTracing();
}
+ // Allow renderer debugging features if we're debuggable.
+ boolean isAppDebuggable = (data.appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
+ ThreadedRenderer.setDebuggingEnabled(isAppDebuggable || Build.IS_DEBUGGABLE);
+
/**
* Initialize the default http proxy in this process for the reasons we set the time zone.
*/
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index a4f1db3..690bf3c 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -1285,13 +1285,13 @@
AppOpsManager.MODE_ALLOWED, // POST_NOTIFICATION
AppOpsManager.MODE_ALLOWED, // NEIGHBORING_CELLS
AppOpsManager.MODE_ALLOWED, // CALL_PHONE
- AppOpsManager.MODE_DEFAULT, // READ_SMS
- AppOpsManager.MODE_DEFAULT, // WRITE_SMS
- AppOpsManager.MODE_DEFAULT, // RECEIVE_SMS
+ AppOpsManager.MODE_ALLOWED, // READ_SMS
+ AppOpsManager.MODE_IGNORED, // WRITE_SMS
+ AppOpsManager.MODE_ALLOWED, // RECEIVE_SMS
AppOpsManager.MODE_ALLOWED, // RECEIVE_EMERGENCY_BROADCAST
AppOpsManager.MODE_ALLOWED, // RECEIVE_MMS
- AppOpsManager.MODE_DEFAULT, // RECEIVE_WAP_PUSH
- AppOpsManager.MODE_DEFAULT, // SEND_SMS
+ AppOpsManager.MODE_ALLOWED, // RECEIVE_WAP_PUSH
+ AppOpsManager.MODE_ALLOWED, // SEND_SMS
AppOpsManager.MODE_ALLOWED, // READ_ICC_SMS
AppOpsManager.MODE_ALLOWED, // WRITE_ICC_SMS
AppOpsManager.MODE_DEFAULT, // WRITE_SETTINGS
@@ -1328,7 +1328,7 @@
AppOpsManager.MODE_ALLOWED, // PROCESS_OUTGOING_CALLS
AppOpsManager.MODE_ALLOWED, // USE_FINGERPRINT
AppOpsManager.MODE_ALLOWED, // BODY_SENSORS
- AppOpsManager.MODE_DEFAULT, // READ_CELL_BROADCASTS
+ AppOpsManager.MODE_ALLOWED, // READ_CELL_BROADCASTS
AppOpsManager.MODE_ERRORED, // MOCK_LOCATION
AppOpsManager.MODE_ALLOWED, // READ_EXTERNAL_STORAGE
AppOpsManager.MODE_ALLOWED, // WRITE_EXTERNAL_STORAGE
diff --git a/core/java/android/app/AutomaticZenRule.java b/core/java/android/app/AutomaticZenRule.java
index 62f6bac..9d68133 100644
--- a/core/java/android/app/AutomaticZenRule.java
+++ b/core/java/android/app/AutomaticZenRule.java
@@ -151,7 +151,7 @@
* Gets the zen policy.
*/
public ZenPolicy getZenPolicy() {
- return this.mZenPolicy.copy();
+ return mZenPolicy == null ? null : this.mZenPolicy.copy();
}
/**
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 357420b..bd9cf6d 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -146,6 +146,7 @@
int getZenMode();
ZenModeConfig getZenModeConfig();
+ NotificationManager.Policy getConsolidatedNotificationPolicy();
oneway void setZenMode(int mode, in Uri conditionId, String reason);
oneway void notifyConditions(String pkg, in IConditionProvider provider, in Condition[] conditions);
boolean isNotificationPolicyAccessGranted(String pkg);
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 3f07024..89ec19b 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -825,6 +825,18 @@
/**
* @hide
*/
+ public NotificationManager.Policy getConsolidatedNotificationPolicy() {
+ INotificationManager service = getService();
+ try {
+ return service.getConsolidatedNotificationPolicy();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @hide
+ */
public int getRuleInstanceCount(ComponentName owner) {
INotificationManager service = getService();
try {
@@ -1062,7 +1074,7 @@
}
/**
- * Gets the current notification policy.
+ * Gets the current user-specified default notification policy.
*
* <p>
*/
@@ -1621,6 +1633,71 @@
return new Policy[size];
}
};
+
+ /** @hide **/
+ public boolean allowAlarms() {
+ return (priorityCategories & PRIORITY_CATEGORY_ALARMS) != 0;
+ }
+
+ /** @hide **/
+ public boolean allowMedia() {
+ return (priorityCategories & PRIORITY_CATEGORY_MEDIA) != 0;
+ }
+
+ /** @hide **/
+ public boolean allowSystem() {
+ return (priorityCategories & PRIORITY_CATEGORY_SYSTEM) != 0;
+ }
+
+ /** @hide **/
+ public boolean allowRepeatCallers() {
+ return (priorityCategories & PRIORITY_CATEGORY_REPEAT_CALLERS) != 0;
+ }
+
+ /** @hide **/
+ public boolean allowCalls() {
+ return (priorityCategories & PRIORITY_CATEGORY_CALLS) != 0;
+ }
+
+ /** @hide **/
+ public boolean allowMessages() {
+ return (priorityCategories & PRIORITY_CATEGORY_MESSAGES) != 0;
+ }
+
+ /** @hide **/
+ public boolean allowEvents() {
+ return (priorityCategories & PRIORITY_CATEGORY_EVENTS) != 0;
+ }
+
+ /** @hide **/
+ public boolean allowReminders() {
+ return (priorityCategories & PRIORITY_CATEGORY_REMINDERS) != 0;
+ }
+
+ /** @hide **/
+ public int allowCallsFrom() {
+ return priorityCallSenders;
+ }
+
+ /** @hide **/
+ public int allowMessagesFrom() {
+ return priorityMessageSenders;
+ }
+
+ /**
+ * returns a deep copy of this policy
+ * @hide
+ */
+ public Policy copy() {
+ final Parcel parcel = Parcel.obtain();
+ try {
+ writeToParcel(parcel, 0);
+ parcel.setDataPosition(0);
+ return new Policy(parcel);
+ } finally {
+ parcel.recycle();
+ }
+ }
}
/**
@@ -1708,5 +1785,4 @@
default: return defValue;
}
}
-
}
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 77cebc8..508ea3b 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -48,6 +48,8 @@
import android.content.pm.PackageManager;
import android.content.pm.ShortcutManager;
import android.content.res.Resources;
+import android.debug.AdbManager;
+import android.debug.IAdbManager;
import android.hardware.ConsumerIrManager;
import android.hardware.ISerialManager;
import android.hardware.SensorManager;
@@ -583,6 +585,15 @@
return new UsbManager(ctx, IUsbManager.Stub.asInterface(b));
}});
+ registerService(Context.ADB_SERVICE, AdbManager.class,
+ new CachedServiceFetcher<AdbManager>() {
+ @Override
+ public AdbManager createService(ContextImpl ctx)
+ throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.ADB_SERVICE);
+ return new AdbManager(ctx, IAdbManager.Stub.asInterface(b));
+ }});
+
registerService(Context.SERIAL_SERVICE, SerialManager.class,
new CachedServiceFetcher<SerialManager>() {
@Override
diff --git a/core/java/android/app/role/IRoleManager.aidl b/core/java/android/app/role/IRoleManager.aidl
index 64f69c1..2cf13ec2 100644
--- a/core/java/android/app/role/IRoleManager.aidl
+++ b/core/java/android/app/role/IRoleManager.aidl
@@ -36,4 +36,8 @@
in IRoleManagerCallback callback);
void clearRoleHoldersAsUser(in String roleName, int userId, in IRoleManagerCallback callback);
+
+ boolean addRoleHolderFromController(in String roleName, in String packageName);
+
+ boolean removeRoleHolderFromController(in String roleName, in String packageName);
}
diff --git a/core/java/android/app/role/RoleManager.java b/core/java/android/app/role/RoleManager.java
index f7c6dea..ed27d9f 100644
--- a/core/java/android/app/role/RoleManager.java
+++ b/core/java/android/app/role/RoleManager.java
@@ -22,19 +22,16 @@
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
-import android.util.ArraySet;
import com.android.internal.util.Preconditions;
import java.util.List;
-import java.util.Set;
import java.util.concurrent.Executor;
/**
@@ -51,8 +48,8 @@
* role holders. To qualify for a role, an application must meet certain requirements, including
* defining certain components in its manifest. These requirements can be found in the AndroidX
* Libraries. Then the application will need user consent to become a role holder, which can be
- * requested using {@link Activity#startActivityForResult(Intent, int)} with the {@code Intent}
- * obtained from {@link #createRequestRoleIntent(String)}.
+ * requested using {@link android.app.Activity#startActivityForResult(Intent, int)} with the
+ * {@code Intent} obtained from {@link #createRequestRoleIntent(String)}.
* <p>
* Upon becoming a role holder, the application may be granted certain privileges that are role
* specific. When the application loses its role, these privileges will also be revoked.
@@ -89,6 +86,14 @@
@SystemApi
public static final String EXTRA_REQUEST_ROLE_NAME = "android.app.role.extra.REQUEST_ROLE_NAME";
+ /**
+ * The permission required to manage records of role holders in {@link RoleManager} directly.
+ *
+ * @hide
+ */
+ public static final String PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER =
+ "com.android.permissioncontroller.permission.MANAGE_ROLE_HOLDERS_FROM_CONTROLLER";
+
@NonNull
private final Context mContext;
@@ -105,11 +110,13 @@
}
/**
- * Returns an {@code Intent} suitable for passing to {@link Activity#startActivityForResult(
- * Intent, int)} which prompts the user to grant a role to this application.
+ * Returns an {@code Intent} suitable for passing to
+ * {@link android.app.Activity#startActivityForResult(Intent, int)} which prompts the user to
+ * grant a role to this application.
* <p>
- * If the role is granted, the {@code resultCode} will be {@link Activity#RESULT_OK}, otherwise
- * it will be {@link Activity#RESULT_CANCELED}.
+ * If the role is granted, the {@code resultCode} will be
+ * {@link android.app.Activity#RESULT_OK}, otherwise it will be
+ * {@link android.app.Activity#RESULT_CANCELED}.
*
* @param roleName the name of requested role
*
@@ -165,14 +172,37 @@
/**
* Get package names of the applications holding the role.
* <p>
- * <strong>Note: </strong>Using this API requires holding
+ * <strong>Note:</strong> Using this API requires holding
+ * {@code android.permission.MANAGE_ROLE_HOLDERS}.
+ *
+ * @param roleName the name of the role to get the role holder for
+ *
+ * @return a list of package names of the role holders, or an empty list if none.
+ *
+ * @throws IllegalArgumentException if the role name is {@code null} or empty.
+ *
+ * @see #getRoleHoldersAsUser(String, UserHandle)
+ *
+ * @hide
+ */
+ @NonNull
+ @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
+ @SystemApi
+ public List<String> getRoleHolders(@NonNull String roleName) {
+ return getRoleHoldersAsUser(roleName, UserHandle.of(UserHandle.getCallingUserId()));
+ }
+
+ /**
+ * Get package names of the applications holding the role.
+ * <p>
+ * <strong>Note:</strong> Using this API requires holding
* {@code android.permission.MANAGE_ROLE_HOLDERS} and if the user id is not the current user
* {@code android.permission.INTERACT_ACROSS_USERS_FULL}.
*
* @param roleName the name of the role to get the role holder for
* @param user the user to get the role holder for
*
- * @return the package name of the role holder, or {@code null} if none.
+ * @return a list of package names of the role holders, or an empty list if none.
*
* @throws IllegalArgumentException if the role name is {@code null} or empty.
*
@@ -185,23 +215,21 @@
@NonNull
@RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
@SystemApi
- public Set<String> getRoleHoldersAsUser(@NonNull String roleName, @NonNull UserHandle user) {
+ public List<String> getRoleHoldersAsUser(@NonNull String roleName, @NonNull UserHandle user) {
Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
Preconditions.checkNotNull(user, "user cannot be null");
- List<String> roleHolders;
try {
- roleHolders = mService.getRoleHoldersAsUser(roleName, user.getIdentifier());
+ return mService.getRoleHoldersAsUser(roleName, user.getIdentifier());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
- return new ArraySet<>(roleHolders);
}
/**
* Add a specific application to the holders of a role. If the role is exclusive, the previous
* holder will be replaced.
* <p>
- * <strong>Note: </strong>Using this API requires holding
+ * <strong>Note:</strong> Using this API requires holding
* {@code android.permission.MANAGE_ROLE_HOLDERS} and if the user id is not the current user
* {@code android.permission.INTERACT_ACROSS_USERS_FULL}.
*
@@ -240,7 +268,7 @@
/**
* Remove a specific application from the holders of a role.
* <p>
- * <strong>Note: </strong>Using this API requires holding
+ * <strong>Note:</strong> Using this API requires holding
* {@code android.permission.MANAGE_ROLE_HOLDERS} and if the user id is not the current user
* {@code android.permission.INTERACT_ACROSS_USERS_FULL}.
*
@@ -279,7 +307,7 @@
/**
* Remove all holders of a role.
* <p>
- * <strong>Note: </strong>Using this API requires holding
+ * <strong>Note:</strong> Using this API requires holding
* {@code android.permission.MANAGE_ROLE_HOLDERS} and if the user id is not the current user
* {@code android.permission.INTERACT_ACROSS_USERS_FULL}.
*
@@ -312,6 +340,74 @@
}
}
+ /**
+ * Add a specific application to the holders of a role, only modifying records inside
+ * {@link RoleManager}. Should only be called from
+ * {@link android.rolecontrollerservice.RoleControllerService}.
+ * <p>
+ * <strong>Note:</strong> Using this API requires holding
+ * {@link #PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER}.
+ *
+ * @param roleName the name of the role to add the role holder for
+ * @param packageName the package name of the application to add to the role holders
+ *
+ * @return whether the operation was successful, and will also be {@code true} if a matching
+ * role holder is already found.
+ *
+ * @throws IllegalArgumentException if the role name or package name is {@code null} or empty.
+ *
+ * @see #getRoleHolders(String)
+ * @see #removeRoleHolderFromController(String, String)
+ *
+ * @hide
+ */
+ @RequiresPermission(PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER)
+ @SystemApi
+ public boolean addRoleHolderFromController(@NonNull String roleName,
+ @NonNull String packageName) {
+ Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
+ Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty");
+ try {
+ return mService.addRoleHolderFromController(roleName, packageName);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Remove a specific application from the holders of a role, only modifying records inside
+ * {@link RoleManager}. Should only be called from
+ * {@link android.rolecontrollerservice.RoleControllerService}.
+ * <p>
+ * <strong>Note:</strong> Using this API requires holding
+ * {@link #PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER}.
+ *
+ * @param roleName the name of the role to remove the role holder for
+ * @param packageName the package name of the application to remove from the role holders
+ *
+ * @return whether the operation was successful, and will also be {@code true} if no matching
+ * role holder was found to remove.
+ *
+ * @throws IllegalArgumentException if the role name or package name is {@code null} or empty.
+ *
+ * @see #getRoleHolders(String)
+ * @see #addRoleHolderFromController(String, String)
+ *
+ * @hide
+ */
+ @RequiresPermission(PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER)
+ @SystemApi
+ public boolean removeRoleHolderFromController(@NonNull String roleName,
+ @NonNull String packageName) {
+ Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
+ Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty");
+ try {
+ return mService.removeRoleHolderFromController(roleName, packageName);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
private static class RoleManagerCallbackDelegate extends IRoleManagerCallback.Stub {
@NonNull
diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java
index a9187b6..c6e94c7 100644
--- a/core/java/android/appwidget/AppWidgetHostView.java
+++ b/core/java/android/appwidget/AppWidgetHostView.java
@@ -17,8 +17,12 @@
package android.appwidget;
import android.annotation.UnsupportedAppUsage;
+import android.app.Activity;
+import android.app.ActivityOptions;
import android.content.ComponentName;
import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
@@ -30,6 +34,7 @@
import android.os.Parcelable;
import android.util.AttributeSet;
import android.util.Log;
+import android.util.Pair;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -44,6 +49,8 @@
import android.widget.RemoteViewsAdapter.RemoteAdapterConnectionCallback;
import android.widget.TextView;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.Executor;
/**
@@ -651,4 +658,39 @@
super.onInitializeAccessibilityNodeInfoInternal(info);
info.setClassName(AppWidgetHostView.class.getName());
}
+
+ /** @hide */
+ public ActivityOptions createSharedElementActivityOptions(
+ int[] sharedViewIds, String[] sharedViewNames, Intent fillInIntent) {
+ Context parentContext = getContext();
+ while ((parentContext instanceof ContextWrapper)
+ && !(parentContext instanceof Activity)) {
+ parentContext = ((ContextWrapper) parentContext).getBaseContext();
+ }
+ if (!(parentContext instanceof Activity)) {
+ return null;
+ }
+
+ List<Pair<View, String>> sharedElements = new ArrayList<>();
+ Bundle extras = new Bundle();
+
+ for (int i = 0; i < sharedViewIds.length; i++) {
+ View view = findViewById(sharedViewIds[i]);
+ if (view != null) {
+ sharedElements.add(Pair.create(view, sharedViewNames[i]));
+
+ extras.putParcelable(sharedViewNames[i], RemoteViews.getSourceBounds(view));
+ }
+ }
+
+ if (!sharedElements.isEmpty()) {
+ fillInIntent.putExtra(RemoteViews.EXTRA_SHARED_ELEMENT_BOUNDS, extras);
+ final ActivityOptions opts = ActivityOptions.makeSceneTransitionAnimation(
+ (Activity) parentContext,
+ sharedElements.toArray(new Pair[sharedElements.size()]));
+ opts.setPendingIntentLaunchFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ return opts;
+ }
+ return null;
+ }
}
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 713cc8b..e378800 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -3967,6 +3967,18 @@
/**
* Use with {@link #getSystemService(String)} to retrieve a {@link
+ * Use with {@link #getSystemService} to retrieve a {@link
+ * android.debug.AdbManager} for access to ADB debug functions.
+ *
+ * @see #getSystemService(String)
+ * @see android.debug.AdbManager
+ *
+ * @hide
+ */
+ public static final String ADB_SERVICE = "adb";
+
+ /**
+ * Use with {@link #getSystemService(String)} to retrieve a {@link
* android.hardware.SerialManager} for access to serial ports.
*
* @see #getSystemService(String)
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index c33f143..6b5c659 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -635,6 +635,13 @@
*/
public static final int PRIVATE_FLAG_USES_NON_SDK_API = 1 << 22;
+ /**
+ * Indicates whether this application can be profiled by the shell user,
+ * even when running on a device that is running in user mode.
+ * @hide
+ */
+ public static final int PRIVATE_FLAG_PROFILEABLE_BY_SHELL = 1 << 23;
+
/** @hide */
@IntDef(flag = true, prefix = { "PRIVATE_FLAG_" }, value = {
PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE,
@@ -654,6 +661,7 @@
PRIVATE_FLAG_PRIVILEGED,
PRIVATE_FLAG_PRODUCT,
PRIVATE_FLAG_PRODUCT_SERVICES,
+ PRIVATE_FLAG_PROFILEABLE_BY_SHELL,
PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER,
PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY,
PRIVATE_FLAG_STATIC_SHARED_LIBRARY,
@@ -1929,6 +1937,14 @@
}
/**
+ * Returns whether or not this application can be profiled by the shell user,
+ * even when running on a device that is running in user mode.
+ */
+ public boolean isProfileableByShell() {
+ return (privateFlags & PRIVATE_FLAG_PROFILEABLE_BY_SHELL) != 0;
+ }
+
+ /**
* Returns true if the app has declared in its manifest that it wants its split APKs to be
* loaded into isolated Contexts, with their own ClassLoaders and Resources objects.
* @hide
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 87c3075..dc33bde 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -3547,6 +3547,8 @@
com.android.internal.R.styleable.AndroidManifestApplication_debuggable,
false)) {
ai.flags |= ApplicationInfo.FLAG_DEBUGGABLE;
+ // Debuggable implies profileable
+ ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_PROFILEABLE_BY_SHELL;
}
if (sa.getBoolean(
@@ -3913,6 +3915,14 @@
// Dependencies for app installers; we don't currently try to
// enforce this.
XmlUtils.skipCurrentTag(parser);
+ } else if (tagName.equals("profileable")) {
+ sa = res.obtainAttributes(parser,
+ com.android.internal.R.styleable.AndroidManifestProfileable);
+ if (sa.getBoolean(
+ com.android.internal.R.styleable.AndroidManifestProfileable_shell, false)) {
+ ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_PROFILEABLE_BY_SHELL;
+ }
+ XmlUtils.skipCurrentTag(parser);
} else {
if (!RIGID_PARSER) {
diff --git a/core/java/android/debug/AdbManager.java b/core/java/android/debug/AdbManager.java
new file mode 100644
index 0000000..ae3d794
--- /dev/null
+++ b/core/java/android/debug/AdbManager.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.debug;
+
+import android.annotation.SystemService;
+import android.content.Context;
+
+/**
+ * This class allows the control of ADB-related functions. Currently only ADB over USB is
+ * supported, and none of the API is public.
+ *
+ * @hide
+ */
+@SystemService(Context.ADB_SERVICE)
+public class AdbManager {
+ private static final String TAG = "AdbManager";
+
+ private final Context mContext;
+ private final IAdbManager mService;
+
+ /**
+ * {@hide}
+ */
+ public AdbManager(Context context, IAdbManager service) {
+ mContext = context;
+ mService = service;
+ }
+}
diff --git a/core/java/android/debug/AdbManagerInternal.java b/core/java/android/debug/AdbManagerInternal.java
new file mode 100644
index 0000000..4469f0f
--- /dev/null
+++ b/core/java/android/debug/AdbManagerInternal.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.debug;
+
+/**
+ * This class allows the control of ADB-related functions that should only be called from the system
+ * server.
+ *
+ * @hide Only should be called from the system server.
+ */
+public abstract class AdbManagerInternal {
+ /**
+ * Registers a ADB transport mechanism.
+ *
+ * @param transport ADB transport interface to register
+ */
+ public abstract void registerTransport(IAdbTransport transport);
+
+ /**
+ * Unregisters a previously registered ADB transport mechanism.
+ *
+ * @param transport previously-added ADB transport interface to be removed
+ */
+ public abstract void unregisterTransport(IAdbTransport transport);
+
+ /**
+ * Returns {@code true} if ADB debugging is enabled.
+ */
+ public abstract boolean isAdbEnabled();
+}
diff --git a/core/java/android/debug/IAdbManager.aidl b/core/java/android/debug/IAdbManager.aidl
new file mode 100644
index 0000000..79e0794
--- /dev/null
+++ b/core/java/android/debug/IAdbManager.aidl
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.debug;
+
+/**
+ * Interface to communicate remotely with the {@code AdbService} in the system server.
+ *
+ * @hide
+ */
+interface IAdbManager {
+ /**
+ * Allow ADB debugging from the attached host. If {@code alwaysAllow} is
+ * {@code true}, add {@code publicKey} to list of host keys that the
+ * user has approved.
+ *
+ * @param alwaysAllow if true, add permanently to list of allowed keys
+ * @param publicKey RSA key in mincrypt format and Base64-encoded
+ */
+ void allowDebugging(boolean alwaysAllow, String publicKey);
+
+ /**
+ * Deny ADB debugging from the attached host.
+ */
+ void denyDebugging();
+
+ /**
+ * Clear all public keys installed for secure ADB debugging.
+ */
+ void clearDebuggingKeys();
+}
diff --git a/core/java/android/debug/IAdbTransport.aidl b/core/java/android/debug/IAdbTransport.aidl
new file mode 100644
index 0000000..77211fc93
--- /dev/null
+++ b/core/java/android/debug/IAdbTransport.aidl
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.debug;
+
+/** @hide */
+interface IAdbTransport {
+ void onAdbEnabled(boolean enabled);
+}
diff --git a/core/java/android/hardware/location/ContextHubIntentEvent.java b/core/java/android/hardware/location/ContextHubIntentEvent.java
new file mode 100644
index 0000000..96e7496
--- /dev/null
+++ b/core/java/android/hardware/location/ContextHubIntentEvent.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.hardware.location;
+
+import android.annotation.NonNull;
+import android.app.PendingIntent;
+import android.content.Intent;
+
+import com.android.internal.util.Preconditions;
+
+/**
+ * A helper class to retrieve information about a Intent event received for a PendingIntent
+ * registered through {@link ContextHubClient.registerIntent(PendingIntent, long)}. This object
+ * can only be created through the factory method {@link ContextHubIntentEvent.fromIntent(Intent)}.
+ *
+ * @hide
+ */
+public class ContextHubIntentEvent {
+ @ContextHubManager.Event private final int mEventType;
+
+ @NonNull private final ContextHubInfo mContextHubInfo;
+
+ private final long mNanoAppId;
+
+ private final NanoAppMessage mNanoAppMessage;
+
+ private final int mNanoAppAbortCode;
+
+ private ContextHubIntentEvent(
+ @NonNull ContextHubInfo contextHubInfo, @ContextHubManager.Event int eventType,
+ long nanoAppId, NanoAppMessage nanoAppMessage, int nanoAppAbortCode) {
+ mContextHubInfo = contextHubInfo;
+ mEventType = eventType;
+ mNanoAppId = nanoAppId;
+ mNanoAppMessage = nanoAppMessage;
+ mNanoAppAbortCode = nanoAppAbortCode;
+ }
+
+ private ContextHubIntentEvent(
+ @NonNull ContextHubInfo contextHubInfo, @ContextHubManager.Event int eventType) {
+ this(contextHubInfo, eventType, -1 /* nanoAppId */, null /* nanoAppMessage */,
+ -1 /* nanoAppAbortCode */);
+ }
+
+ private ContextHubIntentEvent(
+ @NonNull ContextHubInfo contextHubInfo, @ContextHubManager.Event int eventType,
+ long nanoAppId) {
+ this(contextHubInfo, eventType, nanoAppId, null /* nanoAppMessage */,
+ -1 /* nanoAppAbortCode */);
+ }
+
+ private ContextHubIntentEvent(
+ @NonNull ContextHubInfo contextHubInfo, @ContextHubManager.Event int eventType,
+ long nanoAppId, @NonNull NanoAppMessage nanoAppMessage) {
+ this(contextHubInfo, eventType, nanoAppId, nanoAppMessage, -1 /* nanoAppAbortCode */);
+ }
+
+ private ContextHubIntentEvent(
+ @NonNull ContextHubInfo contextHubInfo, @ContextHubManager.Event int eventType,
+ long nanoAppId, int nanoAppAbortCode) {
+ this(contextHubInfo, eventType, nanoAppId, null /* nanoAppMessage */, nanoAppAbortCode);
+ }
+
+ /**
+ * Creates a ContextHubIntentEvent object from an Intent received through a PendingIntent
+ * registered through {@link ContextHubClient.registerIntent(PendingIntent, long)}.
+ *
+ * @param intent the Intent object from an Intent event
+ * @return the ContextHubIntentEvent object describing the event
+ *
+ * @throws IllegalArgumentException if the Intent was not a valid intent
+ */
+ @NonNull
+ public static ContextHubIntentEvent fromIntent(@NonNull Intent intent) {
+ Preconditions.checkNotNull(intent, "Intent cannot be null");
+
+ hasExtraOrThrow(intent, ContextHubManager.EXTRA_CONTEXT_HUB_INFO);
+ ContextHubInfo info = intent.getParcelableExtra(ContextHubManager.EXTRA_CONTEXT_HUB_INFO);
+ if (info == null) {
+ throw new IllegalArgumentException("ContextHubInfo extra was null");
+ }
+
+ int eventType = getIntExtraOrThrow(intent, ContextHubManager.EXTRA_EVENT_TYPE);
+ ContextHubIntentEvent event;
+ switch (eventType) {
+ case ContextHubManager.EVENT_NANOAPP_LOADED:
+ case ContextHubManager.EVENT_NANOAPP_UNLOADED:
+ case ContextHubManager.EVENT_NANOAPP_ENABLED:
+ case ContextHubManager.EVENT_NANOAPP_DISABLED:
+ case ContextHubManager.EVENT_NANOAPP_ABORTED:
+ case ContextHubManager.EVENT_NANOAPP_MESSAGE: // fall through
+ long nanoAppId = getLongExtraOrThrow(intent, ContextHubManager.EXTRA_NANOAPP_ID);
+ if (eventType == ContextHubManager.EVENT_NANOAPP_MESSAGE) {
+ hasExtraOrThrow(intent, ContextHubManager.EXTRA_MESSAGE);
+ NanoAppMessage message =
+ intent.getParcelableExtra(ContextHubManager.EXTRA_MESSAGE);
+ if (message == null) {
+ throw new IllegalArgumentException("NanoAppMessage extra was null");
+ }
+
+ event = new ContextHubIntentEvent(info, eventType, nanoAppId, message);
+ } else if (eventType == ContextHubManager.EVENT_NANOAPP_ABORTED) {
+ int nanoAppAbortCode = getIntExtraOrThrow(
+ intent, ContextHubManager.EXTRA_NANOAPP_ABORT_CODE);
+ event = new ContextHubIntentEvent(info, eventType, nanoAppId, nanoAppAbortCode);
+ } else {
+ event = new ContextHubIntentEvent(info, eventType, nanoAppId);
+ }
+ break;
+
+ case ContextHubManager.EVENT_HUB_RESET:
+ event = new ContextHubIntentEvent(info, eventType);
+ break;
+
+ default:
+ throw new IllegalArgumentException("Unknown intent event type " + eventType);
+ }
+
+ return event;
+ }
+
+ /**
+ * @return the event type of this Intent event
+ */
+ @ContextHubManager.Event
+ public int getEventType() {
+ return mEventType;
+ }
+
+ /**
+ * @return the ContextHubInfo object describing the Context Hub this event was for
+ */
+ @NonNull
+ public ContextHubInfo getContextHubInfo() {
+ return mContextHubInfo;
+ }
+
+ /**
+ * @return the ID of the nanoapp this event was for
+ *
+ * @throws UnsupportedOperationException if the event did not have a nanoapp associated
+ */
+ public long getNanoAppId() {
+ if (mEventType == ContextHubManager.EVENT_HUB_RESET) {
+ throw new UnsupportedOperationException(
+ "Cannot invoke getNanoAppId() on Context Hub reset event");
+ }
+ return mNanoAppId;
+ }
+
+ /**
+ * @return the nanoapp's abort code
+ *
+ * @throws UnsupportedOperationException if this was not a nanoapp abort event
+ */
+ public int getNanoAppAbortCode() {
+ if (mEventType != ContextHubManager.EVENT_NANOAPP_ABORTED) {
+ throw new UnsupportedOperationException(
+ "Cannot invoke getNanoAppAbortCode() on non-abort event: " + mEventType);
+ }
+ return mNanoAppAbortCode;
+ }
+
+ /**
+ * @return the message from a nanoapp
+ *
+ * @throws UnsupportedOperationException if this was not a nanoapp message event
+ */
+ @NonNull
+ public NanoAppMessage getNanoAppMessage() {
+ if (mEventType != ContextHubManager.EVENT_NANOAPP_MESSAGE) {
+ throw new UnsupportedOperationException(
+ "Cannot invoke getNanoAppMessage() on non-message event: " + mEventType);
+ }
+ return mNanoAppMessage;
+ }
+
+ @Override
+ public String toString() {
+ String out = "ContextHubIntentEvent[eventType = " + mEventType
+ + ", contextHubId = " + mContextHubInfo.getId();
+
+ if (mEventType != ContextHubManager.EVENT_HUB_RESET) {
+ out += ", nanoAppId = 0x" + Long.toHexString(mNanoAppId);
+ }
+ if (mEventType == ContextHubManager.EVENT_NANOAPP_ABORTED) {
+ out += ", nanoAppAbortCode = " + mNanoAppAbortCode;
+ }
+ if (mEventType == ContextHubManager.EVENT_NANOAPP_MESSAGE) {
+ out += ", nanoAppMessage = " + mNanoAppMessage;
+ }
+
+ return out + "]";
+ }
+
+ private static void hasExtraOrThrow(Intent intent, String extra) {
+ if (!intent.hasExtra(extra)) {
+ throw new IllegalArgumentException("Intent did not have extra: " + extra);
+ }
+ }
+
+ private static int getIntExtraOrThrow(Intent intent, String extra) {
+ hasExtraOrThrow(intent, extra);
+ return intent.getIntExtra(extra, -1 /* defaultValue */);
+ }
+
+ private static long getLongExtraOrThrow(Intent intent, String extra) {
+ hasExtraOrThrow(intent, extra);
+ return intent.getLongExtra(extra, -1 /* defaultValue */);
+ }
+}
diff --git a/core/java/android/hardware/location/NanoApp.java b/core/java/android/hardware/location/NanoApp.java
index ded1bb8..62e7182 100644
--- a/core/java/android/hardware/location/NanoApp.java
+++ b/core/java/android/hardware/location/NanoApp.java
@@ -20,6 +20,8 @@
import android.os.Parcelable;
import android.util.Log;
+import com.android.internal.util.Preconditions;
+
/** A class describing nano apps.
* A nano app is a piece of executable code that can be
* downloaded onto a specific architecture. These are targtted
@@ -195,10 +197,12 @@
* needed Sensors
*/
public void setNeededSensors(int[] neededSensors) {
+ Preconditions.checkNotNull(neededSensors, "neededSensors must not be null");
mNeededSensors = neededSensors;
}
public void setOutputEvents(int[] outputEvents) {
+ Preconditions.checkNotNull(outputEvents, "outputEvents must not be null");
mOutputEvents = outputEvents;
}
@@ -208,10 +212,10 @@
* @param appBinary generated events
*/
public void setAppBinary(byte[] appBinary) {
+ Preconditions.checkNotNull(appBinary, "appBinary must not be null");
mAppBinary = appBinary;
}
-
/**
* get the publisher name
*
diff --git a/core/java/android/hardware/usb/IUsbManager.aidl b/core/java/android/hardware/usb/IUsbManager.aidl
index 6d9c913..f4e776c 100644
--- a/core/java/android/hardware/usb/IUsbManager.aidl
+++ b/core/java/android/hardware/usb/IUsbManager.aidl
@@ -111,17 +111,6 @@
*/
ParcelFileDescriptor getControlFd(long function);
- /* Allow USB debugging from the attached host. If alwaysAllow is true, add the
- * the public key to list of host keys that the user has approved.
- */
- void allowUsbDebugging(boolean alwaysAllow, String publicKey);
-
- /* Deny USB debugging from the attached host */
- void denyUsbDebugging();
-
- /* Clear public keys installed for secure USB debugging */
- void clearUsbDebuggingKeys();
-
/* Gets the list of USB ports. */
UsbPort[] getPorts();
diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java
index e4f0358..da4b823 100644
--- a/core/java/android/os/Binder.java
+++ b/core/java/android/os/Binder.java
@@ -249,6 +249,7 @@
* If the current thread is not currently executing an incoming transaction,
* then its own pid is returned.
*/
+ @CriticalNative
public static final native int getCallingPid();
/**
@@ -258,6 +259,7 @@
* permissions. If the current thread is not currently executing an
* incoming transaction, then its own uid is returned.
*/
+ @CriticalNative
public static final native int getCallingUid();
/**
@@ -288,6 +290,7 @@
* @see #getCallingUid()
* @see #restoreCallingIdentity(long)
*/
+ @CriticalNative
public static final native long clearCallingIdentity();
/**
@@ -364,6 +367,7 @@
* @see StrictMode
* @hide
*/
+ @CriticalNative
public static final native void setThreadStrictModePolicy(int policyMask);
/**
@@ -372,6 +376,7 @@
* @see #setThreadStrictModePolicy
* @hide
*/
+ @CriticalNative
public static final native int getThreadStrictModePolicy();
/**
diff --git a/core/java/android/os/RemoteCallbackList.java b/core/java/android/os/RemoteCallbackList.java
index bbb8a7b..be8f784 100644
--- a/core/java/android/os/RemoteCallbackList.java
+++ b/core/java/android/os/RemoteCallbackList.java
@@ -419,9 +419,11 @@
/** @hide */
public void dump(PrintWriter pw, String prefix) {
- pw.print(prefix); pw.print("callbacks: "); pw.println(mCallbacks.size());
- pw.print(prefix); pw.print("killed: "); pw.println(mKilled);
- pw.print(prefix); pw.print("broadcasts count: "); pw.println(mBroadcastCount);
+ synchronized (mCallbacks) {
+ pw.print(prefix); pw.print("callbacks: "); pw.println(mCallbacks.size());
+ pw.print(prefix); pw.print("killed: "); pw.println(mKilled);
+ pw.print(prefix); pw.print("broadcasts count: "); pw.println(mBroadcastCount);
+ }
}
private void logExcessiveCallbacks() {
diff --git a/core/java/android/os/storage/StorageManagerInternal.java b/core/java/android/os/storage/StorageManagerInternal.java
index 816a730..f521c68 100644
--- a/core/java/android/os/storage/StorageManagerInternal.java
+++ b/core/java/android/os/storage/StorageManagerInternal.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.os.IVold;
/**
* Mount service local interface.
@@ -111,4 +112,24 @@
* @return Labels of storage volumes that are visible to the given userId.
*/
public abstract String[] getVisibleVolumesForUser(int userId);
+
+ /**
+ * A listener for reset events in the StorageManagerService.
+ */
+ public interface ResetListener {
+ /**
+ * A method that should be triggered internally by StorageManagerInternal
+ * when StorageManagerService reset happens.
+ *
+ * @param vold The binder object to vold.
+ */
+ void onReset(IVold vold);
+ }
+
+ /**
+ * Add a listener to listen to reset event in StorageManagerService.
+ *
+ * @param listener The listener that will be notified on reset events.
+ */
+ public abstract void addResetListener(ResetListener listener);
}
diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java
index 7ffb22f..fc30eed 100644
--- a/core/java/android/permission/PermissionManager.java
+++ b/core/java/android/permission/PermissionManager.java
@@ -16,16 +16,15 @@
package android.permission;
-import android.Manifest;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.content.Context;
import com.android.internal.annotations.Immutable;
+import com.android.server.SystemConfig;
-import java.util.Arrays;
-import java.util.Collections;
+import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -42,28 +41,8 @@
*
* @hide
*/
- public static final List<SplitPermissionInfo> SPLIT_PERMISSIONS = Arrays.asList(
- // READ_EXTERNAL_STORAGE is always required when an app requests
- // WRITE_EXTERNAL_STORAGE, because we can't have an app that has
- // write access without read access. The hack here with the target
- // target SDK version ensures that this grant is always done.
- new SplitPermissionInfo(android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Collections.singletonList(android.Manifest.permission.READ_EXTERNAL_STORAGE),
- android.os.Build.VERSION_CODES.CUR_DEVELOPMENT + 1),
- new SplitPermissionInfo(android.Manifest.permission.READ_CONTACTS,
- Collections.singletonList(android.Manifest.permission.READ_CALL_LOG),
- android.os.Build.VERSION_CODES.JELLY_BEAN),
- new SplitPermissionInfo(android.Manifest.permission.WRITE_CONTACTS,
- Collections.singletonList(android.Manifest.permission.WRITE_CALL_LOG),
- android.os.Build.VERSION_CODES.JELLY_BEAN),
- new SplitPermissionInfo(Manifest.permission.ACCESS_FINE_LOCATION,
- Collections.singletonList(
- android.Manifest.permission.ACCESS_BACKGROUND_LOCATION),
- android.os.Build.VERSION_CODES.P0),
- new SplitPermissionInfo(Manifest.permission.ACCESS_COARSE_LOCATION,
- Collections.singletonList(
- android.Manifest.permission.ACCESS_BACKGROUND_LOCATION),
- android.os.Build.VERSION_CODES.P0));
+ public static final ArrayList<SplitPermissionInfo> SPLIT_PERMISSIONS =
+ SystemConfig.getInstance().getSplitPermissions();
private final @NonNull Context mContext;
@@ -145,9 +124,18 @@
return mTargetSdk;
}
- private SplitPermissionInfo(@NonNull String rootPerm, @NonNull List<String> newPerms,
+ /**
+ * Constructs a split permission.
+ *
+ * @param splitPerm old permission that will be split
+ * @param newPerms list of new permissions that {@code rootPerm} will be split into
+ * @param targetSdk apps targetting SDK versions below this will have {@code rootPerm}
+ * split into {@code newPerms}
+ * @hide
+ */
+ public SplitPermissionInfo(@NonNull String splitPerm, @NonNull List<String> newPerms,
int targetSdk) {
- mSplitPerm = rootPerm;
+ mSplitPerm = splitPerm;
mNewPerms = newPerms;
mTargetSdk = targetSdk;
}
diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java
index 0e782d7..68f8acd 100644
--- a/core/java/android/provider/DocumentsProvider.java
+++ b/core/java/android/provider/DocumentsProvider.java
@@ -461,6 +461,41 @@
}
/**
+ * Return recently modified documents under the requested root. This will
+ * only be called for roots that advertise
+ * {@link Root#FLAG_SUPPORTS_RECENTS}. The returned documents should be
+ * sorted by {@link Document#COLUMN_LAST_MODIFIED} in descending order of
+ * the most recently modified documents.
+ * <p>
+ * If this method is overriden by the concrete DocumentsProvider and
+ * QUERY_ARGS_LIMIT is specified with a nonnegative int under queryArgs, the
+ * result will be limited by that number and QUERY_ARG_LIMIT will be
+ * specified under EXTRA_HONORED_ARGS. Otherwise, a default 64 limit will
+ * be used and no QUERY_ARG* will be specified under EXTRA_HONORED_ARGS.
+ * <p>
+ * Recent documents do not support change notifications.
+ *
+ * @param projection list of {@link Document} columns to put into the
+ * cursor. If {@code null} all supported columns should be
+ * included.
+ * @param queryArgs the extra query arguments.
+ * @param signal used by the caller to signal if the request should be
+ * cancelled. May be null.
+ * @see DocumentsContract#EXTRA_LOADING
+ */
+ @SuppressWarnings("unused")
+ public Cursor queryRecentDocuments(
+ String rootId, String[] projection, @Nullable Bundle queryArgs,
+ @Nullable CancellationSignal signal)
+ throws FileNotFoundException {
+ Cursor c = queryRecentDocuments(rootId, projection);
+ Bundle extras = new Bundle();
+ c.setExtras(extras);
+ extras.putStringArray(ContentResolver.EXTRA_HONORED_ARGS, new String[0]);
+ return c;
+ }
+
+ /**
* Return metadata for the single requested document. You should avoid
* making network requests to keep this request fast.
*
@@ -774,7 +809,7 @@
* Implementation is provided by the parent class. Cannot be overridden.
*
* @see #queryRoots(String[])
- * @see #queryRecentDocuments(String, String[])
+ * @see #queryRecentDocuments(String, String[], Bundle, CancellationSignal)
* @see #queryDocument(String, String[])
* @see #queryChildDocuments(String, String[], String)
* @see #querySearchDocuments(String, String, String[])
@@ -787,7 +822,8 @@
case MATCH_ROOTS:
return queryRoots(projection);
case MATCH_RECENT:
- return queryRecentDocuments(getRootId(uri), projection);
+ return queryRecentDocuments(
+ getRootId(uri), projection, queryArgs, cancellationSignal);
case MATCH_SEARCH:
return querySearchDocuments(
getRootId(uri), getSearchDocumentsQuery(uri), projection);
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java
index 1fce8e6..19b84f1 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -21,6 +21,8 @@
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.UnsupportedAppUsage;
+import android.app.Activity;
+import android.app.AppGlobals;
import android.content.ClipData;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
@@ -37,21 +39,27 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
-import android.os.Environment;
import android.os.OperationCanceledException;
import android.os.RemoteException;
+import android.os.storage.StorageManager;
+import android.os.storage.StorageVolume;
+import android.os.storage.VolumeInfo;
import android.service.media.CameraPrewarmService;
import android.util.ArrayMap;
+import android.util.ArraySet;
import android.util.Log;
import com.android.internal.annotations.GuardedBy;
+import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
/**
* The Media provider contains meta data for all available media on both internal
@@ -65,7 +73,8 @@
/** A content:// style uri to the authority for the media provider */
public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);
- private static final String CONTENT_AUTHORITY_SLASH = "content://" + AUTHORITY + "/";
+ private static final String VOLUME_INTERNAL = "internal";
+ private static final String VOLUME_EXTERNAL = "external";
/**
* The method name used by the media scanner and mtp to tell the media provider to
@@ -266,7 +275,7 @@
* any personal content like existing photos or videos on the device. The
* applications should be careful not to share any photo or video with other
* applications or internet. The activity should use {@link
- * android.view.WindowManager.LayoutParams#FLAG_SHOW_WHEN_LOCKED} to display
+ * Activity#setShowWhenLocked} to display
* on top of the lock screen while secured. There is no activity stack when
* this flag is used, so launching more than one activity is strongly
* discouraged.
@@ -311,8 +320,8 @@
* it when the device is secured (e.g. with a pin, password, pattern, or face unlock).
* Applications responding to this intent must not expose any personal content like existing
* photos or videos on the device. The applications should be careful not to share any photo
- * or video with other applications or internet. The activity should use {@link
- * android.view.WindowManager.LayoutParams#FLAG_SHOW_WHEN_LOCKED} to display on top of the
+ * or video with other applications or Internet. The activity should use {@link
+ * Activity#setShowWhenLocked} to display on top of the
* lock screen while secured. There is no activity stack when this flag is used, so
* launching more than one activity is strongly discouraged.
* <p>
@@ -364,6 +373,55 @@
public final static String ACTION_VIDEO_CAPTURE = "android.media.action.VIDEO_CAPTURE";
/**
+ * Standard action that can be sent to review the given media file.
+ * <p>
+ * The launched application is expected to provide a large-scale view of the
+ * given media file, while allowing the user to quickly access other
+ * recently captured media files.
+ * <p>
+ * Input: {@link Intent#getData} is URI of the primary media item to
+ * initially display.
+ *
+ * @see #ACTION_REVIEW_SECURE
+ * @see #EXTRA_BRIGHTNESS
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public final static String ACTION_REVIEW = "android.provider.action.REVIEW";
+
+ /**
+ * Standard action that can be sent to review the given media file when the
+ * device is secured (e.g. with a pin, password, pattern, or face unlock).
+ * The applications should be careful not to share any media with other
+ * applications or Internet. The activity should use
+ * {@link Activity#setShowWhenLocked} to display on top of the lock screen
+ * while secured. There is no activity stack when this flag is used, so
+ * launching more than one activity is strongly discouraged.
+ * <p>
+ * The launched application is expected to provide a large-scale view of the
+ * given primary media file, while only allowing the user to quickly access
+ * other media from an explicit secondary list.
+ * <p>
+ * Input: {@link Intent#getData} is URI of the primary media item to
+ * initially display. {@link Intent#getClipData} is the limited list of
+ * secondary media items that the user is allowed to review. If
+ * {@link Intent#getClipData} is undefined, then no other media access
+ * should be allowed.
+ *
+ * @see #EXTRA_BRIGHTNESS
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public final static String ACTION_REVIEW_SECURE = "android.provider.action.REVIEW_SECURE";
+
+ /**
+ * When defined, the launched application is requested to set the given
+ * brightness value via
+ * {@link android.view.WindowManager.LayoutParams#screenBrightness} to help
+ * ensure a smooth transition when launching {@link #ACTION_REVIEW} or
+ * {@link #ACTION_REVIEW_SECURE} intents.
+ */
+ public final static String EXTRA_BRIGHTNESS = "android.provider.extra.BRIGHTNESS";
+
+ /**
* The name of the Intent-extra used to control the quality of a recorded video. This is an
* integer property. Currently value 0 means low quality, suitable for MMS messages, and
* value 1 means high quality. In the future other quality levels may be added.
@@ -420,6 +478,23 @@
public static final String DATA = "_data";
/**
+ * Hash of the file on disk.
+ * <p>
+ * Contains a 20-byte binary blob which is the SHA-1 hash of the file as
+ * persisted on disk. For performance reasons, the hash may not be
+ * immediately available, in which case a {@code NULL} value will be
+ * returned. If the underlying file is modified, this value will be
+ * cleared and recalculated.
+ * <p>
+ * If you require the hash of a specific item, you can call
+ * {@link ContentResolver#canonicalize(Uri)}, which will block until the
+ * hash is calculated.
+ * <p>
+ * Type: BLOB
+ */
+ public static final String HASH = "_hash";
+
+ /**
* The size of the file in bytes
* <P>Type: INTEGER (long)</P>
*/
@@ -509,8 +584,7 @@
* @return the URI to the files table on the given volume
*/
public static Uri getContentUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/file");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("file").build();
}
/**
@@ -523,8 +597,7 @@
*/
public static final Uri getContentUri(String volumeName,
long rowId) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName
- + "/file/" + rowId);
+ return ContentUris.withAppendedId(getContentUri(volumeName), rowId);
}
/**
@@ -533,8 +606,7 @@
*/
@UnsupportedAppUsage
public static Uri getMtpObjectsUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/object");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("object").build();
}
/**
@@ -544,8 +616,7 @@
@UnsupportedAppUsage
public static final Uri getMtpObjectsUri(String volumeName,
long fileId) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName
- + "/object/" + fileId);
+ return ContentUris.withAppendedId(getMtpObjectsUri(volumeName), fileId);
}
/**
@@ -555,8 +626,8 @@
@UnsupportedAppUsage
public static final Uri getMtpReferencesUri(String volumeName,
long fileId) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName
- + "/object/" + fileId + "/references");
+ return getMtpObjectsUri(volumeName, fileId).buildUpon().appendPath("references")
+ .build();
}
/**
@@ -564,7 +635,7 @@
* @hide
*/
public static final Uri getDirectoryUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + "/dir");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("dir").build();
}
/**
@@ -777,7 +848,7 @@
* <P>Type: INTEGER</P>
*
* @deprecated all thumbnails should be obtained via
- * {@link Images.Thumbnails#getThumbnail}, as this
+ * {@link MediaStore.Images.Thumbnails#getThumbnail}, as this
* value is no longer supported.
*/
@Deprecated
@@ -921,8 +992,8 @@
* @return the URI to the image media table on the given volume
*/
public static Uri getContentUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/images/media");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("images")
+ .appendPath("media").build();
}
/**
@@ -1063,8 +1134,8 @@
* @return the URI to the image media table on the given volume
*/
public static Uri getContentUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/images/thumbnails");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("images")
+ .appendPath("thumbnails").build();
}
/**
@@ -1371,14 +1442,29 @@
* @return the URI to the audio media table on the given volume
*/
public static Uri getContentUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/audio/media");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("audio")
+ .appendPath("media").build();
}
- public static Uri getContentUriForPath(String path) {
- return (path.startsWith(
- Environment.getStorageDirectory().getAbsolutePath() + "/")
- ? EXTERNAL_CONTENT_URI : INTERNAL_CONTENT_URI);
+ /**
+ * Get the content:// style URI for the given audio media file.
+ *
+ * @deprecated Apps may not have filesystem permissions to directly
+ * access this path.
+ */
+ public static @Nullable Uri getContentUriForPath(@NonNull String path) {
+ final StorageManager sm = AppGlobals.getInitialApplication()
+ .getSystemService(StorageManager.class);
+ final StorageVolume sv = sm.getStorageVolume(new File(path));
+ if (sv != null) {
+ if (sv.isPrimary()) {
+ return EXTERNAL_CONTENT_URI;
+ } else {
+ return getContentUri(sv.getUuid());
+ }
+ } else {
+ return INTERNAL_CONTENT_URI;
+ }
}
/**
@@ -1454,8 +1540,8 @@
* @return the URI to the audio genres table on the given volume
*/
public static Uri getContentUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/audio/genres");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("audio")
+ .appendPath("genres").build();
}
/**
@@ -1467,8 +1553,8 @@
* with the given the volume and audioID
*/
public static Uri getContentUriForAudioId(String volumeName, int audioId) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/audio/media/" + audioId + "/genres");
+ return ContentUris.withAppendedId(Audio.Media.getContentUri(volumeName), audioId)
+ .buildUpon().appendPath("genres").build();
}
/**
@@ -1504,10 +1590,10 @@
*/
public static final class Members implements AudioColumns {
- public static final Uri getContentUri(String volumeName,
- long genreId) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName
- + "/audio/genres/" + genreId + "/members");
+ public static final Uri getContentUri(String volumeName, long genreId) {
+ return ContentUris
+ .withAppendedId(Audio.Genres.getContentUri(volumeName), genreId)
+ .buildUpon().appendPath("members").build();
}
/**
@@ -1595,8 +1681,8 @@
* @return the URI to the audio playlists table on the given volume
*/
public static Uri getContentUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/audio/playlists");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("audio")
+ .appendPath("playlists").build();
}
/**
@@ -1631,10 +1717,10 @@
* Sub-directory of each playlist containing all members.
*/
public static final class Members implements AudioColumns {
- public static final Uri getContentUri(String volumeName,
- long playlistId) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName
- + "/audio/playlists/" + playlistId + "/members");
+ public static final Uri getContentUri(String volumeName, long playlistId) {
+ return ContentUris
+ .withAppendedId(Audio.Playlists.getContentUri(volumeName), playlistId)
+ .buildUpon().appendPath("members").build();
}
/**
@@ -1734,8 +1820,8 @@
* @return the URI to the audio artists table on the given volume
*/
public static Uri getContentUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/audio/artists");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("audio")
+ .appendPath("artists").build();
}
/**
@@ -1771,10 +1857,10 @@
* a song by the artist appears.
*/
public static final class Albums implements AlbumColumns {
- public static final Uri getContentUri(String volumeName,
- long artistId) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName
- + "/audio/artists/" + artistId + "/albums");
+ public static final Uri getContentUri(String volumeName,long artistId) {
+ return ContentUris
+ .withAppendedId(Audio.Artists.getContentUri(volumeName), artistId)
+ .buildUpon().appendPath("albums").build();
}
}
}
@@ -1869,8 +1955,8 @@
* @return the URI to the audio albums table on the given volume
*/
public static Uri getContentUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/audio/albums");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("audio")
+ .appendPath("albums").build();
}
/**
@@ -2004,7 +2090,7 @@
* <P>Type: INTEGER</P>
*
* @deprecated all thumbnails should be obtained via
- * {@link Images.Thumbnails#getThumbnail}, as this
+ * {@link MediaStore.Images.Thumbnails#getThumbnail}, as this
* value is no longer supported.
*/
@Deprecated
@@ -2064,8 +2150,8 @@
* @return the URI to the video media table on the given volume
*/
public static Uri getContentUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/video/media");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("video")
+ .appendPath("media").build();
}
/**
@@ -2188,8 +2274,8 @@
* @return the URI to the image media table on the given volume
*/
public static Uri getContentUri(String volumeName) {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
- "/video/thumbnails");
+ return AUTHORITY_URI.buildUpon().appendPath(volumeName).appendPath("video")
+ .appendPath("thumbnails").build();
}
/**
@@ -2257,6 +2343,30 @@
}
/**
+ * Return list of all volume names currently available. This includes a
+ * unique name for each shared storage device that is currently mounted.
+ * <p>
+ * Each name can be passed to APIs like
+ * {@link MediaStore.Images.Media#getContentUri(String)} to query media at
+ * that location.
+ */
+ public static @NonNull Set<String> getAllVolumeNames(Context context) {
+ final StorageManager sm = context.getSystemService(StorageManager.class);
+ final Set<String> volumeNames = new ArraySet<>();
+ volumeNames.add(VOLUME_INTERNAL);
+ for (VolumeInfo vi : sm.getVolumes()) {
+ if (vi.isMountedReadable()) {
+ if (vi.isPrimary()) {
+ volumeNames.add(VOLUME_EXTERNAL);
+ } else {
+ volumeNames.add(vi.getFsUuid());
+ }
+ }
+ }
+ return volumeNames;
+ }
+
+ /**
* Return the volume name that the given {@link Uri} references.
*/
public static @NonNull String getVolumeName(@NonNull Uri uri) {
@@ -2272,7 +2382,7 @@
* Uri for querying the state of the media scanner.
*/
public static Uri getMediaScannerUri() {
- return Uri.parse(CONTENT_AUTHORITY_SLASH + "none/media_scanner");
+ return AUTHORITY_URI.buildUpon().appendPath("none").appendPath("media_scanner").build();
}
/**
@@ -2297,16 +2407,10 @@
* @return A version string, or null if the version could not be determined.
*/
public static String getVersion(Context context) {
- Cursor c = context.getContentResolver().query(
- Uri.parse(CONTENT_AUTHORITY_SLASH + "none/version"),
- null, null, null, null);
- if (c != null) {
- try {
- if (c.moveToFirst()) {
- return c.getString(0);
- }
- } finally {
- c.close();
+ final Uri uri = AUTHORITY_URI.buildUpon().appendPath("none").appendPath("version").build();
+ try (Cursor c = context.getContentResolver().query(uri, null, null, null, null)) {
+ if (c.moveToFirst()) {
+ return c.getString(0);
}
}
return null;
diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java
index 37a9b10..8371c31b 100644
--- a/core/java/android/service/notification/ZenModeConfig.java
+++ b/core/java/android/service/notification/ZenModeConfig.java
@@ -69,9 +69,9 @@
public class ZenModeConfig implements Parcelable {
private static String TAG = "ZenModeConfig";
- public static final int SOURCE_ANYONE = 0;
- public static final int SOURCE_CONTACT = 1;
- public static final int SOURCE_STAR = 2;
+ public static final int SOURCE_ANYONE = Policy.PRIORITY_SENDERS_ANY;
+ public static final int SOURCE_CONTACT = Policy.PRIORITY_SENDERS_CONTACTS;
+ public static final int SOURCE_STAR = Policy.PRIORITY_SENDERS_STARRED;
public static final int MAX_SOURCE = SOURCE_STAR;
private static final int DEFAULT_SOURCE = SOURCE_CONTACT;
private static final int DEFAULT_CALLS_SOURCE = SOURCE_STAR;
@@ -777,24 +777,6 @@
};
/**
- * @return notification policy based on manual and automatic rules
- */
- public Policy getConsolidatedNotificationPolicy() {
- ZenPolicy policy = new ZenPolicy();
-
- // assumption: manual rule always uses the default policy
- for (ZenRule rule : automaticRules.values()) {
- if (rule.isAutomaticActive()) {
- if (rule.zenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS) {
- policy.apply(rule.zenPolicy);
- }
- }
- }
-
- return toNotificationPolicy(policy);
- }
-
- /**
* Converts a zenPolicy to a notificationPolicy using this ZenModeConfig's values as its
* defaults for all unset values in zenPolicy
*/
@@ -891,7 +873,7 @@
}
return new NotificationManager.Policy(priorityCategories, callSenders,
- messageSenders, suppressedVisualEffects);
+ messageSenders, suppressedVisualEffects, defaultPolicy.state);
}
private boolean isPriorityCategoryEnabled(int categoryType, Policy policy) {
@@ -945,6 +927,7 @@
}
priorityCallSenders = sourceToPrioritySenders(allowCallsFrom, priorityCallSenders);
priorityMessageSenders = sourceToPrioritySenders(allowMessagesFrom, priorityMessageSenders);
+
return new Policy(priorityCategories, priorityCallSenders, priorityMessageSenders,
suppressedVisualEffects, areChannelsBypassingDnd
? Policy.STATE_CHANNELS_BYPASSING_DND : 0);
@@ -1732,13 +1715,25 @@
}
/**
+ * Determines whether dnd behavior should mute all sounds controlled by ringer
+ */
+ public static boolean areAllZenBehaviorSoundsMuted(NotificationManager.Policy
+ policy) {
+ boolean allowAlarms = (policy.priorityCategories & Policy.PRIORITY_CATEGORY_ALARMS) != 0;
+ boolean allowMedia = (policy.priorityCategories & Policy.PRIORITY_CATEGORY_MEDIA) != 0;
+ boolean allowSystem = (policy.priorityCategories & Policy.PRIORITY_CATEGORY_SYSTEM) != 0;
+ return !allowAlarms && !allowMedia && !allowSystem
+ && areAllPriorityOnlyNotificationZenSoundsMuted(policy);
+ }
+
+ /**
* Determines if DND is currently overriding the ringer
*/
- public static boolean isZenOverridingRinger(int zen, ZenModeConfig zenConfig) {
+ public static boolean isZenOverridingRinger(int zen, Policy consolidatedPolicy) {
return zen == Global.ZEN_MODE_NO_INTERRUPTIONS
|| zen == Global.ZEN_MODE_ALARMS
|| (zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
- && ZenModeConfig.areAllPriorityOnlyNotificationZenSoundsMuted(zenConfig));
+ && ZenModeConfig.areAllPriorityOnlyNotificationZenSoundsMuted(consolidatedPolicy));
}
/**
diff --git a/core/java/android/service/notification/ZenPolicy.java b/core/java/android/service/notification/ZenPolicy.java
index 1ccf529..43ab8dc 100644
--- a/core/java/android/service/notification/ZenPolicy.java
+++ b/core/java/android/service/notification/ZenPolicy.java
@@ -818,6 +818,10 @@
* @hide
*/
public void apply(ZenPolicy policyToApply) {
+ if (policyToApply == null) {
+ return;
+ }
+
// apply priority categories
for (int category = 0; category < mPriorityCategories.size(); category++) {
if (mPriorityCategories.get(category) == STATE_DISALLOW) {
diff --git a/core/java/android/transition/Scene.java b/core/java/android/transition/Scene.java
index 1bdcff9..7e499f2 100644
--- a/core/java/android/transition/Scene.java
+++ b/core/java/android/transition/Scene.java
@@ -16,6 +16,8 @@
package android.transition;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.util.SparseArray;
@@ -196,22 +198,24 @@
* information is used by Scene to determine whether there is a previous
* scene which should be exited before the new scene is entered.
*
- * @param view The view on which the current scene is being set
+ * @param sceneRoot The view on which the current scene is being set
*/
@UnsupportedAppUsage
- static void setCurrentScene(View view, Scene scene) {
- view.setTagInternal(com.android.internal.R.id.current_scene, scene);
+ static void setCurrentScene(@NonNull View sceneRoot, @Nullable Scene scene) {
+ sceneRoot.setTagInternal(com.android.internal.R.id.current_scene, scene);
}
/**
* Gets the current {@link Scene} set on the given view. A scene is set on a view
* only if that view is the scene root.
*
+ * @param sceneRoot The view on which the current scene will be returned
* @return The current Scene set on this view. A value of null indicates that
* no Scene is currently set.
*/
- static Scene getCurrentScene(View view) {
- return (Scene) view.getTag(com.android.internal.R.id.current_scene);
+ @Nullable
+ public static Scene getCurrentScene(@NonNull View sceneRoot) {
+ return (Scene) sceneRoot.getTag(com.android.internal.R.id.current_scene);
}
/**
diff --git a/core/java/android/util/ArraySet.java b/core/java/android/util/ArraySet.java
index d74a0fe..4bd43d0 100644
--- a/core/java/android/util/ArraySet.java
+++ b/core/java/android/util/ArraySet.java
@@ -16,14 +16,17 @@
package android.util;
+import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
+
import libcore.util.EmptyArray;
-import android.annotation.UnsupportedAppUsage;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import java.util.function.Predicate;
/**
* ArraySet is a generic set data structure that is designed to be more memory efficient than a
@@ -357,6 +360,22 @@
* @return Returns the value stored at the given index.
*/
public E valueAt(int index) {
+ if (index >= mSize) {
+ // The array might be slightly bigger than mSize, in which case, indexing won't fail.
+ throw new ArrayIndexOutOfBoundsException(index);
+ }
+ return valueAtUnchecked(index);
+ }
+
+ /**
+ * Returns the value at the given index in the array without checking that the index is within
+ * bounds. This allows testing values at the end of the internal array, outside of the
+ * [0, mSize) bounds.
+ *
+ * @hide
+ */
+ @TestApi
+ public E valueAtUnchecked(int index) {
return (E) mArray[index];
}
@@ -491,26 +510,40 @@
return false;
}
+ /** Returns true if the array size should be decreased. */
+ private boolean shouldShrink() {
+ return mHashes.length > (BASE_SIZE * 2) && mSize < mHashes.length / 3;
+ }
+
+ /**
+ * Returns the new size the array should have. Is only valid if {@link #shouldShrink} returns
+ * true.
+ */
+ private int getNewShrunkenSize() {
+ // We don't allow it to shrink smaller than (BASE_SIZE*2) to avoid flapping between that
+ // and BASE_SIZE.
+ return mSize > (BASE_SIZE * 2) ? (mSize + (mSize >> 1)) : (BASE_SIZE * 2);
+ }
+
/**
* Remove the key/value mapping at the given index.
* @param index The desired index, must be between 0 and {@link #size()}-1.
* @return Returns the value that was stored at this index.
*/
public E removeAt(int index) {
+ if (index >= mSize) {
+ // The array might be slightly bigger than mSize, in which case, indexing won't fail.
+ throw new ArrayIndexOutOfBoundsException(index);
+ }
final Object old = mArray[index];
if (mSize <= 1) {
// Now empty.
if (DEBUG) Log.d(TAG, "remove: shrink from " + mHashes.length + " to 0");
- freeArrays(mHashes, mArray, mSize);
- mHashes = EmptyArray.INT;
- mArray = EmptyArray.OBJECT;
- mSize = 0;
+ clear();
} else {
- if (mHashes.length > (BASE_SIZE * 2) && mSize < mHashes.length / 3) {
- // Shrunk enough to reduce size of arrays. We don't allow it to
- // shrink smaller than (BASE_SIZE*2) to avoid flapping between
- // that and BASE_SIZE.
- final int n = mSize > (BASE_SIZE * 2) ? (mSize + (mSize >> 1)) : (BASE_SIZE * 2);
+ if (shouldShrink()) {
+ // Shrunk enough to reduce size of arrays.
+ final int n = getNewShrunkenSize();
if (DEBUG) Log.d(TAG, "remove: shrink from " + mHashes.length + " to " + n);
@@ -568,6 +601,62 @@
}
/**
+ * Removes all values that satisfy the predicate. This implementation avoids using the
+ * {@link #iterator()}.
+ *
+ * @param filter A predicate which returns true for elements to be removed
+ */
+ @Override
+ public boolean removeIf(Predicate<? super E> filter) {
+ if (mSize == 0) {
+ return false;
+ }
+
+ // Intentionally not using removeAt() to avoid unnecessary intermediate resizing.
+
+ int replaceIndex = 0;
+ int numRemoved = 0;
+ for (int i = 0; i < mSize; ++i) {
+ if (filter.test((E) mArray[i])) {
+ numRemoved++;
+ } else {
+ if (replaceIndex != i) {
+ mArray[replaceIndex] = mArray[i];
+ mHashes[replaceIndex] = mHashes[i];
+ }
+ replaceIndex++;
+ }
+ }
+
+ if (numRemoved == 0) {
+ return false;
+ } else if (numRemoved == mSize) {
+ clear();
+ return true;
+ }
+
+ mSize -= numRemoved;
+ if (shouldShrink()) {
+ // Shrunk enough to reduce size of arrays.
+ final int n = getNewShrunkenSize();
+ final int[] ohashes = mHashes;
+ final Object[] oarray = mArray;
+ allocArrays(n);
+
+ System.arraycopy(ohashes, 0, mHashes, 0, mSize);
+ System.arraycopy(oarray, 0, mArray, 0, mSize);
+ } else {
+ // Null out values at the end of the array. Not doing it in the loop above to avoid
+ // writing twice to the same index or writing unnecessarily if the array would have been
+ // discarded anyway.
+ for (int i = mSize; i < mArray.length; ++i) {
+ mArray[i] = null;
+ }
+ }
+ return true;
+ }
+
+ /**
* Return the number of items in this array map.
*/
@Override
diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java
index fb44eda..2d67d79 100644
--- a/core/java/android/util/FeatureFlagUtils.java
+++ b/core/java/android/util/FeatureFlagUtils.java
@@ -36,6 +36,7 @@
public static final String PERSIST_PREFIX = "persist." + FFLAG_OVERRIDE_PREFIX;
public static final String HEARING_AID_SETTINGS = "settings_bluetooth_hearing_aid";
public static final String EMERGENCY_DIAL_SHORTCUTS = "settings_emergency_dial_shortcuts";
+ public static final String SCREENRECORD_LONG_PRESS = "settings_screenrecord_long_press";
private static final Map<String, String> DEFAULT_FLAGS;
static {
@@ -50,6 +51,7 @@
DEFAULT_FLAGS.put(HEARING_AID_SETTINGS, "false");
DEFAULT_FLAGS.put(EMERGENCY_DIAL_SHORTCUTS, "true");
DEFAULT_FLAGS.put("settings_network_and_internet_v2", "false");
+ DEFAULT_FLAGS.put(SCREENRECORD_LONG_PRESS, "false");
}
/**
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 0c3a295..f8bdfe2 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -88,29 +88,6 @@
void addWindowToken(IBinder token, int type, int displayId);
void removeWindowToken(IBinder token, int displayId);
void prepareAppTransition(int transit, boolean alwaysKeepCurrent);
- int getPendingAppTransition();
- void overridePendingAppTransition(String packageName, int enterAnim, int exitAnim,
- IRemoteCallback startedCallback);
- void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth,
- int startHeight);
- void overridePendingAppTransitionClipReveal(int startX, int startY,
- int startWidth, int startHeight);
- void overridePendingAppTransitionThumb(in GraphicBuffer srcThumb, int startX, int startY,
- IRemoteCallback startedCallback, boolean scaleUp);
- void overridePendingAppTransitionAspectScaledThumb(in GraphicBuffer srcThumb, int startX,
- int startY, int targetWidth, int targetHeight, IRemoteCallback startedCallback,
- boolean scaleUp);
- /**
- * Overrides animation for app transition that exits from an application to a multi-window
- * environment and allows specifying transition animation parameters for each window.
- *
- * @param specs Array of transition animation descriptions for entering windows.
- *
- * @hide
- */
- void overridePendingAppTransitionMultiThumb(in AppTransitionAnimationSpec[] specs,
- IRemoteCallback startedCallback, IRemoteCallback finishedCallback, boolean scaleUp);
- void overridePendingAppTransitionInPlace(String packageName, int anim);
/**
* Like overridePendingAppTransitionMultiThumb, but uses a future to supply the specs. This is
diff --git a/core/java/android/view/textclassifier/ModelFileManager.java b/core/java/android/view/textclassifier/ModelFileManager.java
new file mode 100644
index 0000000..adea125
--- /dev/null
+++ b/core/java/android/view/textclassifier/ModelFileManager.java
@@ -0,0 +1,291 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.view.textclassifier;
+
+import static android.view.textclassifier.TextClassifier.DEFAULT_LOG_TAG;
+
+import android.annotation.Nullable;
+import android.os.LocaleList;
+import android.os.ParcelFileDescriptor;
+import android.text.TextUtils;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.Preconditions;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
+import java.util.StringJoiner;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Manages model files that are listed by the model files supplier.
+ * @hide
+ */
+@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+public final class ModelFileManager {
+ private final Object mLock = new Object();
+ private final Supplier<List<ModelFile>> mModelFileSupplier;
+
+ private List<ModelFile> mModelFiles;
+
+ public ModelFileManager(Supplier<List<ModelFile>> modelFileSupplier) {
+ mModelFileSupplier = Preconditions.checkNotNull(modelFileSupplier);
+ }
+
+ /**
+ * Returns an unmodifiable list of model files listed by the given model files supplier.
+ * <p>
+ * The result is cached.
+ */
+ public List<ModelFile> listModelFiles() {
+ synchronized (mLock) {
+ if (mModelFiles == null) {
+ mModelFiles = Collections.unmodifiableList(mModelFileSupplier.get());
+ }
+ return mModelFiles;
+ }
+ }
+
+ /**
+ * Returns the best model file for the given localelist, {@code null} if nothing is found.
+ *
+ * @param localeList the required locales, use {@code null} if there is no preference.
+ */
+ public ModelFile findBestModelFile(@Nullable LocaleList localeList) {
+ // Specified localeList takes priority over the system default, so it is listed first.
+ final String languages = localeList == null || localeList.isEmpty()
+ ? LocaleList.getDefault().toLanguageTags()
+ : localeList.toLanguageTags() + "," + LocaleList.getDefault().toLanguageTags();
+ final List<Locale.LanguageRange> languageRangeList = Locale.LanguageRange.parse(languages);
+
+ ModelFile bestModel = null;
+ for (ModelFile model : listModelFiles()) {
+ if (model.isAnyLanguageSupported(languageRangeList)) {
+ if (model.isPreferredTo(bestModel)) {
+ bestModel = model;
+ }
+ }
+ }
+ return bestModel;
+ }
+
+ /**
+ * Default implementation of the model file supplier.
+ */
+ public static final class ModelFileSupplierImpl implements Supplier<List<ModelFile>> {
+ private final File mUpdatedModelFile;
+ private final File mFactoryModelDir;
+ private final Pattern mModelFilenamePattern;
+ private final Function<Integer, Integer> mVersionSupplier;
+ private final Function<Integer, String> mSupportedLocalesSupplier;
+
+ public ModelFileSupplierImpl(
+ File factoryModelDir,
+ String factoryModelFileNameRegex,
+ File updatedModelFile,
+ Function<Integer, Integer> versionSupplier,
+ Function<Integer, String> supportedLocalesSupplier) {
+ mUpdatedModelFile = Preconditions.checkNotNull(updatedModelFile);
+ mFactoryModelDir = Preconditions.checkNotNull(factoryModelDir);
+ mModelFilenamePattern = Pattern.compile(
+ Preconditions.checkNotNull(factoryModelFileNameRegex));
+ mVersionSupplier = Preconditions.checkNotNull(versionSupplier);
+ mSupportedLocalesSupplier = Preconditions.checkNotNull(supportedLocalesSupplier);
+ }
+
+ @Override
+ public List<ModelFile> get() {
+ final List<ModelFile> modelFiles = new ArrayList<>();
+ // The update model has the highest precedence.
+ if (mUpdatedModelFile.exists()) {
+ final ModelFile updatedModel = createModelFile(mUpdatedModelFile);
+ if (updatedModel != null) {
+ modelFiles.add(updatedModel);
+ }
+ }
+ // Factory models should never have overlapping locales, so the order doesn't matter.
+ if (mFactoryModelDir.exists() && mFactoryModelDir.isDirectory()) {
+ final File[] files = mFactoryModelDir.listFiles();
+ for (File file : files) {
+ final Matcher matcher = mModelFilenamePattern.matcher(file.getName());
+ if (matcher.matches() && file.isFile()) {
+ final ModelFile model = createModelFile(file);
+ if (model != null) {
+ modelFiles.add(model);
+ }
+ }
+ }
+ }
+ return modelFiles;
+ }
+
+ /** Returns null if the path did not point to a compatible model. */
+ @Nullable
+ private ModelFile createModelFile(File file) {
+ if (!file.exists()) {
+ return null;
+ }
+ ParcelFileDescriptor modelFd = null;
+ try {
+ modelFd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
+ if (modelFd == null) {
+ return null;
+ }
+ final int modelFdInt = modelFd.getFd();
+ final int version = mVersionSupplier.apply(modelFdInt);
+ final String supportedLocalesStr = mSupportedLocalesSupplier.apply(modelFdInt);
+ if (supportedLocalesStr.isEmpty()) {
+ Log.d(DEFAULT_LOG_TAG, "Ignoring " + file.getAbsolutePath());
+ return null;
+ }
+ final List<Locale> supportedLocales = new ArrayList<>();
+ for (String langTag : supportedLocalesStr.split(",")) {
+ supportedLocales.add(Locale.forLanguageTag(langTag));
+ }
+ return new ModelFile(
+ file,
+ version,
+ supportedLocales,
+ ModelFile.LANGUAGE_INDEPENDENT.equals(supportedLocalesStr));
+ } catch (FileNotFoundException e) {
+ Log.e(DEFAULT_LOG_TAG, "Failed to find " + file.getAbsolutePath(), e);
+ return null;
+ } finally {
+ maybeCloseAndLogError(modelFd);
+ }
+ }
+
+ /**
+ * Closes the ParcelFileDescriptor, if non-null, and logs any errors that occur.
+ */
+ private static void maybeCloseAndLogError(@Nullable ParcelFileDescriptor fd) {
+ if (fd == null) {
+ return;
+ }
+ try {
+ fd.close();
+ } catch (IOException e) {
+ Log.e(DEFAULT_LOG_TAG, "Error closing file.", e);
+ }
+ }
+
+ }
+
+ /**
+ * Describes TextClassifier model files on disk.
+ */
+ public static final class ModelFile {
+ public static final String LANGUAGE_INDEPENDENT = "*";
+
+ private final File mFile;
+ private final int mVersion;
+ private final List<Locale> mSupportedLocales;
+ private final boolean mLanguageIndependent;
+
+ public ModelFile(File file, int version, List<Locale> supportedLocales,
+ boolean languageIndependent) {
+ mFile = Preconditions.checkNotNull(file);
+ mVersion = version;
+ mSupportedLocales = Preconditions.checkNotNull(supportedLocales);
+ mLanguageIndependent = languageIndependent;
+ }
+
+ /** Returns the absolute path to the model file. */
+ public String getPath() {
+ return mFile.getAbsolutePath();
+ }
+
+ /** Returns a name to use for id generation, effectively the name of the model file. */
+ public String getName() {
+ return mFile.getName();
+ }
+
+ /** Returns the version tag in the model's metadata. */
+ public int getVersion() {
+ return mVersion;
+ }
+
+ /** Returns whether the language supports any language in the given ranges. */
+ public boolean isAnyLanguageSupported(List<Locale.LanguageRange> languageRanges) {
+ Preconditions.checkNotNull(languageRanges);
+ return mLanguageIndependent || Locale.lookup(languageRanges, mSupportedLocales) != null;
+ }
+
+ /** Returns an immutable lists of supported locales. */
+ public List<Locale> getSupportedLocales() {
+ return Collections.unmodifiableList(mSupportedLocales);
+ }
+
+ /**
+ * Returns if this model file is preferred to the given one.
+ */
+ public boolean isPreferredTo(@Nullable ModelFile model) {
+ // A model is preferred to no model.
+ if (model == null) {
+ return true;
+ }
+
+ // A language-specific model is preferred to a language independent
+ // model.
+ if (!mLanguageIndependent && model.mLanguageIndependent) {
+ return true;
+ }
+
+ // A higher-version model is preferred.
+ if (mVersion > model.getVersion()) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(getPath());
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (this == other) {
+ return true;
+ }
+ if (other instanceof ModelFile) {
+ final ModelFile otherModel = (ModelFile) other;
+ return TextUtils.equals(getPath(), otherModel.getPath());
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ final StringJoiner localesJoiner = new StringJoiner(",");
+ for (Locale locale : mSupportedLocales) {
+ localesJoiner.add(locale.toLanguageTag());
+ }
+ return String.format(Locale.US,
+ "ModelFile { path=%s name=%s version=%d locales=%s }",
+ getPath(), getName(), mVersion, localesJoiner.toString());
+ }
+ }
+}
diff --git a/core/java/android/view/textclassifier/TextClassifierImpl.java b/core/java/android/view/textclassifier/TextClassifierImpl.java
index 7f1e443..159bfaa 100644
--- a/core/java/android/view/textclassifier/TextClassifierImpl.java
+++ b/core/java/android/view/textclassifier/TextClassifierImpl.java
@@ -58,16 +58,12 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
-import java.util.StringJoiner;
import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
/**
* Default implementation of the {@link TextClassifier} interface.
@@ -81,13 +77,18 @@
public final class TextClassifierImpl implements TextClassifier {
private static final String LOG_TAG = DEFAULT_LOG_TAG;
- private static final String MODEL_DIR = "/etc/textclassifier/";
- private static final String MODEL_FILE_REGEX = "textclassifier\\.(.*)\\.model";
- private static final String UPDATED_MODEL_FILE_PATH =
- "/data/misc/textclassifier/textclassifier.model";
- private static final String LANG_ID_MODEL_FILE_PATH = "/etc/textclassifier/lang_id.model";
- private static final String UPDATED_LANG_ID_MODEL_FILE_PATH =
- "/data/misc/textclassifier/lang_id.model";
+
+ private static final File FACTORY_MODEL_DIR = new File("/etc/textclassifier/");
+ // Annotator
+ private static final String ANNOTATOR_FACTORY_MODEL_FILENAME_REGEX =
+ "textclassifier\\.(.*)\\.model";
+ private static final File ANNOTATOR_UPDATED_MODEL_FILE =
+ new File("/data/misc/textclassifier/textclassifier.model");
+
+ // LangID
+ private static final String LANG_ID_FACTORY_MODEL_FILENAME_REGEX = "lang_id.model";
+ private static final File UPDATED_LANG_ID_MODEL_FILE =
+ new File("/data/misc/textclassifier/lang_id.model");
private final Context mContext;
private final TextClassifier mFallback;
@@ -95,9 +96,7 @@
private final Object mLock = new Object();
@GuardedBy("mLock") // Do not access outside this lock.
- private List<ModelFile> mAllModelFiles;
- @GuardedBy("mLock") // Do not access outside this lock.
- private ModelFile mModel;
+ private ModelFileManager.ModelFile mAnnotatorModelInUse;
@GuardedBy("mLock") // Do not access outside this lock.
private AnnotatorModel mAnnotatorImpl;
@GuardedBy("mLock") // Do not access outside this lock.
@@ -109,12 +108,29 @@
private final TextClassificationConstants mSettings;
+ private final ModelFileManager mAnnotatorModelFileManager;
+ private final ModelFileManager mLangIdModelFileManager;
+
public TextClassifierImpl(
Context context, TextClassificationConstants settings, TextClassifier fallback) {
mContext = Preconditions.checkNotNull(context);
mFallback = Preconditions.checkNotNull(fallback);
mSettings = Preconditions.checkNotNull(settings);
mGenerateLinksLogger = new GenerateLinksLogger(mSettings.getGenerateLinksLogSampleRate());
+ mAnnotatorModelFileManager = new ModelFileManager(
+ new ModelFileManager.ModelFileSupplierImpl(
+ FACTORY_MODEL_DIR,
+ ANNOTATOR_FACTORY_MODEL_FILENAME_REGEX,
+ ANNOTATOR_UPDATED_MODEL_FILE,
+ AnnotatorModel::getVersion,
+ AnnotatorModel::getLocales));
+ mLangIdModelFileManager = new ModelFileManager(
+ new ModelFileManager.ModelFileSupplierImpl(
+ FACTORY_MODEL_DIR,
+ LANG_ID_FACTORY_MODEL_FILENAME_REGEX,
+ UPDATED_LANG_ID_MODEL_FILE,
+ fd -> -1, // TODO: Replace this with LangIdModel.getVersion(fd)
+ fd -> ModelFileManager.ModelFile.LANGUAGE_INDEPENDENT));
}
public TextClassifierImpl(Context context, TextClassificationConstants settings) {
@@ -334,22 +350,24 @@
throws FileNotFoundException {
synchronized (mLock) {
localeList = localeList == null ? LocaleList.getEmptyLocaleList() : localeList;
- final ModelFile bestModel = findBestModelLocked(localeList);
+ final ModelFileManager.ModelFile bestModel =
+ mAnnotatorModelFileManager.findBestModelFile(localeList);
if (bestModel == null) {
- throw new FileNotFoundException("No model for " + localeList.toLanguageTags());
+ throw new FileNotFoundException(
+ "No annotator model for " + localeList.toLanguageTags());
}
- if (mAnnotatorImpl == null || !Objects.equals(mModel, bestModel)) {
+ if (mAnnotatorImpl == null || !Objects.equals(mAnnotatorModelInUse, bestModel)) {
Log.d(DEFAULT_LOG_TAG, "Loading " + bestModel);
destroyAnnotatorImplIfExistsLocked();
- final ParcelFileDescriptor fd = ParcelFileDescriptor.open(
+ final ParcelFileDescriptor pfd = ParcelFileDescriptor.open(
new File(bestModel.getPath()), ParcelFileDescriptor.MODE_READ_ONLY);
try {
- if (fd != null) {
- mAnnotatorImpl = new AnnotatorModel(fd.getFd());
- mModel = bestModel;
+ if (pfd != null) {
+ mAnnotatorImpl = new AnnotatorModel(pfd.getFd());
+ mAnnotatorModelInUse = bestModel;
}
} finally {
- maybeCloseAndLogError(fd);
+ maybeCloseAndLogError(pfd);
}
}
return mAnnotatorImpl;
@@ -367,40 +385,19 @@
private LangIdModel getLangIdImpl() throws FileNotFoundException {
synchronized (mLock) {
if (mLangIdImpl == null) {
- ParcelFileDescriptor factoryFd = null;
- ParcelFileDescriptor updateFd = null;
+ final ModelFileManager.ModelFile bestModel =
+ mLangIdModelFileManager.findBestModelFile(LocaleList.getEmptyLocaleList());
+ if (bestModel == null) {
+ throw new FileNotFoundException("No LangID model is found");
+ }
+ final ParcelFileDescriptor pfd = ParcelFileDescriptor.open(
+ new File(bestModel.getPath()), ParcelFileDescriptor.MODE_READ_ONLY);
try {
- int factoryVersion = -1;
- int updateVersion = factoryVersion;
- final File factoryFile = new File(LANG_ID_MODEL_FILE_PATH);
- if (factoryFile.exists()) {
- factoryFd = ParcelFileDescriptor.open(
- factoryFile, ParcelFileDescriptor.MODE_READ_ONLY);
- // TODO: Uncomment when method is implemented:
- // if (factoryFd != null) {
- // factoryVersion = LangIdModel.getVersion(factoryFd.getFd());
- // }
- }
- final File updateFile = new File(UPDATED_LANG_ID_MODEL_FILE_PATH);
- if (updateFile.exists()) {
- updateFd = ParcelFileDescriptor.open(
- updateFile, ParcelFileDescriptor.MODE_READ_ONLY);
- // TODO: Uncomment when method is implemented:
- // if (updateFd != null) {
- // updateVersion = LangIdModel.getVersion(updateFd.getFd());
- // }
- }
-
- if (updateVersion > factoryVersion) {
- mLangIdImpl = new LangIdModel(updateFd.getFd());
- } else if (factoryFd != null) {
- mLangIdImpl = new LangIdModel(factoryFd.getFd());
- } else {
- throw new FileNotFoundException("Language detection model not found");
+ if (pfd != null) {
+ mLangIdImpl = new LangIdModel(pfd.getFd());
}
} finally {
- maybeCloseAndLogError(factoryFd);
- maybeCloseAndLogError(updateFd);
+ maybeCloseAndLogError(pfd);
}
}
return mLangIdImpl;
@@ -409,8 +406,9 @@
private String createId(String text, int start, int end) {
synchronized (mLock) {
- return SelectionSessionLogger.createId(text, start, end, mContext, mModel.getVersion(),
- mModel.getSupportedLocales());
+ return SelectionSessionLogger.createId(text, start, end, mContext,
+ mAnnotatorModelInUse.getVersion(),
+ mAnnotatorModelInUse.getSupportedLocales());
}
}
@@ -418,66 +416,6 @@
return (locales == null) ? "" : locales.toLanguageTags();
}
- /**
- * Finds the most appropriate model to use for the given target locale list.
- *
- * The basic logic is: we ignore all models that don't support any of the target locales. For
- * the remaining candidates, we take the update model unless its version number is lower than
- * the factory version. It's assumed that factory models do not have overlapping locale ranges
- * and conflict resolution between these models hence doesn't matter.
- */
- @GuardedBy("mLock") // Do not call outside this lock.
- @Nullable
- private ModelFile findBestModelLocked(LocaleList localeList) {
- // Specified localeList takes priority over the system default, so it is listed first.
- final String languages = localeList.isEmpty()
- ? LocaleList.getDefault().toLanguageTags()
- : localeList.toLanguageTags() + "," + LocaleList.getDefault().toLanguageTags();
- final List<Locale.LanguageRange> languageRangeList = Locale.LanguageRange.parse(languages);
-
- ModelFile bestModel = null;
- for (ModelFile model : listAllModelsLocked()) {
- if (model.isAnyLanguageSupported(languageRangeList)) {
- if (model.isPreferredTo(bestModel)) {
- bestModel = model;
- }
- }
- }
- return bestModel;
- }
-
- /** Returns a list of all model files available, in order of precedence. */
- @GuardedBy("mLock") // Do not call outside this lock.
- private List<ModelFile> listAllModelsLocked() {
- if (mAllModelFiles == null) {
- final List<ModelFile> allModels = new ArrayList<>();
- // The update model has the highest precedence.
- if (new File(UPDATED_MODEL_FILE_PATH).exists()) {
- final ModelFile updatedModel = ModelFile.fromPath(UPDATED_MODEL_FILE_PATH);
- if (updatedModel != null) {
- allModels.add(updatedModel);
- }
- }
- // Factory models should never have overlapping locales, so the order doesn't matter.
- final File modelsDir = new File(MODEL_DIR);
- if (modelsDir.exists() && modelsDir.isDirectory()) {
- final File[] modelFiles = modelsDir.listFiles();
- final Pattern modelFilenamePattern = Pattern.compile(MODEL_FILE_REGEX);
- for (File modelFile : modelFiles) {
- final Matcher matcher = modelFilenamePattern.matcher(modelFile.getName());
- if (matcher.matches() && modelFile.isFile()) {
- final ModelFile model = ModelFile.fromPath(modelFile.getAbsolutePath());
- if (model != null) {
- allModels.add(model);
- }
- }
- }
- }
- mAllModelFiles = allModels;
- }
- return mAllModelFiles;
- }
-
private TextClassification createClassificationResult(
AnnotatorModel.ClassificationResult[] classifications,
String text, int start, int end, @Nullable Instant referenceTime) {
@@ -523,12 +461,18 @@
@Override
public void dump(@NonNull IndentingPrintWriter printWriter) {
synchronized (mLock) {
- listAllModelsLocked();
printWriter.println("TextClassifierImpl:");
printWriter.increaseIndent();
- printWriter.println("Model file(s):");
+ printWriter.println("Annotator model file(s):");
printWriter.increaseIndent();
- for (ModelFile modelFile : mAllModelFiles) {
+ for (ModelFileManager.ModelFile modelFile :
+ mAnnotatorModelFileManager.listModelFiles()) {
+ printWriter.println(modelFile.toString());
+ }
+ printWriter.decreaseIndent();
+ printWriter.println("LangID model file(s):");
+ for (ModelFileManager.ModelFile modelFile :
+ mLangIdModelFileManager.listModelFiles()) {
printWriter.println(modelFile.toString());
}
printWriter.decreaseIndent();
@@ -554,126 +498,6 @@
}
/**
- * Describes TextClassifier model files on disk.
- */
- private static final class ModelFile {
-
- private final String mPath;
- private final String mName;
- private final int mVersion;
- private final List<Locale> mSupportedLocales;
- private final boolean mLanguageIndependent;
-
- /** Returns null if the path did not point to a compatible model. */
- static @Nullable ModelFile fromPath(String path) {
- final File file = new File(path);
- if (!file.exists()) {
- return null;
- }
- ParcelFileDescriptor modelFd = null;
- try {
- modelFd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
- if (modelFd == null) {
- return null;
- }
- final int version = AnnotatorModel.getVersion(modelFd.getFd());
- final String supportedLocalesStr = AnnotatorModel.getLocales(modelFd.getFd());
- if (supportedLocalesStr.isEmpty()) {
- Log.d(DEFAULT_LOG_TAG, "Ignoring " + file.getAbsolutePath());
- return null;
- }
- final boolean languageIndependent = supportedLocalesStr.equals("*");
- final List<Locale> supportedLocales = new ArrayList<>();
- for (String langTag : supportedLocalesStr.split(",")) {
- supportedLocales.add(Locale.forLanguageTag(langTag));
- }
- return new ModelFile(path, file.getName(), version, supportedLocales,
- languageIndependent);
- } catch (FileNotFoundException e) {
- Log.e(DEFAULT_LOG_TAG, "Failed to peek " + file.getAbsolutePath(), e);
- return null;
- } finally {
- maybeCloseAndLogError(modelFd);
- }
- }
-
- /** The absolute path to the model file. */
- String getPath() {
- return mPath;
- }
-
- /** A name to use for id generation. Effectively the name of the model file. */
- String getName() {
- return mName;
- }
-
- /** Returns the version tag in the model's metadata. */
- int getVersion() {
- return mVersion;
- }
-
- /** Returns whether the language supports any language in the given ranges. */
- boolean isAnyLanguageSupported(List<Locale.LanguageRange> languageRanges) {
- return mLanguageIndependent || Locale.lookup(languageRanges, mSupportedLocales) != null;
- }
-
- /** All locales supported by the model. */
- List<Locale> getSupportedLocales() {
- return Collections.unmodifiableList(mSupportedLocales);
- }
-
- public boolean isPreferredTo(ModelFile model) {
- // A model is preferred to no model.
- if (model == null) {
- return true;
- }
-
- // A language-specific model is preferred to a language independent
- // model.
- if (!mLanguageIndependent && model.mLanguageIndependent) {
- return true;
- }
-
- // A higher-version model is preferred.
- if (getVersion() > model.getVersion()) {
- return true;
- }
- return false;
- }
-
- @Override
- public boolean equals(Object other) {
- if (this == other) {
- return true;
- }
- if (other instanceof ModelFile) {
- final ModelFile otherModel = (ModelFile) other;
- return mPath.equals(otherModel.mPath);
- }
- return false;
- }
-
- @Override
- public String toString() {
- final StringJoiner localesJoiner = new StringJoiner(",");
- for (Locale locale : mSupportedLocales) {
- localesJoiner.add(locale.toLanguageTag());
- }
- return String.format(Locale.US, "ModelFile { path=%s name=%s version=%d locales=%s }",
- mPath, mName, mVersion, localesJoiner.toString());
- }
-
- private ModelFile(String path, String name, int version, List<Locale> supportedLocales,
- boolean languageIndependent) {
- mPath = path;
- mName = name;
- mVersion = version;
- mSupportedLocales = supportedLocales;
- mLanguageIndependent = languageIndependent;
- }
- }
-
- /**
* Helper class to store the information from which RemoteActions are built.
*/
private static final class LabeledIntent {
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 4d03123..a93604f 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -21,6 +21,7 @@
import android.annotation.NonNull;
import android.annotation.StyleRes;
import android.annotation.UnsupportedAppUsage;
+import android.app.Activity;
import android.app.ActivityOptions;
import android.app.ActivityThread;
import android.app.Application;
@@ -56,13 +57,14 @@
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.ArrayMap;
+import android.util.IntArray;
import android.util.Log;
+import android.util.Pair;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.LayoutInflater.Filter;
import android.view.RemotableViewMethod;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.widget.AdapterView.OnItemClickListener;
@@ -129,13 +131,19 @@
static final String EXTRA_REMOTEADAPTER_APPWIDGET_ID = "remoteAdapterAppWidgetId";
/**
+ * The intent extra that contains the bounds for all shared elements.
+ */
+ public static final String EXTRA_SHARED_ELEMENT_BOUNDS =
+ "android.widget.extra.SHARED_ELEMENT_BOUNDS";
+
+ /**
* Maximum depth of nested views calls from {@link #addView(int, RemoteViews)} and
* {@link #RemoteViews(RemoteViews, RemoteViews)}.
*/
private static final int MAX_NESTED_VIEWS = 10;
// The unique identifiers for each custom {@link Action}.
- private static final int SET_ON_CLICK_PENDING_INTENT_TAG = 1;
+ private static final int SET_ON_CLICK_RESPONSE_TAG = 1;
private static final int REFLECTION_ACTION_TAG = 2;
private static final int SET_DRAWABLE_TINT_TAG = 3;
private static final int VIEW_GROUP_ACTION_ADD_TAG = 4;
@@ -143,7 +151,6 @@
private static final int SET_EMPTY_VIEW_ACTION_TAG = 6;
private static final int VIEW_GROUP_ACTION_REMOVE_TAG = 7;
private static final int SET_PENDING_INTENT_TEMPLATE_TAG = 8;
- private static final int SET_ON_CLICK_FILL_IN_INTENT_TAG = 9;
private static final int SET_REMOTE_VIEW_ADAPTER_INTENT_TAG = 10;
private static final int TEXT_VIEW_DRAWABLE_ACTION_TAG = 11;
private static final int BITMAP_REFLECTION_ACTION_TAG = 12;
@@ -228,7 +235,8 @@
/** Class cookies of the Parcel this instance was read from. */
private final Map<Class, Object> mClassCookies;
- private static final OnClickHandler DEFAULT_ON_CLICK_HANDLER = new OnClickHandler();
+ private static final OnClickHandler DEFAULT_ON_CLICK_HANDLER = (view, pendingIntent, response)
+ -> startPendingIntent(view, pendingIntent, response.getLaunchOptions(view));
private static final ArrayMap<MethodKey, MethodArgs> sMethods = new ArrayMap<>();
@@ -362,57 +370,10 @@
}
/** @hide */
- public static class OnClickHandler {
-
- @UnsupportedAppUsage
- public boolean onClickHandler(View view, PendingIntent pendingIntent, Intent fillInIntent) {
- try {
- // TODO: Unregister this handler if PendingIntent.FLAG_ONE_SHOT?
- Context context = view.getContext();
- ActivityOptions opts = getActivityOptions(context);
- // The NEW_TASK flags are applied through the activity options and not as a part of
- // the call to startIntentSender() to ensure that they are consistently applied to
- // both mutable and immutable PendingIntents.
- context.startIntentSender(
- pendingIntent.getIntentSender(), fillInIntent,
- 0, 0, 0, opts.toBundle());
- } catch (IntentSender.SendIntentException e) {
- android.util.Log.e(LOG_TAG, "Cannot send pending intent: ", e);
- return false;
- } catch (Exception e) {
- android.util.Log.e(LOG_TAG, "Cannot send pending intent due to " +
- "unknown exception: ", e);
- return false;
- }
- return true;
- }
+ public interface OnClickHandler {
/** @hide */
- protected ActivityOptions getActivityOptions(Context context) {
- if (context.getResources().getBoolean(
- com.android.internal.R.bool.config_overrideRemoteViewsActivityTransition)) {
- TypedArray windowStyle = context.getTheme().obtainStyledAttributes(
- com.android.internal.R.styleable.Window);
- int windowAnimations = windowStyle.getResourceId(
- com.android.internal.R.styleable.Window_windowAnimationStyle, 0);
- TypedArray windowAnimationStyle = context.obtainStyledAttributes(
- windowAnimations, com.android.internal.R.styleable.WindowAnimation);
- int enterAnimationId = windowAnimationStyle.getResourceId(com.android.internal.R
- .styleable.WindowAnimation_activityOpenRemoteViewsEnterAnimation, 0);
- windowStyle.recycle();
- windowAnimationStyle.recycle();
-
- if (enterAnimationId != 0) {
- final ActivityOptions opts = ActivityOptions.makeCustomAnimation(context,
- enterAnimationId, 0);
- opts.setPendingIntentLaunchFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- return opts;
- }
- }
- final ActivityOptions opts = ActivityOptions.makeBasic();
- opts.setPendingIntentLaunchFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- return opts;
- }
+ boolean onClickHandler(View view, PendingIntent pendingIntent, RemoteResponse response);
}
/**
@@ -630,86 +591,6 @@
}
}
- private class SetOnClickFillInIntent extends Action {
- public SetOnClickFillInIntent(int id, Intent fillInIntent) {
- this.viewId = id;
- this.fillInIntent = fillInIntent;
- }
-
- public SetOnClickFillInIntent(Parcel parcel) {
- viewId = parcel.readInt();
- fillInIntent = parcel.readTypedObject(Intent.CREATOR);
- }
-
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(viewId);
- dest.writeTypedObject(fillInIntent, 0 /* no flags */);
- }
-
- @Override
- public void apply(View root, ViewGroup rootParent, final OnClickHandler handler) {
- final View target = root.findViewById(viewId);
- if (target == null) return;
-
- if (!mIsWidgetCollectionChild) {
- Log.e(LOG_TAG, "The method setOnClickFillInIntent is available " +
- "only from RemoteViewsFactory (ie. on collection items).");
- return;
- }
- if (target == root) {
- target.setTagInternal(com.android.internal.R.id.fillInIntent, fillInIntent);
- } else if (fillInIntent != null) {
- OnClickListener listener = new OnClickListener() {
- public void onClick(View v) {
- // Insure that this view is a child of an AdapterView
- View parent = (View) v.getParent();
- // Break the for loop on the first encounter of:
- // 1) an AdapterView,
- // 2) an AppWidgetHostView that is not a RemoteViewsFrameLayout, or
- // 3) a null parent.
- // 2) and 3) are unexpected and catch the case where a child is not
- // correctly parented in an AdapterView.
- while (parent != null && !(parent instanceof AdapterView<?>)
- && !((parent instanceof AppWidgetHostView) &&
- !(parent instanceof RemoteViewsAdapter.RemoteViewsFrameLayout))) {
- parent = (View) parent.getParent();
- }
-
- if (!(parent instanceof AdapterView<?>)) {
- // Somehow they've managed to get this far without having
- // and AdapterView as a parent.
- Log.e(LOG_TAG, "Collection item doesn't have AdapterView parent");
- return;
- }
-
- // Insure that a template pending intent has been set on an ancestor
- if (!(parent.getTag() instanceof PendingIntent)) {
- Log.e(LOG_TAG, "Attempting setOnClickFillInIntent without" +
- " calling setPendingIntentTemplate on parent.");
- return;
- }
-
- PendingIntent pendingIntent = (PendingIntent) parent.getTag();
-
- final Rect rect = getSourceBounds(v);
-
- fillInIntent.setSourceBounds(rect);
- handler.onClickHandler(v, pendingIntent, fillInIntent);
- }
-
- };
- target.setOnClickListener(listener);
- }
- }
-
- @Override
- public int getActionTag() {
- return SET_ON_CLICK_FILL_IN_INTENT_TAG;
- }
-
- Intent fillInIntent;
- }
-
private class SetPendingIntentTemplate extends Action {
public SetPendingIntentTemplate(int id, PendingIntent pendingIntentTemplate) {
this.viewId = id;
@@ -749,22 +630,17 @@
}
if (vg == null) return;
- Intent fillInIntent = null;
+ RemoteResponse response = null;
int childCount = vg.getChildCount();
for (int i = 0; i < childCount; i++) {
Object tag = vg.getChildAt(i).getTag(com.android.internal.R.id.fillInIntent);
- if (tag instanceof Intent) {
- fillInIntent = (Intent) tag;
+ if (tag instanceof RemoteResponse) {
+ response = (RemoteResponse) tag;
break;
}
}
- if (fillInIntent == null) return;
-
- final Rect rect = getSourceBounds(view);
-
- final Intent intent = new Intent();
- intent.setSourceBounds(rect);
- handler.onClickHandler(view, pendingIntentTemplate, fillInIntent);
+ if (response == null) return;
+ response.handleViewClick(view, handler);
}
}
};
@@ -922,20 +798,22 @@
* {@link android.view.View#setOnClickListener(android.view.View.OnClickListener)}
* to launch the provided {@link PendingIntent}.
*/
- private class SetOnClickPendingIntent extends Action {
- public SetOnClickPendingIntent(int id, PendingIntent pendingIntent) {
+ private class SetOnClickResponse extends Action {
+
+ SetOnClickResponse(int id, RemoteResponse response) {
this.viewId = id;
- this.pendingIntent = pendingIntent;
+ this.mResponse = response;
}
- public SetOnClickPendingIntent(Parcel parcel) {
+ SetOnClickResponse(Parcel parcel) {
viewId = parcel.readInt();
- pendingIntent = PendingIntent.readPendingIntentOrNullFromParcel(parcel);
+ mResponse = new RemoteResponse();
+ mResponse.readFromParcel(parcel);
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(viewId);
- PendingIntent.writePendingIntentOrNullToParcel(pendingIntent, dest);
+ mResponse.writeToParcel(dest, flags);
}
@Override
@@ -943,50 +821,54 @@
final View target = root.findViewById(viewId);
if (target == null) return;
- // If the view is an AdapterView, setting a PendingIntent on click doesn't make much
- // sense, do they mean to set a PendingIntent template for the AdapterView's children?
- if (mIsWidgetCollectionChild) {
- Log.w(LOG_TAG, "Cannot setOnClickPendingIntent for collection item " +
- "(id: " + viewId + ")");
- ApplicationInfo appInfo = root.getContext().getApplicationInfo();
+ if (mResponse.mPendingIntent != null) {
+ // If the view is an AdapterView, setting a PendingIntent on click doesn't make
+ // much sense, do they mean to set a PendingIntent template for the
+ // AdapterView's children?
+ if (mIsWidgetCollectionChild) {
+ Log.w(LOG_TAG, "Cannot SetOnClickResponse for collection item "
+ + "(id: " + viewId + ")");
+ ApplicationInfo appInfo = root.getContext().getApplicationInfo();
- // We let this slide for HC and ICS so as to not break compatibility. It should have
- // been disabled from the outset, but was left open by accident.
- if (appInfo != null &&
- appInfo.targetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN) {
+ // We let this slide for HC and ICS so as to not break compatibility. It should
+ // have been disabled from the outset, but was left open by accident.
+ if (appInfo != null
+ && appInfo.targetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN) {
+ return;
+ }
+ }
+ target.setTagInternal(R.id.pending_intent_tag, mResponse.mPendingIntent);
+ } else if (mResponse.mFillIntent != null) {
+ if (!mIsWidgetCollectionChild) {
+ Log.e(LOG_TAG, "The method setOnClickFillInIntent is available "
+ + "only from RemoteViewsFactory (ie. on collection items).");
return;
}
+ if (target == root) {
+ // Target is a root node of an AdapterView child. Set the response in the tag.
+ // Actual click handling is done by OnItemClickListener in
+ // SetPendingIntentTemplate, which uses this tag information.
+ target.setTagInternal(com.android.internal.R.id.fillInIntent, mResponse);
+ return;
+ }
+ } else {
+ // No intent to apply
+ target.setOnClickListener(null);
+ return;
}
-
- // If the pendingIntent is null, we clear the onClickListener
- OnClickListener listener = null;
- if (pendingIntent != null) {
- listener = new OnClickListener() {
- public void onClick(View v) {
- // Find target view location in screen coordinates and
- // fill into PendingIntent before sending.
- final Rect rect = getSourceBounds(v);
-
- final Intent intent = new Intent();
- intent.setSourceBounds(rect);
- handler.onClickHandler(v, pendingIntent, intent);
- }
- };
- }
- target.setTagInternal(R.id.pending_intent_tag, pendingIntent);
- target.setOnClickListener(listener);
+ target.setOnClickListener(v -> mResponse.handleViewClick(v, handler));
}
@Override
public int getActionTag() {
- return SET_ON_CLICK_PENDING_INTENT_TAG;
+ return SET_ON_CLICK_RESPONSE_TAG;
}
- @UnsupportedAppUsage
- PendingIntent pendingIntent;
+ final RemoteResponse mResponse;
}
- private static Rect getSourceBounds(View v) {
+ /** @hide **/
+ public static Rect getSourceBounds(View v) {
final float appScale = v.getContext().getResources()
.getCompatibilityInfo().applicationScale;
final int[] pos = new int[2];
@@ -2413,8 +2295,8 @@
private Action getActionFromParcel(Parcel parcel, int depth) {
int tag = parcel.readInt();
switch (tag) {
- case SET_ON_CLICK_PENDING_INTENT_TAG:
- return new SetOnClickPendingIntent(parcel);
+ case SET_ON_CLICK_RESPONSE_TAG:
+ return new SetOnClickResponse(parcel);
case SET_DRAWABLE_TINT_TAG:
return new SetDrawableTint(parcel);
case REFLECTION_ACTION_TAG:
@@ -2430,8 +2312,6 @@
return new SetEmptyView(parcel);
case SET_PENDING_INTENT_TEMPLATE_TAG:
return new SetPendingIntentTemplate(parcel);
- case SET_ON_CLICK_FILL_IN_INTENT_TAG:
- return new SetOnClickFillInIntent(parcel);
case SET_REMOTE_VIEW_ADAPTER_INTENT_TAG:
return new SetRemoteViewsAdapterIntent(parcel);
case TEXT_VIEW_DRAWABLE_ACTION_TAG:
@@ -2834,7 +2714,7 @@
* to launch the provided {@link PendingIntent}. The source bounds
* ({@link Intent#getSourceBounds()}) of the intent will be set to the bounds of the clicked
* view in screen space.
- * Note that any activity options associated with the pendingIntent may get overridden
+ * Note that any activity options associated with the mPendingIntent may get overridden
* before starting the intent.
*
* When setting the on-click action of items within collections (eg. {@link ListView},
@@ -2846,7 +2726,19 @@
* @param pendingIntent The {@link PendingIntent} to send when user clicks
*/
public void setOnClickPendingIntent(int viewId, PendingIntent pendingIntent) {
- addAction(new SetOnClickPendingIntent(viewId, pendingIntent));
+ setOnClickResponse(viewId, RemoteResponse.fromPendingIntent(pendingIntent));
+ }
+
+ /**
+ * Equivalent of calling
+ * {@link android.view.View#setOnClickListener(android.view.View.OnClickListener)}
+ * to launch the provided {@link RemoteResponse}.
+ *
+ * @param viewId The id of the view that will trigger the {@link RemoteResponse} when clicked
+ * @param response The {@link RemoteResponse} to send when user clicks
+ */
+ public void setOnClickResponse(int viewId, RemoteResponse response) {
+ addAction(new SetOnClickResponse(viewId, response));
}
/**
@@ -2883,7 +2775,7 @@
* in order to determine the on-click behavior of the view specified by viewId
*/
public void setOnClickFillInIntent(int viewId, Intent fillInIntent) {
- addAction(new SetOnClickFillInIntent(viewId, fillInIntent));
+ setOnClickResponse(viewId, RemoteResponse.fromFillInIntent(fillInIntent));
}
/**
@@ -3903,4 +3795,213 @@
}
}
}
+
+ /**
+ * Class representing a response to an action performed on any element of a RemoteViews.
+ */
+ public static class RemoteResponse {
+
+ private PendingIntent mPendingIntent;
+ private Intent mFillIntent;
+
+ private IntArray mViewIds;
+ private ArrayList<String> mElementNames;
+
+ /**
+ * Creates a response which sends a pending intent as part of the response. The source
+ * bounds ({@link Intent#getSourceBounds()}) of the intent will be set to the bounds of the
+ * target view in screen space.
+ * Note that any activity options associated with the mPendingIntent may get overridden
+ * before starting the intent.
+ *
+ * @param pendingIntent The {@link PendingIntent} to send as part of the response
+ */
+ public static RemoteResponse fromPendingIntent(PendingIntent pendingIntent) {
+ RemoteResponse response = new RemoteResponse();
+ response.mPendingIntent = pendingIntent;
+ return response;
+ }
+
+ /**
+ * When using collections (eg. {@link ListView}, {@link StackView} etc.) in widgets, it is
+ * very costly to set PendingIntents on the individual items, and is hence not permitted.
+ * Instead a single PendingIntent template can be set on the collection, see {@link
+ * RemoteViews#setPendingIntentTemplate(int, PendingIntent)}, and the individual on-click
+ * action of a given item can be distinguished by setting a fillInIntent on that item. The
+ * fillInIntent is then combined with the PendingIntent template in order to determine the
+ * final intent which will be executed when the item is clicked. This works as follows: any
+ * fields which are left blank in the PendingIntent template, but are provided by the
+ * fillInIntent will be overwritten, and the resulting PendingIntent will be used. The rest
+ * of the PendingIntent template will then be filled in with the associated fields that are
+ * set in fillInIntent. See {@link Intent#fillIn(Intent, int)} for more details.
+ * Creates a response which sends a pending intent as part of the response. The source
+ * bounds ({@link Intent#getSourceBounds()}) of the intent will be set to the bounds of the
+ * target view in screen space.
+ * Note that any activity options associated with the mPendingIntent may get overridden
+ * before starting the intent.
+ *
+ * @param fillIntent The intent which will be combined with the parent's PendingIntent in
+ * order to determine the behavior of the response
+ *
+ * @see RemoteViews#setPendingIntentTemplate(int, PendingIntent)
+ * @see RemoteViews#setOnClickFillInIntent(int, Intent)
+ * @return
+ */
+ public static RemoteResponse fromFillInIntent(Intent fillIntent) {
+ RemoteResponse response = new RemoteResponse();
+ response.mFillIntent = fillIntent;
+ return response;
+ }
+
+ /**
+ * Adds a shared element to be transferred as part of the transition between Activities
+ * using cross-Activity scene animations. The position of the first element will be used as
+ * the epicenter for the exit Transition. The position of the associated shared element in
+ * the launched Activity will be the epicenter of its entering Transition.
+ *
+ * @param viewId The id of the view to be shared as part of the transition
+ * @param sharedElementName The shared element name for this view
+ *
+ * @see ActivityOptions#makeSceneTransitionAnimation(Activity, Pair[])
+ */
+ public RemoteResponse addSharedElement(int viewId, String sharedElementName) {
+ if (mViewIds == null) {
+ mViewIds = new IntArray();
+ mElementNames = new ArrayList<>();
+ }
+ mViewIds.add(viewId);
+ mElementNames.add(sharedElementName);
+ return this;
+ }
+
+ private void writeToParcel(Parcel dest, int flags) {
+ PendingIntent.writePendingIntentOrNullToParcel(mPendingIntent, dest);
+ if (mPendingIntent == null) {
+ // Only write the intent if pending intent is null
+ dest.writeTypedObject(mFillIntent, flags);
+ }
+ dest.writeIntArray(mViewIds == null ? null : mViewIds.toArray());
+ dest.writeStringList(mElementNames);
+ }
+
+ private void readFromParcel(Parcel parcel) {
+ mPendingIntent = PendingIntent.readPendingIntentOrNullFromParcel(parcel);
+ if (mPendingIntent == null) {
+ mFillIntent = parcel.readTypedObject(Intent.CREATOR);
+ }
+ int[] viewIds = parcel.createIntArray();
+ mViewIds = viewIds == null ? null : IntArray.wrap(viewIds);
+ mElementNames = parcel.createStringArrayList();
+ }
+
+ private void handleViewClick(View v, OnClickHandler handler) {
+ final PendingIntent pi;
+ if (mPendingIntent != null) {
+ pi = mPendingIntent;
+ } else if (mFillIntent != null) {
+ // Insure that this view is a child of an AdapterView
+ View parent = (View) v.getParent();
+ // Break the for loop on the first encounter of:
+ // 1) an AdapterView,
+ // 2) an AppWidgetHostView that is not a RemoteViewsFrameLayout, or
+ // 3) a null parent.
+ // 2) and 3) are unexpected and catch the case where a child is not
+ // correctly parented in an AdapterView.
+ while (parent != null && !(parent instanceof AdapterView<?>)
+ && !((parent instanceof AppWidgetHostView)
+ && !(parent instanceof RemoteViewsAdapter.RemoteViewsFrameLayout))) {
+ parent = (View) parent.getParent();
+ }
+
+ if (!(parent instanceof AdapterView<?>)) {
+ // Somehow they've managed to get this far without having
+ // and AdapterView as a parent.
+ Log.e(LOG_TAG, "Collection item doesn't have AdapterView parent");
+ return;
+ }
+ // Insure that a template pending intent has been set on an ancestor
+ if (!(parent.getTag() instanceof PendingIntent)) {
+ Log.e(LOG_TAG, "Attempting setOnClickFillInIntent without"
+ + " calling setPendingIntentTemplate on parent.");
+ return;
+ }
+
+ pi = (PendingIntent) parent.getTag();
+ } else {
+ Log.e(LOG_TAG, "Response has neither pendingIntent nor fillInIntent");
+ return;
+ }
+
+ handler.onClickHandler(v, pi, this);
+ }
+
+ /** @hide */
+ public Pair<Intent, ActivityOptions> getLaunchOptions(View view) {
+ Intent intent = mPendingIntent != null ? new Intent() : new Intent(mFillIntent);
+ intent.setSourceBounds(getSourceBounds(view));
+
+ ActivityOptions opts = null;
+
+ Context context = view.getContext();
+ if (context.getResources().getBoolean(
+ com.android.internal.R.bool.config_overrideRemoteViewsActivityTransition)) {
+ TypedArray windowStyle = context.getTheme().obtainStyledAttributes(
+ com.android.internal.R.styleable.Window);
+ int windowAnimations = windowStyle.getResourceId(
+ com.android.internal.R.styleable.Window_windowAnimationStyle, 0);
+ TypedArray windowAnimationStyle = context.obtainStyledAttributes(
+ windowAnimations, com.android.internal.R.styleable.WindowAnimation);
+ int enterAnimationId = windowAnimationStyle.getResourceId(com.android.internal.R
+ .styleable.WindowAnimation_activityOpenRemoteViewsEnterAnimation, 0);
+ windowStyle.recycle();
+ windowAnimationStyle.recycle();
+
+ if (enterAnimationId != 0) {
+ opts = ActivityOptions.makeCustomAnimation(context,
+ enterAnimationId, 0);
+ opts.setPendingIntentLaunchFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ }
+ }
+
+ if (opts == null && mViewIds != null && mElementNames != null) {
+ View parent = (View) view.getParent();
+ while (parent != null && !(parent instanceof AppWidgetHostView)) {
+ parent = (View) parent.getParent();
+ }
+ if (parent instanceof AppWidgetHostView) {
+ opts = ((AppWidgetHostView) parent).createSharedElementActivityOptions(
+ mViewIds.toArray(),
+ mElementNames.toArray(new String[mElementNames.size()]), intent);
+ }
+ }
+
+ if (opts == null) {
+ opts = ActivityOptions.makeBasic();
+ opts.setPendingIntentLaunchFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ }
+ return Pair.create(intent, opts);
+ }
+ }
+
+ /** @hide */
+ public static boolean startPendingIntent(View view, PendingIntent pendingIntent,
+ Pair<Intent, ActivityOptions> options) {
+ try {
+ // TODO: Unregister this handler if PendingIntent.FLAG_ONE_SHOT?
+ Context context = view.getContext();
+ // The NEW_TASK flags are applied through the activity options and not as a part of
+ // the call to startIntentSender() to ensure that they are consistently applied to
+ // both mutable and immutable PendingIntents.
+ context.startIntentSender(
+ pendingIntent.getIntentSender(), options.first,
+ 0, 0, 0, options.second.toBundle());
+ } catch (IntentSender.SendIntentException e) {
+ Log.e(LOG_TAG, "Cannot send pending intent: ", e);
+ return false;
+ } catch (Exception e) {
+ Log.e(LOG_TAG, "Cannot send pending intent due to unknown exception: ", e);
+ return false;
+ }
+ return true;
+ }
}
diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java
index d7031ea..3462e08 100644
--- a/core/java/com/android/internal/app/AlertController.java
+++ b/core/java/com/android/internal/app/AlertController.java
@@ -191,7 +191,8 @@
public static final AlertController create(Context context, DialogInterface di, Window window) {
final TypedArray a = context.obtainStyledAttributes(
- null, R.styleable.AlertDialog, R.attr.alertDialogStyle, 0);
+ null, R.styleable.AlertDialog, R.attr.alertDialogStyle,
+ R.style.Theme_DeviceDefault_Settings);
int controllerType = a.getInt(R.styleable.AlertDialog_controllerType, 0);
a.recycle();
diff --git a/core/java/com/android/internal/util/ScreenRecordHelper.java b/core/java/com/android/internal/util/ScreenRecordHelper.java
new file mode 100644
index 0000000..64d0898
--- /dev/null
+++ b/core/java/com/android/internal/util/ScreenRecordHelper.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.util;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+
+/**
+ * Helper class to initiate a screen recording
+ */
+public class ScreenRecordHelper {
+ private static final String SYSUI_PACKAGE = "com.android.systemui";
+ private static final String SYSUI_SCREENRECORD_LAUNCHER =
+ "com.android.systemui.screenrecord.ScreenRecordDialog";
+
+ private final Context mContext;
+
+ /**
+ * Create a new ScreenRecordHelper for the given context
+ * @param context
+ */
+ public ScreenRecordHelper(Context context) {
+ mContext = context;
+ }
+
+ /**
+ * Show dialog of screen recording options to user.
+ */
+ public void launchRecordPrompt() {
+ final ComponentName launcherComponent = new ComponentName(SYSUI_PACKAGE,
+ SYSUI_SCREENRECORD_LAUNCHER);
+ final Intent intent = new Intent();
+ intent.setComponent(launcherComponent);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ mContext.startActivity(intent);
+ }
+}
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 80d8063..c96bacd 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -55,21 +55,21 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.LocalServices;
+
import com.google.android.collect.Lists;
import libcore.util.HexEncoding;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.StringJoiner;
+
/**
* Utilities for the lock pattern and its settings.
*/
@@ -1527,7 +1527,7 @@
/**
* @see StrongAuthTracker#isFingerprintAllowedForUser
*/
- public boolean isFingerprintAllowedForUser(int userId) {
+ public boolean isBiometricAllowedForUser(int userId) {
return (getStrongAuthForUser(userId) & ~StrongAuthTracker.ALLOWING_BIOMETRIC) == 0;
}
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java
index ae0f8b9..15745e9 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -26,6 +26,7 @@
import android.os.Environment;
import android.os.Process;
import android.os.storage.StorageManager;
+import android.permission.PermissionManager.SplitPermissionInfo;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -74,6 +75,8 @@
// system configuration files.
final SparseArray<ArraySet<String>> mSystemPermissions = new SparseArray<>();
+ final ArrayList<SplitPermissionInfo> mSplitPermissions = new ArrayList<>();
+
// These are the built-in shared libraries that were read from the
// system configuration files. Keys are the library names; strings are the
// paths to the libraries.
@@ -192,6 +195,10 @@
return mSystemPermissions;
}
+ public ArrayList<SplitPermissionInfo> getSplitPermissions() {
+ return mSplitPermissions;
+ }
+
public ArrayMap<String, String> getSharedLibraries() {
return mSharedLibraries;
}
@@ -484,6 +491,8 @@
perms.add(perm);
XmlUtils.skipCurrentTag(parser);
+ } else if ("split-permission".equals(name) && allowPermissions) {
+ readSplitPermission(parser, permFile);
} else if ("library".equals(name) && allowLibs) {
String lname = parser.getAttributeValue(null, "name");
String lfile = parser.getAttributeValue(null, "file");
@@ -883,4 +892,46 @@
}
mOemPermissions.put(packageName, permissions);
}
+
+ private void readSplitPermission(XmlPullParser parser, File permFile)
+ throws IOException, XmlPullParserException {
+ String splitPerm = parser.getAttributeValue(null, "name");
+ if (splitPerm == null) {
+ Slog.w(TAG, "<split-permission> without name in " + permFile + " at "
+ + parser.getPositionDescription());
+ XmlUtils.skipCurrentTag(parser);
+ return;
+ }
+ String targetSdkStr = parser.getAttributeValue(null, "targetSdk");
+ int targetSdk = Build.VERSION_CODES.CUR_DEVELOPMENT + 1;
+ if (!TextUtils.isEmpty(targetSdkStr)) {
+ try {
+ targetSdk = Integer.parseInt(targetSdkStr);
+ } catch (NumberFormatException e) {
+ Slog.w(TAG, "<split-permission> targetSdk not an integer in " + permFile + " at "
+ + parser.getPositionDescription());
+ XmlUtils.skipCurrentTag(parser);
+ return;
+ }
+ }
+ final int depth = parser.getDepth();
+ List<String> newPermissions = new ArrayList<>();
+ while (XmlUtils.nextElementWithin(parser, depth)) {
+ String name = parser.getName();
+ if ("new-permission".equals(name)) {
+ final String newName = parser.getAttributeValue(null, "name");
+ if (TextUtils.isEmpty(newName)) {
+ Slog.w(TAG, "name is required for <new-permission> in "
+ + parser.getPositionDescription());
+ continue;
+ }
+ newPermissions.add(newName);
+ } else {
+ XmlUtils.skipCurrentTag(parser);
+ }
+ }
+ if (!newPermissions.isEmpty()) {
+ mSplitPermissions.add(new SplitPermissionInfo(splitPerm, newPermissions, targetSdk));
+ }
+ }
}
diff --git a/core/jni/android_media_AudioFormat.h b/core/jni/android_media_AudioFormat.h
index 83a8c2e..f7f13a5 100644
--- a/core/jni/android_media_AudioFormat.h
+++ b/core/jni/android_media_AudioFormat.h
@@ -71,10 +71,10 @@
return AUDIO_FORMAT_AAC_HE_V1;
case ENCODING_AAC_HE_V2:
return AUDIO_FORMAT_AAC_HE_V2;
- case ENCODING_DOLBY_TRUEHD:
- return AUDIO_FORMAT_DOLBY_TRUEHD;
case ENCODING_IEC61937:
return AUDIO_FORMAT_IEC61937;
+ case ENCODING_DOLBY_TRUEHD:
+ return AUDIO_FORMAT_DOLBY_TRUEHD;
case ENCODING_AAC_ELD:
return AUDIO_FORMAT_AAC_ELD;
case ENCODING_AAC_XHE:
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index d4a84c1..7410b52 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -1016,6 +1016,7 @@
jintArray jFormats = NULL;
jobjectArray jGains = NULL;
jobject jHandle = NULL;
+ jobject jAudioPortConfig = NULL;
jstring jDeviceName = NULL;
bool useInMask;
size_t numPositionMasks = 0;
@@ -1194,7 +1195,6 @@
goto exit;
}
- jobject jAudioPortConfig;
jStatus = convertAudioPortConfigFromNative(env,
*jAudioPort,
&jAudioPortConfig,
@@ -1230,6 +1230,9 @@
if (jHandle != NULL) {
env->DeleteLocalRef(jHandle);
}
+ if (jAudioPortConfig != NULL) {
+ env->DeleteLocalRef(jAudioPortConfig);
+ }
return jStatus;
}
@@ -1300,12 +1303,15 @@
}
for (size_t i = 0; i < numPorts; i++) {
- jobject jAudioPort;
+ jobject jAudioPort = NULL;
jStatus = convertAudioPortFromNative(env, &jAudioPort, &nPorts[i]);
if (jStatus != AUDIO_JAVA_SUCCESS) {
goto exit;
}
env->CallBooleanMethod(jPorts, gArrayListMethods.add, jAudioPort);
+ if (jAudioPort != NULL) {
+ env->DeleteLocalRef(jAudioPort);
+ }
}
exit:
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index ec98080..fd042b3 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -865,17 +865,17 @@
// ----------------------------------------------------------------------------
-static jint android_os_Binder_getCallingPid(JNIEnv* env, jobject clazz)
+static jint android_os_Binder_getCallingPid()
{
return IPCThreadState::self()->getCallingPid();
}
-static jint android_os_Binder_getCallingUid(JNIEnv* env, jobject clazz)
+static jint android_os_Binder_getCallingUid()
{
return IPCThreadState::self()->getCallingUid();
}
-static jlong android_os_Binder_clearCallingIdentity(JNIEnv* env, jobject clazz)
+static jlong android_os_Binder_clearCallingIdentity()
{
return IPCThreadState::self()->clearCallingIdentity();
}
@@ -894,12 +894,12 @@
IPCThreadState::self()->restoreCallingIdentity(token);
}
-static void android_os_Binder_setThreadStrictModePolicy(JNIEnv* env, jobject clazz, jint policyMask)
+static void android_os_Binder_setThreadStrictModePolicy(jint policyMask)
{
IPCThreadState::self()->setStrictModePolicy(policyMask);
}
-static jint android_os_Binder_getThreadStrictModePolicy(JNIEnv* env, jobject clazz)
+static jint android_os_Binder_getThreadStrictModePolicy()
{
return IPCThreadState::self()->getStrictModePolicy();
}
@@ -950,11 +950,16 @@
static const JNINativeMethod gBinderMethods[] = {
/* name, signature, funcPtr */
+ // @CriticalNative
{ "getCallingPid", "()I", (void*)android_os_Binder_getCallingPid },
+ // @CriticalNative
{ "getCallingUid", "()I", (void*)android_os_Binder_getCallingUid },
+ // @CriticalNative
{ "clearCallingIdentity", "()J", (void*)android_os_Binder_clearCallingIdentity },
{ "restoreCallingIdentity", "(J)V", (void*)android_os_Binder_restoreCallingIdentity },
+ // @CriticalNative
{ "setThreadStrictModePolicy", "(I)V", (void*)android_os_Binder_setThreadStrictModePolicy },
+ // @CriticalNative
{ "getThreadStrictModePolicy", "()I", (void*)android_os_Binder_getThreadStrictModePolicy },
// @CriticalNative
{ "setThreadWorkSource", "(I)I", (void*)android_os_Binder_setThreadWorkSource },
diff --git a/core/proto/OWNERS b/core/proto/OWNERS
index 30a9a01..2ace1ac 100644
--- a/core/proto/OWNERS
+++ b/core/proto/OWNERS
@@ -9,7 +9,11 @@
singhtejinder@google.com
yanglu@google.com
yaochen@google.com
+yro@google.com
# Frameworks
ogunwale@google.com
jjaggi@google.com
+
+# Launcher
+hyunyoungs@google.com
diff --git a/core/proto/android/app/settings_enums.proto b/core/proto/android/app/settings_enums.proto
index 1dc435c0..5433393 100644
--- a/core/proto/android/app/settings_enums.proto
+++ b/core/proto/android/app/settings_enums.proto
@@ -26,38 +26,43 @@
ACTION_UNKNOWN = 0;
PAGE_VISIBLE = 1;
PAGE_HIDE = 2;
- PREF_CHANGE = 3;
+
+ // ACTION: Settings > Any preference is changed
+ ACTION_SETTINGS_PREFERENCE_CHANGE = 853;
}
/**
* Id for Settings pages. Each page must have its own unique Id.
*/
enum PageId {
- // Unknown page. Should not be used in production code.
- PAGE_UNKNOWN = 0;
+ // Unknown page. Should not be used in production code.
+ PAGE_UNKNOWN = 0;
- // OPEN: Settings homepage
- SETTINGS_HOMEPAGE = 1502;
+ // OPEN: Settings homepage
+ SETTINGS_HOMEPAGE = 1502;
- // OPEN: Settings > System > Input & Gesture > Wake screen
- SETTINGS_GESTURE_WAKE_SCREEN = 1570;
+ // OPEN: Settings > System > Input & Gesture > Wake screen
+ SETTINGS_GESTURE_WAKE_SCREEN = 1570;
- // OPEN: Settings > Network & internet > Mobile network
- MOBILE_NETWORK = 1571;
+ // OPEN: Settings > Network & internet > Mobile network
+ MOBILE_NETWORK = 1571;
- // OPEN: Settings > Network & internet > Mobile network > Choose network
- MOBILE_NETWORK_SELECT = 1581;
+ // OPEN: Settings > Network & internet > Mobile network > Choose network
+ MOBILE_NETWORK_SELECT = 1581;
- // OPEN: Settings > Network & internet > Mobile network > Mobile Data > Dialog
- MOBILE_DATA_DIALOG = 1582;
+ // OPEN: Settings > Network & internet > Mobile network > Mobile Data > Dialog
+ MOBILE_DATA_DIALOG = 1582;
- // OPEN: Settings > Network & internet > Mobile network > Data roaming > Dialog
- MOBILE_ROAMING_DIALOG = 1583;
+ // OPEN: Settings > Network & internet > Mobile network > Data roaming > Dialog
+ MOBILE_ROAMING_DIALOG = 1583;
- // Settings > Display > Lock screen display > On lock screen
- LOCK_SCREEN_NOTIFICATION_CONTENT = 1584;
+ // Settings > Display > Lock screen display > On lock screen
+ LOCK_SCREEN_NOTIFICATION_CONTENT = 1584;
- // ConfirmDeviceCredentials > BiometricPrompt
- BIOMETRIC_FRAGMENT = 1585;
+ // ConfirmDeviceCredentials > BiometricPrompt
+ BIOMETRIC_FRAGMENT = 1585;
+
+ // OPEN: Biometric Enrollment (android.settings.BIOMETRIC_ENROLL action intent)
+ BIOMETRIC_ENROLL_ACTIVITY = 1586;
}
diff --git a/core/proto/android/server/windowmanagerservice.proto b/core/proto/android/server/windowmanagerservice.proto
index c1c86f0..b0dbaa0 100644
--- a/core/proto/android/server/windowmanagerservice.proto
+++ b/core/proto/android/server/windowmanagerservice.proto
@@ -45,7 +45,6 @@
optional bool display_frozen = 6;
optional int32 rotation = 7;
optional int32 last_orientation = 8;
- optional AppTransitionProto app_transition = 9;
}
/* represents RootWindowContainer object */
@@ -159,6 +158,7 @@
optional DisplayFramesProto display_frames = 13;
optional int32 surface_size = 14;
optional string focused_app = 15;
+ optional AppTransitionProto app_transition = 16;
}
/* represents DisplayFrames */
diff --git a/core/proto/android/service/adb.proto b/core/proto/android/service/adb.proto
new file mode 100644
index 0000000..0060813
--- /dev/null
+++ b/core/proto/android/service/adb.proto
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto2";
+package android.service.adb;
+
+option java_multiple_files = true;
+option java_outer_classname = "AdbServiceProto";
+
+import "frameworks/base/libs/incident/proto/android/privacy.proto";
+
+message AdbServiceDumpProto {
+ option (android.msg_privacy).dest = DEST_AUTOMATIC;
+
+ optional AdbDebuggingManagerProto debugging_manager = 1;
+}
+
+message AdbDebuggingManagerProto {
+ option (android.msg_privacy).dest = DEST_AUTOMATIC;
+
+ optional bool connected_to_adb = 1;
+ optional string last_key_recevied = 2 [ (android.privacy).dest = DEST_EXPLICIT ];
+ optional string user_keys = 3 [ (android.privacy).dest = DEST_LOCAL ];
+ optional string system_keys = 4 [ (android.privacy).dest = DEST_LOCAL ];
+}
diff --git a/core/proto/android/stats/launcher/Android.bp b/core/proto/android/stats/launcher/Android.bp
new file mode 100644
index 0000000..b8fb6ff
--- /dev/null
+++ b/core/proto/android/stats/launcher/Android.bp
@@ -0,0 +1,27 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+java_library {
+ name: "launcherprotosnano",
+ proto: {
+ type: "nano",
+ output_params: ["store_unknown_fields=true"],
+ include_dirs: ["external/protobuf/src"],
+ },
+
+ sdk_version: "current",
+ srcs: [
+ "*.proto",
+ ],
+}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index e728ead..48d1dff 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -488,6 +488,7 @@
<protected-broadcast android:name="android.telephony.action.CARRIER_CONFIG_CHANGED" />
<protected-broadcast android:name="android.telephony.action.DEFAULT_SUBSCRIPTION_CHANGED" />
<protected-broadcast android:name="android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED" />
+ <protected-broadcast android:name="android.telephony.action.SECRET_CODE" />
<protected-broadcast android:name="android.telephony.action.SHOW_VOICEMAIL_NOTIFICATION" />
<protected-broadcast android:name="android.telephony.action.SUBSCRIPTION_PLANS_CHANGED" />
@@ -1791,6 +1792,12 @@
<permission android:name="android.permission.MANAGE_USB"
android:protectionLevel="signature|privileged" />
+ <!-- @SystemApi Allows an application to manage Android Debug Bridge settings.
+ <p>Not for use by third-party applications.
+ @hide -->
+ <permission android:name="android.permission.MANAGE_DEBUGGING"
+ android:protectionLevel="signature|privileged" />
+
<!-- @SystemApi Allows an application to access the MTP USB kernel driver.
For use only by the device side MTP implementation.
@hide -->
diff --git a/core/res/res/values-mcc208-mnc01/config.xml b/core/res/res/values-mcc208-mnc01/config.xml
deleted file mode 100644
index 5930e3a..0000000
--- a/core/res/res/values-mcc208-mnc01/config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, 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.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. Do not translate. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Orange Internet,orange.fr,,,orange,orange,,,,,208,01,1,DUN</item>
- </string-array>
-
-</resources>
diff --git a/core/res/res/values-mcc208-mnc10/config.xml b/core/res/res/values-mcc208-mnc10/config.xml
deleted file mode 100644
index 3ed7818..0000000
--- a/core/res/res/values-mcc208-mnc10/config.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, 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 my 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.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>SFR option modem,websfr,,,,,,,,,208,10,,DUN</item>
- <item>[ApnSettingV3]INTERNET NRJ,internetnrj,,,,,,,,,208,10,,DUN,,,true,0,,,,,,,gid,4E</item>
- </string-array>
-
-</resources>
diff --git a/core/res/res/values-mcc214-mnc01/config.xml b/core/res/res/values-mcc214-mnc01/config.xml
index 41e24d7..b34696b 100644
--- a/core/res/res/values-mcc214-mnc01/config.xml
+++ b/core/res/res/values-mcc214-mnc01/config.xml
@@ -31,15 +31,6 @@
<item>9</item>
</integer-array>
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>INTERNET,airtelnet.es,,,vodafone,vodafone,,,,,214,01,1,DUN</item>
- </string-array>
-
<!-- Whether safe headphone volume warning dialog is disabled on Vol+ (operator specific). -->
<bool name="config_safe_media_disable_on_volume_up">false</bool>
diff --git a/core/res/res/values-mcc214-mnc07/config.xml b/core/res/res/values-mcc214-mnc07/config.xml
deleted file mode 100644
index 4b7cc7c..0000000
--- a/core/res/res/values-mcc214-mnc07/config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2013, 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 my 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.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Conexión Compartida,movistar.es,,,MOVISTAR,MOVISTAR,,,,,214,07,1,DUN</item>
- </string-array>
-
-</resources>
diff --git a/core/res/res/values-mcc222-mnc10/config.xml b/core/res/res/values-mcc222-mnc10/config.xml
index 0085a1b..abacef0 100644
--- a/core/res/res/values-mcc222-mnc10/config.xml
+++ b/core/res/res/values-mcc222-mnc10/config.xml
@@ -20,15 +20,6 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. Do not translate. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Tethering Internet,web.omnitel.it,,,,,,,,,222,10,,DUN</item>
- </string-array>
-
<!-- Whether safe headphone volume warning dialog is disabled on Vol+ (operator specific). -->
<bool name="config_safe_media_disable_on_volume_up">false</bool>
diff --git a/core/res/res/values-mcc234-mnc20/config.xml b/core/res/res/values-mcc234-mnc20/config.xml
index 1e4bb0b..224dc31 100644
--- a/core/res/res/values-mcc234-mnc20/config.xml
+++ b/core/res/res/values-mcc234-mnc20/config.xml
@@ -20,15 +20,6 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type"
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>3hotspot,3hotspot,,,,,,,,,234,20,0,DUN</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1440</integer>
diff --git a/core/res/res/values-mcc235-mnc94/config.xml b/core/res/res/values-mcc235-mnc94/config.xml
index d527304..38ae2a0 100644
--- a/core/res/res/values-mcc235-mnc94/config.xml
+++ b/core/res/res/values-mcc235-mnc94/config.xml
@@ -31,14 +31,6 @@
<item>9</item>
</integer-array>
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type"
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>3hotspot,3hotspot,,,,,,,,,235,94,0,DUN</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1440</integer>
diff --git a/core/res/res/values-mcc268-mnc03/config.xml b/core/res/res/values-mcc268-mnc03/config.xml
index 2f5171b..876c26e 100644
--- a/core/res/res/values-mcc268-mnc03/config.xml
+++ b/core/res/res/values-mcc268-mnc03/config.xml
@@ -30,13 +30,4 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,270,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Optimus HotSpot,modem,,,,,,,,,268,03,,DUN</item>
- </string-array>
</resources>
diff --git a/core/res/res/values-mcc302-mnc220/config.xml b/core/res/res/values-mcc302-mnc220/config.xml
index 13f6bce..36efd0a 100644
--- a/core/res/res/values-mcc302-mnc220/config.xml
+++ b/core/res/res/values-mcc302-mnc220/config.xml
@@ -23,17 +23,6 @@
<integer name="config_mobile_mtu">1410</integer>
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>[ApnSettingV3]TELUS ISP,isp.telus.com,,,,,,,,,302,220,,DUN,IP,IP,true,0,,,,,,,gid,5455</item>
- <item>[ApnSettingV3]Tethered Mobile Internet,isp.mb.com,,,,,,,,,302,220,,DUN,,,true,0,,,,,,,gid,5043</item>
- <item>[ApnSettingV3]Tethered Public Mobile,isp.mb.com,,,,,,,,,302,220,,DUN,,,true,0,,,,,,,gid,4D4F</item>
- </string-array>
-
<!-- Values for GPS configuration (Telus) -->
<string-array translatable="false" name="config_gpsParameters">
<item>SUPL_HOST=supl.google.com</item>
diff --git a/core/res/res/values-mcc302-mnc221/config.xml b/core/res/res/values-mcc302-mnc221/config.xml
index d45b91a..a11dd95 100644
--- a/core/res/res/values-mcc302-mnc221/config.xml
+++ b/core/res/res/values-mcc302-mnc221/config.xml
@@ -20,18 +20,6 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>[ApnSettingV3]TELUS ISP,isp.telus.com,,,,,,,,,302,221,,DUN,,,true,0,,,,,,,gid,5455</item>
- <item>[ApnSettingV3]Tethered PC Mobile,isp.mb.com,,,,,,,,,302,221,,DUN,,,true,0,,,,,,,gid,5043</item>
- <item>[ApnSettingV3]Koodo,sp.koodo.com,,,,,,,,,302,221,,DUN,,,true,0,,,,,,,gid,4B4F</item>
- </string-array>
-
<!-- Values for GPS configuration (Telus) -->
<string-array translatable="false" name="config_gpsParameters">
<item>SUPL_HOST=supl.google.com</item>
diff --git a/core/res/res/values-mcc302-mnc370/config.xml b/core/res/res/values-mcc302-mnc370/config.xml
index b520d5d..8d29ec1 100644
--- a/core/res/res/values-mcc302-mnc370/config.xml
+++ b/core/res/res/values-mcc302-mnc370/config.xml
@@ -20,17 +20,6 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. Do not translate. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Fido LTE Tethering,ltedata.apn,,,,,,,,,302,370,,DUN</item>
- <item>[ApnSettingV3]MTS Tethering,internet.mts,,,,,,,,,302,370,,DUN,,,true,0,,,,,,,gid,2C</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1410</integer>
diff --git a/core/res/res/values-mcc302-mnc660/config.xml b/core/res/res/values-mcc302-mnc660/config.xml
index 8c2e702..beb2336 100644
--- a/core/res/res/values-mcc302-mnc660/config.xml
+++ b/core/res/res/values-mcc302-mnc660/config.xml
@@ -29,16 +29,6 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>MTS -Tethering,internet.mts,,,,,,,,,302,660,,DUN</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1430</integer>
diff --git a/core/res/res/values-mcc302-mnc720/config.xml b/core/res/res/values-mcc302-mnc720/config.xml
index 11bfa05..735a8c8 100644
--- a/core/res/res/values-mcc302-mnc720/config.xml
+++ b/core/res/res/values-mcc302-mnc720/config.xml
@@ -20,19 +20,6 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. Do not translate. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Rogers LTE Tethering,ltedata.apn,,,,,,,,,302,720,,DUN</item>
- <item>[ApnSettingV3]chatr Tethering,chatrisp.apn,,,,,,,,,302,720,,DUN,,,true,0,,,,,,,imsi,302720x94</item>
- <item>[ApnSettingV3]Tbaytel Tethering,ltedata.apn,,,,,,,,,302,720,,DUN,IPV4V6,IP,true,0,,,,,,,gid,BA</item>
- <item>[ApnSettingV3]Cityfone Tethering,ltedata.apn,,,,,,,,,302,720,,DUN,IPV4V6,IP,true,0,,,,,,,spn,CITYFONE</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1430</integer>
diff --git a/core/res/res/values-mcc311-mnc190/config.xml b/core/res/res/values-mcc311-mnc190/config.xml
index c17a07c..876c26e 100644
--- a/core/res/res/values-mcc311-mnc190/config.xml
+++ b/core/res/res/values-mcc311-mnc190/config.xml
@@ -30,13 +30,4 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type"
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Tether,broadband.cellular1.net,,,,,,,,,311,190,,DUN</item>
- </string-array>
-
</resources>
diff --git a/core/res/res/values-mcc334-mnc050/config.xml b/core/res/res/values-mcc334-mnc050/config.xml
index 616a8e8..23678f1 100644
--- a/core/res/res/values-mcc334-mnc050/config.xml
+++ b/core/res/res/values-mcc334-mnc050/config.xml
@@ -31,15 +31,6 @@
<item>9</item>
</integer-array>
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Modem,modem.iusacellgsm.mx,,,iusacellgsm,iusacellgsm,,,,,334,050,1,DUN</item>
- </string-array>
-
<!-- Do not translate. Defines the slots is Two Digit Number for dialing normally not USSD -->
<string-array translatable="false" name="config_twoDigitNumberPattern">
<item>"#9"</item>
diff --git a/core/res/res/values-mcc340-mnc01/config.xml b/core/res/res/values-mcc340-mnc01/config.xml
index 1ca8963..3b23b85 100644
--- a/core/res/res/values-mcc340-mnc01/config.xml
+++ b/core/res/res/values-mcc340-mnc01/config.xml
@@ -29,13 +29,4 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Orangeweb,orangeweb,,,orange,orange,,,,,340,01,1,DUN</item>
- </string-array>
</resources>
diff --git a/core/res/res/values-mcc425-mnc07/config.xml b/core/res/res/values-mcc425-mnc07/config.xml
index 770cebd..876c26e 100644
--- a/core/res/res/values-mcc425-mnc07/config.xml
+++ b/core/res/res/values-mcc425-mnc07/config.xml
@@ -30,13 +30,4 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>PC HOT mobile,pc.hotm,,,,,,,,,425,07,,DUN</item>
- </string-array>
</resources>
diff --git a/core/res/res/values-mcc454-mnc10/config.xml b/core/res/res/values-mcc454-mnc10/config.xml
deleted file mode 100644
index 79a9a7e..0000000
--- a/core/res/res/values-mcc454-mnc10/config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2013, 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 my 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.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>one2free Tethering,internet,,,,,,,,,454,10,0,DUN</item>
- </string-array>
-
-</resources>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 99af0de..6fc0f5b 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -2735,4 +2735,10 @@
<attr name="name" format="string" />
</declare-styleable>
+
+ <declare-styleable name="AndroidManifestProfileable" parent="AndroidManifestApplication">
+ <!-- Flag indicating whether the application can be profiled by the shell user,
+ even when running on a device that is running in user mode. -->
+ <attr name="shell" format="boolean" />
+ </declare-styleable>
</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index e257a5c..a8c78a6 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -513,17 +513,6 @@
<string-array translatable="false" name="config_cdma_dun_supported_types">
</string-array>
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3 or higher.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN"
- Multiple entries are separated by using string-array:
- "<item>[ApnSettingV3]Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,14,,,,,,,spn,testspn</item>
- <item>[ApnSettingV5]Name1,apn2,,,,,,,,,123,46,,mms|*,IPV6,IP,true,12,,,,,,,,,,</item>" -->
- <string-array translatable="false" name="config_tether_apndata">
- </string-array>
-
<!-- Boolean indicating whether the wifi chipset has dual frequency band support -->
<bool translatable="false" name="config_wifi_dual_band_support">false</bool>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index b790829..e1c5df3 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2917,6 +2917,7 @@
<public name="isSplitRequired" />
<public name="textLocale" />
<public name="settingsSliceUri" />
+ <public name="shell" />
</public-group>
<public-group type="drawable" first-id="0x010800b4">
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index abd653b..670a4a2 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1831,7 +1831,6 @@
<java-symbol type="array" name="config_tether_dhcp_range" />
<java-symbol type="array" name="config_tether_upstream_types" />
<java-symbol type="bool" name="config_tether_upstream_automatic" />
- <java-symbol type="array" name="config_tether_apndata" />
<java-symbol type="array" name="config_tether_usb_regexs" />
<java-symbol type="array" name="config_tether_wifi_regexs" />
<java-symbol type="array" name="config_usbHostBlacklist" />
diff --git a/core/tests/coretests/src/android/view/textclassifier/ModelFileManagerTest.java b/core/tests/coretests/src/android/view/textclassifier/ModelFileManagerTest.java
new file mode 100644
index 0000000..51e5aec
--- /dev/null
+++ b/core/tests/coretests/src/android/view/textclassifier/ModelFileManagerTest.java
@@ -0,0 +1,301 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.view.textclassifier;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.os.LocaleList;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class ModelFileManagerTest {
+
+ @Mock
+ private Supplier<List<ModelFileManager.ModelFile>> mModelFileSupplier;
+ private ModelFileManager.ModelFileSupplierImpl mModelFileSupplierImpl;
+ private ModelFileManager mModelFileManager;
+ private File mRootTestDir;
+ private File mFactoryModelDir;
+ private File mUpdatedModelFile;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mModelFileManager = new ModelFileManager(mModelFileSupplier);
+ mRootTestDir = InstrumentationRegistry.getContext().getCacheDir();
+ mFactoryModelDir = new File(mRootTestDir, "factory");
+ mUpdatedModelFile = new File(mRootTestDir, "updated.model");
+
+ mModelFileSupplierImpl =
+ new ModelFileManager.ModelFileSupplierImpl(
+ mFactoryModelDir,
+ "test\\d.model",
+ mUpdatedModelFile,
+ fd -> 1,
+ fd -> ModelFileManager.ModelFile.LANGUAGE_INDEPENDENT
+ );
+
+ mRootTestDir.mkdirs();
+ mFactoryModelDir.mkdirs();
+ }
+
+ @After
+ public void removeTestDir() {
+ recursiveDelete(mRootTestDir);
+ }
+
+ @Test
+ public void get() {
+ ModelFileManager.ModelFile modelFile =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1, Collections.emptyList(), true);
+ when(mModelFileSupplier.get()).thenReturn(Collections.singletonList(modelFile));
+
+ List<ModelFileManager.ModelFile> modelFiles = mModelFileManager.listModelFiles();
+
+ assertThat(modelFiles).hasSize(1);
+ assertThat(modelFiles.get(0)).isEqualTo(modelFile);
+ }
+
+ @Test
+ public void findBestModel_versionCode() {
+ ModelFileManager.ModelFile olderModelFile =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1,
+ Collections.emptyList(), true);
+
+ ModelFileManager.ModelFile newerModelFile =
+ new ModelFileManager.ModelFile(
+ new File("/path/b"), 2,
+ Collections.emptyList(), true);
+ when(mModelFileSupplier.get())
+ .thenReturn(Arrays.asList(olderModelFile, newerModelFile));
+
+ ModelFileManager.ModelFile bestModelFile =
+ mModelFileManager.findBestModelFile(LocaleList.getEmptyLocaleList());
+
+ assertThat(bestModelFile).isEqualTo(newerModelFile);
+ }
+
+ @Test
+ public void findBestModel_languageDependentModelIsPreferred() {
+ Locale locale = Locale.forLanguageTag("ja");
+ ModelFileManager.ModelFile languageIndependentModelFile =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1,
+ Collections.emptyList(), true);
+
+ ModelFileManager.ModelFile languageDependentModelFile =
+ new ModelFileManager.ModelFile(
+ new File("/path/b"), 1,
+ Collections.singletonList(locale), false);
+ when(mModelFileSupplier.get())
+ .thenReturn(
+ Arrays.asList(languageIndependentModelFile, languageDependentModelFile));
+
+ ModelFileManager.ModelFile bestModelFile =
+ mModelFileManager.findBestModelFile(
+ LocaleList.forLanguageTags(locale.toLanguageTag()));
+ assertThat(bestModelFile).isEqualTo(languageDependentModelFile);
+ }
+
+ @Test
+ public void findBestModel_useIndependentWhenNoLanguageModelMatch() {
+ Locale locale = Locale.forLanguageTag("ja");
+ ModelFileManager.ModelFile languageIndependentModelFile =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1,
+ Collections.emptyList(), true);
+
+ ModelFileManager.ModelFile languageDependentModelFile =
+ new ModelFileManager.ModelFile(
+ new File("/path/b"), 1,
+ Collections.singletonList(locale), false);
+
+ when(mModelFileSupplier.get())
+ .thenReturn(
+ Arrays.asList(languageIndependentModelFile, languageDependentModelFile));
+
+ ModelFileManager.ModelFile bestModelFile =
+ mModelFileManager.findBestModelFile(
+ LocaleList.forLanguageTags("zh-hk"));
+ assertThat(bestModelFile).isEqualTo(languageIndependentModelFile);
+ }
+
+ @Test
+ public void findBestModel_languageIsMoreImportantThanVersion() {
+ ModelFileManager.ModelFile matchButOlderModel =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1,
+ Collections.singletonList(Locale.forLanguageTag("fr")), false);
+
+ ModelFileManager.ModelFile mismatchButNewerModel =
+ new ModelFileManager.ModelFile(
+ new File("/path/b"), 2,
+ Collections.singletonList(Locale.forLanguageTag("ja")), false);
+
+ when(mModelFileSupplier.get())
+ .thenReturn(
+ Arrays.asList(matchButOlderModel, mismatchButNewerModel));
+
+ ModelFileManager.ModelFile bestModelFile =
+ mModelFileManager.findBestModelFile(
+ LocaleList.forLanguageTags("fr"));
+ assertThat(bestModelFile).isEqualTo(matchButOlderModel);
+ }
+
+ @Test
+ public void modelFileEquals() {
+ ModelFileManager.ModelFile modelA =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1,
+ Collections.singletonList(Locale.forLanguageTag("ja")), false);
+
+ ModelFileManager.ModelFile modelB =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1,
+ Collections.singletonList(Locale.forLanguageTag("ja")), false);
+
+ assertThat(modelA).isEqualTo(modelB);
+ }
+
+ @Test
+ public void modelFile_different() {
+ ModelFileManager.ModelFile modelA =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1,
+ Collections.singletonList(Locale.forLanguageTag("ja")), false);
+
+ ModelFileManager.ModelFile modelB =
+ new ModelFileManager.ModelFile(
+ new File("/path/b"), 1,
+ Collections.singletonList(Locale.forLanguageTag("ja")), false);
+
+ assertThat(modelA).isNotEqualTo(modelB);
+ }
+
+
+ @Test
+ public void modelFile_getPath() {
+ ModelFileManager.ModelFile modelA =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1,
+ Collections.singletonList(Locale.forLanguageTag("ja")), false);
+
+ assertThat(modelA.getPath()).isEqualTo("/path/a");
+ }
+
+ @Test
+ public void modelFile_getName() {
+ ModelFileManager.ModelFile modelA =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1,
+ Collections.singletonList(Locale.forLanguageTag("ja")), false);
+
+ assertThat(modelA.getName()).isEqualTo("a");
+ }
+
+ @Test
+ public void modelFile_isPreferredTo_languageDependentIsBetter() {
+ ModelFileManager.ModelFile modelA =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 1,
+ Collections.singletonList(Locale.forLanguageTag("ja")), false);
+
+ ModelFileManager.ModelFile modelB =
+ new ModelFileManager.ModelFile(
+ new File("/path/b"), 2,
+ Collections.emptyList(), true);
+
+ assertThat(modelA.isPreferredTo(modelB)).isTrue();
+ }
+
+ @Test
+ public void modelFile_isPreferredTo_version() {
+ ModelFileManager.ModelFile modelA =
+ new ModelFileManager.ModelFile(
+ new File("/path/a"), 2,
+ Collections.singletonList(Locale.forLanguageTag("ja")), false);
+
+ ModelFileManager.ModelFile modelB =
+ new ModelFileManager.ModelFile(
+ new File("/path/b"), 1,
+ Collections.emptyList(), false);
+
+ assertThat(modelA.isPreferredTo(modelB)).isTrue();
+ }
+
+ @Test
+ public void testFileSupplierImpl_updatedFileOnly() throws IOException {
+ mUpdatedModelFile.createNewFile();
+ File model1 = new File(mFactoryModelDir, "test1.model");
+ model1.createNewFile();
+ File model2 = new File(mFactoryModelDir, "test2.model");
+ model2.createNewFile();
+ new File(mFactoryModelDir, "not_match_regex.model").createNewFile();
+
+ List<ModelFileManager.ModelFile> modelFiles = mModelFileSupplierImpl.get();
+ List<String> modelFilePaths =
+ modelFiles
+ .stream()
+ .map(modelFile -> modelFile.getPath())
+ .collect(Collectors.toList());
+
+ assertThat(modelFiles).hasSize(3);
+ assertThat(modelFilePaths).containsExactly(
+ mUpdatedModelFile.getAbsolutePath(),
+ model1.getAbsolutePath(),
+ model2.getAbsolutePath());
+ }
+
+ @Test
+ public void testFileSupplierImpl_empty() {
+ mFactoryModelDir.delete();
+ List<ModelFileManager.ModelFile> modelFiles = mModelFileSupplierImpl.get();
+
+ assertThat(modelFiles).hasSize(0);
+ }
+
+ private static void recursiveDelete(File f) {
+ if (f.isDirectory()) {
+ for (File innerFile : f.listFiles()) {
+ recursiveDelete(innerFile);
+ }
+ }
+ f.delete();
+ }
+}
diff --git a/core/tests/coretests/src/android/widget/RemoteViewsTest.java b/core/tests/coretests/src/android/widget/RemoteViewsTest.java
index 70cf097..4456122 100644
--- a/core/tests/coretests/src/android/widget/RemoteViewsTest.java
+++ b/core/tests/coretests/src/android/widget/RemoteViewsTest.java
@@ -16,11 +16,14 @@
package android.widget;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import android.app.ActivityOptions;
import android.app.PendingIntent;
+import android.appwidget.AppWidgetHostView;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
@@ -444,4 +447,40 @@
}
return found[0];
}
+
+ @Test
+ public void sharedElement_pendingIntent_notifyParent() throws Exception {
+ RemoteViews views = new RemoteViews(mPackage, R.layout.remote_views_test);
+ PendingIntent pi = PendingIntent.getBroadcast(mContext, 0,
+ new Intent("android.widget.RemoteViewsTest_shared_element"),
+ PendingIntent.FLAG_ONE_SHOT);
+ views.setOnClickResponse(R.id.image, RemoteViews.RemoteResponse.fromPendingIntent(pi)
+ .addSharedElement(0, "e0")
+ .addSharedElement(1, "e1")
+ .addSharedElement(2, "e2"));
+
+ WidgetContainer container = new WidgetContainer(mContext);
+ container.addView(new RemoteViews(views).apply(mContext, container));
+ container.findViewById(R.id.image).performClick();
+
+ assertArrayEquals(container.mSharedViewIds, new int[] {0, 1, 2});
+ assertArrayEquals(container.mSharedViewNames, new String[] {"e0", "e1", "e2"});
+ }
+
+ private class WidgetContainer extends AppWidgetHostView {
+ int[] mSharedViewIds;
+ String[] mSharedViewNames;
+
+ WidgetContainer(Context context) {
+ super(context);
+ }
+
+ @Override
+ public ActivityOptions createSharedElementActivityOptions(
+ int[] sharedViewIds, String[] sharedViewNames, Intent fillInIntent) {
+ mSharedViewIds = sharedViewIds;
+ mSharedViewNames = sharedViewNames;
+ return null;
+ }
+ }
}
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index 73c10d2..68f24fb 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -178,6 +178,28 @@
<assign-permission name="android.permission.STATSCOMPANION" uid="statsd" />
<assign-permission name="android.permission.UPDATE_APP_OPS_STATS" uid="statsd" />
+ <split-permission name="android.permission.WRITE_EXTERNAL_STORAGE">
+ <new-permission name="android.permission.READ_EXTERNAL_STORAGE" />
+ </split-permission>
+ <split-permission name="android.permission.READ_CONTACTS"
+ targetSdk="16">
+ <new-permission name="android.permission.READ_CALL_LOG" />
+ </split-permission>
+ <split-permission name="android.permission.WRITE_CONTACTS"
+ targetSdk="16">
+ <new-permission name="android.permission.WRITE_CALL_LOG" />
+ </split-permission>
+ <!-- STOPSHIP(b/118882117): change targetSdk to Q when SDK version finalised -->
+ <split-permission name="android.permission.ACCESS_FINE_LOCATION"
+ targetSdk="10000">
+ <new-permission name="android.permission.ACCESS_BACKGROUND_LOCATION" />
+ </split-permission>
+ <!-- STOPSHIP(b/118882117): change targetSdk to Q when SDK version finalised -->
+ <split-permission name="android.permission.ACCESS_COARSE_LOCATION"
+ targetSdk="10000">
+ <new-permission name="android.permission.ACCESS_BACKGROUND_LOCATION" />
+ </split-permission>
+
<!-- This is a list of all the libraries available for application
code to link against. -->
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index 8964ee3..2604365 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -256,6 +256,7 @@
<permission name="android.permission.DELETE_PACKAGES"/>
<permission name="android.permission.FORCE_STOP_PACKAGES"/>
<permission name="android.permission.LOCAL_MAC_ADDRESS"/>
+ <permission name="android.permission.MANAGE_DEBUGGING"/>
<permission name="android.permission.MANAGE_DEVICE_ADMINS"/>
<permission name="android.permission.MANAGE_FINGERPRINT"/>
<permission name="android.permission.MANAGE_USB"/>
@@ -376,6 +377,7 @@
<permission name="android.permission.GET_APP_OPS_STATS"/>
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
<permission name="android.permission.MANAGE_ACTIVITY_STACKS"/>
+ <permission name="android.permission.MANAGE_DEBUGGING"/>
<permission name="android.permission.MANAGE_USB"/>
<permission name="android.permission.MANAGE_USERS"/>
<permission name="android.permission.MASTER_CLEAR"/>
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 2e5aef5..9c707ba 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -732,14 +732,10 @@
float y, float boundsLeft, float boundsTop, float boundsRight,
float boundsBottom, float totalAdvance) {
if (count <= 0 || paint.nothingToDraw()) return;
- // Set align to left for drawing, as we don't want individual
- // glyphs centered or right-aligned; the offset above takes
- // care of all alignment.
SkPaint paintCopy(paint);
if (mPaintFilter) {
mPaintFilter->filter(&paintCopy);
}
- paintCopy.setTextAlign(SkPaint::kLeft_Align);
SkASSERT(paintCopy.getTextEncoding() == SkPaint::kGlyphID_TextEncoding);
// Stroke with a hairline is drawn on HW with a fill style for compatibility with Android O and
// older.
@@ -763,14 +759,10 @@
void SkiaCanvas::drawLayoutOnPath(const minikin::Layout& layout, float hOffset, float vOffset,
const SkPaint& paint, const SkPath& path, size_t start,
size_t end) {
- // Set align to left for drawing, as we don't want individual
- // glyphs centered or right-aligned; the offsets take care of
- // that portion of the alignment.
SkPaint paintCopy(paint);
if (mPaintFilter) {
mPaintFilter->filter(&paintCopy);
}
- paintCopy.setTextAlign(SkPaint::kLeft_Align);
SkASSERT(paintCopy.getTextEncoding() == SkPaint::kGlyphID_TextEncoding);
const int N = end - start;
diff --git a/libs/hwui/hwui/Paint.h b/libs/hwui/hwui/Paint.h
index 31d3c0d..c1a3b6d 100644
--- a/libs/hwui/hwui/Paint.h
+++ b/libs/hwui/hwui/Paint.h
@@ -86,6 +86,14 @@
const Typeface* getAndroidTypeface() const { return mTypeface; }
+ enum Align {
+ kLeft_Align,
+ kCenter_Align,
+ kRight_Align,
+ };
+ Align getTextAlign() const { return mAlign; }
+ void setTextAlign(Align align) { mAlign = align; }
+
private:
float mLetterSpacing = 0;
float mWordSpacing = 0;
@@ -98,6 +106,7 @@
// object. Thus, following pointer can never be a dangling pointer. Note that
// nullptr is valid: it means the default typeface.
const Typeface* mTypeface = nullptr;
+ Align mAlign = kLeft_Align;
};
} // namespace android
diff --git a/libs/hwui/hwui/PaintImpl.cpp b/libs/hwui/hwui/PaintImpl.cpp
index 29cc890..bdbf5ca 100644
--- a/libs/hwui/hwui/PaintImpl.cpp
+++ b/libs/hwui/hwui/PaintImpl.cpp
@@ -34,7 +34,8 @@
, mMinikinLocaleListId(paint.mMinikinLocaleListId)
, mFamilyVariant(paint.mFamilyVariant)
, mHyphenEdit(paint.mHyphenEdit)
- , mTypeface(paint.mTypeface) {}
+ , mTypeface(paint.mTypeface)
+ , mAlign(paint.mAlign) {}
Paint::Paint(const SkPaint& paint)
: SkPaint(paint)
@@ -55,6 +56,7 @@
mFamilyVariant = other.mFamilyVariant;
mHyphenEdit = other.mHyphenEdit;
mTypeface = other.mTypeface;
+ mAlign = other.mAlign;
return *this;
}
@@ -64,6 +66,6 @@
a.mFontFeatureSettings == b.mFontFeatureSettings &&
a.mMinikinLocaleListId == b.mMinikinLocaleListId &&
a.mFamilyVariant == b.mFamilyVariant && a.mHyphenEdit == b.mHyphenEdit &&
- a.mTypeface == b.mTypeface;
+ a.mTypeface == b.mTypeface && a.mAlign == b.mAlign;
}
} // namespace android
diff --git a/libs/hwui/tests/common/scenes/ListViewAnimation.cpp b/libs/hwui/tests/common/scenes/ListViewAnimation.cpp
index fd8c252..9a1ee54 100644
--- a/libs/hwui/tests/common/scenes/ListViewAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/ListViewAnimation.cpp
@@ -46,7 +46,6 @@
SkColorGetR(randomColor) + SkColorGetG(randomColor) + SkColorGetB(randomColor) <
128 * 3;
paint.setColor(bgDark ? Color::White : Color::Grey_700);
- paint.setTextAlign(SkPaint::kCenter_Align);
paint.setTextSize(size / 2);
char charToShow = 'A' + (rand() % 26);
const SkPoint pos[] = {{SkIntToScalar(size / 2),
diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java
index a02b6af..b34f270 100644
--- a/media/java/android/media/AudioFormat.java
+++ b/media/java/android/media/AudioFormat.java
@@ -311,6 +311,8 @@
return "ENCODING_AAC_XHE";
case ENCODING_AC4:
return "ENCODING_AC4";
+ case ENCODING_E_AC3_JOC:
+ return "ENCODING_E_AC3_JOC";
default :
return "invalid encoding " + enc;
}
@@ -518,12 +520,11 @@
public static boolean isValidEncoding(int audioFormat)
{
switch (audioFormat) {
- case ENCODING_PCM_8BIT:
case ENCODING_PCM_16BIT:
+ case ENCODING_PCM_8BIT:
case ENCODING_PCM_FLOAT:
case ENCODING_AC3:
case ENCODING_E_AC3:
- case ENCODING_E_AC3_JOC:
case ENCODING_DTS:
case ENCODING_DTS_HD:
case ENCODING_MP3:
@@ -531,9 +532,11 @@
case ENCODING_AAC_HE_V1:
case ENCODING_AAC_HE_V2:
case ENCODING_IEC61937:
+ case ENCODING_DOLBY_TRUEHD:
case ENCODING_AAC_ELD:
case ENCODING_AAC_XHE:
case ENCODING_AC4:
+ case ENCODING_E_AC3_JOC:
return true;
default:
return false;
@@ -544,22 +547,23 @@
public static boolean isPublicEncoding(int audioFormat)
{
switch (audioFormat) {
- case ENCODING_PCM_8BIT:
case ENCODING_PCM_16BIT:
+ case ENCODING_PCM_8BIT:
case ENCODING_PCM_FLOAT:
case ENCODING_AC3:
case ENCODING_E_AC3:
- case ENCODING_E_AC3_JOC:
case ENCODING_DTS:
case ENCODING_DTS_HD:
- case ENCODING_IEC61937:
case ENCODING_MP3:
case ENCODING_AAC_LC:
case ENCODING_AAC_HE_V1:
case ENCODING_AAC_HE_V2:
+ case ENCODING_IEC61937:
+ case ENCODING_DOLBY_TRUEHD:
case ENCODING_AAC_ELD:
case ENCODING_AAC_XHE:
case ENCODING_AC4:
+ case ENCODING_E_AC3_JOC:
return true;
default:
return false;
@@ -571,14 +575,13 @@
public static boolean isEncodingLinearPcm(int audioFormat)
{
switch (audioFormat) {
- case ENCODING_PCM_8BIT:
case ENCODING_PCM_16BIT:
+ case ENCODING_PCM_8BIT:
case ENCODING_PCM_FLOAT:
case ENCODING_DEFAULT:
return true;
case ENCODING_AC3:
case ENCODING_E_AC3:
- case ENCODING_E_AC3_JOC:
case ENCODING_DTS:
case ENCODING_DTS_HD:
case ENCODING_MP3:
@@ -586,9 +589,11 @@
case ENCODING_AAC_HE_V1:
case ENCODING_AAC_HE_V2:
case ENCODING_IEC61937: // wrapped in PCM but compressed
+ case ENCODING_DOLBY_TRUEHD:
case ENCODING_AAC_ELD:
case ENCODING_AAC_XHE:
case ENCODING_AC4:
+ case ENCODING_E_AC3_JOC:
return false;
case ENCODING_INVALID:
default:
@@ -600,24 +605,25 @@
public static boolean isEncodingLinearFrames(int audioFormat)
{
switch (audioFormat) {
- case ENCODING_PCM_8BIT:
case ENCODING_PCM_16BIT:
+ case ENCODING_PCM_8BIT:
case ENCODING_PCM_FLOAT:
case ENCODING_IEC61937: // same size as stereo PCM
case ENCODING_DEFAULT:
return true;
case ENCODING_AC3:
case ENCODING_E_AC3:
- case ENCODING_E_AC3_JOC:
case ENCODING_DTS:
case ENCODING_DTS_HD:
case ENCODING_MP3:
case ENCODING_AAC_LC:
case ENCODING_AAC_HE_V1:
case ENCODING_AAC_HE_V2:
+ case ENCODING_DOLBY_TRUEHD:
case ENCODING_AAC_ELD:
case ENCODING_AAC_XHE:
case ENCODING_AC4:
+ case ENCODING_E_AC3_JOC:
return false;
case ENCODING_INVALID:
default:
@@ -844,22 +850,23 @@
case ENCODING_DEFAULT:
mEncoding = ENCODING_PCM_16BIT;
break;
- case ENCODING_PCM_8BIT:
case ENCODING_PCM_16BIT:
+ case ENCODING_PCM_8BIT:
case ENCODING_PCM_FLOAT:
case ENCODING_AC3:
case ENCODING_E_AC3:
- case ENCODING_E_AC3_JOC:
case ENCODING_DTS:
case ENCODING_DTS_HD:
- case ENCODING_IEC61937:
case ENCODING_MP3:
case ENCODING_AAC_LC:
case ENCODING_AAC_HE_V1:
case ENCODING_AAC_HE_V2:
+ case ENCODING_IEC61937:
+ case ENCODING_DOLBY_TRUEHD:
case ENCODING_AAC_ELD:
case ENCODING_AAC_XHE:
case ENCODING_AC4:
+ case ENCODING_E_AC3_JOC:
mEncoding = encoding;
break;
case ENCODING_INVALID:
@@ -1060,22 +1067,23 @@
/** @hide */
@IntDef(flag = false, prefix = "ENCODING", value = {
ENCODING_DEFAULT,
- ENCODING_PCM_8BIT,
ENCODING_PCM_16BIT,
+ ENCODING_PCM_8BIT,
ENCODING_PCM_FLOAT,
ENCODING_AC3,
ENCODING_E_AC3,
- ENCODING_E_AC3_JOC,
ENCODING_DTS,
ENCODING_DTS_HD,
ENCODING_MP3,
- ENCODING_IEC61937,
+ ENCODING_AAC_LC,
ENCODING_AAC_HE_V1,
ENCODING_AAC_HE_V2,
- ENCODING_AAC_LC,
+ ENCODING_IEC61937,
+ ENCODING_DOLBY_TRUEHD,
ENCODING_AAC_ELD,
ENCODING_AAC_XHE,
- ENCODING_AC4 }
+ ENCODING_AC4,
+ ENCODING_E_AC3_JOC }
)
@Retention(RetentionPolicy.SOURCE)
public @interface Encoding {}
@@ -1088,8 +1096,8 @@
ENCODING_DTS_HD,
ENCODING_AAC_LC,
ENCODING_DOLBY_TRUEHD,
- ENCODING_E_AC3_JOC,
ENCODING_AC4,
+ ENCODING_E_AC3_JOC,
};
/** @hide */
@@ -1100,8 +1108,8 @@
ENCODING_DTS_HD,
ENCODING_AAC_LC,
ENCODING_DOLBY_TRUEHD,
- ENCODING_E_AC3_JOC,
- ENCODING_AC4 }
+ ENCODING_AC4,
+ ENCODING_E_AC3_JOC }
)
@Retention(RetentionPolicy.SOURCE)
public @interface SurroundSoundEncoding {}
@@ -1129,10 +1137,10 @@
return "AAC";
case ENCODING_DOLBY_TRUEHD:
return "Dolby TrueHD";
- case ENCODING_E_AC3_JOC:
- return "Dolby Atmos in Dolby Digital Plus";
case ENCODING_AC4:
return "Dolby AC-4";
+ case ENCODING_E_AC3_JOC:
+ return "Dolby Atmos in Dolby Digital Plus";
default:
return "Unknown surround sound format";
}
diff --git a/media/java/android/media/AudioPresentation.java b/media/java/android/media/AudioPresentation.java
index ce71436..1cc650b 100644
--- a/media/java/android/media/AudioPresentation.java
+++ b/media/java/android/media/AudioPresentation.java
@@ -19,13 +19,14 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.TestApi;
+import android.icu.util.ULocale;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
+import java.util.Objects;
/**
@@ -34,7 +35,7 @@
*
* Used by {@link MediaExtractor} {@link MediaExtractor#getAudioPresentations(int)} and
* {@link AudioTrack} {@link AudioTrack#setPresentation(AudioPresentation)} to query available
- * presentations and to select one.
+ * presentations and to select one, respectively.
*
* A list of available audio presentations in a media source can be queried using
* {@link MediaExtractor#getAudioPresentations(int)}. This list can be presented to a user for
@@ -49,8 +50,7 @@
public final class AudioPresentation {
private final int mPresentationId;
private final int mProgramId;
- private final Map<String, String> mLabels;
- private final String mLanguage;
+ private final ULocale mLanguage;
/** @hide */
@IntDef(
@@ -63,72 +63,98 @@
})
@Retention(RetentionPolicy.SOURCE)
public @interface MasteringIndicationType {}
-
private final @MasteringIndicationType int mMasteringIndication;
private final boolean mAudioDescriptionAvailable;
private final boolean mSpokenSubtitlesAvailable;
private final boolean mDialogueEnhancementAvailable;
+ private final Map<ULocale, String> mLabels;
/**
* No preferred reproduction channel layout.
+ *
+ * @see Builder#setMasteringIndication(int)
*/
public static final int MASTERING_NOT_INDICATED = 0;
/**
* Stereo speaker layout.
+ *
+ * @see Builder#setMasteringIndication(int)
*/
public static final int MASTERED_FOR_STEREO = 1;
/**
* Two-dimensional (e.g. 5.1) speaker layout.
+ *
+ * @see Builder#setMasteringIndication(int)
*/
public static final int MASTERED_FOR_SURROUND = 2;
/**
* Three-dimensional (e.g. 5.1.2) speaker layout.
+ *
+ * @see Builder#setMasteringIndication(int)
*/
public static final int MASTERED_FOR_3D = 3;
/**
* Prerendered for headphone playback.
+ *
+ * @see Builder#setMasteringIndication(int)
*/
public static final int MASTERED_FOR_HEADPHONE = 4;
/**
- * @hide
+ * This ID is reserved. No items can be explicitly assigned this ID.
*/
- @TestApi
- public AudioPresentation(int presentationId,
- int programId,
- @NonNull Map<String, String> labels,
- @NonNull String language,
- @MasteringIndicationType int masteringIndication,
- boolean audioDescriptionAvailable,
- boolean spokenSubtitlesAvailable,
- boolean dialogueEnhancementAvailable) {
- this.mPresentationId = presentationId;
- this.mProgramId = programId;
- this.mLanguage = language;
- this.mMasteringIndication = masteringIndication;
- this.mAudioDescriptionAvailable = audioDescriptionAvailable;
- this.mSpokenSubtitlesAvailable = spokenSubtitlesAvailable;
- this.mDialogueEnhancementAvailable = dialogueEnhancementAvailable;
+ private static final int UNKNOWN_ID = -1;
- this.mLabels = new HashMap<String, String>(labels);
+ /**
+ * This allows an application developer to construct an AudioPresentation object with all the
+ * parameters.
+ * The IDs are all that is required for an
+ * {@link AudioTrack#setPresentation(AudioPresentation)} to be successful.
+ * The rest of the metadata is informative only so as to distinguish features
+ * of different presentations.
+ * @param presentationId Presentation ID to be decoded by a next generation audio decoder.
+ * @param programId Program ID to be decoded by a next generation audio decoder.
+ * @param language Locale corresponding to ISO 639-1/639-2 language code.
+ * @param masteringIndication One of {@link AudioPresentation#MASTERING_NOT_INDICATED},
+ * {@link AudioPresentation#MASTERED_FOR_STEREO},
+ * {@link AudioPresentation#MASTERED_FOR_SURROUND},
+ * {@link AudioPresentation#MASTERED_FOR_3D},
+ * {@link AudioPresentation#MASTERED_FOR_HEADPHONE}.
+ * @param audioDescriptionAvailable Audio description for the visually impaired.
+ * @param spokenSubtitlesAvailable Spoken subtitles for the visually impaired.
+ * @param dialogueEnhancementAvailable Dialogue enhancement.
+ * @param labels Text label indexed by its locale corresponding to the language code.
+ */
+ private AudioPresentation(int presentationId,
+ int programId,
+ @NonNull ULocale language,
+ @MasteringIndicationType int masteringIndication,
+ boolean audioDescriptionAvailable,
+ boolean spokenSubtitlesAvailable,
+ boolean dialogueEnhancementAvailable,
+ @NonNull Map<ULocale, String> labels) {
+ mPresentationId = presentationId;
+ mProgramId = programId;
+ mLanguage = language;
+ mMasteringIndication = masteringIndication;
+ mAudioDescriptionAvailable = audioDescriptionAvailable;
+ mSpokenSubtitlesAvailable = spokenSubtitlesAvailable;
+ mDialogueEnhancementAvailable = dialogueEnhancementAvailable;
+ mLabels = new HashMap<ULocale, String>(labels);
}
/**
- * The framework uses this presentation id to select an audio presentation rendered by a
- * decoder. Presentation id is typically sequential, but does not have to be.
- * @hide
+ * Returns presentation ID used by the framework to select an audio presentation rendered by a
+ * decoder. Presentation ID is typically sequential, but does not have to be.
*/
- @TestApi
public int getPresentationId() {
return mPresentationId;
}
/**
- * The framework uses this program id to select an audio presentation rendered by a decoder.
- * Program id can be used to further uniquely identify the presentation to a decoder.
- * @hide
+ * Returns program ID used by the framework to select an audio presentation rendered by a
+ * decoder. Program ID can be used to further uniquely identify the presentation to a decoder.
*/
- @TestApi
public int getProgramId() {
return mProgramId;
}
@@ -139,9 +165,9 @@
* or ISO 639-2/T could be used.
*/
public Map<Locale, String> getLabels() {
- Map<Locale, String> localeLabels = new HashMap<>();
- for (Map.Entry<String, String> entry : mLabels.entrySet()) {
- localeLabels.put(new Locale(entry.getKey()), entry.getValue());
+ Map<Locale, String> localeLabels = new HashMap<Locale, String>();
+ for (Map.Entry<ULocale, String> entry : mLabels.entrySet()) {
+ localeLabels.put(entry.getKey().toLocale(), entry.getValue());
}
return localeLabels;
}
@@ -150,13 +176,20 @@
* @return the locale corresponding to audio presentation's ISO 639-1/639-2 language code.
*/
public Locale getLocale() {
- return new Locale(mLanguage);
+ return mLanguage.toLocale();
+ }
+
+ private ULocale getULocale() {
+ return mLanguage;
}
/**
* @return the mastering indication of the audio presentation.
- * See {@link #MASTERING_NOT_INDICATED}, {@link #MASTERED_FOR_STEREO},
- * {@link #MASTERED_FOR_SURROUND}, {@link #MASTERED_FOR_3D}, {@link #MASTERED_FOR_HEADPHONE}
+ * See {@link AudioPresentation#MASTERING_NOT_INDICATED},
+ * {@link AudioPresentation#MASTERED_FOR_STEREO},
+ * {@link AudioPresentation#MASTERED_FOR_SURROUND},
+ * {@link AudioPresentation#MASTERED_FOR_3D},
+ * {@link AudioPresentation#MASTERED_FOR_HEADPHONE}
*/
@MasteringIndicationType
public int getMasteringIndication() {
@@ -186,4 +219,147 @@
public boolean hasDialogueEnhancement() {
return mDialogueEnhancementAvailable;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof AudioPresentation)) {
+ return false;
+ }
+ AudioPresentation obj = (AudioPresentation) o;
+ return mPresentationId == obj.getPresentationId()
+ && mProgramId == obj.getProgramId()
+ && mLanguage == obj.getULocale()
+ && mMasteringIndication == obj.getMasteringIndication()
+ && mAudioDescriptionAvailable == obj.hasAudioDescription()
+ && mSpokenSubtitlesAvailable == obj.hasSpokenSubtitles()
+ && mDialogueEnhancementAvailable == obj.hasDialogueEnhancement()
+ && mLabels.equals(obj.getLabels());
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(mPresentationId);
+ }
+
+ /**
+ * A builder class for creating {@link AudioPresentation} objects.
+ */
+ public static class Builder {
+ private final int mPresentationId;
+ private int mProgramId = UNKNOWN_ID;
+ private ULocale mLanguage = new ULocale("");
+ private int mMasteringIndication = MASTERING_NOT_INDICATED;
+ private boolean mAudioDescriptionAvailable = false;
+ private boolean mSpokenSubtitlesAvailable = false;
+ private boolean mDialogueEnhancementAvailable = false;
+ private Map<ULocale, String> mLabels = new HashMap<ULocale, String>();
+
+ /**
+ * Create a {@link Builder}. Any field that should be included in the
+ * {@link AudioPresentation} must be added.
+ *
+ * @param presentationId the presentation ID of this audio presentation
+ */
+ public Builder(int presentationId) {
+ mPresentationId = presentationId;
+ }
+ /**
+ * Sets the ProgramId to which this audio presentation refers.
+ *
+ * @param programId
+ */
+ public @NonNull Builder setProgramId(int programId) {
+ mProgramId = programId;
+ return this;
+ }
+ /**
+ * Sets the language information of the audio presentation.
+ *
+ * @param language code
+ */
+ public @NonNull Builder setLocale(ULocale language) {
+ mLanguage = language;
+ return this;
+ }
+
+ /**
+ * Sets the mastering indication.
+ *
+ * @param masteringIndication Input to set mastering indication.
+ * @throws IllegalArgumentException if the mastering indication is not any of
+ * {@link AudioPresentation#MASTERING_NOT_INDICATED},
+ * {@link AudioPresentation#MASTERED_FOR_STEREO},
+ * {@link AudioPresentation#MASTERED_FOR_SURROUND},
+ * {@link AudioPresentation#MASTERED_FOR_3D},
+ * and {@link AudioPresentation#MASTERED_FOR_HEADPHONE}
+ */
+ public @NonNull Builder setMasteringIndication(
+ @MasteringIndicationType int masteringIndication) {
+ if (masteringIndication != MASTERING_NOT_INDICATED
+ && masteringIndication != MASTERED_FOR_STEREO
+ && masteringIndication != MASTERED_FOR_SURROUND
+ && masteringIndication != MASTERED_FOR_3D
+ && masteringIndication != MASTERED_FOR_HEADPHONE) {
+ throw new IllegalArgumentException("Unknown mastering indication: "
+ + masteringIndication);
+ }
+ mMasteringIndication = masteringIndication;
+ return this;
+ }
+
+ /**
+ * Sets locale / text label pairs describing the presentation.
+ *
+ * @param labels
+ */
+ public @NonNull Builder setLabels(@NonNull Map<ULocale, String> labels) {
+ mLabels = new HashMap<ULocale, String>(labels);
+ return this;
+ }
+
+ /**
+ * Indicate whether the presentation contains audio description for the visually impaired.
+ *
+ * @param audioDescriptionAvailable
+ */
+ public @NonNull Builder setHasAudioDescription(boolean audioDescriptionAvailable) {
+ mAudioDescriptionAvailable = audioDescriptionAvailable;
+ return this;
+ }
+
+ /**
+ * Indicate whether the presentation contains spoken subtitles for the visually impaired.
+ *
+ * @param spokenSubtitlesAvailable
+ */
+ public @NonNull Builder setHasSpokenSubtitles(boolean spokenSubtitlesAvailable) {
+ mSpokenSubtitlesAvailable = spokenSubtitlesAvailable;
+ return this;
+ }
+
+ /**
+ * Indicate whether the presentation supports dialogue enhancement.
+ *
+ * @param dialogueEnhancementAvailable
+ */
+ public @NonNull Builder setHasDialogueEnhancement(boolean dialogueEnhancementAvailable) {
+ mDialogueEnhancementAvailable = dialogueEnhancementAvailable;
+ return this;
+ }
+
+ /**
+ * Creates a {@link AudioPresentation} instance with the specified fields.
+ *
+ * @return The new {@link AudioPresentation} instance
+ */
+ public @NonNull AudioPresentation build() {
+ return new AudioPresentation(mPresentationId, mProgramId,
+ mLanguage, mMasteringIndication,
+ mAudioDescriptionAvailable, mSpokenSubtitlesAvailable,
+ mDialogueEnhancementAvailable, mLabels);
+ }
+ }
}
diff --git a/media/jni/Android.bp b/media/jni/Android.bp
index e841567..e880297 100644
--- a/media/jni/Android.bp
+++ b/media/jni/Android.bp
@@ -81,9 +81,6 @@
"-Wno-error=deprecated-declarations",
"-Wunused",
"-Wunreachable-code",
- // Allow implicit fallthroughs in android_media_MediaScanner.cpp and
- // android_mtp_MtpDatabase.cpp until they are fixed.
- "-Wno-error=implicit-fallthrough",
],
}
@@ -126,7 +123,6 @@
"libcutils",
"libmedia_helper",
"libmedia_player2_util",
- "libmediadrm",
"libmediaextractor",
"libmediametrics",
"libmediaplayer2",
diff --git a/media/jni/android_media_AudioPresentation.h b/media/jni/android_media_AudioPresentation.h
index 71b8dac..5306de6 100644
--- a/media/jni/android_media_AudioPresentation.h
+++ b/media/jni/android_media_AudioPresentation.h
@@ -49,7 +49,7 @@
}
constructID = env->GetMethodID(clazz, "<init>",
- "(IILjava/util/Map;Ljava/lang/String;IZZZ)V");
+ "(IILandroid/icu/util/ULocale;IZZZLjava/util/Map;)V");
env->DeleteLocalRef(lclazz);
// list objects
@@ -104,21 +104,26 @@
// don't expose private keys (starting with android._)
continue;
}
-
jobject valueObj = NULL;
-
AString val;
CHECK(msg->findString(key, &val));
-
valueObj = env->NewStringUTF(val.c_str());
-
if (valueObj != NULL) {
- jstring keyObj = env->NewStringUTF(key);
-
- env->CallObjectMethod(hashMap, hashMapPutID, keyObj, valueObj);
-
- env->DeleteLocalRef(keyObj); keyObj = NULL;
+ ScopedLocalRef<jclass> localeClazz(env, env->FindClass("android/icu/util/ULocale"));
+ if (localeClazz.get() == NULL) {
+ return -EINVAL;
+ }
+ jmethodID localeConstructID =
+ env->GetMethodID(localeClazz.get(), "<init>", "(Ljava/lang/String;)V");
+ if (localeConstructID == NULL) {
+ return -EINVAL;
+ }
+ jstring jLanguage = env->NewStringUTF(key);
+ jobject jLocale = env->NewObject(localeClazz.get(), localeConstructID, jLanguage);
+ env->CallObjectMethod(hashMap, hashMapPutID, jLocale, valueObj);
+ env->DeleteLocalRef(jLocale); jLocale = NULL;
env->DeleteLocalRef(valueObj); valueObj = NULL;
+ env->DeleteLocalRef(jLanguage); jLanguage = NULL;
}
}
@@ -142,26 +147,36 @@
if (ConvertMessageToMap(env, labelMessage, &jLabelObject) != OK) {
return NULL;
}
- jstring jLanguage = env->NewStringUTF(ap->mLanguage.string());
-
+ ScopedLocalRef<jclass> localeClazz(env, env->FindClass("android/icu/util/ULocale"));
+ if (localeClazz.get() == NULL) {
+ return NULL;
+ }
+ jmethodID localeConstructID =
+ env->GetMethodID(localeClazz.get(), "<init>", "(Ljava/lang/String;)V");
+ if (localeConstructID == NULL) {
+ return NULL;
+ }
+ jstring jLanguage = env->NewStringUTF(ap->mLanguage.c_str());
+ jobject jLocale = env->NewObject(localeClazz.get(), localeConstructID, jLanguage);
jobject jValueObj = env->NewObject(fields.clazz, fields.constructID,
static_cast<jint>(ap->mPresentationId),
static_cast<jint>(ap->mProgramId),
- jLabelObject,
- jLanguage,
+ jLocale,
static_cast<jint>(ap->mMasteringIndication),
static_cast<jboolean>((ap->mAudioDescriptionAvailable == 1) ?
1 : 0),
static_cast<jboolean>((ap->mSpokenSubtitlesAvailable == 1) ?
1 : 0),
static_cast<jboolean>((ap->mDialogueEnhancementAvailable == 1) ?
- 1 : 0));
+ 1 : 0),
+ jLabelObject);
if (jValueObj == NULL) {
env->DeleteLocalRef(jLanguage); jLanguage = NULL;
return NULL;
}
env->CallBooleanMethod(list, fields.listAddId, jValueObj);
+ env->DeleteLocalRef(jLocale); jLocale = NULL;
env->DeleteLocalRef(jValueObj); jValueObj = NULL;
env->DeleteLocalRef(jLanguage); jLanguage = NULL;
}
diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp
index c0ceb01..58044c0 100644
--- a/media/jni/android_media_MediaScanner.cpp
+++ b/media/jni/android_media_MediaScanner.cpp
@@ -27,6 +27,7 @@
#include <nativehelper/JNIHelp.h>
#include "android_runtime/AndroidRuntime.h"
#include "android_runtime/Log.h"
+#include <android-base/macros.h> // for FALLTHROUGH_INTENDED
using namespace android;
@@ -92,6 +93,7 @@
return false;
}
// Fall through to take care of the final byte.
+ FALLTHROUGH_INTENDED;
case 0x0c:
case 0x0d:
// Bit pattern 110x, so there is one additional byte.
diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp
index 4d8c96f..56b85b5 100644
--- a/media/jni/android_mtp_MtpDatabase.cpp
+++ b/media/jni/android_mtp_MtpDatabase.cpp
@@ -1272,6 +1272,7 @@
case MTP_DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME:
writable = true;
// fall through
+ FALLTHROUGH_INTENDED;
case MTP_DEVICE_PROPERTY_IMAGE_SIZE:
{
result = new MtpProperty(property, MTP_TYPE_STR, writable);
diff --git a/native/android/Android.bp b/native/android/Android.bp
index 24d003b..a4306fe 100644
--- a/native/android/Android.bp
+++ b/native/android/Android.bp
@@ -62,8 +62,10 @@
"libbinder",
"libui",
"libgui",
+ "libharfbuzz_ng", // Only for including hb.h via minikin
"libsensor",
"libandroid_runtime",
+ "libminikin",
"libnetd_client",
"libhwui",
"libxml2",
diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt
index 9f48bc9..e7e8384 100644
--- a/native/android/libandroid.map.txt
+++ b/native/android/libandroid.map.txt
@@ -224,6 +224,7 @@
ASystemFont_getAxisCount; # introduced=29
ASystemFont_getAxisTag; # introduced=29
ASystemFont_getAxisValue; # introduced=29
+ ASystemFont_matchFamilyStyleCharacter; # introduced=29
ATrace_beginSection; # introduced=23
ATrace_endSection; # introduced=23
ATrace_isEnabled; # introduced=23
diff --git a/native/android/system_fonts.cpp b/native/android/system_fonts.cpp
index 761a475..4d3d1d6 100644
--- a/native/android/system_fonts.cpp
+++ b/native/android/system_fonts.cpp
@@ -29,6 +29,11 @@
#include <sys/stat.h>
#include <unistd.h>
+#include <hwui/MinikinSkia.h>
+#include <minikin/FontCollection.h>
+#include <minikin/LocaleList.h>
+#include <minikin/SystemFonts.h>
+
struct XmlCharDeleter {
void operator()(xmlChar* b) { xmlFree(b); }
};
@@ -192,6 +197,41 @@
delete ite;
}
+ASystemFont* ASystemFont_matchFamilyStyleCharacter(
+ const char* _Nonnull familyName,
+ uint16_t weight,
+ bool italic,
+ const char* _Nonnull languageTags,
+ const uint16_t* _Nonnull text,
+ uint32_t textLength,
+ uint32_t* _Nullable runLength) {
+ std::shared_ptr<minikin::FontCollection> fc =
+ minikin::SystemFonts::findFontCollection(familyName);
+ std::vector<minikin::FontCollection::Run> runs =
+ fc->itemize(minikin::U16StringPiece(text, textLength),
+ minikin::FontStyle(weight, static_cast<minikin::FontStyle::Slant>(italic)),
+ minikin::registerLocaleList(languageTags),
+ minikin::FamilyVariant::DEFAULT);
+
+ const minikin::Font* font = runs[0].fakedFont.font;
+ std::unique_ptr<ASystemFont> result = std::make_unique<ASystemFont>();
+ const android::MinikinFontSkia* minikinFontSkia =
+ reinterpret_cast<android::MinikinFontSkia*>(font->typeface().get());
+ result->mFilePath = minikinFontSkia->getFilePath();
+ result->mWeight = font->style().weight();
+ result->mItalic = font->style().slant() == minikin::FontStyle::Slant::ITALIC;
+ result->mCollectionIndex = minikinFontSkia->GetFontIndex();
+ const std::vector<minikin::FontVariation>& axes = minikinFontSkia->GetAxes();
+ result->mAxes.reserve(axes.size());
+ for (auto axis : axes) {
+ result->mAxes.push_back(std::make_pair(axis.axisTag, axis.value));
+ }
+ if (runLength != nullptr) {
+ *runLength = runs[0].end;
+ }
+ return result.release();
+}
+
xmlNode* findNextFontNode(const XmlDocUniquePtr& xmlDoc, xmlNode* fontNode) {
if (fontNode == nullptr) {
if (!xmlDoc) {
diff --git a/packages/ExtServices/src/android/ext/services/notification/Assistant.java b/packages/ExtServices/src/android/ext/services/notification/Assistant.java
index 8f33a70..ddc00e3 100644
--- a/packages/ExtServices/src/android/ext/services/notification/Assistant.java
+++ b/packages/ExtServices/src/android/ext/services/notification/Assistant.java
@@ -38,6 +38,7 @@
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
+import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.provider.Settings;
@@ -77,6 +78,10 @@
public class Assistant extends NotificationAssistantService {
private static final String TAG = "ExtAssistant";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+ public static final boolean AUTO_DEMOTE_NOTIFICATIONS = SystemProperties.getBoolean(
+ "debug.demote_notifs", false);
+ public static final boolean AGE_NOTIFICATIONS = SystemProperties.getBoolean(
+ "debug.age_notifs", false);
private static final String TAG_ASSISTANT = "assistant";
private static final String TAG_IMPRESSION = "impression-set";
@@ -230,16 +235,19 @@
@NonNull ArrayList<Notification.Action> smartActions,
@NonNull ArrayList<CharSequence> smartReplies) {
Bundle signals = new Bundle();
- if (!smartActions.isEmpty()) {
- signals.putParcelableArrayList(Adjustment.KEY_SMART_ACTIONS, smartActions);
- }
- if (!smartReplies.isEmpty()) {
- signals.putCharSequenceArrayList(Adjustment.KEY_SMART_REPLIES, smartReplies);
- }
- if (mNotificationCategorizer.shouldSilence(entry)) {
- final int importance = entry.getImportance() < IMPORTANCE_LOW ? entry.getImportance()
- : IMPORTANCE_LOW;
- signals.putInt(KEY_IMPORTANCE, importance);
+
+ if (AUTO_DEMOTE_NOTIFICATIONS) {
+ if (!smartActions.isEmpty()) {
+ signals.putParcelableArrayList(Adjustment.KEY_SMART_ACTIONS, smartActions);
+ }
+ if (!smartReplies.isEmpty()) {
+ signals.putCharSequenceArrayList(Adjustment.KEY_SMART_REPLIES, smartReplies);
+ }
+ if (mNotificationCategorizer.shouldSilence(entry)) {
+ final int importance = entry.getImportance() < IMPORTANCE_LOW
+ ? entry.getImportance() : IMPORTANCE_LOW;
+ signals.putInt(KEY_IMPORTANCE, importance);
+ }
}
return new Adjustment(
@@ -445,13 +453,15 @@
protected final class AgingCallback implements Callback {
@Override
public void sendAdjustment(String key, int newImportance) {
- NotificationEntry entry = mLiveNotifications.get(key);
- if (entry != null) {
- Bundle bundle = new Bundle();
- bundle.putInt(KEY_IMPORTANCE, newImportance);
- Adjustment adjustment = new Adjustment(entry.getSbn().getPackageName(), key, bundle,
- "aging", entry.getSbn().getUserId());
- adjustNotification(adjustment);
+ if (AGE_NOTIFICATIONS) {
+ NotificationEntry entry = mLiveNotifications.get(key);
+ if (entry != null) {
+ Bundle bundle = new Bundle();
+ bundle.putInt(KEY_IMPORTANCE, newImportance);
+ Adjustment adjustment = new Adjustment(entry.getSbn().getPackageName(), key,
+ bundle, "aging", entry.getSbn().getUserId());
+ adjustNotification(adjustment);
+ }
}
}
}
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsService.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsService.java
index a6fadf9..379cfc7 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsService.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsService.java
@@ -124,7 +124,7 @@
@Override
public int onCommand(String cmd) {
- if (cmd == null) {
+ if (cmd == null || "help".equals(cmd) || "-h".equals(cmd)) {
return handleDefaultCommands(cmd);
}
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 44bc3f2..b2bb883 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -136,6 +136,10 @@
<!-- Screen Capturing -->
<uses-permission android:name="android.permission.MANAGE_MEDIA_PROJECTION" />
+ <!-- Screen Recording -->
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
+
<!-- Assist -->
<uses-permission android:name="android.permission.ACCESS_VOICE_INTERACTION_SERVICE" />
@@ -212,6 +216,9 @@
<!-- Permission necessary to change car audio volume through CarAudioManager -->
<uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME" />
+ <!-- Permission to control Android Debug Bridge (ADB) -->
+ <uses-permission android:name="android.permission.MANAGE_DEBUGGING" />
+
<uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS" />
<protected-broadcast android:name="com.android.settingslib.action.REGISTER_SLICE_RECEIVER" />
@@ -267,6 +274,10 @@
</intent-filter>
</receiver>
+ <activity android:name=".screenrecord.ScreenRecordDialog"
+ android:theme="@style/ScreenRecord" />
+ <service android:name=".screenrecord.RecordingService" />
+
<receiver android:name=".SysuiRestartReceiver"
android:exported="false">
<intent-filter>
@@ -368,9 +379,9 @@
android:excludeFromRecents="true">
</activity>
- <!-- started from UsbDebuggingManager -->
+ <!-- started from AdbDebuggingManager -->
<activity android:name=".usb.UsbDebuggingActivity"
- android:permission="android.permission.MANAGE_USB"
+ android:permission="android.permission.MANAGE_DEBUGGING"
android:theme="@style/Theme.SystemUI.Dialog.Alert"
android:finishOnCloseSystemDialogs="true"
android:excludeFromRecents="true">
diff --git a/packages/SystemUI/legacy/recents/res/values-af/strings.xml b/packages/SystemUI/legacy/recents/res/values-af/strings.xml
new file mode 100644
index 0000000..736c810
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-af/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Oorsig."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Maak <xliff:g id="APP">%s</xliff:g> toe."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> is toegemaak."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alle onlangse programme is toegemaak."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Maak <xliff:g id="APP">%s</xliff:g>-programinligting oop."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Begin tans <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Geen onlangse items nie"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Jy het alles toegemaak"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Programinligting"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"skermvaspen"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"soek"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Kon nie <xliff:g id="APP">%s</xliff:g> begin nie."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is in veiligmodus gedeaktiveer."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Vee alles uit"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Sleep hierheen om verdeelde skerm te gebruik"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Verdeel horisontaal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Verdeel vertikaal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Verdeel gepasmaak"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Verdeel skerm na bo"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Verdeel skerm na links"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Verdeel skerm na regs"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-am/strings.xml b/packages/SystemUI/legacy/recents/res/values-am/strings.xml
new file mode 100644
index 0000000..2870be7
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-am/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"አጠቃላይ እይታ።"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> አስወግድ።"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ተሰናብቷል።"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ሁሉም የቅርብ ጊዜ ማመልከቻዎች ተሰናብተዋል።"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"የ<xliff:g id="APP">%s</xliff:g> መተግበሪያ መረጃውን ይክፈቱ።"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> በመጀመር ላይ።"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"ምንም የቅርብ ጊዜ ንጥሎች የሉም"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ሁሉንም ነገር አጽድተዋል"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"የመተግበሪያ መረጃ"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ማያ ገጽ መሰካት"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"ፈልግ"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>ን መጀመር አልተቻለም።"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> በጥንቃቄ ሁነታ ውስጥ ታግዷል።"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ሁሉንም አጽዳ"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"የተከፈለ ማያ ገጽን ለመጠቀም እዚህ ላይ ይጎትቱ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"አግድም ክፈል"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ቁልቁል ክፈል"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"በብጁ ክፈል"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ማያ ገጽ ወደ ላይ ክፈል"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ማያ ገጽ ወደ ግራ ክፈል"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ማያ ገጽ ወደ ቀኝ ክፈል"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ar/strings.xml b/packages/SystemUI/legacy/recents/res/values-ar/strings.xml
new file mode 100644
index 0000000..004de41
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ar/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"النظرة عامة"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"إزالة <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"تمَّت إزالة <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"تمَّت إزالة كل التطبيقات المستخدمة مؤخرًا."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"فتح معلومات تطبيق <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"جارٍ بدء <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"ليست هناك عناصر تم استخدامها مؤخرًا"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"لقد محوتَ كل شيء"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"معلومات التطبيق"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"تثبيت الشاشة"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"بحث"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"تعذَّر بدء <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"تم إيقاف <xliff:g id="APP">%s</xliff:g> في الوضع الآمن."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"محو الكل"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"اسحب هنا لاستخدام وضع تقسيم الشاشة"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"تقسيم أفقي"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"تقسيم رأسي"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"تقسيم مخصَّص"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"تقسيم الشاشة بمحاذاة الجزء العلوي"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"تقسيم الشاشة بمحاذاة اليسار"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"تقسيم الشاشة بمحاذاة اليمين"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-az/strings.xml b/packages/SystemUI/legacy/recents/res/values-az/strings.xml
new file mode 100644
index 0000000..76ae02a
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-az/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"İcmal."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> tətbiqini silin."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> silindi."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Bütün son tətbiqlər silindi."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> tətbiq məlumatını açın."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> başladılır."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Ən son element yoxdur"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Hər şeyi sildiniz"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Tətbiq məlumatı"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ekran sancağı"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"axtarış"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> başladılmadı."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> təhlükəsiz rejimdə deaktiv edildi."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Hamısını silin"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Bölünmüş ekrandan istifadə etmək üçün bura sürüşdürün"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horizontal Bölün"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikal Bölün"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Fərdi Bölün"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Ekranı yuxarıya doğru bölün"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Ekranı sola doğru bölün"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Ekranı sağa doğru bölün"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/legacy/recents/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..3117eea
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Pregled."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Odbacite aplikaciju <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikacija <xliff:g id="APP">%s</xliff:g> je odbačena."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Sve nedavno korišćene aplikacije su odbačene."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otvorite informacije o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Pokreće se <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nema nedavnih stavki"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Obrisali ste sve"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informacije o aplikaciji"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"kačenje ekrana"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"pretraži"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Pokretanje aplikacije <xliff:g id="APP">%s</xliff:g> nije uspelo."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikacija <xliff:g id="APP">%s</xliff:g> je onemogućena u bezbednom režimu."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Obriši sve"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Prevucite ovde da biste koristili razdeljeni ekran"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Podeli horizontalno"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Podeli vertikalno"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Podeli prilagođeno"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Podeli ekran nagore"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Podeli ekran nalevo"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Podeli ekran nadesno"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-be/strings.xml b/packages/SystemUI/legacy/recents/res/values-be/strings.xml
new file mode 100644
index 0000000..8121846
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-be/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Агляд."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Закрыць праграму \"<xliff:g id="APP">%s</xliff:g>\"."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Праграма \"<xliff:g id="APP">%s</xliff:g>\" закрыта."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Усе нядаўнія праграмы закрыты."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Адкрыць інфармацыю пра праграму \"<xliff:g id="APP">%s</xliff:g>\"."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Запускаецца праграма \"<xliff:g id="APP">%s</xliff:g>\"."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Няма нядаўніх элементаў"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Вы ўсё выдалілі"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Інфармацыя пра праграму"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"замацаванне экрана"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"пошук"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Не ўдалося запусціць праграму \"<xliff:g id="APP">%s</xliff:g>\"."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Праграма \"<xliff:g id="APP">%s</xliff:g>\" адключана ў бяспечным рэжыме."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ачысціць усё"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Перацягніце сюды, каб перайсці ў рэжым падзеленага экрана"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Падзяліць гарызантальна"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Падзяліць вертыкальна"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Падзяліць іншым чынам"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Падзяліць экран зверху"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Падзяліць экран злева"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Падзяліць экран справа"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-bg/strings.xml b/packages/SystemUI/legacy/recents/res/values-bg/strings.xml
new file mode 100644
index 0000000..3dda34f
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-bg/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Общ преглед."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Отхвърляне на <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Приложението <xliff:g id="APP">%s</xliff:g> е отхвърлено."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Всички скорошни приложения са отхвърлени."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Отворете информацията за приложението <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> се стартира."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Няма скорошни елементи"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Изчистихте всичко"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Информация за приложението"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"фиксиране на екрана"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"търсене"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> не можа да стартира."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Приложението <xliff:g id="APP">%s</xliff:g> е деактивирано в безопасния режим."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Изчистване на всичко"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Преместете тук с плъзгане, за да използвате режим за разделен екран"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Хоризонтално разделяне"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Вертикално разделяне"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Персонализирано разделяне"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Разделяне на екрана нагоре"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Разделяне на екрана наляво"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Разделяне на екрана надясно"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-bs/strings.xml b/packages/SystemUI/legacy/recents/res/values-bs/strings.xml
new file mode 100644
index 0000000..8e149ba8
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-bs/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Pregled."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Odbaci aplikaciju <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikacija <xliff:g id="APP">%s</xliff:g> je odbačena."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Sve nedavno korištene aplikacije su odbačene."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otvaranje informacija o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Pokretanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nema nedavnih stavki"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Sve ste obrisali"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informacije o aplikaciji"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"kačenje ekrana"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"pretraži"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Aplikacija <xliff:g id="APP">%s</xliff:g> nije pokrenuta."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikacija <xliff:g id="APP">%s</xliff:g> je onemogućena u sigurnom načinu rada."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Obriši sve"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Povucite ovdje za korištenje podijeljenog ekrana"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Podjela po horizontali"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Podjela po vertikali"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Prilagođena podjela"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dijeli ekran nagore"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dijeli ekran nalijevo"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dijeli ekran nadesno"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ca/strings.xml b/packages/SystemUI/legacy/recents/res/values-ca/strings.xml
new file mode 100644
index 0000000..fff525c
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ca/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Aplicacions recents."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ignora <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"S\'ha ignorat <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"S\'han ignorat totes les aplicacions recents."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Obre la informació sobre l\'aplicació <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"S\'està iniciant <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"No hi ha cap element recent"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Ho has esborrat tot"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informació de l\'aplicació"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fixació de pantalla"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"cerca"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"No s\'ha pogut iniciar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"En mode segur, l\'aplicació <xliff:g id="APP">%s</xliff:g> està desactivada."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Esborra-ho tot"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Arrossega-ho aquí per utilitzar la pantalla dividida"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Divisió horitzontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Divisió vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Divisió personalitzada"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Divideix la pantalla cap amunt"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Divideix la pantalla cap a l\'esquerra"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Divideix la pantalla cap a la dreta"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-cs/strings.xml b/packages/SystemUI/legacy/recents/res/values-cs/strings.xml
new file mode 100644
index 0000000..200f7a8
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-cs/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Přehled"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Zavřít aplikaci <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikace <xliff:g id="APP">%s</xliff:g> byla odebrána."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Všechny naposledy použité aplikace byly odstraněny."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otevře informace o aplikaci <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Spouštění aplikace <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Žádné nedávné položky"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Vše je vymazáno"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informace o aplikaci"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"připnutí obrazovky"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"hledat"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Aplikaci <xliff:g id="APP">%s</xliff:g> nelze spustit."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikace <xliff:g id="APP">%s</xliff:g> je v nouzovém režimu zakázána."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Vymazat vše"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Přetáhnutím sem aktivujete rozdělenou obrazovku"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Vodorovné rozdělení"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Svislé rozdělení"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Vlastní rozdělení"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Rozdělit obrazovku nahoru"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Rozdělit obrazovku vlevo"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Rozdělit obrazovku vpravo"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-da/strings.xml b/packages/SystemUI/legacy/recents/res/values-da/strings.xml
new file mode 100644
index 0000000..0a1690e
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-da/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Oversigt."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Fjern <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> er fjernet."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alle de seneste apps er fjernet."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Åbn appoplysningerne for <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> åbnes."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Ingen nye elementer"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Du har ryddet alt"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Appoplysninger"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"skærmfastholdelse"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"søg"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> kunne ikke åbnes."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> er deaktiveret i sikker tilstand."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ryd alle"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Træk hertil for at bruge opdelt skærm"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Opdel vandret"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Opdel lodret"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Opdel brugerdefineret"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Opdelt skærm øverst"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Opdelt skærm til venstre"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Opdelt skærm til højre"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-de/strings.xml b/packages/SystemUI/legacy/recents/res/values-de/strings.xml
new file mode 100644
index 0000000..97a6366
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-de/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Übersicht."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> entfernen."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> wurde entfernt."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alle kürzlich verwendeten Apps wurden entfernt."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Infos zur <xliff:g id="APP">%s</xliff:g> App öffnen."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> wird gestartet."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Keine kürzlich verwendeten Elemente"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Du hast alles gelöscht"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"App-Info"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"Bildschirmfixierung"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"Suchen"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> konnte nicht gestartet werden."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ist im abgesicherten Modus deaktiviert."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Alle löschen"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Hierher ziehen, um den Bildschirm zu teilen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Geteilt – horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Geteilt – vertikal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Geteilt – benutzerdefiniert"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Geteilten Bildschirm oben anzeigen"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Geteilten Bildschirm links anzeigen"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Geteilten Bildschirm rechts anzeigen"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-el/strings.xml b/packages/SystemUI/legacy/recents/res/values-el/strings.xml
new file mode 100644
index 0000000..90baf52
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-el/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Επισκόπηση."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Παράβλεψη εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Η εφαρμογή <xliff:g id="APP">%s</xliff:g> απορρίφθηκε."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Όλες οι πρόσφατες εφαρμογές παραβλέφθηκαν."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Άνοιγμα πληροφοριών εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Έναρξη εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Δεν υπάρχουν πρόσφατα στοιχεία"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Διαγράψατε όλα τα στοιχεία"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Πληροφορίες εφαρμογής"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"καρφίτσωμα οθόνης"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"αναζήτηση"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Δεν ήταν δυνατή η έναρξη της εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Η εφαρμογή <xliff:g id="APP">%s</xliff:g> έχει απενεργοποιηθεί στην ασφαλή λειτουργία."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Διαγραφή όλων"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Σύρετε εδώ για να χρησιμοποιήσετε τον διαχωρισμό οθόνης"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Οριζόντιος διαχωρισμός"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Κάθετος διαχωρισμός"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Προσαρμοσμένος διαχωρισμός"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Διαχωρισμός οθόνης στην κορυφή"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Διαχωρισμός οθόνης στα αριστερά"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Διαχωρισμός οθόνης στα δεξιά"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-en-rAU/strings.xml b/packages/SystemUI/legacy/recents/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..af1d055
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-en-rAU/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"All recent applications dismissed."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"No recent items"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"You\'ve cleared everything"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Application Info"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"screen pinning"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"search"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Clear all"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Drag here to use split screen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Split Horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Split Vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Split screen to the top"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Split screen to the left"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Split screen to the right"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-en-rCA/strings.xml b/packages/SystemUI/legacy/recents/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..af1d055
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-en-rCA/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"All recent applications dismissed."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"No recent items"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"You\'ve cleared everything"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Application Info"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"screen pinning"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"search"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Clear all"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Drag here to use split screen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Split Horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Split Vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Split screen to the top"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Split screen to the left"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Split screen to the right"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-en-rGB/strings.xml b/packages/SystemUI/legacy/recents/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..af1d055
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-en-rGB/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"All recent applications dismissed."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"No recent items"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"You\'ve cleared everything"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Application Info"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"screen pinning"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"search"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Clear all"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Drag here to use split screen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Split Horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Split Vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Split screen to the top"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Split screen to the left"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Split screen to the right"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-en-rIN/strings.xml b/packages/SystemUI/legacy/recents/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..af1d055
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-en-rIN/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"All recent applications dismissed."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"No recent items"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"You\'ve cleared everything"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Application Info"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"screen pinning"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"search"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Clear all"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Drag here to use split screen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Split Horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Split Vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Split screen to the top"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Split screen to the left"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Split screen to the right"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-en-rXC/strings.xml b/packages/SystemUI/legacy/recents/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..67477e9
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-en-rXC/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"All recent applications dismissed."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"No recent items"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"You\'ve cleared everything"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Application Info"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"screen pinning"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"search"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Clear all"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Drag here to use split screen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Split Horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Split Vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Split screen to the top"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Split screen to the left"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Split screen to the right"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-es-rUS/strings.xml b/packages/SystemUI/legacy/recents/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..8bf3807
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-es-rUS/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Recientes"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Permite descartar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> descartada"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Se descartaron todas las aplicaciones recientes."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Permite abrir la información de aplicación de <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iniciando <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"No hay elementos recientes"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Todo borrado"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Información de la aplicación"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"Fijar pantalla"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"Buscar"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"No se pudo iniciar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> está inhabilitada en modo seguro."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Borrar todo"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Arrastra hasta aquí para usar la pantalla dividida"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"División horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"División vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"División personalizada"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dividir pantalla en la parte superior"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dividir pantalla a la izquierda"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dividir pantalla a la derecha"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-es/strings.xml b/packages/SystemUI/legacy/recents/res/values-es/strings.xml
new file mode 100644
index 0000000..b70f318
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-es/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Aplicaciones recientes."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ignorar la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Se ha ignorado la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Se han ignorado todas las aplicaciones recientes."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Abre la información de la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iniciando la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"No hay elementos recientes"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Has borrado todo"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Información de la aplicación"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"bloqueo de pantalla"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"buscar"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"No se ha podido iniciar la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"La aplicación <xliff:g id="APP">%s</xliff:g> se ha inhabilitado en modo seguro."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Borrar todo"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Arrastra el elemento hasta aquí para utilizar la pantalla dividida"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"División horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"División vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"División personalizada"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dividir la pantalla en la parte superior"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dividir la pantalla a la izquierda"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dividir la pantalla a la derecha"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-et/strings.xml b/packages/SystemUI/legacy/recents/res/values-et/strings.xml
new file mode 100644
index 0000000..c1903af
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-et/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Ülevaade."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Rakendusest <xliff:g id="APP">%s</xliff:g> loobumine."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Rakendusest <xliff:g id="APP">%s</xliff:g> on loobutud."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Kõikidest hiljutistest rakendustest on loobutud."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Rakenduse <xliff:g id="APP">%s</xliff:g> teabe avamine."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Rakenduse <xliff:g id="APP">%s</xliff:g> käivitamine."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Hiljutisi üksusi pole"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Olete kõik ära kustutanud"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Rakenduse teave"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ekraanikuva kinnitamine"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"otsi"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Rakendust <xliff:g id="APP">%s</xliff:g> ei saanud käivitada."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Rakendus <xliff:g id="APP">%s</xliff:g> on turvarežiimis keelatud."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Kustuta kõik"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Jagatud ekraani kasutamiseks lohistage siia"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horisontaalne poolitamine"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikaalne poolitamine"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Kohandatud poolitamine"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Poolita ekraan üles"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Poolita ekraan vasakule"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Poolita ekraan paremale"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-eu/strings.xml b/packages/SystemUI/legacy/recents/res/values-eu/strings.xml
new file mode 100644
index 0000000..91e250f
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-eu/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Ikuspegi orokorra."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Baztertu <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Baztertu da <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Baztertu dira azken aplikazio guztiak."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Ireki <xliff:g id="APP">%s</xliff:g> aplikazioari buruzko informazioa."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> abiarazten."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Ez dago azkenaldi honetako ezer"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Dena garbitu duzu"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Aplikazioaren informazioa"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"pantaila-ainguratzea"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"bilatu"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Ezin izan da abiarazi <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> desgaituta dago modu seguruan."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Garbitu guztiak"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Arrastatu hona pantaila zatitzeko"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Zatitze horizontala"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Zatitze bertikala"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Zatitze pertsonalizatua"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Zatitu pantaila eta ezarri goian"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Zatitu pantaila eta ezarri ezkerrean"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Zatitu pantaila eta ezarri eskuinean"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-fa/strings.xml b/packages/SystemUI/legacy/recents/res/values-fa/strings.xml
new file mode 100644
index 0000000..61e87c1
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-fa/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"نمای کلی."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"رد کردن <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> نادیده گرفته شد."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"همه برنامههای اخیر رد شدند."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"باز کردن اطلاعات برنامه <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> درحال شروع به کار است."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"بدون موارد اخیر"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"همهچیز را پاک کردهاید"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"اطلاعات برنامه"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"پین کردن صفحه"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"جستجو"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> شروع نشد."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> در حالت ایمن غیرفعال است."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"پاک کردن همه"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"برای استفاده از تقسیم صفحه، به اینجا بکشید"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"تقسیم افقی"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"تقسیم عمودی"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"سفارشی کردن تقسیم"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"تقسیم کردن صفحه به بالا"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"تقسیم کردن صفحه به چپ"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"تقسیم کردن صفحه به راست"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-fi/strings.xml b/packages/SystemUI/legacy/recents/res/values-fi/strings.xml
new file mode 100644
index 0000000..bf2e461
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-fi/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Viimeisimmät"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Hylkää <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> hylättiin."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Kaikki viimeisimmät sovellukset on hylätty."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Avaa sovelluksen <xliff:g id="APP">%s</xliff:g> tiedot."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Käynnistetään <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Ei viimeaikaisia kohteita"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Kaikki on hoidettu"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Sovellustiedot"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"näytön kiinnitys"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"haku"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ei käynnistynyt."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> on poistettu käytöstä vikasietotilassa."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Poista kaikki"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Jaa näyttö vetämällä tähän."</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Vaakasuuntainen jako"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Pystysuuntainen jako"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Oma jako"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Jaa näyttö ylös"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Jaa näyttö vasemmalle"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Jaa näyttö oikealle"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-fr-rCA/strings.xml b/packages/SystemUI/legacy/recents/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..e60727e
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-fr-rCA/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Aperçu"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Supprimer <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> supprimée."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Toutes les applications récentes ont été supprimées."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Ouvre les détails de l\'application <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Lancement de <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Aucun élément récent"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Vous avez tout effacé"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Détails de l\'application"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"épinglage d\'écran"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"rechercher"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> est désactivée en mode sans échec."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Tout effacer"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Glissez l\'élément ici pour utiliser l\'écran partagé"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Séparation horizontale"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Séparation verticale"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Séparation personnalisée"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Écran partagé dans le haut"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Écran partagé à la gauche"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Écran partagé à la droite"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-fr/strings.xml b/packages/SystemUI/legacy/recents/res/values-fr/strings.xml
new file mode 100644
index 0000000..183b6be
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-fr/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Aperçu"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Supprimer l\'application <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Application <xliff:g id="APP">%s</xliff:g> supprimée."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Toutes les applications récentes ont été supprimées."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Ouvre les informations sur l\'application <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Lancement de l\'application <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Aucun élément récent"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Vous avez tout effacé"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informations sur l\'application"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"épinglage d\'écran"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"rechercher"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Impossible de lancer l\'application <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"L\'application <xliff:g id="APP">%s</xliff:g> est désactivée en mode sécurisé."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Tout effacer"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Faire glisser ici pour utiliser l\'écran partagé"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Séparation horizontale"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Séparation verticale"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Séparation personnalisée"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Partager l\'écran en haut"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Partager l\'écran sur la gauche"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Partager l\'écran sur la droite"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-gl/strings.xml b/packages/SystemUI/legacy/recents/res/values-gl/strings.xml
new file mode 100644
index 0000000..008c776
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-gl/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Visión xeral."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Rexeita <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Rexeitouse <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Rexeitáronse todas as aplicacións recentes."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Abre a información da aplicación <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Non hai elementos recentes"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Borraches todo"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Información da aplicación"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fixación de pantalla"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"buscar"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Non se puido iniciar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"A aplicación <xliff:g id="APP">%s</xliff:g> está desactivada no modo seguro."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Borrar todo"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Arrastra aquí para usar a pantalla dividida"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Dividir horizontalmente"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Dividir verticalmente"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Dividir de xeito personalizado"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dividir pantalla arriba"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dividir pantalla á esquerda"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dividir pantalla á dereita"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-gu/strings.xml b/packages/SystemUI/legacy/recents/res/values-gu/strings.xml
new file mode 100644
index 0000000..33dc7e8
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-gu/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ઝલક."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> કાઢી નાખો."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> કાઢી નાખી."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"તાજેતરની બધી ઍપ્લિકેશનો કાઢી નાખવામાં આવી."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g>ની ઍપ્લિકેશન માહિતી ખોલો."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g>ને શરૂ કરી રહ્યાં છીએ."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"તાજેતરની કોઈ આઇટમ નથી"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"તમે બધું સાફ કર્યું"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"ઍપ્લિકેશનની માહિતી"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"સ્ક્રીન પિનિંગ"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"શોધો"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>ને શરૂ કરી શકાઈ નથી."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"સુરક્ષિત મોડમાં <xliff:g id="APP">%s</xliff:g>ને બંધ કરવામાં આવી છે."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"બધું સાફ કરો"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"વિભાજિત સ્ક્રીનનો ઉપયોગ કરવા માટે અહીં ખેંચો"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"સ્ક્રીનને આડી વિભાજિત કરો"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"સ્ક્રીનને ઊભી વિભાજિત કરો"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"સ્ક્રીનને કસ્ટમ વિભાજિત કરો"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"સ્ક્રીનને ઉપરની તરફ વિભાજિત કરો"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"સ્ક્રીનને ડાબી તરફ વિભાજિત કરો"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"સ્ક્રીનને જમણી તરફ વિભાજિત કરો"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-hi/strings.xml b/packages/SystemUI/legacy/recents/res/values-hi/strings.xml
new file mode 100644
index 0000000..c9ac2a0
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-hi/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"खास जानकारी."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> को खारिज करें."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> खारिज किया गया."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"हाल के सभी ऐप्लिकेशन खारिज कर दिए गए हैं."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन की जानकारी खोलें."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> शुरू किया जा रहा है."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"हाल का कोई आइटम नहीं है"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"आपने सब कुछ हटा दिया है"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"ऐप्लिकेशन की जानकारी"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"स्क्रीन पिन करना"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"खोजें"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> शुरू नहीं किया जा सका."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> को सुरक्षित-मोड में बंद किया गया."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"सभी ऐप्लिकेशन बंद करें"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"स्क्रीन को दो हिस्सों में बाँटने (स्प्लिट स्क्रीन) के लिए यहां से खींचें और छोड़ें"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"क्षैतिज रूप से दो हिस्सों में बाँटें (स्प्लिट करें)"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"लम्बवत रूप से दो हिस्सों में बाँटें (स्प्लिट करें)"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"अपने मुताबिक दो हिस्सों में बाँटें (स्प्लिट स्क्रीन करें)"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ऊपर की ओर दो स्क्रीन बनाएं"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"बाईं ओर दो स्क्रीन बनाएं"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"दाईं ओर दो स्क्रीन बनाएं"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-hr/strings.xml b/packages/SystemUI/legacy/recents/res/values-hr/strings.xml
new file mode 100644
index 0000000..88926a4
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-hr/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Pregled."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Odbacivanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Odbačena je aplikacija <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Odbačene su sve nedavne aplikacije."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otvaranje informacija o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Pokreće se aplikacija <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nema nedavnih stavki"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Izbrisali ste sve"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informacije o aplikaciji"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"prikačivanje zaslona"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"pretraživanje"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Aplikacija <xliff:g id="APP">%s</xliff:g> nije pokrenuta."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikacija <xliff:g id="APP">%s</xliff:g> onemogućena je u sigurnom načinu."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Izbriši sve"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Povucite ovdje da biste upotrebljavali podijeljeni zaslon"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Podijeli vodoravno"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Podijeli okomito"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Podijeli prilagođeno"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Podijeli zaslon na vrhu"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Podijeli zaslon slijeva"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Podijeli zaslon zdesna"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-hu/strings.xml b/packages/SystemUI/legacy/recents/res/values-hu/strings.xml
new file mode 100644
index 0000000..d0429e7
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-hu/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Áttekintés."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"A(z) <xliff:g id="APP">%s</xliff:g> elvetése."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> eltávolítva."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Az összes alkalmazás eltávolítva a nemrég használtak közül."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"A(z) <xliff:g id="APP">%s</xliff:g> alkalmazás adatainak megnyitása."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"A(z) <xliff:g id="APP">%s</xliff:g> indítása."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nincsenek mostanában használt elemek"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Mindent törölt"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Az alkalmazás adatai"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"képernyő rögzítése"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"keresés"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Nem lehet elindítani a következőt: <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"A(z) <xliff:g id="APP">%s</xliff:g> csökkentett módban le van tiltva."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Összes törlése"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Húzza ide az osztott képernyő használatához"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Osztott vízszintes"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Osztott függőleges"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Osztott egyéni"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Osztott képernyő felülre"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Osztott képernyő balra"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Osztott képernyő jobbra"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-hy/strings.xml b/packages/SystemUI/legacy/recents/res/values-hy/strings.xml
new file mode 100644
index 0000000..c56b691
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-hy/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Համատեսք:"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Հեռացնել <xliff:g id="APP">%s</xliff:g> հավելվածը ցուցակից:"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> հավելվածը հեռացվել է ցուցակից:"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Բոլոր վերջին հավելվածները հեռացվել են ցուցակից:"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Բացել <xliff:g id="APP">%s</xliff:g> հավելվածի մասին տեղեկությունները"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> հավելվածը գործարկվում է:"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Այստեղ դեռ ոչինչ չկա"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Ցուցակը դատարկ է"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Հավելվածի մասին"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"էկրանի ամրացում"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"որոնում"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Չհաջողվեց գործարկել <xliff:g id="APP">%s</xliff:g> հավելվածը:"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> հավելվածը անվտանգ ռեժիմում անջատված է:"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ջնջել բոլորը"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Քաշեք այստեղ՝ էկրանի տրոհումն օգտագործելու համար"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Հորիզոնական տրոհում"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Ուղղահայաց տրոհում"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Հատուկ տրոհում"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Տրոհել էկրանը վերևից"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Տրոհել էկրանը ձախից"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Տրոհել էկրանն աջից"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-in/strings.xml b/packages/SystemUI/legacy/recents/res/values-in/strings.xml
new file mode 100644
index 0000000..aa9dcfe
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-in/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Ringkasan."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Hapus <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dihapus."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Semua aplikasi yang baru dibuka telah dihapus."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Buka info aplikasi <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Memulai <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Tidak ada item yang baru dibuka"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Anda sudah menghapus semua"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Info Aplikasi"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"pin ke layar"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"telusuri"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Tidak dapat memulai <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> dinonaktifkan dalam mode aman."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Hapus semua"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Tarik ke sini untuk menggunakan layar terpisah"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Pisahkan Horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Pisahkan Vertikal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Pisahkan Khusus"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Pisahkan layar ke atas"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Pisahkan layar ke kiri"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Pisahkan layar ke kanan"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-is/strings.xml b/packages/SystemUI/legacy/recents/res/values-is/strings.xml
new file mode 100644
index 0000000..e0a555e
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-is/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Yfirlit."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Fjarlægja <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> fjarlægt."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Öll nýleg forrit fjarlægð."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Opna forritsupplýsingar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Ræsir <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Engin nýleg atriði"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Þú hefur hreinsað allt"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Forritsupplýsingar"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"skjáfesting"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"leita"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Ekki var hægt að ræsa <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Slökkt er á <xliff:g id="APP">%s</xliff:g> í öruggri stillingu."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Hreinsa allt"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Dragðu hingað til að skipta skjánum"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Lárétt skipting"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Lóðrétt skipting"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Sérsniðin skipting"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Skipta skjá að ofanverðu"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Skipta skjá til vinstri"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Skipta skjá til hægri"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-it/strings.xml b/packages/SystemUI/legacy/recents/res/values-it/strings.xml
new file mode 100644
index 0000000..e04d560
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-it/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Panoramica."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Elimina <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> eliminata."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Tutte le applicazioni recenti sono state rimosse."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Mostra informazioni sull\'applicazione <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Avvio di <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nessun elemento recente"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Hai cancellato tutto"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informazioni sull\'applicazione"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"blocco su schermo"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"cerca"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Impossibile avviare <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"L\'app <xliff:g id="APP">%s</xliff:g> è stata disattivata in modalità provvisoria."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Cancella tutto"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Trascina qui per utilizzare la modalità Schermo diviso"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Divisione in orizzontale"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Divisione in verticale"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Divisione personalizzata"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Schermo diviso in alto"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Schermo diviso a sinistra"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Schermo diviso a destra"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-iw/strings.xml b/packages/SystemUI/legacy/recents/res/values-iw/strings.xml
new file mode 100644
index 0000000..a96c709
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-iw/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"סקירה כללית."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"הסרה של <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> הוסרה."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"כל האפליקציות האחרונות הוסרו."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"פתיחת מידע על האפליקציה <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"מפעיל את <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"אין פריטים אחרונים"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"מחקת הכול"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"מידע על האפליקציה"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"הקפאת מסך"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"חיפוש"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"לא ניתן היה להפעיל את <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> מושבתת במצב בטוח."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ניקוי הכול"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"יש לגרור לכאן כדי להשתמש במסך מפוצל"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"פיצול אופקי"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"פיצול אנכי"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"פיצול מותאם אישית"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"פיצול מסך למעלה"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"פיצול מסך לשמאל"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"פיצול מסך לימין"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ja/strings.xml b/packages/SystemUI/legacy/recents/res/values-ja/strings.xml
new file mode 100644
index 0000000..4d7524c
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ja/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"最近"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g>を削除します。"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g>を削除しました。"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"最近のアプリをすべて削除しました。"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g>のアプリ情報を開きます。"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g>を開始しています。"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"最近のアイテムはありません"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"すべてのタスクを削除しました"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"アプリ情報"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"画面固定"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"検索"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>を開始できませんでした。"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>はセーフモードでは無効になります。"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"すべて消去"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"分割画面を使用するにはここにドラッグします"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"横に分割"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"縦に分割"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"分割(カスタム)"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"画面を上に分割"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"画面を左に分割"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"画面を右に分割"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ka/strings.xml b/packages/SystemUI/legacy/recents/res/values-ka/strings.xml
new file mode 100644
index 0000000..088388b
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ka/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"მიმოხილვა"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g>-ის დახურვა."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> დაიხურა."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ყველა ბოლოდროინდელი აპლიკაცია დაიხურა."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> აპლიკაციის ინფორმაციის გახსნა."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"მიმდინარეობს <xliff:g id="APP">%s</xliff:g>-ის გაშვება."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"ბოლოდროინდელი ერთეულები არ არის"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ყველაფერი გასუფთავდა"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"აპლიკაციის ინფორმაცია"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ეკრანზე ჩამაგრება"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"ძიება"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>-ის გაშვება ვერ მოხერხდა."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> გათიშულია უსაფრთხო რეჟიმში."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ყველას გასუფთავება"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"ეკრანის გასაყოფად ჩავლებით გადმოიტანეთ აქ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"ჰორიზონტალური გაყოფა"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ვერტიკალური გაყოფა"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"მორგებული გაყოფა"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ეკრანის გაყოფა ზემოთ"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ეკრანის გაყოფა მარცხნივ"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ეკრანის გაყოფა მარჯვნივ"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-kk/strings.xml b/packages/SystemUI/legacy/recents/res/values-kk/strings.xml
new file mode 100644
index 0000000..9d4e01c
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-kk/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Жалпы ақпарат."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> қолданбасын өшіру."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> өшірілді."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Барлық қолданбалар \"Соңғылар\" тізімінен өшірілді."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> қолданбасы туралы ақпаратты ашу."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> іске қосылды."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Ешқандай соңғы элементтер жоқ"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Барлығын өшірдіңіз"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Қолданба туралы ақпарат"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"экранды бекіту"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"іздеу"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> іске қосылмады."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> қауіпсіз режимде өшіріледі."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Барлығын өшіру"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Экранды бөлу үшін осы жерге сүйреңіз"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Көлденеңінен бөлу"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Тігінен бөлу"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Бөлу (арнаулы)"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Экранды жоғары жағынан бөлу"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Экранды сол жағынан бөлу"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Экранды оң жағынан бөлу"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-km/strings.xml b/packages/SystemUI/legacy/recents/res/values-km/strings.xml
new file mode 100644
index 0000000..b7bfba6
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-km/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ទិដ្ឋភាពរួម។"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"ច្រានចោល <xliff:g id="APP">%s</xliff:g> ។"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"បានច្រានចោល <xliff:g id="APP">%s</xliff:g> ។"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"បានច្រានចោលកម្មវិធីថ្មីៗទាំងអស់។"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"បើកព័ត៌មានកម្មវិធី <xliff:g id="APP">%s</xliff:g> ។"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"កំពុងចាប់ផ្ដើម <xliff:g id="APP">%s</xliff:g> ។"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"មិនមានធាតុថ្មីៗទេ"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"អ្នកបានសម្អាតអ្វីៗគ្រប់យ៉ាង"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"ព័ត៌មានកម្មវិធី"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ការភ្ជាប់អេក្រង់"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"ស្វែងរក"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"មិនអាចចាប់ផ្ដើម <xliff:g id="APP">%s</xliff:g> បានទេ។"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ត្រូវបានបិទដំណើរការក្នុងមុខងារសុវត្ថិភាព។"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"សម្អាតទាំងអស់"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"អូសនៅទីនេះដើម្បីប្រើអេក្រង់បំបែក"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"បំបែកផ្តេក"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"បំបែកបញ្ឈរ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"បំបែកផ្ទាល់ខ្លួន"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"បំបែកអេក្រង់ទៅខាងលើ"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"បំបែកអេក្រង់ទៅខាងឆ្វេង"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"បំបែកអេក្រង់ទៅខាងស្តាំ"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-kn/strings.xml b/packages/SystemUI/legacy/recents/res/values-kn/strings.xml
new file mode 100644
index 0000000..84894c1
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-kn/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ಸಮಗ್ರ ನೋಟ."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸಿ."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ಇತ್ತೀಚಿನ ಎಲ್ಲಾ ಆ್ಯಪ್ಗಳನ್ನು ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ಆ್ಯಪ್ ಮಾಹಿತಿ ತೆರೆಯಿರಿ."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"ಯಾವುದೇ ಇತ್ತೀಚಿನ ಐಟಂಗಳಿಲ್ಲ"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ನೀವು ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿರುವಿರಿ"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"ಆ್ಯಪ್ ಮಾಹಿತಿ"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ಸ್ಕ್ರೀನ್ ಪಿನ್ನಿಂಗ್"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"ಹುಡುಕಾಟ"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ಪ್ರಾರಂಭಿಸಲು ಸಾದ್ಯವಾಗಲಿಲ್ಲ."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ಅನ್ನು ಸುರಕ್ಷಿತ ಮೋಡ್ನಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿ"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"ವಿಭಜಿತ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಬಳಸಲು ಇಲ್ಲಿ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"ಅಡ್ಡಲಾಗಿ ವಿಭಜಿಸಿದ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ಲಂಬವಾಗಿ ವಿಭಜಿಸಿದ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"ಕಸ್ಟಮ್ ವಿಭಜಿಸಿದ"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ಮೇಲ್ಭಾಗಕ್ಕೆ ಸ್ಕ್ರೀನ್ ಅನ್ನು ವಿಭಜಿಸಿ"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ಎಡಕ್ಕೆ ಸ್ಕ್ರೀನ್ ಅನ್ನು ವಿಭಜಿಸಿ"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ಬಲಕ್ಕೆ ಸ್ಕ್ರೀನ್ ಅನ್ನು ವಿಭಜಿಸಿ"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ko/strings.xml b/packages/SystemUI/legacy/recents/res/values-ko/strings.xml
new file mode 100644
index 0000000..ee856bd
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ko/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"최근 사용"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g>을(를) 닫습니다."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> 애플리케이션을 닫았습니다."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"최근 사용한 애플리케이션을 모두 닫았습니다."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> 애플리케이션 정보를 엽니다."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g>을(를) 시작하는 중입니다."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"최근 항목이 없습니다."</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"모든 항목을 삭제했습니다."</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"애플리케이션 정보"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"화면 고정"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"검색"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>을(를) 시작할 수 없습니다."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>은(는) 안전 모드에서 사용 중지됩니다."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"모두 삭제"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"여기를 드래그하여 분할 화면 사용하기"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"수평 분할"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"수직 분할"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"맞춤 분할"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"위쪽으로 화면 분할"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"왼쪽으로 화면 분할"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"오른쪽으로 화면 분할"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ky/strings.xml b/packages/SystemUI/legacy/recents/res/values-ky/strings.xml
new file mode 100644
index 0000000..879e492
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ky/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Сереп салуу."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> колдонмосун өчүрүү."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> колдонмосу өчүрүлдү."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Акыркы колдонмолордун баары өчүрүлдү."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> колдонмосу жөнүндө маалыматты ачыңыз."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ачылууда."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Акыркы колдонмолор жок"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Баарын тазаладыңыз"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Колдонмо жөнүндө маалымат"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"экран кадоо"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"издөө"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> колдонмосу ачылган жок"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> коопсуз режиминде өчүрүлдү."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Баарын тазалоо"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Экранды бөлүү үчүн бул жерге сүйрөңүз"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Туурасынан бөлүү"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Тигинен бөлүү"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Ыңгайлаштырылган бөлүү"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Экранды өйдө жакка бөлүү"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Экранды сол жакка бөлүү"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Экранды оң жакка бөлүү"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-lo/strings.xml b/packages/SystemUI/legacy/recents/res/values-lo/strings.xml
new file mode 100644
index 0000000..17f56b4
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-lo/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ພາບຮວມ."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"ປິດ <xliff:g id="APP">%s</xliff:g> ໄວ້."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"ປິດ <xliff:g id="APP">%s</xliff:g> ແລ້ວ."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ທຸກແອັບພລິເຄຊັນບໍ່ດົນມານີ້ຖືກປິດໄວ້ແລ້ວ."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"ເປີດຂໍ້ມູນແອັບພລິເຄຊັນ <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"ກຳລັງເປີດ <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"ບໍ່ມີລາຍການຫຼ້າສຸດ"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ທ່ານລຶບລ້າງທຸກຢ່າງແລ້ວ"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"ຂໍ້ມູນແອັບພລິເຄຊັນ"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ການປັກໝຸດໜ້າຈໍ"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"ຊອກຫາ"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"ບໍ່ສາມາດເລີ່ມ <xliff:g id="APP">%s</xliff:g> ໄດ້."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ຖືກປິດໃຊ້ໃນໂໝດຄວາມມປອດໄພ."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ລຶບລ້າງທັງໝົດ"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"ລາກມາບ່ອນນີ້ເພື່ອໃຊ້ການແບ່ງໜ້າຈໍ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"ການແຍກລວງຂວາງ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ການແຍກລວງຕັ້ງ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"ການແຍກກຳນົດເອງ"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ແຍກໜ້າຈໍໄປທາງເທິງ"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ແຍກໜ້າຈໍໄປທາງຊ້າຍ"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ແຍກໜ້າຈໍໄປທາງຂວາ"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-lt/strings.xml b/packages/SystemUI/legacy/recents/res/values-lt/strings.xml
new file mode 100644
index 0000000..4a9eb83
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-lt/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Apžvalga."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Atsisakyti programos „<xliff:g id="APP">%s</xliff:g>“."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Atsisakyta programos „<xliff:g id="APP">%s</xliff:g>“."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Atsisakyta visų naujausių programų."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Atidaryti programos „<xliff:g id="APP">%s</xliff:g>“ informaciją."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Paleidžiama programa „<xliff:g id="APP">%s</xliff:g>“."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nėra jokių naujausių elementų"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Viską išvalėte"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Programos informacija"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ekrano prisegimas"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"ieškoti"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Nepavyko paleisti programos „<xliff:g id="APP">%s</xliff:g>“."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Programa „<xliff:g id="APP">%s</xliff:g>“ išjungta saugos režimu."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Išvalyti viską"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Vilkite čia, kad naudotumėte skaidytą ekraną"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horizontalus skaidymas"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikalus skaidymas"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Tinkintas skaidymas"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Skaidyti ekraną į viršų"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Skaidyti ekraną į kairę"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Skaidyti ekraną į dešinę"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-lv/strings.xml b/packages/SystemUI/legacy/recents/res/values-lv/strings.xml
new file mode 100644
index 0000000..7d87e00
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-lv/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Pārskats."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Nerādīt lietotni <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Vairs netiek rādīta lietotne <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Vairs netiek rādīta neviena nesen izmantotā lietojumprogramma."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Atveriet lietojumprogrammas <xliff:g id="APP">%s</xliff:g> informāciju."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Notiek lietotnes <xliff:g id="APP">%s</xliff:g> palaišana."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nav nesenu vienumu"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Visi uzdevumi ir notīrīti"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Lietojumprogrammas informācija"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"Piespraust ekrānu"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"Meklēt"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Nevarēja palaist lietotni <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Lietotne <xliff:g id="APP">%s</xliff:g> ir atspējota drošajā režīmā."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Notīrīt visu"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Velciet šeit, lai izmantotu ekrāna sadalīšanu"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horizontāls dalījums"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikāls dalījums"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Pielāgots dalījums"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Sadalīt ekrānu augšdaļā"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Sadalīt ekrānu kreisajā pusē"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Sadalīt ekrānu labajā pusē"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-mk/strings.xml b/packages/SystemUI/legacy/recents/res/values-mk/strings.xml
new file mode 100644
index 0000000..d8ced0b
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-mk/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Преглед."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Отфрлете ја <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> е отфрлена."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Сите неодамнешни апликации се отфрлени."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Отворете информации за апликацијата <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Се стартува <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Нема неодамнешни ставки"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Избришавте сѐ"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Информации за апликацијата"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"прикачување екран"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"пребарувај"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> не можеше да се стартува."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> е оневозможена во безбеден режим."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Избриши сѐ"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Повлечете тука за да користите поделен екран"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Подели хоризонтално"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Подели вертикално"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Подели приспособено"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Подели го екранот во горниот дел"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Подели го екранот на левата страна"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Подели го екранот на десната страна"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-mn/strings.xml b/packages/SystemUI/legacy/recents/res/values-mn/strings.xml
new file mode 100644
index 0000000..205f56c
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-mn/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Тойм."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g>-г үл хэрэгсэнэ үү."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g>-г үл хэрэгссэн."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Саяхны бүх аппыг үл хэрэгссэн."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> аппын мэдээллийг нээнэ үү."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g>-г эхлүүлж байна."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Саяхны зүйлс алга"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Та бүгдийг нь устгасан"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Аппын мэдээлэл"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"дэлгэц тогтоох"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"хайх"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>-г эхлүүлж чадсангүй."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>-г аюулгүй горимд идэвхгүй болгосон."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Бүгдийг устгах"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Хуваасан дэлгэцийг ашиглахын тулд энд чирэх"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Хэвтээ чиглэлд хуваах"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Босоо чиглэлд хуваах"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Хүссэн хэлбэрээр хуваах"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Дэлгэцийг дээд хэсэгт хуваах"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Дэлгэцийг зүүн хэсэгт хуваах"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Дэлгэцийг баруун хэсэгт хуваах"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-mr/strings.xml b/packages/SystemUI/legacy/recents/res/values-mr/strings.xml
new file mode 100644
index 0000000..51bce6d
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-mr/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"अवलोकन."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> डिसमिस करा."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> डिसमिस केले"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"अलीकडील सर्व अॅप्लिकेशन डिसमिस झाले."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> अॅप्लिकेशन माहिती उघडा."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> सुरू करत आहे."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"कोणतेही अलीकडील आयटम नाहीत"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"तुम्ही सर्वकाही साफ केले"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"अॅप्लिकेशन माहिती"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"स्क्रीन पिन करणे"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"शोधा"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> सुरू करता आले नाही."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> सुरक्षित मोडमध्ये बंद केले आहे."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"सर्व साफ करा"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"स्प्लिट स्क्रीन वापर करण्यासाठी येथे ड्रॅग करा"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"आडवे स्प्लिट करा"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"उभे स्प्लिट करा"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"कस्टम स्प्लिट करा"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"स्क्रीन वर स्प्लिट करा"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"स्क्रीन डावीकडे स्प्लिट करा"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"स्क्रीन उजवीकडे स्प्लिट करा"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ms/strings.xml b/packages/SystemUI/legacy/recents/res/values-ms/strings.xml
new file mode 100644
index 0000000..ae4461d
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ms/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Ikhtisar."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ketepikan <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> diketepikan."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Semua aplikasi terbaharu diketepikan."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Buka maklumat aplikasi <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Memulakan <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Tiada item terbaharu"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Anda telah mengetepikan semua item"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Maklumat Aplikasi"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"penyematan skrin"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"cari"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Tidak dapat memulakan <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> dilumpuhkan dalam mod selamat."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Kosongkan semua"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Seret ke sini untuk menggunakan skrin pisah"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Pisah Mendatar"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Pisah Menegak"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Pisah Tersuai"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Pisahkan skrin ke atas"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Pisahkan skrin ke kiri"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Pisahkan skrin ke kanan"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-my/strings.xml b/packages/SystemUI/legacy/recents/res/values-my/strings.xml
new file mode 100644
index 0000000..94fc662
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-my/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"အနှစ်ချုပ်။"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> ကို ပယ်မည်။"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ကို ဖယ်ထုတ်ထားသည်။"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"လတ်တလော အပလီကေးရှင်းအားလုံး ဖယ်ထုတ်ထားသည်။"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> အပလီကေးရှင်း အချက်အလက်ကို ဖွင့်မည်။"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ကို စတင်နေသည်။"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"လတ်တလော ဖွင့်ထားသည်များ မရှိပါ"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"အားလုံးကို ဖယ်ရှားပြီးပါပြီ"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"အပလီကေးရှင်း အချက်အလက်"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"မျက်နှာပြင် ပင်ထိုးမှု"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"ရှာရန်"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ကို စတင်၍ မရပါ။"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"အန္တရာယ်ကင်းမှု စနစ်တွင် <xliff:g id="APP">%s</xliff:g> ကို ပိတ်ထားပါသည်။"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"အားလုံး ဖယ်ရှားရန်"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"မျက်နှာပြင် ခွဲ၍ပြသခြင်းကို အသုံးပြုရန် ဤနေရာသို့ ဖိဆွဲပါ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"အလျားလိုက် ခွဲရန်"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ထောင်လိုက် ခွဲရန်"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"စိတ်ကြိုက် ခွဲရန်"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"မျက်နှာပြင်ကို အပေါ်သို့ ခွဲရန်"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"မျက်နှာပြင်ကို ဘယ်ဘက်သို့ ခွဲရန်"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"မျက်နှာပြင်ကို ညာဘက်သို့ ခွဲရန်"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-nb/strings.xml b/packages/SystemUI/legacy/recents/res/values-nb/strings.xml
new file mode 100644
index 0000000..176986a
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-nb/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Oversikt."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Avvis <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> er avvist."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alle nylig brukte apper er avvist."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Åpne appinformasjonen for <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starter <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Ingen nylige elementer"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Du har fjernet alt"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Appinformasjon"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"én-appsmodus"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"søk"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Kunne ikke starte <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> er slått av i sikker modus."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Fjern alt"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Dra hit for å bruke delt skjerm"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Del horisontalt"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Del vertikalt"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Del tilpasset"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Delt skjerm øverst"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Delt skjerm til venstre"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Delt skjerm til høyre"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-nl/strings.xml b/packages/SystemUI/legacy/recents/res/values-nl/strings.xml
new file mode 100644
index 0000000..9714022
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-nl/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overzicht."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> sluiten."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> verwijderd."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alle recente apps gesloten."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"App-gegevens voor <xliff:g id="APP">%s</xliff:g> openen."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> starten."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Geen recente items"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Je hebt alles gewist"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"App-informatie"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"scherm vastzetten"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"zoeken"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Kan <xliff:g id="APP">%s</xliff:g> niet starten."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is uitgeschakeld in de veilige modus"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Alles wissen"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Sleep hier naartoe om het scherm te splitsen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horizontaal splitsen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Verticaal splitsen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Aangepast splitsen"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Scherm bovenaan gesplitst"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Scherm links gesplitst"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Scherm rechts gesplitst"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-pa/strings.xml b/packages/SystemUI/legacy/recents/res/values-pa/strings.xml
new file mode 100644
index 0000000..4608561
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-pa/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ਰੂਪ-ਰੇਖਾ।"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਖਾਰਜ ਕਰੋ।"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ਖਾਰਜ ਕੀਤੀ ਗਈ।"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ਸਾਰੀਆਂ ਹਾਲੀਆ ਐਪਲੀਕੇਸ਼ਨਾਂ ਖਾਰਜ ਕੀਤੀਆਂ ਗਈਆਂ।"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ਐਪਲੀਕੇਸ਼ਨਾਂ ਜਾਣਕਾਰੀ ਖੋਲ੍ਹੋ।"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ਚਾਲੂ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ।"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"ਕੋਈ ਹਾਲੀਆ ਆਈਟਮਾਂ ਨਹੀਂ"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ਤੁਸੀਂ ਸਭ ਕੁਝ ਸਾਫ਼ ਕਰ ਦਿੱਤਾ ਹੈ"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"ਐਪਲੀਕੇਸ਼ਨ ਜਾਣਕਾਰੀ"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ਸਕ੍ਰੀਨ ਪਿਨਿੰਗ"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"ਖੋਜ"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਚਾਲੂ ਨਹੀਂ ਕਰ ਸਕੇ।"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਸੁਰੱਖਿਅਤ-ਮੋਡ ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ।"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ਸਭ ਕਲੀਅਰ ਕਰੋ"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਇੱਥੇ ਘਸੀਟੋ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"ਲੇਟਵੀਂ ਵੰਡ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ਖੜ੍ਹਵੀਂ ਵੰਡ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"ਵਿਉਂਤੀ ਵੰਡ"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ਸਕ੍ਰੀਨ ਨੂੰ ਉੱਪਰ ਵੱਲ ਵੰਡੋ"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ਸਕ੍ਰੀਨ ਨੂੰ ਖੱਬੇ ਪਾਸੇ ਵੰਡੋ"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ਸਕ੍ਰੀਨ ਨੂੰ ਸੱਜੇ ਪਾਸੇ ਵੰਡੋ"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-pl/strings.xml b/packages/SystemUI/legacy/recents/res/values-pl/strings.xml
new file mode 100644
index 0000000..50b4ad0
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-pl/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Przegląd."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Zamknij aplikację <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikacja <xliff:g id="APP">%s</xliff:g> została zamknięta."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Wszystkie ostatnie aplikacje zostały zamknięte."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otwórz informacje o aplikacji <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Uruchamiam aplikację <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Brak ostatnich elementów"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Wszystko zostało wyczyszczone"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informacje o aplikacji"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"przypinanie ekranu"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"szukaj"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Nie udało się uruchomić aplikacji <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikacja <xliff:g id="APP">%s</xliff:g> została wyłączona w trybie bezpiecznym."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Wyczyść wszystko"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Przeciągnij tutaj, by podzielić ekran"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Podziel poziomo"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Podziel pionowo"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Podziel niestandardowo"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Podziel ekran u góry"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Podziel ekran z lewej"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Podziel ekran z prawej"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-pt-rBR/strings.xml b/packages/SystemUI/legacy/recents/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..589b831
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-pt-rBR/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Visão geral."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dispensar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dispensado."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Todos os aplicativos recentes foram dispensados."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Abre informações do aplicativo <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nenhum item recente"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Você limpou tudo"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informações do aplicativo"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fixação de tela"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"pesquisar"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Não foi possível iniciar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"O app <xliff:g id="APP">%s</xliff:g> fica desativado no modo de segurança."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Limpar tudo"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Arraste aqui para usar a tela dividida"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Divisão horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Divisão vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Divisão personalizada"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dividir a tela para a parte superior"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dividir a tela para a esquerda"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dividir a tela para a direita"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-pt-rPT/strings.xml b/packages/SystemUI/legacy/recents/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..e62e1c6
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-pt-rPT/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Vista geral."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ignorar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplicação <xliff:g id="APP">%s</xliff:g> ignorada."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Todas as aplicações recentes foram ignoradas."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Abrir as informações da aplicação <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"A iniciar a aplicação <xliff:g id="APP">%s</xliff:g>…"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nenhum item recente"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Limpou tudo"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informações da aplicação"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"afixação no ecrã"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"pesquisar"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Não foi possível iniciar a aplicação <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"A aplicação <xliff:g id="APP">%s</xliff:g> está desativada no modo de segurança."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Limpar tudo"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Arraste aqui para utilizar o ecrã dividido"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Divisão horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Divisão vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Divisão personalizada"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Ecrã dividido na parte superior"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Ecrã dividido à esquerda"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Ecrã dividido à direita"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-pt/strings.xml b/packages/SystemUI/legacy/recents/res/values-pt/strings.xml
new file mode 100644
index 0000000..589b831
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-pt/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Visão geral."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dispensar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dispensado."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Todos os aplicativos recentes foram dispensados."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Abre informações do aplicativo <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nenhum item recente"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Você limpou tudo"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informações do aplicativo"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fixação de tela"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"pesquisar"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Não foi possível iniciar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"O app <xliff:g id="APP">%s</xliff:g> fica desativado no modo de segurança."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Limpar tudo"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Arraste aqui para usar a tela dividida"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Divisão horizontal"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Divisão vertical"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Divisão personalizada"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dividir a tela para a parte superior"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dividir a tela para a esquerda"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dividir a tela para a direita"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ro/strings.xml b/packages/SystemUI/legacy/recents/res/values-ro/strings.xml
new file mode 100644
index 0000000..7f8f018
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ro/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Recente."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Închideți <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> a fost închisă."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Toate aplicațiile recente au fost închise."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Deschideți informațiile despre aplicația <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Se inițiază <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Niciun element recent"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Ați șters tot"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informații despre aplicație"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fixare pe ecran"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"căutați"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> nu a putut porni."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplicația <xliff:g id="APP">%s</xliff:g> este dezactivată în modul sigur."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ștergeți tot"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Trageți aici pentru a folosi ecranul împărțit"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Împărțiți pe orizontală"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Împărțiți pe verticală"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Împărțiți personalizat"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Împărțiți ecranul în partea de sus"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Împărțiți ecranul la stânga"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Împărțiți ecranul la dreapta"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ru/strings.xml b/packages/SystemUI/legacy/recents/res/values-ru/strings.xml
new file mode 100644
index 0000000..1e988bb
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ru/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Обзор."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Удалить приложение <xliff:g id="APP">%s</xliff:g> из списка."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Приложение <xliff:g id="APP">%s</xliff:g> удалено из списка."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Все недавние приложения удалены из списка."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Открыть информацию о приложении <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Запуск приложения <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Здесь пока ничего нет."</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Список пуст."</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Сведения о приложении"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"блокировка в приложении"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"поиск"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Не удалось запустить приложение \"<xliff:g id="APP">%s</xliff:g>\"."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" отключено в безопасном режиме."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Удалить все"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Перетащите сюда, чтобы разделить экран"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Разделить по горизонтали"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Разделить по вертикали"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Разделить по-другому"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Разделить экран по верхнему краю"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Разделить экран по левому краю"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Разделить экран по правому краю"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sk/strings.xml b/packages/SystemUI/legacy/recents/res/values-sk/strings.xml
new file mode 100644
index 0000000..cbffcaf
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-sk/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Prehľad"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Zrušiť aplikáciu <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikácia <xliff:g id="APP">%s</xliff:g> bola zrušená."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Všetky nedávne aplikácie boli zrušené."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otvoriť informácie o aplikácii <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Spúšťa sa aplikácia <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Žiadne nedávne položky"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Vymazali ste všetko"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informácie o aplikácii"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"pripnutie obrazovky"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"hľadať"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Aplikáciu <xliff:g id="APP">%s</xliff:g> sa nepodarilo spustiť."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikácia <xliff:g id="APP">%s</xliff:g> je v núdzovom režime zakázaná."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Vymazať všetko"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Presuňte okno sem a použite tak rozdelenú obrazovku"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Rozdeliť vodorovné"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Rozdeliť zvislé"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Rozdeliť vlastné"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Rozdelená obrazovka hore"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Rozdelená obrazovka naľavo"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Rozdelená obrazovka napravo"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sl/strings.xml b/packages/SystemUI/legacy/recents/res/values-sl/strings.xml
new file mode 100644
index 0000000..56b2ddb
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-sl/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Pregled."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Opustitev aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikacija <xliff:g id="APP">%s</xliff:g> je bila odstranjena."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Vse nedavne aplikacije so bile opuščene."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Odpiranje podatkov o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Zaganjanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Ni nedavnih elementov"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Vse ste počistili"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Podatki o aplikaciji"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"pripenjanje zaslona"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"išči"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Aplikacije <xliff:g id="APP">%s</xliff:g> ni bilo mogoče zagnati."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikacija <xliff:g id="APP">%s</xliff:g> je v varnem načinu onemogočena."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Počisti vse"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Povlecite sem za razdeljeni zaslon"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Razdeli vodoravno"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Razdeli navpično"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Razdeli po meri"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Razdeljen zaslon na vrhu"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Razdeljen zaslon na levi"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Razdeljen zaslon na desni"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sq/strings.xml b/packages/SystemUI/legacy/recents/res/values-sq/strings.xml
new file mode 100644
index 0000000..48aab37
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-sq/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Përmbledhja."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Largo <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> është hequr."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Të gjitha aplikacionet e fundit u larguan."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Hap informacionin e aplikacionit <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Po nis <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Nuk ka asnjë artikull të fundit"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"I ke pastruar të gjitha"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informacioni i aplikacionit"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"kyçja e ekranit"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"kërko"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> nuk mund të nisej."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> është i çaktivizuar në modalitetin e sigurt."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Pastroji të gjitha"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Zvarrit këtu për të përdorur ekranin e ndarë"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horizontal i ndarë"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikal i ndarë"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"I personalizuar i ndarë"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Ndaje ekranin lart"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Ndaje ekranin në të majtë"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Ndaje ekranin në të djathtë"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sr/strings.xml b/packages/SystemUI/legacy/recents/res/values-sr/strings.xml
new file mode 100644
index 0000000..9d5f126
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-sr/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Преглед."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Одбаците апликацију <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Апликација <xliff:g id="APP">%s</xliff:g> је одбачена."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Све недавно коришћене апликације су одбачене."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Отворите информације о апликацији <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Покреће се <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Нема недавних ставки"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Обрисали сте све"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Информације о апликацији"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"качење екрана"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"претражи"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Покретање апликације <xliff:g id="APP">%s</xliff:g> није успело."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Апликација <xliff:g id="APP">%s</xliff:g> је онемогућена у безбедном режиму."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Обриши све"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Превуците овде да бисте користили раздељени екран"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Подели хоризонтално"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Подели вертикално"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Подели прилагођено"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Подели екран нагоре"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Подели екран налево"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Подели екран надесно"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sv/strings.xml b/packages/SystemUI/legacy/recents/res/values-sv/strings.xml
new file mode 100644
index 0000000..b2ee34f
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-sv/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Översikt."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ta bort <xliff:g id="APP">%s</xliff:g> från listan."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> togs bort från listan."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alla appar har tagits bort från listan Senaste."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Öppna appinformation för <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Startar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Listan är tom"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Du har tömt listan"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Appinformation"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fästa skärmen"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"sök"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Det gick inte att starta appen <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> är inaktiverad i säkert läge."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Rensa alla"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Dra hit för att dela upp skärmen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Dela vågrätt"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Dela lodrätt"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Dela anpassat"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Delad skärm till överkanten"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Delad skärm åt vänster"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Delad skärm åt höger"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sw/strings.xml b/packages/SystemUI/legacy/recents/res/values-sw/strings.xml
new file mode 100644
index 0000000..49e7fb8
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-sw/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Muhtasari."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ondoa <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> imeondolewa."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Programu za hivi majuzi zimeondolewa."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Fungua maelezo kuhusu programu ya <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Inaanzisha <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Hakuna vipengee vya hivi majuzi"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Umeondoa vipengee vyote"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Maelezo ya Programu"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"kubandika kwenye skirini"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"tafuta"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Imeshindwa kuanzisha <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> imezimwa katika hali salama."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ondoa zote"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Buruta hapa ili utumie skrini iliyogawanywa"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Gawanya Mlalo"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Gawanya Wima"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Maalum Iliyogawanywa"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Gawa skrini kuelekea juu"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Gawa skrini upande wa kushoto"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Gawa skrini upande wa kulia"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-th/strings.xml b/packages/SystemUI/legacy/recents/res/values-th/strings.xml
new file mode 100644
index 0000000..b88d05e
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-th/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ภาพรวม"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"ยกเลิก <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ถูกนำออกไปแล้ว"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ปิดแอปพลิเคชันล่าสุดทั้งหมดแล้ว"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"เปิดข้อมูลแอปพลิเคชัน <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"กำลังเริ่มต้น <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"ไม่มีรายการล่าสุด"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"คุณได้ล้างทุกอย่างแล้ว"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"ข้อมูลแอปพลิเคชัน"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"การตรึงหน้าจอ"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"ค้นหา"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"เริ่มใช้ <xliff:g id="APP">%s</xliff:g> ไม่ได้"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ปิดใช้ในโหมดปลอดภัย"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ล้างทั้งหมด"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"ลากมาที่นี่เพื่อใช้การแยกหน้าจอ"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"แยกในแนวนอน"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"แยกในแนวตั้ง"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"แยกแบบกำหนดเอง"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"แยกหน้าจอไปด้านบน"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"แยกหน้าจอไปทางซ้าย"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"แยกหน้าจอไปทางขวา"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-tl/strings.xml b/packages/SystemUI/legacy/recents/res/values-tl/strings.xml
new file mode 100644
index 0000000..d940d4e
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-tl/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"I-dismiss ang <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Na-dismiss ang <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Na-dismiss ang lahat ng kamakailang application."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Buksan ang impormasyon ng <xliff:g id="APP">%s</xliff:g> application."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Sinisimulan ang <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Walang kamakailang item"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Na-clear mo ang lahat"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Impormasyon ng Application"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"pag-pin sa screen"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"hanapin"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Hindi masimulan ang <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Naka-disable ang <xliff:g id="APP">%s</xliff:g> sa safe-mode."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"I-clear lahat"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"I-drag dito para magamit ang split screen"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"I-split Pahalang"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"I-split Patayo"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"I-split ang screen pataas"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"I-split ang screen pakaliwa"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"I-split ang screen pakanan"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-tr/strings.xml b/packages/SystemUI/legacy/recents/res/values-tr/strings.xml
new file mode 100644
index 0000000..982c57e
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-tr/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Genel Bakış."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> uygulamasını kapatır."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> kaldırıldı."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Tüm son uygulamalar kapatıldı."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> uygulama bilgilerini açar."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> başlatılıyor."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Yeni öğe yok"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Her şeyi sildiniz"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Uygulama Bilgileri"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ekran sabitleme"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"ara"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> başlatılamadı."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>, güvenli modda devre dışıdır."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Tümünü temizle"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Ekranı bölünmüş olarak kullanmak için buraya sürükleyin"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Yatay Ayırma"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Dikey Ayırma"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Özel Ayırma"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Ekranı yukarıya doğru böl"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Ekranı sola doğru böl"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Ekranı sağa doğru böl"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-uk/strings.xml b/packages/SystemUI/legacy/recents/res/values-uk/strings.xml
new file mode 100644
index 0000000..0c0b709
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-uk/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Огляд."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Закрити додаток <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Додаток <xliff:g id="APP">%s</xliff:g> закрито."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Усі останні додатки закрито."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Відкрити інформацію про додаток <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Запуск додатка <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Немає останніх елементів"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Ви очистили все"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Інформація про додаток"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"закріпити екран"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"пошук"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Не вдалося запустити додаток <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Додаток <xliff:g id="APP">%s</xliff:g> вимкнено в безпечному режимі."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Очистити все"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Перетягніть сюди, щоб розділити екран"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Розділити горизонтально"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Розділити вертикально"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Розділити (власний варіант)"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Розділити екран угору"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Розділити екран уліво"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Розділити екран управо"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ur/strings.xml b/packages/SystemUI/legacy/recents/res/values-ur/strings.xml
new file mode 100644
index 0000000..32aae85
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ur/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"مجموعی جائزہ۔"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> کو مسترد کریں۔"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> کو مسترد کر دیا گیا۔"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"سبھی حالیہ ایپلیکیشنز کو مسترد کر دیا گیا۔"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ایپلیکیشن کی معلومات کھولیں۔"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> شروع ہو رہی ہے۔"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"کوئی حالیہ آئٹم نہیں"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"آپ نے سب کچھ صاف کر دیا ہے"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"ایپلیکیشن کی معلومات"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"اسکرین کو پن کرنا"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"تلاش کریں"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> کو شروع نہیں کیا جا سکا۔"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"محفوظ موڈ میں <xliff:g id="APP">%s</xliff:g> غیر فعال ہے۔"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"سبھی کو ہٹائیں"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"اسپلٹ اسکرین استعمال کرنے کے لیے یہاں گھسیٹیں"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"بلحاظ افقی تقسیم کریں"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"بلحاظ عمودی تقسیم کریں"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"بلحاظ حسب ضرورت تقسیم کریں"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"اسکرین کو اوپر کی جانب تقسیم کریں"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"اسکرین کو بائیں جانب تقسیم کریں"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"اسکرین کو دائیں جانب تقسیم کریں"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-uz/strings.xml b/packages/SystemUI/legacy/recents/res/values-uz/strings.xml
new file mode 100644
index 0000000..6f8b153
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-uz/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Umumiy nazar."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Olib tashlash: <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> olib tashlangan."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Yaqinda ishlatilgan barcha ilovalar olib tashlandi."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ilovasi haqidagi axborotlarni ochadi."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ishga tushirilmoqda."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Yaqinda ishlatilgan ilovalar yoʻq"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Hammasi tozalandi"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Ilova haqida axborot"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ekranni mahkamlash"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"qidiruv"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ilovasi ishga tushmadi."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"Xavfsiz rejimda <xliff:g id="APP">%s</xliff:g> ilovasi yopildi."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ha"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Ekranni boʻlish xususiyatidan foydalanish uchun bu yerga torting"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Gorizontal yoʻnalishda boʻlish"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikal yoʻnalishda boʻlish"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Boshqa usulda boʻlish"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Ekranni tepaga qadash"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Ekranni chap tomonga qadash"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Ekranni oʻng tomonga qadash"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-vi/strings.xml b/packages/SystemUI/legacy/recents/res/values-vi/strings.xml
new file mode 100644
index 0000000..f672a3d
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-vi/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Tổng quan."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Loại bỏ <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Đã loại bỏ <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Đã loại bỏ tất cả các ứng dụng gần đây."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Mở thông tin ứng dụng <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Khởi động <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Không có mục gần đây nào"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Bạn đã xóa mọi nội dung"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Thông tin ứng dụng"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"khóa màn hình"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"tìm kiếm"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Không thể khởi động <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> bị tắt ở chế độ an toàn."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Xóa tất cả"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Kéo vào đây để sử dụng chế độ chia đôi màn hình"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Phân tách ngang"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Phân tách dọc"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Tùy chỉnh phân tách"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Chia đôi màn hình lên trên"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Chia đôi màn hình sang trái"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Chia đôi màn hình sang phải"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-zh-rCN/strings.xml b/packages/SystemUI/legacy/recents/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..993bfae
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-zh-rCN/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"概览。"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"移除<xliff:g id="APP">%s</xliff:g>。"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"已移除<xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"已关闭所有最近用过的应用。"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"打开<xliff:g id="APP">%s</xliff:g>应用信息。"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"正在启动<xliff:g id="APP">%s</xliff:g>。"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"近期没有任何内容"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"您已清除所有内容"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"应用信息"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"固定屏幕"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"搜索"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"无法启动<xliff:g id="APP">%s</xliff:g>。"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>已在安全模式下停用。"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"全部清除"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"拖动到此处即可使用分屏功能"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"水平分割"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"垂直分割"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"自定义分割"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"将屏幕分隔线移到上方"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"将屏幕分隔线移到左侧"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"将屏幕分隔线移到右侧"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-zh-rHK/strings.xml b/packages/SystemUI/legacy/recents/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..b93d246
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-zh-rHK/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"概覽。"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"關閉「<xliff:g id="APP">%s</xliff:g>」。"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"所有最近使用的應用程式均已關閉。"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"開啟「<xliff:g id="APP">%s</xliff:g>」應用程式的資料。"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"正在啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"最近沒有任何項目"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"您已清除所有工作"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"應用程式資料"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"螢幕固定"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"搜尋"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"「<xliff:g id="APP">%s</xliff:g>」在安全模式下為停用狀態。"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"全部清除"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"拖曳這裡即可分割螢幕"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"水平分割"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"垂直分割"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"自訂分割"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"將分割畫面顯示喺頂部"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"將分割畫面顯示喺左邊"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"將分割畫面顯示喺右邊"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-zh-rTW/strings.xml b/packages/SystemUI/legacy/recents/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..54d656d
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-zh-rTW/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"總覽。"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"關閉「<xliff:g id="APP">%s</xliff:g>」。"</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"最近使用的應用程式已全部關閉。"</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"開啟「<xliff:g id="APP">%s</xliff:g>」應用程式資訊。"</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"正在啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"最近沒有任何項目"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"你已清除所有工作"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"應用程式資訊"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"螢幕固定"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"搜尋"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"「<xliff:g id="APP">%s</xliff:g>」在安全模式中為停用狀態。"</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"全部清除"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"拖曳到這裡即可使用分割畫面"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"水平分割"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"垂直分割"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"自訂分割"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"將分割畫面顯示在頂端"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"將分割畫面顯示在左邊"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"將分割畫面顯示在右邊"</string>
+</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-zu/strings.xml b/packages/SystemUI/legacy/recents/res/values-zu/strings.xml
new file mode 100644
index 0000000..9cbc439
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-zu/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Buka konke."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Cashisa i-<xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"I-<xliff:g id="APP">%s</xliff:g> icashisiwe."</string>
+ <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Zonke izinhlelo zokusebenza zakamuva zicashisiwe."</string>
+ <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Vula ulwazi lohlelo lokusebenza le-<xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iqala i-<xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_empty_message" msgid="7967713254531861311">"Azikho izinto zakamuva"</string>
+ <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Usule yonke into"</string>
+ <string name="recents_app_info_button_label" msgid="8732926607391786762">"Ulwazi lohlelo lokusebenza"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ukuphina isikrini"</string>
+ <string name="recents_search_bar_label" msgid="638132045925945941">"sesha"</string>
+ <string name="recents_launch_error_message" msgid="9107963563503438012">"Ayikwazanga ukuqalisa i-<xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="recents_launch_disabled_message" msgid="826461671965217243">"I-<xliff:g id="APP">%s</xliff:g> ikhutshaziwe kumodi yokuphepha."</string>
+ <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Sula konke"</string>
+ <string name="recents_drag_hint_message" msgid="610417221848280136">"Hudulela lapha ukuze usebenzise ukuhlukanisa kwesikrini"</string>
+ <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Hlukanisa ngokuvundlile"</string>
+ <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Hlukanisa ngokumile"</string>
+ <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Hlukanisa ngokwezifiso"</string>
+ <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Hlukanisela isikrini phezulu"</string>
+ <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Hlukanisela isikrini ngakwesokunxele"</string>
+ <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Hlukanisela isikrini ngakwesokudla"</string>
+</resources>
diff --git a/packages/SystemUI/plugin/update_plugin_lib.sh b/packages/SystemUI/plugin/update_plugin_lib.sh
index a105b45..34f4895 100755
--- a/packages/SystemUI/plugin/update_plugin_lib.sh
+++ b/packages/SystemUI/plugin/update_plugin_lib.sh
@@ -5,7 +5,7 @@
mkdir /tmp/plugin_classes
# Compile the jar
-javac -cp $ANDROID_BUILD_TOP/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar:$ANDROID_BUILD_TOP/out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/classes.jar `find src -name *.java` -d /tmp/plugin_classes/
+javac -cp $ANDROID_BUILD_TOP/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar:$ANDROID_BUILD_TOP/out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/classes.jar `find ../plugin*/src -name *.java` -d /tmp/plugin_classes/
echo "" >> /tmp/plugin_classes/manifest.txt
jar cvfm SystemUIPluginLib.jar /tmp/plugin_classes/manifest.txt -C /tmp/plugin_classes .
diff --git a/packages/SystemUI/res/drawable/privacy_chip_bg.xml b/packages/SystemUI/res/drawable/privacy_chip_bg.xml
new file mode 100644
index 0000000..8247c27
--- /dev/null
+++ b/packages/SystemUI/res/drawable/privacy_chip_bg.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="#bbbbbb" />
+ <padding android:padding="@dimen/ongoing_appops_chip_bg_padding" />
+ <corners android:radius="@dimen/ongoing_appops_chip_bg_corner_radius" />
+</shape>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/ongoing_privacy_chip.xml b/packages/SystemUI/res/layout/ongoing_privacy_chip.xml
new file mode 100644
index 0000000..5e952e3
--- /dev/null
+++ b/packages/SystemUI/res/layout/ongoing_privacy_chip.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<com.android.systemui.privacy.OngoingPrivacyChip
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/privacy_chip"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_margin="@dimen/ongoing_appops_chip_margin"
+ android:gravity="center_vertical|end"
+ android:orientation="horizontal"
+ android:paddingStart="@dimen/ongoing_appops_chip_side_padding"
+ android:paddingEnd="@dimen/ongoing_appops_chip_side_padding"
+ android:background="@drawable/privacy_chip_bg"
+ android:focusable="true">
+
+ <LinearLayout
+ android:id="@+id/icons_container"
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:gravity="center_vertical|start"
+ />
+
+ <TextView
+ android:id="@+id/app_name"
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:gravity="center_vertical|end"
+ />
+</com.android.systemui.privacy.OngoingPrivacyChip>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/ongoing_privacy_dialog_content.xml b/packages/SystemUI/res/layout/ongoing_privacy_dialog_content.xml
new file mode 100644
index 0000000..b5e24a0
--- /dev/null
+++ b/packages/SystemUI/res/layout/ongoing_privacy_dialog_content.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fillViewport ="true"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:id="@+id/dialog_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:padding="@dimen/ongoing_appops_dialog_content_padding">
+
+ <LinearLayout
+ android:id="@+id/icons_container"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/ongoing_appops_dialog_icon_height"
+ android:orientation="horizontal"
+ android:gravity="center"
+ android:importantForAccessibility="no"
+ />
+
+ <LinearLayout
+ android:id="@+id/text_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="start"
+ />
+ </LinearLayout>
+
+</ScrollView>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/ongoing_privacy_text_item.xml b/packages/SystemUI/res/layout/ongoing_privacy_text_item.xml
new file mode 100644
index 0000000..5595b13
--- /dev/null
+++ b/packages/SystemUI/res/layout/ongoing_privacy_text_item.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textDirection="locale"
+ android:textAppearance="@style/TextAppearance.QS.DetailItemPrimary"
+/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml b/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml
index 680112c..007070e 100644
--- a/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml
+++ b/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml
@@ -46,6 +46,8 @@
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal" />
+ <include layout="@layout/ongoing_privacy_chip" />
+
<com.android.systemui.BatteryMeterView
android:id="@+id/battery"
android:layout_height="match_parent"
diff --git a/packages/SystemUI/res/layout/screen_record_dialog.xml b/packages/SystemUI/res/layout/screen_record_dialog.xml
new file mode 100644
index 0000000..6c5c7fa
--- /dev/null
+++ b/packages/SystemUI/res/layout/screen_record_dialog.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:gravity="top"
+ android:orientation="vertical">
+
+ <Space
+ android:layout_width="match_parent"
+ android:layout_height="10dp"/>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@android:color/white">
+ <CheckBox
+ android:id="@+id/checkbox_mic"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/screenrecord_mic_label"/>
+ <CheckBox
+ android:id="@+id/checkbox_taps"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/screenrecord_taps_label"/>
+ <Button
+ android:id="@+id/record_button"
+ android:layout_width="match_parent"
+ android:layout_height="50dp"
+ android:text="@string/screenrecord_start_label"
+ />
+ </LinearLayout>
+
+ <Space
+ android:layout_width="match_parent"
+ android:layout_height="10dp"/>
+
+</LinearLayout>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 395de19..1835a56 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Stelsel-UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Maak skoon"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Verwyder uit lys"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Program Info"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Jou onlangse skerms verskyn hier"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Maak onlangse programme toe"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d skerms in Oorsig</item>
- <item quantity="one">1 skerm in Oorsig</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Geen kennisgewings"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Voortdurend"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Kennisgewings"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"maak foon oop"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"maak stembystand oop"</string>
<string name="camera_label" msgid="7261107956054836961">"maak kamera oop"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Kies nuwe taakuitleg"</string>
<string name="cancel" msgid="6442560571259935130">"Kanselleer"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Hulpboodskapgebied"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Bevestig"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Maak <xliff:g id="APP">%s</xliff:g> toe."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> verwerp."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle onlangse programme is toegemaak."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Maak <xliff:g id="APP">%s</xliff:g>-programinligting oop."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Begin tans <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Kennisgewing is toegemaak."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Kennisgewingskerm."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Vinnige instellings."</string>
@@ -319,8 +305,7 @@
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Onbenoemde toestel"</string>
<string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Gereed om uit te saai"</string>
<string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"Geen toestelle beskikbaar nie"</string>
- <!-- no translation found for quick_settings_cast_no_wifi (2696477881905521882) -->
- <skip />
+ <string name="quick_settings_cast_no_wifi" msgid="2696477881905521882">"Wi-Fi is nie gekoppel nie"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Helderheid"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Keer kleure om"</string>
@@ -356,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC is gedeaktiveer"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC is geaktiveer"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Geen onlangse items nie"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Jy het alles toegemaak"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Programinligting"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"skermvaspen"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"soek"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Kon nie <xliff:g id="APP">%s</xliff:g> begin nie."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> is in veiligmodus gedeaktiveer."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Vee alles uit"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Trek hier om verdeelde skerm te gebruik"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Swiep op om programme te wissel"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Sleep regs om programme vinnig te wissel"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Verdeel horisontaal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Verdeel vertikaal"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Verdeel gepasmaak"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Verdeel skerm na bo"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Verdeel skerm na links"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Verdeel skerm na regs"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Wissel oorsig"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Gelaai"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Laai tans"</string>
@@ -619,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimeer"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Hou aan om kennisgewings van hierdie program af te wys?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Hierdie kennisgewings kan nie afgeskakel word nie"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Hierdie program gebruik tans die kamera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Hierdie program gebruik tans die mikrofoon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Hierdie program wys tans bo-oor ander programme op jou skerm."</string>
@@ -753,6 +725,8 @@
<item msgid="2139628951880142927">"Wys persentasie wanneer gelaai word (verstek)"</item>
<item msgid="3327323682209964956">"Moenie hierdie ikoon wys nie"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Ander"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Skermverdeler"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Volskerm links"</string>
@@ -784,8 +758,7 @@
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Aangemeld as <xliff:g id="ID_1">%s</xliff:g>"</string>
<string name="data_connection_no_internet" msgid="4503302451650972989">"Geen internet nie"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Maak besonderhede oop."</string>
- <!-- no translation found for accessibility_quick_settings_not_available (4190068184294019846) -->
- <skip />
+ <string name="accessibility_quick_settings_not_available" msgid="4190068184294019846">"Onbeskikbaar weens <xliff:g id="REASON">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Maak <xliff:g id="ID_1">%s</xliff:g>-instellings oop."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Wysig volgorde van instellings."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Bladsy <xliff:g id="ID_1">%1$d</xliff:g> van <xliff:g id="ID_2">%2$d</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index fcad97b..dea4256 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"የስርዓት UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"አጽዳ"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ከዝርዝር አስወግድ"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"የትግበራ መረጃ"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"የቅርብ ጊዜ ማያ ገጾችዎ እዚህ ይታያሉ"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"የቅርብ ጊዜ መተግበሪያዎችን ሰርዝ"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d ማያ ገጾች በአጠቃላይ እይታ ውስጥ</item>
- <item quantity="other">%d ማያ ገጾች በአጠቃላይ እይታ ውስጥ</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ምንም ማሳወቂያዎች የሉም"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"በመካሄድ ላይ ያለ"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"ማሳወቂያዎች"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ስልክ ክፈት"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"የድምጽ ረዳትን ክፈት"</string>
<string name="camera_label" msgid="7261107956054836961">"ካሜራ ክፈት"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"የአዲስ ተግባር አቀማመጥን ይምረጡ"</string>
<string name="cancel" msgid="6442560571259935130">"ይቅር"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"የእገዛ መልዕክት አካባቢ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"አረጋግጥ"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> አስወግድ።"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ተሰናብቷል::"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ሁሉም የቅርብ ጊዜ ማመልከቻዎች ተሰናብተዋል።"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"የ<xliff:g id="APP">%s</xliff:g> መተግበሪያ መረጃውን ይክፈቱ።"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> በመጀመር ላይ።"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"ማሳወቂያ ተወግዷል።"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"የማሳወቂያ ጥላ።"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ፈጣን ቅንብሮች።"</string>
@@ -319,8 +305,7 @@
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ያልተሰየመ መሳሪያ"</string>
<string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ለመውሰድ ዝግጁ"</string>
<string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"ምንም መሣሪያዎች አይገኙም"</string>
- <!-- no translation found for quick_settings_cast_no_wifi (2696477881905521882) -->
- <skip />
+ <string name="quick_settings_cast_no_wifi" msgid="2696477881905521882">"Wi-Fi አልተገናኘም"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ብሩህነት"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ራስ-ሰር"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"ቀለማትን ግልብጥ"</string>
@@ -356,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"ኤንኤፍሲ"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"ኤንኤፍሲ ተሰናክሏል"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"ኤንኤፍሲ ነቅቷል"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"ምንም የቅርብ ጊዜ ንጥሎች የሉም"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ሁሉንም ነገር አጽድተዋል"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"የመተግበሪያ መረጃ"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ማያ ገጽ መሰካት"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"ፈልግ"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ን መጀመር አልተቻለም።"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> በጥንቃቄ ሁነታ ውስጥ ታግዷል።"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"ሁሉንም አጽዳ"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"የተከፈለ ማያ ገጽን ለመጠቀም እዚህ ላይ ይጎትቱ"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"መተግበሪያዎችን ለመቀየር ወደ ላይ ያንሸራትቱ"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"መተግበሪያዎችን በፍጥነት ለመቀየር ወደ ቀኝ ይጎትቱ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"አግድም ክፈል"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ቁልቁል ክፈል"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"በብጁ ክፈል"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ማያ ገጽ ወደ ላይ ክፈል"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ማያ ገጽ ወደ ግራ ክፈል"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ማያ ገጽ ወደ ቀኝ ክፈል"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"አጠቃላይ እይታን ቀያይር"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ባትሪ ሞልቷል"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"ኃይል በመሙላት ላይ"</string>
@@ -619,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"አሳንስ"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ከዚህ መተግበሪያ ማሳወቂያዎችን ማሳየት ይቀጥል?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"እነዚህ ማሳወቂያዎች ሊጠፉ አይችሉም"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"ይህ መተግበሪያ ካሜራውን እየተጠቀመ ነው።"</string>
<string name="appops_microphone" msgid="741508267659494555">"ይህ መተግበሪያ ማይክሮፎኑን እየተጠቀመ ነው።"</string>
<string name="appops_overlay" msgid="6165912637560323464">"ይህ መተግበሪያ በማያ ገጽዎ ላይ ባሉ ሌሎች መተግበሪያዎች ላይ እያሳየ ነው።"</string>
@@ -753,6 +725,8 @@
<item msgid="2139628951880142927">"የባትሪ ኃይል በሚሞላበት ጊዜ መቶኛ አሳይ (ነባሪ)"</item>
<item msgid="3327323682209964956">"ይህን አዶ አታሳይ"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"ሌላ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"የተከፈለ የማያ ገጽ ከፋይ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"የግራ ሙሉ ማያ ገጽ"</string>
@@ -784,8 +758,7 @@
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"እንደ <xliff:g id="ID_1">%s</xliff:g> ሆነው ገብተዋል"</string>
<string name="data_connection_no_internet" msgid="4503302451650972989">"ምንም በይነመረብ የለም"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"ዝርዝሮችን ክፈት።"</string>
- <!-- no translation found for accessibility_quick_settings_not_available (4190068184294019846) -->
- <skip />
+ <string name="accessibility_quick_settings_not_available" msgid="4190068184294019846">"በ<xliff:g id="REASON">%s</xliff:g> ምክንያት አይገኝም"</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"የ<xliff:g id="ID_1">%s</xliff:g> ቅንብሮችን ክፈት።"</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"የቅንብሮድ ቅደም-ተከተል አርትዕ።"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"ገጽ <xliff:g id="ID_1">%1$d</xliff:g> ከ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 1b55d39..b3ac2cd 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -21,18 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"واجهة مستخدم النظام"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"محو"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"إزالة من القائمة"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"معلومات التطبيق"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"تظهر شاشاتك المعروضة مؤخرًا هنا"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"إزالة التطبيقات الحديثة"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="zero"> لا توجد أي شاشات (%d) في النظرة العامة</item>
- <item quantity="two">شاشتان (%d) في النظرة العامة</item>
- <item quantity="few">%d شاشات في النظرة العامة</item>
- <item quantity="many">%d شاشة في النظرة العامة</item>
- <item quantity="other">%d من الشاشات في النظرة العامة</item>
- <item quantity="one">شاشة واحدة في النظرة العامة</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ليس هناك أي اشعارات"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"مستمر"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"الإشعارات"</string>
@@ -105,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"فتح الهاتف"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"فتح المساعد الصوتي"</string>
<string name="camera_label" msgid="7261107956054836961">"فتح الكاميرا"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"تحديد تنسيق جديد للمهمة"</string>
<string name="cancel" msgid="6442560571259935130">"إلغاء"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"منطقة رسالة المساعدة"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"تأكيد"</string>
@@ -192,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"إزالة <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"تمت إزالة <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"تم تجاهل كل التطبيقات المستخدمة مؤخرًا."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"فتح معلومات تطبيق <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"جارٍ بدء <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"تم تجاهل الإشعار."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"مركز الإشعارات."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"الإعدادات السريعة."</string>
@@ -367,23 +349,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"الاتصال القريب المدى (NFC)"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"تم إيقاف الاتصال القريب المدى"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"تم تفعيل الاتصال القريب المدى"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"ليست هناك عناصر تم استخدامها مؤخرًا"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"لقد محوتَ كل شيء"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"معلومات التطبيق"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"تثبيت الشاشة"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"بحث"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"تعذر بدء <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"تم إيقاف <xliff:g id="APP">%s</xliff:g> في الوضع الآمن."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"مسح الكل"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"اسحب هنا لاستخدام وضع تقسيم الشاشة"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"مرّر سريعًا لأعلى لتبديل التطبيقات"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"اسحب لليسار للتبديل السريع بين التطبيقات"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسيم أفقي"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"تقسيم رأسي"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"تقسيم مخصص"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"تقسيم الشاشة بمحاذاة الجزء العلوي"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"تقسيم الشاشة بمحاذاة اليسار"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"تقسيم الشاشة بمحاذاة اليمين"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"تبديل \"النظرة العامة\""</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"تم الشحن"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"جارٍ الشحن"</string>
@@ -634,6 +601,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"تصغير"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"هل تريد الاستمرار في تلقي إشعارات من هذا التطبيق؟"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"يتعذَّر إيقاف هذه الإشعارات."</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"يستخدم هذا التطبيق الكاميرا."</string>
<string name="appops_microphone" msgid="741508267659494555">"يستخدم هذا التطبيق الميكروفون."</string>
<string name="appops_overlay" msgid="6165912637560323464">"يتم عرض هذا التطبيق فوق التطبيقات الأخرى على شاشتك."</string>
@@ -776,6 +745,8 @@
<item msgid="2139628951880142927">"عرض النسبة المئوية عند الشحن (تلقائي)"</item>
<item msgid="3327323682209964956">"عدم عرض هذا الرمز"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"غير ذلك"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"أداة تقسيم الشاشة"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"عرض النافذة اليسرى بملء الشاشة"</string>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 65c5fb5..2574838 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"ছিষ্টেম ইউআই"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"মচক"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"সূচীৰ পৰা আঁতৰাওক"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"এপ্ সম্পৰ্কীয় তথ্য"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"আপোনাৰ শেহতীয়া স্ক্ৰীণ ইয়াত প্ৰকট হ\'ব"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"শেহতীয়া এপসমূহক আঁতৰাওক"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d খন স্ক্ৰীণ অৱলোকনত আছে</item>
- <item quantity="other">%d খন স্ক্ৰীণ অৱলোকনত আছে</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"কোনো জাননী নাই"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"চলিত"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"জাননীসমূহ"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ফ\'ন খোলক"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"কণ্ঠধ্বনিৰে সহায় খোলক"</string>
<string name="camera_label" msgid="7261107956054836961">"কেমেৰা খোলক"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"নতুন কাৰ্যৰ চানেকি বাছনি কৰক"</string>
<string name="cancel" msgid="6442560571259935130">"বাতিল কৰক"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"সহায় বাৰ্তাৰ ক্ষেত্ৰ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"নিশ্চিত কৰক"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>ক আঁতৰাব।"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> আঁতৰোৱা হৈছে৷"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"শেহতীয়া সকলো এপ্লিকেশ্বন অগ্ৰাহ্য কৰা হৈছে।"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> এপ্লিকেশ্বনৰ তথ্য় খোলক।"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> আৰম্ভ কৰা হৈছে।"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"জাননী অগ্ৰাহ্য কৰা হৈছে।"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"জাননী পেনেল।"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ক্ষিপ্ৰ ছেটিংসমূহ।"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC নিষ্ক্ৰিয় হৈ আছে"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC সক্ষম হৈ আছে"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"কোনো শেহতীয়া বস্তু নাই"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"আপুনি সকলোবোৰ খালী কৰিছে"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"এপ্লিকেশ্বনৰ তথ্য"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"স্ক্ৰীণ পিনিং"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"সন্ধান কৰক"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> আৰম্ভ কৰিব পৰা নগ\'ল৷"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g>টো সুৰক্ষিত ম\'ডত অক্ষম কৰা হ\'ল।"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"সকলো মচক"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"বিভাজিত স্ক্ৰীণ ব্য়ৱহাৰ কৰিবলৈ ইয়ালৈ টানি আনি এৰক"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"আনটো এপ্ ব্য়ৱহাৰ কৰিবলৈ ওপৰলৈ ছোৱাইপ কৰক"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"খৰতকীয়াকৈ আনটো এপ্ ব্য়ৱহাৰ কৰিবলৈ সোঁফালে টানক"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"আনুভূমিকভাৱে বিভাজিত কৰক"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"উলম্বভাৱে বিভাজিত কৰক"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"উপযোগিতা অনুসৰি বিভাজিত কৰক"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"স্ক্ৰীণখনক ওপৰফাললৈ ভাগ কৰক"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"স্ক্ৰীণখনক বাওঁফাললৈ ভাগ কৰক"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"স্ক্ৰীণখনক সোঁফাললৈ ভাগ কৰক"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"অৱলোকন ট’গল কৰক"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"চ্চার্জ হ\'ল"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"চ্চার্জ হৈ আছে"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"সৰু কৰক"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"এই এপটোৰ জাননী দেখুওৱাই থাকিব লাগিবনে?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"এই জাননীসমূহ বন্ধ কৰিব নোৱাৰি"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"এই এপে কেমেৰা ব্য়ৱহাৰ কৰি আছে।"</string>
<string name="appops_microphone" msgid="741508267659494555">"এই এপে মাইক্ৰ\'ফ\'ন ব্য়ৱহাৰ কৰি আছে।"</string>
<string name="appops_overlay" msgid="6165912637560323464">"এই এপটো আপোনাৰ স্ক্ৰীণত থকা অন্য় এপৰ ওপৰত প্ৰদৰ্শিত হৈ আছে।"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"চ্চাৰ্জ কৰি থকাৰ সময়ত শতাংশ দেখুৱাওক (ডিফ\'ল্ট)"</item>
<item msgid="3327323682209964956">"এই আইকনটো নেদেখুৱাব"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"অন্যান্য"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"স্প্লিট স্ক্ৰীণৰ বিভাজক"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"বাওঁফালৰ স্ক্ৰীণখন সম্পূৰ্ণ স্ক্ৰীণ কৰক"</string>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 07476aa..58947da 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Sistemin İstifadə İnterfeysi"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Təmizlə"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Siyahıdan sil"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Tətbiq infosu"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Son tətbiqləri kənarlaşdır"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other"> İcmalda %d ekran</item>
- <item quantity="one">İcmalda 1 ekran</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bildiriş yoxdu"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Davam edir"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Bildirişlər"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"telefonu açın"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"səs yardımçısını açın"</string>
<string name="camera_label" msgid="7261107956054836961">"kemaranı açın"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Yeni tapşırıq sxemi seçin"</string>
<string name="cancel" msgid="6442560571259935130">"Ləğv et"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Yardım mesajı bölməsi"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Təsdiq"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> kənarlaşdırın."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> çıxarıldı."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Bütün son tətbiqlər kənarlaşdırıldı."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> tətbiqi haqqında məlumatı açın."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> başlanır."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Bildiriş uzaqlaşdırıldı."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bildiriş kölgəsi."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Tez ayarlar."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC deaktiv edilib"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC aktiv edilib"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Son elementlər yoxdur"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Hərşeyi təmizlədiniz"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Tətbiq haqqında"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekran sancağı"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"axtarış"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> başlana bilmir."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> güvənli rejimdə deaktiv edildi."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Hamısını silin"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Ekranı bölmək üçün bura sürüşdürün"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Tətbiqi dəyişmək üçün yuxarı sürüşdürün"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Tətbiqləri cəld dəyişmək üçün sağa çəkin"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Üfüqi Böl"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Şaquli Böl"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Fərdi Böl"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Ekranı yuxarıdan ayırın"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Ekranı soldan ayırın"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Ekranı sağdan ayırın"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"İcmala Keçin"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Dolub"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Enerji doldurulur"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Kiçildin"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu tətbiqin bildirişləri göstərilməyə davam edilsin?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Bu bildirişlər deaktiv edilə bilməz"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> vasitəsilə"</string>
<string name="appops_camera" msgid="8100147441602585776">"Bu tətbiq kameradan istifadə edir."</string>
<string name="appops_microphone" msgid="741508267659494555">"Bu tətbiq mikrofondan istifadə edir."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Bu tətbiqdə ekranda digər tətbiqlərin üzərində göstərilir."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Enerji dolan zaman faizi göstərin (defolt)"</item>
<item msgid="3327323682209964956">"Bu piktoqramı göstərməyin"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Aşağı prioritet bildiriş işarələrini göstərin"</string>
<string name="other" msgid="4060683095962566764">"Digər"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Bölünmüş ekran ayırıcısı"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Sol tam ekran"</string>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index db3834b..b2bcda8 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -21,15 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI sistema"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Obriši"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Uklanjanje sa liste"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacije o aplikaciji"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Nedavni ekrani se pojavljuju ovde"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Odbaci nedavne aplikacije"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d ekran u Pregledu</item>
- <item quantity="few">%d ekrana u Pregledu</item>
- <item quantity="other">%d ekrana u Pregledu</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nema obaveštenja"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Tekuće"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obaveštenja"</string>
@@ -102,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"otvori telefon"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"otvori glasovnu pomoć"</string>
<string name="camera_label" msgid="7261107956054836961">"otvori kameru"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Izaberi novi raspored zadataka"</string>
<string name="cancel" msgid="6442560571259935130">"Otkaži"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Oblast poruke za pomoć"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Potvrdi"</string>
@@ -189,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Odbacite <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikacija <xliff:g id="APP">%s</xliff:g> je odbačena."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Sve nedavno korišćene aplikacije su odbačene."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Otvorite informacije o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Pokrećemo <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Obaveštenje je odbačeno."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Prozor sa obaveštenjima."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Brza podešavanja."</string>
@@ -358,23 +343,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC je onemogućen"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC je omogućen"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nema nedavnih stavki"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Obrisali ste sve"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"kačenje ekrana"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraži"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Pokretanje aplikacije <xliff:g id="APP">%s</xliff:g> nije uspelo."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplikacija <xliff:g id="APP">%s</xliff:g> je onemogućena u bezbednom režimu."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Obriši sve"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Prevucite ovde da biste koristili razdeljeni ekran"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Prevucite nagore da biste menjali aplikacije"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Prevucite udesno da biste brzo promenili aplikacije"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podeli horizontalno"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podeli vertikalno"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Prilagođeno deljenje"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Podeli ekran nagore"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Podeli ekran nalevo"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Podeli ekran nadesno"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Uključi/isključi pregled"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjena je"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Punjenje"</string>
@@ -622,6 +592,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Umanji"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Želite li da se obaveštenja iz ove aplikacije i dalje prikazuju?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Ne možete da isključite ova obaveštenja"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Ova aplikacija koristi kameru."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ova aplikacija koristi mikrofon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ova aplikacija se prikazuje preko drugih aplikacija na ekranu."</string>
@@ -758,6 +730,8 @@
<item msgid="2139628951880142927">"Prikaži procenat tokom punjenja (podrazumevano)"</item>
<item msgid="3327323682209964956">"Ne prikazuj ovu ikonu"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Drugo"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Razdelnik podeljenog ekrana"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Režim celog ekrana za levi ekran"</string>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 7b19b36..ac430ba 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -21,16 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Інтэрфейс карыстальніка сістэмы"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ачысціць"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Выдаліць са спісу"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Звесткі аб прыкладанні"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Вашы апошнія экраны з\'яўляюцца тут"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Закрыць нядаўнія прыкладаннi"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d экран у Аглядзе</item>
- <item quantity="few">%d экраны ў Аглядзе</item>
- <item quantity="many">%d экранаў у Аглядзе</item>
- <item quantity="other">%d экрана ў Аглядзе</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Без апавяшчэнняў"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Пастаянныя"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Апавяшчэнні"</string>
@@ -103,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"адкрыць тэлефон"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"адкрыць галасавую дапамогу"</string>
<string name="camera_label" msgid="7261107956054836961">"адкрыць камеру"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Выберыце новы макет заданняў"</string>
<string name="cancel" msgid="6442560571259935130">"Скасаваць"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Поле даведачнага паведамлення"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Пацвердзіць"</string>
@@ -192,11 +181,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Выдаліць <xliff:g id="APP">%s</xliff:g> са спіса апошніх."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> выдалены."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Усе апошнія праграмы адхілены."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Адкрыць інфармацыю пра праграму \"<xliff:g id="APP">%s</xliff:g>\"."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Запускаецца <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Апавяшчэнне прапушчана."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Цень апавяшчэння.."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Хуткія налады."</string>
@@ -363,23 +347,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC адключаны"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC уключаны"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Няма нядаўніх элементаў"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Вы ачысцілі усё"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Звесткі аб праграме"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"замацаванне экрана"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"пошук"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Не атрымалася запусціць <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> адключана ў бяспечным рэжыме."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Ачысціць усё"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Перацягніце сюды, каб перайсці ў рэжым падзеленага экрана"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Правядзіце ўверх, каб пераключыць праграмы"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Каб хутка пераключыцца паміж праграмамі, перацягніце ўправа"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Падзяліць гарызантальна"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Падзяліць вертыкальна"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Падзяліць іншым чынам"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Падзяліць экран зверху"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Падзяліць экран злева"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Падзяліць экран справа"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Уключыць/выключыць агляд"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Зараджаны"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарадка"</string>
@@ -628,6 +597,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Згарнуць"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Працягваць паказваць апавяшчэнні гэтай праграмы?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Немагчыма адключыць гэтыя апавяшчэнні"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Гэта праграма выкарыстоўвае камеру."</string>
<string name="appops_microphone" msgid="741508267659494555">"Гэта праграма выкарыстоўвае мікрафон."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Гэта праграма паказваецца на экране паверх іншых праграм."</string>
@@ -766,6 +737,8 @@
<item msgid="2139628951880142927">"Паказваць працэнты падчас зарадкі (стандартна)"</item>
<item msgid="3327323682209964956">"Не паказваць гэты значок"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Іншае"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Раздзяляльнік падзеленага экрана"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Левы экран – поўнаэкранны рэжым"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 74b1c44..c6bc414 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Системен ПИ"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Изчистване"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Премахване от списъка"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Информация за приложението"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Скорошните ви екрани се показват тук"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Отхвърляне на скорошните приложения"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d екрана в панела за общ преглед</item>
- <item quantity="one">1 екран в панела за общ преглед</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Няма известия"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"В момента"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Известия"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"отваряне на телефона"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"отваряне на гласовата помощ"</string>
<string name="camera_label" msgid="7261107956054836961">"отваряне на камерата"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Избиране на ново оформление за задачите"</string>
<string name="cancel" msgid="6442560571259935130">"Отказ"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Област за помощно съобщение"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Потвърждаване"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Отхвърляне на <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Приложението <xliff:g id="APP">%s</xliff:g> е отхвърлено."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Всички скорошни приложения са отхвърлени."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Отворете информацията за приложението <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> се стартира."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Известието е отхвърлено."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Падащ панел с известия."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Бързи настройки."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"КБП"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"КБП е деактивирана"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"КБП е активирана"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Няма скорошни елементи"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Изчистихте всичко"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Информация за приложението"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"фиксиране на екрана"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"търсене"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> не можа да стартира."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Приложението <xliff:g id="APP">%s</xliff:g> е деактивирано в безопасния режим."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Изчистване на всичко"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Преместете тук с плъзгане, за да използвате режим за разделен екран"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Прекарайте пръст нагоре, за да превключите между приложенията"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Плъзнете надясно за бързо превключване между приложенията"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Хоризонтално разделяне"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Вертикално разделяне"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Персонализирано разделяне"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Разделяне на екрана нагоре"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Разделяне на екрана наляво"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Разделяне на екрана надясно"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Превключване на общия преглед"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Заредена"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарежда се"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Намаляване"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Да продължат ли да се показват известията от това приложение?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Тези известия не могат да бъдат изключени"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Това приложение използва камерата."</string>
<string name="appops_microphone" msgid="741508267659494555">"Това приложение използва микрофона."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Това приложение се показва върху други приложения на екрана."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Процентът да се показва при зареждане (по подразбиране)"</item>
<item msgid="3327323682209964956">"Тази икона да не се показва"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Друго"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Разделител в режима за разделен екран"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Ляв екран: Показване на цял екран"</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 5223a99..412f90cf 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"সিস্টেম UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"সাফ করুন"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"তালিকা থেকে সরান"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"অ্যাপের তথ্য"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"আপনার সাম্প্রতিক স্ক্রীনগুলো এখানে দেখা যাবে"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"সাম্প্রতিক অ্যাপ্লিকেশানগুলি খারিজ করুন"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">ওভারভিউ-এ %dটি স্ক্রিন</item>
- <item quantity="other">ওভারভিউ-এ %dটি স্ক্রিন</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"কোনো বিজ্ঞপ্তি নেই"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"চলতে-থাকা"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"বিজ্ঞপ্তি"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ফোন খুলুন"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ভয়েস সহায়তা খুলুন"</string>
<string name="camera_label" msgid="7261107956054836961">"ক্যামেরা খুলুন"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"নতুন কার্য লেআউট বেছে নিন"</string>
<string name="cancel" msgid="6442560571259935130">"বাতিল করুন"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"সহায়তার মেসেজ দেখানোর জায়গা"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"কনফার্ম করুন"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> খারিজ করুন।"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> খারিজ করা হয়েছে৷"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"সমস্ত সাম্প্রতিক অ্যাপ্লিকেশন খারিজ করা হয়েছে।"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> অ্যাপ্লিকেশানের তথ্য খুলবে৷"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> তারাঙ্কিত করা হচ্ছে।"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"বিজ্ঞপ্তি খারিজ করা হয়েছে৷"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"বিজ্ঞপ্তি শেড৷"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"দ্রুত সেটিংস৷"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC অক্ষম করা আছে"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC সক্ষম করা আছে"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"কোনো সাম্প্রতিক আইটেম নেই"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"আপনি সবকিছু সাফ করেছেন"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"অ্যাপ্লিকেশানের তথ্য"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"স্ক্রিন পিন করা"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"সার্চ"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> শুরু করা যায়নি৷"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"নিরাপদ মোডে <xliff:g id="APP">%s</xliff:g> অক্ষম করা হয়েছে৷"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"সবকিছু সাফ করুন"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"বিভক্ত স্ক্রিন ব্যবহার করতে এখানে টেনে আনুন"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"অন্য অ্যাপে যেতে উপরের দিকে সোয়াইপ করুন"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"একটি অ্যাপ ছেড়ে দ্রুত অন্য অ্যাপে যেতে ডান দিকে টেনে আনুন"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"অনুভূমিক স্প্লিট"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"উল্লম্ব স্প্লিট"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"কাস্টম স্প্লিট করুন"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"স্ক্রিনটি উপরের দিকে বিভক্ত করুন"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"স্ক্রিনটি বাঁদিকে বিভক্ত করুন"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"স্ক্রিনটি ডানদিকে বিভক্ত করুন"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"\'এক নজরে\' বৈশিষ্ট্যটি চালু বা বন্ধ করুন"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"চার্জ হয়েছে"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"চার্জ হচ্ছে"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"ছোট করে দিন"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"এই অ্যাপের বিজ্ঞপ্তি পরেও দেখে যেতে চান?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"এই বিজ্ঞপ্তিগুলি বন্ধ করা যাবে না"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"এই অ্যাপটি ক্যামেরা ব্যবহার করছে।"</string>
<string name="appops_microphone" msgid="741508267659494555">"এই অ্যাপটি মাইক্রোফোন ব্যবহার করছে।"</string>
<string name="appops_overlay" msgid="6165912637560323464">"এই অ্যাপটি স্ক্রিনে অন্যান্য অ্যাপের উপরে দেখানো হচ্ছে।"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"চার্জ করার সময় শতাংশ দেখান (ডিফল্ট)"</item>
<item msgid="3327323682209964956">"এই আইকনটি দেখাবেন না"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"অন্যান্য"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"বিভক্ত-স্ক্রিন বিভাজক"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"বাঁ দিকের অংশ নিয়ে পূর্ণ স্ক্রিন"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index ca09219..42616a6 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -21,15 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Sistemski UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Obriši"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Uklanjanje sa spiska"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacije o aplikaciji"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ovdje se prikazuju nedavno korišteni ekrani"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Odbaci nedavne aplikacije"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d ekran u Pregledu</item>
- <item quantity="few">%d ekrana u Pregledu</item>
- <item quantity="other">%d ekrana u Pregledu</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nema obavještenja"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"U toku"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obavještenja"</string>
@@ -102,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"otvori telefon"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"otvori glasovnu pomoć"</string>
<string name="camera_label" msgid="7261107956054836961">"otvori kameru"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Odaberite novi raspored zadataka"</string>
<string name="cancel" msgid="6442560571259935130">"Otkaži"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Prostor za poruku za pomoć"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Potvrdite"</string>
@@ -189,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Odbaci aplikaciju <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikacija <xliff:g id="APP">%s</xliff:g> uklonjena."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Sve nedavno korištene aplikacije su odbačene."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Otvaranje informacija o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Pokrećem aplikaciju <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Obavještenje je uklonjeno."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Obavještenja sa sjenčenjem."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Brze postavke."</string>
@@ -321,7 +306,7 @@
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Neimenovani uređaj"</string>
<string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Spreman za emitiranje"</string>
<string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"Nema dostupnih uređaja"</string>
- <string name="quick_settings_cast_no_wifi" msgid="2696477881905521882">"Wi-Fi mreža nije povezana"</string>
+ <string name="quick_settings_cast_no_wifi" msgid="2696477881905521882">"WiFi mreža nije povezana"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Osvjetljenje"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inverzija boja"</string>
@@ -358,23 +343,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC je onemogućen"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC je omogućen"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nema nedavnih stavki"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Sve ste obrisali"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"kačenje ekrana"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraživanje"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikacija <xliff:g id="APP">%s</xliff:g> nije pokrenuta."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> je onemogućena u sigurnom načinu rada."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Obriši sve"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Povucite ovdje za korištenje podijeljenog ekrana"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Prevucite prema gore za promjenu aplikacije"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Prevucite udesno za brzu promjenu aplikacija"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podjela po horizontali"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podjela po vertikali"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Prilagođena podjela"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dijeli ekran nagore"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dijeli ekran nalijevo"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dijeli ekran nadesno"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Pregled uključivanja/isključivanja"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjeno"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Punjenje"</string>
@@ -624,6 +594,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimiziraj"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Nastaviti prikazivanje obavještenja iz ove aplikacije?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Ova obavještenja nije moguće isključiti"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"putem aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Ova aplikacija koristi kameru."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ova aplikacija koristi mikrofon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ova aplikacija prekriva druge aplikacije na ekranu."</string>
@@ -760,6 +731,7 @@
<item msgid="2139628951880142927">"Pokaži postotak u toku punjenja (zadano)"</item>
<item msgid="3327323682209964956">"Ne prikazuj ovu ikonu"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Prikaži ikone obavijesti niskog prioriteta"</string>
<string name="other" msgid="4060683095962566764">"Ostalo"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Razdjelnik ekrana"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Lijevo cijeli ekran"</string>
@@ -791,7 +763,7 @@
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Prijavljeni ste kao <xliff:g id="ID_1">%s</xliff:g>"</string>
<string name="data_connection_no_internet" msgid="4503302451650972989">"Nema internetske veze"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Otvori detalje."</string>
- <string name="accessibility_quick_settings_not_available" msgid="4190068184294019846">"Nije dostupno jer <xliff:g id="REASON">%s</xliff:g>"</string>
+ <string name="accessibility_quick_settings_not_available" msgid="4190068184294019846">"Nije dostupno zbog razloga <xliff:g id="REASON">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Otvori postavke za: <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Urediti raspored postavki."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Stranica <xliff:g id="ID_1">%1$d</xliff:g> od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 7b4fdad..d7300f6 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"IU del sistema"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Esborra"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Elimina de la llista"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informació de l\'aplicació"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Aquí es mostren les teves pantalles recents."</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignora les aplicacions recents"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d pantalles en la visió general</item>
- <item quantity="one">1 pantalla en la visió general</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Cap notificació"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Continu"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificacions"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"obre el telèfon"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"obre l\'assistència per veu"</string>
<string name="camera_label" msgid="7261107956054836961">"obre la càmera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Selecciona el disseny de la tasca nova"</string>
<string name="cancel" msgid="6442560571259935130">"Cancel·la"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Àrea de missatge d\'ajuda"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirma"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ignora <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"S\'ha omès <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"S\'han descartat totes les aplicacions recents."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Obre la informació sobre l\'aplicació <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"S\'està iniciant <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificació omesa."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Àrea de notificacions"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configuració ràpida"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"L\'NFC està desactivada"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"L\'NFC està activada"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"No hi ha cap element recent"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Ho has esborrat tot"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informació de l\'aplicació"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixació de pantalla"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"No s\'ha pogut iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"En mode segur, l\'aplicació <xliff:g id="APP">%s</xliff:g> està desactivada."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Esborra-ho tot"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Arrossega-ho aquí per utilitzar la pantalla dividida"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Llisca cap amunt per canviar d\'aplicació"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arrossega el dit cap a la dreta per canviar ràpidament d\'aplicació"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisió horitzontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisió vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisió personalitzada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Divideix la pantalla cap amunt"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Divideix la pantalla cap a l\'esquerra"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Divideix la pantalla cap a la dreta"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Activa o desactiva Aplicacions recents"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"S\'està carregant"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimitza"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Vols continuar rebent notificacions d\'aquesta aplicació?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Aquestes notificacions no es poden desactivar"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"mitjançant <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Aquesta aplicació utilitza la càmera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Aquesta aplicació utilitza el micròfon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Aquesta aplicació es mostra sobre altres aplicacions a la pantalla."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Mostra el percentatge quan es carregui (opció predeterminada)"</item>
<item msgid="3327323682209964956">"No mostris aquesta icona"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Mostra les icones de notificació amb prioritat baixa"</string>
<string name="other" msgid="4060683095962566764">"Altres"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Divisor de pantalles"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Pantalla esquerra completa"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index f8f79ce..0efbe7d 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -21,16 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI systému"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Vymazat"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odebrat ze seznamu"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"O aplikaci"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Zde budou zobrazeny vaše poslední obrazovky"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zavřít nové aplikace"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="few">%d obrazovky v Přehledu</item>
- <item quantity="many">%d obrazovky v Přehledu</item>
- <item quantity="other">%d obrazovek v Přehledu</item>
- <item quantity="one">1 obrazovka v Přehledu</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Žádná oznámení"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Probíhající"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Oznámení"</string>
@@ -103,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"otevřít telefon"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"otevřít hlasovou asistenci"</string>
<string name="camera_label" msgid="7261107956054836961">"spustit fotoaparát"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Vybrat nové rozvržení úkolů"</string>
<string name="cancel" msgid="6442560571259935130">"Zrušit"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Oblast pro zprávu nápovědy"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Potvrdit"</string>
@@ -190,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Zavřít aplikaci <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikace <xliff:g id="APP">%s</xliff:g> byla odebrána."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Všechny naposledy použité aplikace byly odstraněny."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Otevře informace o aplikaci <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Spouštění aplikace <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Oznámení je zavřeno."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Panel oznámení."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Rychlé nastavení."</string>
@@ -361,23 +345,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC je vypnuto"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC je zapnuto"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Žádné nedávné položky"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vše je vymazáno"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informace o aplikaci"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"připnutí obrazovky"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"vyhledat"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikaci <xliff:g id="APP">%s</xliff:g> nelze spustit."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplikace <xliff:g id="APP">%s</xliff:g> je v nouzovém režimu zakázána."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Vymazat vše"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Rozdělenou obrazovku můžete použít přetažením zde"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Přejetím nahoru přepnete aplikace"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Přetažením doprava rychle přepnete aplikace"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Vodorovné rozdělení"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikální rozdělení"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Vlastní rozdělení"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Rozdělit obrazovku nahoru"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Rozdělit obrazovku vlevo"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Rozdělit obrazovku vpravo"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Přepnout přehled"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nabito"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Nabíjení"</string>
@@ -626,6 +595,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimalizovat"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Mají se oznámení z této aplikace nadále zobrazovat?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Tato oznámení nelze deaktivovat"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Tato aplikace využívá fotoaparát."</string>
<string name="appops_microphone" msgid="741508267659494555">"Tato aplikace využívá mikrofon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Tato aplikace se zobrazuje přes ostatní aplikace na obrazovce."</string>
@@ -764,6 +735,8 @@
<item msgid="2139628951880142927">"Zobrazovat procento při nabíjení (výchozí nastavení)"</item>
<item msgid="3327323682209964956">"Tuto ikonu nezobrazovat"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Jiné"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Čára rozdělující obrazovku"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Levá část na celou obrazovku"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 7894361..d470582 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"System-UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ryd"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Fjern fra listen"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Appinfo"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Dine seneste skærme vises her"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Luk de seneste apps"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d skærmbilleder i Oversigt</item>
- <item quantity="other">%d skærmbilleder i Oversigt</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen underretninger"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"I gang"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Underretninger"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"åbn telefon"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"åbn taleassistent"</string>
<string name="camera_label" msgid="7261107956054836961">"åbn kamera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Vælg nyt opgavelayout"</string>
<string name="cancel" msgid="6442560571259935130">"Annuller"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Område med hjælpemeddelelse"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Bekræft"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Afvis <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> er annulleret."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle de seneste apps er lukket."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Åbn appoplysningerne for <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> startes."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Underretningen er annulleret."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Underretningspanel."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Hurtige indstillinger."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC er deaktiveret"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC er aktiveret"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Ingen nye elementer"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du har ryddet alt"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Oplysninger om applikationen"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"skærmfastholdelse"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"søg"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> kunne ikke startes."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> er deaktiveret i sikker tilstand."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Ryd alle"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Træk hertil for at bruge opdelt skærm"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Stryg opad for at skifte apps"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Træk til højre for hurtigt at skifte app"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Opdel vandret"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Opdel lodret"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Opdel brugerdefineret"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Opdelt skærm øverst"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Opdelt skærm til venstre"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Opdelt skærm til højre"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Slå Oversigt til/fra"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Opladet"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Oplader"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimer"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Vil du fortsætte med at se underretninger fra denne app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Disse underretninger kan ikke deaktiveres"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Denne app anvender kameraet."</string>
<string name="appops_microphone" msgid="741508267659494555">"Denne app anvender mikrofonen."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Denne app vises over andre apps på din skærm."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Vis procent ved opladning (standard)"</item>
<item msgid="3327323682209964956">"Vis ikke dette ikon"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Andet"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Adskiller til opdelt skærm"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Vis venstre del i fuld skærm"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 47aaaed..7fcb02c 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"System-UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Löschen"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Aus Liste entfernen"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App-Info"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Hier siehst du deine zuletzt geöffneten Apps."</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Kürzlich geöffnete Apps schließen"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d Bildschirme in der Übersicht</item>
- <item quantity="one">1 Bildschirm in der Übersicht</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Keine Benachrichtigungen"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Aktuell"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Benachrichtigungen"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"Telefon öffnen"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"Sprachassistent öffnen"</string>
<string name="camera_label" msgid="7261107956054836961">"Kamera öffnen"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Neues Aufgabenlayout auswählen"</string>
<string name="cancel" msgid="6442560571259935130">"Abbrechen"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Bereich für die Hilfemeldung"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Bestätigen"</string>
@@ -192,11 +183,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> beenden"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> entfernt"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle kürzlich verwendeten Apps wurden entfernt."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Infos zur App \"<xliff:g id="APP">%s</xliff:g>\" öffnen."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> wird gestartet."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Benachrichtigung geschlossen"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Benachrichtigungsleiste"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Schnelleinstellungen"</string>
@@ -216,9 +202,9 @@
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Der Flugmodus ist aktiviert."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"lautlos"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"nur Wecker"</string>
- <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Nicht stören."</string>
- <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Nicht stören\" deaktiviert"</string>
- <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Nicht stören\" aktiviert"</string>
+ <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Bitte nicht stören."</string>
+ <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Bitte nicht stören\" deaktiviert"</string>
+ <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Bitte nicht stören\" aktiviert"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth."</string>
<string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth deaktiviert"</string>
<string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth aktiviert"</string>
@@ -280,7 +266,7 @@
<string name="start_dreams" msgid="5640361424498338327">"Bildschirmschoner"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
<string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Halte die Symbole gedrückt, um weitere Optionen zu sehen"</string>
- <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nicht stören"</string>
+ <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Bitte nicht stören"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Nur wichtige Unterbrechungen"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Nur Wecker"</string>
<string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Lautlos"</string>
@@ -359,23 +345,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC ist deaktiviert"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC ist aktiviert"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Keine kürzlich verwendeten Elemente"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du hast alles gelöscht"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"App-Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Bildschirmfixierung"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"Suche"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> konnte nicht gestartet werden."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ist im abgesicherten Modus deaktiviert."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Alle schließen"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Hierher ziehen, um den Bildschirm zu teilen"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Nach oben wischen, um Apps zu wechseln"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Zum schnellen Wechseln der Apps nach rechts ziehen"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Geteilte Schaltfläche – horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Geteilte Schaltfläche – vertikal"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Geteilte Schaltfläche – benutzerdefiniert"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Geteilten Bildschirm oben anzeigen"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Geteilten Bildschirm auf linker Seite anzeigen"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Geteilten Bildschirm auf der rechten Seite anzeigen"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Übersicht ein-/ausblenden"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Aufgeladen"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Wird aufgeladen"</string>
@@ -622,6 +593,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimieren"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Benachrichtigungen dieser App weiterhin anzeigen?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Diese Benachrichtigungen können nicht deaktiviert werden"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"über <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Diese App verwendet die Kamera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Diese App verwendet das Mikrofon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Diese App wird über anderen Apps auf dem Bildschirm angezeigt."</string>
@@ -699,9 +671,9 @@
<string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string>
<string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"Kalender"</string>
<string name="tuner_full_zen_title" msgid="4540823317772234308">"Einschließlich Lautstärkeregler anzeigen"</string>
- <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Nicht stören"</string>
+ <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Bitte nicht stören"</string>
<string name="volume_dnd_silent" msgid="4363882330723050727">"Tastenkombination für Lautstärketasten"</string>
- <string name="volume_up_silent" msgid="7141255269783588286">"\"Nicht stören\" bei \"Lauter\" deaktivieren"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"\"Bitte nicht stören\" bei \"Lauter\" deaktivieren"</string>
<string name="battery" msgid="7498329822413202973">"Akku"</string>
<string name="clock" msgid="7416090374234785905">"Uhr"</string>
<string name="headset" msgid="4534219457597457353">"Headset"</string>
@@ -756,6 +728,7 @@
<item msgid="2139628951880142927">"Prozentwert beim Laden anzeigen (Standardeinstellung)"</item>
<item msgid="3327323682209964956">"Dieses Symbol nicht anzeigen"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Symbole für Benachrichtigungen mit einer niedrigen Priorität anzeigen"</string>
<string name="other" msgid="4060683095962566764">"Sonstiges"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Bildschirmteiler"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Vollbild links"</string>
@@ -840,10 +813,10 @@
<string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%1$s</xliff:g> – <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"WLAN ist deaktiviert"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth ist deaktiviert"</string>
- <string name="dnd_is_off" msgid="6167780215212497572">"\"Nicht stören\" ist deaktiviert"</string>
- <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"\"Nicht stören\" wurde von einer automatischen Regel aktiviert (<xliff:g id="ID_1">%s</xliff:g>)."</string>
- <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"\"Nicht stören\" wurde von einer App aktiviert (<xliff:g id="ID_1">%s</xliff:g>)."</string>
- <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"\"Nicht stören\" wurde von einer automatischen Regel oder einer App aktiviert."</string>
+ <string name="dnd_is_off" msgid="6167780215212497572">"\"Bitte nicht stören\" ist deaktiviert"</string>
+ <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"\"Bitte nicht stören\" wurde von einer automatischen Regel aktiviert (<xliff:g id="ID_1">%s</xliff:g>)."</string>
+ <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"\"Bitte nicht stören\" wurde von einer App aktiviert (<xliff:g id="ID_1">%s</xliff:g>)."</string>
+ <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"\"Bitte nicht stören\" wurde von einer automatischen Regel oder einer App aktiviert."</string>
<string name="qs_dnd_until" msgid="3469471136280079874">"Bis <xliff:g id="ID_1">%s</xliff:g>"</string>
<string name="qs_dnd_keep" msgid="1825009164681928736">"Beibehalten"</string>
<string name="qs_dnd_replace" msgid="8019520786644276623">"Ersetzen"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index ea16ba4..12f0d532 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI συστήματ."</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Διαγραφή"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Κατάργηση από τη λίστα"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Πληροφορίες εφαρμογής"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Οι πρόσφατες οθόνες σας εμφανίζονται εδώ"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Παράβλεψη πρόσφατων εφαρμογών"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d οθόνες στην Επισκόπηση</item>
- <item quantity="one">1 οθόνη στην Επισκόπηση</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Δεν υπάρχουν ειδοποιήσεις"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Εν εξελίξει"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ειδοποιήσεις"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"άνοιγμα τηλεφώνου"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"άνοιγμα φωνητικής υποβοήθησης"</string>
<string name="camera_label" msgid="7261107956054836961">"άνοιγμα φωτογραφικής μηχανής"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Επιλέξτε τη νέα διάταξη εργασίας"</string>
<string name="cancel" msgid="6442560571259935130">"Ακύρωση"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Περιοχή μηνυμάτων βοήθειας"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Επιβεβαίωση"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Παράβλεψη <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Απορρίφθηκαν <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Έγινε παράβλεψη όλων των πρόσφατων εφαρμογών."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Άνοιγμα πληροφοριών εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Έναρξη <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Η ειδοποίηση έχει απορριφθεί."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Πλαίσιο σκίασης ειδοποιήσεων."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Γρήγορες ρυθμίσεις."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"Το NFC είναι απενεργοποιημένο"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"Το NFC είναι ενεργοποιημένο"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Δεν υπάρχουν πρόσφατα στοιχεία"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Έχει γίνει διαγραφή όλων των στοιχείων"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Πληροφορίες εφαρμογής"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"καρφίτσωμα οθόνης"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"αναζήτηση"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Δεν ήταν δυνατή η εκκίνηση της εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Η εφαρμογή <xliff:g id="APP">%s</xliff:g> έχει απενεργοποιηθεί στην ασφαλή λειτουργία."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Διαγραφή όλων"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Σύρετε εδώ για να χρησιμοποιήσετε τον διαχωρισμό οθόνης"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Σύρετε προς τα επάνω για εναλλαγή των εφαρμογών"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Σύρετε προς τα δεξιά για γρήγορη εναλλαγή εφαρμογών"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Οριζόντιος διαχωρισμός"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Κάθετος διαχωρισμός"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Προσαρμοσμένος διαχωρισμός"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Διαχωρισμός οθόνης στην κορυφή"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Διαχωρισμός οθόνης στα αριστερά"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Διαχωρισμός οθόνης στα δεξιά"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Εναλλαγή επισκόπησης"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Φορτίστηκε"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Φόρτιση"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Ελαχιστοποίηση"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Να συνεχίσουν να εμφανίζονται ειδοποιήσεις από αυτήν την εφαρμογή;"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Αδύνατη η απενεργοποίηση αυτών των ειδοποιήσεων"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Αυτή η εφαρμογή χρησιμοποιεί την κάμερα."</string>
<string name="appops_microphone" msgid="741508267659494555">"Αυτή η εφαρμογή χρησιμοποιεί το μικρόφωνο."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Αυτή η εφαρμογή εμφανίζεται πάνω σε άλλες εφαρμογές στην οθόνη σας."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Να εμφανίζεται ποσοστό κατά τη φόρτιση (προεπιλογή)"</item>
<item msgid="3327323682209964956">"Να μην εμφανίζεται αυτό το εικονίδιο"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Άλλο"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Διαχωριστικό οθόνης"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Αριστερή πλήρης οθόνη"</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index b7da383..82c91c7 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"System UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Clear"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d screens in Overview</item>
- <item quantity="one">1 screen in Overview</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"open phone"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"open voice assist"</string>
<string name="camera_label" msgid="7261107956054836961">"open camera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Select new task layout"</string>
<string name="cancel" msgid="6442560571259935130">"Cancel"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Help message area"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirm"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC is disabled"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC is enabled"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Clear all"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Drag here to use split screen"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Swipe up to switch apps"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Drag right to quickly switch apps"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Toggle Overview"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"These notifications can\'t be turned off"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"via <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"This app is using the camera."</string>
<string name="appops_microphone" msgid="741508267659494555">"This app is using the microphone."</string>
<string name="appops_overlay" msgid="6165912637560323464">"This app is displaying over other apps on your screen."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Show percentage when charging (default)"</item>
<item msgid="3327323682209964956">"Don\'t show this icon"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Show low-priority notification icons"</string>
<string name="other" msgid="4060683095962566764">"Other"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Split screen divider"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Left full screen"</string>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index 19e9b64..361310e 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"System UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Clear"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d screens in Overview</item>
- <item quantity="one">1 screen in Overview</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"open phone"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"open voice assist"</string>
<string name="camera_label" msgid="7261107956054836961">"open camera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Select new task layout"</string>
<string name="cancel" msgid="6442560571259935130">"Cancel"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Help message area"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirm"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC is disabled"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC is enabled"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Clear all"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Drag here to use split screen"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Swipe up to switch apps"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Drag right to quickly switch apps"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Toggle Overview"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"These notifications can\'t be turned off"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"via <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"This app is using the camera."</string>
<string name="appops_microphone" msgid="741508267659494555">"This app is using the microphone."</string>
<string name="appops_overlay" msgid="6165912637560323464">"This app is displaying over other apps on your screen."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Show percentage when charging (default)"</item>
<item msgid="3327323682209964956">"Don\'t show this icon"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Show low-priority notification icons"</string>
<string name="other" msgid="4060683095962566764">"Other"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Split screen divider"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Left full screen"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index b7da383..82c91c7 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"System UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Clear"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d screens in Overview</item>
- <item quantity="one">1 screen in Overview</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"open phone"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"open voice assist"</string>
<string name="camera_label" msgid="7261107956054836961">"open camera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Select new task layout"</string>
<string name="cancel" msgid="6442560571259935130">"Cancel"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Help message area"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirm"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC is disabled"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC is enabled"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Clear all"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Drag here to use split screen"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Swipe up to switch apps"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Drag right to quickly switch apps"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Toggle Overview"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"These notifications can\'t be turned off"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"via <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"This app is using the camera."</string>
<string name="appops_microphone" msgid="741508267659494555">"This app is using the microphone."</string>
<string name="appops_overlay" msgid="6165912637560323464">"This app is displaying over other apps on your screen."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Show percentage when charging (default)"</item>
<item msgid="3327323682209964956">"Don\'t show this icon"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Show low-priority notification icons"</string>
<string name="other" msgid="4060683095962566764">"Other"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Split screen divider"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Left full screen"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index b7da383..82c91c7 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"System UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Clear"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d screens in Overview</item>
- <item quantity="one">1 screen in Overview</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"open phone"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"open voice assist"</string>
<string name="camera_label" msgid="7261107956054836961">"open camera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Select new task layout"</string>
<string name="cancel" msgid="6442560571259935130">"Cancel"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Help message area"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirm"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC is disabled"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC is enabled"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Clear all"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Drag here to use split screen"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Swipe up to switch apps"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Drag right to quickly switch apps"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Toggle Overview"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"These notifications can\'t be turned off"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"via <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"This app is using the camera."</string>
<string name="appops_microphone" msgid="741508267659494555">"This app is using the microphone."</string>
<string name="appops_overlay" msgid="6165912637560323464">"This app is displaying over other apps on your screen."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Show percentage when charging (default)"</item>
<item msgid="3327323682209964956">"Don\'t show this icon"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Show low-priority notification icons"</string>
<string name="other" msgid="4060683095962566764">"Other"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Split screen divider"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Left full screen"</string>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 97ddf61..8005d79 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"System UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Clear"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d screens in Overview</item>
- <item quantity="one">1 screen in Overview</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"open phone"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"open voice assist"</string>
<string name="camera_label" msgid="7261107956054836961">"open camera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Select new task layout"</string>
<string name="cancel" msgid="6442560571259935130">"Cancel"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Help message area"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirm"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC is disabled"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC is enabled"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Clear all"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Drag here to use split screen"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Swipe up to switch apps"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Drag right to quickly switch apps"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Custom"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Toggle Overview"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimize"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"These notifications can\'t be turned off"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"via <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"This app is using the camera."</string>
<string name="appops_microphone" msgid="741508267659494555">"This app is using the microphone."</string>
<string name="appops_overlay" msgid="6165912637560323464">"This app is displaying over other apps on your screen."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Show percentage when charging (default)"</item>
<item msgid="3327323682209964956">"Don\'t show this icon"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Show low-priority notification icons"</string>
<string name="other" msgid="4060683095962566764">"Other"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Split-screen divider"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Left full screen"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 35499f0..3f3187b 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"IU del sistema"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Eliminar"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminar de la lista"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información de la aplicación"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Las pantallas recientes aparecen aquí."</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Rechazar aplicaciones recientes"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d pantallas en Recientes</item>
- <item quantity="one">1 pantalla en Recientes</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No hay notificaciones"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Continuo"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificaciones"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"abrir el asistente de voz"</string>
<string name="camera_label" msgid="7261107956054836961">"abrir cámara"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Selecciona el nuevo diseño de la tarea."</string>
<string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Área de mensajes de ayuda"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirmar"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Rechazar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> descartada."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Se descartaron todas las aplicaciones recientes."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Abre la información de la aplicación de <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificación ignorada"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Pantalla de notificaciones"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configuración rápida"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"La tecnología NFC está inhabilitada"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"La tecnología NFC está habilitada"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"No hay elementos recientes"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Todo borrado"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Fijar pantalla"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"No se pudo iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> está inhabilitada en modo seguro."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Borrar todo"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Arrastra hasta aquí para usar la pantalla dividida"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Desliza el dedo hacia arriba para cambiar de app"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arrastra a la derecha para cambiar aplicaciones rápidamente"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"División vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"División personalizada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dividir pantalla en la parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dividir pantalla a la izquierda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dividir pantalla a la derecha"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Ocultar o mostrar Recientes"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Cargando"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"¿Quieres seguir viendo las notificaciones de esta app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"No se pueden desactivar estas notificaciones"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Esta app está usando la cámara."</string>
<string name="appops_microphone" msgid="741508267659494555">"Esta app está usando el micrófono."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Esta app se muestra sobre otras apps en la pantalla."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Mostrar el porcentaje durante la carga (predeterminado)"</item>
<item msgid="3327323682209964956">"No mostrar este ícono"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Otros"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Divisor de pantalla dividida"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Pantalla izquierda completa"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 54364a5..356ef45 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI del sistema"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Borrar"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Quitar de la lista"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información de la aplicación"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Aquí aparecerán tus aplicaciones recientes"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Descartar aplicaciones recientes"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d pantallas en Aplicaciones recientes</item>
- <item quantity="one">1 pantalla en Aplicaciones recientes</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No tienes notificaciones"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Entrante"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificaciones"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"abrir el asistente de voz"</string>
<string name="camera_label" msgid="7261107956054836961">"abrir cámara"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Seleccionar diseño de tarea nueva"</string>
<string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Área de mensaje de ayuda"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirmar"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Descartar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Se ha eliminado <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Se han ignorado todas las aplicaciones recientes."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Abre la información de la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificación ignorada"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Pantalla de notificaciones"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Ajustes rápidos"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"La conexión NFC está inhabilitada"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"La conexión NFC está habilitada"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"No hay elementos recientes"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Has rechazado todo"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fijación de pantalla"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"No se ha podido iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"La aplicación <xliff:g id="APP">%s</xliff:g> se ha inhabilitado en modo seguro."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Borrar todo"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Arrastra hasta aquí para utilizar la pantalla dividida"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Desliza el dedo hacia arriba para cambiar de aplicación"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arrastra hacia la derecha para cambiar rápidamente de aplicación"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"División vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"División personalizada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dividir la pantalla en la parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dividir la pantalla a la izquierda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dividir la pantalla a la derecha"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Mostrar u ocultar aplicaciones recientes"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Cargando"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"¿Quieres seguir viendo las notificaciones de esta aplicación?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Estas notificaciones no se pueden desactivar"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"mediante <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Esta aplicación está usando la cámara."</string>
<string name="appops_microphone" msgid="741508267659494555">"Esta aplicación está usando el micrófono."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Esta aplicación se está mostrando sobre otras aplicaciones en tu pantalla."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Mostrar porcentaje durante la carga (predeterminado)"</item>
<item msgid="3327323682209964956">"No mostrar este icono"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Mostrar iconos de notificaciones con prioridad baja"</string>
<string name="other" msgid="4060683095962566764">"Otros"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Dividir la pantalla"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Pantalla izquierda completa"</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 90e9334..f125b84 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Süsteemi UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Tühjenda"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Loendist eemaldamine"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Rakenduse teave"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Teie viimane ekraanikuva ilmub siia"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Loobu hiljutistest rakendustest"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d ekraani jaotises Ülevaade</item>
- <item quantity="one">1 ekraan jaotises Ülevaade</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Teatisi pole"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Jätkuv"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Märguanded"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ava telefon"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ava häälabi"</string>
<string name="camera_label" msgid="7261107956054836961">"ava kaamera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Uue toimingu paigutuse valimine"</string>
<string name="cancel" msgid="6442560571259935130">"Tühista"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Abisõnumi ala"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Kinnita"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Rakendusest <xliff:g id="APP">%s</xliff:g> loobumine."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Loobusite rakendusest <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Kõikidest hiljutistest rakendustest on loobutud"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Rakenduse <xliff:g id="APP">%s</xliff:g> teabe avamine."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Rakenduse <xliff:g id="APP">%s</xliff:g> käivitamine."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Märguandest on loobutud."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Märguande vari."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Kiirseaded."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC on keelatud"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC on lubatud"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Hiljutisi üksusi pole"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Olete kõik ära kustutanud"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Rakenduse teave"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekraanikuva kinnitamine"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"otsing"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Rakendust <xliff:g id="APP">%s</xliff:g> ei saanud käivitada."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Rakendus <xliff:g id="APP">%s</xliff:g> on turvarežiimis keelatud."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Kustuta kõik"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Jagatud ekraani kasutamiseks lohistage siia"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Rakenduste vahetamiseks pühkige üles"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Lohistage paremale, et rakendusi kiiresti vahetada"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horisontaalne poolitamine"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikaalne poolitamine"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Kohandatud poolitamine"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Poolita ekraan üles"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Poolita ekraan vasakule"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Poolita ekraan paremale"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Lehe Ülevaade sisse- ja väljalülitamine"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Laetud"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Laadimine"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimeeri"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Kas jätkata selle rakenduse märguannete kuvamist?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Neid märguandeid ei saa välja lülitada"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"See rakendus kasutab kaamerat."</string>
<string name="appops_microphone" msgid="741508267659494555">"See rakendus kasutab mikrofoni."</string>
<string name="appops_overlay" msgid="6165912637560323464">"See rakendus kuvatakse teie ekraanil muude rakenduste peal."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Kuva protsent laadimisel (vaikimisi)"</item>
<item msgid="3327323682209964956">"Ära kuva seda ikooni"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Muu"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Ekraanijagaja"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Vasak täisekraan"</string>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index c6314e4..6e3f094 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Sistemaren interfazea"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Garbitu"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Kendu zerrendatik"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Aplikazioaren informazioa"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ikusitako azken pantailak erakusten dira hemen"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Baztertu azken aplikazioak"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d pantaila daude ikuspegi orokorrean</item>
- <item quantity="one">Pantaila bat dago ikuspegi orokorrean</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ez dago jakinarazpenik"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Abian"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Jakinarazpenak"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ireki telefonoan"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ireki ahots-laguntza"</string>
<string name="camera_label" msgid="7261107956054836961">"ireki kamera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Hautatu zereginen diseinua"</string>
<string name="cancel" msgid="6442560571259935130">"Utzi"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Laguntza-mezuaren eremua"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Berretsi"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Baztertu <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> baztertu da."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Azken aplikazio guztiak baztertu da."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Ireki <xliff:g id="APP">%s</xliff:g> aplikazioari buruzko informazioa."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> hasten."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Jakinarazpena baztertu da."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Jakinarazpenen panela."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Ezarpen bizkorrak."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"Desgaituta dago NFC"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"Gaituta dago NFC"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Ez dago azkenaldi honetako ezer"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Dena garbitu duzu"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Aplikazioaren informazioa"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pantaila-ainguratzea"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"bilatu"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Ezin izan da hasi <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> desgaituta dago modu seguruan."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Garbitu guztiak"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Arrastatu hau pantaila zatitzeko"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Egin gora aplikazioa aldatzeko"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arrastatu eskuinera aplikazioa azkar aldatzeko"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Zatitze horizontala"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Zatitze bertikala"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Zatitze pertsonalizatua"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Zatitu pantaila eta ezarri goian"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Zatitu pantaila eta ezarri ezkerrean"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Zatitu pantaila eta ezarri eskuinean"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Aldatu ikuspegi orokorra"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Kargatuta"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Kargatzen"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizatu"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Aplikazio honen jakinarazpenak erakusten jarraitzea nahi duzu?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Jakinarazpen hauek ezin dira desaktibatu"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioaren bidez"</string>
<string name="appops_camera" msgid="8100147441602585776">"Kamera erabiltzen ari da aplikazioa."</string>
<string name="appops_microphone" msgid="741508267659494555">"Mikrofonoa erabiltzen ari da aplikazioa."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Pantailako beste aplikazioen gainean agertzen da aplikazioa."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Erakutsi ehunekoa kargatu bitartean (balio lehenetsia)"</item>
<item msgid="3327323682209964956">"Ez erakutsi ikonoa"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Erakutsi lehentasun txikiko jakinarazpenen ikonoak"</string>
<string name="other" msgid="4060683095962566764">"Beste bat"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Pantaila-zatitzailea"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Ezarri ezkerraldea pantaila osoan"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index ca38030..e785f76 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"رابط کاربر سیستم"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"پاک کردن"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"حذف از فهرست"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"اطلاعات برنامه"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"صفحههای اخیر شما اینجا نمایان میشوند"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"رد کردن برنامههای اخیر"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d صفحه در نمای کلی</item>
- <item quantity="other">%d صفحه در نمای کلی</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"اعلانی موجود نیست"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"در حال انجام"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"اعلانها"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"باز کردن تلفن"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"«دستیار صوتی» را باز کنید"</string>
<string name="camera_label" msgid="7261107956054836961">"باز کردن دوربین"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"انتخاب طرحبندی جدید کار"</string>
<string name="cancel" msgid="6442560571259935130">"لغو"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"بخش پیام راهنما"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"تأیید"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"رد کردن <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> نادیده گرفته شد."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"همه برنامههای اخیر رد شدند."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"باز کردن اطلاعات برنامه <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> در حال شروع به کار است."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"اعلان ردشد."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"مجموعه اعلان."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"تنظیمات سریع."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC غیرفعال است"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC فعال است"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"بدون موارد اخیر"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"همهچیز را پاک کردهاید"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"اطلاعات برنامه"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"پین کردن صفحه"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"جستجو"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> شروع نشد."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> در حالت ایمن غیرفعال است."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"پاک کردن همه"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"برای استفاده از تقسیم صفحه، به اینجا بکشید"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"برای تغییر برنامهها، تند به بالا بکشید"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"برای جابهجایی سریع میان برنامهها، به چپ بکشید"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسیم افقی"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"تقسیم عمودی"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"سفارشی کردن تقسیم"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"تقسیم کردن صفحه به بالا"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"تقسیم کردن صفحه به چپ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"تقسیم کردن صفحه به راست"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"تغییر وضعیت نمای کلی"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"شارژ کامل شد"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"در حال شارژ شدن"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"کوچک کردن"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"نمایش اعلان از این برنامه ادامه یابد؟"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"نمیتوان این اعلانها را خاموش کرد"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"این برنامه از دوربین استفاده میکند."</string>
<string name="appops_microphone" msgid="741508267659494555">"این برنامه از میکروفون استفاده میکند."</string>
<string name="appops_overlay" msgid="6165912637560323464">"این برنامه روی برنامههای دیگر در صفحهنمایش نشان داده میشود."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"هنگام شارژ شدن درصد نشان داده شود (پیشفرض)"</item>
<item msgid="3327323682209964956">"این نماد نشان داده نشود"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"موارد دیگر"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"تقسیمکننده صفحه"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"تمامصفحه چپ"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 412bee1..af35a85 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Käyttöliitt."</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Tyhjennä"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Poista luettelosta"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Sovelluksen tiedot"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Äskettäin käytetyt ruudut näkyvät tässä"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Hylkää viimeaikaiset sovellukset"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d näyttöä Yleistä-kohdassa</item>
- <item quantity="one">1 näyttö Yleistä-kohdassa</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ei ilmoituksia"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Käynnissä olevat"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ilmoitukset"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"avaa puhelin"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"Avaa ääniapuri"</string>
<string name="camera_label" msgid="7261107956054836961">"avaa kamera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Valitse uusi tehtävien asettelu"</string>
<string name="cancel" msgid="6442560571259935130">"Peruuta"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Ohjeviestialue"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Vahvista"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Hylätään <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> hylättiin."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Kaikki viimeisimmät sovellukset on hylätty."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Avaa sovelluksen <xliff:g id="APP">%s</xliff:g> tiedot."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Käynnistetään <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Ilmoitus hylätty."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Ilmoitusalue."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Pika-asetukset."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC on poistettu käytöstä"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC on käytössä"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Ei viimeaikaisia kohteita"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Kaikki on hoidettu."</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Sovellustiedot"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"näytön kiinnitys"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"haku"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Sovelluksen <xliff:g id="APP">%s</xliff:g> käynnistäminen epäonnistui."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> on poistettu käytöstä vikasietotilassa."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Tyhjennä kaikki"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Jaa näyttö vetämällä tähän."</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Vaihda sovellusta pyyhkäisemällä ylös"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Vaihda sovellusta nopeasti vetämällä oikealle"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Vaakasuuntainen jako"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Pystysuuntainen jako"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Muokattu jako"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Jaa näyttö ylös"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Jaa näyttö vasemmalle"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Jaa näyttö oikealle"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Näytä/piilota viimeisimmät"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Ladattu"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Ladataan"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Pienennä"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Jatketaanko ilmoitusten näyttämistä tästä sovelluksesta?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Näitä ilmoituksia ei voi poistaa käytöstä"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Tämä sovellus käyttää kameraa."</string>
<string name="appops_microphone" msgid="741508267659494555">"Tämä sovellus käyttää mikrofonia."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Tämä sovellus näkyy näytöllä muiden sovellusten päällä."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Näytä prosenttiluku latauksen aikana (oletus)"</item>
<item msgid="3327323682209964956">"Älä näytä tätä kuvaketta"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Näytä vähemmän tärkeät ilmoituskuvakkeet"</string>
<string name="other" msgid="4060683095962566764">"Muu"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Näytön jakaja"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Vasen koko näytölle"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 8821178..06f178a 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"IU système"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Effacer"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Supprimer de la liste"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informations sur l\'application"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Vos écrans récents s\'affichent ici"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Masquer les applications récentes"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">Aperçu de %d écran</item>
- <item quantity="other">Aperçu de %d écrans</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Aucune notification"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"En cours"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"Ouvrir le téléphone"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ouvrir l\'assistance vocale"</string>
<string name="camera_label" msgid="7261107956054836961">"Ouvrir l\'appareil photo"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Sélectionner un nouveau format de tâche"</string>
<string name="cancel" msgid="6442560571259935130">"Annuler"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Zone de message d\'aide"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirmer"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Supprimer <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Application \"<xliff:g id="APP">%s</xliff:g>\" ignorée."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Toutes les applications récentes ont été supprimées."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Ouvre les détails de l\'application <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Lancement de <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification masquée"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Volet des notifications"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Paramètres rapides"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC désactivée"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC activée"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Aucun élément récent"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vous avez tout effacé"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Détails de l\'application"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"épinglage d\'écran"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> est désactivée en mode sans échec."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Effacer tout"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Glissez l\'élément ici pour utiliser l\'écran partagé"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Balayez vers le haut pour changer d\'application"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Balayez l\'écran vers la droite pour changer rapidement d\'application"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Séparation verticale"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Séparation personnalisée"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Écran partagé dans le haut"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Écran partagé à la gauche"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Écran partagé à la droite"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Basculer l\'aperçu"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Chargée"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Charge en cours..."</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Réduire"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuer à afficher les notifications de cette application?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Ces notifications ne peuvent pas être désactivées"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Cette application utilise l\'appareil photo."</string>
<string name="appops_microphone" msgid="741508267659494555">"Cette application utilise le microphone."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Cette application superpose du contenu par-dessus d\'autres applications à l\'écran."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Montrer le pourcentage durant la charge (par défaut)"</item>
<item msgid="3327323682209964956">"Ne pas afficher cette icône"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Autre"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Séparateur d\'écran partagé"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Plein écran à la gauche"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index e37722a..7157cb5 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"L\'interface"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Effacer"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Supprimer de la liste"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Infos application"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Vos écrans récents s\'affichent ici"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Masquer les applications récentes"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d écran dans Aperçu</item>
- <item quantity="other">%d écrans dans Aperçu</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Aucune notification"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"En cours"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ouvrir le téléphone"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ouvrir l\'assistance vocale"</string>
<string name="camera_label" msgid="7261107956054836961">"ouvrir l\'appareil photo"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Sélectionner un nouveau plan de tâche"</string>
<string name="cancel" msgid="6442560571259935130">"Annuler"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Zone de message d\'aide"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirmer"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Supprimer <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Application \"<xliff:g id="APP">%s</xliff:g>\" ignorée."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Toutes les applications récentes ont été supprimées."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Ouvre les informations sur l\'application <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Lancement de <xliff:g id="APP">%s</xliff:g>"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification masquée"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Volet des notifications"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Paramètres rapides"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"La technologie NFC est désactivée"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"La technologie NFC est activée"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Aucun élément récent"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vous avez tout effacé."</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Infos application"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"épinglage d\'écran"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"L\'application <xliff:g id="APP">%s</xliff:g> est désactivée en mode sécurisé."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Tout fermer"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Faire glisser ici pour utiliser l\'écran partagé"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Balayer l\'écran vers le haut pour changer d\'application"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Déplacer vers la droite pour changer rapidement d\'application"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Séparation verticale"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Séparation personnalisée"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Partager l\'écran en haut"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Partager l\'écran sur la gauche"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Partager l\'écran sur la droite"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Activer/Désactiver l\'aperçu"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Chargé"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"En charge"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Réduire"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuer d\'afficher les notifications de cette application ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Ces notifications ne peuvent pas être désactivées"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Cette application utilise la caméra."</string>
<string name="appops_microphone" msgid="741508267659494555">"Cette application utilise le micro."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Cette application se superpose aux autres applications sur l\'écran."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Afficher le pourcentage lorsque l\'appareil est en charge (option par défaut)"</item>
<item msgid="3327323682209964956">"Ne plus afficher cette icône"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Autre"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Séparateur d\'écran partagé"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Écran de gauche en plein écran"</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 80f3c93..f17243e 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"IU sistema"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Borrar"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Quitar da lista"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información da aplicación"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"As túas pantallas recentes aparecen aquí"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Rexeitar aplicacións recentes"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d pantallas en visión xeral</item>
- <item quantity="one">Unha pantalla en visión xeral</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Non hai notificacións"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"En curso"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificacións"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"abrir asistente de voz"</string>
<string name="camera_label" msgid="7261107956054836961">"abrir cámara"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Seleccionar novo deseño de tarefas"</string>
<string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Área de mensaxes de axuda"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirmar"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Rexeitar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Rexeitouse <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Rexeitáronse todas as aplicacións recentes."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Abre a información da aplicación <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificación rexeitada"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Sombra de notificación"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configuración rápida"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"A opción NFC está desactivada"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"A opción NFC está activada"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Non hai elementos recentes"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Borraches todo"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Información da aplicación"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixación de pantalla"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Non foi posible iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"A aplicación <xliff:g id="APP">%s</xliff:g> está desactivada no modo seguro"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Borrar todo"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Arrastrar aquí para usar a pantalla dividida"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Pasar o dedo cara arriba para cambiar de aplicación"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arrastra cara á dereita para cambiar de aplicacións rapidamente"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dividir en horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dividir en vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Dividir de xeito personalizado"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dividir pantalla na parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dividir pantalla á esquerda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dividir pantalla á dereita"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Activar/desactivar Visión xeral"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Cargando"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Queres seguir mostrando as notificacións desta aplicación?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Non se poden desactivar estas notificacións"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Esta aplicación está utilizando a cámara."</string>
<string name="appops_microphone" msgid="741508267659494555">"Esta aplicación está utilizando o micrófono."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Esta aplicación móstrase sobre outras aplicacións da pantalla."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Mostrar porcentaxe durante a carga (predeterminado)"</item>
<item msgid="3327323682209964956">"Non mostrar esta icona"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Outros"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Divisor de pantalla dividida"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Pantalla completa á esquerda"</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index cf5692b..1d55555 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"સિસ્ટમ UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"સાફ કરો"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"સૂચિમાંથી દૂર કરો"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ઍપ્લિકેશન માહિતી"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"તમારી તાજેતરની સ્ક્રીન્સ અહીં દેખાય છે"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"તાજેતરની ઍપ્લિકેશનો કાઢી નાખો."</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">વિહંગાવલોકનમાં %d સ્ક્રીન્સ</item>
- <item quantity="other">વિહંગાવલોકનમાં %d સ્ક્રીન્સ</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"કોઈ સૂચનાઓ નથી"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ચાલુ"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"નોટિફિકેશનો"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ફોન ખોલો"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"વૉઇસ સહાય ખોલો"</string>
<string name="camera_label" msgid="7261107956054836961">"કૅમેરો ખોલો"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"નવું કાર્ય લેઆઉટ પસંદ કરો"</string>
<string name="cancel" msgid="6442560571259935130">"રદ કરો"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"સહાય સંદેશનું ક્ષેત્ર"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"કન્ફર્મ કરો"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> કાઢી નાખો."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> કાઢી નાખી."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"તમામ તાજેતરની ઍપ્લિકેશનો કાઢી નાખી."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ઍપ્લિકેશન માહિતી ખોલો."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> પ્રારંભ કરી રહ્યું છે."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"સૂચના કાઢી નાખી."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"નોટિફિકેશન શેડ."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ઝડપી સેટિંગ્સ."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC અક્ષમ કરેલ છે"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC સક્ષમ કરેલ છે"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"કોઇ તાજેતરની આઇટમ્સ નથી"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"તમે બધું સાફ કર્યું"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"ઍપ્લિકેશન માહિતી"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"સ્ક્રીન પિનિંગ"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"શોધ"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> પ્રારંભ કરી શકાયું નથી."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"સુરક્ષિત મોડમાં <xliff:g id="APP">%s</xliff:g> અક્ષમ કરેલ છે."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"બધું સાફ કરો"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"વિભાજિત સ્ક્રીનનો ઉપયોગ કરવા માટે અહીં ખેંચો"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"ઍપ સ્વિચ કરવા માટે ઉપરની તરફ સ્વાઇપ કરો"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"ઍપને ઝડપથી સ્વિચ કરવા માટે જમણે ખેંચો"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"આડું વિભક્ત કરો"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ઊભું વિભક્ત કરો"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"કસ્ટમ વિભક્ત કરો"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"સ્ક્રીનને ઉપરની તરફ વિભાજિત કરો"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"સ્ક્રીનને ડાબી તરફ વિભાજિત કરો"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"સ્ક્રીનને જમણી તરફ વિભાજિત કરો"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"ઝલકને ટૉગલ કરો"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ચાર્જ થઈ ગયું"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"ચાર્જ થઈ રહ્યું છે"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"નાનું કરો"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"આ ઍપમાંથી નોટિફિકેશન બતાવવાનું ચાલુ રાખીએ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"આ નોટિફિકેશન બંધ કરી શકશો નહીં"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"આ ઍપ કૅમેરાનો ઉપયોગ કરી રહી છે."</string>
<string name="appops_microphone" msgid="741508267659494555">"આ ઍપ માઇક્રોફોનનો ઉપયોગ કરી રહી છે."</string>
<string name="appops_overlay" msgid="6165912637560323464">"આ ઍપ તમારી સ્ક્રીન પરની અન્ય ઍપની ઉપર પ્રદર્શિત થઈ રહી છે."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"ચાર્જ થાય ત્યારે ટકાવારી બતાવો (ડિફોલ્ટ)"</item>
<item msgid="3327323682209964956">"આ આઇકન બતાવશો નહીં"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"અન્ય"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"સ્પ્લિટ-સ્ક્રીન વિભાજક"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ડાબી પૂર્ણ સ્ક્રીન"</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index ac34e9a..e6004f3 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"सिस्टम यूआई"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"साफ़ करें"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"सूची से निकालें"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ऐप की जानकारी"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"आपकी हाल की स्क्रीन यहां दिखाई देती हैं"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"हाल ही के ऐप्स खारिज करें"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d स्क्रीन की खास जानकारी</item>
- <item quantity="other">%d स्क्रीन की खास जानकारी</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"कोई सूचना नहीं है"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ऑनगोइंग"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचनाएं"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"फ़ोन खोलें"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"आवाज़ से डिवाइस को इस्तेमाल करें"</string>
<string name="camera_label" msgid="7261107956054836961">"कैमरा खोलें"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"नया कार्य लेआउट चुनें"</string>
<string name="cancel" msgid="6442560571259935130">"रद्द करें"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"सहायता का मैसेज दिखाने की जगह"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"पुष्टि करें"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> को ख़ारिज करें."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> खा़रिज कर दिया गया."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"हाल ही के सभी ऐप्लिकेशन ख़ारिज कर दिए गए."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन की जानकारी खोलें."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> प्रारंभ हो रहा है."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"सूचना खारिज की गई."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"सूचना शेड."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"त्वरित सेटिंग."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"एनएफ़सी"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC बंद है"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC चालू है"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"हाल ही का कोई आइटम नहीं"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"आपने सब कुछ साफ़ कर दिया है"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"ऐप्लिकेशन की जानकारी"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"स्क्रीन पिन करना"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"सर्च"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> प्रारंभ नहीं किया जा सका."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> को सुरक्षित-मोड में बंद किया गया."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Clear all"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"स्क्रीन के दो हिस्से में बंट जाने, स्पिल्ट स्क्रीन, का इस्तेमाल करने के लिए यहां खींचें और छोडें"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"ऐप्लिकेशन बदलने के लिए ऊपर स्वाइप करें"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"ऐप्लिकेशन को झटपट स्विच करने के लिए उसे दाईं ओर खींचें और छोड़ें"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"क्षैतिज रूप से विभाजित करें"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"लम्बवत रूप से विभाजित करें"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"अपने मुताबिक बांटें"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ऊपर की ओर दो स्क्रीन बनाएं"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"बाईं ओर दो स्क्रीन बनाएं"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"दाईं ओर दो स्क्रीन बनाएं"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"खास जानकारी टॉगल करें"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज हो गई है"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"चार्ज हो रही है"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"सूचनाएं छोटी करें"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"इस ऐप्लिकेशन से जुड़ी सूचनाएं दिखाना जारी रखें?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ये सूचनाएं दिखाया जाना बंद नहीं किया जा सकता"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"यह ऐप्लिकेशन कैमरे का इस्तेमाल कर रहा है."</string>
<string name="appops_microphone" msgid="741508267659494555">"यह ऐप्लिकेशन माइक्रोफ़ोन का इस्तेमाल कर रहा है."</string>
<string name="appops_overlay" msgid="6165912637560323464">"यह ऐप्लिकेशन आपकी स्क्रीन पर इस्तेमाल हो रहे दूसरे ऐप्लिकेशन के ऊपर दिखाया जा रहा है."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"चार्ज होते समय प्रतिशत दिखाएं (डिफ़ॉल्ट)"</item>
<item msgid="3327323682209964956">"इस आइकॉन को ना दिखाएं"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"अन्य"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"विभाजित स्क्रीन विभाजक"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"बाईं स्क्रीन को पूर्ण स्क्रीन बनाएं"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 5df6999..777a9ff 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -21,15 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI sustava"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Očisti"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ukloni s popisa"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacije o aplikaciji"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ovdje se pojavljuju vaši nedavni zasloni"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Odbaci nedavne aplikacije"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d zaslon u Pregledu</item>
- <item quantity="few">%d zaslona u Pregledu</item>
- <item quantity="other">%d zaslona u Pregledu</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bez obavijesti"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"U tijeku"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obavijesti"</string>
@@ -102,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"otvaranje telefona"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"otvaranje glasovne pomoći"</string>
<string name="camera_label" msgid="7261107956054836961">"otvaranje fotoaparata"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Odaberite novi izgled zadataka"</string>
<string name="cancel" msgid="6442560571259935130">"Odustani"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Područje poruke za pomoć"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Potvrdi"</string>
@@ -189,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Odbacivanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikacija <xliff:g id="APP">%s</xliff:g> odbačena je."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Odbačene su sve nedavne aplikacije."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Otvaranje informacija o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Pokretanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Obavijest je odbačena."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Zaslon obavijesti."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Brze postavke."</string>
@@ -358,23 +343,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC je onemogućen"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC je omogućen"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nema nedavnih stavki"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Izbrisali ste sve"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"prikvačivanje zaslona"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraži"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikacija <xliff:g id="APP">%s</xliff:g> nije pokrenuta."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplikacija <xliff:g id="APP">%s</xliff:g> onemogućena je u sigurnom načinu."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Izbriši sve"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Povucite ovdje da biste upotrebljavali podijeljeni zaslon"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Prijeđite prstom prema gore da biste promijenili aplikaciju"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Povucite udesno da biste brzo promijenili aplikaciju"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podijeli vodoravno"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podijeli okomito"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Podijeli prilagođeno"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Podijeli zaslon na vrhu"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Podijeli zaslon slijeva"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Podijeli zaslon zdesna"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Uključivanje/isključivanje pregleda"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjeno"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Punjenje"</string>
@@ -622,6 +592,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimiziraj"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Želite li da se obavijesti te aplikacije nastave prikazivati?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Te se obavijesti ne mogu isključiti"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"putem aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Ova aplikacija upotrebljava kameru."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ova aplikacija upotrebljava mikrofon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ova se aplikacija prikazuje preko drugih aplikacija na zaslonu."</string>
@@ -758,6 +729,7 @@
<item msgid="2139628951880142927">"Prikazuj postotak tijekom punjenja (zadano)"</item>
<item msgid="3327323682209964956">"Ne prikazuj tu ikonu"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Prikaži ikone obavijesti niskog prioriteta"</string>
<string name="other" msgid="4060683095962566764">"Ostalo"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Razdjelnik podijeljenog zaslona"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Lijevi zaslon u cijeli zaslon"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index f09a8b3..16db000 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Rendszer UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Törlés"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eltávolítás a listából"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Alkalmazásinformáció"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"A legutóbbi képernyők itt jelennek meg"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Újabb alkalmazások elvetése"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d képernyő áttekintés alatt</item>
- <item quantity="one">1 képernyő áttekintés alatt</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nincs értesítés"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Folyamatban van"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Értesítések"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"telefon megnyitása"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"hangsegéd megnyitása"</string>
<string name="camera_label" msgid="7261107956054836961">"kamera megnyitása"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Új feladatelrendezés kiválasztása"</string>
<string name="cancel" msgid="6442560571259935130">"Mégse"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Súgószöveg területe"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Megerősítés"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"A(z) <xliff:g id="APP">%s</xliff:g> elvetése."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> eltávolítva."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Az összes alkalmazás eltávolítva a nemrég használtak közül."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"A(z) <xliff:g id="APP">%s</xliff:g> alkalmazás adatainak megnyitása."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"A(z) <xliff:g id="APP">%s</xliff:g> indítása."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Értesítés elvetve."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Értesítési felület."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Gyorsbeállítások."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"Az NFC ki van kapcsolva"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"Az NFC be van kapcsolva"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nincsenek mostanában használt elemek"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Mindent törölt"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Az alkalmazás adatai"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"képernyő rögzítése"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"keresés"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Nem lehet elindítani a következőt: <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"A(z) <xliff:g id="APP">%s</xliff:g> csökkentett módban ki van kapcsolva."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Összes törlése"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Húzza ide az osztott képernyő használatához"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Váltás az alkalmazások között felfelé csúsztatással"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Húzza jobbra az ujját az alkalmazások közötti gyors váltáshoz"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Osztott vízszintes"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Osztott függőleges"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Osztott egyéni"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Osztott képernyő felülre"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Osztott képernyő balra"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Osztott képernyő jobbra"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Áttekintés be- és kikapcsolása"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Feltöltve"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Töltés"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Kis méret"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Továbbra is megjelenjenek az alkalmazás értesítései?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Ezeket az értesítéseket nem lehet kikapcsolni"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Ez az alkalmazás használja a kamerát."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ez az alkalmazás használja a mikrofont."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ez az alkalmazás a képernyőn lévő egyéb alkalmazások előtt jelenik meg."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Százalékos érték töltés közben látható (alapértelmezett)"</item>
<item msgid="3327323682209964956">"Ne jelenjen meg ez az ikon"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Egyéb"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Elválasztó az osztott nézetben"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Bal oldali teljes képernyőre"</string>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 8973ecf..c1ee1d7 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Համակարգային UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Մաքրել"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Հեռացնել ցանկից"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Տեղեկություններ ծրագրի մասին"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ձեր վերջին էկրանները տեսանելի են այստեղ"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Անտեսել վերջին ծրագրերը"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">Համատեսքում ցուցադրված է %d էկրան</item>
- <item quantity="other">Համատեսքում ցուցադրված է %d էկրան</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ծանուցումներ չկան"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ընթացիկ"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ծանուցումներ"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"բացել հեռախոսը"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"բացեք ձայնային հուշումը"</string>
<string name="camera_label" msgid="7261107956054836961">"բացել ֆոտոխցիկը"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Ընտրել առաջադրանքի նոր դասավորություն"</string>
<string name="cancel" msgid="6442560571259935130">"Չեղարկել"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Օգնության հաղորդագրության դաշտ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Հաստատել"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Անտեսել <xliff:g id="APP">%s</xliff:g>-ը:"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>-ը անտեսված է:"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Բոլոր վերջին հավելվածները հեռացվել են ցուցակից:"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Բացել <xliff:g id="APP">%s</xliff:g> հավելվածի մասին տեղեկությունները"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Մեկնարկել <xliff:g id="APP">%s</xliff:g>-ը:"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Ծանուցումը անտեսվեց:"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Ծանուցումների վահանակ:"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Արագ կարգավորումներ:"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC-ն անջատված է"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC-ն միացված է"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Վերջին տարրեր չկան"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Դուք ջնջել եք ամենը"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Հավելվածի մասին"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"էկրանի ամրացում"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"որոնել"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Հնարավոր չէ գործարկել <xliff:g id="APP">%s</xliff:g>-ը:"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> հավելվածը անվտանգ ռեժիմում անջատված է:"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Մաքրել բոլորը"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Քաշեք այստեղ՝ էկրանի տրոհումն օգտագործելու համար"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Սահեցրեք վերև՝ մյուս հավելվածին անցնելու համար"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Քաշեք աջ՝ հավելվածների միջև անցնելու համար"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Հորիզոնական տրոհում"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Ուղղահայաց տրոհում"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Հատուկ տրոհում"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Տրոհել էկրանը վերևից"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Տրոհել էկրանը ձախից"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Տրոհել էկրանն աջից"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Միացնել/անջատել համատեսքը"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Լիցքավորված է"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Լիցքավորվում է"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Ծալել"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Ցուցադրե՞լ ծանուցումներ այս հավելվածից։"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Այս ծանուցումները հնարավոր չէ անջատել"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Այս հավելվածն օգտագործում է տեսախցիկը:"</string>
<string name="appops_microphone" msgid="741508267659494555">"Այս հավելվածն օգտագործում է խոսափողը:"</string>
<string name="appops_overlay" msgid="6165912637560323464">"Այս հավելվածը ցուցադրվում է մյուս հավելվածների վրայից:"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Ցույց տալ տոկոսը լիցքավորելու ժամանակ (կանխադրված է)"</item>
<item msgid="3327323682209964956">"Ցույց չտալ այս պատկերակը"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Այլ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Տրոհված էկրանի բաժանիչ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Ձախ էկրանը՝ լիաէկրան"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 2e3040c..1cd4d30 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Sistem UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Bersihkan"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Hapus dari daftar"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info aplikasi"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Layar terkini Anda muncul di sini"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Tutup aplikasi terbaru"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d layar dalam Ringkasan</item>
- <item quantity="one">1 layar dalam Ringkasan</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tidak ada notifikasi"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Berkelanjutan"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifikasi"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"buka ponsel"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"buka bantuan suara"</string>
<string name="camera_label" msgid="7261107956054836961">"buka kamera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Pilih tata letak tugas baru"</string>
<string name="cancel" msgid="6442560571259935130">"Batal"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Area pesan bantuan"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Konfirmasi"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Menyingkirkan <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> disingkirkan."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Semua aplikasi terbaru telah ditutup."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Buka info aplikasi <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Memulai <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notifikasi disingkirkan."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bayangan pemberitahuan."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Setelan cepat."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC dinonaktifkan"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC diaktifkan"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Tidak ada item baru-baru ini"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Anda sudah menghapus semua"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Info Aplikasi"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pin ke layar"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"telusuri"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Tidak dapat memulai <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> dinonaktifkan dalam mode aman."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Hapus semua"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Tarik ke sini untuk menggunakan layar terpisah"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Geser ke atas untuk beralih aplikasi"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Tarik ke kanan untuk beralih aplikasi dengan cepat"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Pisahkan Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Pisahkan Vertikal"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Pisahkan Khusus"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Pisahkan layar ke atas"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Pisahkan layar ke kiri"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Pisahkan layar ke kanan"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Aktifkan Ringkasan"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Terisi"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Mengisi daya"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Perkecil"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Terus tampilkan notifikasi dari aplikasi ini?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Notifikasi ini tidak dapat dinonaktifkan"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"melalui <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Aplikasi ini sedang menggunakan kamera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Aplikasi ini sedang menggunakan mikrofon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Aplikasi ini ditampilkan di atas aplikasi lain di layar."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Tampilkan persentase saat mengisi daya (default)"</item>
<item msgid="3327323682209964956">"Jangan tampilkan ikon ini"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Tampilkan ikon notifikasi prioritas rendah"</string>
<string name="other" msgid="4060683095962566764">"Lainnya"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Pembagi layar terpisah"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Layar penuh di kiri"</string>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index fd15fc3..92d86ae 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Kerfisviðmót"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Hreinsa"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Fjarlægja af lista"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Upplýsingar um forrit"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Nýlegar skjámyndir birtast hér"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Hunsa nýleg forrit"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d skjámynd í yfirliti</item>
- <item quantity="other">%d skjámyndir í yfirliti</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Engar tilkynningar"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Áframhaldandi"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Tilkynningar"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"opna síma"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"opna raddaðstoð"</string>
<string name="camera_label" msgid="7261107956054836961">"opna myndavél"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Velja nýtt útlit verkefna"</string>
<string name="cancel" msgid="6442560571259935130">"Hætta við"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Svæði hjálparskilaboða"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Staðfesta"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Hunsa <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> vísað frá."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Öll nýleg forrit fjarlægð."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Opna forritsupplýsingar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Ræsir <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Tilkynningu lokað."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Tilkynningasvæði."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Flýtistillingar."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"Slökkt á NFC"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"Kveikt á NFC"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Engin nýleg atriði"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Þú hefur hreinsað allt"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Forritsupplýsingar"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"skjáfesting"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"leita"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Ekki var hægt að ræsa <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Slökkt er á <xliff:g id="APP">%s</xliff:g> í öruggri stillingu."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Hreinsa allt"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Dragðu hingað til að skipta skjánum"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Strjúktu upp til að skipta á milli forrita"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Dragðu til hægri til að skipta hratt á milli forrita"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Lárétt skipting"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Lóðrétt skipting"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Sérsniðin skipting"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Skipta skjá að ofanverðu"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Skipta skjá til vinstri"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Skipta skjá til hægri"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Kveikja/slökkva á yfirliti"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Fullhlaðin"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Í hleðslu"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minnka"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Sýna áfram tilkynningar frá þessu forriti?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Ekki er hægt að slökkva á þessum tilkynningum"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"með <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Þetta forrit er að nota myndavélina."</string>
<string name="appops_microphone" msgid="741508267659494555">"Þetta forrit er að nota hljóðnemann."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Þetta forrit er að birta efni yfir öðrum forritum á skjánum þínum."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Sýna hlutfall meðan á hleðslu stendur (sjálfgefið)"</item>
<item msgid="3327323682209964956">"Ekki sýna þetta tákn"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Sýna tákn fyrir tilkynningar með litlum forgangi"</string>
<string name="other" msgid="4060683095962566764">"Annað"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Skjáskipting"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Vinstri á öllum skjánum"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 37fabb8..3cac6c9 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI sistema"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Cancella"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Rimuovi dall\'elenco"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informazioni applicazione"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Le tue schermate recenti vengono visualizzate in questa sezione"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignora app recenti"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d schermate in Panoramica</item>
- <item quantity="one">1 schermata in Panoramica</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nessuna notifica"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"In corso"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifiche"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"apri telefono"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"apri Voice Assist"</string>
<string name="camera_label" msgid="7261107956054836961">"apri fotocamera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Seleziona un nuovo layout per le attività"</string>
<string name="cancel" msgid="6442560571259935130">"Annulla"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Area dei messaggi di assistenza"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confermo"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Elimina <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> eliminata."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Tutte le applicazioni recenti sono state rimosse."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Mostra informazioni sull\'applicazione <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Avvio di <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notifica eliminata."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Area notifiche."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Impostazioni rapide."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC non attiva"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC attiva"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nessun elemento recente"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Hai cancellato tutto"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informazioni sull\'applicazione"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"blocco su schermo"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossibile avviare <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"L\'app <xliff:g id="APP">%s</xliff:g> è stata disattivata in modalità provvisoria."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Cancella tutto"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Trascina qui per utilizzare la modalità Schermo diviso"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Scorri verso l\'alto per passare ad altre app"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Trascina verso destra per cambiare velocemente app"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisione in orizzontale"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisione in verticale"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisione personalizzata"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Schermo diviso in alto"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Schermo diviso a sinistra"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Schermo diviso a destra"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Attiva/disattiva la panoramica"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carica"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"In carica"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Riduci a icona"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuare a ricevere notifiche da questa app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Queste notifiche non possono essere disattivate"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"tramite <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Questa app sta utilizzando la fotocamera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Questa app sta utilizzando il microfono."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Questa app è visualizzata sopra altre app sullo schermo."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Mostra la percentuale quando in carica (opzione predefinita)"</item>
<item msgid="3327323682209964956">"Non mostrare questa icona"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Mostra icone di notifiche con priorità bassa"</string>
<string name="other" msgid="4060683095962566764">"Altro"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Strumento per schermo diviso"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Schermata sinistra a schermo intero"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 0d60e6c..a65b917 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -21,17 +21,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"ממשק משתמש של המערכת"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"ניקוי"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"הסר מהרשימה"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"פרטי אפליקציה"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"המסכים האחרונים מופיעים כאן"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"סגור אפליקציות אחרונות"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="two">%d מסכים ב’סקירה‘</item>
- <item quantity="many">%d מסכים ב’סקירה‘</item>
- <item quantity="other">%d מסכים ב’סקירה‘</item>
- <item quantity="one">מסך אחד ב’סקירה‘</item>
- </plurals>
- <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"אין הודעות"</string>
+ <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"אין התראות"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"מתמשך"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"התראות"</string>
<string name="battery_low_title" msgid="9187898087363540349">"ייתכן שהסוללה תתרוקן בקרוב"</string>
@@ -103,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"פתח את הטלפון"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"פתח את המסייע הקולי"</string>
<string name="camera_label" msgid="7261107956054836961">"פתח את המצלמה"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"בחר פריסה חדשה להצגת משימות"</string>
<string name="cancel" msgid="6442560571259935130">"ביטול"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"אזור הודעת עזרה"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"אישור"</string>
@@ -179,7 +168,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"טעינת סוללה, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>%%."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"הגדרות מערכת"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"התראות"</string>
- <string name="accessibility_overflow_action" msgid="5681882033274783311">"הצגת כל ההודעות"</string>
+ <string name="accessibility_overflow_action" msgid="5681882033274783311">"הצגת כל ההתראות"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"מחיקת התראה"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS מופעל."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"השגת GPS."</string>
@@ -190,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"סגור את <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> נדחה."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"כל האפליקציות האחרונות נסגרו."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"פתח מידע על האפליקציה <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"מפעיל את <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"התראה נדחתה."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"לוח התראות."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"הגדרות מהירות."</string>
@@ -263,10 +247,10 @@
<string name="notification_group_overflow_indicator" msgid="1863231301642314183">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="notification_group_overflow_indicator_ambient" msgid="879560382990377886">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>, +<xliff:g id="OVERFLOW">%2$s</xliff:g>"</string>
<plurals name="notification_group_overflow_description" formatted="false" msgid="4579313201268495404">
- <item quantity="two">יש בפנים עוד <xliff:g id="NUMBER_1">%s</xliff:g> הודעות.</item>
- <item quantity="many">יש בפנים עוד <xliff:g id="NUMBER_1">%s</xliff:g> הודעות.</item>
- <item quantity="other">יש בפנים עוד <xliff:g id="NUMBER_1">%s</xliff:g> הודעות.</item>
- <item quantity="one">יש בפנים עוד הודעה <xliff:g id="NUMBER_0">%s</xliff:g>.</item>
+ <item quantity="two">עוד <xliff:g id="NUMBER_1">%s</xliff:g> התראות נוספות.</item>
+ <item quantity="many">עוד <xliff:g id="NUMBER_1">%s</xliff:g> התראות.</item>
+ <item quantity="other">עוד <xliff:g id="NUMBER_1">%s</xliff:g> התראות נוספות.</item>
+ <item quantity="one">יש התראה נוספת.<xliff:g id="NUMBER_0">%s</xliff:g>.</item>
</plurals>
<string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"הגדרת התראות"</string>
<string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"הגדרות <xliff:g id="APP_NAME">%s</xliff:g>"</string>
@@ -361,23 +345,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC מושבת"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC מופעל"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"אין פריטים אחרונים"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"מחקת הכול"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"מידע על האפליקציה"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"הצמדת מסך"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"חיפוש"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"לא ניתן היה להפעיל את <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> מושבת במצב בטוח."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"נקה הכל"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"גרור לכאן כדי להשתמש במסך מפוצל"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"יש להחליק מעלה כדי להחליף אפליקציות"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"יש לגרור ימינה כדי לעבור במהירות בין אפליקציות"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"פיצול אופקי"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"פיצול אנכי"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"פיצול מותאם אישית"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"פיצול מסך למעלה"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"פיצול מסך לשמאל"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"פיצול מסך לימין"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"החלפת מצב של מסכים אחרונים"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"טעון"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"טוען"</string>
@@ -514,7 +483,7 @@
<string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"הנעילה בוטלה על ידי <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="keyguard_indication_trust_managed" msgid="8319646760022357585">"<xliff:g id="TRUST_AGENT">%1$s</xliff:g> פועל"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"המכשיר יישאר נעול עד שתבטל את נעילתו באופן ידני"</string>
- <string name="hidden_notifications_title" msgid="7139628534207443290">"קבל הודעות מהר יותר"</string>
+ <string name="hidden_notifications_title" msgid="7139628534207443290">"קבלה מהירה של התראות"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"צפה בהן לפני שתבטל נעילה"</string>
<string name="hidden_notifications_cancel" msgid="3690709735122344913">"לא, תודה"</string>
<string name="hidden_notifications_setup" msgid="41079514801976810">"הגדר"</string>
@@ -608,14 +577,14 @@
<string name="enable_bluetooth_title" msgid="5027037706500635269">"האם להפעיל את ה-Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"כדי לחבר את המקלדת לטאבלט, תחילה עליך להפעיל את ה-Bluetooth."</string>
<string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"הפעל"</string>
- <string name="show_silently" msgid="6841966539811264192">"הצג הודעות בלי להשמיע צליל"</string>
- <string name="block" msgid="2734508760962682611">"חסום את כל ההודעות"</string>
+ <string name="show_silently" msgid="6841966539811264192">"הצגת התראות בלי להשמיע צליל"</string>
+ <string name="block" msgid="2734508760962682611">"חסימת כל ההודעות"</string>
<string name="do_not_silence" msgid="6878060322594892441">"לא להשתיק"</string>
<string name="do_not_silence_block" msgid="4070647971382232311">"לא להשתיק או לחסום"</string>
<string name="tuner_full_importance_settings" msgid="3207312268609236827">"פקדים של הודעות הפעלה"</string>
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"פועל"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"כבוי"</string>
- <string name="power_notification_controls_description" msgid="4372459941671353358">"בעזרת פקדים של התראות הפעלה, אפשר להגדיר רמת חשיבות מ-0 עד 5 להתראות אפליקציה. \n\n"<b>"רמה 5"</b>" \n- הצגה בראש רשימת ההודעות \n- אפשר הפרעה במסך מלא \n- תמיד אפשר הצצה \n\n"<b>"רמה 4"</b>" \n- מנע הפרעה במסך מלא \n- תמיד אפשר הצצה \n\n"<b>"רמה 3"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n\n"<b>"רמה 2"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n- אף פעם אל תאפשר קול ורטט \n\n"<b>"רמה 1"</b>" \n- מניעת הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n- אף פעם אל תאפשר קול ורטט \n- הסתרה ממסך הנעילה ומשורת הסטטוס \n- הצגה בתחתית רשימת ההתראות \n\n"<b>"רמה 0"</b>" \n- חסימה את כל ההתראות מהאפליקציה"</string>
+ <string name="power_notification_controls_description" msgid="4372459941671353358">"בעזרת פקדים של התראות הפעלה, אפשר להגדיר רמת חשיבות מ-0 עד 5 להתראות אפליקציה. \n\n"<b>"רמה 5"</b>" \n- הצגה בראש רשימת ההתראות \n- אפשר הפרעה במסך מלא \n- תמיד אפשר הצצה \n\n"<b>"רמה 4"</b>" \n- מנע הפרעה במסך מלא \n- תמיד אפשר הצצה \n\n"<b>"רמה 3"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n\n"<b>"רמה 2"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n- אף פעם אל תאפשר קול ורטט \n\n"<b>"רמה 1"</b>" \n- מניעת הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n- אף פעם אל תאפשר קול ורטט \n- הסתרה ממסך הנעילה ומשורת הסטטוס \n- הצגה בתחתית רשימת ההתראות \n\n"<b>"רמה 0"</b>" \n- חסימה את כל ההתראות מהאפליקציה"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"התראות"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"ההודעות האלה לא יוצגו לך יותר"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"ההודעות האלה ימוזערו"</string>
@@ -626,6 +595,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"מזעור"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"שנמשיך להציג לך הודעות מהאפליקציה הזאת?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"לא ניתן לכבות את ההודעות האלה"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"האפליקציה הזו משתמשת במצלמה."</string>
<string name="appops_microphone" msgid="741508267659494555">"האפליקציה הזו משתמשת במיקרופון."</string>
<string name="appops_overlay" msgid="6165912637560323464">"האפליקציה הזו מוצגת מעל אפליקציות אחרות במסך."</string>
@@ -644,7 +615,7 @@
<string name="inline_undo" msgid="558916737624706010">"ביטול"</string>
<string name="notification_menu_accessibility" msgid="2046162834248888553">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
<string name="notification_menu_gear_description" msgid="2204480013726775108">"בקרת התראות"</string>
- <string name="notification_menu_snooze_description" msgid="3653669438131034525">"אפשרויות של דחיית הודעות לטיפול בהמשך"</string>
+ <string name="notification_menu_snooze_description" msgid="3653669438131034525">"אפשרויות של דחיית התראות לטיפול בהמשך"</string>
<string name="notification_menu_snooze_action" msgid="1112254519029621372">"הפעלת נודניק"</string>
<string name="snooze_undo" msgid="6074877317002985129">"ביטול"</string>
<string name="snoozed_for_time" msgid="2390718332980204462">"נדחה לטיפול בעוד <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
@@ -764,6 +735,8 @@
<item msgid="2139628951880142927">"הצג באחוזים בזמן טעינה (ברירת מחדל)"</item>
<item msgid="3327323682209964956">"אל תציג את הסמל הזה"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"אחר"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"מחלק מסך מפוצל"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"מסך שמאלי מלא"</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index c651f9e..6617fdd 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"システムUI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"通知を消去"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"リストから削除"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"アプリ情報"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"ここに最近の画面が表示されます"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"最近使ったアプリをクリア"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">[最近]に%d個の画面があります</item>
- <item quantity="one">[最近]に1個の画面があります</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"通知なし"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"実行中"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"電話を起動"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"音声アシストを開く"</string>
<string name="camera_label" msgid="7261107956054836961">"カメラを起動"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"新しいタスクレイアウトの選択"</string>
<string name="cancel" msgid="6442560571259935130">"キャンセル"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"ヘルプ メッセージ領域"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"確認"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>を削除します。"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>は削除されました。"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"最近のアプリケーションをすべて消去しました。"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"「<xliff:g id="APP">%s</xliff:g>」のアプリ情報を開きます。"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>を開始しています。"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"通知が削除されました。"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"通知シェード"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"クイック設定"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC は無効です"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC は有効です"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"最近のタスクはありません"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"すべてのタスクを消去しました"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"アプリ情報"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"画面固定"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"検索"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>を開始できません。"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"「<xliff:g id="APP">%s</xliff:g>」はセーフモードでは無効になります。"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"すべて消去"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"分割画面を使用するにはここにドラッグします"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"アプリを切り替えるには上にスワイプ"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"右にドラッグするとアプリを素早く切り替えることができます"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"横に分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"縦に分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"分割(カスタム)"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"画面を上に分割"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"画面を左に分割"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"画面を右に分割"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"概要を切り替え"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"充電が完了しました"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"充電しています"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"このアプリからの通知を今後も表示しますか?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"この通知を OFF にすることはできません"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"このアプリはカメラを使用しています。"</string>
<string name="appops_microphone" msgid="741508267659494555">"このアプリはマイクを使用しています。"</string>
<string name="appops_overlay" msgid="6165912637560323464">"このアプリは画面上で他のアプリの上に重ねて表示されます。"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"変更時に割合を表示(デフォルト)"</item>
<item msgid="3327323682209964956">"このアイコンを表示しない"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"その他"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"分割画面の分割線"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"左全画面"</string>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index f91ffb0..359e689 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"სისტემის UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"გასუფთავება"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"სიიდან ამოშლა"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"აპის შესახებ"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"თქვენი ბოლო ეკრანები აქ გამოჩნდება"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ბოლო აპების გაუქმება"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d ეკრანი მიმოხილვაში</item>
- <item quantity="one">1 ეკრანი მიმოხილვაში</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"შეტყობინებები არ არის."</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"მიმდინარე"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"შეტყობინებები"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ტელეფონის გახსნა"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ხმოვანი დახმარების გახსნა"</string>
<string name="camera_label" msgid="7261107956054836961">"კამერის გახსნა"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"ახალი ამოცანის განლაგების არჩევა"</string>
<string name="cancel" msgid="6442560571259935130">"გაუქმება"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"დამხმარე შეტყობინების არე"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"დადასტურება"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>-ის უგულებელყოფა."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ამოშლილია სიიდან."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ყველა ბოლო აპლიკაცია გაუქმდა."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> აპლიკაციის ინფორმაციის გახსნა."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> იწყება."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"შეტყობინება წაიშალა."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"შეტყობინებების ფარდა"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"სწრაფი პარამეტრები"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC გათიშულია"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC ჩართულია"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"ბოლოს გამოყენებული ერთეულები არ არის"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ყველაფერი გასუფთავდა"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"აპლიკაციის შესახებ"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ეკრანზე ჩამაგრება"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"ძიება"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>-ის გამოძახება ვერ მოხერხდა."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> გათიშულია უსაფრთხო რეჟიმში."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"ყველას გასუფთავება"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"ეკრანის გასაყოფად, ჩავლებით გადმოიტანეთ აქ"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"გადაფურცლეთ ზემოთ აპების გადასართავად"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"აპების სწრაფად გადასართავად ჩავლებით გადაიტანეთ მარჯვნივ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ჰორიზონტალური გაყოფა"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ვერტიკალური გაყოფა"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ინდივიდუალური გაყობა"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ეკრანის გაყოფა ზემოთ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ეკრანის გაყოფა მარცხნივ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ეკრანის გაყოფა მარჯვნივ"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"მიმოხილვის გადართვა"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"დატენილია"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"მიმდინარეობს დატენვა"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"ჩაკეცვა"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"გაგრძელდეს შეტყობინებათა ჩვენება ამ აპიდან?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ამ შეტყობინებათა გამორთვა ვერ მოხერხდება"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"ეს აპი იყენებს კამერას."</string>
<string name="appops_microphone" msgid="741508267659494555">"ეს აპი იყენებს მიკროფონს."</string>
<string name="appops_overlay" msgid="6165912637560323464">"ეს აპი თქვენს ეკრანზე ფარავს სხვა აპებს."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"პროცენტულობის დატენვისას ჩვენება (ნაგულისხმევი)"</item>
<item msgid="3327323682209964956">"აღარ მაჩვენო ეს ხატულა"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"სხვა"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"გაყოფილი ეკრანის რეჟიმის გამყოფი"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"მარცხენა ნაწილის სრულ ეკრანზე გაშლა"</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index b79ea7b..6598bf0 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Жүйе интерфейсі"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Тазалау"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Тізімнен алу"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Қолданба ақпараты"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Мұнда жақындағы экрандар көрсетіледі"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Жуықта қолданылған қолданбаларды қоспау"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">«Шолу» ішінде %d экран</item>
- <item quantity="one">«Шолу» ішінде 1 экран</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Хабарлар жоқ"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ағымдағы"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Хабарлар"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"телефонды ашу"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ашық дауыс көмекшісі"</string>
<string name="camera_label" msgid="7261107956054836961">"камераны ашу"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Жаңа тапсырма пішімін таңдау"</string>
<string name="cancel" msgid="6442560571259935130">"Бас тарту"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Анықтама хабары аумағы"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Растау"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> қолданбасынан бас тарту."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> алынып тасталған."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Барлық жақындағы қабылданбаған қолданбалар."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> қолданбасы туралы ақпаратты ашады."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> іске қосылуда."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Хабар алынып тасталды."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Хабарландыру тақтасы"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Жылдам параметрлер."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC өшірулі"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC қосулы"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Жақындағы элементтер жоқ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Сіз барлығын өшірдіңіз"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Қолданба туралы ақпарат"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"экранды бекіту"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"іздеу"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> іске қосу мүмкін болмады."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> қауіпсіз режимде өшіріледі."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Барлығын тазалау"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Бөлінген экранды пайдалану үшін осында сүйреңіз"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Қолданбалар арасында ауысу үшін жоғары сырғытыңыз"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Қолданбаларды жылдам ауыстырып қосу үшін оңға қарай сүйреңіз"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Бөлінген көлденең"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Бөлінген тік"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Бөлінген теңшелетін"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Экранды жоғарыға қарай бөлу"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Экранды солға қарай бөлу"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Экранды оңға қарай бөлу"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Шолуды қосу/өшіру"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Зарядталды"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарядталуда"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Жасыру"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Осы қолданбаның хабарландырулары көрсетілсін бе?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Хабарландыруларды өшіру мүмкін емес"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Бұл қолданба камераны пайдалануда."</string>
<string name="appops_microphone" msgid="741508267659494555">"Бұл қолданба микрофонды пайдалануда."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Бұл қолданба экранда басқа қолданбалардың үстінен көрсетіліп тұр."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Зарядтау кезінде пайызды көрсету (әдепкі)"</item>
<item msgid="3327323682209964956">"Бұл белгішені көрсетпеу"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Басқа"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Бөлінген экран бөлгіші"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Сол жағын толық экранға шығару"</string>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 0731a5e..8545ad6 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"ចំណុចប្រទាក់ប្រព័ន្ធ"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"សម្អាត"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"យកចេញពីបញ្ជី"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ព័ត៌មានកម្មវិធី"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"អេក្រង់បច្ចុប្បន្នរបស់អ្នកបង្ហាញនៅទីនេះ"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"បដិសេធកម្មវិធីថ្មីៗ"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">អេក្រង់ %d ក្នុងទិដ្ឋភាព</item>
- <item quantity="one">អេក្រង់ 1 ក្នុងទិដ្ឋភាព</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"គ្មានការជូនដំណឹង"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"បន្ត"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"ការជូនដំណឹង"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"បើកទូរស័ព្ទ"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"បើកជំនួយសំឡេង"</string>
<string name="camera_label" msgid="7261107956054836961">"បើកម៉ាស៊ីនថត"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"ជ្រើសប្លង់ភារកិច្ចថ្មី"</string>
<string name="cancel" msgid="6442560571259935130">"បោះបង់"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"តំបន់សារជំនួយ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"បញ្ជាក់"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"បោះបង់ <xliff:g id="APP">%s</xliff:g> ។"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> បដិសេធ។"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"កម្មវិធីថ្មីៗទាំងអស់ត្រូវបានបោះបង់។"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"បើកព័ត៌មានកម្មវិធី <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"ចាប់ផ្ដើម <xliff:g id="APP">%s</xliff:g> ។"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"បានបដិសេធការជូនដំណឹង"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ពណ៌ការជូនដំណឹង"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ការកំណត់រហ័ស។"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"បានបិទ NFC"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"បានបើក NFC"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"មិនមានធាតុថ្មីៗទេ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"អ្នកបានជម្រះអ្វីៗទាំងអស់"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"ព័ត៌មានកម្មវិធី"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ការភ្ជាប់អេក្រង់"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"ស្វែងរក"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"មិនអាចចាប់ផ្ដើម <xliff:g id="APP">%s</xliff:g> ទេ។"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ត្រូវបានបិទដំណើរការក្នុងរបៀបសុវត្ថិភាព"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"សម្អាតទាំងអស់"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"អូសនៅទីនេះដើម្បីប្រើអេក្រង់បំបែក"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"អូសឡើងលើដើម្បីប្តូរកម្មវិធី"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"អូសទៅស្ដាំដើម្បីប្ដូរកម្មវិធីបានរហ័ស"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"បំបែកផ្តេក"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"បំបែកបញ្ឈរ"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"បំបែកផ្ទាល់ខ្លួន"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"បំបែកអេក្រង់ទៅខាងលើ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"បំបែកអេក្រង់ទៅខាងឆ្វេង"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"បំបែកអេក្រង់ទៅខាងស្តាំ"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"បិទ/បើកទិដ្ឋភាពរួម"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"បានបញ្ចូលថ្ម"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"កំពុងសាកថ្ម"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"បង្រួម"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"បន្តបង្ហាញការជូនដំណឹងពីកម្មវិធីនេះ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"មិនអាចបិទការជូនដំណឹងទាំងនេះបានទេ"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"កម្មវិធីនេះកំពុងប្រើកាមេរ៉ា។"</string>
<string name="appops_microphone" msgid="741508267659494555">"កម្មវិធីនេះកំពុងប្រើមីក្រូហ្វូន។"</string>
<string name="appops_overlay" msgid="6165912637560323464">"កម្មវិធីនេះកំពុងបង្ហាញពីលើកម្មវិធីផ្សេងទៀតនៅលើអេក្រង់របស់អ្នក។"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"បង្ហាញភាគរយនៅពេលសាកថ្ម (លំនាំដើម)"</item>
<item msgid="3327323682209964956">"កុំបង្ហាញរូបតំណាងនេះ"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"ផ្សេងៗ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"កម្មវិធីចែកអេក្រង់បំបែក"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"អេក្រង់ពេញខាងឆ្វេង"</string>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index c4c642f..ccbb31e 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"ಸಿಸ್ಟಂ UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"ತೆರವುಮಾಡು"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ಪಟ್ಟಿಯಿಂದ ತೆಗೆದುಹಾಕು"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"ನಿಮ್ಮ ಇತ್ತೀಚಿನ ಪರದೆಗಳು ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ಇತ್ತೀಚಿನ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ವಜಾಗೊಳಿಸಿ"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">ಸಮಗ್ರ ನೋಟದಲ್ಲಿರುವ %d ಪರದೆಗಳು</item>
- <item quantity="other">ಸಮಗ್ರ ನೋಟದಲ್ಲಿರುವ %d ಪರದೆಗಳು</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ಯಾವುದೇ ಅಧಿಸೂಚನೆಗಳಿಲ್ಲ"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ಚಾಲ್ತಿಯಲ್ಲಿರುವ"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"ಅಧಿಸೂಚನೆಗಳು"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ಫೋನ್ ತೆರೆಯಿರಿ"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ಧ್ವನಿ ಸಹಾಯಕವನ್ನು ತೆರೆ"</string>
<string name="camera_label" msgid="7261107956054836961">"ಕ್ಯಾಮರಾ ತೆರೆಯಿರಿ"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"ಹೊಸ ಕಾರ್ಯ ವಿನ್ಯಾಸವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
<string name="cancel" msgid="6442560571259935130">"ರದ್ದುಮಾಡಿ"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"ಸಹಾಯ ಸಂದೇಶ ಪ್ರದೇಶ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"ದೃಢೀಕರಿಸಿ"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸಿ."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ಇತ್ತೀಚಿನ ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ ತೆರೆಯಿರಿ."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"ಅಧಿಸೂಚನೆ ವಜಾಗೊಂಡಿದೆ."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ಅಧಿಸೂಚನೆಯ ಛಾಯೆ."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳು."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದೆ"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC ಸಕ್ರಿಯಗೊಂಡಿದೆ"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"ಯಾವುದೇ ಇತ್ತೀಚಿನ ಐಟಂಗಳಿಲ್ಲ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ನೀವು ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿರುವಿರಿ"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ಸ್ಕ್ರೀನ್ ಪಿನ್ನಿಂಗ್"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"ಹುಡುಕಾಟ"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ಪ್ರಾರಂಭಿಸಲು ಸಾದ್ಯವಿಲ್ಲ."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ಅನ್ನು ಸುರಕ್ಷಿತ ಮೋಡ್ನಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿ"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"ವಿಭಜಿತ ಪರದೆಯನ್ನು ಬಳಸಲು ಇಲ್ಲಿ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸ್ವೈಪ್ ಮಾಡಿ"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಬದಲಿಸಲು ತ್ವರಿತವಾಗಿ ಬಲಕ್ಕೆ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ಅಡ್ಡಲಾಗಿ ವಿಭಜಿಸಿದ"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ಲಂಬವಾಗಿ ವಿಭಜಿಸಿದ"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ಕಸ್ಟಮ್ ವಿಭಜಿಸಿದ"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ಮೇಲ್ಭಾಗಕ್ಕೆ ಪರದೆಯನ್ನು ವಿಭಜಿಸಿ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ಎಡಕ್ಕೆ ಪರದೆಯನ್ನು ವಿಭಜಿಸಿ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ಬಲಕ್ಕೆ ಪರದೆಯನ್ನು ವಿಭಜಿಸಿ"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"ಟಾಗಲ್ ನ ಅವಲೋಕನ"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ಚಾರ್ಜ್ ಆಗಿದೆ"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"ಕಿರಿದುಗೊಳಿಸಿ"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ಈ ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸುತ್ತಲೇ ಇರಬೇಕೆ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಕ್ಯಾಮರಾವನ್ನು ಬಳಸುತ್ತಿದೆ."</string>
<string name="appops_microphone" msgid="741508267659494555">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ."</string>
<string name="appops_overlay" msgid="6165912637560323464">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ಇತರ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಮೇಲಿಂದ ಪ್ರದರ್ಶಿಸುತ್ತಿದೆ."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"ಚಾರ್ಜ್ ಮಾಡುವಾಗ ಪ್ರತಿಶತವನ್ನು ತೋರಿಸು (ಡಿಫಾಲ್ಟ್)"</item>
<item msgid="3327323682209964956">"ಈ ಐಕಾನ್ ತೋರಿಸಬೇಡ"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"ಇತರ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"ಸ್ಪ್ಲಿಟ್-ಪರದೆ ಡಿವೈಡರ್"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ಎಡ ಪೂರ್ಣ ಪರದೆ"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 9014880..716e2f2 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"시스템 UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"지우기"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"목록에서 삭제"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"앱 정보"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"여기에 최근 화면이 표시됩니다."</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"최근에 사용한 앱 숨기기"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">최근 사용에 화면 %d개 있음</item>
- <item quantity="one">최근 사용에 화면 1개 있음</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"알림 없음"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"진행 중"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"알림"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"휴대전화 열기"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"음성 지원 열기"</string>
<string name="camera_label" msgid="7261107956054836961">"카메라 열기"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"새 작업 레이아웃 선택"</string>
<string name="cancel" msgid="6442560571259935130">"취소"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"도움말 메시지 영역"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"확인"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>을(를) 숨깁니다."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>이(가) 제거되었습니다."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"최근 사용한 애플리케이션을 모두 닫았습니다."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> 애플리케이션 정보를 엽니다."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>을(를) 시작하는 중입니다."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"알림이 제거되었습니다."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"알림 세부정보"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"빠른 설정"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC 사용 중지됨"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC 사용 설정됨"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"최근 항목이 없습니다."</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"모든 항목을 삭제했습니다."</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"애플리케이션 정보"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"화면 고정"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"검색"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>을(를) 시작할 수 없습니다."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g>은(는) 안전 모드에서 사용 중지됩니다."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"모두 지우기"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"여기를 드래그하여 분할 화면 사용하기"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"위로 스와이프하여 앱 전환"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"앱을 빠르게 전환하려면 오른쪽으로 드래그"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"수평 분할"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"수직 분할"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"맞춤 분할"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"위쪽으로 화면 분할"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"왼쪽으로 화면 분할"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"오른쪽으로 화면 분할"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"최근 사용 버튼 전환"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"충전됨"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"충전 중"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"최소화"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"이 앱의 알림을 계속 표시하시겠습니까?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"이 알림은 끌 수 없습니다"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"앱이 카메라를 사용 중입니다."</string>
<string name="appops_microphone" msgid="741508267659494555">"앱이 마이크를 사용 중입니다."</string>
<string name="appops_overlay" msgid="6165912637560323464">"앱이 화면의 다른 앱 위에 표시되고 있습니다."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"충전할 때 퍼센트 표시(기본값)"</item>
<item msgid="3327323682209964956">"이 아이콘 표시 안함"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"기타"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"화면 분할기"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"왼쪽 화면 전체화면"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 51cb1b1..2f49cdb 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Тутум UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Тазалоо"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Тизмеден алып салуу"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Колдонмо тууралуу"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Акыркы экрандарыңыз бул жерден көрүнөт"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Акыркы колдонмолорду жок кылуу"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d экран Көз жүгүртүүдө</item>
- <item quantity="one">1 экран Көз жүгүртүүдө</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Билдирме жок"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Учурдагы"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Билдирмелер"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"телефонду ачуу"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"үн жардамчысысын ачуу"</string>
<string name="camera_label" msgid="7261107956054836961">"камераны ачуу"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Жаңы тапшырманын планын тандаңыз"</string>
<string name="cancel" msgid="6442560571259935130">"Жокко чыгаруу"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Жардам билдирүүсү"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Ырастоо"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> этибарга албоо."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> жок болду."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Акыркы колдонмолордун баары көз жаздымда калтырылды."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> колдонмосу жөнүндө маалыматты ачыңыз."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> иштеп баштоодо."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Эскертме жок кылынды."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Билдирмелер тактасы."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Тез тууралоолор."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC өчүрүлгөн"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC иштетилген"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Акыркы колдонмолор жок"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Баарын тазаладыңыз"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Колдонмо жөнүндө маалымат"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"экран кадоо"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"издөө"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> баштай алган жок."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> коопсуз режиминде өчүрүлдү."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Баарын тазалоо"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Экранды бөлүү үчүн бул жерге сүйрөңүз"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Колдонмолорду которуштуруу үчүн өйдө сүрүңүз"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Колдонмолорду тез которуштуруу үчүн оңго сүйрөңүз"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Туурасынан бөлүү"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Тигинен бөлүү"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Ыңгайлаштырылган бөлүү"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Экранды өйдө жакка бөлүү"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Экранды сол жакка бөлүү"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Экранды оң жакка бөлүү"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Сереп салууну өчүрүү/күйгүзүү"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Кубатталды"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Кубатталууда"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Кичирейтүү"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Бул колдонмонун эскертмелери көрсөтүлө берсинби?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Бул эскертмелерди өчүрүүгө болбойт"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Бул колдонмо камераны колдонууда."</string>
<string name="appops_microphone" msgid="741508267659494555">"Бул колдонмо микрофонду колдонууда."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Бул колдонмо экрандагы башка терезелердин үстүнөн көрсөтүлүүдө."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Кубаттоо учурунда пайызы көрсөтүлсүн (демейки)"</item>
<item msgid="3327323682209964956">"Бул сөлөкөт көрсөтүлбөсүн"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Башка"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Экранды бөлгүч"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Сол жактагы экранды толук экран режимине өткөрүү"</string>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index d442258..dd874d5 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"ສ່ວນຕິດຕໍ່ຜູ່ໃຊ້ຂອງລະບົບ"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"ລຶບ"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ເອົາອອກຈາກລາຍການ"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ຂໍ້ມູນແອັບຯ"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"ໜ້າຈໍຫຼ້າສຸດຂອງທ່ານຈະປາກົດຢູ່ບ່ອນນີ້"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ປິດແອັບຯຫຼ້າສຸດທີ່ໃຊ້"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d ໜ້າຈໍຢູ່ໃນພາບລວມ</item>
- <item quantity="one">1 ໜ້າຈໍຢູ່ໃນພາບລວມ</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ບໍ່ມີການແຈ້ງເຕືອນ"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ດຳເນີນຢູ່"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"ການແຈ້ງເຕືອນ"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ເປີດແປ້ນໂທລະສັບ"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ຊ່ວເຫຼືອເປີດສຽງ"</string>
<string name="camera_label" msgid="7261107956054836961">"ເປີດກ້ອງ"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"ເລືອກແຜນຜັງໜ້າວຽກໃໝ່"</string>
<string name="cancel" msgid="6442560571259935130">"ຍົກເລີກ"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"ຊ່ວຍພື້ນທີ່ຂໍ້ຄວາມ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"ຢືນຢັນ"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"ປິດ <xliff:g id="APP">%s</xliff:g> ໄວ້."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"ປິດ <xliff:g id="APP">%s</xliff:g> ແລ້ວ."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ທຸກແອັບພລິເຄຊັນບໍ່ດົນມານີ້ຖືກປ່ອຍໄປ."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"ເປີດຂໍ້ມູນແອັບພລິເຄຊັນ <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"ກຳລັງເປີດ <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"ປິດການແຈ້ງເຕືອນແລ້ວ."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ໜ້າຈໍແຈ້ງເຕືອນ."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ການຕັ້ງຄ່າດ່ວນ."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC is disabled"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC is enabled"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"ບໍ່ມີລາຍການຫຼ້າສຸດ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ທ່ານລຶບລ້າງທຸກຢ່າງແລ້ວ"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"ຂໍ້ມູນແອັບພລິເຄຊັນ"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ການປັກໝຸດໜ້າຈໍ"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"ຊອກຫາ"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"ບໍ່ສາມາດເລີ່ມ <xliff:g id="APP">%s</xliff:g> ໄດ້."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ຖືກປິດໃຊ້ໃນໂໝດຄວາມມປອດໄພ."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"ລຶບລ້າງທັງໝົດ"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"ລາກມາບ່ອນນີ້ເພື່ອໃຊ້ການແບ່ງໜ້າຈໍ"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"ປັດຂື້ນເພື່ອສະຫຼັບແອັບ"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"ລາກໄປຂວາເພື່ອສະຫຼັບແອັບດ່ວນ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ການແຍກລວງຂວາງ"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ການແຍກລວງຕັ້ງ"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ການແຍກກຳນົດເອງ"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"ສະຫຼັບພາບຮວມ"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ສາກເຕັມແລ້ວ."</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"ກຳລັງສາກໄຟ"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"ຫຍໍ້"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ສະແດງການແຈ້ງເຕືອນຈາກແອັບນີ້ຕໍ່ໄປບໍ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ບໍ່ສາມາດປິດການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄດ້"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"ແອັບນີ້ກຳລັງໃຊ້ກ້ອງຢູ່."</string>
<string name="appops_microphone" msgid="741508267659494555">"ແອັບນີ້ກຳລັງໃຊ້ໄມໂຄຣໂຟນຢູ່."</string>
<string name="appops_overlay" msgid="6165912637560323464">"ແອັບນີ້ກຳລັງສະແດງຜົນບັງແອັບອື່ນຢູ່ໜ້າຈໍຂອງທ່ານ."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"ສະແດງເປີເຊັນເມື່ອກຳລັງສາກໄຟ (ຄ່າເລີ່ມຕົ້ນ)"</item>
<item msgid="3327323682209964956">"ຢ່າສະແດງໄອຄອນນີ້"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"ອື່ນໆ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"ຕົວຂັ້ນການແບ່ງໜ້າຈໍ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ເຕັມໜ້າຈໍຊ້າຍ"</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index e26df8b..68e64d3 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -21,16 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Sistemos NS"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Išvalyti"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Pašalinti iš sąrašo"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Programos informacija"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Čia rodomi naujausi ekranai"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Atsisakyti naujausių programų"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d ekrano apžvalga</item>
- <item quantity="few">%d ekranų apžvalga</item>
- <item quantity="many">%d ekrano apžvalga</item>
- <item quantity="other">%d ekranų apžvalga</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nėra įspėjimų"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Vykstantys"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pranešimai"</string>
@@ -103,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"atidaryti telefoną"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"atidaryti „Voice Assist“"</string>
<string name="camera_label" msgid="7261107956054836961">"atidaryti fotoaparatą"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Pasirinkti naują užduoties išdėstymą"</string>
<string name="cancel" msgid="6442560571259935130">"Atšaukti"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Pagalbos pranešimo sritis"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Patvirtinkite"</string>
@@ -190,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Atsisakyti <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Atsisakyta programos „<xliff:g id="APP">%s</xliff:g>“."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Atsisakyta visų naujausių programų."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Atidaryti programos „<xliff:g id="APP">%s</xliff:g>“ informaciją."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Paleidžiama <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Pranešimo atsisakyta."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Pranešimų gaubtas."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Spartieji nustatymai."</string>
@@ -361,23 +345,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"ALR"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"ALR išjungtas"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"ALR įjungtas"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nėra jokių naujausių elementų"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Viską išvalėte"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Programos informacija"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekrano prisegimas"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"paieška"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Nepavyko paleisti <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Programa „<xliff:g id="APP">%s</xliff:g>“ išjungta saugos režimu."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Išvalyti viską"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Vilkite čia, kad naudotumėte skaidytą ekraną"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Perbraukite aukštyn, kad perjungtumėte programas"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Vilkite į dešinę, kad greitai perjungtumėte programas"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontalus skaidymas"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikalus skaidymas"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tinkintas skaidymas"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Skaidyti ekraną į viršų"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Skaidyti ekraną į kairę"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Skaidyti ekraną į dešinę"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Perjungti apžvalgą"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Įkrautas"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Kraunamas"</string>
@@ -626,6 +595,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Sumažinti"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Toliau rodyti iš šios programos gautus pranešimus?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Šių pranešimų negalima išjungti"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"naudojant „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
<string name="appops_camera" msgid="8100147441602585776">"Ši programa naudoja fotoaparatą."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ši programa naudoja mikrofoną."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ši programa rodoma ekrane virš kitų programų."</string>
@@ -764,6 +734,7 @@
<item msgid="2139628951880142927">"Rodyti procentus kraunant (numatytasis nustatymas)"</item>
<item msgid="3327323682209964956">"Nerodyti šios piktogramos"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Rodyti mažo prioriteto pranešimų piktogramas"</string>
<string name="other" msgid="4060683095962566764">"Kita"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Skaidyto ekrano daliklis"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Kairysis ekranas viso ekrano režimu"</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 6f5e230..eb5e92c 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -21,15 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Sistēmas UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Notīrīt"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Noņemšana no saraksta"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Lietotnes informācija"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Jūsu pēdējie ekrāni tiek rādīti šeit."</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Nerādīt nesen izmantotās lietotnes"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="zero">%d ekrānu sadaļā Kopsavilkums</item>
- <item quantity="one">%d ekrāns sadaļā Kopsavilkums</item>
- <item quantity="other">%d ekrāni sadaļā Kopsavilkums</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nav paziņojumu"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Notiekošs"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Paziņojumi"</string>
@@ -102,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"atvērt tālruni"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"atvērt balss palīgu"</string>
<string name="camera_label" msgid="7261107956054836961">"atvērt kameru"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Atlasiet jaunu uzdevumu izkārtojumu"</string>
<string name="cancel" msgid="6442560571259935130">"Atcelt"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Palīdzības ziņojuma apgabals"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Apstiprināt"</string>
@@ -189,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Nerādīt lietotni <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Lietotne <xliff:g id="APP">%s</xliff:g> vairs netiek rādīta."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Visas nesen izmantotās lietojumprogrammas tika noņemtas."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Atveriet lietojumprogrammas <xliff:g id="APP">%s</xliff:g> informāciju."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Notiek lietotnes <xliff:g id="APP">%s</xliff:g> palaišana."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Paziņojums netiek rādīts."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Paziņojumu panelis"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Ātrie iestatījumi"</string>
@@ -358,23 +343,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC ir atspējoti"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC ir iespējoti"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nav nesenu vienumu"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Visi uzdevumi ir notīrīti"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informācija par lietojumprogrammu"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Piespraust ekrānu"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"Meklēt"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Nevarēja palaist lietotni <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Lietotne <xliff:g id="APP">%s</xliff:g> ir atspējota drošajā režīmā."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Notīrīt visu"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Velciet šeit, lai izmantotu ekrāna sadalīšanu"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Velciet augšup, lai pārslēgtu lietotnes"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Lai ātri pārslēgtu lietotnes, velciet pa labi"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontāls dalījums"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikāls dalījums"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Pielāgots dalījums"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Sadalīt ekrānu augšdaļā"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Sadalīt ekrānu kreisajā pusē"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Sadalīt ekrānu labajā pusē"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Pārskata pārslēgšana"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Akumulators uzlādēts"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Notiek uzlāde"</string>
@@ -622,6 +592,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizēt"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Vai turpināt rādīt paziņojumus no šīs lietotnes?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Šos paziņojumus nevar izslēgt."</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Šajā lietotnē tiek izmantota kamera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Šajā lietotnē tiek izmantots mikrofons."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Šī lietotne tiek rādīta ekrānā pāri citām lietotnēm."</string>
@@ -758,6 +730,8 @@
<item msgid="2139628951880142927">"Rādīt procentuālo vērtību uzlādes laikā (noklusējums)"</item>
<item msgid="3327323682209964956">"Nerādīt šo ikonu"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Citi"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Ekrāna sadalītājs"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Kreisā daļa pa visu ekrānu"</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index d13193b7..9c42805 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Кориснички интерфејс на систем"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Исчисти"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Отстрани од списокот"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Информации за апликацијата"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Вашите неодамнешни екрани се појавуваат тука"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Отфрли ги скорешните апликации"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d екран во Краток преглед</item>
- <item quantity="other">%d екрани во Краток преглед</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Нема известувања"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Во тек"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Известувања"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"отвори телефон"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"отвори гласовна помош"</string>
<string name="camera_label" msgid="7261107956054836961">"отвори камера"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Изберете нов распоред на задача"</string>
<string name="cancel" msgid="6442560571259935130">"Откажи"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Област за пораки за помош"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Потврди"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Отфрли <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> е отфрлена."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Сите неодамнешни апликации се отфрлени."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Отвори информации за апликацијата <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Се стартува <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Известувањето е отфрлено."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Панел за известување"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Брзи поставки."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC е оневозможено"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC е овозможено"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Нема неодамнешни ставки"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Исчистивте сѐ"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Информации за апликацијата"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"прикачување екран"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"пребарај"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> не може да се вклучи."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> е оневозможен во безбеден режим."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Исчисти ги сите"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Повлечете тука за да користите поделен екран"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Повлечете нагоре за да се префрлите од една на друга апликација"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Повлечете надесно за брзо префрлање меѓу апликациите"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Раздели хоризонтално"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Раздели вертикално"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Раздели прилагодено"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Поделен екран во горниот дел"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Поделен екран на левата страна"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Поделен екран на десната страна"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Вклучи/исклучи преглед"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Наполнета"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Се полни"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Минимизирај"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Дали да продолжат да се прикажуваат известувања од апликацијава?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Известувањава не може да се исклучат"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Апликацијава ја користи камерата."</string>
<string name="appops_microphone" msgid="741508267659494555">"Апликацијава го користи микрофонот."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Апликацијава се прикажува врз други апликации на вашиот екран."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Прикажи процент кога се полни (стандардно)"</item>
<item msgid="3327323682209964956">"Не прикажувај ја иконава"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Друго"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Разделник на поделен екран"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Левиот на цел екран"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index a5cad4e..62196ea 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"സിസ്റ്റം UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"മായ്ക്കുക"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ലിസ്റ്റിൽ നിന്നും നീക്കംചെയ്യുക"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ആപ്പ് വിവരം"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"നിങ്ങളുടെ പുതിയ സ്ക്രീനുകൾ ഇവിടെ ദൃശ്യമാകുന്നു"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"സമീപകാല അപ്ലിക്കേഷനുകൾ നിരസിക്കുക"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">ചുരുക്കവിവരണത്തിലെ %d സ്ക്രീനുകൾ</item>
- <item quantity="one">ചുരുക്കവിവരണത്തിലെ ഒരു സ്ക്രീൻ</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"അറിയിപ്പുകൾ ഒന്നുമില്ല"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"നടന്നുകൊണ്ടിരിക്കുന്നവ"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"അറിയിപ്പുകൾ"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ഫോൺ തുറക്കുക"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"വോയ്സ് അസിസ്റ്റ് തുറക്കുക"</string>
<string name="camera_label" msgid="7261107956054836961">"ക്യാമറ തുറക്കുക"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"പുതിയ ടാസ്ക് ലേഔട്ട് തിരഞ്ഞെടുക്കുക"</string>
<string name="cancel" msgid="6442560571259935130">"റദ്ദാക്കുക"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"സഹായ സന്ദേശ ഏരിയ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"സ്ഥിരീകരിക്കുക"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> നിരസിക്കുക."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> നിരസിച്ചു."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"അടുത്തിടെയുള്ള എല്ലാ അപ്ലിക്കേഷനും നിരസിച്ചു."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ആപ്പ് വിവരങ്ങൾ തുറക്കുക."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ആരംഭിക്കുന്നു."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"അറിയിപ്പ് നിരസിച്ചു."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"അറിയിപ്പ് ഷെയ്ഡ്."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ദ്രുത ക്രമീകരണങ്ങൾ."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC പ്രവർത്തനക്ഷമമാക്കി"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"സമീപകാല ഇനങ്ങൾ ഒന്നുമില്ല"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"നിങ്ങൾ എല്ലാം മായ്ച്ചിരിക്കുന്നു"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"ആപ്പ് വിവരം"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"സ്ക്രീൻ പിൻ ചെയ്യൽ"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"തിരയുക"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ആരംഭിക്കാനായില്ല."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"സുരക്ഷിത മോഡിൽ <xliff:g id="APP">%s</xliff:g> പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"എല്ലാം മായ്ക്കുക"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"സ്പ്ലിറ്റ് സ്ക്രീൻ ഉപയോഗിക്കുന്നതിന് ഇവിടെ വലിച്ചിടുക"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"ആപ്പുകൾ മാറാൻ മുകളിലേക്ക് സ്വൈപ്പ് ചെയ്യുക"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"ആപ്പുകൾ പെട്ടെന്ന് മാറാൻ വലത്തോട്ട് വലിച്ചിടുക"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"തിരശ്ചീനമായി വേർതിരിക്കുക"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ലംബമായി വേർതിരിക്കുക"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ഇഷ്ടാനുസൃതമായി വേർതിരിക്കുക"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"സ്ക്രീൻ മുകളിലേക്ക് സ്പ്ലിറ്റ് ചെയ്യുക"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"സ്ക്രീൻ ഇടതുവശത്തേക്ക് സ്പ്ലിറ്റ് ചെയ്യുക"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"സ്ക്രീൻ വലതുവശത്തേക്ക് പിളർത്തുക"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"അവലോകനം മാറ്റുക"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ചാർജായി"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"ചാർജ്ജുചെയ്യുന്നു"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"ചെറുതാക്കുക"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ഈ ആപ്പിൽ നിന്നുള്ള അറിയിപ്പുകൾ തുടർന്നും കാണിക്കണോ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ഈ അറിയിപ്പുകൾ ഓഫാക്കാനാവില്ല"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"ഈ ആപ്പ് ക്യാമറ ഉപയോഗിക്കുന്നുണ്ട്."</string>
<string name="appops_microphone" msgid="741508267659494555">"ഈ ആപ്പ് മൈക്രോഫോൺ ഉപയോഗിക്കുന്നു."</string>
<string name="appops_overlay" msgid="6165912637560323464">"ഈ ആപ്പ് നിങ്ങളുടെ സ്ക്രീനിലെ മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ പ്രദർശിപ്പിക്കുന്നു."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"ചാർജ്ജുചെയ്യുമ്പോൾ ശതമാനം കാണിക്കുക (ഡിഫോൾട്ട്)"</item>
<item msgid="3327323682209964956">"ഈ ഐക്കൺ കാണിക്കരുത്"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"മറ്റുള്ളവ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"സ്പ്ലിറ്റ്-സ്ക്രീൻ ഡിവൈഡർ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ഇടത് പൂർണ്ണ സ്ക്രീൻ"</string>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 978fc0e..223f492 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -21,12 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Систем UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Цэвэрлэх"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Жагсаалтаас устгах"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Апп мэдээлэл"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Таны саяхны дэлгэц энд харагдах болно"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Сүүлийн апп-уудыг хаах"</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for status_bar_accessibility_recent_apps (9138535907802238759) -->
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Мэдэгдэл байхгүй"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Гарсан"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Мэдэгдэл"</string>
@@ -99,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"утас нээх"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"дуут туслахыг нээнэ"</string>
<string name="camera_label" msgid="7261107956054836961">"камер нээх"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Шинэ ажиллах талбарыг сонгоно уу"</string>
<string name="cancel" msgid="6442560571259935130">"Цуцлах"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Тусламжийн зурвасын хэсэг"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Баталгаажуулах"</string>
@@ -186,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>-г хаах."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> байхгүй."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Хамгийн сүүлийн бүх програмыг арилгасан байна."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> апп-н мэдээллийг нээнэ үү."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>-г эхлүүлж байна."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Мэдэгдэл хаагдсан."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Мэдэгдлийн хураангуй самбар"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Шуурхай тохиргоо."</string>
@@ -353,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC-г цуцалсан"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC-г идэвхжүүлсэн"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Сүүлийн үеийн зүйл байхгүй"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Та бүгдийг нь устгасан"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Аппликешны мэдээлэл"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"дэлгэц тогтоох"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"хайх"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>-г эхлүүлж чадсангүй."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g>-г аюулгүй горимд идэвхгүй болгосон."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Бүгдийг арилгах"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Хуваагдсан дэлгэцийг ашиглахын тулд энд чирэх"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Апп сэлгэхийн тулд дээш шударна уу"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Аппуудыг хурдан сэлгэхийн тулд баруун тийш чирнэ үү"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Хэвтээ чиглэлд хуваах"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Босоо чиглэлд хуваах"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Хүссэн хэлбэрээр хуваах"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Дэлгэцийг дээд хэсэгт хуваах"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Дэлгэцийг зүүн хэсэгт хуваах"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Дэлгэцийг баруун хэсэгт хуваах"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Тоймыг унтраах/асаах"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Цэнэглэгдсэн"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Цэнэглэж байна"</string>
@@ -616,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Багасгах"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Энэ аппаас мэдэгдэл харуулсан хэвээр байх уу?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Эдгээр мэдэгдлийг унтраах боломжгүй"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Энэ апп камерыг ашиглаж байна."</string>
<string name="appops_microphone" msgid="741508267659494555">"Энэ апп микрофоныг ашиглаж байна."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Энэ аппыг таны дэлгэцэд бусад аппын дээр харуулж байна."</string>
@@ -750,6 +725,8 @@
<item msgid="2139628951880142927">"Цэнэглэх үед хувийг тогтмол харуулах (өгөгдмөл)"</item>
<item msgid="3327323682209964956">"Энэ дүрс тэмдгийг бүү үзүүл"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Бусад"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"\"Дэлгэц хуваах\" хуваагч"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Зүүн талын бүтэн дэлгэц"</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 103ca46..da37acbf 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"सिस्टम UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"साफ करा"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"सूचीमधून काढा"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"अॅप माहिती"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"आपल्या अलीकडील स्क्रीन येथे दिसतात"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"अलीकडील अॅप्स डिसमिस करा"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">विहंगावलोकनात %d स्क्रीन</item>
- <item quantity="other">विहंगावलोकनात %d स्क्रीन</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"सूचना नाहीत"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"सुरु असलेले"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचना"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"फोन उघडा"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"व्हॉइस सहाय्य उघडा"</string>
<string name="camera_label" msgid="7261107956054836961">"कॅमेरा उघडा"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"नवीन कार्य लेआउट निवडा"</string>
<string name="cancel" msgid="6442560571259935130">"रद्द करा"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"मदत मेसेज परिसर"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"खात्री करा"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> डिसमिस करा."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> डिसमिस केला."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"अलीकडील सर्व अॅप्लिकेशन डिसमिस झाले."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> अॅप्लिकेशन माहिती उघडा."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> प्रारंभ करत आहे."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"सूचना डिसमिस केल्या."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"सूचना शेड."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"द्रुत सेटिंग्ज."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC अक्षम केले आहे"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC सक्षम केले आहे"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"अलीकडील कोणतेही आयटम नाहीत"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"तुम्ही सर्वकाही साफ केले"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"अॅप्लिकेशन माहिती"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"स्क्रीन पिन करणे"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"शोधा"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> प्रारंभ करणे शक्य झाले नाही."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> सुरक्षित-मोडमध्ये अक्षम केला आहे."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"सर्व साफ करा"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"विभाजित स्क्रीन वापर करण्यासाठी येथे ड्रॅग करा"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"अॅप्स स्विच करण्यासाठी वर स्वाइप करा"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"अॅप्स वर झटपट स्विच करण्यासाठी उजवीकडे ड्रॅग करा"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"क्षैतिज विभाजित करा"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"अनुलंब विभाजित करा"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"कस्टम विभाजित करा"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"स्क्रीन शीर्षस्थानी विभाजित करा"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"स्क्रीन डावीकडे विभाजित करा"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"स्क्रीन उजवीकडे विभाजित करा"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"अवलोकन टॉगल करा."</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज झाली"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"चार्ज होत आहे"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"लहान करा"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"या अॅपकडील सूचना दाखवणे सुरू ठेवायचे?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"या सूचना बंद करता येत नाहीत"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"हे अॅप कॅमेरा वापरत आहे."</string>
<string name="appops_microphone" msgid="741508267659494555">"हे अॅप मायक्रोफोन वापरत आहे."</string>
<string name="appops_overlay" msgid="6165912637560323464">"हे अॅप स्क्रीनवरील इतर अॅप्स वर प्रदर्शित होत आहे."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"चार्ज करताना टक्केवारी दर्शवा (डीफॉल्ट)"</item>
<item msgid="3327323682209964956">"हे आयकन दाखवू नका"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"अन्य"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"विभाजित-स्क्रीन विभाजक"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"डावी फुल स्क्रीन"</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 7a6a1e3..cb4dd14 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI Sistem"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Pdm bersih"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Alih keluar dari senarai"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Maklumat aplikasi"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Skrin terbaru anda terpapar di sini"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Buang aplikasi terbaharu"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d skrin dalam Gambaran Keseluruhan</item>
- <item quantity="one">1 skrin dalam Gambaran Keseluruhan</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tiada pemberitahuan"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sedang berlangsung"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"buka telefon"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"buka bantuan suara"</string>
<string name="camera_label" msgid="7261107956054836961">"buka kamera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Pilih reka letak tugas baharu"</string>
<string name="cancel" msgid="6442560571259935130">"Batal"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Bahagian mesej bantuan"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Sahkan"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ketepikan <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ditolak."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Semua aplikasi terbaharu diketepikan."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Buka maklumat aplikasi <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Memulakan <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Pemberitahuan diketepikan."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bidai pemberitahuan."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Tetapan pantas."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC dilumpuhkan"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC didayakan"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Tiada item terbaharu"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Anda telah mengetepikan semua item"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Maklumat Aplikasi"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"penyematan skrin"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"cari"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Tidak dapat memulakan <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> dilumpuhkan dalam mod selamat."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Kosongkan semua"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Seret ke sini untuk menggunakan skrin pisah"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Leret ke atas untuk menukar apl"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Seret ke kanan untuk beralih apl dengan pantas"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Mendatar Terpisah"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Menegak Terpisah"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tersuai Terpisah"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Pisahkan skrin ke atas"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Pisahkan skrin ke kiri"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Pisahkan skrin ke kanan"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Togol Ikhtisar"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Sudah dicas"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Mengecas"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimumkan"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Terus tunjukkan pemberitahuan daripada apl ini?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Pemberitahuan ini tidak boleh dimatikan"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Apl ini sedang menggunakan kamera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Apl ini sedang menggunakan mikrofon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Apl ini dipaparkan di atas apl lain pada skrin anda."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Tunjukkan peratusan semasa mengecas (lalai)"</item>
<item msgid="3327323682209964956">"Jangan tunjukkan ikon ini"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Lain-lain"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Pembahagi skrin pisah"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Skrin penuh kiri"</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 62970aa..777d96e 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"စနစ်၏UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"ရှင်းရန်"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"စာရင်းမှ ဖယ်မည်"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"အက်ပ်အချက်အလက်များ"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"သင်၏ မကြာမီက မျက်နှာပြင်များ ဒီမှာ ပေါ်လာကြမည်"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"လတ်တလောအက်ပ်များအား ပယ်ရန်"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">ခြုံကြည့်မှုထဲမှ မျက်နှာပြင် %d ခု</item>
- <item quantity="one">ခြုံကြည့်မှုထဲမှ မျက်နှာပြင် 1 ခု</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"အကြောင်းကြားချက်များ မရှိ"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"လက်ရှိအသုံးပြုမှု"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"အကြောင်းကြားချက်များ။"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ဖုန်းကို ဖွင့်ရန်"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"အသံ အကူအညီအား ဖွင့်ရန်"</string>
<string name="camera_label" msgid="7261107956054836961">"ကင်မရာ ဖွင့်ရန်"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"အလုပ်သစ်စီစဥ်မှုကို ရွေးပါ။"</string>
<string name="cancel" msgid="6442560571259935130">"မလုပ်တော့"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"အကူအညီမက်ဆေ့ဂျ် နေရာ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"အတည်ပြုပါ"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ကို ပယ်ရန်"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ထုတ်ထားသည်။"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"မကြာသေးမီက အပလီကေးရှင်းများအားလုံး ဖယ်ထုတ်ပြီးပါပြီ။"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> အပလီကေးရှင်းအချက်အလက်ကို ဖွင့်ပါ။"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>ကို စတင်နေသည်။"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"အကြောင်းကြားချက်ကိုဖယ်ရှားပြီး"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"အကြောင်းကြားစာအကွက်"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"အမြန်လုပ် အပြင်အဆင်"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC ကို ပိတ်ထားသည်"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC ကို ဖွင့်ထားသည်"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"မကြာမီကဖွင့်ထားသည်များ မရှိပါ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"သင်အားလုံးကို ရှင်းလင်းပြီးပါပြီ"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"အပလီကေးရှင်းအင်ဖို"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"မျက်နှာပြင် ပင်ထိုးမှု"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"ရှာဖွေရန်"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ကို မစနိုင်ပါ။"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ကို ဘေးကင်းလုံခြုံသည့်မုဒ်တွင် ပိတ်ထားပါသည်။"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"အားလုံး ဖယ်ရှားပါ"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"မျက်နှာပြင် ခွဲခြမ်းပြသခြင်းကို အသုံးပြုရန် ဤနေရာသို့ ပွတ်၍ဆွဲထည့်ပါ"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"အက်ပ်များကို ဖွင့်ရန် အပေါ်သို့ ပွတ်ဆွဲပါ"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"အက်ပ်များကို ပြောင်းရန် ညာဘက်သို့ ဖိဆွဲပါ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ရေပြင်ညီ ပိုင်းမည်"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ဒေါင်လိုက်ပိုင်းမည်"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"စိတ်ကြိုက် ပိုင်းမည်"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"မျက်နှာပြင်ကို အပေါ်သို့ ခွဲရန်"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"မျက်နှာပြင်ကို ဘယ်ဘက်သို့ ခွဲရန်"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"မျက်နှာပြင်ကို ညာဘက်သို့ ခွဲရန်"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"ဖွင့်၊ ပိတ် အနှစ်ချုပ်"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"အားသွင်းပြီး"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"အားသွင်းနေ"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"ချုံ့ရန်"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ဤအက်ပ်ထံမှ အကြောင်းကြားချက်များကို ဆက်ပြလိုပါသလား။"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ဤအကြောင်းကြားချက်များကို ပိတ်၍မရပါ"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"ဤအက်ပ်က ကင်မရာကို အသုံးပြုနေသည်။"</string>
<string name="appops_microphone" msgid="741508267659494555">"ဤအက်ပ်က မိုက်ခရိုဖုန်းကို အသုံးပြုနေသည်။"</string>
<string name="appops_overlay" msgid="6165912637560323464">"ဤအက်ပ်က ဖန်သားမျက်နှာပြင်ပေါ်ရှိ အခြားအက်ပ်များ အပေါ်မှ ထပ်ပြီး ပြသနေပါသည်။"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"အားသွင်းနေစဉ်တွင် ရာခိုင်နှုန်းကိုပြပါ (ပုံသေ)"</item>
<item msgid="3327323682209964956">"ဤသင်္ကေတပုံကို မပြပါနှင့်"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"အခြား"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"မျက်နှာပြင်ခွဲခြမ်း ပိုင်းခြားပေးသည့်စနစ်"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ဘယ်ဘက် မျက်နှာပြင်အပြည့်"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 81ff8e2..9b27df5 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Sys.gr.snitt"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Fjern"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Fjern fra listen"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om appen"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"De sist brukte skjermene dine vises her"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Avvis nylig brukte apper"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d skjermer i oversikten</item>
- <item quantity="one">1 skjerm i oversikten</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen varslinger"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Aktiviteter"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Varsler"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"åpne telefonen"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"åpne talehjelp"</string>
<string name="camera_label" msgid="7261107956054836961">"åpne kamera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Velg en ny utforming for oppgaver"</string>
<string name="cancel" msgid="6442560571259935130">"Avbryt"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Område for hjelpemelding"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Bekreft"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Avvis <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> avvist."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle nylig brukte apper er avvist."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Åpne appinformasjonen for <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starter <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Varselet ble skjult."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Varselskygge."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Hurtiginnstillinger."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC er slått av"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC er slått på"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Ingen nylige elementer"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du har fjernet alt"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformasjon"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"én-appsmodus"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"Søk"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Kunne ikke starte <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> er slått av i sikker modus."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Tøm alt"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Dra hit for å bruke delt skjerm"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Sveip opp for å bytte apper"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Dra til høyre for å bytte apper raskt"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Del horisontalt"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Del vertikalt"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Del tilpasset"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Delt skjerm øverst"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Delt skjerm til venstre"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Delt skjerm til høyre"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Slå oversikten av eller på"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Oppladet"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Lader"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimer"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Vil du fortsette å vise varsler fra denne appen?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Du kan ikke slå av disse varslene"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Denne appen bruker kameraet."</string>
<string name="appops_microphone" msgid="741508267659494555">"Denne appen bruker mikrofonen."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Denne appen vises over andre apper på skjermen."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Vis prosentandel under lading (standard)"</item>
<item msgid="3327323682209964956">"Ikke vis dette ikonet"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Annet"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Skilleelement for delt skjerm"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Utvid den venstre delen av skjermen til hele skjermen"</string>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index 4f2845e..5119e5b 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"प्रणाली UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"हटाउनुहोस्"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"सूचीबाट हटाउनुहोस्"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"अनुप्रयोगको जानकारी"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"तपाईँको हालको स्क्रिन यहाँ प्रकट हुन्छ"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"नयाँ अनुप्रयोगहरू खारेज गर्नुहोस्"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other"> अवलोकनमा %d स्क्रिनहरू</item>
- <item quantity="one">अवलोकनमा 1 स्क्रिन</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"कुनै सूचनाहरू छैन"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"चलिरहेको"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचनाहरू"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"फोन खोल्नुहोस्"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"आवाज सहायता खोल्नुहोस्"</string>
<string name="camera_label" msgid="7261107956054836961">"क्यामेरा खोल्नुहोस्"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"नयाँ कार्य लेआउट चयन गर्नुहोस्"</string>
<string name="cancel" msgid="6442560571259935130">"रद्द गर्नुहोस्"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"मद्दतसम्बन्धी सन्देशको क्षेत्र"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"पुष्टि गर्नुहोस्"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> खारेज गर्नुहोस्।"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> खारेज गरिएको छ।"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"सबै हालका अनुप्रयोगहरू खारेज गरियो।"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> अनुप्रयोग सम्बन्धी जानकारी खोल्नुहोस्।"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>सुरु गर्दै।"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"सूचना खारेज।"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"सूचना कक्ष।"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"द्रुत सेटिङहरू"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC लाई असक्षम पारिएको छ"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC लाई सक्षम पारिएको छ"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"हालका कुनै पनि वस्तुहरू छैनन्"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"तपाईँले सबै कुरा खाली गर्नुभएको छ"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"अनुप्रयोग जानकारी"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"स्क्रिन पिन गर्दै"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"खोजी गर्नुहोस्"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"सुरु गर्न सकिएन <xliff:g id="APP">%s</xliff:g>।"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> लाई सुरक्षित-मोडमा असक्षम गरिएको छ।"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"सबै हटाउनुहोस्"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"विभाजित स्क्रिनको प्रयोग गर्नाका लागि यहाँ तान्नुहोस्"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"अनुप्रयोगहरू बदल्न माथितिर स्वाइप गर्नुहोस्"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"अनुप्रयोगहरू बदल्न द्रुत गतिमा दायाँतिर ड्र्याग गर्नुहोस्"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"तेर्सो रूपमा विभाजन गर्नुहोस्"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ठाडो रूपमा विभाजन गर्नुहोस्"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"आफू अनुकूल विभाजन गर्नुहोस्"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"विभाजित-स्क्रिनलाई शीर्ष स्थानमा राख्नुहोस्"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"विभाजित-स्क्रिनलाई बायाँतर्फ राख्नुहोस्"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"विभाजित-स्क्रिनलाई दायाँतर्फ राख्नुहोस्"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"परिदृश्य टगल गर्नुहोस्"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज भयो"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"चार्ज हुँदै"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"सानो बनाउनुहोस्"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"यो अनुप्रयोगका सूचनाहरू देखाउने क्रम जारी राख्ने हो?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"यी सूचनाहरूलाई निष्क्रिय पार्न सकिँदैन"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"यो अनुप्रयोगले क्यामेराको प्रयोग गर्दै छ।"</string>
<string name="appops_microphone" msgid="741508267659494555">"यो अनुप्रयोगले माइक्रोफोनको प्रयोग गर्दै छ।"</string>
<string name="appops_overlay" msgid="6165912637560323464">"यो अनुप्रयोगले तपाईंको स्क्रिनका अन्य अनुप्रयोगहरूमाथि प्रदर्शन गर्दै छ।"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"चार्ज गर्दा प्रतिशत देखाउनुहोस् (पूर्वनिर्धारित)"</item>
<item msgid="3327323682209964956">"यो आइकन नदेखाउनुहोस्"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"अन्य"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"विभाजित-स्क्रिन छुट्याउने"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"बायाँ भाग पूर्ण स्क्रिन"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 60ca532..448a36e 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Systeem-UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Wissen"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Verwijderen uit lijst"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App-info"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Je recente schermen worden hier weergegeven"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Recente apps negeren"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d schermen in Overzicht</item>
- <item quantity="one">1 scherm in Overzicht</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Geen meldingen"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Actief"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meldingen"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"telefoon openen"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"spraakassistent openen"</string>
<string name="camera_label" msgid="7261107956054836961">"camera openen"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Nieuwe taakindeling selecteren"</string>
<string name="cancel" msgid="6442560571259935130">"Annuleren"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Gebied voor Help-berichten"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Bevestigen"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> sluiten."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> verwijderd."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle recente apps gesloten."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"App-gegevens voor <xliff:g id="APP">%s</xliff:g> openen."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> starten."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Melding verwijderd."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Meldingenpaneel."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Snelle instellingen."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC is uitgeschakeld"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC is ingeschakeld"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Geen recente items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Je hebt alles gewist"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"App-informatie"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"scherm vastzetten"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"zoeken"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Kan <xliff:g id="APP">%s</xliff:g> niet starten."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> is uitgeschakeld in de veilige modus"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Alles wissen"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Sleep hier naartoe om het scherm te splitsen"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Veeg omhoog om te schakelen tussen apps"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Sleep naar rechts om snel tussen apps te schakelen"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontaal splitsen"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Verticaal splitsen"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Aangepast splitsen"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Scherm bovenaan gesplitst"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Scherm links gesplitst"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Scherm rechts gesplitst"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Overzicht in-/uitschakelen"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Opgeladen"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Opladen"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimaliseren"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Meldingen van deze app blijven weergeven?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Deze meldingen kunnen niet worden uitgeschakeld"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Deze app gebruikt de camera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Deze app gebruikt de microfoon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Deze app wordt over andere apps op je scherm heen weergegeven."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Percentage weergeven tijdens opladen (standaard)"</item>
<item msgid="3327323682209964956">"Dit pictogram niet weergeven"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Overig"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Scheiding voor gesplitst scherm"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Linkerscherm op volledig scherm"</string>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index a78f5cd..a9441fa 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"ସିଷ୍ଟମ୍ UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"ଖାଲି କରନ୍ତୁ"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ତାଲିକାରୁ ବାହାର କରନ୍ତୁ"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ଆପ୍ ସୂଚନା"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"ଆପଣଙ୍କ ସମ୍ପ୍ରତି ସ୍କ୍ରୀନ୍ ଏଠାରେ ଦେଖାଯାଉଛି"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"କିଛି ସମୟ ପୂର୍ବରୁ ଇନଷ୍ଟଲ୍ ହୋଇଥିବା ଆପ୍ଗୁଡ଼ିକୁ ଖାରଜ କରନ୍ତୁ"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">ଓଭର୍ଭ୍ୟୁରେ %d ସ୍କ୍ରୀନ୍</item>
- <item quantity="one">ଓଭର୍ଭ୍ୟୁରେ 1 ସ୍କ୍ରୀନ୍</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"କୌଣସି ବିଜ୍ଞପ୍ତି ନାହିଁ"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ଚାଲୁଅଛି"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"ବିଜ୍ଞପ୍ତି"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ଫୋନ୍ ଖୋଲନ୍ତୁ"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ଭଏସ୍ ସହାୟକ ଖୋଲନ୍ତୁ"</string>
<string name="camera_label" msgid="7261107956054836961">"କ୍ୟାମେରା ଖୋଲନ୍ତୁ"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"ନୂଆ ଟାସ୍କ ଲେଆଉଟ୍ ଚୟନ କରନ୍ତୁ"</string>
<string name="cancel" msgid="6442560571259935130">"କ୍ୟାନ୍ସଲ୍ କରନ୍ତୁ"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"ସାହାଯ୍ୟ ମେସେଜ୍ କ୍ଷେତ୍ର"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"ନିଶ୍ଚିତ କରନ୍ତୁ"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ଖାରଜ।"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ଖାରଜ କରିଦିଆଗଲା।"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ସମସ୍ତ ସମ୍ପ୍ରତି ଆପ୍ଲିକେଶନଗୁଡ଼ିକ ଖାରଜ କରାଯାଇଛି।"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ଆପ୍ଲିକେଶନ୍ ସୂଚନା ଖୋଲନ୍ତୁ।"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ଆରମ୍ଭ ହେଉଛି।"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"ବିଜ୍ଞପ୍ତି ଖାରଜ କରାଗଲା।"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ବିଜ୍ଞପ୍ତି ଶେଡ୍।"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ଦ୍ରୁତ ସେଟିଙ୍ଗ।"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC ଅକ୍ଷମ କରାଯାଇଛି"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC ସକ୍ଷମ କରାଯାଇଛି"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"କୌଣସି ସାମ୍ପ୍ରତିକ ଆଇଟମ୍ ନାହିଁ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ଆପଣ ସୁବୁକିଛି ଖାଲି କରିଦେଇଛନ୍ତି"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"ଆପ୍ଲିକେଶନ୍ ସୂଚନା"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ସ୍କ୍ରୀନ୍ ଲକ୍"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"ସର୍ଚ୍ଚ କରନ୍ତୁ"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> କୁ ଆରମ୍ଭ କରାଯାଇପାରିଲା ନାହିଁ।"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ସୁରକ୍ଷିତ-ମୋଡ୍ରେ ଅକ୍ଷମ ଅଟେ।"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"ସବୁ ଖାଲି କରନ୍ତୁ"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"ସ୍ପ୍ଲିଟ୍ ସ୍କ୍ରୀନ୍ ବ୍ୟବହାର କରିବା ପାଇଁ ଏଠାକୁ ଡ୍ରାଗ୍ କରନ୍ତୁ"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"ଆପ୍କୁ ବଦଳ କରିବା ପାଇଁ ସ୍ଵାଇପ୍ କରନ୍ତୁ"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"ଆପ୍ଗୁଡ଼ିକ ମଧ୍ୟରେ ଶୀଘ୍ର ବଦଳ କରିବା ପାଇଁ ଡାହାଣକୁ ଡ୍ରାଗ୍ କରନ୍ତୁ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ଭୂସମାନ୍ତର ଭାବରେ ଭାଗ କରନ୍ତୁ"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ଭୂଲମ୍ବ ଭାବରେ ଭାଗ କରନ୍ତୁ"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"କଷ୍ଟମ୍ କରି ଭାଗ କରନ୍ତୁ"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ସ୍କ୍ରୀନ୍କୁ ଉପର ଆଡ଼କୁ ଭାଗ କରନ୍ତୁ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ସ୍କ୍ରୀନ୍କୁ ବାମ ଆଡ଼କୁ ଭାଗ କରନ୍ତୁ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ସ୍କ୍ରୀନ୍କୁ ଡାହାଣ ଆଡ଼କୁ ଭାଗ କରନ୍ତୁ"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"ସଂକ୍ଷିପ୍ତ ବିବରଣୀକୁ ଟୋଗଲ୍ କରନ୍ତୁ"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ଚାର୍ଜ ହୋଇଗଲା"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"ଚାର୍ଜ କରାଯାଉଛି"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"ଛୋଟ କରନ୍ତୁ"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ଏହି ଆପ୍ରୁ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖାଇବା ଜାରି ରଖିବେ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ବନ୍ଦ କରିହେବ ନାହିଁ"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"ଏହି ଆପ୍ କ୍ୟାମେରା ବ୍ୟବହାର କରୁଛି।"</string>
<string name="appops_microphone" msgid="741508267659494555">"ଏହି ଆପ୍, ମାଇକ୍ରୋଫୋନ୍ ବ୍ୟବହାର କରୁଛି।"</string>
<string name="appops_overlay" msgid="6165912637560323464">"ଏହି ଆପ୍, ଆପଣଙ୍କର ସ୍କ୍ରୀନ୍ ଉପରେ ଥିବା ଅନ୍ୟ ଆପ୍ ଉପରେ ପ୍ରଦର୍ଶିତ ହେଉଛି।"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"ଚାର୍ଜ କରାଯିବାବେଳେ ଶତକଡ଼ା ଦେଖାନ୍ତୁ (ଡିଫଲ୍ଟ)"</item>
<item msgid="3327323682209964956">"ଏହି ଆଇକନ୍ ଦେଖାନ୍ତୁ ନାହିଁ"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"ଅନ୍ୟାନ୍ୟ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"ସ୍ପ୍ଲିଟ୍-ସ୍କ୍ରୀନ ବିଭାଜକ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ବାମ ପଟକୁ ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନ୍ କରନ୍ତୁ"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 7e9a916..57971eb 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"ਸਿਸਟਮ UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"ਹਟਾਓ"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ਸੂਚੀ ਵਿੱਚੋਂ ਹਟਾਓ"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ਐਪ ਜਾਣਕਾਰੀ"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"ਤੁਹਾਡੀਆਂ ਹਾਲੀਆ ਸਕ੍ਰੀਨਾਂ ਇੱਥੇ ਪ੍ਰਗਟ ਹੋਣਗੀਆਂ"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ਹਾਲੀਆ ਐਪਾਂ ਨੂੰ ਖਾਰਜ ਕਰੋ"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">ਰੂਪ-ਰੇਖਾ ਵਿੱਚ %d ਸਕ੍ਰੀਨਾਂ</item>
- <item quantity="other">ਰੂਪ-ਰੇਖਾ ਵਿੱਚ %d ਸਕ੍ਰੀਨਾਂ</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ਕੋਈ ਸੂਚਨਾਵਾਂ ਨਹੀਂ"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ਜਾਰੀ"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"ਸੂਚਨਾਵਾਂ"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ਫ਼ੋਨ ਖੋਲ੍ਹੋ"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ਅਵਾਜ਼ੀ ਸਹਾਇਕ ਖੋਲ੍ਹੋ"</string>
<string name="camera_label" msgid="7261107956054836961">"ਕੈਮਰਾ ਖੋਲ੍ਹੋ"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"ਨਵਾਂ ਕੰਮ ਲੇਆਉਟ ਚੁਣੋ"</string>
<string name="cancel" msgid="6442560571259935130">"ਰੱਦ ਕਰੋ"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"ਮਦਦ ਸੁਨੇਹਾ ਖੇਤਰ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"ਪੁਸ਼ਟੀ ਕਰੋ"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਖਾਰਜ ਕਰੋ।"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ਰੱਦ ਕੀਤਾ।"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ਸਾਰੀਆਂ ਹਾਲੀਆ ਐਪਲੀਕੇਸ਼ਨਾਂ ਰੱਦ ਕੀਤੀਆਂ।"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ਐਪਲੀਕੇਸ਼ਨਾਂ ਜਾਣਕਾਰੀ ਖੋਲ੍ਹੋ।"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ਚਾਲੂ ਕਰ ਰਿਹਾ ਹੈ।"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"ਸੂਚਨਾ ਰੱਦ ਕੀਤੀ।"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ਸੂਚਨਾ ਸ਼ੇਡ।"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ।"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC ਨੂੰ ਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"ਕੋਈ ਹਾਲੀਆ ਆਈਟਮਾਂ ਨਹੀਂ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ਤੁਸੀਂ ਸਭ ਕੁਝ ਸਾਫ਼ ਕਰ ਦਿੱਤਾ ਹੈ"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"ਐਪਲੀਕੇਸ਼ਨ ਜਾਣਕਾਰੀ"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ਸਕ੍ਰੀਨ ਪਿਨਿੰਗ"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"ਖੋਜੋ"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਚਾਲੂ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਸੁਰੱਖਿਅਤ-ਮੋਡ ਵਿੱਚ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ।"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"ਸਭ ਕਲੀਅਰ ਕਰੋ"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਇੱਥੇ ਘਸੀਟੋ"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"ਐਪਾਂ ਵਿਚਾਲੇ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਲਈ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"ਐਪਾਂ ਵਿਚਾਲੇ ਤੇਜ਼ੀ ਨਾਲ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਲਈ ਸੱਜੇ ਪਾਸੇ ਵੱਲ ਘਸੀਟੋ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ਹੌਰੀਜ਼ੌਂਟਲ ਸਪਲਿਟ"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ਵਰਟੀਕਲ ਸਪਲਿਟ"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ਵਿਉਂਂਤੀ ਸਪਲਿਟ"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ਸਕ੍ਰੀਨ ਨੂੰ ਉੱਪਰ ਵੱਲ ਵਿਭਾਜਿਤ ਕਰੋ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ਸਕ੍ਰੀਨ ਨੂੰ ਖੱਬੇ ਪਾਸੇ ਵਿਭਾਜਿਤ ਕਰੋ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ਸਕ੍ਰੀਨ ਨੂੰ ਸੱਜੇ ਪਾਸੇ ਵਿਭਾਜਿਤ ਕਰੋ"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"ਰੂਪ-ਰੇਖਾ ਨੂੰ ਟੌਗਲ ਕਰੋ"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ਚਾਰਜ ਹੋਇਆ"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"ਚਾਰਜ ਕਰ ਰਿਹਾ ਹੈ"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"ਛੋਟਾ ਕਰੋ"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ਕੀ ਇਸ ਐਪ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ਇਨ੍ਹਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬੰਦ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"ਇਹ ਐਪ ਕੈਮਰੇ ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ।"</string>
<string name="appops_microphone" msgid="741508267659494555">"ਇਹ ਐਪ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ।"</string>
<string name="appops_overlay" msgid="6165912637560323464">"ਇਹ ਐਪ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਹੋਰਾਂ ਐਪਾਂ ਉੱਪਰ ਦਿਖਾਈ ਜਾ ਰਹੀ ਹੈ।"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"ਚਾਰਜਿੰਗ ਦੌਰਾਨ ਪ੍ਰਤੀਸ਼ਤਤਾ ਦਿਖਾਓ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
<item msgid="3327323682209964956">"ਇਸ ਪ੍ਰਤੀਕ ਨੂੰ ਨਾ ਦਿਖਾਓ"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"ਹੋਰ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਡਿਵਾਈਡਰ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ਖੱਬੇ ਪੂਰੀ ਸਕ੍ਰੀਨ"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 22ef98c..2510aba 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -21,16 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Interfejs"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Wyczyść"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Usuń z listy"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacje o aplikacji"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Tutaj pojawią się ostatnie ekrany"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ukryj ostatnie aplikacje"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="few">%d ekrany w widoku przeglądu</item>
- <item quantity="many">%d ekranów w widoku przeglądu</item>
- <item quantity="other">%d ekranu w widoku przeglądu</item>
- <item quantity="one">1 ekran w widoku przeglądu</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Brak powiadomień"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Bieżące"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Powiadomienia"</string>
@@ -103,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"otwórz telefon"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"otwórz pomoc głosową"</string>
<string name="camera_label" msgid="7261107956054836961">"otwórz aparat"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Wybierz nowy układ zadań"</string>
<string name="cancel" msgid="6442560571259935130">"Anuluj"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Obszar komunikatu pomocy"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Potwierdź"</string>
@@ -190,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Usuń stąd <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>: zamknięto."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Wszystkie ostatnie aplikacje zostały zamknięte."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Otwórz informacje o aplikacji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Uruchamiam <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Zamknięto powiadomienie."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Obszar powiadomień."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Szybkie ustawienia."</string>
@@ -361,23 +345,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"Komunikacja NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"Komunikacja NFC jest wyłączona"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"Komunikacja NFC jest włączona"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Brak ostatnich elementów"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Wszystko zostało wyczyszczone"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacje o aplikacji"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"przypinanie ekranu"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"szukaj"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Nie udało się uruchomić aplikacji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplikacja <xliff:g id="APP">%s</xliff:g> została wyłączona w trybie bezpiecznym."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Wyczyść wszystko"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Przeciągnij tutaj, by podzielić ekran"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Przesuń w górę, by przełączyć aplikacje"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Szybko przeciągnij w prawo, by przełączyć aplikacje"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podziel poziomo"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podziel pionowo"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Podziel niestandardowo"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Podziel ekran u góry"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Podziel ekran z lewej"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Podziel ekran z prawej"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Przełącz Przegląd"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Naładowana"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Ładowanie"</string>
@@ -626,6 +595,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimalizuj"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Nadal pokazywać powiadomienia z tej aplikacji?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Tych powiadomień nie można wyłączyć"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Ta aplikacja używa aparatu."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ta aplikacja używa mikrofonu."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ta aplikacja wyświetla się nad innymi aplikacjami na ekranie."</string>
@@ -764,6 +735,8 @@
<item msgid="2139628951880142927">"Pokazuj procent podczas ładowania (domyślnie)"</item>
<item msgid="3327323682209964956">"Nie pokazuj tej ikony"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Inne"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Linia dzielenia ekranu"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Lewa część ekranu na pełnym ekranie"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index f26d1ba..507c6b0 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Interf sist"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Limpar"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remover da lista"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Inform. do app"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Suas telas recentes aparecem aqui"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dispensar apps recentes"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d telas em \"Visão geral\"</item>
- <item quantity="other">%d telas em \"Visão geral\"</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em andamento"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificações"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"abrir telefone"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"abrir assistência de voz"</string>
<string name="camera_label" msgid="7261107956054836961">"abrir câmera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Selecionar novo layout da tarefa"</string>
<string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Área da mensagem de ajuda"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirmar"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Descartar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> descartado."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Todos os apps recentes foram dispensados."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Abre informações do app <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificação dispensada."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Aba de notificações."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configurações rápidas."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"A NFC está desativada"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"A NFC está ativada"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nenhum item recente"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Você limpou tudo"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do app"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixação de tela"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Não foi possível iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"O app <xliff:g id="APP">%s</xliff:g> está desativado no modo de segurança."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Limpar tudo"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Arraste aqui para usar a tela dividida"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Deslize para cima para alternar entre os apps"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arraste para a direita para alternar rapidamente entre os apps"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dividir a tela para a parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dividir a tela para a esquerda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dividir a tela para a direita"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Alternar Visão geral"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Carregando"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuar mostrando notificações desse app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Não é possível desativar essas notificações"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"pelo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Este app está usando a câmera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Este app está usando o microfone."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Este app está sobreposto a outros apps na sua tela."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Mostrar porcentagem durante o carregamento (padrão)"</item>
<item msgid="3327323682209964956">"Não mostrar este ícone"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Mostrar ícones de notificações de baixa prioridade"</string>
<string name="other" msgid="4060683095962566764">"Outros"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Divisor de tela"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Lado esquerdo em tela cheia"</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index e6ed4dc..f3c993f 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"IU do sistema"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Limpar"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remover da lista"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info. da aplicação"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Os ecrãs recentes aparecem aqui"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignorar aplicações recentes"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d ecrãs na Vista geral</item>
- <item quantity="one">1 ecrã na Vista geral</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em curso"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificações"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"abrir telemóvel"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"abrir assistente de voz"</string>
<string name="camera_label" msgid="7261107956054836961">"abrir câmara"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Selecionar novo esquema de tarefa"</string>
<string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Área da mensagem de ajuda"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirmar"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ignorar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ignorado."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Todas as aplicações recentes foram ignoradas."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Abrir as informações da aplicação <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"A iniciar <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificação ignorada."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Painel de notificações."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Definições rápidas."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"O NFC está desativado"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"O NFC está ativado"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nenhum item recente"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Limpou tudo"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações da aplicação"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixação no ecrã"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Não foi possível iniciar o <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"O <xliff:g id="APP">%s</xliff:g> está desativado no modo de segurança."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Limpar tudo"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Arraste aqui para utilizar o ecrã dividido"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Deslizar rapidamente para cima para mudar de aplicação"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arraste para a direita para mudar rapidamente de aplicação."</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Ecrã dividido na parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Ecrã dividido à esquerda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Ecrã dividido à direita"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Ativar/desativar Vista geral"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"A carregar"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Pretende continuar a ver notificações desta aplicação?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Não é possível desativar estas notificações."</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"através da aplicação <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Esta aplicação está a utilizar a câmara."</string>
<string name="appops_microphone" msgid="741508267659494555">"Esta aplicação está a utilizar o microfone."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Esta aplicação está a sobrepor-se a outras aplicações no ecrã."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Mostrar a percentagem durante o carregamento (predefinição)"</item>
<item msgid="3327323682209964956">"Não mostrar este ícone"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Mostrar ícones de notificações de prioridade baixa"</string>
<string name="other" msgid="4060683095962566764">"Outro"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Divisor do ecrã dividido"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Ecrã esquerdo inteiro"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index f26d1ba..507c6b0 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Interf sist"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Limpar"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remover da lista"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Inform. do app"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Suas telas recentes aparecem aqui"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dispensar apps recentes"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d telas em \"Visão geral\"</item>
- <item quantity="other">%d telas em \"Visão geral\"</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em andamento"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificações"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"abrir telefone"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"abrir assistência de voz"</string>
<string name="camera_label" msgid="7261107956054836961">"abrir câmera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Selecionar novo layout da tarefa"</string>
<string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Área da mensagem de ajuda"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirmar"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Descartar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> descartado."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Todos os apps recentes foram dispensados."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Abre informações do app <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificação dispensada."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Aba de notificações."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configurações rápidas."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"A NFC está desativada"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"A NFC está ativada"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nenhum item recente"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Você limpou tudo"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do app"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixação de tela"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Não foi possível iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"O app <xliff:g id="APP">%s</xliff:g> está desativado no modo de segurança."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Limpar tudo"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Arraste aqui para usar a tela dividida"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Deslize para cima para alternar entre os apps"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arraste para a direita para alternar rapidamente entre os apps"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dividir a tela para a parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dividir a tela para a esquerda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dividir a tela para a direita"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Alternar Visão geral"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Carregando"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuar mostrando notificações desse app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Não é possível desativar essas notificações"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"pelo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Este app está usando a câmera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Este app está usando o microfone."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Este app está sobreposto a outros apps na sua tela."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Mostrar porcentagem durante o carregamento (padrão)"</item>
<item msgid="3327323682209964956">"Não mostrar este ícone"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Mostrar ícones de notificações de baixa prioridade"</string>
<string name="other" msgid="4060683095962566764">"Outros"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Divisor de tela"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Lado esquerdo em tela cheia"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index c553f6e..53d8277 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -21,15 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI sistem"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ștergeți"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminați din listă"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info aplicație"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ecranele dvs. recente apar aici"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Renunțați la aplicațiile recente"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="few">%d ecrane în Recente</item>
- <item quantity="other">%d de ecrane în Recente</item>
- <item quantity="one">Un ecran în Recente</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nicio notificare"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"În desfășurare"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificări"</string>
@@ -102,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"deschideți telefonul"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"deschideți asistentul vocal"</string>
<string name="camera_label" msgid="7261107956054836961">"deschideți camera foto"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Selectați noul aspect pentru activitate"</string>
<string name="cancel" msgid="6442560571259935130">"Anulați"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Zona mesajelor de ajutor"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Confirmați"</string>
@@ -189,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Închideți <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> a fost eliminată."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Toate aplicațiile recente au fost închise."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Deschideți informațiile despre aplicația <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Se inițiază <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificarea a fost închisă."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Fereastră pentru notificări."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Setări rapide."</string>
@@ -358,23 +343,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"Serviciul NFC este dezactivat"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"Serviciul NFC este activat"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Niciun element recent"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Ați șters tot"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informații despre aplicație"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixarea ecranului"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"căutare"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> nu a putut porni."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplicația <xliff:g id="APP">%s</xliff:g> este dezactivată în modul sigur."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Ștergeți tot"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Trageți aici pentru a folosi ecranul împărțit"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Glisați în sus pentru a comuta între aplicații"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Glisați la dreapta pentru a comuta rapid între aplicații"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divizare pe orizontală"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divizare pe verticală"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divizare personalizată"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Divizați ecranul în partea de sus"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Divizați ecranul la stânga"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Divizați ecranul la dreapta"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Comutați secțiunea Recente"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Încărcată"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Se încarcă"</string>
@@ -622,6 +592,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizați"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Doriți să continuați afișarea notificărilor de la această aplicație?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Aceste notificări nu pot fi dezactivate"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Această aplicație folosește camera foto."</string>
<string name="appops_microphone" msgid="741508267659494555">"Această aplicație folosește microfonul."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Această aplicație se afișează pe alte aplicații de pe ecran."</string>
@@ -758,6 +730,8 @@
<item msgid="2139628951880142927">"Afișează procentajul când se încarcă (prestabilit)"</item>
<item msgid="3327323682209964956">"Nu afișa această pictogramă"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Altele"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Separator pentru ecranul împărțit"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Partea stângă pe ecran complet"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 07aa66a..b180f87 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -21,16 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Интерфейс системы"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Очистить"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Удалить из списка"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"О приложении"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Здесь будут показаны недавние приложения."</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Закрыть недавние приложения"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">Показан %d экран</item>
- <item quantity="few">Показано %d экрана</item>
- <item quantity="many">Показано %d экранов</item>
- <item quantity="other">Показано %d экранов</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Нет уведомлений"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Текущие"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Уведомления"</string>
@@ -103,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"Открыть телефон."</string>
<string name="voice_assist_label" msgid="3956854378310019854">"включить аудиоподсказки"</string>
<string name="camera_label" msgid="7261107956054836961">"Открыть камеру."</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Выберите другой макет"</string>
<string name="cancel" msgid="6442560571259935130">"Отмена"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Справочное сообщение"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Подтвердить"</string>
@@ -190,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Удаление приложения <xliff:g id="APP">%s</xliff:g> из списка."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" удалено из списка."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Все недавние приложения закрыты."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Открыть информацию о приложении \"<xliff:g id="APP">%s</xliff:g>\""</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Запуск приложения <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Уведомление закрыто"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Панель уведомлений"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Быстрые настройки"</string>
@@ -361,23 +345,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"Модуль NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"Модуль NFC отключен"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"Модуль NFC включен"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Здесь пока ничего нет."</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Вы очистили всё"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Сведения о приложении"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Заблокировать в приложении"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"поиск"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Не удалось запустить приложение \"<xliff:g id="APP">%s</xliff:g>\""</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" отключено в безопасном режиме."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Очистить все"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Перетащите сюда, чтобы разделить экран"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Чтобы переключиться между приложениями, проведите по экрану вверх."</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Перетащите вправо, чтобы быстро переключиться между приложениями"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Разделить по горизонтали"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Разделить по вертикали"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Разделить по-другому"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Разделить экран по верхнему краю"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Разделить экран по левому краю"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Разделить экран по правому краю"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Переключить режим обзора"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Батарея заряжена"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарядка батареи"</string>
@@ -626,6 +595,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Свернуть"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Показывать уведомления от этого приложения?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Эти уведомления нельзя отключить."</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Это приложение использует камеру."</string>
<string name="appops_microphone" msgid="741508267659494555">"Это приложение использует микрофон."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Это приложение располагается поверх других приложений."</string>
@@ -764,6 +735,8 @@
<item msgid="2139628951880142927">"Показывать процент во время зарядки (по умолчанию)"</item>
<item msgid="3327323682209964956">"Не показывать этот значок"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Другое"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Разделитель экрана"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Левый во весь экран"</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index aac62a2..0eae821 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"පද්ධති UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"හිස් කරන්න"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ලැයිස්තුවෙන් ඉවත් කරන්න"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"යෙදුම් තොරතුරු"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"මෙහි ඔබගේ මෑතක තිර පෙන්නුම් කරයි"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"මෑත යෙදුම් ඉවතලන්න"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">විශ්ලේෂණය තුළ තිර %d යි</item>
- <item quantity="other">විශ්ලේෂණය තුළ තිර %d</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"දැනුම්දීම් නැත"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"දැනට පවතින"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"දැනුම්දීම්"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"දුරකථනය විවෘත කරන්න"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"විවෘත හඬ සහාය"</string>
<string name="camera_label" msgid="7261107956054836961">"කැමරාව විවෘත කරන්න"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"නව කාර්යය සැකැස්ම තෝරන්න"</string>
<string name="cancel" msgid="6442560571259935130">"අවලංගු කරන්න"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"උදවු පණිවිඩ ප්රදේශය"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"තහවුරු කරන්න"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ඉවතලන්න."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> අස් කර ඇත."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"සියලුම මෑත යෙඳුම් අස් කරන ලදි."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> යෙදුම් තොරතුරු විවෘත කරයි."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ආරම්භ කරමින්."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"දැනුම්දීම නිෂ්ප්රභා කරඇත."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"දැනුම්දීම් ආවරණය."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ක්ෂණික සැකසීම්."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC අබලයි"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC සබලයි"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"මෑත අයිතම නැත"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ඔබ සියලු දේ හිස් කර ඇත"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"යෙදුම් තොරතුරු"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"තිර ඇමිණීම"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"සෙවීම"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ආරම්භ කළ නොහැක."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ආරක්ෂිත ප්රකාරය තුළ අබලයි."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"සියල්ල හිස් කරන්න"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"බෙදුම් තිරය භාවිත කිරීමට මෙතැනට අදින්න"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"යෙදුම් මාරු කිරීමට ස්වයිප් කරන්න"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"ඉක්මනින් යෙදුම් මාරු කිරීමට දකුණට අදින්න"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"තිරස්ව වෙන් කරන්න"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"සිරස්ව වෙන් කරන්න"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"අභිමත ලෙස වෙන් කරන්න"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"තිරය ඉහළට බෙදන්න"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"තිරය වමට බෙදන්න"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"තිරය දකුණට බෙදන්න"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"දළ විශ්ලේෂණය ටොගල කරන්න"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"අරෝපිතයි"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"ආරෝපණය වෙමින්"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"කුඩා කරන්න"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"මෙම යෙදුම වෙතින් දැනුම්දීම් පෙන්වමින් තබන්නද?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"මෙම දැනුම්දීම් ක්රියාවිරහිත කළ නොහැකිය"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"මෙම යෙදුම කැමරාව භාවිතා කරයි."</string>
<string name="appops_microphone" msgid="741508267659494555">"මෙම යෙදුම මයික්රෆෝනය භාවිතා කරයි."</string>
<string name="appops_overlay" msgid="6165912637560323464">"මෙම යෙදුම් ඔබගේ තිරය මත අනෙකුත් යෙදුම්වලට උඩින් සංදර්ශනය වේ."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"ආරෝපණය වන විට ප්රතිශතය පෙන්වන්න (පෙරනිමි)"</item>
<item msgid="3327323682209964956">"මෙම නිරූපකය නොපෙන්වන්න"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"වෙනත්"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"බෙදුම්-තිර වෙන්කරණය"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"වම් පූර්ණ තිරය"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 58e176a..6c6ad14 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -21,16 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI systému"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Vymazať"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odstrániť zo zoznamu"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"O aplikácii"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Vaše nedávne obrazovky sa zobrazia tu."</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zatvoriť nedávne aplikácie"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="few">%d obrazovky v Prehľade</item>
- <item quantity="many">%d obrazovky v Prehľade</item>
- <item quantity="other">%d obrazoviek v Prehľade</item>
- <item quantity="one">1 obrazovka v Prehľade</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Žiadne upozornenia"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Prebiehajúce"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Upozornenia"</string>
@@ -103,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"otvoriť telefón"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"otvoriť hlasového asistenta"</string>
<string name="camera_label" msgid="7261107956054836961">"spustiť fotoaparát"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Vyberte nové rozloženie úlohy"</string>
<string name="cancel" msgid="6442560571259935130">"Zrušiť"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Oblasť správy pomocníka"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Potvrdiť"</string>
@@ -190,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Zavrieť aplikáciu <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikácia <xliff:g id="APP">%s</xliff:g> bola zrušená."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Všetky nedávne aplikácie boli odmietnuté."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Otvoriť informácie o aplikácii <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Spúšťa sa aplikácia <xliff:g id="APP">%s</xliff:g>"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Upozornenie bolo zrušené."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Panel upozornení."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Rýchle nastavenia."</string>
@@ -361,23 +345,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC je deaktivované"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC je aktivované"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Žiadne nedávne položky"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vymazali ste všetko"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informácie o aplikácii"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pripnutie obrazovky"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"hľadať"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikáciu <xliff:g id="APP">%s</xliff:g> sa nepodarilo spustiť"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplikácia <xliff:g id="APP">%s</xliff:g> je v núdzovom režime zakázaná."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Vymazať všetko"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Presuňte okno sem a použite tak rozdelenú obrazovku"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Potiahnutím nahor prepnete aplikácie"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Presunutím doprava rýchlo prepnete aplikácie"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Rozdeliť vodorovné"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Rozdeliť zvislé"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Rozdeliť vlastné"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Rozdelená obrazovka hore"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Rozdelená obrazovka naľavo"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Rozdelená obrazovka napravo"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Prepnúť prehľad"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nabitá"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Nabíja sa"</string>
@@ -626,6 +595,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimalizovať"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Majú sa upozornenia z tejto aplikácie naďalej zobrazovať?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Tieto upozornenia sa nedajú vypnúť"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Táto aplikácia používa fotoaparát."</string>
<string name="appops_microphone" msgid="741508267659494555">"Táto aplikácia používa mikrofón."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Táto aplikácia sa zobrazuje cez ďalšie aplikácie na obrazovke."</string>
@@ -764,6 +735,8 @@
<item msgid="2139628951880142927">"Zobrazovať percentá počas nabíjania (predvolené)"</item>
<item msgid="3327323682209964956">"Nezobrazovať túto ikonu"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Ďalšie"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Rozdeľovač obrazovky"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Ľavá – na celú obrazovku"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 1323fcd..f94ee60 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -21,16 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Sistemski uporabniški vmesnik"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Počisti"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odstrani s seznama"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Podatki o aplikaciji"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Vaši nedavni zasloni so prikazani tu"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zapre nedavne aplikacije"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d zaslon v pregledu</item>
- <item quantity="two">%d zaslona v pregledu</item>
- <item quantity="few">%d zasloni v pregledu</item>
- <item quantity="other">%d zaslonov v pregledu</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ni obvestil"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Trenutno"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obvestila"</string>
@@ -103,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"odpri telefon"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"odpri glasovnega pomočnika"</string>
<string name="camera_label" msgid="7261107956054836961">"odpri fotoaparat"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Izberite novo postavitev opravil"</string>
<string name="cancel" msgid="6442560571259935130">"Prekliči"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Območje sporočila pomoči"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Potrdite"</string>
@@ -190,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Opusti aplikacijo <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikacija <xliff:g id="APP">%s</xliff:g> je bila odstranjena."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Vse nedavne aplikacije so bile opuščene."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Odpiranje podatkov o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Zaganjanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Obvestilo je bilo odstranjeno."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Zaslon z obvestili."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Hitre nastavitve."</string>
@@ -361,23 +345,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"Tehnologija NFC je onemogočena"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"Tehnologija NFC je omogočena"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Ni nedavnih elementov"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vse te počistili"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Podatki o aplikaciji"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pripenjanje zaslona"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"iskanje"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikacije <xliff:g id="APP">%s</xliff:g> ni bilo mogoče zagnati."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplikacija <xliff:g id="APP">%s</xliff:g> je v varnem načinu onemogočena."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Izbriši vse"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Povlecite sem za razdeljeni zaslon"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Za preklop aplikacij povlecite navzgor"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Povlecite v desno za hiter preklop med aplikacijami"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Razdeli vodoravno"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Razdeli navpično"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Razdeli po meri"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Razdeljen zaslon na vrhu"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Razdeljen zaslon na levi"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Razdeljen zaslon na desni"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Vklop/izklop pregleda"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Akumulator napolnjen"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Polnjenje"</string>
@@ -626,6 +595,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimiraj"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Želite, da so obvestila te aplikacije še naprej prikazana?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Teh obvestil ni mogoče izklopiti"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Ta aplikacija uporablja fotoaparat."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ta aplikacija uporablja mikrofon."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ta aplikacija prekriva druge aplikacije na zaslonu."</string>
@@ -764,6 +735,8 @@
<item msgid="2139628951880142927">"Prikaži odstotek med polnjenjem (privzeto)"</item>
<item msgid="3327323682209964956">"Ne prikaži te ikone"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Drugo"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Razdelilnik zaslonov"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Levi v celozaslonski način"</string>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 8f08665..7869cd9 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Ndërfaqja e përdoruesit të sistemit"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Pastro"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Hiq nga lista"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacioni i aplikacionit"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ekranet e tua më të fundit shfaqen këtu"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Largo aplikacionet më të fundit"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d ekrane te \"Përmbledhja\"</item>
- <item quantity="one">1 ekran te \"Përmbledhja\"</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Asnjë njoftim"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Në vazhdim"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Njoftimet"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"hap telefonin"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"hap ndihmën zanore"</string>
<string name="camera_label" msgid="7261107956054836961">"hap kamerën"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Zgjidh strukturën e re të detyrës"</string>
<string name="cancel" msgid="6442560571259935130">"Anulo"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Zona e mesazhit të ndihmës"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Konfirmo"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Largo <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> është hequr."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Të gjitha aplikacionet e fundit u larguan."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Hap informacionin e aplikacionit <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Po nis <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Njoftimi është hequr."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Streha e njoftimeve."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Cilësime të shpejta."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC është çaktivizuar"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC është aktivizuar"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Nuk ka asnjë artikull të fundit"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"I ke pastruar të gjitha"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacioni i aplikacionit"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"gozhdimi i ekranit"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"kërko"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> nuk mundi të nisej."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> është i çaktivizuar në modalitetin e sigurt."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Pastroji të gjitha"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Zvarrit këtu për të përdorur ekranin e ndarë"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Rrëshqit shpejt lart për të ndërruar aplikacionet"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Zvarrit djathtas për të ndërruar aplikacionet me shpejtësi"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Ndaje horizontalisht"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Ndaj vertikalisht"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Ndaj të personalizuarën"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Ndaje ekranin lart"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Ndaje ekranin në të majtë"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Ndaje ekranin në të djathtë"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Kalo te përmbledhja"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"I ngarkuar"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Po ngarkohet"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizo"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Do të vazhdosh t\'i shfaqësh njoftimet nga ky aplikacion?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Këto njoftime nuk mund të çaktivizohen"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Ky aplikacion po përdor kamerën."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ky aplikacion po përdor mikrofonin."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ky aplikacion po shfaqet mbi aplikacionet e tjera në ekran."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Shfaq përqindjen gjatë ngarkimit (e parazgjedhur)"</item>
<item msgid="3327323682209964956">"Mos e shfaq këtë ikonë"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Të tjera"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Ndarësi i ekranit të ndarë"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Ekrani i plotë majtas"</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 609f332..420056e 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -21,15 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI система"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Обриши"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Уклањање са листе"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Информације о апликацији"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Недавни екрани се појављују овде"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Одбаци недавне апликације"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d екран у Прегледу</item>
- <item quantity="few">%d екрана у Прегледу</item>
- <item quantity="other">%d екрана у Прегледу</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Нема обавештења"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Текуће"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Обавештења"</string>
@@ -102,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"отвори телефон"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"отвори гласовну помоћ"</string>
<string name="camera_label" msgid="7261107956054836961">"отвори камеру"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Изабери нови распоред задатака"</string>
<string name="cancel" msgid="6442560571259935130">"Откажи"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Област поруке за помоћ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Потврди"</string>
@@ -189,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Одбаците <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Апликација <xliff:g id="APP">%s</xliff:g> је одбачена."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Све недавно коришћене апликације су одбачене."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Отворите информације о апликацији <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Покрећемо <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Обавештење је одбачено."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Прозор са обавештењима."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Брза подешавања."</string>
@@ -358,23 +343,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC је онемогућен"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC је омогућен"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Нема недавних ставки"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Обрисали сте све"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Информације о апликацији"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"качење екрана"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"претражи"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Покретање апликације <xliff:g id="APP">%s</xliff:g> није успело."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Апликација <xliff:g id="APP">%s</xliff:g> је онемогућена у безбедном режиму."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Обриши све"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Превуците овде да бисте користили раздељени екран"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Превуците нагоре да бисте мењали апликације"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Превуците удесно да бисте брзо променили апликације"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Подели хоризонтално"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Подели вертикално"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Прилагођено дељење"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Подели екран нагоре"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Подели екран налево"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Подели екран надесно"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Укључи/искључи преглед"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Напуњена је"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Пуњење"</string>
@@ -622,6 +592,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Умањи"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Желите ли да се обавештења из ове апликације и даље приказују?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Не можете да искључите ова обавештења"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Ова апликација користи камеру."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ова апликација користи микрофон."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ова апликација се приказује преко других апликација на екрану."</string>
@@ -758,6 +730,8 @@
<item msgid="2139628951880142927">"Прикажи проценат током пуњења (подразумевано)"</item>
<item msgid="3327323682209964956">"Не приказуј ову икону"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Друго"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Разделник подељеног екрана"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Режим целог екрана за леви екран"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 72ae99b..238cc9b 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Gränssnitt"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ta bort"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ta bort från listan"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om appen"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Dina senaste skärmar visas här"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Avvisa nya appar"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d skärmar i översikten</item>
- <item quantity="one">En skärm i översikten</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Inga aviseringar"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Pågående"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Aviseringar"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"öppna mobilen"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"öppna röstassistenten"</string>
<string name="camera_label" msgid="7261107956054836961">"öppna kameran"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Välj en ny layout för uppgiften"</string>
<string name="cancel" msgid="6442560571259935130">"Avbryt"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Område för hjälpmeddelande"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Bekräfta"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ta bort <xliff:g id="APP">%s</xliff:g> från listan."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> togs bort permanent."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alla appar har tagits bort från listan Senaste."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Öppna appinformation för <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Startar <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Meddelandet ignorerades."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Meddelandepanel."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Snabbinställningar."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC är inaktiverat"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC är aktiverat"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Listan med de senaste åtgärderna är tom"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du har tömt listan"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformation"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fästa skärmen"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"sök"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Det gick inte att starta appen <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> är inaktiverad i säkert läge."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Rensa alla"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Dra hit för att dela upp skärmen"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Byt appar genom att svepa uppåt"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Tryck och dra åt höger för att snabbt byta mellan appar"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dela horisontellt"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dela vertikalt"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Dela anpassad"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Delad skärm till överkanten"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Delad skärm åt vänster"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Delad skärm åt höger"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Aktivera och inaktivera översikten"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Laddat"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Laddar"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Minimera"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Vill du fortsätta visa aviseringar för den här appen?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"De här aviseringarna kan inte inaktiveras"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Kameran används av appen."</string>
<string name="appops_microphone" msgid="741508267659494555">"Mikrofonen används av appen."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Appen visas över andra appar på skärmen."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Visa procent under laddning (standard)"</item>
<item msgid="3327323682209964956">"Visa inte den här ikonen"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Annat"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Avdelare för delad skärm"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Helskärm på vänster skärm"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index a73d0e7..54e8544 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Kiolesura"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Futa"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ondoa kwenye orodha"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Taarifa za programu-matumizi"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Skrini zako za hivi majuzi huonekana hapa"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ondosha programu za hivi karibuni"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">Skrini %d katika Muhtasari</item>
- <item quantity="one">Skrini 1 katika Muhtasari</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Hakuna arifa"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Inaendelea"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Arifa"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"fungua simu"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"fungua mapendekezo ya sauti"</string>
<string name="camera_label" msgid="7261107956054836961">"fungua kamera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Chagua muundo mpya wa kazi"</string>
<string name="cancel" msgid="6442560571259935130">"Ghairi"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Sehemu ya ujumbe wa usaidizi"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Thibitisha"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ondoa <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> imeondolewa."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Programu za hivi majuzi zimeondolewa."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Fungua maelezo kuhusu programu ya <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Inaanzisha <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Arifa imetupwa."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Kivuli cha arifa."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Mipangilio ya haraka."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC imezimwa"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC imewashwa"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Hakuna vipengee vya hivi karibuni"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Umeondoa vipengee vyote"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Maelezo ya Programu"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"kubandika kwenye skirini"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"tafuta"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Haikuweza kuanzisha <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> imezimwa katika hali salama."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Futa zote"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Buruta hapa ili utumie skrini iliyogawanywa"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Telezesha kidole juu ili ubadilishe programu"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Buruta kulia ili ubadilishe programu haraka"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gawanya Mlalo"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Gawanya Wima"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Maalum Iliyogawanywa"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Gawa skrini kuelekea juu"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Gawa skrini upande wa kushoto"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Gawa skrini upande wa kulia"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Washa Muhtasari"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Betri imejaa"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Inachaji"</string>
@@ -618,6 +589,7 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Punguza"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Ungependa kuendelea kuonyesha arifa kutoka programu hii?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Huwezi kuzima arifa hizi"</string>
+ <string name="notification_delegate_header" msgid="9167022191405284627">"kupitia <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="appops_camera" msgid="8100147441602585776">"Programu hii inatumia kamera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Programu hii inatumia maikrofoni."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Programu hii inachomoza kwenye programu zingine zilizo katika skrini yako."</string>
@@ -752,6 +724,7 @@
<item msgid="2139628951880142927">"Onyesha asilimia wakati inachaji (chaguomsingi)"</item>
<item msgid="3327323682209964956">"Usionyeshe aikoni hii"</item>
</string-array>
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Onyesha aikoni za arifa zisizo muhimu"</string>
<string name="other" msgid="4060683095962566764">"Nyingine"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Kitenganishi cha skrini inayogawanywa"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Skrini nzima ya kushoto"</string>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 02457d9..becd903 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"சாதனத்தின் UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"அழி"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"பட்டியலில் இருந்து அகற்று"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"பயன்பாட்டுத் தகவல்"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"சமீபத்திய திரைகள் இங்கு தோன்றும்"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"சமீபத்திய பயன்பாடுகளை நிராகரி"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">மேலோட்டப் பார்வையில் %d திரைகள்</item>
- <item quantity="one">மேலோட்டப் பார்வையில் 1 திரை</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"அறிவிப்புகள் இல்லை"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"செயலில் இருக்கும்"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"அறிவிப்புகள்"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ஃபோனைத் திற"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"குரல் உதவியைத் திற"</string>
<string name="camera_label" msgid="7261107956054836961">"கேமராவைத் திற"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"புதிய பணி தளவமைப்பைத் தேர்ந்தெடுக்கவும்"</string>
<string name="cancel" msgid="6442560571259935130">"ரத்துசெய்"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"உதவிச் செய்திக்கான பகுதி"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"உறுதிப்படுத்துக"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ஐ நிராகரி."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> விலக்கப்பட்டது."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"எல்லா சமீபத்திய பயன்பாடுகளும் விலக்கப்பட்டன."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> பயன்பாட்டின் தகவலைத் திற."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ஐத் தொடங்குகிறது."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"அறிவிப்பு நிராகரிக்கப்பட்டது."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"அறிவிப்பு விவரம்."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"உடனடி அமைப்பு."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC முடக்கப்பட்டது"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC இயக்கப்பட்டது"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"சமீபத்திய பணிகள் இல்லை"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"எல்லாவற்றையும் அழித்துவிட்டீர்கள்"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"பயன்பாட்டு தகவல்"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"திரையை பின் செய்தல்"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"தேடு"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ஐத் தொடங்க முடியவில்லை."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"பாதுகாப்புப் பயன்முறையில் <xliff:g id="APP">%s</xliff:g> முடக்கப்பட்டது."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"அனைத்தையும் அழி"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"திரைப் பிரிப்பைப் பயன்படுத்த, இங்கே இழுக்கவும்"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"ஆப்ஸிற்கு இடையே மாற்றுவதற்கு, மேல்நோக்கி ஸ்வைப் செய்க"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"ஆப்ஸை வேகமாக மாற்ற, வலப்புறம் இழுக்கவும்"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"கிடைமட்டமாகப் பிரி"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"செங்குத்தாகப் பிரி"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"தனிவிருப்பத்தில் பிரி"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"திரையை மேல்புறமாகப் பிரி"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"திரையை இடப்புறமாகப் பிரி"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"திரையை வலப்புறமாகப் பிரி"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"மேலோட்டப் பார்வையை நிலைமாற்று"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"சார்ஜ் செய்யப்பட்டது"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"சார்ஜ் ஆகிறது"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"சிறிதாக்கு"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"இந்தப் பயன்பாட்டின் அறிவிப்புகளைத் தொடர்ந்து காட்டவா?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"இந்த அறிவிப்புகளை ஆஃப் செய்ய முடியாது"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"இந்த ஆப்ஸானது கேமராவை உபயோகிக்கிறது."</string>
<string name="appops_microphone" msgid="741508267659494555">"இந்த ஆப்ஸானது, மைக்ரோஃபோனை உபயோகிக்கிறது."</string>
<string name="appops_overlay" msgid="6165912637560323464">"இந்த ஆப்ஸானது, உங்கள் திரையில் பிற ஆப்ஸின் இடைமுகத்தின் மேல் தோன்றுகிறது."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"சார்ஜ் செய்யும் போது சதவீதத்தைக் காட்டு (இயல்பு)"</item>
<item msgid="3327323682209964956">"இந்த ஐகானைக் காட்டாதே"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"மற்றவை"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"திரையைப் பிரிக்கும் பிரிப்பான்"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"இடது புறம் முழுத் திரை"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index a6d7699..b895ae6 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"సిస్టమ్ UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"క్లియర్ చేయండి"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"జాబితా నుండి తీసివేయండి"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"యాప్ సమాచారం"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"మీ ఇటీవలి స్క్రీన్లు ఇక్కడ కనిపిస్తాయి"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ఇటీవలి అనువర్తనాలను తీసివేయండి"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">స్థూలదృష్టిలో %d స్క్రీన్లు ఉన్నాయి</item>
- <item quantity="one">స్థూలదృష్టిలో 1 స్క్రీన్ ఉంది</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"నోటిఫికేషన్లు లేవు"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"కొనసాగుతున్నవి"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"నోటిఫికేషన్లు"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"ఫోన్ను తెరువు"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"వాయిస్ అసిస్టెంట్ను తెరువు"</string>
<string name="camera_label" msgid="7261107956054836961">"కెమెరాను తెరువు"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"కొత్త విధి లేఅవుట్ను ఎంచుకోండి"</string>
<string name="cancel" msgid="6442560571259935130">"రద్దు చేయి"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"సహాయ సందేశ ప్రాంతం"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"నిర్ధారించు"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>ని తీసివేయండి."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> తీసివేయబడింది."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"అన్ని ఇటీవలి అనువర్తనాలు తీసివేయబడ్డాయి."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> అనువర్తన సమాచారాన్ని తెరుస్తుంది."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>ని ప్రారంభిస్తోంది."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"నోటిఫికేషన్ తీసివేయబడింది."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"నోటిఫికేషన్ షేడ్."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"శీఘ్ర సెట్టింగ్లు."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC నిలిపివేయబడింది"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC ప్రారంభించబడింది"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"ఇటీవలి అంశాలు ఏవీ లేవు"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"మీరు అన్నింటినీ తీసివేసారు"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"అనువర్తన సమాచారం"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"స్క్రీన్ పిన్నింగ్"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"వెతుకు"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ని ప్రారంభించడం సాధ్యపడలేదు."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> సురక్షిత-మోడ్లో నిలిపివేయబడింది."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"అన్నీ తీసివేయి"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"విభజన స్క్రీన్ను ఉపయోగించడానికి ఇక్కడ లాగండి"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"యాప్లను మార్చడం కోసం ఎగువకు స్వైప్ చేయండి"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"యాప్లను శీఘ్రంగా స్విచ్ చేయడానికి కుడి వైపుకు లాగండి"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"సమతలంగా విభజించు"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"లంబంగా విభజించు"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"అనుకూలంగా విభజించు"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"స్క్రీన్ని ఎగువకు విభజించు"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"స్క్రీన్ని ఎడమ వైపుకి విభజించు"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"స్క్రీన్ని కుడి వైపుకి విభజించు"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"స్థూలదృష్టిని టోగుల్ చేయి"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ఛార్జ్ చేయబడింది"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"ఛార్జ్ అవుతోంది"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"కుదించు"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ఈ యాప్ నుండి నోటిఫికేషన్లను చూపిస్తూ ఉండాలా?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ఈ నోటిఫికేషన్లను ఆఫ్ చేయలేరు"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"ఈ యాప్ ఈ కెమెరాను ఉపయోగిస్తోంది."</string>
<string name="appops_microphone" msgid="741508267659494555">"ఈ యాప్ మైక్రోఫోన్ను ఉపయోగిస్తుంది."</string>
<string name="appops_overlay" msgid="6165912637560323464">"ఈ యాప్ మీ స్క్రీన్లోని ఇతర యాప్లపై ప్రదర్శించబడుతోంది."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"ఛార్జ్ అవుతున్నప్పుడు శాతాన్ని చూపు (డిఫాల్ట్)"</item>
<item msgid="3327323682209964956">"ఈ చిహ్నాన్ని చూపవద్దు"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"ఇతరం"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"విభజన స్క్రీన్ విభాగిని"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ఎడమవైపు పూర్తి స్క్రీన్"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 8c78687..4df01ed 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"ส่วนติดต่อผู้ใช้ของระบบ"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"ล้างข้อมูล"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ลบจากรายการ"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ข้อมูลแอปพลิเคชัน"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"หน้าจอล่าสุดของคุณแสดงที่นี่"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ปิดแอปพลิเคชันล่าสุด"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d หน้าจอในภาพรวม</item>
- <item quantity="one">1 หน้าจอในภาพรวม</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ไม่มีการแจ้งเตือน"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ดำเนินอยู่"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"การแจ้งเตือน"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"เปิดโทรศัพท์"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"เปิดตัวช่วยเสียง"</string>
<string name="camera_label" msgid="7261107956054836961">"เปิดกล้อง"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"เลือกรูปแบบงานใหม่"</string>
<string name="cancel" msgid="6442560571259935130">"ยกเลิก"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"พื้นที่ข้อความช่วยเหลือ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"ยืนยัน"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"ยกเลิก <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ถูกลบไปแล้ว"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ปิดแอปพลิเคชันล่าสุดทั้งหมดแล้ว"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"เปิดข้อมูลแอปพลิเคชัน <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"กำลังเริ่มต้น <xliff:g id="APP">%s</xliff:g>"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"ปิดการแจ้งเตือนแล้ว"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"หน้าต่างแจ้งเตือน"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"การตั้งค่าด่วน"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC ถูกปิดใช้งาน"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"เปิดใช้งาน NFC แล้ว"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"ไม่มีรายการล่าสุด"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"คุณได้ล้างทุกอย่างแล้ว"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"ข้อมูลแอปพลิเคชัน"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"การตรึงหน้าจอ"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"ค้นหา"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"ไม่สามารถเริ่มใช้ <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ปิดใช้ในโหมดปลอดภัย"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"ล้างทั้งหมด"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"ลากมาที่นี่เพื่อใช้การแยกหน้าจอ"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"เลื่อนขึ้นเพื่อสลับแอป"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"ลากไปทางขวาเพื่อสลับแอปอย่างรวดเร็ว"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"แยกในแนวนอน"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"แยกในแนวตั้ง"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"แยกแบบกำหนดเอง"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"แยกหน้าจอไปด้านบน"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"แยกหน้าจอไปทางซ้าย"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"แยกหน้าจอไปทางขวา"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"สลับภาพรวม"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ชาร์จแล้ว"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"กำลังชาร์จ"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"ย่อเล็กสุด"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"แสดงการแจ้งเตือนจากแอปนี้ต่อไปไหม"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ปิดการแจ้งเตือนเหล่านี้ไม่ได้"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"แอปนี้กำลังใช้กล้อง"</string>
<string name="appops_microphone" msgid="741508267659494555">"แอปนี้กำลังใช้ไมโครโฟน"</string>
<string name="appops_overlay" msgid="6165912637560323464">"แอปนี้กำลังแสดงทับแอปอื่นๆ ในหน้าจอ"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"แสดงเปอร์เซ็นต์เมื่อชาร์จ (ค่าเริ่มต้น)"</item>
<item msgid="3327323682209964956">"อย่าแสดงไอคอนนี้"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"อื่นๆ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"เส้นแบ่งหน้าจอ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"เต็มหน้าจอทางซ้าย"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 21cf1f2..71a26ac 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI ng System"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"I-clear"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Alisin mula sa listahan"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Impormasyon ng app"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Lumalabas dito ang iyong kamakailang screen"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Huwag pansinin ang kamakailang apps"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d screen sa Pangkalahatang-ideya</item>
- <item quantity="other">%d na screen sa Pangkalahatang-ideya</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Walang mga notification"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Nagpapatuloy"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Mga Notification"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"buksan ang telepono"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"buksan ang voice assist"</string>
<string name="camera_label" msgid="7261107956054836961">"buksan ang camera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Pumili ng bagong layout ng gawain"</string>
<string name="cancel" msgid="6442560571259935130">"Kanselahin"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Lugar ng mensahe ng tulong"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Kumpirmahin"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"I-dismiss ang <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Hindi pinansin ang <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Na-dismiss ang lahat ng kamakailang application."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Buksan ang impormasyon ng <xliff:g id="APP">%s</xliff:g> application."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Sinisimulan ang <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Na-dismiss ang notification."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Mga mabilisang setting."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"Naka-disable ang NFC"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"Naka-enable ang NFC"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Walang kamakailang item"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Na-clear mo ang lahat"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Impormasyon ng Application"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pagpi-pin sa screen"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"maghanap"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Hindi masimulan <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Naka-disable ang <xliff:g id="APP">%s</xliff:g> sa safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"I-clear lahat"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"I-drag dito upang magamit ang split screen"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Mag-swipe pataas upang lumipat ng app"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"I-drag pakanan para mabilisang magpalipat-lipat ng app"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Custom"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"I-split ang screen pataas"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"I-split ang screen pakaliwa"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"I-split ang screen pakanan"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"I-toggle ang Overview"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nasingil na"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Nagcha-charge"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"I-minimize"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Patuloy na ipakita ang mga notification mula sa app na ito?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Hindi maaaring i-off ang mga notification na ito"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Ginagamit ng app na ito ang camera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ginagamit ng app na ito ang mikropono."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ipinapakita ang app na ito sa ibabaw ng iba pang app sa iyong screen."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Ipakita ang porsyento kapag nagcha-charge (default)"</item>
<item msgid="3327323682209964956">"Huwag ipakita ang icon na ito"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Iba pa"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Divider ng split-screen"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"I-full screen ang nasa kaliwa"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index fb200ec..b3809c4 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Sist Arayüzü"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Temizle"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Listeden kaldır"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Uygulama bilgileri"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Son ekranlarınız burada görünür"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Son uygulamaları kapat"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">Genel Bakış\'ta %d ekran</item>
- <item quantity="one">Genel Bakış\'ta 1 ekran</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bildirim yok"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sürüyor"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Bildirimler"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"telefonu aç"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"sesli yardımı aç"</string>
<string name="camera_label" msgid="7261107956054836961">"kamerayı aç"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Yeni görev düzenini seçin"</string>
<string name="cancel" msgid="6442560571259935130">"İptal"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Yardım mesajı alanı"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Onaylayın"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> uygulamasını kapat."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> kaldırıldı."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Tüm son uygulamalar kapatıldı."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> uygulaması bilgilerini açın."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> başlatılıyor."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Bildirim kapatıldı."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bildirim gölgesi."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Hızlı ayarlar."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC devre dışı"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC etkin"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Yeni öğe yok"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Her şeyi sildiniz"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Uygulama Bilgileri"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekran sabitleme"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"ara"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> başlatılamadı."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g>, güvenli modda devre dışıdır."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Tümünü temizle"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Ekranı bölünmüş olarak kullanmak için burayı sürükleyin"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Uygulamalar arasında geçiş yapmak için yukarı kaydırın"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Uygulamaları hızlıca değiştirmek için sağa kaydırın"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Yatay Ayırma"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dikey Ayırma"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Özel Ayırma"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Ekranı yukarıya doğru böl"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Ekranı sola doğru böl"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Ekranı sağa doğru böl"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Genel bakışı aç/kapat"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Şarj oldu"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Şarj oluyor"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Küçült"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu uygulamadan gelen bildirimler gösterilmeye devam edilsin mi?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Bu bildirimler kapatılamaz"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Bu uygulama kamerayı kullanıyor."</string>
<string name="appops_microphone" msgid="741508267659494555">"Bu uygulama mikrofonu kullanıyor."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Bu uygulama, ekranınızdaki diğer uygulamaların üzerinde görüntüleniyor."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Şarj olurken yüzdeyi göster (varsayılan)"</item>
<item msgid="3327323682209964956">"Bu simgeyi gösterme"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Diğer"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Bölünmüş ekran ayırıcı"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Solda tam ekran"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 82b56a2..a52ec2a 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -21,16 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Інтерфейс системи"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Очист."</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Видалити зі списку"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Про додаток"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ваші останні екрани відображаються тут"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Відхилити останні програми"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">На панелі огляду %d екран</item>
- <item quantity="few">На панелі огляду %d екрани</item>
- <item quantity="many">На панелі огляду %d екранів</item>
- <item quantity="other">На панелі огляду %d екрана</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Немає сповіщень"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Поточні"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Сповіщення"</string>
@@ -103,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"відкрити телефон"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"запустити голосові підказки"</string>
<string name="camera_label" msgid="7261107956054836961">"відкрити камеру"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Виберіть новий макет завдання"</string>
<string name="cancel" msgid="6442560571259935130">"Скасувати"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Область довідкового повідомлення"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Підтвердити"</string>
@@ -190,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Видалити додаток <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Програму <xliff:g id="APP">%s</xliff:g> закрито."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Усі останні додатки закрито."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Відкрити інформацію про додаток <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Запуск додатка <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Сповіщення відхилено."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Панель сповіщень."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Швидке налаштування."</string>
@@ -361,23 +345,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC вимкнено"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC ввімкнено"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Немає нещодавніх завдань"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Ви очистили все"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Інформація про додаток"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"закріпити екран"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"пошук"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Не вдалося запустити <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Додаток <xliff:g id="APP">%s</xliff:g> вимкнено в безпечному режимі."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Очистити все"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Перетягніть сюди, щоб увімкнути режим розділеного екрана"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Проводьте пальцем угору, щоб переходити між додатками"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Перетягуйте праворуч, щоб швидко переходити між додатками"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Розділити горизонтально"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Розділити вертикально"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Розділити (власний варіант)"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Розділити екран угорі"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Розділити екран ліворуч"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Розділити екран праворуч"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Увімкнути або вимкнути огляд"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Заряджено"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Заряджається"</string>
@@ -626,6 +595,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Згорнути"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Чи показувати сповіщення з цього додатка надалі?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Ці сповіщення не можна вимкнути"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Цей додаток використовує камеру."</string>
<string name="appops_microphone" msgid="741508267659494555">"Цей додаток використовує мікрофон."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Цей додаток відображається поверх інших додатків на екрані."</string>
@@ -764,6 +735,8 @@
<item msgid="2139628951880142927">"Показувати відсотки під час заряджання (за умовчанням)"</item>
<item msgid="3327323682209964956">"Не показувати цей значок"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Інше"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Розділювач екрана"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Ліве вікно на весь екран"</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index b02ceae..eb0c60b 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"سسٹم UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"صاف کریں"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"فہرست سے ہٹائیں"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ایپ کی معلومات"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"آپ کی حالیہ اسکرینز یہاں ظاہر ہوتی ہیں"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"حالیہ ایپس برخاست کریں"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">عمومی جائزہ میں %d اسکرینز</item>
- <item quantity="one">عمومی جائزہ میں 1 اسکرین</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"کوئی اطلاعات نہیں ہیں"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"جاری"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"اطلاعات"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"فون کھولیں"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"صوتی معاون کھولیں"</string>
<string name="camera_label" msgid="7261107956054836961">"کیمرا کھولیں"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"نئے کام کا لے آؤٹ منتخب کریں"</string>
<string name="cancel" msgid="6442560571259935130">"منسوخ کریں"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"امدادی پیغام کا علاقہ"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"تصدیق کریں"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> کو مسترد کریں۔"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> کو ہٹا دیا گیا۔"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"سبھی حالیہ ایپلیکیشنز کو برخاست کر دیا گیا۔"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ایپلیکیشن معلومات کھولیں۔"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> شروع ہو رہی ہے۔"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"اطلاع مسترد ہوگئی۔"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"اطلاعاتی شیڈ۔"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"فوری ترتیبات۔"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC غیر فعال ہے"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC فعال ہے"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"کوئی حالیہ آئٹم نہیں"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"آپ نے سب کچھ صاف کر دیا ہے"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"ایپلیکیشن کی معلومات"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"اسکرین کو پن کرنا"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"تلاش کریں"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> کو شروع نہیں کیا جا سکا۔"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"محفوظ موڈ میں <xliff:g id="APP">%s</xliff:g> غیر فعال ہوتی ہے۔"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"سبھی کو صاف کریں"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"اسپلٹ اسکرین استعمال کرنے کیلئے یہاں گھسیٹیں"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"ایپس سوئچ کرنے کیلئے اوپر سوائپ کریں"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"تیزی سے ایپس کو سوئچ کرنے کے لیے دائیں طرف گھسیٹیں"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"بلحاظ افقی الگ کریں"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"بلحاظ عمودی الگ کریں"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"بلحاظ حسب ضرورت الگ کریں"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"اسکرین کو اوپر کی جانب تقسیم کریں"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"اسکرین کو بائیں جانب تقسیم کریں"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"اسکرین کو دائیں جانب تقسیم کریں"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"مجموعی جائزہ ٹوگل کریں"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"چارج ہوگئی"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"چارج ہو رہی ہے"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"چھوٹا کریں"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"اس ایپ کی طرف سے اطلاعات دکھانا جاری رکھیں؟"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ان اطلاعات کو آف نہیں کیا جا سکتا"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"یہ ایپ کیمرے کا استعمال کر رہی ہے۔"</string>
<string name="appops_microphone" msgid="741508267659494555">"یہ ایپ مائیکروفون کا استعمال کر رہی ہے۔"</string>
<string name="appops_overlay" msgid="6165912637560323464">"یہ ایپ آپ کی اسکرین پر دیگر ایپس پر ڈسپلے کر رہی ہے۔"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"چارج ہوتے وقت فیصد دکھائیں (ڈیفالٹ)"</item>
<item msgid="3327323682209964956">"یہ آئیکن نہ دکھائیں"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"دیگر"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"سپلٹ اسکرین تقسیم کار"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"بائیں فل اسکرین"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index a128e7f..e7c3300 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"UI tizimi"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Tozalash"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ro‘yxatdan o‘chirish"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Ilova haqida"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Yaqinda ish-gan ilovalar bu yerda ko‘rinadi"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"So‘nggi dasturlarni tozalash"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">Umumiy ma’lumot bo‘limida %d ta ekran bor</item>
- <item quantity="one">Umumiy ma’lumot bo‘limida 1 ta ekran bor</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bildirishnomalar yo‘q"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Hali bajarilmagan"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Eslatmalar"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"telefonni ochish"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"ovozli yordamni yoqish"</string>
<string name="camera_label" msgid="7261107956054836961">"kamerani ochish"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Yangi vazifa tartibini tanlash"</string>
<string name="cancel" msgid="6442560571259935130">"Bekor qilish"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Yordam xabari"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"OK"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Olib tashlash: <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> olib tashlangan."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Yaqinda ishlatilgan barcha ilovalar olib tashlandi."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ilovasi haqidagi ma’lumotlarni ochadi."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ishga tushirilmoqda."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Xabarnoma e‘tiborsiz qoldirildi."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Xabarnoma soyasi."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Tezkor sozlamalar."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC o‘chiq"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC yoniq"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Hozircha hech narsa yo‘q"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Hammasi o‘chirildi"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Ilova haqida ma’lumot"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekranni mahkamlash"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"qidirish"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"“<xliff:g id="APP">%s</xliff:g>” ilovasini ishga tushirib bo‘lmadi."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Xavfsiz rejimda <xliff:g id="APP">%s</xliff:g> ilovasi o‘chirib qo‘yildi."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Hammasini tozalash"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Ekranni bo‘lish xususiyatidan foydalanish uchun bu yerga torting"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Ilovalarni almashtirish uchun ekranni tepaga suring"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Ilovalarni tezkor almashtirish uchun o‘ngga torting"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gorizontal yo‘nalishda bo‘lish"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikal yo‘nalishda bo‘lish"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Boshqa usulda bo‘lish"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Ekranni tepaga qadash"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Ekranni chap tomonga qadash"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Ekranni o‘ng tomonga qadash"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Umumiy nazar rejimini almashtirish"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Batareya quvvati to‘ldi"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Quvvat olmoqda"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Kichraytirish"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu ilovadan keladigan bildirishnomalar chiqaversinmi?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Bu bildirishnomalarni chiqmaydigan qilish imkonsiz"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Bu ilova kameradan foydalanmoqda."</string>
<string name="appops_microphone" msgid="741508267659494555">"Bu ilova mikrofondan foydalanmoqda."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Bu ilova ekranda boshqa ilovalar ustidan ochilgan."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Quvvat olayotganda foizda ko‘rsatilsin (birlamchi)"</item>
<item msgid="3327323682209964956">"Bu belgi boshqa ko‘rsatilmasin"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Boshqa"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Ekranni ikkiga bo‘lish chizig‘i"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Chapda to‘liq ekran"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index c7b9178..4356ac5 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Giao diện người dùng hệ thống"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Xóa"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Xóa khỏi danh sách"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Thông tin ứng dụng"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Màn hình gần đây của bạn sẽ xuất hiện tại đây"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Loại bỏ các ứng dụng gần đây"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">%d màn hình trong Tổng quan</item>
- <item quantity="one">1 màn hình trong Tổng quan</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Không có thông báo nào"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Đang diễn ra"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Thông báo"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"mở điện thoại"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"mở trợ lý thoại"</string>
<string name="camera_label" msgid="7261107956054836961">"mở máy ảnh"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Chọn bố cục tác vụ mới"</string>
<string name="cancel" msgid="6442560571259935130">"Hủy"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Vùng thông báo trợ giúp"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Xác nhận"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Xóa bỏ <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> đã bị loại bỏ."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Đã bỏ qua tất cả các ứng dụng gần đây."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Mở thông tin ứng dụng <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Bắt đầu <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Đã loại bỏ thông báo."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bóng thông báo."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Cài đặt nhanh."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC đã được tắt"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC đã được bật"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Không có mục gần đây nào"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Bạn đã xóa mọi nội dung"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Thông tin ứng dụng"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"khóa màn hình"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"tìm kiếm"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Không thể khởi động <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> bị tắt ở chế độ an toàn."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Xóa tất cả"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Kéo vào đây để sử dụng chế độ chia đôi màn hình"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Vuốt lên để chuyển đổi ứng dụng"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Kéo sang phải để chuyển đổi nhanh giữa các ứng dụng"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Phân tách ngang"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Phân tách dọc"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tùy chỉnh phân tách"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Chia đôi màn hình lên trên"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Chia đôi màn hình sang trái"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Chia đôi màn hình sang phải"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Bật/tắt chế độ xem Tổng quan"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Đã sạc đầy"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Đang sạc"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Thu nhỏ"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Tiếp tục hiển thị các thông báo từ ứng dụng này?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Không thể tắt các thông báo này"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Ứng dụng này đang sử dụng máy ảnh."</string>
<string name="appops_microphone" msgid="741508267659494555">"Ứng dụng này đang sử dụng micrô."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Ứng dụng này đang hiển thị chồng lên các ứng dụng khác trên màn hình."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Hiển thị phần trăm khi sạc (mặc định)"</item>
<item msgid="3327323682209964956">"Không hiển thị biểu tượng này"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Khác"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Bộ chia chia đôi màn hình"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Toàn màn hình bên trái"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 0bfcdcf..5424266 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"系统界面"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"清除"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"从列表中删除"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"应用信息"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"您最近浏览过的屏幕会显示在此处"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"关闭最近运行的应用"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">概览中有 %d 个屏幕</item>
- <item quantity="one">概览中有 1 个屏幕</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"无通知"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"正在进行的"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"打开电话"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"打开语音助理"</string>
<string name="camera_label" msgid="7261107956054836961">"打开相机"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"选择新的任务布局"</string>
<string name="cancel" msgid="6442560571259935130">"取消"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"帮助消息区域"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"确认"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"移除<xliff:g id="APP">%s</xliff:g>。"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"已删除<xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"已关闭所有最近用过的应用。"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"打开<xliff:g id="APP">%s</xliff:g>应用信息。"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"正在启动<xliff:g id="APP">%s</xliff:g>。"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"已关闭通知。"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"通知栏。"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"快捷设置。"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC 已停用"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC 已启用"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"近期没有任何内容"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"您已清除所有内容"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"应用信息"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"固定屏幕"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"搜索"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"无法启动<xliff:g id="APP">%s</xliff:g>。"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g>已在安全模式下停用。"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"全部清除"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"拖动到此处即可使用分屏功能"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"向上滑动可切换应用"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"向右拖动可快速切换应用"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自定义分割"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"将屏幕分隔线移到上方"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"将屏幕分隔线移到左侧"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"将屏幕分隔线移到右侧"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"切换概览"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"已充满"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"正在充电"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"要继续显示来自此应用的通知吗?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"无法关闭这些通知"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"此应用正在使用摄像头。"</string>
<string name="appops_microphone" msgid="741508267659494555">"此应用正在使用麦克风。"</string>
<string name="appops_overlay" msgid="6165912637560323464">"此应用正显示在屏幕上其他应用的上层。"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"充电时显示百分比(默认)"</item>
<item msgid="3327323682209964956">"不显示此图标"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"其他"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"分屏分隔线"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"左侧全屏"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index cf93802..38e8b3c 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"系統使用者介面"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"清除"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"從清單中移除"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"應用程式資料"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"您最近的螢幕顯示在這裡"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"關閉最近使用的應用程式"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">概覽中有 %d 個畫面</item>
- <item quantity="one">概覽中有 1 個畫面</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"無通知"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"持續進行"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"開啟電話"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"開啟語音助手"</string>
<string name="camera_label" msgid="7261107956054836961">"開啟相機"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"選取新的工作版面配置"</string>
<string name="cancel" msgid="6442560571259935130">"取消"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"說明訊息區域"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"確認"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"關閉「<xliff:g id="APP">%s</xliff:g>」。"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"所有最近使用的應用程式均已關閉。"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"開啟「<xliff:g id="APP">%s</xliff:g>」應用程式的資料。"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"正在啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"通知已關閉。"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"通知欄。"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"快速設定。"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC 已停用"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC 已啟用"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"沒有最近項目"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"您已清除所有項目"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資料"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"螢幕固定"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"「<xliff:g id="APP">%s</xliff:g>」已在安全模式中停用。"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"全部清除"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"在這裡拖曳即可分割螢幕"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"向上滑動即可切換應用程式"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"向右拖曳即可快速切換應用程式"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自訂分割"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"將分割畫面顯示喺頂部"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"將分割畫面顯示喺左邊"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"將分割畫面顯示喺右邊"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"切換概覽"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"已完成充電"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"充電中"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"要繼續顯示此應用程式的通知嗎?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"無法關閉這些通知"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"此應用程式目前使用相機。"</string>
<string name="appops_microphone" msgid="741508267659494555">"此應用程式目前使用麥克風。"</string>
<string name="appops_overlay" msgid="6165912637560323464">"此應用程式目前透過其他應用程式在畫面上顯示內容。"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"充電時顯示百分比 (預設)"</item>
<item msgid="3327323682209964956">"不顯示這個圖示"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"其他"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"分割畫面分隔線"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"左邊全螢幕"</string>
@@ -826,7 +801,7 @@
<string name="notification_channel_general" msgid="4525309436693914482">"一般訊息"</string>
<string name="notification_channel_storage" msgid="3077205683020695313">"儲存空間"</string>
<string name="notification_channel_hints" msgid="7323870212489152689">"提示"</string>
- <string name="instant_apps" msgid="6647570248119804907">"即時應用程式"</string>
+ <string name="instant_apps" msgid="6647570248119804907">"免安裝應用程式"</string>
<string name="instant_apps_title" msgid="8738419517367449783">"<xliff:g id="APP">%1$s</xliff:g> 運作中"</string>
<string name="instant_apps_message" msgid="1183313016396018086">"已開啟免安裝應用程式。"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"已開啟免安裝應用程式。輕按即可瞭解詳情。"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index c5a2f90..e399c44 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"系統 UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"清除"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"從清單中移除"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"應用程式資訊"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"你最近的螢幕會顯示在這裡"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"關閉最近使用的應用程式"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="other">總覽中有 %d 個畫面</item>
- <item quantity="one">總覽中有 1 個畫面</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"沒有通知"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"進行中"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"開啟電話"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"開啟語音小幫手"</string>
<string name="camera_label" msgid="7261107956054836961">"開啟攝影機"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"選取新工作版面配置"</string>
<string name="cancel" msgid="6442560571259935130">"取消"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"說明訊息區域"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"確認"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"關閉「<xliff:g id="APP">%s</xliff:g>」。"</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"最近使用的應用程式已全部關閉。"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"開啟「<xliff:g id="APP">%s</xliff:g>」應用程式資訊。"</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"正在啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"已關閉通知。"</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"通知欄。"</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"快捷設定。"</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC 已停用"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC 已啟用"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"最近沒有任何項目"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"你已清除所有工作"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資訊"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"螢幕固定"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"「<xliff:g id="APP">%s</xliff:g>」在安全模式中為停用狀態。"</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"全部清除"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"拖曳到這裡即可使用分割畫面"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"向上滑動即可切換應用程式"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"向右拖曳即可快速切換應用程式"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自訂分割"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"將分割畫面顯示在頂端"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"將分割畫面顯示在左邊"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"將分割畫面顯示在右邊"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"切換總覽"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"已充飽"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"充電中"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"要繼續顯示這個應用程式的通知嗎?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"無法關閉這些通知"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"這個應用程式正在使用相機。"</string>
<string name="appops_microphone" msgid="741508267659494555">"這個應用程式正在使用麥克風。"</string>
<string name="appops_overlay" msgid="6165912637560323464">"這個應用程式顯示在畫面上其他應用程式的上層。"</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"充電時顯示百分比 (預設)"</item>
<item msgid="3327323682209964956">"不顯示這個圖示"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"其他"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"分割畫面分隔線"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"以全螢幕顯示左側畫面"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 2fc207a..3887f14 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -21,14 +21,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Uhlelo lwe-UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Sula"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Susa ohlwini"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Ulwazi lwensiza"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Izikrini zakho zakamuva zivela lapha"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Susa izinhlelo zokusebenza zakamumva"</string>
- <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
- <item quantity="one">%d izikrini eziku-Buka konke</item>
- <item quantity="other">%d izikrini eziku-Buka konke</item>
- </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Azikho izaziso"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Okuqhubekayo"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Izaziso"</string>
@@ -101,7 +93,6 @@
<string name="phone_label" msgid="2320074140205331708">"vula ifoni"</string>
<string name="voice_assist_label" msgid="3956854378310019854">"vula isilekeleli sezwi"</string>
<string name="camera_label" msgid="7261107956054836961">"vula ikhamera"</string>
- <string name="recents_caption_resize" msgid="3517056471774958200">"Khetha isakhiwo somsebenzi omusha"</string>
<string name="cancel" msgid="6442560571259935130">"Khansela"</string>
<string name="accessibility_biometric_dialog_help_area" msgid="8953787076940186847">"Indawo yosizo lomlayezo"</string>
<string name="biometric_dialog_confirm" msgid="6468457350041712674">"Qinisekisa"</string>
@@ -188,11 +179,6 @@
<skip />
<!-- no translation found for accessibility_work_mode (702887484664647430) -->
<skip />
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Cashisa i-<xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ivaliwe."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Zonke izinhlelo zokusebenza zakamuva zicashisiwe."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Vula ulwazi lohlelo lokusebenza le-<xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iqala i-<xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Isaziso sichithiwe."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Umthunzi wesaziso."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Izilingiselelo ezisheshayo."</string>
@@ -355,23 +341,8 @@
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"I-NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"I-NFC ikhutshaziwe"</string>
<string name="quick_settings_nfc_on" msgid="6680317193676884311">"I-NFC inikwe amandla"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Azikho izinto zakamuva"</string>
- <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Usule yonke into"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"Ulwazi lohlelo lokusebenza"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ukuphina isikrini"</string>
- <string name="recents_search_bar_label" msgid="8074997400187836677">"sesha"</string>
- <string name="recents_launch_error_message" msgid="2969287838120550506">"Ayikwazanga ukuqala i-<xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="1624523193008871793">"I-<xliff:g id="APP">%s</xliff:g> ikhutshaziwe kumodi yokuphepha."</string>
- <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Sula konke"</string>
- <string name="recents_drag_hint_message" msgid="2649739267073203985">"Hudulela lapha ukuze usebenzise ukuhlukanisa kwesikrini"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Swayiphela phezulu ukuze ushintshe izinhlelo zokusebenza"</string>
<string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Hudula ngqo ukuze ushintshe ngokushesha izinhlelo zokusebenza"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Hlukanisa okuvundlile"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Hlukanisa okumile"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Hlukanisa kwezifiso"</string>
- <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Hlukanisela isikrini phezulu"</string>
- <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Hlukanisela isikrini ngakwesokunxele"</string>
- <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Hlukanisela isikrini ngakwesokudla"</string>
<string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Guqula ukubuka konke"</string>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Kushajiwe"</string>
<string name="expanded_header_battery_charging" msgid="205623198487189724">"Iyashaja"</string>
@@ -618,6 +589,8 @@
<string name="inline_minimize_button" msgid="966233327974702195">"Nciphisa"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Qhubeka nokubonisa izaziso kusuka kulolu hlelo lokusebenza?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Lezi zaziso azikwazi ukuvalwa"</string>
+ <!-- no translation found for notification_delegate_header (9167022191405284627) -->
+ <skip />
<string name="appops_camera" msgid="8100147441602585776">"Lolu hlelo lokusebenza lusebenzisa ikhamera."</string>
<string name="appops_microphone" msgid="741508267659494555">"Lolu hlelo lokusebenza lusebenzisa imakrofoni."</string>
<string name="appops_overlay" msgid="6165912637560323464">"Lolu hlelo lokusebenza luboniswa ngaphezulu kwezinye izinhlelo zokusebenza kusikrini sakho."</string>
@@ -752,6 +725,8 @@
<item msgid="2139628951880142927">"Bonisa iphesentheji uma ishaja (okuzenzakalelayo)"</item>
<item msgid="3327323682209964956">"Ungabonisi lesi sithonjana"</item>
</string-array>
+ <!-- no translation found for tuner_low_priority (1325884786608312358) -->
+ <skip />
<string name="other" msgid="4060683095962566764">"Okunye"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Isihlukanisi sokuhlukanisa isikrini"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Isikrini esigcwele esingakwesokunxele"</string>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index f77d923..525421a 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -932,4 +932,19 @@
<!-- How much we expand the touchable region of the status bar below the notch to catch touches
that just start below the notch. -->
<dimen name="display_cutout_touchable_region_size">12dp</dimen>
+
+ <!-- Height of icons in Ongoing App Ops dialog. Both App Op icon and application icon -->
+ <dimen name="ongoing_appops_dialog_icon_height">48dp</dimen>
+ <!-- Margin between text lines in Ongoing App Ops dialog -->
+ <dimen name="ongoing_appops_dialog_text_margin">15dp</dimen>
+ <!-- Padding around Ongoing App Ops dialog content -->
+ <dimen name="ongoing_appops_dialog_content_padding">24dp</dimen>
+ <!-- Margins around the Ongoing App Ops chip. In landscape, the side margins are 0 -->
+ <dimen name="ongoing_appops_chip_margin">12dp</dimen>
+ <!-- Start and End padding for Ongoing App Ops chip -->
+ <dimen name="ongoing_appops_chip_side_padding">6dp</dimen>
+ <!-- Padding between background of Ongoing App Ops chip and content -->
+ <dimen name="ongoing_appops_chip_bg_padding">4dp</dimen>
+ <!-- Radius of Ongoing App Ops chip corners -->
+ <dimen name="ongoing_appops_chip_bg_corner_radius">12dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 3e928a4..7d09c00 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -185,6 +185,39 @@
<string name="screenshot_failed_to_capture_text">Taking screenshots isn\'t allowed by the app or
your organization</string>
+ <!-- Notification title displayed for screen recording [CHAR LIMIT=50]-->
+ <string name="screenrecord_name">Screen Recording</string>
+ <!-- Description of the screen recording notification channel [CHAR LIMIT=NONE]-->
+ <string name="screenrecord_channel_description">Ongoing notification for a screen record session</string>
+ <!-- Label for the button to begin screen recording [CHAR LIMIT=NONE]-->
+ <string name="screenrecord_start_label">Start Recording</string>
+ <!-- Label for the checkbox to enable microphone input during screen recording [CHAR LIMIT=NONE]-->
+ <string name="screenrecord_mic_label">Record voiceover</string>
+ <!-- Label for the checkbox to enable showing location of touches during screen recording [CHAR LIMIT=NONE]-->
+ <string name="screenrecord_taps_label">Show taps</string>
+ <!-- Label for notification action to stop and save the screen recording [CHAR LIMIT=35] -->
+ <string name="screenrecord_stop_label">Stop</string>
+ <!-- Label for notification action to pause screen recording [CHAR LIMIT=35] -->
+ <string name="screenrecord_pause_label">Pause</string>
+ <!-- Label for notification action to resume screen recording [CHAR LIMIT=35] -->
+ <string name="screenrecord_resume_label">Resume</string>
+ <!-- Label for notification action to cancel and discard screen recording [CHAR LIMIT=35] -->
+ <string name="screenrecord_cancel_label">Cancel</string>
+ <!-- Label for notification action to share screen recording [CHAR LIMIT=35] -->
+ <string name="screenrecord_share_label">Share</string>
+ <!-- Label for notification action to delete a screen recording file [CHAR LIMIT=35] -->
+ <string name="screenrecord_delete_label">Delete</string>
+ <!-- A toast message shown after successfully canceling a screen recording [CHAR LIMIT=NONE] -->
+ <string name="screenrecord_cancel_success">Screen recording canceled</string>
+ <!-- Notification text shown after saving a screen recording to prompt the user to view it [CHAR LIMIT=100] -->
+ <string name="screenrecord_save_message">Screen recording saved, tap to view</string>
+ <!-- A toast message shown after successfully deleting a screen recording [CHAR LIMIT=NONE] -->
+ <string name="screenrecord_delete_description">Screen recording deleted</string>
+ <!-- A toast message shown when there is an error deleting a screen recording [CHAR LIMIT=NONE] -->
+ <string name="screenrecord_delete_error">Error deleting screen recording</string>
+ <!-- A toast message shown when the screen recording cannot be started due to insufficient permissions [CHAR LIMIT=NONE] -->
+ <string name="screenrecord_permission_error">Failed to get permissions</string>
+
<!-- Title for the USB function chooser in UsbPreferenceActivity. [CHAR LIMIT=30] -->
<string name="usb_preference_title">USB file transfer options</string>
<!-- Label for the MTP USB function in UsbPreferenceActivity. [CHAR LIMIT=50] -->
@@ -2205,4 +2238,39 @@
app for debugging. Will not be seen by users. [CHAR LIMIT=20] -->
<string name="heap_dump_tile_name">Dump SysUI Heap</string>
+ <!-- Content description for ongoing privacy chip. Use with a single app [CHAR LIMIT=NONE]-->
+ <string name="ongoing_privacy_chip_content_single_app"><xliff:g id="app" example="Example App">%1$s</xliff:g> is using your <xliff:g id="types_list" example="camera, location">%2$s</xliff:g>.</string>
+
+ <!-- Content description for ongoing privacy chip. Use with multiple apps [CHAR LIMIT=NONE]-->
+ <string name="ongoing_privacy_chip_content_multiple_apps">Applications are using your <xliff:g id="types_list" example="camera, location">%s</xliff:g>.</string>
+
+ <!-- Action on Ongoing Privacy Dialog to open application [CHAR LIMIT=10]-->
+ <string name="ongoing_privacy_dialog_open_app">Open app</string>
+
+ <!-- Action on Ongoing Privacy Dialog to dismiss [CHAR LIMIT=10]-->
+ <string name="ongoing_privacy_dialog_cancel">Cancel</string>
+
+ <!-- Action on Ongoing Privacy Dialog to dismiss [CHAR LIMIT=10]-->
+ <string name="ongoing_privacy_dialog_okay">Okay</string>
+
+ <!-- Action on Ongoing Privacy Dialog to open privacy hub [CHAR LIMIT=10]-->
+ <string name="ongoing_privacy_dialog_open_settings">Settings</string>
+
+ <!-- Text for item in Ongoing Privacy Dialog when only one app is using a particular type of app op [CHAR LIMIT=NONE] -->
+ <string name="ongoing_privacy_dialog_app_item"><xliff:g id="app" example="Example App">%1$s</xliff:g> is using your <xliff:g id="type" example="camera">%2$s</xliff:g> for the last <xliff:g id="time" example="3">%3$d</xliff:g> min</string>
+
+ <!-- Text for item in Ongoing Privacy Dialog when only multiple apps are using a particular type of app op [CHAR LIMIT=NONE] -->
+ <string name="ongoing_privacy_dialog_apps_item"><xliff:g id="apps" example="Camera, Phone">%1$s</xliff:g> are using your <xliff:g id="type" example="camera">%2$s</xliff:g></string>
+
+ <!-- Text for Ongoing Privacy Dialog when a single app is using app ops [CHAR LIMIT=NONE] -->
+ <string name="ongoing_privacy_dialog_single_app"><xliff:g id="app" example="Example App">%1$s</xliff:g> is using your <xliff:g id="types_list" example="camera, location">%2$s</xliff:g></string>
+
+ <!-- Text for camera app op [CHAR LIMIT=12]-->
+ <string name="privacy_type_camera">camera</string>
+
+ <!-- Text for location app op [CHAR LIMIT=12]-->
+ <string name="privacy_type_location">location</string>
+
+ <!-- Text for microphone app op [CHAR LIMIT=12]-->
+ <string name="privacy_type_microphone">microphone</string>
</resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 6bc2a63..6244e1c 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -503,4 +503,13 @@
<item name="chargingAnimColor">@android:color/white</item>
<item name="android:textColor">@android:color/white</item>
</style>
+
+ <!-- Screen recording -->
+ <style name="ScreenRecord" parent="Theme.SystemUI.Dialog.GlobalActions">
+ <item name="android:windowIsTranslucent">true</item>
+ <item name="android:windowBackground">@android:color/transparent</item>
+ <item name="android:windowIsFloating">true</item>
+ <item name="android:backgroundDimEnabled">true</item>
+ <item name="android:windowCloseOnTouchOutside">true</item>
+ </style>
</resources>
diff --git a/packages/SystemUI/res/xml/fileprovider.xml b/packages/SystemUI/res/xml/fileprovider.xml
index 4aaa90f..fa6468f 100644
--- a/packages/SystemUI/res/xml/fileprovider.xml
+++ b/packages/SystemUI/res/xml/fileprovider.xml
@@ -17,4 +17,5 @@
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path name="leak" path="leak/"/>
+ <external-path name="screenrecord" path="."/>
</paths>
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
index 28eff46..013745a 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
@@ -16,6 +16,8 @@
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.shared.plugins.PluginManager;
+import java.util.Objects;
+
/**
* Switch to show plugin clock when plugin is connected, otherwise it will show default clock.
*/
@@ -35,6 +37,10 @@
public void onPluginConnected(ClockPlugin plugin, Context pluginContext) {
View view = plugin.getView();
if (view != null) {
+ disconnectPlugin();
+ // For now, assume that the most recently connected plugin is the
+ // selected clock face. In the future, the user should be able to
+ // pick a clock face from the available plugins.
mClockPlugin = plugin;
addView(view, -1,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
@@ -46,10 +52,8 @@
@Override
public void onPluginDisconnected(ClockPlugin plugin) {
- View view = plugin.getView();
- if (view != null) {
- mClockPlugin = null;
- removeView(view);
+ if (Objects.equals(plugin, mClockPlugin)) {
+ disconnectPlugin();
mClockView.setVisibility(View.VISIBLE);
}
}
@@ -148,6 +152,16 @@
}
}
+ private void disconnectPlugin() {
+ if (mClockPlugin != null) {
+ View view = mClockPlugin.getView();
+ if (view != null) {
+ removeView(view);
+ }
+ mClockPlugin = null;
+ }
+ }
+
@VisibleForTesting (otherwise = VisibleForTesting.NONE)
PluginListener getClockPluginListener() {
return mClockPluginListener;
diff --git a/packages/SystemUI/src/com/android/systemui/InitController.java b/packages/SystemUI/src/com/android/systemui/InitController.java
index 52ba66a..81d3251 100644
--- a/packages/SystemUI/src/com/android/systemui/InitController.java
+++ b/packages/SystemUI/src/com/android/systemui/InitController.java
@@ -22,6 +22,11 @@
*/
public class InitController {
+ /**
+ * If a task is added after all tasks are executed, then we've done something terribly wrong
+ */
+ private boolean mTasksExecuted = false;
+
private final ArrayList<Runnable> mTasks = new ArrayList<>();
/**
@@ -29,6 +34,9 @@
* @param runnable the task to be executed
*/
public void addPostInitTask(Runnable runnable) {
+ if (mTasksExecuted) {
+ throw new IllegalStateException("post init tasks have already been executed!");
+ }
mTasks.add(runnable);
}
@@ -39,5 +47,7 @@
while (!mTasks.isEmpty()) {
mTasks.remove(0).run();
}
+
+ mTasksExecuted = true;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogImpl.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogImpl.java
index 903e178..67bc8b6 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogImpl.java
@@ -66,7 +66,7 @@
public void handleMessage(Message msg) {
switch(msg.what) {
case MSG_SHOW_DIALOG:
- handleShowDialog((SomeArgs) msg.obj);
+ handleShowDialog((SomeArgs) msg.obj, false /* skipAnimation */);
break;
case MSG_BIOMETRIC_AUTHENTICATED:
handleBiometricAuthenticated();
@@ -178,7 +178,7 @@
mHandler.obtainMessage(MSG_HIDE_DIALOG, false /* userCanceled */).sendToTarget();
}
- private void handleShowDialog(SomeArgs args) {
+ private void handleShowDialog(SomeArgs args, boolean skipAnimation) {
mCurrentDialogArgs = args;
final int type = args.argi1;
mCurrentDialog = mDialogs.get(type);
@@ -195,6 +195,7 @@
mReceiver = (IBiometricPromptReceiver) args.arg2;
mCurrentDialog.setBundle((Bundle)args.arg1);
mCurrentDialog.setRequireConfirmation((boolean)args.arg3);
+ mCurrentDialog.setSkipIntro(skipAnimation);
mWindowManager.addView(mCurrentDialog, mCurrentDialog.getLayoutParams());
mDialogShowing = true;
}
@@ -278,15 +279,15 @@
@Override
protected void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ final boolean wasShowing = mDialogShowing;
if (mDialogShowing) {
mCurrentDialog.forceRemove();
+ mDialogShowing = false;
}
createDialogs();
- if (mDialogShowing) {
- mCurrentDialog = mDialogs.get(mCurrentDialogArgs.argi1);
- mCurrentDialog.forceRemove(); // Prevents intro animation when reattaching.
- mDialogShowing = false;
- handleShowDialog(mCurrentDialogArgs);
+ if (wasShowing) {
+ handleShowDialog(mCurrentDialogArgs, true /* skipAnimation */);
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java
index 1d836ec..7935115 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java
@@ -66,7 +66,7 @@
private final float mAnimationTranslationOffset;
private final int mErrorColor;
private final int mTextColor;
- private final float mDisplayWidth;
+ private final float mDialogWidth;
private final DialogViewCallback mCallback;
private ViewGroup mLayout;
@@ -76,6 +76,7 @@
private int mLastState;
private boolean mAnimatingAway;
private boolean mWasForceRemoved;
+ private boolean mSkipIntro;
protected boolean mRequireConfirmation;
protected abstract void updateIcon(int lastState, int newState);
@@ -131,7 +132,7 @@
DisplayMetrics metrics = new DisplayMetrics();
mWindowManager.getDefaultDisplay().getMetrics(metrics);
- mDisplayWidth = metrics.widthPixels;
+ mDialogWidth = Math.min(metrics.widthPixels, metrics.heightPixels);
// Create the dialog
LayoutInflater factory = LayoutInflater.from(getContext());
@@ -198,8 +199,7 @@
final Button negative = mLayout.findViewById(R.id.button2);
final Button positive = mLayout.findViewById(R.id.button1);
- mDialog.getLayoutParams().width = (int) mDisplayWidth;
-
+ mDialog.getLayoutParams().width = (int) mDialogWidth;
mLastState = STATE_NONE;
updateState(STATE_AUTHENTICATING);
@@ -228,20 +228,21 @@
negative.setText(mBundle.getCharSequence(BiometricPrompt.KEY_NEGATIVE_TEXT));
- if (!mWasForceRemoved) {
- // Dim the background and slide the dialog up
- mDialog.setTranslationY(mAnimationTranslationOffset);
- mLayout.setAlpha(0f);
- postOnAnimation(mShowAnimationRunnable);
- } else {
+ if (mWasForceRemoved || mSkipIntro) {
// Show the dialog immediately
mLayout.animate().cancel();
mDialog.animate().cancel();
mDialog.setAlpha(1.0f);
mDialog.setTranslationY(0);
mLayout.setAlpha(1.0f);
+ } else {
+ // Dim the background and slide the dialog up
+ mDialog.setTranslationY(mAnimationTranslationOffset);
+ mLayout.setAlpha(0f);
+ postOnAnimation(mShowAnimationRunnable);
}
mWasForceRemoved = false;
+ mSkipIntro = false;
}
private void setDismissesDialog(View v) {
@@ -296,6 +297,13 @@
mWasForceRemoved = true;
}
+ /**
+ * Skip the intro animation
+ */
+ public void setSkipIntro(boolean skip) {
+ mSkipIntro = skip;
+ }
+
public boolean isAnimatingAway() {
return mAnimatingAway;
}
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
index c566460..5d99c57 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
@@ -141,7 +141,7 @@
}
private void updateBrightnessAndReady() {
- if (mRegistered) {
+ if (mRegistered || mDebugBrightnessBucket != -1) {
int sensorValue = mDebugBrightnessBucket == -1
? mLastSensorValue : mDebugBrightnessBucket;
int brightness = computeBrightness(sensorValue);
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index 512cd82..dc7b1ef 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -82,6 +82,7 @@
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
import com.android.internal.util.EmergencyAffordanceManager;
+import com.android.internal.util.ScreenRecordHelper;
import com.android.internal.util.ScreenshotHelper;
import com.android.internal.widget.LockPatternUtils;
import com.android.systemui.Dependency;
@@ -158,6 +159,7 @@
private final boolean mShowSilentToggle;
private final EmergencyAffordanceManager mEmergencyAffordanceManager;
private final ScreenshotHelper mScreenshotHelper;
+ private final ScreenRecordHelper mScreenRecordHelper;
/**
* @param context everything needs a context :(
@@ -199,6 +201,7 @@
mEmergencyAffordanceManager = new EmergencyAffordanceManager(context);
mScreenshotHelper = new ScreenshotHelper(context);
+ mScreenRecordHelper = new ScreenRecordHelper(context);
Dependency.get(ConfigurationController.class).addCallback(this);
}
@@ -522,7 +525,7 @@
}
- private class ScreenshotAction extends SinglePressAction {
+ private class ScreenshotAction extends SinglePressAction implements LongPressAction {
public ScreenshotAction() {
super(R.drawable.ic_screenshot, R.string.global_action_screenshot);
}
@@ -552,6 +555,16 @@
public boolean showBeforeProvisioning() {
return false;
}
+
+ @Override
+ public boolean onLongPress() {
+ if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SCREENRECORD_LONG_PRESS)) {
+ mScreenRecordHelper.launchRecordPrompt();
+ } else {
+ onPress();
+ }
+ return true;
+ }
}
private class BugReportAction extends SinglePressAction implements LongPressAction {
diff --git a/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt b/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt
new file mode 100644
index 0000000..3953139d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui.privacy
+
+import android.app.ActivityManager
+import android.app.AppOpsManager
+import android.content.Context
+import android.graphics.Color
+import android.os.UserHandle
+import android.os.UserManager
+import android.util.AttributeSet
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import com.android.systemui.Dependency
+import com.android.systemui.R
+import com.android.systemui.appops.AppOpItem
+import com.android.systemui.appops.AppOpsController
+
+class OngoingPrivacyChip @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttrs: Int = 0,
+ defStyleRes: Int = 0
+) : LinearLayout(context, attrs, defStyleAttrs, defStyleRes) {
+
+ companion object {
+ val OPS = intArrayOf(AppOpsManager.OP_CAMERA,
+ AppOpsManager.OP_RECORD_AUDIO,
+ AppOpsManager.OP_COARSE_LOCATION,
+ AppOpsManager.OP_FINE_LOCATION)
+ }
+
+ private lateinit var appName: TextView
+ private lateinit var iconsContainer: LinearLayout
+ private var privacyList = emptyList<PrivacyItem>()
+ private val appOpsController = Dependency.get(AppOpsController::class.java)
+ private val userManager = context.getSystemService(UserManager::class.java)
+ private val currentUser = ActivityManager.getCurrentUser()
+ private val currentUserIds = userManager.getProfiles(currentUser).map { it.id }
+ private var listening = false
+
+ var builder = PrivacyDialogBuilder(context, privacyList)
+
+ private val callback = object : AppOpsController.Callback {
+ override fun onActiveStateChanged(
+ code: Int,
+ uid: Int,
+ packageName: String,
+ active: Boolean
+ ) {
+ val userId = UserHandle.getUserId(uid)
+ if (userId in currentUserIds) {
+ updatePrivacyList()
+ }
+ }
+ }
+
+ override fun onFinishInflate() {
+ super.onFinishInflate()
+
+ appName = findViewById(R.id.app_name)
+ iconsContainer = findViewById(R.id.icons_container)
+ }
+
+ fun setListening(listen: Boolean) {
+ if (listening == listen) return
+ listening = listen
+ if (listening) {
+ appOpsController.addCallback(OPS, callback)
+ updatePrivacyList()
+ } else {
+ appOpsController.removeCallback(OPS, callback)
+ }
+ }
+
+ private fun updatePrivacyList() {
+ privacyList = currentUserIds.flatMap { appOpsController.getActiveAppOpsForUser(it) }
+ .mapNotNull { toPrivacyItem(it) }
+ builder = PrivacyDialogBuilder(context, privacyList)
+ updateView()
+ }
+
+ private fun toPrivacyItem(appOpItem: AppOpItem): PrivacyItem? {
+ val type: PrivacyType = when (appOpItem.code) {
+ AppOpsManager.OP_CAMERA -> PrivacyType.TYPE_CAMERA
+ AppOpsManager.OP_COARSE_LOCATION -> PrivacyType.TYPE_LOCATION
+ AppOpsManager.OP_FINE_LOCATION -> PrivacyType.TYPE_LOCATION
+ AppOpsManager.OP_RECORD_AUDIO -> PrivacyType.TYPE_MICROPHONE
+ else -> return null
+ }
+ val app = PrivacyApplication(appOpItem.packageName, context)
+ return PrivacyItem(type, app, appOpItem.timeStarted)
+ }
+
+ // Should only be called if the builder icons or app changed
+ private fun updateView() {
+ fun setIcons(dialogBuilder: PrivacyDialogBuilder, iconsContainer: ViewGroup) {
+ iconsContainer.removeAllViews()
+ dialogBuilder.generateIcons().forEach {
+ it.mutate()
+ it.setTint(Color.WHITE)
+ iconsContainer.addView(ImageView(context).apply {
+ setImageDrawable(it)
+ maxHeight = this@OngoingPrivacyChip.height
+ })
+ }
+ }
+
+ if (privacyList.isEmpty()) {
+ visibility = GONE
+ return
+ } else {
+ generateContentDescription()
+ visibility = VISIBLE
+ setIcons(builder, iconsContainer)
+ appName.visibility = GONE
+ builder.app?.let {
+ appName.apply {
+ setText(it.applicationName)
+ setTextColor(Color.WHITE)
+ visibility = VISIBLE
+ }
+ }
+ }
+ requestLayout()
+ }
+
+ private fun generateContentDescription() {
+ val typesText = builder.generateTypesText()
+ if (builder.app != null) {
+ contentDescription = context.getString(R.string.ongoing_privacy_chip_content_single_app,
+ builder.app?.applicationName, typesText)
+ } else {
+ contentDescription = context.getString(
+ R.string.ongoing_privacy_chip_content_multiple_apps, typesText)
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyDialog.kt b/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyDialog.kt
new file mode 100644
index 0000000..1d0e16e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyDialog.kt
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui.privacy
+
+import android.app.AlertDialog
+import android.app.Dialog
+import android.content.Context
+import android.content.DialogInterface
+import android.graphics.drawable.Drawable
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import com.android.systemui.Dependency
+import com.android.systemui.R
+import com.android.systemui.plugins.ActivityStarter
+
+class OngoingPrivacyDialog constructor(
+ val context: Context,
+ val dialogBuilder: PrivacyDialogBuilder
+) {
+
+ val iconHeight = context.resources.getDimensionPixelSize(
+ R.dimen.ongoing_appops_dialog_icon_height)
+ val textMargin = context.resources.getDimensionPixelSize(
+ R.dimen.ongoing_appops_dialog_text_margin)
+ val iconColor = context.resources.getColor(
+ com.android.internal.R.color.text_color_primary, context.theme)
+
+ fun createDialog(): Dialog {
+ val builder = AlertDialog.Builder(context)
+ .setNeutralButton(R.string.ongoing_privacy_dialog_open_settings, null)
+ if (dialogBuilder.app != null) {
+ builder.setPositiveButton(R.string.ongoing_privacy_dialog_open_app,
+ object : DialogInterface.OnClickListener {
+ val intent = context.packageManager
+ .getLaunchIntentForPackage(dialogBuilder.app.packageName)
+
+ override fun onClick(dialog: DialogInterface?, which: Int) {
+ Dependency.get(ActivityStarter::class.java).startActivity(intent, false)
+ }
+ })
+ builder.setNegativeButton(R.string.ongoing_privacy_dialog_cancel, null)
+ } else {
+ builder.setPositiveButton(R.string.ongoing_privacy_dialog_okay, null)
+ }
+ builder.setView(getContentView())
+ return builder.create()
+ }
+
+ fun getContentView(): View {
+ val layoutInflater = LayoutInflater.from(context)
+ val contentView = layoutInflater.inflate(R.layout.ongoing_privacy_dialog_content, null)
+
+ val iconsContainer = contentView.findViewById(R.id.icons_container) as LinearLayout
+ val textContainer = contentView.findViewById(R.id.text_container) as LinearLayout
+
+ addIcons(dialogBuilder, iconsContainer)
+ val lm = ViewGroup.MarginLayoutParams(
+ ViewGroup.MarginLayoutParams.WRAP_CONTENT,
+ ViewGroup.MarginLayoutParams.WRAP_CONTENT)
+ lm.topMargin = textMargin
+ val now = System.currentTimeMillis()
+ dialogBuilder.generateText(now).forEach {
+ val text = layoutInflater.inflate(R.layout.ongoing_privacy_text_item, null) as TextView
+ text.setText(it)
+ textContainer.addView(text, lm)
+ }
+ return contentView
+ }
+
+ private fun addIcons(dialogBuilder: PrivacyDialogBuilder, iconsContainer: LinearLayout) {
+
+ fun LinearLayout.addIcon(icon: Drawable) {
+ val image = ImageView(context).apply {
+ setImageDrawable(icon.apply {
+ setBounds(0, 0, iconHeight, iconHeight)
+ maxHeight = this@addIcon.height
+ })
+ adjustViewBounds = true
+ }
+ addView(image, LinearLayout.LayoutParams.WRAP_CONTENT,
+ LinearLayout.LayoutParams.MATCH_PARENT)
+ }
+
+ dialogBuilder.generateIcons().forEach {
+ it.mutate()
+ it.setTint(iconColor)
+ iconsContainer.addIcon(it)
+ }
+ dialogBuilder.app.let {
+ it?.icon?.let { iconsContainer.addIcon(it) }
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogBuilder.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogBuilder.kt
new file mode 100644
index 0000000..2f86f78
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogBuilder.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui.privacy
+
+import android.content.Context
+import com.android.systemui.R
+import java.lang.IllegalStateException
+import java.lang.Math.max
+
+class PrivacyDialogBuilder(val context: Context, itemsList: List<PrivacyItem>) {
+ companion object {
+ val MILLIS_IN_MINUTE: Long = 1000 * 60
+ }
+
+ private val itemsByType: Map<PrivacyType, List<PrivacyItem>>
+ val app: PrivacyApplication?
+
+ init {
+ itemsByType = itemsList.groupBy { it.privacyType }
+ val apps = itemsList.map { it.application }.distinct()
+ val singleApp = apps.size == 1
+ app = if (singleApp) apps.get(0) else null
+ }
+
+ private fun buildTextForItem(type: PrivacyType, now: Long): String {
+ val items = itemsByType.getOrDefault(type, emptyList<PrivacyItem>())
+ return when (items.size) {
+ 0 -> throw IllegalStateException("List cannot be empty")
+ 1 -> {
+ val item = items.get(0)
+ val minutesUsed = max(((now - item.timeStarted) / MILLIS_IN_MINUTE).toInt(), 1)
+ context.getString(R.string.ongoing_privacy_dialog_app_item,
+ item.application.applicationName, type.getName(context), minutesUsed)
+ }
+ else -> {
+ val apps = items.map { it.application.applicationName }.joinToString()
+ context.getString(R.string.ongoing_privacy_dialog_apps_item,
+ apps, type.getName(context))
+ }
+ }
+ }
+
+ private fun buildTextForApp(types: Set<PrivacyType>): List<String> {
+ app?.let {
+ val typesText = types.map { it.getName(context) }.sorted().joinToString()
+ return listOf(context.getString(R.string.ongoing_privacy_dialog_single_app,
+ it.applicationName, typesText))
+ } ?: throw IllegalStateException("There has to be a single app")
+ }
+
+ fun generateText(now: Long): List<String> {
+ if (app == null || itemsByType.keys.size == 1) {
+ return itemsByType.keys.map { buildTextForItem(it, now) }
+ } else {
+ return buildTextForApp(itemsByType.keys)
+ }
+ }
+
+ fun generateTypesText() = itemsByType.keys.map { it.getName(context) }.sorted().joinToString()
+
+ fun generateIcons() = itemsByType.keys.map { it.getIcon(context) }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItem.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItem.kt
new file mode 100644
index 0000000..f409902
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItem.kt
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui.privacy
+
+import android.content.Context
+import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager
+import android.graphics.drawable.Drawable
+import com.android.systemui.R
+
+typealias Privacy = PrivacyType
+
+enum class PrivacyType(val nameId: Int, val iconId: Int) {
+ TYPE_CAMERA(R.string.privacy_type_camera, com.android.internal.R.drawable.ic_camera),
+ TYPE_LOCATION(R.string.privacy_type_location, R.drawable.stat_sys_location),
+ TYPE_MICROPHONE(R.string.privacy_type_microphone, R.drawable.ic_mic_26dp);
+
+ fun getName(context: Context) = context.resources.getString(nameId)
+
+ fun getIcon(context: Context) = context.resources.getDrawable(iconId, null)
+}
+
+data class PrivacyItem(
+ val privacyType: PrivacyType,
+ val application: PrivacyApplication,
+ val timeStarted: Long
+)
+
+data class PrivacyApplication(val packageName: String, val context: Context) {
+ var icon: Drawable? = null
+ var applicationName: String
+
+ init {
+ try {
+ val app: ApplicationInfo = context.packageManager
+ .getApplicationInfo(packageName, 0)
+ icon = context.packageManager.getApplicationIcon(app)
+ applicationName = context.packageManager.getApplicationLabel(app) as String
+ } catch (e: PackageManager.NameNotFoundException) {
+ applicationName = packageName
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index b988c55..3ee6195 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -21,6 +21,7 @@
import android.annotation.ColorInt;
import android.app.ActivityManager;
import android.app.AlarmManager;
+import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -31,33 +32,38 @@
import android.graphics.Rect;
import android.media.AudioManager;
import android.os.Handler;
+import android.os.Looper;
import android.provider.AlarmClock;
import android.service.notification.ZenModeConfig;
-import android.widget.FrameLayout;
-import androidx.annotation.VisibleForTesting;
import android.text.format.DateUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Pair;
import android.view.View;
import android.view.WindowInsets;
+import android.view.WindowManager;
+import android.widget.FrameLayout;
import android.widget.ImageView;
-import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
+import androidx.annotation.VisibleForTesting;
+
import com.android.settingslib.Utils;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.Dependency;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.privacy.OngoingPrivacyChip;
+import com.android.systemui.privacy.OngoingPrivacyDialog;
import com.android.systemui.qs.QSDetail.Callback;
import com.android.systemui.statusbar.phone.PhoneStatusBarView;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager;
-import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.statusbar.phone.StatusIconContainer;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
+import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.statusbar.policy.DarkIconDispatcher;
import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.policy.DateView;
@@ -118,6 +124,7 @@
private BatteryMeterView mBatteryMeterView;
private Clock mClockView;
private DateView mDateView;
+ private OngoingPrivacyChip mPrivacyChip;
private NextAlarmController mAlarmController;
private ZenModeController mZenController;
@@ -185,6 +192,8 @@
mClockView = findViewById(R.id.clock);
mClockView.setOnClickListener(this);
mDateView = findViewById(R.id.date);
+ mPrivacyChip = findViewById(R.id.privacy_chip);
+ mPrivacyChip.setOnClickListener(this);
}
private void updateStatusText() {
@@ -205,7 +214,7 @@
boolean ringerVisible = false;
if (!ZenModeConfig.isZenOverridingRinger(mZenController.getZen(),
- mZenController.getConfig())) {
+ mZenController.getConsolidatedPolicy())) {
if (mRingerMode == AudioManager.RINGER_MODE_VIBRATE) {
mRingerModeIcon.setImageResource(R.drawable.stat_sys_ringer_vibrate);
mRingerModeTextView.setText(R.string.qs_status_phone_vibrate);
@@ -263,6 +272,13 @@
newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE;
mBatteryMeterView.useWallpaperTextColor(shouldUseWallpaperTextColor);
mClockView.useWallpaperTextColor(shouldUseWallpaperTextColor);
+
+ MarginLayoutParams lm = (MarginLayoutParams) mPrivacyChip.getLayoutParams();
+ int sideMargins = lm.leftMargin;
+ int topBottomMargins = (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
+ ? 0 : sideMargins;
+ lm.setMargins(sideMargins, topBottomMargins, sideMargins, topBottomMargins);
+ mPrivacyChip.setLayoutParams(lm);
}
@Override
@@ -421,6 +437,7 @@
return;
}
mHeaderQsPanel.setListening(listening);
+ mPrivacyChip.setListening(listening);
mListening = listening;
if (listening) {
@@ -443,6 +460,19 @@
} else if (v == mBatteryMeterView) {
Dependency.get(ActivityStarter.class).postStartActivityDismissingKeyguard(new Intent(
Intent.ACTION_POWER_USAGE_SUMMARY),0);
+ } else if (v == mPrivacyChip) {
+ Handler mUiHandler = new Handler(Looper.getMainLooper());
+ mUiHandler.post(() -> {
+ Dialog mDialog = new OngoingPrivacyDialog(mContext,
+ mPrivacyChip.getBuilder()).createDialog();
+ mDialog.getWindow().setType(
+ WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
+ SystemUIDialog.setShowForAllUsers(mDialog, true);
+ SystemUIDialog.registerDismissListener(mDialog);
+ SystemUIDialog.setWindowOnTop(mDialog);
+ mUiHandler.post(() -> mDialog.show());
+ mHost.collapsePanels();
+ });
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
new file mode 100644
index 0000000..a9896f5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
@@ -0,0 +1,451 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.screenrecord;
+
+import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Icon;
+import android.hardware.display.DisplayManager;
+import android.hardware.display.VirtualDisplay;
+import android.media.MediaRecorder;
+import android.media.ThumbnailUtils;
+import android.media.projection.MediaProjection;
+import android.media.projection.MediaProjectionManager;
+import android.net.Uri;
+import android.os.Environment;
+import android.os.IBinder;
+import android.provider.MediaStore;
+import android.provider.Settings;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.Surface;
+import android.widget.Toast;
+
+import androidx.core.content.FileProvider;
+
+import com.android.systemui.R;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * A service which records the device screen and optionally microphone input.
+ */
+public class RecordingService extends Service {
+ private static final int NOTIFICATION_ID = 1;
+ private static final String TAG = "RecordingService";
+ private static final String CHANNEL_ID = "screen_record";
+ private static final String EXTRA_RESULT_CODE = "extra_resultCode";
+ private static final String EXTRA_DATA = "extra_data";
+ private static final String EXTRA_PATH = "extra_path";
+ private static final String EXTRA_USE_AUDIO = "extra_useAudio";
+ private static final String EXTRA_SHOW_TAPS = "extra_showTaps";
+ private static final int REQUEST_CODE = 2;
+
+ private static final String ACTION_START = "com.android.systemui.screenrecord.START";
+ private static final String ACTION_STOP = "com.android.systemui.screenrecord.STOP";
+ private static final String ACTION_PAUSE = "com.android.systemui.screenrecord.PAUSE";
+ private static final String ACTION_RESUME = "com.android.systemui.screenrecord.RESUME";
+ private static final String ACTION_CANCEL = "com.android.systemui.screenrecord.CANCEL";
+ private static final String ACTION_SHARE = "com.android.systemui.screenrecord.SHARE";
+ private static final String ACTION_DELETE = "com.android.systemui.screenrecord.DELETE";
+
+ private static final int TOTAL_NUM_TRACKS = 1;
+ private static final String RECORD_DIR = "Captures"; // TODO: use a translatable string
+ private static final int VIDEO_BIT_RATE = 6000000;
+ private static final int VIDEO_FRAME_RATE = 30;
+ private static final int AUDIO_BIT_RATE = 16;
+ private static final int AUDIO_SAMPLE_RATE = 44100;
+ private static final String FILE_PROVIDER = "com.android.systemui.fileprovider";
+
+ private MediaProjectionManager mMediaProjectionManager;
+ private MediaProjection mMediaProjection;
+ private Surface mInputSurface;
+ private VirtualDisplay mVirtualDisplay;
+ private MediaRecorder mMediaRecorder;
+ private Notification.Builder mRecordingNotificationBuilder;
+
+ private boolean mUseAudio;
+ private boolean mShowTaps;
+ private File mTempFile;
+
+ /**
+ * Get an intent to start the recording service.
+ *
+ * @param context Context from the requesting activity
+ * @param resultCode The result code from {@link android.app.Activity#onActivityResult(int, int,
+ * android.content.Intent)}
+ * @param data The data from {@link android.app.Activity#onActivityResult(int, int,
+ * android.content.Intent)}
+ * @param useAudio True to enable microphone input while recording
+ * @param showTaps True to make touches visible while recording
+ */
+ public static Intent getStartIntent(Context context, int resultCode, Intent data,
+ boolean useAudio, boolean showTaps) {
+ return new Intent(context, RecordingService.class)
+ .setAction(ACTION_START)
+ .putExtra(EXTRA_RESULT_CODE, resultCode)
+ .putExtra(EXTRA_DATA, data)
+ .putExtra(EXTRA_USE_AUDIO, useAudio)
+ .putExtra(EXTRA_SHOW_TAPS, showTaps);
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ Log.d(TAG, "RecordingService is starting");
+ if (intent == null) {
+ return Service.START_NOT_STICKY;
+ }
+ String action = intent.getAction();
+
+ NotificationManager notificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+ switch (action) {
+ case ACTION_START:
+ int resultCode = intent.getIntExtra(EXTRA_RESULT_CODE, Activity.RESULT_CANCELED);
+ mUseAudio = intent.getBooleanExtra(EXTRA_USE_AUDIO, false);
+ mShowTaps = intent.getBooleanExtra(EXTRA_SHOW_TAPS, false);
+ Intent data = intent.getParcelableExtra(EXTRA_DATA);
+ if (data != null) {
+ mMediaProjection = mMediaProjectionManager.getMediaProjection(resultCode, data);
+ startRecording();
+ }
+ break;
+
+ case ACTION_CANCEL:
+ stopRecording();
+
+ // Delete temp file
+ if (!mTempFile.delete()) {
+ Log.e(TAG, "Error canceling screen recording!");
+ Toast.makeText(this, R.string.screenrecord_delete_error, Toast.LENGTH_LONG)
+ .show();
+ } else {
+ Toast.makeText(this, R.string.screenrecord_cancel_success, Toast.LENGTH_LONG)
+ .show();
+ }
+
+ // Close quick shade
+ sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
+ break;
+
+ case ACTION_STOP:
+ stopRecording();
+
+ // Move temp file to user directory
+ File recordDir = new File(
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES),
+ RECORD_DIR);
+ recordDir.mkdirs();
+
+ String fileName = new SimpleDateFormat("'screen-'yyyyMMdd-HHmmss'.mp4'")
+ .format(new Date());
+ Path path = new File(recordDir, fileName).toPath();
+
+ try {
+ Files.move(mTempFile.toPath(), path);
+ Notification notification = createSaveNotification(path);
+ notificationManager.notify(NOTIFICATION_ID, notification);
+ } catch (IOException e) {
+ e.printStackTrace();
+ Toast.makeText(this, R.string.screenrecord_delete_error, Toast.LENGTH_LONG)
+ .show();
+ }
+ break;
+
+ case ACTION_PAUSE:
+ mMediaRecorder.pause();
+ setNotificationActions(true, notificationManager);
+ break;
+
+ case ACTION_RESUME:
+ mMediaRecorder.resume();
+ setNotificationActions(false, notificationManager);
+ break;
+
+ case ACTION_SHARE:
+ File shareFile = new File(intent.getStringExtra(EXTRA_PATH));
+ Uri shareUri = FileProvider.getUriForFile(this, FILE_PROVIDER, shareFile);
+
+ Intent shareIntent = new Intent(Intent.ACTION_SEND)
+ .setType("video/mp4")
+ .putExtra(Intent.EXTRA_STREAM, shareUri);
+ String shareLabel = getResources().getString(R.string.screenrecord_share_label);
+
+ // Close quick shade
+ sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
+
+ // Remove notification
+ notificationManager.cancel(NOTIFICATION_ID);
+
+ startActivity(Intent.createChooser(shareIntent, shareLabel)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+ break;
+ case ACTION_DELETE:
+ // Close quick shade
+ sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
+
+ File file = new File(intent.getStringExtra(EXTRA_PATH));
+ if (file.delete()) {
+ Toast.makeText(
+ this,
+ R.string.screenrecord_delete_description,
+ Toast.LENGTH_LONG).show();
+
+ // Remove notification
+ notificationManager.cancel(NOTIFICATION_ID);
+ } else {
+ Log.e(TAG, "Error deleting screen recording!");
+ Toast.makeText(this, R.string.screenrecord_delete_error, Toast.LENGTH_LONG)
+ .show();
+ }
+ break;
+ }
+ return Service.START_STICKY;
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ mMediaProjectionManager =
+ (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
+ }
+
+ /**
+ * Begin the recording session
+ */
+ private void startRecording() {
+ try {
+ mTempFile = File.createTempFile("temp", ".mp4");
+ Log.d(TAG, "Writing video output to: " + mTempFile.getAbsolutePath());
+
+ setTapsVisible(mShowTaps);
+
+ // Set up media recorder
+ mMediaRecorder = new MediaRecorder();
+ if (mUseAudio) {
+ mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
+ }
+ mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
+ mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
+
+ // Set up video
+ DisplayMetrics metrics = getResources().getDisplayMetrics();
+ int screenWidth = metrics.widthPixels;
+ int screenHeight = metrics.heightPixels;
+ mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
+ mMediaRecorder.setVideoSize(screenWidth, screenHeight);
+ mMediaRecorder.setVideoFrameRate(VIDEO_FRAME_RATE);
+ mMediaRecorder.setVideoEncodingBitRate(VIDEO_BIT_RATE);
+
+ // Set up audio
+ if (mUseAudio) {
+ mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
+ mMediaRecorder.setAudioChannels(TOTAL_NUM_TRACKS);
+ mMediaRecorder.setAudioEncodingBitRate(AUDIO_BIT_RATE);
+ mMediaRecorder.setAudioSamplingRate(AUDIO_SAMPLE_RATE);
+ }
+
+ mMediaRecorder.setOutputFile(mTempFile);
+ mMediaRecorder.prepare();
+
+ // Create surface
+ mInputSurface = mMediaRecorder.getSurface();
+ mVirtualDisplay = mMediaProjection.createVirtualDisplay(
+ "Recording Display",
+ screenWidth,
+ screenHeight,
+ metrics.densityDpi,
+ DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
+ mInputSurface,
+ null,
+ null);
+
+ mMediaRecorder.start();
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+
+ createRecordingNotification();
+ }
+
+ private void createRecordingNotification() {
+ NotificationChannel channel = new NotificationChannel(
+ CHANNEL_ID,
+ getString(R.string.screenrecord_name),
+ NotificationManager.IMPORTANCE_HIGH);
+ channel.setDescription(getString(R.string.screenrecord_channel_description));
+ channel.enableVibration(true);
+ NotificationManager notificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ notificationManager.createNotificationChannel(channel);
+
+ mRecordingNotificationBuilder = new Notification.Builder(this, CHANNEL_ID)
+ .setSmallIcon(R.drawable.ic_android)
+ .setContentTitle(getResources().getString(R.string.screenrecord_name))
+ .setUsesChronometer(true)
+ .setOngoing(true);
+ setNotificationActions(false, notificationManager);
+ Notification notification = mRecordingNotificationBuilder.build();
+ startForeground(NOTIFICATION_ID, notification);
+ }
+
+ private void setNotificationActions(boolean isPaused, NotificationManager notificationManager) {
+ String pauseString = getResources()
+ .getString(isPaused ? R.string.screenrecord_resume_label
+ : R.string.screenrecord_pause_label);
+ Intent pauseIntent = isPaused ? getResumeIntent(this) : getPauseIntent(this);
+
+ mRecordingNotificationBuilder.setActions(
+ new Notification.Action.Builder(
+ Icon.createWithResource(this, R.drawable.ic_android),
+ getResources().getString(R.string.screenrecord_stop_label),
+ PendingIntent
+ .getService(this, REQUEST_CODE, getStopIntent(this),
+ PendingIntent.FLAG_UPDATE_CURRENT))
+ .build(),
+ new Notification.Action.Builder(
+ Icon.createWithResource(this, R.drawable.ic_android), pauseString,
+ PendingIntent.getService(this, REQUEST_CODE, pauseIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT))
+ .build(),
+ new Notification.Action.Builder(
+ Icon.createWithResource(this, R.drawable.ic_android),
+ getResources().getString(R.string.screenrecord_cancel_label),
+ PendingIntent
+ .getService(this, REQUEST_CODE, getCancelIntent(this),
+ PendingIntent.FLAG_UPDATE_CURRENT))
+ .build());
+ notificationManager.notify(NOTIFICATION_ID, mRecordingNotificationBuilder.build());
+ }
+
+ private Notification createSaveNotification(Path path) {
+ Uri saveUri = FileProvider.getUriForFile(this, FILE_PROVIDER, path.toFile());
+ Log.d(TAG, "Screen recording saved to " + path.toString());
+
+ Intent viewIntent = new Intent(Intent.ACTION_VIEW)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ .setDataAndType(saveUri, "video/mp4");
+
+ Notification.Action shareAction = new Notification.Action.Builder(
+ Icon.createWithResource(this, R.drawable.ic_android),
+ getResources().getString(R.string.screenrecord_share_label),
+ PendingIntent.getService(
+ this,
+ REQUEST_CODE,
+ getShareIntent(this, path.toString()),
+ PendingIntent.FLAG_UPDATE_CURRENT))
+ .build();
+
+ Notification.Action deleteAction = new Notification.Action.Builder(
+ Icon.createWithResource(this, R.drawable.ic_android),
+ getResources().getString(R.string.screenrecord_delete_label),
+ PendingIntent.getService(
+ this,
+ REQUEST_CODE,
+ getDeleteIntent(this, path.toString()),
+ PendingIntent.FLAG_UPDATE_CURRENT))
+ .build();
+
+ Notification.Builder builder = new Notification.Builder(this, CHANNEL_ID)
+ .setSmallIcon(R.drawable.ic_android)
+ .setContentTitle(getResources().getString(R.string.screenrecord_name))
+ .setContentText(getResources().getString(R.string.screenrecord_save_message))
+ .setContentIntent(PendingIntent.getActivity(
+ this,
+ REQUEST_CODE,
+ viewIntent,
+ Intent.FLAG_GRANT_READ_URI_PERMISSION))
+ .addAction(shareAction)
+ .addAction(deleteAction)
+ .setAutoCancel(true);
+
+ // Add thumbnail if available
+ Bitmap thumbnailBitmap = ThumbnailUtils.createVideoThumbnail(path.toString(),
+ MediaStore.Video.Thumbnails.MINI_KIND);
+ if (thumbnailBitmap != null) {
+ Notification.BigPictureStyle pictureStyle = new Notification.BigPictureStyle()
+ .bigPicture(thumbnailBitmap)
+ .bigLargeIcon((Bitmap) null);
+ builder.setLargeIcon(thumbnailBitmap).setStyle(pictureStyle);
+ }
+ return builder.build();
+ }
+
+ private void stopRecording() {
+ setTapsVisible(false);
+ mMediaRecorder.stop();
+ mMediaRecorder.release();
+ mMediaRecorder = null;
+ mMediaProjection.stop();
+ mMediaProjection = null;
+ mInputSurface.release();
+ mVirtualDisplay.release();
+ stopSelf();
+ }
+
+ private void setTapsVisible(boolean turnOn) {
+ int value = turnOn ? 1 : 0;
+ Settings.System.putInt(getApplicationContext().getContentResolver(),
+ Settings.System.SHOW_TOUCHES, value);
+ }
+
+ private static Intent getStopIntent(Context context) {
+ return new Intent(context, RecordingService.class).setAction(ACTION_STOP);
+ }
+
+ private static Intent getPauseIntent(Context context) {
+ return new Intent(context, RecordingService.class).setAction(ACTION_PAUSE);
+ }
+
+ private static Intent getResumeIntent(Context context) {
+ return new Intent(context, RecordingService.class).setAction(ACTION_RESUME);
+ }
+
+ private static Intent getCancelIntent(Context context) {
+ return new Intent(context, RecordingService.class).setAction(ACTION_CANCEL);
+ }
+
+ private static Intent getShareIntent(Context context, String path) {
+ return new Intent(context, RecordingService.class).setAction(ACTION_SHARE)
+ .putExtra(EXTRA_PATH, path);
+ }
+
+ private static Intent getDeleteIntent(Context context, String path) {
+ return new Intent(context, RecordingService.class).setAction(ACTION_DELETE)
+ .putExtra(EXTRA_PATH, path);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java
new file mode 100644
index 0000000..27e9fba
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.screenrecord;
+
+import android.Manifest;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.media.projection.MediaProjectionManager;
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.Toast;
+
+import com.android.systemui.R;
+
+/**
+ * Activity to select screen recording options
+ */
+public class ScreenRecordDialog extends Activity {
+ private static final String TAG = "ScreenRecord";
+ private static final int REQUEST_CODE_VIDEO_ONLY = 200;
+ private static final int REQUEST_CODE_VIDEO_TAPS = 201;
+ private static final int REQUEST_CODE_PERMISSIONS = 299;
+ private static final int REQUEST_CODE_VIDEO_AUDIO = 300;
+ private static final int REQUEST_CODE_VIDEO_AUDIO_TAPS = 301;
+ private static final int REQUEST_CODE_PERMISSIONS_AUDIO = 399;
+ private boolean mUseAudio;
+ private boolean mShowTaps;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.screen_record_dialog);
+
+ final CheckBox micCheckBox = findViewById(R.id.checkbox_mic);
+ final CheckBox tapsCheckBox = findViewById(R.id.checkbox_taps);
+
+ final Button recordButton = findViewById(R.id.record_button);
+ recordButton.setOnClickListener(v -> {
+ mUseAudio = micCheckBox.isChecked();
+ mShowTaps = tapsCheckBox.isChecked();
+ Log.d(TAG, "Record button clicked: audio " + mUseAudio + ", taps " + mShowTaps);
+
+ if (mUseAudio && checkSelfPermission(Manifest.permission.RECORD_AUDIO)
+ != PackageManager.PERMISSION_GRANTED) {
+ Log.d(TAG, "Requesting permission for audio");
+ requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO},
+ REQUEST_CODE_PERMISSIONS_AUDIO);
+ } else {
+ requestScreenCapture();
+ }
+ });
+ }
+
+ private void requestScreenCapture() {
+ MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(
+ Context.MEDIA_PROJECTION_SERVICE);
+ Intent permissionIntent = mediaProjectionManager.createScreenCaptureIntent();
+
+ if (mUseAudio) {
+ startActivityForResult(permissionIntent,
+ mShowTaps ? REQUEST_CODE_VIDEO_AUDIO_TAPS : REQUEST_CODE_VIDEO_AUDIO);
+ } else {
+ startActivityForResult(permissionIntent,
+ mShowTaps ? REQUEST_CODE_VIDEO_TAPS : REQUEST_CODE_VIDEO_ONLY);
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ mShowTaps = (requestCode == REQUEST_CODE_VIDEO_TAPS
+ || requestCode == REQUEST_CODE_VIDEO_AUDIO_TAPS);
+ switch (requestCode) {
+ case REQUEST_CODE_VIDEO_TAPS:
+ case REQUEST_CODE_VIDEO_AUDIO_TAPS:
+ case REQUEST_CODE_VIDEO_ONLY:
+ case REQUEST_CODE_VIDEO_AUDIO:
+ if (resultCode == RESULT_OK) {
+ mUseAudio = (requestCode == REQUEST_CODE_VIDEO_AUDIO
+ || requestCode == REQUEST_CODE_VIDEO_AUDIO_TAPS);
+ startForegroundService(
+ RecordingService.getStartIntent(this, resultCode, data, mUseAudio,
+ mShowTaps));
+ } else {
+ Toast.makeText(this,
+ getResources().getString(R.string.screenrecord_permission_error),
+ Toast.LENGTH_SHORT).show();
+ }
+ finish();
+ break;
+ case REQUEST_CODE_PERMISSIONS:
+ int permission = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ if (permission != PackageManager.PERMISSION_GRANTED) {
+ Toast.makeText(this,
+ getResources().getString(R.string.screenrecord_permission_error),
+ Toast.LENGTH_SHORT).show();
+ finish();
+ } else {
+ requestScreenCapture();
+ }
+ break;
+ case REQUEST_CODE_PERMISSIONS_AUDIO:
+ int videoPermission = checkSelfPermission(
+ Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ int audioPermission = checkSelfPermission(Manifest.permission.RECORD_AUDIO);
+ if (videoPermission != PackageManager.PERMISSION_GRANTED
+ || audioPermission != PackageManager.PERMISSION_GRANTED) {
+ Toast.makeText(this,
+ getResources().getString(R.string.screenrecord_permission_error),
+ Toast.LENGTH_SHORT).show();
+ finish();
+ } else {
+ requestScreenCapture();
+ }
+ break;
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
index f30377e..8c53cc2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
@@ -35,6 +35,7 @@
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
+import android.util.Pair;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
@@ -47,7 +48,6 @@
import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
-import com.android.systemui.InitController;
import com.android.systemui.statusbar.notification.NotificationData;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -122,7 +122,7 @@
@Override
public boolean onClickHandler(
- final View view, final PendingIntent pendingIntent, final Intent fillInIntent) {
+ View view, PendingIntent pendingIntent, RemoteViews.RemoteResponse response) {
getShadeController().wakeUpIfDozing(SystemClock.uptimeMillis(), view);
if (handleRemoteInput(view, pendingIntent)) {
@@ -141,8 +141,12 @@
ActivityManager.getService().resumeAppSwitches();
} catch (RemoteException e) {
}
- return mCallback.handleRemoteViewClick(view, pendingIntent, fillInIntent,
- () -> super.onClickHandler(view, pendingIntent, fillInIntent));
+ return mCallback.handleRemoteViewClick(pendingIntent, () -> {
+ Pair<Intent, ActivityOptions> options = response.getLaunchOptions(view);
+ options.second.setLaunchWindowingMode(
+ WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY);
+ return RemoteViews.startPendingIntent(view, pendingIntent, options);
+ });
}
private void logActionClick(View view) {
@@ -180,13 +184,6 @@
return null;
}
- @Override
- protected ActivityOptions getActivityOptions(Context context) {
- ActivityOptions options = super.getActivityOptions(context);
- options.setLaunchWindowingMode(WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY);
- return options;
- }
-
private boolean handleRemoteInput(View view, PendingIntent pendingIntent) {
if (mCallback.shouldHandleRemoteInput(view, pendingIntent)) {
return true;
@@ -661,14 +658,11 @@
* Performs any special handling for a remote view click. The default behaviour can be
* called through the defaultHandler parameter.
*
- * @param view
* @param pendingIntent
- * @param fillInIntent
* @param defaultHandler
* @return true iff the click was handled
*/
- boolean handleRemoteViewClick(View view, PendingIntent pendingIntent, Intent fillInIntent,
- ClickHandler defaultHandler);
+ boolean handleRemoteViewClick(PendingIntent pendingIntent, ClickHandler defaultHandler);
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index 39b8a9f..bf33614 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -405,6 +405,8 @@
int top = (int) (maxTop - shelfIconPosition);
Rect clipRect = new Rect(0, top, icon.getWidth(), Math.max(top, icon.getHeight()));
icon.setClipBounds(clipRect);
+ } else {
+ icon.setClipBounds(null);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/SwitchToGuestTimer.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/SwitchToGuestTimer.java
index 27a5d4b..f9fa44b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/SwitchToGuestTimer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/SwitchToGuestTimer.java
@@ -79,7 +79,7 @@
@Override
public void onFinish() {
- mCarUserManagerHelper.startNewGuestSession(mGuestName);
+ mCarUserManagerHelper.startGuestSession(mGuestName);
cancel();
}
};
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java
index 618a4c1..53a7afe 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java
@@ -223,7 +223,7 @@
if (userRecord.mIsStartGuestSession) {
notifyUserSelected(userRecord);
- mCarUserManagerHelper.startNewGuestSession(mGuestName);
+ mCarUserManagerHelper.startGuestSession(mGuestName);
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index 6193de5..965fb13 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -1499,9 +1499,7 @@
}
private void updateIconVisibilities() {
- boolean visible = isChildInGroup()
- || isBelowSpeedBump()
- || mIconsVisible;
+ boolean visible = isChildInGroup() || mIconsVisible;
for (NotificationContentView l : mLayouts) {
l.setIconsVisible(visible);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
index e41e3e4..f50e9a2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
@@ -230,7 +230,7 @@
private void updateShelfIcons() {
updateIconsForLayout(entry -> entry.expandedIcon, mShelfIcons,
- false /* showAmbient */, !mFullyDark /* showLowPriority */,
+ true /* showAmbient */, !mFullyDark /* showLowPriority */,
false /* hideDismissed */, mFullyDark /* hideRepliedMessages */);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index 553165b..0e6efc8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -57,6 +57,7 @@
import android.util.ArraySet;
import android.util.Log;
import android.util.Pair;
+
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.TelephonyIntents;
@@ -391,7 +392,7 @@
zenDescription = mContext.getString(R.string.interruption_level_priority);
}
- if (!ZenModeConfig.isZenOverridingRinger(zen, mZenController.getConfig())) {
+ if (!ZenModeConfig.isZenOverridingRinger(zen, mZenController.getConsolidatedPolicy())) {
if (audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE) {
volumeVisible = true;
volumeIconId = R.drawable.stat_sys_ringer_vibrate;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
index 06f9658..a743d41e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
@@ -33,7 +33,6 @@
import android.os.UserHandle;
import android.view.View;
import android.view.ViewParent;
-import android.view.ViewTreeObserver;
import com.android.systemui.Dependency;
import com.android.systemui.plugins.ActivityStarter;
@@ -44,7 +43,6 @@
import com.android.systemui.statusbar.NotificationRemoteInputManager.Callback;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.policy.KeyguardMonitor;
@@ -208,8 +206,8 @@
}
@Override
- public boolean handleRemoteViewClick(View view, PendingIntent pendingIntent,
- Intent fillInIntent, NotificationRemoteInputManager.ClickHandler defaultHandler) {
+ public boolean handleRemoteViewClick(PendingIntent pendingIntent,
+ NotificationRemoteInputManager.ClickHandler defaultHandler) {
final boolean isActivity = pendingIntent.isActivity();
if (isActivity) {
final boolean afterKeyguardGone = PreviewInflater.wouldLaunchResolverActivity(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java
index 4ee8059..ad19729 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.policy;
+import android.app.NotificationManager;
import android.content.ComponentName;
import android.net.Uri;
import android.service.notification.Condition;
@@ -29,6 +30,8 @@
int getZen();
ZenRule getManualRule();
ZenModeConfig getConfig();
+ /** Gets consolidated zen policy that will apply when DND is on in priority only mode */
+ NotificationManager.Policy getConsolidatedPolicy();
long getNextAlarm();
boolean isZenAvailable();
ComponentName getEffectsSuppressor();
@@ -45,6 +48,8 @@
default void onEffectsSupressorChanged() {}
default void onManualRuleChanged(ZenRule rule) {}
default void onConfigChanged(ZenModeConfig config) {}
+ /** Called when the consolidated zen policy changes */
+ default void onConsolidatedPolicyChanged(NotificationManager.Policy policy) {}
}
}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
index 8d2552f..89ccff0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
@@ -69,6 +69,7 @@
private ZenModeConfig mConfig;
private int mZenMode;
private long mZenUpdateTime;
+ private NotificationManager.Policy mConsolidatedNotificationPolicy;
public ZenModeControllerImpl(Context context, Handler handler) {
super(context);
@@ -91,6 +92,7 @@
updateZenMode(mModeSetting.getValue());
mConfigSetting.setListening(true);
updateZenModeConfig();
+ updateConsolidatedNotificationPolicy();
mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
mSetupObserver = new SetupObserver(handler);
mSetupObserver.register();
@@ -153,6 +155,11 @@
}
@Override
+ public NotificationManager.Policy getConsolidatedPolicy() {
+ return mConsolidatedNotificationPolicy;
+ }
+
+ @Override
public long getNextAlarm() {
final AlarmManager.AlarmClockInfo info = mAlarmManager.getNextAlarmClock(mUserId);
return info != null ? info.getTriggerTime() : 0;
@@ -217,6 +224,12 @@
}
}
+ private void fireConsolidatedPolicyChanged(NotificationManager.Policy policy) {
+ synchronized (mCallbacksLock) {
+ Utils.safeForeach(mCallbacks, c -> c.onConsolidatedPolicyChanged(policy));
+ }
+ }
+
@VisibleForTesting
protected void fireConfigChanged(ZenModeConfig config) {
synchronized (mCallbacksLock) {
@@ -231,6 +244,16 @@
}
@VisibleForTesting
+ protected void updateConsolidatedNotificationPolicy() {
+ final NotificationManager.Policy policy = mNoMan.getConsolidatedNotificationPolicy();
+ if (!Objects.equals(policy, mConsolidatedNotificationPolicy)) {
+ mConsolidatedNotificationPolicy = policy;
+ fireConsolidatedPolicyChanged(policy);
+ }
+ }
+
+
+ @VisibleForTesting
protected void updateZenModeConfig() {
final ZenModeConfig config = mNoMan.getZenModeConfig();
if (Objects.equals(config, mConfig)) return;
@@ -238,9 +261,19 @@
mConfig = config;
mZenUpdateTime = System.currentTimeMillis();
fireConfigChanged(config);
+
final ZenRule newRule = config != null ? config.manualRule : null;
- if (Objects.equals(oldRule, newRule)) return;
- fireManualRuleChanged(newRule);
+ if (!Objects.equals(oldRule, newRule)) {
+ fireManualRuleChanged(newRule);
+ }
+
+ final NotificationManager.Policy consolidatedPolicy =
+ mNoMan.getConsolidatedNotificationPolicy();
+ if (!Objects.equals(consolidatedPolicy, mConsolidatedNotificationPolicy)) {
+ mConsolidatedNotificationPolicy = consolidatedPolicy;
+ fireConsolidatedPolicyChanged(consolidatedPolicy);
+ }
+
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@@ -260,6 +293,7 @@
pw.println("ZenModeControllerImpl:");
pw.println(" mZenMode=" + mZenMode);
pw.println(" mConfig=" + mConfig);
+ pw.println(" mConsolidatedNotificationPolicy=" + mConsolidatedNotificationPolicy);
pw.println(" mZenUpdateTime=" + DateFormat.format("MM-dd HH:mm:ss", mZenUpdateTime));
}
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
index 4102e63..ed2ad79 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
@@ -23,7 +23,7 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
-import android.hardware.usb.IUsbManager;
+import android.debug.IAdbManager;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.os.IBinder;
@@ -153,12 +153,12 @@
boolean allow = (which == AlertDialog.BUTTON_POSITIVE);
boolean alwaysAllow = allow && mAlwaysAllow.isChecked();
try {
- IBinder b = ServiceManager.getService(USB_SERVICE);
- IUsbManager service = IUsbManager.Stub.asInterface(b);
+ IBinder b = ServiceManager.getService(ADB_SERVICE);
+ IAdbManager service = IAdbManager.Stub.asInterface(b);
if (allow) {
- service.allowUsbDebugging(alwaysAllow, mKey);
+ service.allowDebugging(alwaysAllow, mKey);
} else {
- service.denyUsbDebugging();
+ service.denyDebugging();
}
} catch (Exception e) {
Log.e(TAG, "Unable to notify Usb service", e);
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java
index 62ca3f3..9cbe415 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java
@@ -21,10 +21,11 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
-import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
import android.graphics.Color;
@@ -34,7 +35,6 @@
import android.testing.TestableLooper.RunWithLooper;
import android.text.TextPaint;
import android.view.LayoutInflater;
-import android.view.ViewGroup;
import android.widget.TextClock;
import com.android.systemui.SysuiTestCase;
@@ -68,6 +68,7 @@
mKeyguardClockSwitch =
(KeyguardClockSwitch) layoutInflater.inflate(R.layout.keyguard_clock_switch, null);
MockitoAnnotations.initMocks(this);
+ when(mClockView.getPaint()).thenReturn(mock(TextPaint.class));
}
@Test
@@ -91,8 +92,6 @@
ClockPlugin plugin = mock(ClockPlugin.class);
TextClock pluginView = new TextClock(getContext());
when(plugin.getView()).thenReturn(pluginView);
- TextPaint paint = mock(TextPaint.class);
- doReturn(paint).when(mClockView).getPaint();
PluginListener listener = mKeyguardClockSwitch.getClockPluginListener();
listener.onPluginConnected(plugin, null);
@@ -102,16 +101,38 @@
}
@Test
+ public void onPluginConnected_nullView() {
+ ClockPlugin plugin = mock(ClockPlugin.class);
+ PluginListener listener = mKeyguardClockSwitch.getClockPluginListener();
+ listener.onPluginConnected(plugin, null);
+ verify(mClockView, never()).setVisibility(GONE);
+ }
+
+ @Test
+ public void onPluginConnected_showSecondPluginClock() {
+ // GIVEN a plugin has already connected
+ ClockPlugin plugin1 = mock(ClockPlugin.class);
+ when(plugin1.getView()).thenReturn(new TextClock(getContext()));
+ PluginListener listener = mKeyguardClockSwitch.getClockPluginListener();
+ listener.onPluginConnected(plugin1, null);
+ // WHEN a second plugin is connected
+ ClockPlugin plugin2 = mock(ClockPlugin.class);
+ when(plugin2.getView()).thenReturn(new TextClock(getContext()));
+ listener.onPluginConnected(plugin2, null);
+ // THEN only the view from the second plugin should be a child of KeyguardClockSwitch.
+ assertThat(plugin2.getView().getParent()).isEqualTo(mKeyguardClockSwitch);
+ assertThat(plugin1.getView().getParent()).isNull();
+ }
+
+ @Test
public void onPluginDisconnected_showDefaultClock() {
ClockPlugin plugin = mock(ClockPlugin.class);
TextClock pluginView = new TextClock(getContext());
when(plugin.getView()).thenReturn(pluginView);
mClockView.setVisibility(GONE);
- mKeyguardClockSwitch.addView(plugin.getView(), -1,
- new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.WRAP_CONTENT));
PluginListener listener = mKeyguardClockSwitch.getClockPluginListener();
+ listener.onPluginConnected(plugin, null);
listener.onPluginDisconnected(plugin);
verify(mClockView).setVisibility(VISIBLE);
@@ -119,6 +140,50 @@
}
@Test
+ public void onPluginDisconnected_nullView() {
+ ClockPlugin plugin = mock(ClockPlugin.class);
+ PluginListener listener = mKeyguardClockSwitch.getClockPluginListener();
+ listener.onPluginConnected(plugin, null);
+ listener.onPluginDisconnected(plugin);
+ verify(mClockView, never()).setVisibility(GONE);
+ }
+
+ @Test
+ public void onPluginDisconnected_firstOfTwoDisconnected() {
+ // GIVEN two plugins are connected
+ ClockPlugin plugin1 = mock(ClockPlugin.class);
+ when(plugin1.getView()).thenReturn(new TextClock(getContext()));
+ PluginListener listener = mKeyguardClockSwitch.getClockPluginListener();
+ listener.onPluginConnected(plugin1, null);
+ ClockPlugin plugin2 = mock(ClockPlugin.class);
+ when(plugin2.getView()).thenReturn(new TextClock(getContext()));
+ listener.onPluginConnected(plugin2, null);
+ // WHEN the first plugin is disconnected
+ listener.onPluginDisconnected(plugin1);
+ // THEN the view from the second plugin is still a child of KeyguardClockSwitch.
+ assertThat(plugin2.getView().getParent()).isEqualTo(mKeyguardClockSwitch);
+ assertThat(plugin1.getView().getParent()).isNull();
+ }
+
+ @Test
+ public void onPluginDisconnected_secondOfTwoDisconnected() {
+ // GIVEN two plugins are connected
+ ClockPlugin plugin1 = mock(ClockPlugin.class);
+ when(plugin1.getView()).thenReturn(new TextClock(getContext()));
+ PluginListener listener = mKeyguardClockSwitch.getClockPluginListener();
+ listener.onPluginConnected(plugin1, null);
+ ClockPlugin plugin2 = mock(ClockPlugin.class);
+ when(plugin2.getView()).thenReturn(new TextClock(getContext()));
+ listener.onPluginConnected(plugin2, null);
+ // WHEN the second plugin is disconnected
+ listener.onPluginDisconnected(plugin2);
+ // THEN the default clock should be shown.
+ verify(mClockView).setVisibility(VISIBLE);
+ assertThat(plugin1.getView().getParent()).isNull();
+ assertThat(plugin2.getView().getParent()).isNull();
+ }
+
+ @Test
public void setTextColor_defaultClockSetTextColor() {
mKeyguardClockSwitch.setTextColor(Color.YELLOW);
@@ -130,8 +195,6 @@
ClockPlugin plugin = mock(ClockPlugin.class);
TextClock pluginView = new TextClock(getContext());
when(plugin.getView()).thenReturn(pluginView);
- TextPaint paint = mock(TextPaint.class);
- doReturn(paint).when(mClockView).getPaint();
PluginListener listener = mKeyguardClockSwitch.getClockPluginListener();
listener.onPluginConnected(plugin, null);
@@ -156,8 +219,6 @@
ClockPlugin plugin = mock(ClockPlugin.class);
TextClock pluginView = new TextClock(getContext());
when(plugin.getView()).thenReturn(pluginView);
- TextPaint paint = mock(TextPaint.class);
- doReturn(paint).when(mClockView).getPaint();
Style style = mock(Style.class);
PluginListener listener = mKeyguardClockSwitch.getClockPluginListener();
listener.onPluginConnected(plugin, null);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/InitControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/InitControllerTest.java
new file mode 100644
index 0000000..4d33d43
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/InitControllerTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui;
+
+import static junit.framework.TestCase.assertFalse;
+import static junit.framework.TestCase.assertTrue;
+
+import android.support.test.filters.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+public class InitControllerTest extends SysuiTestCase {
+
+ private InitController mInitController = new InitController();
+
+ @Test
+ public void testInitControllerExecutesTasks() {
+ boolean[] runs = {false, false, false};
+ mInitController.addPostInitTask(() -> {
+ runs[0] = true;
+ });
+ mInitController.addPostInitTask(() -> {
+ runs[1] = true;
+ });
+ mInitController.addPostInitTask(() -> {
+ runs[2] = true;
+ });
+ assertFalse(runs[0] || runs[1] || runs[2]);
+
+ mInitController.executePostInitTasks();
+ assertTrue(runs[0] && runs[1] && runs[2]);
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testInitControllerThrowsWhenTasksAreAddedAfterExecution() {
+ boolean[] runs = {false, false, false};
+ mInitController.addPostInitTask(() -> {
+ runs[0] = true;
+ });
+ mInitController.addPostInitTask(() -> {
+ runs[1] = true;
+ });
+
+ mInitController.executePostInitTasks();
+
+ // Throws
+ mInitController.addPostInitTask(() -> {
+ runs[2] = true;
+ });
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogBuilderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogBuilderTest.kt
new file mode 100644
index 0000000..7204d31
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogBuilderTest.kt
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.privacy
+
+import android.support.test.filters.SmallTest
+import android.support.test.runner.AndroidJUnit4
+import com.android.systemui.SysuiTestCase
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class PrivacyDialogBuilderTest : SysuiTestCase() {
+
+ companion object {
+ val MILLIS_IN_MINUTE: Long = 1000 * 60
+ val NOW = 4 * MILLIS_IN_MINUTE
+ }
+
+ @Test
+ fun testGenerateText_multipleApps() {
+ val bar2 = PrivacyItem(Privacy.TYPE_CAMERA, PrivacyApplication(
+ "Bar", context), 2 * MILLIS_IN_MINUTE)
+ val bar3 = PrivacyItem(Privacy.TYPE_LOCATION, PrivacyApplication(
+ "Bar", context), 3 * MILLIS_IN_MINUTE)
+ val foo0 = PrivacyItem(Privacy.TYPE_CAMERA, PrivacyApplication(
+ "Foo", context), 0)
+ val baz1 = PrivacyItem(Privacy.TYPE_CAMERA, PrivacyApplication(
+ "Baz", context), 1 * MILLIS_IN_MINUTE)
+
+ val items = listOf(bar2, foo0, baz1, bar3)
+
+ val textBuilder = PrivacyDialogBuilder(context, items)
+
+ val textList = textBuilder.generateText(NOW)
+ assertEquals(2, textList.size)
+ assertEquals("Bar, Foo, Baz are using your camera", textList[0])
+ assertEquals("Bar is using your location for the last 1 min", textList[1])
+ }
+
+ @Test
+ fun testGenerateText_singleApp() {
+ val bar2 = PrivacyItem(Privacy.TYPE_CAMERA, PrivacyApplication(
+ "Bar", context), 0)
+ val bar1 = PrivacyItem(Privacy.TYPE_LOCATION, PrivacyApplication(
+ "Bar", context), 0)
+
+ val items = listOf(bar2, bar1)
+
+ val textBuilder = PrivacyDialogBuilder(context, items)
+ val textList = textBuilder.generateText(NOW)
+ assertEquals(1, textList.size)
+ assertEquals("Bar is using your camera, location", textList[0])
+ }
+
+ @Test
+ fun testGenerateText_singleApp_singleType() {
+ val bar2 = PrivacyItem(Privacy.TYPE_CAMERA, PrivacyApplication(
+ "Bar", context), 2 * MILLIS_IN_MINUTE)
+ val items = listOf(bar2)
+ val textBuilder = PrivacyDialogBuilder(context, items)
+ val textList = textBuilder.generateText(NOW)
+ assertEquals(1, textList.size)
+ assertEquals("Bar is using your camera for the last 2 min", textList[0])
+ }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInflaterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInflaterTest.java
index fdb66cc..0d2d345 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInflaterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInflaterTest.java
@@ -167,7 +167,7 @@
CountDownLatch countDownLatch = new CountDownLatch(1);
NotificationInflater.applyRemoteView(result, FLAG_CONTENT_VIEW_EXPANDED, 0,
new ArrayMap() /* cachedContentViews */, mRow, false /* redactAmbient */,
- true /* isNewView */, new RemoteViews.OnClickHandler(),
+ true /* isNewView */, (v, p, r) -> true,
new NotificationInflater.InflationCallback() {
@Override
public void handleInflationException(StatusBarNotification notification,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeZenModeController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeZenModeController.java
index 86c43c9..75df4e6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeZenModeController.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeZenModeController.java
@@ -14,6 +14,7 @@
package com.android.systemui.utils.leaks;
+import android.app.NotificationManager;
import android.content.ComponentName;
import android.net.Uri;
import android.service.notification.ZenModeConfig;
@@ -49,6 +50,11 @@
}
@Override
+ public NotificationManager.Policy getConsolidatedPolicy() {
+ return null;
+ }
+
+ @Override
public long getNextAlarm() {
return 0;
}
diff --git a/proto/src/metrics_constants/metrics_constants.proto b/proto/src/metrics_constants/metrics_constants.proto
index d15b277..ddd0c2c 100644
--- a/proto/src/metrics_constants/metrics_constants.proto
+++ b/proto/src/metrics_constants/metrics_constants.proto
@@ -6574,6 +6574,11 @@
// OS: Q
BIOMETRIC_FRAGMENT = 1585;
+ // OPEN: Biometric Enrollment (android.settings.BIOMETRIC_ENROLL action intent)
+ // CATEGORY: SETTINGS
+ // OS: Q
+ BIOMETRIC_ENROLL_ACTIVITY = 1586;
+
// ---- End Q Constants, all Q constants go above this line ----
// Add new aosp constants above this line.
diff --git a/services/autofill/java/com/android/server/autofill/ui/FillUi.java b/services/autofill/java/com/android/server/autofill/ui/FillUi.java
index 742d494..f79f6ff 100644
--- a/services/autofill/java/com/android/server/autofill/ui/FillUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/FillUi.java
@@ -203,15 +203,11 @@
.getInteger(com.android.internal.R.integer.autofill_max_visible_datasets);
}
- final RemoteViews.OnClickHandler interceptionHandler = new RemoteViews.OnClickHandler() {
- @Override
- public boolean onClickHandler(View view, PendingIntent pendingIntent,
- Intent fillInIntent) {
- if (pendingIntent != null) {
- mCallback.startIntentSender(pendingIntent.getIntentSender());
- }
- return true;
+ final RemoteViews.OnClickHandler interceptionHandler = (view, pendingIntent, r) -> {
+ if (pendingIntent != null) {
+ mCallback.startIntentSender(pendingIntent.getIntentSender());
}
+ return true;
};
if (response.getAuthentication() != null) {
@@ -369,13 +365,9 @@
* Creates a remoteview interceptor used to block clicks.
*/
private RemoteViews.OnClickHandler newClickBlocker() {
- return new RemoteViews.OnClickHandler() {
- @Override
- public boolean onClickHandler(View view, PendingIntent pendingIntent,
- Intent fillInIntent) {
- if (sVerbose) Slog.v(TAG, "Ignoring click on " + view);
- return true;
- }
+ return (view, pendingIntent, response) -> {
+ if (sVerbose) Slog.v(TAG, "Ignoring click on " + view);
+ return true;
};
}
diff --git a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
index 89b442e..1e30c8a 100644
--- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
@@ -304,39 +304,36 @@
}
}
- final RemoteViews.OnClickHandler handler = new RemoteViews.OnClickHandler() {
- @Override
- public boolean onClickHandler(View view, PendingIntent pendingIntent,
- Intent intent) {
- final LogMaker log =
- newLogMaker(MetricsEvent.AUTOFILL_SAVE_LINK_TAPPED, type);
- // We need to hide the Save UI before launching the pending intent, and
- // restore back it once the activity is finished, and that's achieved by
- // adding a custom extra in the activity intent.
- final boolean isValid = isValidLink(pendingIntent, intent);
- if (!isValid) {
- log.setType(MetricsEvent.TYPE_UNKNOWN);
- mMetricsLogger.write(log);
- return false;
- }
- if (sVerbose) Slog.v(TAG, "Intercepting custom description intent");
- final IBinder token = mPendingUi.getToken();
- intent.putExtra(AutofillManager.EXTRA_RESTORE_SESSION_TOKEN, token);
- try {
- mPendingUi.client.startIntentSender(pendingIntent.getIntentSender(),
- intent);
- mPendingUi.setState(PendingUi.STATE_PENDING);
- if (sDebug) Slog.d(TAG, "hiding UI until restored with token " + token);
- hide();
- log.setType(MetricsEvent.TYPE_OPEN);
- mMetricsLogger.write(log);
- return true;
- } catch (RemoteException e) {
- Slog.w(TAG, "error triggering pending intent: " + intent);
- log.setType(MetricsEvent.TYPE_FAILURE);
- mMetricsLogger.write(log);
- return false;
- }
+ final RemoteViews.OnClickHandler handler = (view, pendingIntent, response) -> {
+ Intent intent = response.getLaunchOptions(view).first;
+ final LogMaker log =
+ newLogMaker(MetricsEvent.AUTOFILL_SAVE_LINK_TAPPED, type);
+ // We need to hide the Save UI before launching the pending intent, and
+ // restore back it once the activity is finished, and that's achieved by
+ // adding a custom extra in the activity intent.
+ final boolean isValid = isValidLink(pendingIntent, intent);
+ if (!isValid) {
+ log.setType(MetricsEvent.TYPE_UNKNOWN);
+ mMetricsLogger.write(log);
+ return false;
+ }
+ if (sVerbose) Slog.v(TAG, "Intercepting custom description intent");
+ final IBinder token = mPendingUi.getToken();
+ intent.putExtra(AutofillManager.EXTRA_RESTORE_SESSION_TOKEN, token);
+ try {
+ mPendingUi.client.startIntentSender(pendingIntent.getIntentSender(),
+ intent);
+ mPendingUi.setState(PendingUi.STATE_PENDING);
+ if (sDebug) Slog.d(TAG, "hiding UI until restored with token " + token);
+ hide();
+ log.setType(MetricsEvent.TYPE_OPEN);
+ mMetricsLogger.write(log);
+ return true;
+ } catch (RemoteException e) {
+ Slog.w(TAG, "error triggering pending intent: " + intent);
+ log.setType(MetricsEvent.TYPE_FAILURE);
+ mMetricsLogger.write(log);
+ return false;
}
};
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index eb31e78..1ad83ec 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -591,15 +591,15 @@
if (DEBUG) {
Slog.i(TAG, "Backup enable apparently not migrated");
}
- final ContentResolver r = sInstance.mContext.getContentResolver();
- final int enableState = Settings.Secure.getIntForUser(r,
+ ContentResolver resolver = sInstance.getContext().getContentResolver();
+ int enableState = Settings.Secure.getIntForUser(resolver,
Settings.Secure.BACKUP_ENABLED, -1, UserHandle.USER_SYSTEM);
if (enableState >= 0) {
if (DEBUG) {
Slog.i(TAG, "Migrating enable state " + (enableState != 0));
}
writeBackupEnableState(enableState != 0, UserHandle.USER_SYSTEM);
- Settings.Secure.putStringForUser(r,
+ Settings.Secure.putStringForUser(resolver,
Settings.Secure.BACKUP_ENABLED, null, UserHandle.USER_SYSTEM);
} else {
if (DEBUG) {
@@ -2790,8 +2790,8 @@
Slog.e(TAG, "Unable to record backup enable state; reverting to disabled: "
+ e.getMessage());
- final ContentResolver r = sInstance.mContext.getContentResolver();
- Settings.Secure.putStringForUser(r,
+ ContentResolver resolver = sInstance.getContext().getContentResolver();
+ Settings.Secure.putStringForUser(resolver,
Settings.Secure.BACKUP_ENABLED, null, userId);
enableFile.delete();
stage.delete();
diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java
index 8e4c243..32fd7e0 100644
--- a/services/backup/java/com/android/server/backup/Trampoline.java
+++ b/services/backup/java/com/android/server/backup/Trampoline.java
@@ -16,7 +16,10 @@
package com.android.server.backup;
+import static com.android.server.backup.BackupManagerService.TAG;
+
import android.annotation.Nullable;
+import android.app.admin.DevicePolicyManager;
import android.app.backup.BackupManager;
import android.app.backup.IBackupManager;
import android.app.backup.IBackupManagerMonitor;
@@ -39,44 +42,52 @@
import android.os.Trace;
import android.os.UserHandle;
import android.util.Slog;
-
+import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.DumpUtils;
-
import java.io.File;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
-
/**
* A proxy to BackupManagerService implementation.
*
- * This is an external interface to the BackupManagerService which is being accessed via published
- * binder (see BackupManagerService$Lifecycle). This lets us turn down the heavy implementation
- * object on the fly without disturbing binders that have been cached somewhere in the system.
+ * <p>This is an external interface to the BackupManagerService which is being accessed via
+ * published binder (see BackupManagerService$Lifecycle). This lets us turn down the heavy
+ * implementation object on the fly without disturbing binders that have been cached somewhere in
+ * the system.
*
- * This is where it is decided whether backup subsystem is available. It can be disabled with the
- * following two methods:
+ * <p>Trampoline determines whether the backup service is available. It can be disabled in the
+ * following two ways:
*
* <ul>
- * <li> Temporarily - create a file named Trampoline.BACKUP_SUPPRESS_FILENAME, or
- * <li> Product level - set Trampoline.BACKUP_DISABLE_PROPERTY system property to true.
+ * <li>Temporary - create the file {@link #BACKUP_SUPPRESS_FILENAME}, or
+ * <li>Permanent - set the system property {@link #BACKUP_DISABLE_PROPERTY} to true.
* </ul>
+ *
+ * Temporary disabling is controlled by {@link #setBackupServiceActive(int, boolean)} through
+ * privileged callers (currently {@link DevicePolicyManager}). This is called on {@link
+ * UserHandle#USER_SYSTEM} and disables backup for all users.
+ *
+ * <p>Creation of the backup service is done when {@link UserHandle#USER_SYSTEM} is unlocked. The
+ * system user is unlocked before any other users.
*/
public class Trampoline extends IBackupManager.Stub {
- static final String TAG = "BackupManagerService";
-
- // When this file is present, the backup service is inactive
+ // When this file is present, the backup service is inactive.
private static final String BACKUP_SUPPRESS_FILENAME = "backup-suppress";
- // Product-level suppression of backup/restore
+ // Product-level suppression of backup/restore.
private static final String BACKUP_DISABLE_PROPERTY = "ro.backup.disable";
- final Context mContext;
- private final File mSuppressFile; // existence testing & creating synchronized on 'this'
- private final boolean mGlobalDisable;
- private volatile BackupManagerService mService;
+ private final Context mContext;
+ @GuardedBy("mStateLock")
+ private final File mSuppressFile;
+
+ private final boolean mGlobalDisable;
+ private final Object mStateLock = new Object();
+
+ private volatile BackupManagerService mService;
private HandlerThread mHandlerThread;
public Trampoline(Context context) {
@@ -99,78 +110,100 @@
BACKUP_SUPPRESS_FILENAME);
}
+ protected Context getContext() {
+ return mContext;
+ }
+
protected BackupManagerService createBackupManagerService() {
return BackupManagerService.create(mContext, this, mHandlerThread);
}
- // internal control API
- public void initialize(final int whichUser) {
- // Note that only the owner user is currently involved in backup/restore
- // TODO: http://b/22388012
- if (whichUser == UserHandle.USER_SYSTEM) {
- // Does this product support backup/restore at all?
- if (mGlobalDisable) {
- Slog.i(TAG, "Backup/restore not supported");
- return;
- }
+ /**
+ * Initialize {@link BackupManagerService} if the backup service is not disabled. Only the
+ * system user can initialize the service.
+ */
+ /* package */ void initializeService(int userId) {
+ if (mGlobalDisable) {
+ Slog.i(TAG, "Backup service not supported");
+ return;
+ }
- synchronized (this) {
- if (!mSuppressFile.exists()) {
- mService = createBackupManagerService();
- } else {
- Slog.i(TAG, "Backup inactive in user " + whichUser);
- }
+ if (userId != UserHandle.USER_SYSTEM) {
+ Slog.i(TAG, "Cannot initialize backup service for non-system user: " + userId);
+ return;
+ }
+
+ synchronized (mStateLock) {
+ if (!mSuppressFile.exists()) {
+ mService = createBackupManagerService();
+ } else {
+ Slog.i(TAG, "Backup service inactive");
}
}
}
+ /**
+ * Called from {@link BackupManagerService$Lifecycle} when the system user is unlocked. Attempts
+ * to initialize {@link BackupManagerService} and set backup state for the system user.
+ *
+ * @see BackupManagerService#unlockSystemUser()
+ */
void unlockSystemUser() {
mHandlerThread = new HandlerThread("backup", Process.THREAD_PRIORITY_BACKGROUND);
mHandlerThread.start();
Handler h = new Handler(mHandlerThread.getLooper());
- h.post(() -> {
- Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "backup init");
- initialize(UserHandle.USER_SYSTEM);
- Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+ h.post(
+ () -> {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "backup init");
+ initializeService(UserHandle.USER_SYSTEM);
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
- BackupManagerService svc = mService;
- Slog.i(TAG, "Unlocking system user; mService=" + mService);
- if (svc != null) {
- svc.unlockSystemUser();
- }
- });
+ BackupManagerService service = mService;
+ if (service != null) {
+ Slog.i(TAG, "Unlocking system user");
+ service.unlockSystemUser();
+ }
+ });
}
- public void setBackupServiceActive(final int userHandle, boolean makeActive) {
- // Only the DPM should be changing the active state of backup
- final int caller = binderGetCallingUid();
- if (caller != Process.SYSTEM_UID
- && caller != Process.ROOT_UID) {
+ /**
+ * Only privileged callers should be changing the backup state. This method only acts on {@link
+ * UserHandle#USER_SYSTEM} and is a no-op if passed non-system users. Deactivating backup in the
+ * system user also deactivates backup in all users.
+ */
+ public void setBackupServiceActive(int userId, boolean makeActive) {
+ int caller = binderGetCallingUid();
+ if (caller != Process.SYSTEM_UID && caller != Process.ROOT_UID) {
throw new SecurityException("No permission to configure backup activity");
}
if (mGlobalDisable) {
- Slog.i(TAG, "Backup/restore not supported");
+ Slog.i(TAG, "Backup service not supported");
return;
}
- // TODO: http://b/22388012
- if (userHandle == UserHandle.USER_SYSTEM) {
- synchronized (this) {
- if (makeActive != isBackupServiceActive(userHandle)) {
- Slog.i(TAG, "Making backup "
- + (makeActive ? "" : "in") + "active in user " + userHandle);
- if (makeActive) {
- mService = createBackupManagerService();
- mSuppressFile.delete();
- } else {
- mService = null;
- try {
- mSuppressFile.createNewFile();
- } catch (IOException e) {
- Slog.e(TAG, "Unable to persist backup service inactivity");
- }
- }
+
+ if (userId != UserHandle.USER_SYSTEM) {
+ Slog.i(TAG, "Cannot set backup service activity for non-system user: " + userId);
+ return;
+ }
+
+ if (makeActive == isBackupServiceActive(userId)) {
+ Slog.i(TAG, "No change in backup service activity");
+ return;
+ }
+
+ synchronized (mStateLock) {
+ Slog.i(TAG, "Making backup " + (makeActive ? "" : "in") + "active");
+ if (makeActive) {
+ mService = createBackupManagerService();
+ mSuppressFile.delete();
+ } else {
+ mService = null;
+ try {
+ mSuppressFile.createNewFile();
+ } catch (IOException e) {
+ Slog.e(TAG, "Unable to persist backup service inactivity");
}
}
}
@@ -181,14 +214,15 @@
/**
* Querying activity state of backup service. Calling this method before initialize yields
* undefined result.
- * @param userHandle The user in which the activity state of backup service is queried.
+ *
+ * @param userId The user in which the activity state of backup service is queried.
* @return true if the service is active.
*/
@Override
- public boolean isBackupServiceActive(final int userHandle) {
+ public boolean isBackupServiceActive(int userId) {
// TODO: http://b/22388012
- if (userHandle == UserHandle.USER_SYSTEM) {
- synchronized (this) {
+ if (userId == UserHandle.USER_SYSTEM) {
+ synchronized (mStateLock) {
return mService != null;
}
}
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index 38b9647..854c03f 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -1462,6 +1462,10 @@
TimeZone.setDefault(null);
if (timeZoneWasChanged) {
+ // Don't wait for broadcasts to update our midnight alarm
+ mClockReceiver.scheduleDateChangedEvent();
+
+ // And now let everyone else know
Intent intent = new Intent(Intent.ACTION_TIMEZONE_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING
| Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index 5643a6a..54c7d17 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -878,6 +878,7 @@
mStoraged.onUserStarted(userId);
}
mVold.onSecureKeyguardStateChanged(mSecureKeyguardShowing);
+ mStorageManagerInternal.onReset(mVold);
} catch (Exception e) {
Slog.wtf(TAG, e);
}
@@ -3635,6 +3636,10 @@
private final CopyOnWriteArrayList<ExternalStorageMountPolicy> mPolicies =
new CopyOnWriteArrayList<>();
+ @GuardedBy("mResetListeners")
+ private final List<StorageManagerInternal.ResetListener> mResetListeners =
+ new ArrayList<>();
+
@Override
public void addExternalStoragePolicy(ExternalStorageMountPolicy policy) {
// No locking - CopyOnWriteArrayList
@@ -3666,6 +3671,21 @@
return mountMode;
}
+ @Override
+ public void addResetListener(StorageManagerInternal.ResetListener listener) {
+ synchronized (mResetListeners) {
+ mResetListeners.add(listener);
+ }
+ }
+
+ public void onReset(IVold vold) {
+ synchronized (mResetListeners) {
+ for (StorageManagerInternal.ResetListener listener : mResetListeners) {
+ listener.onReset(vold);
+ }
+ }
+ }
+
public boolean hasExternalStorage(int uid, String packageName) {
// No need to check for system uid. This avoids a deadlock between
// PackageManagerService and AppOpsService.
diff --git a/services/usb/java/com/android/server/usb/UsbDebuggingManager.java b/services/core/java/com/android/server/adb/AdbDebuggingManager.java
similarity index 84%
rename from services/usb/java/com/android/server/usb/UsbDebuggingManager.java
rename to services/core/java/com/android/server/adb/AdbDebuggingManager.java
index 3b08505..ccead6c 100644
--- a/services/usb/java/com/android/server/usb/UsbDebuggingManager.java
+++ b/services/core/java/com/android/server/adb/AdbDebuggingManager.java
@@ -10,11 +10,11 @@
* 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 an
+ * See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.server.usb;
+package com.android.server.adb;
import static com.android.internal.util.dump.DumpUtils.writeStringIfNotNull;
@@ -37,7 +37,7 @@
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
-import android.service.usb.UsbDebuggingManagerProto;
+import android.service.adb.AdbDebuggingManagerProto;
import android.util.Base64;
import android.util.Slog;
@@ -53,8 +53,12 @@
import java.security.MessageDigest;
import java.util.Arrays;
-public class UsbDebuggingManager {
- private static final String TAG = "UsbDebuggingManager";
+/**
+ * Provides communication to the Android Debug Bridge daemon to allow, deny, or clear public keysi
+ * that are authorized to connect to the ADB service itself.
+ */
+public class AdbDebuggingManager {
+ private static final String TAG = "AdbDebuggingManager";
private static final boolean DEBUG = false;
private static final String ADBD_SOCKET = "adbd";
@@ -64,22 +68,22 @@
private final Context mContext;
private final Handler mHandler;
- private UsbDebuggingThread mThread;
+ private AdbDebuggingThread mThread;
private boolean mAdbEnabled = false;
private String mFingerprints;
- public UsbDebuggingManager(Context context) {
- mHandler = new UsbDebuggingHandler(FgThread.get().getLooper());
+ public AdbDebuggingManager(Context context) {
+ mHandler = new AdbDebuggingHandler(FgThread.get().getLooper());
mContext = context;
}
- class UsbDebuggingThread extends Thread {
+ class AdbDebuggingThread extends Thread {
private boolean mStopped;
private LocalSocket mSocket;
private OutputStream mOutputStream;
private InputStream mInputStream;
- UsbDebuggingThread() {
+ AdbDebuggingThread() {
super(TAG);
}
@@ -138,7 +142,8 @@
if (buffer[0] == 'P' && buffer[1] == 'K') {
String key = new String(Arrays.copyOfRange(buffer, 2, count));
Slog.d(TAG, "Received public key: " + key);
- Message msg = mHandler.obtainMessage(UsbDebuggingHandler.MESSAGE_ADB_CONFIRM);
+ Message msg = mHandler.obtainMessage(
+ AdbDebuggingHandler.MESSAGE_ADB_CONFIRM);
msg.obj = key;
mHandler.sendMessage(msg);
} else {
@@ -188,8 +193,7 @@
if (!mStopped && mOutputStream != null) {
try {
mOutputStream.write(msg.getBytes());
- }
- catch (IOException ex) {
+ } catch (IOException ex) {
Slog.e(TAG, "Failed to write response:", ex);
}
}
@@ -197,7 +201,7 @@
}
}
- class UsbDebuggingHandler extends Handler {
+ class AdbDebuggingHandler extends Handler {
private static final int MESSAGE_ADB_ENABLED = 1;
private static final int MESSAGE_ADB_DISABLED = 2;
private static final int MESSAGE_ADB_ALLOW = 3;
@@ -205,26 +209,28 @@
private static final int MESSAGE_ADB_CONFIRM = 5;
private static final int MESSAGE_ADB_CLEAR = 6;
- public UsbDebuggingHandler(Looper looper) {
+ AdbDebuggingHandler(Looper looper) {
super(looper);
}
public void handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_ADB_ENABLED:
- if (mAdbEnabled)
+ if (mAdbEnabled) {
break;
+ }
mAdbEnabled = true;
- mThread = new UsbDebuggingThread();
+ mThread = new AdbDebuggingThread();
mThread.start();
break;
case MESSAGE_ADB_DISABLED:
- if (!mAdbEnabled)
+ if (!mAdbEnabled) {
break;
+ }
mAdbEnabled = false;
@@ -236,7 +242,7 @@
break;
case MESSAGE_ADB_ALLOW: {
- String key = (String)msg.obj;
+ String key = (String) msg.obj;
String fingerprints = getFingerprints(key);
if (!fingerprints.equals(mFingerprints)) {
@@ -270,7 +276,7 @@
}
break;
}
- String key = (String)msg.obj;
+ String key = (String) msg.obj;
String fingerprints = getFingerprints(key);
if ("".equals(fingerprints)) {
if (mThread != null) {
@@ -317,8 +323,9 @@
for (int i = 0; i < digest.length; i++) {
sb.append(hex.charAt((digest[i] >> 4) & 0xf));
sb.append(hex.charAt(digest[i] & 0xf));
- if (i < digest.length - 1)
+ if (i < digest.length - 1) {
sb.append(":");
+ }
}
return sb.toString();
}
@@ -413,16 +420,14 @@
if (!keyFile.exists()) {
keyFile.createNewFile();
FileUtils.setPermissions(keyFile.toString(),
- FileUtils.S_IRUSR | FileUtils.S_IWUSR |
- FileUtils.S_IRGRP, -1, -1);
+ FileUtils.S_IRUSR | FileUtils.S_IWUSR | FileUtils.S_IRGRP, -1, -1);
}
FileOutputStream fo = new FileOutputStream(keyFile, true);
fo.write(key.getBytes());
fo.write('\n');
fo.close();
- }
- catch (IOException ex) {
+ } catch (IOException ex) {
Slog.e(TAG, "Error writing key:" + ex);
}
}
@@ -434,24 +439,40 @@
}
}
+ /**
+ * When {@code enabled} is {@code true}, this allows ADB debugging and starts the ADB hanler
+ * thread. When {@code enabled} is {@code false}, this disallows ADB debugging and shuts
+ * down the handler thread.
+ */
public void setAdbEnabled(boolean enabled) {
- mHandler.sendEmptyMessage(enabled ? UsbDebuggingHandler.MESSAGE_ADB_ENABLED
- : UsbDebuggingHandler.MESSAGE_ADB_DISABLED);
+ mHandler.sendEmptyMessage(enabled ? AdbDebuggingHandler.MESSAGE_ADB_ENABLED
+ : AdbDebuggingHandler.MESSAGE_ADB_DISABLED);
}
- public void allowUsbDebugging(boolean alwaysAllow, String publicKey) {
- Message msg = mHandler.obtainMessage(UsbDebuggingHandler.MESSAGE_ADB_ALLOW);
+ /**
+ * Allows the debugging from the endpoint identified by {@code publicKey} either once or
+ * always if {@code alwaysAllow} is {@code true}.
+ */
+ public void allowDebugging(boolean alwaysAllow, String publicKey) {
+ Message msg = mHandler.obtainMessage(AdbDebuggingHandler.MESSAGE_ADB_ALLOW);
msg.arg1 = alwaysAllow ? 1 : 0;
msg.obj = publicKey;
mHandler.sendMessage(msg);
}
- public void denyUsbDebugging() {
- mHandler.sendEmptyMessage(UsbDebuggingHandler.MESSAGE_ADB_DENY);
+ /**
+ * Denies debugging connection from the device that last requested to connect.
+ */
+ public void denyDebugging() {
+ mHandler.sendEmptyMessage(AdbDebuggingHandler.MESSAGE_ADB_DENY);
}
- public void clearUsbDebuggingKeys() {
- mHandler.sendEmptyMessage(UsbDebuggingHandler.MESSAGE_ADB_CLEAR);
+ /**
+ * Clears all previously accepted ADB debugging public keys. Any subsequent request will need
+ * to pass through {@link #allowUsbDebugging(boolean, String)} again.
+ */
+ public void clearDebuggingKeys() {
+ mHandler.sendEmptyMessage(AdbDebuggingHandler.MESSAGE_ADB_CLEAR);
}
/**
@@ -460,19 +481,19 @@
public void dump(DualDumpOutputStream dump, String idName, long id) {
long token = dump.start(idName, id);
- dump.write("connected_to_adb", UsbDebuggingManagerProto.CONNECTED_TO_ADB, mThread != null);
- writeStringIfNotNull(dump, "last_key_received", UsbDebuggingManagerProto.LAST_KEY_RECEIVED,
+ dump.write("connected_to_adb", AdbDebuggingManagerProto.CONNECTED_TO_ADB, mThread != null);
+ writeStringIfNotNull(dump, "last_key_received", AdbDebuggingManagerProto.LAST_KEY_RECEVIED,
mFingerprints);
try {
- dump.write("user_keys", UsbDebuggingManagerProto.USER_KEYS,
+ dump.write("user_keys", AdbDebuggingManagerProto.USER_KEYS,
FileUtils.readTextFile(new File("/data/misc/adb/adb_keys"), 0, null));
} catch (IOException e) {
Slog.e(TAG, "Cannot read user keys", e);
}
try {
- dump.write("system_keys", UsbDebuggingManagerProto.SYSTEM_KEYS,
+ dump.write("system_keys", AdbDebuggingManagerProto.SYSTEM_KEYS,
FileUtils.readTextFile(new File("/adb_keys"), 0, null));
} catch (IOException e) {
Slog.e(TAG, "Cannot read system keys", e);
diff --git a/services/core/java/com/android/server/adb/AdbService.java b/services/core/java/com/android/server/adb/AdbService.java
new file mode 100644
index 0000000..e5ab8fc
--- /dev/null
+++ b/services/core/java/com/android/server/adb/AdbService.java
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server.adb;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.debug.AdbManagerInternal;
+import android.debug.IAdbManager;
+import android.debug.IAdbTransport;
+import android.hardware.usb.UsbManager;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.provider.Settings;
+import android.service.adb.AdbServiceDumpProto;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.Slog;
+import android.util.proto.ProtoOutputStream;
+
+
+import com.android.internal.util.DumpUtils;
+import com.android.internal.util.IndentingPrintWriter;
+import com.android.internal.util.dump.DualDumpOutputStream;
+import com.android.server.FgThread;
+import com.android.server.LocalServices;
+import com.android.server.SystemService;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.Collections;
+
+/**
+ * The Android Debug Bridge (ADB) service. This controls the availability of ADB and authorization
+ * of devices allowed to connect to ADB.
+ */
+public class AdbService extends IAdbManager.Stub {
+ /**
+ * Manages the service lifecycle for {@code AdbService} in {@code SystemServer}.
+ */
+ public static class Lifecycle extends SystemService {
+ private AdbService mAdbService;
+
+ public Lifecycle(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void onStart() {
+ mAdbService = new AdbService(getContext());
+ publishBinderService(Context.ADB_SERVICE, mAdbService);
+ }
+
+ @Override
+ public void onBootPhase(int phase) {
+ if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
+ mAdbService.systemReady();
+ } else if (phase == SystemService.PHASE_BOOT_COMPLETED) {
+ mAdbService.bootCompleted();
+ }
+ }
+ }
+
+ private class AdbManagerInternalImpl extends AdbManagerInternal {
+ @Override
+ public void registerTransport(IAdbTransport transport) {
+ mTransports.put(transport.asBinder(), transport);
+ }
+
+ @Override
+ public void unregisterTransport(IAdbTransport transport) {
+ mTransports.remove(transport.asBinder());
+ }
+
+ @Override
+ public boolean isAdbEnabled() {
+ return mAdbEnabled;
+ }
+ }
+
+ private final class AdbHandler extends Handler {
+ AdbHandler(Looper looper) {
+ super(looper);
+ try {
+ /*
+ * Use the normal bootmode persistent prop to maintain state of adb across
+ * all boot modes.
+ */
+ mAdbEnabled = containsFunction(
+ SystemProperties.get(USB_PERSISTENT_CONFIG_PROPERTY, ""),
+ UsbManager.USB_FUNCTION_ADB);
+
+ // register observer to listen for settings changes
+ mContentResolver.registerContentObserver(
+ Settings.Global.getUriFor(Settings.Global.ADB_ENABLED),
+ false, new AdbSettingsObserver());
+ } catch (Exception e) {
+ Slog.e(TAG, "Error initializing AdbHandler", e);
+ }
+ }
+
+ private boolean containsFunction(String functions, String function) {
+ int index = functions.indexOf(function);
+ if (index < 0) return false;
+ if (index > 0 && functions.charAt(index - 1) != ',') return false;
+ int charAfter = index + function.length();
+ if (charAfter < functions.length() && functions.charAt(charAfter) != ',') return false;
+ return true;
+ }
+
+ public void sendMessage(int what, boolean arg) {
+ removeMessages(what);
+ Message m = Message.obtain(this, what);
+ m.arg1 = (arg ? 1 : 0);
+ sendMessage(m);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_ENABLE_ADB:
+ setAdbEnabled(msg.arg1 == 1);
+ break;
+ case MSG_BOOT_COMPLETED:
+ if (mDebuggingManager != null) {
+ mDebuggingManager.setAdbEnabled(mAdbEnabled);
+ }
+ break;
+ }
+ }
+ }
+
+ private class AdbSettingsObserver extends ContentObserver {
+ AdbSettingsObserver() {
+ super(null);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ boolean enable = (Settings.Global.getInt(mContentResolver,
+ Settings.Global.ADB_ENABLED, 0) > 0);
+ mHandler.sendMessage(MSG_ENABLE_ADB, enable);
+ }
+ }
+
+ private static final String TAG = "AdbService";
+ private static final boolean DEBUG = false;
+
+ private static final int MSG_ENABLE_ADB = 1;
+ private static final int MSG_BOOT_COMPLETED = 2;
+
+ /**
+ * The persistent property which stores whether adb is enabled or not.
+ * May also contain vendor-specific default functions for testing purposes.
+ */
+ private static final String USB_PERSISTENT_CONFIG_PROPERTY = "persist.sys.usb.config";
+
+ private final Context mContext;
+ private final ContentResolver mContentResolver;
+ private final AdbService.AdbHandler mHandler;
+ private final ArrayMap<IBinder, IAdbTransport> mTransports = new ArrayMap<>();
+
+ private boolean mAdbEnabled;
+ private AdbDebuggingManager mDebuggingManager;
+
+ private AdbService(Context context) {
+ mContext = context;
+ mContentResolver = context.getContentResolver();
+
+ boolean secureAdbEnabled = SystemProperties.getBoolean("ro.adb.secure", false);
+ boolean dataEncrypted = "1".equals(SystemProperties.get("vold.decrypt"));
+ if (secureAdbEnabled && !dataEncrypted) {
+ mDebuggingManager = new AdbDebuggingManager(context);
+ }
+
+ mHandler = new AdbHandler(FgThread.get().getLooper());
+
+ LocalServices.addService(AdbManagerInternal.class, new AdbManagerInternalImpl());
+ }
+
+ /**
+ * Called in response to {@code SystemService.PHASE_ACTIVITY_MANAGER_READY} from {@code
+ * SystemServer}.
+ */
+ public void systemReady() {
+ if (DEBUG) Slog.d(TAG, "systemReady");
+
+ // make sure the ADB_ENABLED setting value matches the current state
+ try {
+ Settings.Global.putInt(mContentResolver,
+ Settings.Global.ADB_ENABLED, mAdbEnabled ? 1 : 0);
+ } catch (SecurityException e) {
+ // If UserManager.DISALLOW_DEBUGGING_FEATURES is on, that this setting can't be changed.
+ Slog.d(TAG, "ADB_ENABLED is restricted.");
+ }
+ }
+
+ /**
+ * Callend in response to {@code SystemService.PHASE_BOOT_COMPLETED} from {@code SystemServer}.
+ */
+ public void bootCompleted() {
+ if (DEBUG) Slog.d(TAG, "boot completed");
+ mHandler.sendEmptyMessage(MSG_BOOT_COMPLETED);
+ }
+
+ @Override
+ public void allowDebugging(boolean alwaysAllow, String publicKey) {
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+ if (mDebuggingManager != null) {
+ mDebuggingManager.allowDebugging(alwaysAllow, publicKey);
+ }
+ }
+
+ @Override
+ public void denyDebugging() {
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+ if (mDebuggingManager != null) {
+ mDebuggingManager.denyDebugging();
+ }
+ }
+
+ @Override
+ public void clearDebuggingKeys() {
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+ if (mDebuggingManager != null) {
+ mDebuggingManager.clearDebuggingKeys();
+ } else {
+ throw new RuntimeException("Cannot clear ADB debugging keys, "
+ + "AdbDebuggingManager not enabled");
+ }
+ }
+
+ private void setAdbEnabled(boolean enable) {
+ if (DEBUG) Slog.d(TAG, "setAdbEnabled(" + enable + "), mAdbEnabled=" + mAdbEnabled);
+
+ if (enable == mAdbEnabled) {
+ return;
+ }
+ mAdbEnabled = enable;
+
+ for (IAdbTransport transport : mTransports.values()) {
+ try {
+ transport.onAdbEnabled(enable);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Unable to send onAdbEnabled to transport " + transport.toString());
+ }
+ }
+
+ if (mDebuggingManager != null) {
+ mDebuggingManager.setAdbEnabled(enable);
+ }
+ }
+
+ @Override
+ public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
+ if (!DumpUtils.checkDumpPermission(mContext, TAG, writer)) return;
+
+ final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ ArraySet<String> argsSet = new ArraySet<>();
+ Collections.addAll(argsSet, args);
+
+ boolean dumpAsProto = false;
+ if (argsSet.contains("--proto")) {
+ dumpAsProto = true;
+ }
+
+ if (argsSet.size() == 0 || argsSet.contains("-a") || dumpAsProto) {
+ DualDumpOutputStream dump;
+ if (dumpAsProto) {
+ dump = new DualDumpOutputStream(new ProtoOutputStream(fd));
+ } else {
+ pw.println("ADB MANAGER STATE (dumpsys adb):");
+
+ dump = new DualDumpOutputStream(new IndentingPrintWriter(pw, " "));
+ }
+
+ if (mDebuggingManager != null) {
+ mDebuggingManager.dump(dump, "debugging_manager",
+ AdbServiceDumpProto.DEBUGGING_MANAGER);
+ }
+
+ dump.flush();
+ } else {
+ pw.println("Dump current ADB state");
+ pw.println(" No commands available");
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index b06320a..4d6fa29 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -6509,6 +6509,7 @@
// Wait for the provider to be published...
final long timeout = SystemClock.uptimeMillis() + CONTENT_PROVIDER_WAIT_TIMEOUT;
+ boolean timedOut = false;
synchronized (cpr) {
while (cpr.provider == null) {
if (cpr.launchingApp == null) {
@@ -6532,12 +6533,8 @@
}
cpr.wait(wait);
if (cpr.provider == null) {
- Slog.wtf(TAG, "Timeout waiting for provider "
- + cpi.applicationInfo.packageName + "/"
- + cpi.applicationInfo.uid + " for provider "
- + name
- + " providerRunning=" + providerRunning);
- return null;
+ timedOut = true;
+ break;
}
} catch (InterruptedException ex) {
} finally {
@@ -6547,7 +6544,26 @@
}
}
}
- return cpr != null ? cpr.newHolder(conn) : null;
+ if (timedOut) {
+ // Note we do it afer releasing the lock.
+ String callerName = "unknown";
+ synchronized (this) {
+ final ProcessRecord record = mProcessList.getLRURecordForAppLocked(caller);
+ if (record != null) {
+ callerName = record.processName;
+ }
+ }
+
+ Slog.wtf(TAG, "Timeout waiting for provider "
+ + cpi.applicationInfo.packageName + "/"
+ + cpi.applicationInfo.uid + " for provider "
+ + name
+ + " providerRunning=" + providerRunning
+ + " caller=" + callerName + "/" + Binder.getCallingUid());
+ return null;
+ }
+
+ return cpr.newHolder(conn);
}
private static final class StartActivityRunnable implements Runnable {
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index 865c774..47b4f47 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -18,16 +18,7 @@
import static android.app.ActivityManager.LOCK_TASK_MODE_NONE;
import static android.app.ActivityManager.TaskDescription.ATTR_TASKDESCRIPTION_PREFIX;
-import static android.app.ActivityOptions.ANIM_CLIP_REVEAL;
-import static android.app.ActivityOptions.ANIM_CUSTOM;
-import static android.app.ActivityOptions.ANIM_OPEN_CROSS_PROFILE_APPS;
-import static android.app.ActivityOptions.ANIM_REMOTE_ANIMATION;
-import static android.app.ActivityOptions.ANIM_SCALE_UP;
import static android.app.ActivityOptions.ANIM_SCENE_TRANSITION;
-import static android.app.ActivityOptions.ANIM_THUMBNAIL_ASPECT_SCALE_DOWN;
-import static android.app.ActivityOptions.ANIM_THUMBNAIL_ASPECT_SCALE_UP;
-import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN;
-import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_UP;
import static android.app.ActivityTaskManager.INVALID_STACK_ID;
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE;
@@ -156,7 +147,6 @@
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
-import android.graphics.GraphicBuffer;
import android.graphics.Rect;
import android.os.Binder;
import android.os.Build;
@@ -177,8 +167,6 @@
import android.util.Slog;
import android.util.TimeUtils;
import android.util.proto.ProtoOutputStream;
-import android.view.AppTransitionAnimationSpec;
-import android.view.IAppTransitionAnimationSpecsFuture;
import android.view.IApplicationToken;
import android.view.RemoteAnimationDefinition;
import android.view.WindowManager.LayoutParams;
@@ -1502,93 +1490,7 @@
void applyOptionsLocked() {
if (pendingOptions != null
&& pendingOptions.getAnimationType() != ANIM_SCENE_TRANSITION) {
- final int animationType = pendingOptions.getAnimationType();
- switch (animationType) {
- case ANIM_CUSTOM:
- service.mWindowManager.overridePendingAppTransition(
- pendingOptions.getPackageName(),
- pendingOptions.getCustomEnterResId(),
- pendingOptions.getCustomExitResId(),
- pendingOptions.getOnAnimationStartListener());
- break;
- case ANIM_CLIP_REVEAL:
- service.mWindowManager.overridePendingAppTransitionClipReveal(
- pendingOptions.getStartX(), pendingOptions.getStartY(),
- pendingOptions.getWidth(), pendingOptions.getHeight());
- if (intent.getSourceBounds() == null) {
- intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
- pendingOptions.getStartY(),
- pendingOptions.getStartX()+pendingOptions.getWidth(),
- pendingOptions.getStartY()+pendingOptions.getHeight()));
- }
- break;
- case ANIM_SCALE_UP:
- service.mWindowManager.overridePendingAppTransitionScaleUp(
- pendingOptions.getStartX(), pendingOptions.getStartY(),
- pendingOptions.getWidth(), pendingOptions.getHeight());
- if (intent.getSourceBounds() == null) {
- intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
- pendingOptions.getStartY(),
- pendingOptions.getStartX()+pendingOptions.getWidth(),
- pendingOptions.getStartY()+pendingOptions.getHeight()));
- }
- break;
- case ANIM_THUMBNAIL_SCALE_UP:
- case ANIM_THUMBNAIL_SCALE_DOWN:
- final boolean scaleUp = (animationType == ANIM_THUMBNAIL_SCALE_UP);
- final GraphicBuffer buffer = pendingOptions.getThumbnail();
- service.mWindowManager.overridePendingAppTransitionThumb(buffer,
- pendingOptions.getStartX(), pendingOptions.getStartY(),
- pendingOptions.getOnAnimationStartListener(),
- scaleUp);
- if (intent.getSourceBounds() == null && buffer != null) {
- intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
- pendingOptions.getStartY(),
- pendingOptions.getStartX() + buffer.getWidth(),
- pendingOptions.getStartY() + buffer.getHeight()));
- }
- break;
- case ANIM_THUMBNAIL_ASPECT_SCALE_UP:
- case ANIM_THUMBNAIL_ASPECT_SCALE_DOWN:
- final AppTransitionAnimationSpec[] specs = pendingOptions.getAnimSpecs();
- final IAppTransitionAnimationSpecsFuture specsFuture =
- pendingOptions.getSpecsFuture();
- if (specsFuture != null) {
- service.mWindowManager.overridePendingAppTransitionMultiThumbFuture(
- specsFuture, pendingOptions.getOnAnimationStartListener(),
- animationType == ANIM_THUMBNAIL_ASPECT_SCALE_UP);
- } else if (animationType == ANIM_THUMBNAIL_ASPECT_SCALE_DOWN
- && specs != null) {
- service.mWindowManager.overridePendingAppTransitionMultiThumb(
- specs, pendingOptions.getOnAnimationStartListener(),
- pendingOptions.getAnimationFinishedListener(), false);
- } else {
- service.mWindowManager.overridePendingAppTransitionAspectScaledThumb(
- pendingOptions.getThumbnail(),
- pendingOptions.getStartX(), pendingOptions.getStartY(),
- pendingOptions.getWidth(), pendingOptions.getHeight(),
- pendingOptions.getOnAnimationStartListener(),
- (animationType == ANIM_THUMBNAIL_ASPECT_SCALE_UP));
- if (intent.getSourceBounds() == null) {
- intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
- pendingOptions.getStartY(),
- pendingOptions.getStartX() + pendingOptions.getWidth(),
- pendingOptions.getStartY() + pendingOptions.getHeight()));
- }
- }
- break;
- case ANIM_OPEN_CROSS_PROFILE_APPS:
- service.mWindowManager.overridePendingAppTransitionStartCrossProfileApps();
- break;
- case ANIM_REMOTE_ANIMATION:
- service.mWindowManager.overridePendingAppTransitionRemote(
- pendingOptions.getRemoteAnimationAdapter());
- break;
- default:
- Slog.e(TAG, "applyOptionsLocked: Unknown animationType=" + animationType);
- break;
- }
-
+ mWindowContainerController.applyOptionsLocked(pendingOptions, intent);
if (task == null) {
clearOptionsLocked(false /* withAbort */);
} else {
@@ -2768,7 +2670,8 @@
preserveWindow);
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
- lifecycleItem = ResumeActivityItem.obtain(service.isNextTransitionForward());
+ lifecycleItem = ResumeActivityItem.obtain(
+ getDisplay().getWindowContainerController().isNextTransitionForward());
} else {
lifecycleItem = PauseActivityItem.obtain();
}
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 9492694..d646e9a 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -156,6 +156,7 @@
import com.android.server.Watchdog;
import com.android.server.am.ActivityManagerService.ItemMatcher;
import com.android.server.wm.ConfigurationContainer;
+import com.android.server.wm.DisplayWindowController;
import com.android.server.wm.StackWindowController;
import com.android.server.wm.StackWindowListener;
import com.android.server.wm.WindowManagerService;
@@ -2618,17 +2619,18 @@
// that the previous one will be hidden soon. This way it can know
// to ignore it when computing the desired screen orientation.
boolean anim = true;
+ final DisplayWindowController dwc = getDisplay().getWindowContainerController();
if (prev != null) {
if (prev.finishing) {
if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION,
"Prepare close transition: prev=" + prev);
if (mStackSupervisor.mNoAnimActivities.contains(prev)) {
anim = false;
- mWindowManager.prepareAppTransition(TRANSIT_NONE, false);
+ dwc.prepareAppTransition(TRANSIT_NONE, false);
} else {
- mWindowManager.prepareAppTransition(prev.getTask() == next.getTask()
- ? TRANSIT_ACTIVITY_CLOSE
- : TRANSIT_TASK_CLOSE, false);
+ dwc.prepareAppTransition(
+ prev.getTask() == next.getTask() ? TRANSIT_ACTIVITY_CLOSE
+ : TRANSIT_TASK_CLOSE, false);
}
prev.setVisibility(false);
} else {
@@ -2636,22 +2638,21 @@
"Prepare open transition: prev=" + prev);
if (mStackSupervisor.mNoAnimActivities.contains(next)) {
anim = false;
- mWindowManager.prepareAppTransition(TRANSIT_NONE, false);
+ dwc.prepareAppTransition(TRANSIT_NONE, false);
} else {
- mWindowManager.prepareAppTransition(prev.getTask() == next.getTask()
- ? TRANSIT_ACTIVITY_OPEN
- : next.mLaunchTaskBehind
- ? TRANSIT_TASK_OPEN_BEHIND
- : TRANSIT_TASK_OPEN, false);
+ dwc.prepareAppTransition(
+ prev.getTask() == next.getTask() ? TRANSIT_ACTIVITY_OPEN
+ : next.mLaunchTaskBehind ? TRANSIT_TASK_OPEN_BEHIND
+ : TRANSIT_TASK_OPEN, false);
}
}
} else {
if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare open transition: no previous");
if (mStackSupervisor.mNoAnimActivities.contains(next)) {
anim = false;
- mWindowManager.prepareAppTransition(TRANSIT_NONE, false);
+ dwc.prepareAppTransition(TRANSIT_NONE, false);
} else {
- mWindowManager.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false);
+ dwc.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false);
}
}
@@ -2780,7 +2781,8 @@
next.clearOptionsLocked();
transaction.setLifecycleStateRequest(
ResumeActivityItem.obtain(next.app.getReportedProcState(),
- mService.isNextTransitionForward()));
+ getDisplay().getWindowContainerController()
+ .isNextTransitionForward()));
mService.getLifecycleManager().scheduleTransaction(transaction);
if (DEBUG_STATES) Slog.d(TAG_STATES, "resumeTopActivityLocked: Resumed "
@@ -2986,10 +2988,11 @@
task.setFrontOfTask();
if (!isHomeOrRecentsStack() || numActivities() > 0) {
+ final DisplayWindowController dwc = getDisplay().getWindowContainerController();
if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION,
"Prepare open transition: starting " + r);
if ((r.intent.getFlags() & Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) {
- mWindowManager.prepareAppTransition(TRANSIT_NONE, keepCurTransition);
+ dwc.prepareAppTransition(TRANSIT_NONE, keepCurTransition);
mStackSupervisor.mNoAnimActivities.add(r);
} else {
int transit = TRANSIT_ACTIVITY_OPEN;
@@ -3008,7 +3011,7 @@
transit = TRANSIT_TASK_OPEN;
}
}
- mWindowManager.prepareAppTransition(transit, keepCurTransition);
+ dwc.prepareAppTransition(transit, keepCurTransition);
mStackSupervisor.mNoAnimActivities.remove(r);
}
boolean doShow = true;
@@ -3637,8 +3640,8 @@
int taskNdx = mTaskHistory.indexOf(finishedTask);
final TaskRecord task = finishedTask;
int activityNdx = task.mActivities.indexOf(r);
- mWindowManager.prepareAppTransition(TRANSIT_CRASHING_ACTIVITY_CLOSE,
- false /* alwaysKeepCurrent */);
+ getDisplay().getWindowContainerController().prepareAppTransition(
+ TRANSIT_CRASHING_ACTIVITY_CLOSE, false /* alwaysKeepCurrent */);
finishActivityLocked(r, Activity.RESULT_CANCELED, null, reason, false);
finishedTask = task;
// Also terminate any activities below it that aren't yet
@@ -3803,7 +3806,7 @@
mService.getTaskChangeNotificationController().notifyTaskRemovalStarted(
task.taskId);
}
- mWindowManager.prepareAppTransition(transit, false);
+ getDisplay().getWindowContainerController().prepareAppTransition(transit, false);
// Tell window manager to prepare for this one to be removed.
r.setVisibility(false);
@@ -3858,9 +3861,10 @@
}
private void prepareActivityHideTransitionAnimation(ActivityRecord r, int transit) {
- mWindowManager.prepareAppTransition(transit, false);
+ final DisplayWindowController dwc = getDisplay().getWindowContainerController();
+ dwc.prepareAppTransition(transit, false);
r.setVisibility(false);
- mWindowManager.executeAppTransition();
+ dwc.executeAppTransition();
if (!mStackSupervisor.mActivitiesWaitingForVisibleActivity.contains(r)) {
mStackSupervisor.mActivitiesWaitingForVisibleActivity.add(r);
}
@@ -4604,7 +4608,7 @@
ActivityOptions.abort(options);
}
}
- mWindowManager.prepareAppTransition(transit, false);
+ getDisplay().getWindowContainerController().prepareAppTransition(transit, false);
}
private void updateTaskMovement(TaskRecord task, boolean toFront) {
@@ -4673,7 +4677,8 @@
if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare to front transition: task=" + tr);
if (noAnimation) {
- mWindowManager.prepareAppTransition(TRANSIT_NONE, false);
+ getDisplay().getWindowContainerController().prepareAppTransition(
+ TRANSIT_NONE, false);
if (r != null) {
mStackSupervisor.mNoAnimActivities.add(r);
}
@@ -4755,7 +4760,8 @@
mTaskHistory.add(0, tr);
updateTaskMovement(tr, false);
- mWindowManager.prepareAppTransition(TRANSIT_TASK_TO_BACK, false);
+ getDisplay().getWindowContainerController().prepareAppTransition(
+ TRANSIT_TASK_TO_BACK, false);
moveToBack("moveTaskToBackLocked", tr);
if (inPinnedWindowingMode()) {
@@ -5079,8 +5085,8 @@
+ r.intent.getComponent().flattenToShortString());
// Force the destroy to skip right to removal.
r.app = null;
- mWindowManager.prepareAppTransition(TRANSIT_CRASHING_ACTIVITY_CLOSE,
- false /* alwaysKeepCurrent */);
+ getDisplay().getWindowContainerController().prepareAppTransition(
+ TRANSIT_CRASHING_ACTIVITY_CLOSE, false /* alwaysKeepCurrent */);
finishCurrentActivityLocked(r, FINISH_IMMEDIATELY, false,
"handleAppCrashedLocked");
}
@@ -5412,7 +5418,7 @@
}
void executeAppTransition(ActivityOptions options) {
- mWindowManager.executeAppTransition();
+ getDisplay().getWindowContainerController().executeAppTransition();
ActivityOptions.abort(options);
}
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 87226bf..695fac2 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -1090,6 +1090,13 @@
return foundResumed;
}
+ private void executeAppTransitionForAllDisplay() {
+ for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
+ final ActivityDisplay display = mActivityDisplays.get(displayNdx);
+ display.getWindowContainerController().executeAppTransition();
+ }
+ }
+
/**
* Pause all activities in either all of the stacks or just the back stacks.
* @param userLeaving Passed to pauseActivity() to indicate whether to call onUserLeaving().
@@ -1439,6 +1446,8 @@
// Create activity launch transaction.
final ClientTransaction clientTransaction = ClientTransaction.obtain(
proc.getThread(), r.appToken);
+
+ final DisplayWindowController dwc = r.getDisplay().getWindowContainerController();
clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent),
System.identityHashCode(r), r.info,
// TODO: Have this take the merged configuration instead of separate global
@@ -1447,12 +1456,12 @@
mergedConfiguration.getOverrideConfiguration(), r.compat,
r.launchedFromPackage, task.voiceInteractor, proc.getReportedProcState(),
r.icicle, r.persistentState, results, newIntents,
- mService.isNextTransitionForward(), profilerInfo));
+ dwc.isNextTransitionForward(), profilerInfo));
// Set desired final state.
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
- lifecycleItem = ResumeActivityItem.obtain(mService.isNextTransitionForward());
+ lifecycleItem = ResumeActivityItem.obtain(dwc.isNextTransitionForward());
} else {
lifecycleItem = PauseActivityItem.obtain();
}
@@ -3540,7 +3549,9 @@
}
if (stack.getDisplay().allResumedActivitiesComplete()) {
ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
- mWindowManager.executeAppTransition();
+ // Make sure activity & window visibility should be identical
+ // for all displays in this stage.
+ executeAppTransitionForAllDisplay();
return true;
}
return false;
@@ -4708,6 +4719,7 @@
// not run into issues where we still need to draw the task in recents but the
// docked stack is already created.
deferUpdateRecentsHomeStackBounds();
+ // TODO(multi-display): currently recents animation only support default display.
mWindowManager.prepareAppTransition(TRANSIT_DOCK_TASK_FROM_RECENTS, false);
}
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index fa227a2..37ddaf9 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -1502,7 +1502,7 @@
mTargetStack.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
// Go ahead and tell window manager to execute app transition for this activity
// since the app transition will not be triggered through the resume channel.
- mService.mWindowManager.executeAppTransition();
+ mTargetStack.getDisplay().getWindowContainerController().executeAppTransition();
} else {
// If the target stack was not previously focusable (previous top running activity
// on that stack was not visible) then any prior calls to move the stack to the
diff --git a/services/core/java/com/android/server/am/ActivityTaskManagerService.java b/services/core/java/com/android/server/am/ActivityTaskManagerService.java
index 5e3c1da..9ddd58b 100644
--- a/services/core/java/com/android/server/am/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityTaskManagerService.java
@@ -65,11 +65,8 @@
import static android.service.voice.VoiceInteractionSession.SHOW_SOURCE_APPLICATION;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.INVALID_DISPLAY;
-import static android.view.WindowManager.TRANSIT_ACTIVITY_OPEN;
import static android.view.WindowManager.TRANSIT_NONE;
import static android.view.WindowManager.TRANSIT_TASK_IN_PLACE;
-import static android.view.WindowManager.TRANSIT_TASK_OPEN;
-import static android.view.WindowManager.TRANSIT_TASK_TO_FRONT;
import static com.android.server.am.ActivityManagerService.ANR_TRACE_DIR;
import static com.android.server.am.ActivityManagerService.MY_PID;
@@ -256,6 +253,7 @@
import com.android.server.uri.UriGrantsManagerInternal;
import com.android.server.vr.VrManagerInternal;
import com.android.server.wm.ActivityTaskManagerInternal;
+import com.android.server.wm.DisplayWindowController;
import com.android.server.wm.PinnedStackWindowController;
import com.android.server.wm.WindowManagerService;
@@ -1619,8 +1617,8 @@
if (self.isState(
ActivityStack.ActivityState.RESUMED, ActivityStack.ActivityState.PAUSING)) {
- mWindowManager.overridePendingAppTransition(packageName,
- enterAnim, exitAnim, null);
+ self.getDisplay().getWindowContainerController().overridePendingAppTransition(
+ packageName, enterAnim, exitAnim, null);
}
Binder.restoreCallingIdentity(origId);
@@ -1808,7 +1806,8 @@
final long callingId = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
- final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId);
+ final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId,
+ MATCH_TASK_IN_STACKS_ONLY);
if (task == null) {
return;
}
@@ -1968,7 +1967,8 @@
synchronized (mGlobalLock) {
final long ident = Binder.clearCallingIdentity();
try {
- final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId);
+ final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId,
+ MATCH_TASK_IN_STACKS_ONLY);
if (task == null) {
Slog.w(TAG, "setTaskWindowingMode: No task for id=" + taskId);
return;
@@ -2299,7 +2299,8 @@
synchronized (mGlobalLock) {
final long ident = Binder.clearCallingIdentity();
try {
- final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId);
+ final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId,
+ MATCH_TASK_IN_STACKS_ONLY);
if (task == null) {
Slog.w(TAG, "setTaskWindowingModeSplitScreenPrimary: No task for id=" + taskId);
return false;
@@ -2434,13 +2435,17 @@
}
@Override
- public void startSystemLockTaskMode(int taskId) throws RemoteException {
+ public void startSystemLockTaskMode(int taskId) {
mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "startSystemLockTaskMode");
// This makes inner call to look as if it was initiated by system.
long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
- final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId);
+ final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId,
+ MATCH_TASK_IN_STACKS_ONLY);
+ if (task == null) {
+ return;
+ }
// When starting lock task mode the stack must be in front and focused
task.getStack().moveToFront("startSystemLockTaskMode");
@@ -2798,7 +2803,8 @@
long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
- TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId);
+ final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId,
+ MATCH_TASK_IN_STACKS_ONLY);
if (task == null) {
Slog.w(TAG, "resizeTask: taskId=" + taskId + " not found");
return;
@@ -2938,10 +2944,16 @@
throw new IllegalArgumentException("Expected in-place ActivityOption " +
"with valid animation");
}
- mWindowManager.prepareAppTransition(TRANSIT_TASK_IN_PLACE, false);
- mWindowManager.overridePendingAppTransitionInPlace(activityOptions.getPackageName(),
- activityOptions.getCustomInPlaceResId());
- mWindowManager.executeAppTransition();
+ // Get top display of front most application.
+ final ActivityStack focusedStack = getTopDisplayFocusedStack();
+ if (focusedStack != null) {
+ final DisplayWindowController dwc =
+ focusedStack.getDisplay().getWindowContainerController();
+ dwc.prepareAppTransition(TRANSIT_TASK_IN_PLACE, false);
+ dwc.overridePendingAppTransitionInPlace(activityOptions.getPackageName(),
+ activityOptions.getCustomInPlaceResId());
+ dwc.executeAppTransition();
+ }
}
@Override
@@ -4381,13 +4393,6 @@
return mKeyguardController.isKeyguardLocked();
}
- boolean isNextTransitionForward() {
- int transit = mWindowManager.getPendingAppTransition();
- return transit == TRANSIT_ACTIVITY_OPEN
- || transit == TRANSIT_TASK_OPEN
- || transit == TRANSIT_TASK_TO_FRONT;
- }
-
void dumpLastANRLocked(PrintWriter pw) {
pw.println("ACTIVITY MANAGER LAST ANR (dumpsys activity lastanr)");
if (mLastANRState == null) {
@@ -5639,23 +5644,23 @@
}
@Override
- public void notifyKeyguardFlagsChanged(@Nullable Runnable callback) {
+ public void notifyKeyguardFlagsChanged(@Nullable Runnable callback, int displayId) {
synchronized (mGlobalLock) {
// We might change the visibilities here, so prepare an empty app transition which
// might be overridden later if we actually change visibilities.
- final boolean wasTransitionSet =
- mWindowManager.getPendingAppTransition() != TRANSIT_NONE;
+ final DisplayWindowController dwc = mStackSupervisor.getActivityDisplay(displayId)
+ .getWindowContainerController();
+ final boolean wasTransitionSet = dwc.getPendingAppTransition() != TRANSIT_NONE;
if (!wasTransitionSet) {
- mWindowManager.prepareAppTransition(TRANSIT_NONE,
- false /* alwaysKeepCurrent */);
+ dwc.prepareAppTransition(TRANSIT_NONE, false /* alwaysKeepCurrent */);
}
mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
// If there was a transition set already we don't want to interfere with it as we
// might be starting it too early.
if (!wasTransitionSet) {
- mWindowManager.executeAppTransition();
+ dwc.executeAppTransition();
}
}
if (callback != null) {
diff --git a/services/core/java/com/android/server/am/KeyguardController.java b/services/core/java/com/android/server/am/KeyguardController.java
index 28b2a42..9c41c77 100644
--- a/services/core/java/com/android/server/am/KeyguardController.java
+++ b/services/core/java/com/android/server/am/KeyguardController.java
@@ -48,6 +48,7 @@
import com.android.internal.policy.IKeyguardDismissCallback;
import com.android.server.policy.WindowManagerPolicy;
import com.android.server.wm.ActivityTaskManagerInternal.SleepToken;
+import com.android.server.wm.DisplayWindowController;
import com.android.server.wm.WindowManagerService;
import java.io.PrintWriter;
@@ -160,9 +161,10 @@
mWindowManager.deferSurfaceLayout();
try {
setKeyguardGoingAway(true);
- mWindowManager.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY,
- false /* alwaysKeepCurrent */, convertTransitFlags(flags),
- false /* forceOverride */);
+ mStackSupervisor.getDefaultDisplay().getWindowContainerController()
+ .prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY,
+ false /* alwaysKeepCurrent */, convertTransitFlags(flags),
+ false /* forceOverride */);
updateKeyguardSleepToken();
// Some stack visibility might change (e.g. docked stack)
@@ -285,8 +287,10 @@
if (isKeyguardLocked()) {
mWindowManager.deferSurfaceLayout();
try {
- mWindowManager.prepareAppTransition(resolveOccludeTransit(),
- false /* alwaysKeepCurrent */, 0 /* flags */, true /* forceOverride */);
+ mStackSupervisor.getDefaultDisplay().getWindowContainerController()
+ .prepareAppTransition(resolveOccludeTransit(),
+ false /* alwaysKeepCurrent */, 0 /* flags */,
+ true /* forceOverride */);
updateKeyguardSleepToken();
mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
mWindowManager.executeAppTransition();
@@ -310,10 +314,12 @@
// If we are about to unocclude the Keyguard, but we can dismiss it without security,
// we immediately dismiss the Keyguard so the activity gets shown without a flicker.
+ final DisplayWindowController dwc =
+ mStackSupervisor.getDefaultDisplay().getWindowContainerController();
if (mKeyguardShowing && canDismissKeyguard()
- && mWindowManager.getPendingAppTransition() == TRANSIT_KEYGUARD_UNOCCLUDE) {
- mWindowManager.prepareAppTransition(mBeforeUnoccludeTransit,
- false /* alwaysKeepCurrent */, 0 /* flags */, true /* forceOverride */);
+ && dwc.getPendingAppTransition() == TRANSIT_KEYGUARD_UNOCCLUDE) {
+ dwc.prepareAppTransition(mBeforeUnoccludeTransit, false /* alwaysKeepCurrent */,
+ 0 /* flags */, true /* forceOverride */);
mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
mWindowManager.executeAppTransition();
}
@@ -332,8 +338,10 @@
}
private int resolveOccludeTransit() {
+ final DisplayWindowController dwc =
+ mStackSupervisor.getDefaultDisplay().getWindowContainerController();
if (mBeforeUnoccludeTransit != TRANSIT_UNSET
- && mWindowManager.getPendingAppTransition() == TRANSIT_KEYGUARD_UNOCCLUDE
+ && dwc.getPendingAppTransition() == TRANSIT_KEYGUARD_UNOCCLUDE
// TODO(b/113840485): Handle app transition for individual display.
&& isDisplayOccluded(DEFAULT_DISPLAY)) {
@@ -344,7 +352,7 @@
} else if (!isDisplayOccluded(DEFAULT_DISPLAY)) {
// Save transit in case we dismiss/occlude Keyguard shortly after.
- mBeforeUnoccludeTransit = mWindowManager.getPendingAppTransition();
+ mBeforeUnoccludeTransit = dwc.getPendingAppTransition();
return TRANSIT_KEYGUARD_UNOCCLUDE;
} else {
return TRANSIT_KEYGUARD_OCCLUDE;
diff --git a/services/core/java/com/android/server/am/LockTaskController.java b/services/core/java/com/android/server/am/LockTaskController.java
index d5f2d34..bcebaaa 100644
--- a/services/core/java/com/android/server/am/LockTaskController.java
+++ b/services/core/java/com/android/server/am/LockTaskController.java
@@ -580,7 +580,10 @@
mSupervisor.findTaskToMoveToFront(task, 0, null, reason,
lockTaskModeState != LOCK_TASK_MODE_NONE);
mSupervisor.resumeFocusedStacksTopActivitiesLocked();
- mWindowManager.executeAppTransition();
+ final ActivityStack stack = task.getStack();
+ if (stack != null) {
+ stack.getDisplay().getWindowContainerController().executeAppTransition();
+ }
} else if (lockTaskModeState != LOCK_TASK_MODE_NONE) {
mSupervisor.handleNonResizableTaskIfNeeded(task, WINDOWING_MODE_UNDEFINED,
DEFAULT_DISPLAY, task.getStack(), true /* forceNonResizable */);
diff --git a/services/core/java/com/android/server/am/RecentsAnimation.java b/services/core/java/com/android/server/am/RecentsAnimation.java
index c5586bb..41d488ba 100644
--- a/services/core/java/com/android/server/am/RecentsAnimation.java
+++ b/services/core/java/com/android/server/am/RecentsAnimation.java
@@ -41,6 +41,8 @@
import android.os.Trace;
import android.util.Slog;
import android.view.IRecentsAnimationRunner;
+
+import com.android.server.wm.DisplayWindowController;
import com.android.server.wm.RecentsAnimationController;
import com.android.server.wm.RecentsAnimationController.RecentsAnimationCallbacks;
import com.android.server.wm.WindowManagerService;
@@ -85,10 +87,13 @@
+ " assistDataReceiver=" + assistDataReceiver);
Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "RecentsAnimation#startRecentsActivity");
+ // TODO(multi-display) currently only support recents animation in default display.
+ final DisplayWindowController dwc =
+ mStackSupervisor.getDefaultDisplay().getWindowContainerController();
if (!mWindowManager.canStartRecentsAnimation()) {
notifyAnimationCancelBeforeStart(recentsAnimationRunner);
if (DEBUG) Slog.d(TAG, "Can't start recents animation, nextAppTransition="
- + mWindowManager.getPendingAppTransition());
+ + dwc.getPendingAppTransition());
return;
}
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 5103974..67d27c9 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -4293,7 +4293,7 @@
return false;
}
- NotificationManager.Policy zenPolicy = mNm.getNotificationPolicy();
+ NotificationManager.Policy zenPolicy = mNm.getConsolidatedNotificationPolicy();
final boolean muteAlarms = (zenPolicy.priorityCategories
& NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS) == 0;
final boolean muteMedia = (zenPolicy.priorityCategories
@@ -4301,7 +4301,8 @@
final boolean muteSystem = (zenPolicy.priorityCategories
& NotificationManager.Policy.PRIORITY_CATEGORY_SYSTEM) == 0;
final boolean muteNotificationAndRing = ZenModeConfig
- .areAllPriorityOnlyNotificationZenSoundsMuted(mNm.getNotificationPolicy());
+ .areAllPriorityOnlyNotificationZenSoundsMuted(
+ mNm.getConsolidatedNotificationPolicy());
return muteAlarms && isAlarm(streamType)
|| muteMedia && isMedia(streamType)
|| muteSystem && isSystem(streamType)
@@ -4323,7 +4324,7 @@
private boolean updateZenModeAffectedStreams() {
int zenModeAffectedStreams = 0;
if (mSystemReady && mNm.getZenMode() == Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS) {
- NotificationManager.Policy zenPolicy = mNm.getNotificationPolicy();
+ NotificationManager.Policy zenPolicy = mNm.getConsolidatedNotificationPolicy();
if ((zenPolicy.priorityCategories
& NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS) == 0) {
zenModeAffectedStreams |= 1 << AudioManager.STREAM_ALARM;
diff --git a/services/core/java/com/android/server/location/ContextHubService.java b/services/core/java/com/android/server/location/ContextHubService.java
index 96e9337..e3c2863 100644
--- a/services/core/java/com/android/server/location/ContextHubService.java
+++ b/services/core/java/com/android/server/location/ContextHubService.java
@@ -415,10 +415,12 @@
checkPermissions();
ArrayList<Integer> foundInstances = new ArrayList<>();
- for (NanoAppInstanceInfo info : mNanoAppStateManager.getNanoAppInstanceInfoCollection()) {
- if (filter.testMatch(info)) {
- foundInstances.add(info.getHandle());
- }
+ if (filter != null) {
+ mNanoAppStateManager.foreachNanoAppInstanceInfo((info) -> {
+ if (filter.testMatch(info)) {
+ foundInstances.add(info.getHandle());
+ }
+ });
}
int[] retArray = new int[foundInstances.size()];
@@ -767,9 +769,7 @@
pw.println("");
pw.println("=================== NANOAPPS ====================");
// Dump nanoAppHash
- for (NanoAppInstanceInfo info : mNanoAppStateManager.getNanoAppInstanceInfoCollection()) {
- pw.println(info);
- }
+ mNanoAppStateManager.foreachNanoAppInstanceInfo((info) -> pw.println(info));
// dump eventLog
}
diff --git a/services/core/java/com/android/server/location/NanoAppStateManager.java b/services/core/java/com/android/server/location/NanoAppStateManager.java
index 9869626..e26ccc3 100644
--- a/services/core/java/com/android/server/location/NanoAppStateManager.java
+++ b/services/core/java/com/android/server/location/NanoAppStateManager.java
@@ -21,11 +21,11 @@
import android.hardware.location.NanoAppInstanceInfo;
import android.util.Log;
-import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.function.Consumer;
/**
* Manages the state of loaded nanoapps at the Context Hubs.
@@ -70,11 +70,15 @@
}
/**
- * @return a collection of NanoAppInstanceInfo objects in the cache
+ * Invokes a Consumer operation for each NanoAppInstanceInfo entry in the cache
+ *
+ * @param consumer the Consumer operation to perform
*/
/* package */
- synchronized Collection<NanoAppInstanceInfo> getNanoAppInstanceInfoCollection() {
- return mNanoAppHash.values();
+ synchronized void foreachNanoAppInstanceInfo(Consumer<NanoAppInstanceInfo> consumer) {
+ for (NanoAppInstanceInfo info : mNanoAppHash.values()) {
+ consumer.accept(info);
+ }
}
/**
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 93b83ae..924b075 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -3399,6 +3399,16 @@
}
}
+ @Override
+ public Policy getConsolidatedNotificationPolicy() {
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return mZenModeHelper.getConsolidatedNotificationPolicy();
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
/**
* Sets the notification policy. Apps that target API levels below
* {@link android.os.Build.VERSION_CODES#P} cannot change user-designated values to
@@ -4660,7 +4670,6 @@
}
mRankingHelper.extractSignals(r);
-
// tell the assistant service about the notification
if (mAssistants.isEnabled()) {
mAssistants.onNotificationEnqueued(r);
@@ -5570,7 +5579,7 @@
record.setIntercepted(mZenModeHelper.shouldIntercept(record));
if (record.isIntercepted()) {
record.setSuppressedVisualEffects(
- mZenModeHelper.getNotificationPolicy().suppressedVisualEffects);
+ mZenModeHelper.getConsolidatedNotificationPolicy().suppressedVisualEffects);
} else {
record.setSuppressedVisualEffects(0);
}
diff --git a/services/core/java/com/android/server/notification/ZenLog.java b/services/core/java/com/android/server/notification/ZenLog.java
index b016faf..c6af756 100644
--- a/services/core/java/com/android/server/notification/ZenLog.java
+++ b/services/core/java/com/android/server/notification/ZenLog.java
@@ -63,6 +63,7 @@
private static final int TYPE_SUPPRESSOR_CHANGED = 14;
private static final int TYPE_LISTENER_HINTS_CHANGED = 15;
private static final int TYPE_SET_NOTIFICATION_POLICY = 16;
+ private static final int TYPE_SET_CONSOLIDATED_ZEN_POLICY = 17;
private static int sNext;
private static int sSize;
@@ -103,6 +104,14 @@
append(TYPE_SET_ZEN_MODE, zenModeToString(zenMode) + "," + reason);
}
+ /**
+ * trace setting the consolidated zen policy
+ */
+ public static void traceSetConsolidatedZenPolicy(NotificationManager.Policy policy,
+ String reason) {
+ append(TYPE_SET_CONSOLIDATED_ZEN_POLICY, policy.toString() + "," + reason);
+ }
+
public static void traceUpdateZenMode(int fromMode, int toMode) {
append(TYPE_UPDATE_ZEN_MODE, zenModeToString(fromMode) + " -> " + zenModeToString(toMode));
}
diff --git a/services/core/java/com/android/server/notification/ZenModeExtractor.java b/services/core/java/com/android/server/notification/ZenModeExtractor.java
index a0aa1c3..f3da079 100644
--- a/services/core/java/com/android/server/notification/ZenModeExtractor.java
+++ b/services/core/java/com/android/server/notification/ZenModeExtractor.java
@@ -16,9 +16,6 @@
package com.android.server.notification;
-import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_OFF;
-import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_ON;
-
import android.content.Context;
import android.util.Log;
import android.util.Slog;
@@ -50,7 +47,7 @@
record.setIntercepted(mZenModeHelper.shouldIntercept(record));
if (record.isIntercepted()) {
record.setSuppressedVisualEffects(
- mZenModeHelper.getNotificationPolicy().suppressedVisualEffects);
+ mZenModeHelper.getConsolidatedNotificationPolicy().suppressedVisualEffects);
} else {
record.setSuppressedVisualEffects(0);
}
diff --git a/services/core/java/com/android/server/notification/ZenModeFiltering.java b/services/core/java/com/android/server/notification/ZenModeFiltering.java
index 28cee7a..6045f6c 100644
--- a/services/core/java/com/android/server/notification/ZenModeFiltering.java
+++ b/services/core/java/com/android/server/notification/ZenModeFiltering.java
@@ -23,11 +23,9 @@
import android.content.ComponentName;
import android.content.Context;
import android.media.AudioAttributes;
-import android.media.AudioManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings.Global;
-import android.provider.Settings.Secure;
import android.service.notification.ZenModeConfig;
import android.telecom.TelecomManager;
import android.util.ArrayMap;
@@ -38,7 +36,6 @@
import java.io.PrintWriter;
import java.util.Date;
-import java.util.Objects;
public class ZenModeFiltering {
private static final String TAG = ZenModeHelper.TAG;
@@ -88,20 +85,21 @@
* @param timeoutAffinity affinity to return when the timeout specified via
* <code>contactsTimeoutMs</code> is hit
*/
- public static boolean matchesCallFilter(Context context, int zen, ZenModeConfig config,
- UserHandle userHandle, Bundle extras, ValidateNotificationPeople validator,
- int contactsTimeoutMs, float timeoutAffinity) {
+ public static boolean matchesCallFilter(Context context, int zen, NotificationManager.Policy
+ consolidatedPolicy, UserHandle userHandle, Bundle extras,
+ ValidateNotificationPeople validator, int contactsTimeoutMs, float timeoutAffinity) {
if (zen == Global.ZEN_MODE_NO_INTERRUPTIONS) return false; // nothing gets through
if (zen == Global.ZEN_MODE_ALARMS) return false; // not an alarm
if (zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS) {
- if (config.allowRepeatCallers && REPEAT_CALLERS.isRepeat(context, extras)) {
+ if (consolidatedPolicy.allowRepeatCallers()
+ && REPEAT_CALLERS.isRepeat(context, extras)) {
return true;
}
- if (!config.allowCalls) return false; // no other calls get through
+ if (!consolidatedPolicy.allowCalls()) return false; // no other calls get through
if (validator != null) {
final float contactAffinity = validator.getContactAffinity(userHandle, extras,
contactsTimeoutMs, timeoutAffinity);
- return audienceMatches(config.allowCallsFrom, contactAffinity);
+ return audienceMatches(consolidatedPolicy.allowCallsFrom(), contactAffinity);
}
}
return true;
@@ -116,13 +114,17 @@
REPEAT_CALLERS.recordCall(mContext, extras(record));
}
- public boolean shouldIntercept(int zen, ZenModeConfig config, NotificationRecord record) {
+ /**
+ * Whether to intercept the notification based on the policy
+ */
+ public boolean shouldIntercept(int zen, NotificationManager.Policy policy,
+ NotificationRecord record) {
// Zen mode is ignored for critical notifications.
if (zen == ZEN_MODE_OFF || isCritical(record)) {
return false;
}
// Make an exception to policy for the notification saying that policy has changed
- if (NotificationManager.Policy.areAllVisualEffectsSuppressed(config.suppressedVisualEffects)
+ if (NotificationManager.Policy.areAllVisualEffectsSuppressed(policy.suppressedVisualEffects)
&& "android".equals(record.sbn.getPackageName())
&& SystemMessageProto.SystemMessage.NOTE_ZEN_UPGRADE == record.sbn.getId()) {
ZenLog.traceNotIntercepted(record, "systemDndChangedNotification");
@@ -148,54 +150,54 @@
}
if (isAlarm(record)) {
- if (!config.allowAlarms) {
+ if (!policy.allowAlarms()) {
ZenLog.traceIntercepted(record, "!allowAlarms");
return true;
}
return false;
}
if (isCall(record)) {
- if (config.allowRepeatCallers
+ if (policy.allowRepeatCallers()
&& REPEAT_CALLERS.isRepeat(mContext, extras(record))) {
ZenLog.traceNotIntercepted(record, "repeatCaller");
return false;
}
- if (!config.allowCalls) {
+ if (!policy.allowCalls()) {
ZenLog.traceIntercepted(record, "!allowCalls");
return true;
}
- return shouldInterceptAudience(config.allowCallsFrom, record);
+ return shouldInterceptAudience(policy.allowCallsFrom(), record);
}
if (isMessage(record)) {
- if (!config.allowMessages) {
+ if (!policy.allowMessages()) {
ZenLog.traceIntercepted(record, "!allowMessages");
return true;
}
- return shouldInterceptAudience(config.allowMessagesFrom, record);
+ return shouldInterceptAudience(policy.allowMessagesFrom(), record);
}
if (isEvent(record)) {
- if (!config.allowEvents) {
+ if (!policy.allowEvents()) {
ZenLog.traceIntercepted(record, "!allowEvents");
return true;
}
return false;
}
if (isReminder(record)) {
- if (!config.allowReminders) {
+ if (!policy.allowReminders()) {
ZenLog.traceIntercepted(record, "!allowReminders");
return true;
}
return false;
}
if (isMedia(record)) {
- if (!config.allowMedia) {
+ if (!policy.allowMedia()) {
ZenLog.traceIntercepted(record, "!allowMedia");
return true;
}
return false;
}
if (isSystem(record)) {
- if (!config.allowSystem) {
+ if (!policy.allowSystem()) {
ZenLog.traceIntercepted(record, "!allowSystem");
return true;
}
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 44b80c1..fc9bd37 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -54,6 +54,7 @@
import android.service.notification.ZenModeConfig;
import android.service.notification.ZenModeConfig.ZenRule;
import android.service.notification.ZenModeProto;
+import android.service.notification.ZenPolicy;
import android.util.AndroidRuntimeException;
import android.util.ArrayMap;
import android.util.Log;
@@ -106,6 +107,7 @@
private final ConditionProviders.Config mServiceConfig;
@VisibleForTesting protected int mZenMode;
+ @VisibleForTesting protected NotificationManager.Policy mConsolidatedPolicy;
private int mUser = UserHandle.USER_SYSTEM;
@VisibleForTesting protected ZenModeConfig mConfig;
@VisibleForTesting protected AudioManagerInternal mAudioManager;
@@ -150,8 +152,8 @@
public boolean matchesCallFilter(UserHandle userHandle, Bundle extras,
ValidateNotificationPeople validator, int contactsTimeoutMs, float timeoutAffinity) {
synchronized (mConfig) {
- return ZenModeFiltering.matchesCallFilter(mContext, mZenMode, mConfig, userHandle,
- extras, validator, contactsTimeoutMs, timeoutAffinity);
+ return ZenModeFiltering.matchesCallFilter(mContext, mZenMode, mConsolidatedPolicy,
+ userHandle, extras, validator, contactsTimeoutMs, timeoutAffinity);
}
}
@@ -165,7 +167,7 @@
public boolean shouldIntercept(NotificationRecord record) {
synchronized (mConfig) {
- return mFiltering.shouldIntercept(mZenMode, mConfig, record);
+ return mFiltering.shouldIntercept(mZenMode, mConsolidatedPolicy, record);
}
}
@@ -479,6 +481,9 @@
rule.condition = null;
rule.conditionId = automaticZenRule.getConditionId();
rule.enabled = automaticZenRule.isEnabled();
+ if (automaticZenRule.getZenPolicy() != null) {
+ rule.zenPolicy = automaticZenRule.getZenPolicy();
+ }
rule.zenMode = NotificationManager.zenModeFromInterruptionFilter(
automaticZenRule.getInterruptionFilter(), Global.ZEN_MODE_OFF);
}
@@ -549,6 +554,7 @@
public void dump(PrintWriter pw, String prefix) {
pw.print(prefix); pw.print("mZenMode=");
pw.println(Global.zenModeToString(mZenMode));
+ pw.print("mConsolidatedPolicy=" + mConsolidatedPolicy.toString());
final int N = mConfigs.size();
for (int i = 0; i < N; i++) {
dump(pw, prefix, "mConfigs[u=" + mConfigs.keyAt(i) + "]", mConfigs.valueAt(i));
@@ -713,6 +719,16 @@
}
}
+ /**
+ * @return a copy of the zen mode consolidated policy
+ */
+ public Policy getConsolidatedNotificationPolicy() {
+ if (mConsolidatedPolicy == null) {
+ return null;
+ }
+ return mConsolidatedPolicy.copy();
+ }
+
public boolean setConfigLocked(ZenModeConfig config, ComponentName triggeringComponent,
String reason) {
return setConfigLocked(config, reason, triggeringComponent, true /*setRingerMode*/);
@@ -747,6 +763,7 @@
getNotificationPolicy(config));
if (!config.equals(mConfig)) {
dispatchOnConfigChanged();
+ updateConsolidatedPolicy(reason);
}
if (policyChanged) {
dispatchOnPolicyChanged();
@@ -794,13 +811,18 @@
@VisibleForTesting
protected void evaluateZenMode(String reason, boolean setRingerMode) {
if (DEBUG) Log.d(TAG, "evaluateZenMode");
+ if (mConfig == null) return;
+ final int policyHashBefore = mConsolidatedPolicy == null ? 0
+ : mConsolidatedPolicy.hashCode();
final int zenBefore = mZenMode;
final int zen = computeZenMode();
ZenLog.traceSetZenMode(zen, reason);
mZenMode = zen;
setZenModeSetting(mZenMode);
+ updateConsolidatedPolicy(reason);
updateRingerModeAffectedStreams();
- if (setRingerMode && zen != zenBefore) {
+ if (setRingerMode && (zen != zenBefore || (zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
+ && policyHashBefore != mConsolidatedPolicy.hashCode()))) {
applyZenToRingerMode();
}
applyRestrictions();
@@ -815,9 +837,7 @@
}
}
-
private int computeZenMode() {
- // TODO: use mConfig.zenPolicy
if (mConfig == null) return Global.ZEN_MODE_OFF;
synchronized (mConfig) {
if (mConfig.manualRule != null) return mConfig.manualRule.zenMode;
@@ -839,6 +859,24 @@
}
}
+ private void updateConsolidatedPolicy(String reason) {
+ if (mConfig == null) return;
+ synchronized (mConfig) {
+ ZenPolicy policy = new ZenPolicy();
+ for (ZenRule automaticRule : mConfig.automaticRules.values()) {
+ if (automaticRule.isAutomaticActive()) {
+ policy.apply(automaticRule.zenPolicy);
+ }
+ }
+ Policy newPolicy = mConfig.toNotificationPolicy(policy);
+ if (!Objects.equals(mConsolidatedPolicy, newPolicy)) {
+ mConsolidatedPolicy = newPolicy;
+ dispatchOnConsolidatedPolicyChanged();
+ ZenLog.traceSetConsolidatedZenPolicy(mConsolidatedPolicy, reason);
+ }
+ }
+ }
+
private void updateDefaultAutomaticRuleNames() {
for (ZenRule rule : mDefaultConfig.automaticRules.values()) {
if (ZenModeConfig.EVENTS_DEFAULT_RULE_ID.equals(rule.id)) {
@@ -856,23 +894,28 @@
final boolean zenPriorityOnly = mZenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
final boolean zenSilence = mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS;
final boolean zenAlarmsOnly = mZenMode == Global.ZEN_MODE_ALARMS;
+ final boolean allowCalls = mConsolidatedPolicy.allowCalls();
+ final boolean allowRepeatCallers = mConsolidatedPolicy.allowRepeatCallers();
+ final boolean allowSystem = mConsolidatedPolicy.allowSystem();
+ final boolean allowMedia = mConsolidatedPolicy.allowMedia();
+ final boolean allowAlarms = mConsolidatedPolicy.allowAlarms();
// notification restrictions
final boolean muteNotifications =
(mSuppressedEffects & SUPPRESSED_EFFECT_NOTIFICATIONS) != 0;
// call restrictions
final boolean muteCalls = zenAlarmsOnly
- || (zenPriorityOnly && !mConfig.allowCalls && !mConfig.allowRepeatCallers)
+ || (zenPriorityOnly && !allowCalls && !allowRepeatCallers)
|| (mSuppressedEffects & SUPPRESSED_EFFECT_CALLS) != 0;
// alarm restrictions
- final boolean muteAlarms = zenPriorityOnly && !mConfig.allowAlarms;
+ final boolean muteAlarms = zenPriorityOnly && !allowAlarms;
// media restrictions
- final boolean muteMedia = zenPriorityOnly && !mConfig.allowMedia;
+ final boolean muteMedia = zenPriorityOnly && !allowMedia;
// system restrictions
- final boolean muteSystem = zenAlarmsOnly || (zenPriorityOnly && !mConfig.allowSystem);
+ final boolean muteSystem = zenAlarmsOnly || (zenPriorityOnly && !allowSystem);
// total silence restrictions
- final boolean muteEverything = zenSilence
- || (zenPriorityOnly && ZenModeConfig.areAllZenBehaviorSoundsMuted(mConfig));
+ final boolean muteEverything = zenSilence || (zenPriorityOnly
+ && ZenModeConfig.areAllZenBehaviorSoundsMuted(mConsolidatedPolicy));
for (int usage : AudioAttributes.SDK_USAGES) {
final int suppressionBehavior = AudioAttributes.SUPPRESSIBLE_USAGES.get(usage);
@@ -968,6 +1011,12 @@
}
}
+ private void dispatchOnConsolidatedPolicyChanged() {
+ for (Callback callback : mCallbacks) {
+ callback.onConsolidatedPolicyChanged();
+ }
+ }
+
private void dispatchOnZenModeChanged() {
for (Callback callback : mCallbacks) {
callback.onZenModeChanged();
@@ -1188,7 +1237,7 @@
int content = R.string.zen_upgrade_notification_content;
int drawable = R.drawable.ic_zen_24dp;
if (NotificationManager.Policy.areAllVisualEffectsSuppressed(
- getNotificationPolicy().suppressedVisualEffects)) {
+ getConsolidatedNotificationPolicy().suppressedVisualEffects)) {
title = R.string.zen_upgrade_notification_visd_title;
content = R.string.zen_upgrade_notification_visd_content;
drawable = R.drawable.ic_dnd_block_notifications;
@@ -1362,6 +1411,6 @@
void onConfigChanged() {}
void onZenModeChanged() {}
void onPolicyChanged() {}
+ void onConsolidatedPolicyChanged() {}
}
-
}
diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
index 45cb477..aae7b95 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -344,40 +344,43 @@
@SafeVarargs
private final void grantIgnoringSystemPackage(String packageName, int userId,
Set<String>... permissionGroups) {
- grantPermissionsToSystemPackage(packageName, userId, false, true, permissionGroups);
+ grantPermissionsToPackage(
+ packageName, userId, true /* ignoreSystemPackage */, permissionGroups);
}
@SafeVarargs
private final void grantSystemFixedPermissionsToSystemPackage(String packageName, int userId,
Set<String>... permissionGroups) {
- grantPermissionsToSystemPackage(packageName, userId, true, false, permissionGroups);
+ grantPermissionsToSystemPackage(
+ packageName, userId, true /* systemFixed */, permissionGroups);
}
@SafeVarargs
private final void grantPermissionsToSystemPackage(
String packageName, int userId, Set<String>... permissionGroups) {
- grantPermissionsToSystemPackage(packageName, userId, false, false, permissionGroups);
+ grantPermissionsToSystemPackage(
+ packageName, userId, false /* systemFixed */, permissionGroups);
}
@SafeVarargs
private final void grantPermissionsToSystemPackage(String packageName, int userId,
- boolean systemFixed, boolean ignoreSystemPackage, Set<String>... permissionGroups) {
- if (!ignoreSystemPackage && !isSystemPackage(packageName)) {
+ boolean systemFixed, Set<String>... permissionGroups) {
+ if (!isSystemPackage(packageName)) {
return;
}
- grantRuntimePermissionsToPackage(getSystemPackageInfo(packageName),
- userId, systemFixed, ignoreSystemPackage, permissionGroups);
+ grantPermissionsToPackage(getSystemPackageInfo(packageName),
+ userId, systemFixed, false /* ignoreSystemPackage */, permissionGroups);
}
@SafeVarargs
- private final void grantRuntimePermissionsToPackage(String packageName, int userId,
- boolean systemFixed, boolean ignoreSystemPackage, Set<String>... permissionGroups) {
- grantRuntimePermissionsToPackage(getPackageInfo(packageName),
- userId, systemFixed, ignoreSystemPackage, permissionGroups);
+ private final void grantPermissionsToPackage(String packageName, int userId,
+ boolean ignoreSystemPackage, Set<String>... permissionGroups) {
+ grantPermissionsToPackage(getPackageInfo(packageName),
+ userId, false /* systemFixed */, ignoreSystemPackage, permissionGroups);
}
@SafeVarargs
- private final void grantRuntimePermissionsToPackage(PackageInfo packageName, int userId,
+ private final void grantPermissionsToPackage(PackageInfo packageName, int userId,
boolean systemFixed, boolean ignoreSystemPackage, Set<String>... permissionGroups) {
if (packageName == null) return;
if (doesPackageSupportRuntimePermissions(packageName)) {
@@ -589,9 +592,8 @@
browserPackage = null;
}
}
- grantRuntimePermissionsToPackage(browserPackage, userId,
- false /* systemFixed */, false /* ignoreSystemPackage */,
- LOCATION_PERMISSIONS);
+ grantPermissionsToPackage(browserPackage, userId,
+ false /* ignoreSystemPackage */, LOCATION_PERMISSIONS);
// Voice interaction
if (voiceInteractPackageNames != null) {
@@ -786,7 +788,7 @@
return;
}
Log.i(TAG, "Granting permissions to sim call manager for user:" + userId);
- grantRuntimePermissionsToPackage(packageName, userId, false, false,
+ grantPermissionsToPackage(packageName, userId, false /* ignoreSystemPackage */,
PHONE_PERMISSIONS, MICROPHONE_PERMISSIONS);
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 371ac4f..1dae396 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -7891,8 +7891,7 @@
// requires freezing various Surface states and won't work well
// with animations, so we disable it in the animation case for now.
if (w != null && !w.isAnimatingLw() &&
- ((w.getAttrs().rotationAnimation == ROTATION_ANIMATION_JUMPCUT) ||
- (w.getAttrs().rotationAnimation == ROTATION_ANIMATION_SEAMLESS))) {
+ w.getAttrs().rotationAnimation == ROTATION_ANIMATION_SEAMLESS) {
return true;
}
return false;
diff --git a/services/core/java/com/android/server/role/RemoteRoleControllerService.java b/services/core/java/com/android/server/role/RemoteRoleControllerService.java
index c737e8b..b670291 100644
--- a/services/core/java/com/android/server/role/RemoteRoleControllerService.java
+++ b/services/core/java/com/android/server/role/RemoteRoleControllerService.java
@@ -106,6 +106,9 @@
private final Queue<Call> mPendingCalls = new ArrayDeque<>();
@NonNull
+ private final Handler mMainHandler = Handler.getMain();
+
+ @NonNull
private final Runnable mUnbindRunnable = this::unbind;
Connection(@UserIdInt int userId, @NonNull Context context) {
@@ -142,7 +145,7 @@
}
public void enqueueCall(@NonNull Call call) {
- Handler.getMain().post(PooledLambda.obtainRunnable(this::executeCall, call));
+ mMainHandler.post(PooledLambda.obtainRunnable(this::executeCall, call));
}
@MainThread
@@ -158,7 +161,7 @@
@MainThread
private void ensureBound() {
- Handler.getMain().removeCallbacks(mUnbindRunnable);
+ mMainHandler.removeCallbacks(mUnbindRunnable);
if (!mBound) {
Intent intent = new Intent(RoleControllerService.SERVICE_INTERFACE);
intent.setPackage(mContext.getPackageManager()
@@ -169,9 +172,8 @@
}
private void scheduleUnbind() {
- Handler mainHandler = Handler.getMain();
- mainHandler.removeCallbacks(mUnbindRunnable);
- mainHandler.postDelayed(mUnbindRunnable, UNBIND_DELAY_MILLIS);
+ mMainHandler.removeCallbacks(mUnbindRunnable);
+ mMainHandler.postDelayed(mUnbindRunnable, UNBIND_DELAY_MILLIS);
}
@MainThread
diff --git a/services/core/java/com/android/server/role/RoleManagerService.java b/services/core/java/com/android/server/role/RoleManagerService.java
index 5c9cef5..b7d2ce2 100644
--- a/services/core/java/com/android/server/role/RoleManagerService.java
+++ b/services/core/java/com/android/server/role/RoleManagerService.java
@@ -249,9 +249,42 @@
userId = handleIncomingUser(userId, "clearRoleHoldersAsUser");
getContext().enforceCallingOrSelfPermission(Manifest.permission.MANAGE_ROLE_HOLDERS,
"clearRoleHoldersAsUser");
+
getControllerService(userId).onClearRoleHolders(roleName, callback);
}
+ @Override
+ public boolean addRoleHolderFromController(@NonNull String roleName,
+ @NonNull String packageName) {
+ Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
+ Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty");
+ getContext().enforceCallingOrSelfPermission(
+ RoleManager.PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER,
+ "addRoleHolderFromController");
+
+ int userId = UserHandle.getCallingUserId();
+ synchronized (mLock) {
+ RoleUserState userState = getUserStateLocked(userId);
+ return userState.addRoleHolderLocked(roleName, packageName);
+ }
+ }
+
+ @Override
+ public boolean removeRoleHolderFromController(@NonNull String roleName,
+ @NonNull String packageName) {
+ Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
+ Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty");
+ getContext().enforceCallingOrSelfPermission(
+ RoleManager.PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER,
+ "removeRoleHolderFromController");
+
+ int userId = UserHandle.getCallingUserId();
+ synchronized (mLock) {
+ RoleUserState userState = getUserStateLocked(userId);
+ return userState.removeRoleHolderLocked(roleName, packageName);
+ }
+ }
+
@CheckResult
private int handleIncomingUser(@UserIdInt int userId, @NonNull String name) {
return ActivityManager.handleIncomingUser(getCallingPid(), getCallingUid(), userId,
diff --git a/services/core/java/com/android/server/role/RoleUserState.java b/services/core/java/com/android/server/role/RoleUserState.java
index bd54491..caa7c28 100644
--- a/services/core/java/com/android/server/role/RoleUserState.java
+++ b/services/core/java/com/android/server/role/RoleUserState.java
@@ -174,25 +174,6 @@
}
/**
- * Remove all holders of a role.
- *
- * @param roleName the name of the role to remove all its holders
- *
- * @return {@code false} only if the set of role holders is null, which should not happen and
- * indicates an issue.
- */
- @GuardedBy("RoleManagerService.mLock")
- public boolean clearRoleHolderLocked(@NonNull String roleName) {
- throwIfDestroyedLocked();
- ArraySet<String> roleHolders = mRoles.get(roleName);
- if (roleHolders == null) {
- return false;
- }
- roleHolders.clear();
- return true;
- }
-
- /**
* Schedule writing the state to file.
*/
@GuardedBy("RoleManagerService.mLock")
diff --git a/services/core/java/com/android/server/security/VerityUtils.java b/services/core/java/com/android/server/security/VerityUtils.java
index 8070f3a..514dfed 100644
--- a/services/core/java/com/android/server/security/VerityUtils.java
+++ b/services/core/java/com/android/server/security/VerityUtils.java
@@ -138,8 +138,8 @@
* <p>It is worthy to note that {@code trackedBufferFactory} generates a "tracked" {@code
* ByteBuffer}. The data will be used outside this method via the factory itself.
*
- * @return fs-verity measurement of {@code filePath}, which is a SHA-256 of fs-verity descriptor
- * and authenticated extensions.
+ * @return fs-verity signed data (struct fsverity_digest_disk) of {@code filePath}, which
+ * includes SHA-256 of fs-verity descriptor and authenticated extensions.
*/
private static byte[] generateFsverityMetadata(String filePath, String signaturePath,
@NonNull TrackedShmBufferFactory trackedBufferFactory)
@@ -151,8 +151,10 @@
ByteBuffer buffer = result.verityData;
buffer.position(result.merkleTreeSize);
- return generateFsverityDescriptorAndMeasurement(file, result.rootHash, signaturePath,
- buffer);
+
+ final byte[] measurement = generateFsverityDescriptorAndMeasurement(file,
+ result.rootHash, signaturePath, buffer);
+ return constructFsveritySignedDataNative(measurement);
}
}
@@ -211,6 +213,7 @@
return md.digest();
}
+ private static native byte[] constructFsveritySignedDataNative(@NonNull byte[] measurement);
private static native byte[] constructFsverityDescriptorNative(long fileSize);
private static native byte[] constructFsverityExtensionNative(short extensionId,
int extensionDataSize);
diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java
index 465a2cf..4d3fc1a 100644
--- a/services/core/java/com/android/server/stats/StatsCompanionService.java
+++ b/services/core/java/com/android/server/stats/StatsCompanionService.java
@@ -1004,6 +1004,7 @@
e.writeLong(processMemoryState.cacheInBytes);
e.writeLong(processMemoryState.swapInBytes);
e.writeLong(processMemoryState.rssHighWatermarkInBytes);
+ e.writeLong(processMemoryState.startTimeNanos);
pulledData.add(e);
}
}
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
index caa2da3..9a38f68 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
@@ -228,8 +228,9 @@
* @param callback Callback to run after activity visibilities have been reevaluated. This can
* be used from window manager so that when the callback is called, it's
* guaranteed that all apps have their visibility updated accordingly.
+ * @param displayId The id of the display where the keyguard flags changed.
*/
- public abstract void notifyKeyguardFlagsChanged(@Nullable Runnable callback);
+ public abstract void notifyKeyguardFlagsChanged(@Nullable Runnable callback, int displayId);
/**
* Called when the trusted state of Keyguard has changed.
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index a9d0978..10a1be5 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -166,6 +166,7 @@
private final Context mContext;
private final WindowManagerService mService;
+ private final DisplayContent mDisplayContent;
private @TransitionType int mNextAppTransition = TRANSIT_UNSET;
private @TransitionFlags int mNextAppTransitionFlags = 0;
@@ -257,10 +258,11 @@
final Handler mHandler;
final Runnable mHandleAppTransitionTimeoutRunnable = () -> handleAppTransitionTimeout();
- AppTransition(Context context, WindowManagerService service) {
+ AppTransition(Context context, WindowManagerService service, DisplayContent displayContent) {
mContext = context;
mService = service;
mHandler = new Handler(service.mH.getLooper());
+ mDisplayContent = displayContent;
mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context,
com.android.internal.R.interpolator.linear_out_slow_in);
mFastOutLinearInInterpolator = AnimationUtils.loadInterpolator(context,
@@ -426,7 +428,7 @@
? topOpeningAnim.getStatusBarTransitionsStartTime()
: SystemClock.uptimeMillis(),
AnimationAdapter.STATUS_BAR_TRANSITION_DURATION);
- mService.getDefaultDisplayContentLocked().getDockedDividerController()
+ mDisplayContent.getDockedDividerController()
.notifyAppTransitionStarting(openingApps, transit);
if (mRemoteAnimationController != null) {
@@ -2142,7 +2144,8 @@
+ " transit=" + appTransitionToString(transit)
+ " " + this
+ " alwaysKeepCurrent=" + alwaysKeepCurrent
- + " Callers=" + Debug.getCallers(3));
+ + " displayId=" + mDisplayContent.getDisplayId()
+ + " Callers=" + Debug.getCallers(5));
final boolean allowSetCrashing = !isKeyguardTransit(mNextAppTransition)
&& transit == TRANSIT_CRASHING_ACTIVITY_CLOSE;
if (forceOverride || isKeyguardTransit(transit) || !isTransitionSet()
@@ -2218,14 +2221,18 @@
private void handleAppTransitionTimeout() {
synchronized (mService.mWindowMap) {
- if (isTransitionSet() || !mService.mOpeningApps.isEmpty()
- || !mService.mClosingApps.isEmpty()) {
+ final DisplayContent dc = mDisplayContent;
+ if (dc == null) {
+ return;
+ }
+ if (isTransitionSet() || !dc.mOpeningApps.isEmpty() || !dc.mClosingApps.isEmpty()) {
if (DEBUG_APP_TRANSITIONS) {
Slog.v(TAG_WM, "*** APP TRANSITION TIMEOUT."
+ + " displayId=" + dc.getDisplayId()
+ " isTransitionSet()="
- + mService.mAppTransition.isTransitionSet()
- + " mOpeningApps.size()=" + mService.mOpeningApps.size()
- + " mClosingApps.size()=" + mService.mClosingApps.size());
+ + dc.mAppTransition.isTransitionSet()
+ + " mOpeningApps.size()=" + dc.mOpeningApps.size()
+ + " mClosingApps.size()=" + dc.mClosingApps.size());
}
setTimeout();
mService.mWindowPlacerLocked.performSurfacePlacement();
diff --git a/services/core/java/com/android/server/wm/AppTransitionController.java b/services/core/java/com/android/server/wm/AppTransitionController.java
new file mode 100644
index 0000000..94a47dd
--- /dev/null
+++ b/services/core/java/com/android/server/wm/AppTransitionController.java
@@ -0,0 +1,631 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.server.wm;
+
+import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
+import static android.view.WindowManager.TRANSIT_ACTIVITY_CLOSE;
+import static android.view.WindowManager.TRANSIT_ACTIVITY_OPEN;
+import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE;
+import static android.view.WindowManager.TRANSIT_DOCK_TASK_FROM_RECENTS;
+import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION;
+import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_SHADE;
+import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER;
+import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY;
+import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
+import static android.view.WindowManager.TRANSIT_NONE;
+import static android.view.WindowManager.TRANSIT_TASK_CLOSE;
+import static android.view.WindowManager.TRANSIT_TASK_IN_PLACE;
+import static android.view.WindowManager.TRANSIT_TASK_OPEN;
+import static android.view.WindowManager.TRANSIT_TASK_TO_BACK;
+import static android.view.WindowManager.TRANSIT_TASK_TO_FRONT;
+import static android.view.WindowManager.TRANSIT_TRANSLUCENT_ACTIVITY_CLOSE;
+import static android.view.WindowManager.TRANSIT_TRANSLUCENT_ACTIVITY_OPEN;
+import static android.view.WindowManager.TRANSIT_WALLPAPER_CLOSE;
+import static android.view.WindowManager.TRANSIT_WALLPAPER_INTRA_CLOSE;
+import static android.view.WindowManager.TRANSIT_WALLPAPER_INTRA_OPEN;
+import static android.view.WindowManager.TRANSIT_WALLPAPER_OPEN;
+
+import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_CONFIG;
+import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
+import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_SNAPSHOT;
+import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_SPLASH_SCREEN;
+import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_WINDOWS_DRAWN;
+import static com.android.server.wm.AppTransition.isKeyguardGoingAwayTransit;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+import static com.android.server.wm.WindowManagerService.H.NOTIFY_APP_TRANSITION_STARTING;
+
+import android.app.WindowConfiguration;
+import android.os.Trace;
+import android.util.ArraySet;
+import android.util.Slog;
+import android.util.SparseIntArray;
+import android.view.Display;
+import android.view.RemoteAnimationAdapter;
+import android.view.RemoteAnimationDefinition;
+import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
+import android.view.animation.Animation;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.util.function.Predicate;
+
+
+/**
+ * Checks for app transition readiness, resolves animation attributes and performs visibility
+ * change for apps that animate as part of an app transition.
+ */
+public class AppTransitionController {
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "AppTransitionController" : TAG_WM;
+ private final WindowManagerService mService;
+ private final DisplayContent mDisplayContent;
+ private final WallpaperController mWallpaperControllerLocked;
+
+ private final SparseIntArray mTempTransitionReasons = new SparseIntArray();
+
+ AppTransitionController(WindowManagerService service, DisplayContent displayContent) {
+ mService = service;
+ mDisplayContent = displayContent;
+ mWallpaperControllerLocked = new WallpaperController(mService);
+ }
+
+ /**
+ * Handle application transition for given display.
+ */
+ void handleAppTransitionReady() {
+ final int appsCount = mDisplayContent.mOpeningApps.size();
+ if (!transitionGoodToGo(appsCount, mTempTransitionReasons)) {
+ return;
+ }
+ Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "AppTransitionReady");
+
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "**** GOOD TO GO");
+ int transit = mDisplayContent.mAppTransition.getAppTransition();
+ if (mDisplayContent.mSkipAppTransitionAnimation && !isKeyguardGoingAwayTransit(transit)) {
+ transit = WindowManager.TRANSIT_UNSET;
+ }
+ mDisplayContent.mSkipAppTransitionAnimation = false;
+ mDisplayContent.mNoAnimationNotifyOnTransitionFinished.clear();
+
+ mDisplayContent.mAppTransition.removeAppTransitionTimeoutCallbacks();
+
+ mService.mRoot.mWallpaperMayChange = false;
+
+ int i;
+ for (i = 0; i < appsCount; i++) {
+ final AppWindowToken wtoken = mDisplayContent.mOpeningApps.valueAt(i);
+ // Clearing the mAnimatingExit flag before entering animation. It's set to true if app
+ // window is removed, or window relayout to invisible. This also affects window
+ // visibility. We need to clear it *before* maybeUpdateTransitToWallpaper() as the
+ // transition selection depends on wallpaper target visibility.
+ wtoken.clearAnimatingFlags();
+ }
+
+ // Adjust wallpaper before we pull the lower/upper target, since pending changes
+ // (like the clearAnimatingFlags() above) might affect wallpaper target result.
+ // Or, the opening app window should be a wallpaper target.
+ mWallpaperControllerLocked.adjustWallpaperWindowsForAppTransitionIfNeeded(mDisplayContent,
+ mDisplayContent.mOpeningApps);
+
+ // Determine if closing and opening app token sets are wallpaper targets, in which case
+ // special animations are needed.
+ final boolean hasWallpaperTarget = mWallpaperControllerLocked.getWallpaperTarget() != null;
+ final boolean openingAppHasWallpaper = canBeWallpaperTarget(mDisplayContent.mOpeningApps)
+ && hasWallpaperTarget;
+ final boolean closingAppHasWallpaper = canBeWallpaperTarget(mDisplayContent.mClosingApps)
+ && hasWallpaperTarget;
+
+ transit = maybeUpdateTransitToTranslucentAnim(transit);
+ transit = maybeUpdateTransitToWallpaper(transit, openingAppHasWallpaper,
+ closingAppHasWallpaper);
+
+ // Find the layout params of the top-most application window in the tokens, which is
+ // what will control the animation theme. If all closing windows are obscured, then there is
+ // no need to do an animation. This is the case, for example, when this transition is being
+ // done behind a dream window.
+ final ArraySet<Integer> activityTypes = collectActivityTypes(mDisplayContent.mOpeningApps,
+ mDisplayContent.mClosingApps);
+ final boolean allowAnimations = mService.mPolicy.allowAppAnimationsLw();
+ final AppWindowToken animLpToken = allowAnimations
+ ? findAnimLayoutParamsToken(transit, activityTypes)
+ : null;
+ final AppWindowToken topOpeningApp = allowAnimations
+ ? getTopApp(mDisplayContent.mOpeningApps, false /* ignoreHidden */)
+ : null;
+ final AppWindowToken topClosingApp = allowAnimations
+ ? getTopApp(mDisplayContent.mClosingApps, false /* ignoreHidden */)
+ : null;
+ final WindowManager.LayoutParams animLp = getAnimLp(animLpToken);
+ overrideWithRemoteAnimationIfSet(animLpToken, transit, activityTypes);
+
+ final boolean voiceInteraction = containsVoiceInteraction(mDisplayContent.mOpeningApps)
+ || containsVoiceInteraction(mDisplayContent.mOpeningApps);
+
+ final int layoutRedo;
+ mService.mSurfaceAnimationRunner.deferStartingAnimations();
+ try {
+ processApplicationsAnimatingInPlace(transit);
+
+ handleClosingApps(transit, animLp, voiceInteraction);
+ handleOpeningApps(transit, animLp, voiceInteraction);
+
+ mDisplayContent.mAppTransition.setLastAppTransition(transit, topOpeningApp,
+ topClosingApp);
+
+ final int flags = mDisplayContent.mAppTransition.getTransitFlags();
+ layoutRedo = mDisplayContent.mAppTransition.goodToGo(transit, topOpeningApp,
+ topClosingApp, mDisplayContent.mOpeningApps, mDisplayContent.mClosingApps);
+ handleNonAppWindowsInTransition(transit, flags);
+ mDisplayContent.mAppTransition.postAnimationCallback();
+ mDisplayContent.mAppTransition.clear();
+ } finally {
+ mService.mSurfaceAnimationRunner.continueStartingAnimations();
+ }
+
+ mService.mTaskSnapshotController.onTransitionStarting(mDisplayContent);
+
+ mDisplayContent.mOpeningApps.clear();
+ mDisplayContent.mClosingApps.clear();
+ mDisplayContent.mUnknownAppVisibilityController.clear();
+
+ // This has changed the visibility of windows, so perform
+ // a new layout to get them all up-to-date.
+ mDisplayContent.setLayoutNeeded();
+
+ mDisplayContent.computeImeTarget(true /* updateImeTarget */);
+
+ mService.mH.obtainMessage(NOTIFY_APP_TRANSITION_STARTING,
+ mTempTransitionReasons.clone()).sendToTarget();
+
+ Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
+
+ mDisplayContent.pendingLayoutChanges |=
+ layoutRedo | FINISH_LAYOUT_REDO_LAYOUT | FINISH_LAYOUT_REDO_CONFIG;
+ }
+
+ private static WindowManager.LayoutParams getAnimLp(AppWindowToken wtoken) {
+ final WindowState mainWindow = wtoken != null ? wtoken.findMainWindow() : null;
+ return mainWindow != null ? mainWindow.mAttrs : null;
+ }
+
+ /**
+ * Overrides the pending transition with the remote animation defined for the transition in the
+ * set of defined remote animations in the app window token.
+ */
+ private void overrideWithRemoteAnimationIfSet(AppWindowToken animLpToken, int transit,
+ ArraySet<Integer> activityTypes) {
+ if (transit == TRANSIT_CRASHING_ACTIVITY_CLOSE) {
+ // The crash transition has higher priority than any involved remote animations.
+ return;
+ }
+ if (animLpToken == null) {
+ return;
+ }
+ final RemoteAnimationDefinition definition = animLpToken.getRemoteAnimationDefinition();
+ if (definition == null) {
+ return;
+ }
+ final RemoteAnimationAdapter adapter = definition.getAdapter(transit, activityTypes);
+ if (adapter != null) {
+ animLpToken.getDisplayContent().mAppTransition.overridePendingAppTransitionRemote(
+ adapter);
+ }
+ }
+
+ /**
+ * @return The window token that determines the animation theme.
+ */
+ private AppWindowToken findAnimLayoutParamsToken(@WindowManager.TransitionType int transit,
+ ArraySet<Integer> activityTypes) {
+ AppWindowToken result;
+ final ArraySet<AppWindowToken> closingApps = mDisplayContent.mClosingApps;
+ final ArraySet<AppWindowToken> openingApps = mDisplayContent.mOpeningApps;
+
+ // Remote animations always win, but fullscreen tokens override non-fullscreen tokens.
+ result = lookForHighestTokenWithFilter(closingApps, openingApps,
+ w -> w.getRemoteAnimationDefinition() != null
+ && w.getRemoteAnimationDefinition().hasTransition(transit, activityTypes));
+ if (result != null) {
+ return result;
+ }
+ result = lookForHighestTokenWithFilter(closingApps, openingApps,
+ w -> w.fillsParent() && w.findMainWindow() != null);
+ if (result != null) {
+ return result;
+ }
+ return lookForHighestTokenWithFilter(closingApps, openingApps,
+ w -> w.findMainWindow() != null);
+ }
+
+ /**
+ * @return The set of {@link WindowConfiguration.ActivityType}s contained in the set of apps in
+ * {@code array1} and {@code array2}.
+ */
+ private static ArraySet<Integer> collectActivityTypes(ArraySet<AppWindowToken> array1,
+ ArraySet<AppWindowToken> array2) {
+ final ArraySet<Integer> result = new ArraySet<>();
+ for (int i = array1.size() - 1; i >= 0; i--) {
+ result.add(array1.valueAt(i).getActivityType());
+ }
+ for (int i = array2.size() - 1; i >= 0; i--) {
+ result.add(array2.valueAt(i).getActivityType());
+ }
+ return result;
+ }
+
+ private static AppWindowToken lookForHighestTokenWithFilter(ArraySet<AppWindowToken> array1,
+ ArraySet<AppWindowToken> array2, Predicate<AppWindowToken> filter) {
+ final int array1count = array1.size();
+ final int count = array1count + array2.size();
+ int bestPrefixOrderIndex = Integer.MIN_VALUE;
+ AppWindowToken bestToken = null;
+ for (int i = 0; i < count; i++) {
+ final AppWindowToken wtoken = i < array1count
+ ? array1.valueAt(i)
+ : array2.valueAt(i - array1count);
+ final int prefixOrderIndex = wtoken.getPrefixOrderIndex();
+ if (filter.test(wtoken) && prefixOrderIndex > bestPrefixOrderIndex) {
+ bestPrefixOrderIndex = prefixOrderIndex;
+ bestToken = wtoken;
+ }
+ }
+ return bestToken;
+ }
+
+ private boolean containsVoiceInteraction(ArraySet<AppWindowToken> apps) {
+ for (int i = apps.size() - 1; i >= 0; i--) {
+ if (apps.valueAt(i).mVoiceInteraction) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void handleOpeningApps(int transit, LayoutParams animLp, boolean voiceInteraction) {
+ final ArraySet<AppWindowToken> openingApps = mDisplayContent.mOpeningApps;
+ final int appsCount = openingApps.size();
+ for (int i = 0; i < appsCount; i++) {
+ AppWindowToken wtoken = openingApps.valueAt(i);
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Now opening app" + wtoken);
+
+ if (!wtoken.setVisibility(animLp, true, transit, false, voiceInteraction)) {
+ // This token isn't going to be animating. Add it to the list of tokens to
+ // be notified of app transition complete since the notification will not be
+ // sent be the app window animator.
+ mDisplayContent.mNoAnimationNotifyOnTransitionFinished.add(wtoken.token);
+ }
+ wtoken.updateReportedVisibilityLocked();
+ wtoken.waitingToShow = false;
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ ">>> OPEN TRANSACTION handleAppTransitionReady()");
+ mService.openSurfaceTransaction();
+ try {
+ wtoken.showAllWindowsLocked();
+ } finally {
+ mService.closeSurfaceTransaction("handleAppTransitionReady");
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ "<<< CLOSE TRANSACTION handleAppTransitionReady()");
+ }
+
+ if (mDisplayContent.mAppTransition.isNextAppTransitionThumbnailUp()) {
+ wtoken.attachThumbnailAnimation();
+ } else if (mDisplayContent.mAppTransition.isNextAppTransitionOpenCrossProfileApps()) {
+ wtoken.attachCrossProfileAppsThumbnailAnimation();
+ }
+ }
+ }
+
+ private void handleClosingApps(int transit, LayoutParams animLp, boolean voiceInteraction) {
+ final ArraySet<AppWindowToken> closingApps = mDisplayContent.mClosingApps;
+ final int appsCount = closingApps.size();
+ for (int i = 0; i < appsCount; i++) {
+ AppWindowToken wtoken = closingApps.valueAt(i);
+
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Now closing app " + wtoken);
+ // TODO: Do we need to add to mNoAnimationNotifyOnTransitionFinished like above if not
+ // animating?
+ wtoken.setVisibility(animLp, false, transit, false, voiceInteraction);
+ wtoken.updateReportedVisibilityLocked();
+ // Force the allDrawn flag, because we want to start
+ // this guy's animations regardless of whether it's
+ // gotten drawn.
+ wtoken.allDrawn = true;
+ wtoken.deferClearAllDrawn = false;
+ // Ensure that apps that are mid-starting are also scheduled to have their
+ // starting windows removed after the animation is complete
+ if (wtoken.startingWindow != null && !wtoken.startingWindow.mAnimatingExit
+ && wtoken.getController() != null) {
+ wtoken.getController().removeStartingWindow();
+ }
+
+ if (mDisplayContent.mAppTransition.isNextAppTransitionThumbnailDown()) {
+ wtoken.attachThumbnailAnimation();
+ }
+ }
+ }
+
+ private void handleNonAppWindowsInTransition(int transit, int flags) {
+ if (transit == TRANSIT_KEYGUARD_GOING_AWAY) {
+ if ((flags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER) != 0
+ && (flags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION) == 0) {
+ Animation anim = mService.mPolicy.createKeyguardWallpaperExit(
+ (flags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_SHADE) != 0);
+ if (anim != null) {
+ mDisplayContent.mWallpaperController.startWallpaperAnimation(anim);
+ }
+ }
+ }
+ if (transit == TRANSIT_KEYGUARD_GOING_AWAY
+ || transit == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER) {
+ mDisplayContent.startKeyguardExitOnNonAppWindows(
+ transit == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER,
+ (flags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_SHADE) != 0);
+ }
+ }
+
+ private boolean transitionGoodToGo(int appsCount, SparseIntArray outReasons) {
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ "Checking " + appsCount + " opening apps (frozen="
+ + mService.mDisplayFrozen + " timeout="
+ + mDisplayContent.mAppTransition.isTimeout() + ")...");
+ final ScreenRotationAnimation screenRotationAnimation =
+ mService.mAnimator.getScreenRotationAnimationLocked(
+ Display.DEFAULT_DISPLAY);
+
+ outReasons.clear();
+ if (!mDisplayContent.mAppTransition.isTimeout()) {
+ // Imagine the case where we are changing orientation due to an app transition, but a
+ // previous orientation change is still in progress. We won't process the orientation
+ // change for our transition because we need to wait for the rotation animation to
+ // finish.
+ // If we start the app transition at this point, we will interrupt it halfway with a
+ // new rotation animation after the old one finally finishes. It's better to defer the
+ // app transition.
+ if (screenRotationAnimation != null && screenRotationAnimation.isAnimating() &&
+ mService.getDefaultDisplayContentLocked().rotationNeedsUpdate()) {
+ if (DEBUG_APP_TRANSITIONS) {
+ Slog.v(TAG, "Delaying app transition for screen rotation animation to finish");
+ }
+ return false;
+ }
+ for (int i = 0; i < appsCount; i++) {
+ AppWindowToken wtoken = mDisplayContent.mOpeningApps.valueAt(i);
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ "Check opening app=" + wtoken + ": allDrawn="
+ + wtoken.allDrawn + " startingDisplayed="
+ + wtoken.startingDisplayed + " startingMoved="
+ + wtoken.startingMoved + " isRelaunching()="
+ + wtoken.isRelaunching() + " startingWindow="
+ + wtoken.startingWindow);
+
+
+ final boolean allDrawn = wtoken.allDrawn && !wtoken.isRelaunching();
+ if (!allDrawn && !wtoken.startingDisplayed && !wtoken.startingMoved) {
+ return false;
+ }
+ final int windowingMode = wtoken.getWindowingMode();
+ if (allDrawn) {
+ outReasons.put(windowingMode, APP_TRANSITION_WINDOWS_DRAWN);
+ } else {
+ outReasons.put(windowingMode,
+ wtoken.startingData instanceof SplashScreenStartingData
+ ? APP_TRANSITION_SPLASH_SCREEN
+ : APP_TRANSITION_SNAPSHOT);
+ }
+ }
+
+ // We also need to wait for the specs to be fetched, if needed.
+ if (mDisplayContent.mAppTransition.isFetchingAppTransitionsSpecs()) {
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "isFetchingAppTransitionSpecs=true");
+ return false;
+ }
+
+ if (!mDisplayContent.mUnknownAppVisibilityController.allResolved()) {
+ if (DEBUG_APP_TRANSITIONS) {
+ Slog.v(TAG, "unknownApps is not empty: "
+ + mDisplayContent.mUnknownAppVisibilityController.getDebugMessage());
+ }
+ return false;
+ }
+
+ // If the wallpaper is visible, we need to check it's ready too.
+ boolean wallpaperReady = !mWallpaperControllerLocked.isWallpaperVisible() ||
+ mWallpaperControllerLocked.wallpaperTransitionReady();
+ if (wallpaperReady) {
+ return true;
+ }
+ return false;
+ }
+ return true;
+ }
+
+ private int maybeUpdateTransitToWallpaper(int transit, boolean openingAppHasWallpaper,
+ boolean closingAppHasWallpaper) {
+ // Given no app transition pass it through instead of a wallpaper transition.
+ // Never convert the crashing transition.
+ // Never update the transition for the wallpaper if we are just docking from recents
+ if (transit == TRANSIT_NONE || transit == TRANSIT_CRASHING_ACTIVITY_CLOSE
+ || transit == TRANSIT_DOCK_TASK_FROM_RECENTS) {
+ return transit;
+ }
+
+ final WindowState wallpaperTarget = mWallpaperControllerLocked.getWallpaperTarget();
+ final boolean showWallpaper = wallpaperTarget != null
+ && (wallpaperTarget.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0;
+ // If wallpaper is animating or wallpaperTarget doesn't have SHOW_WALLPAPER flag set,
+ // don't consider upgrading to wallpaper transition.
+ final WindowState oldWallpaper =
+ (mWallpaperControllerLocked.isWallpaperTargetAnimating() || !showWallpaper)
+ ? null
+ : wallpaperTarget;
+ final ArraySet<AppWindowToken> openingApps = mDisplayContent.mOpeningApps;
+ final ArraySet<AppWindowToken> closingApps = mDisplayContent.mClosingApps;
+ final AppWindowToken topOpeningApp = getTopApp(mDisplayContent.mOpeningApps,
+ false /* ignoreHidden */);
+ final AppWindowToken topClosingApp = getTopApp(mDisplayContent.mClosingApps,
+ true /* ignoreHidden */);
+
+ boolean openingCanBeWallpaperTarget = canBeWallpaperTarget(openingApps);
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ "New wallpaper target=" + wallpaperTarget
+ + ", oldWallpaper=" + oldWallpaper
+ + ", openingApps=" + openingApps
+ + ", closingApps=" + closingApps);
+
+ if (openingCanBeWallpaperTarget && transit == TRANSIT_KEYGUARD_GOING_AWAY) {
+ transit = TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ "New transit: " + AppTransition.appTransitionToString(transit));
+ }
+ // We never want to change from a Keyguard transit to a non-Keyguard transit, as our logic
+ // relies on the fact that we always execute a Keyguard transition after preparing one.
+ else if (!isKeyguardGoingAwayTransit(transit)) {
+ if (closingAppHasWallpaper && openingAppHasWallpaper) {
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Wallpaper animation!");
+ switch (transit) {
+ case TRANSIT_ACTIVITY_OPEN:
+ case TRANSIT_TASK_OPEN:
+ case TRANSIT_TASK_TO_FRONT:
+ transit = TRANSIT_WALLPAPER_INTRA_OPEN;
+ break;
+ case TRANSIT_ACTIVITY_CLOSE:
+ case TRANSIT_TASK_CLOSE:
+ case TRANSIT_TASK_TO_BACK:
+ transit = TRANSIT_WALLPAPER_INTRA_CLOSE;
+ break;
+ }
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ "New transit: " + AppTransition.appTransitionToString(transit));
+ } else if (oldWallpaper != null && !mDisplayContent.mOpeningApps.isEmpty()
+ && !openingApps.contains(oldWallpaper.mAppToken)
+ && closingApps.contains(oldWallpaper.mAppToken)
+ && topClosingApp == oldWallpaper.mAppToken) {
+ // We are transitioning from an activity with a wallpaper to one without.
+ transit = TRANSIT_WALLPAPER_CLOSE;
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit away from wallpaper: "
+ + AppTransition.appTransitionToString(transit));
+ } else if (wallpaperTarget != null && wallpaperTarget.isVisibleLw()
+ && openingApps.contains(wallpaperTarget.mAppToken)
+ && topOpeningApp == wallpaperTarget.mAppToken
+ && transit != TRANSIT_TRANSLUCENT_ACTIVITY_CLOSE) {
+ // We are transitioning from an activity without
+ // a wallpaper to now showing the wallpaper
+ transit = TRANSIT_WALLPAPER_OPEN;
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit into wallpaper: "
+ + AppTransition.appTransitionToString(transit));
+ }
+ }
+ return transit;
+ }
+
+ /**
+ * There are cases where we open/close a new task/activity, but in reality only a translucent
+ * activity on top of existing activities is opening/closing. For that one, we have a different
+ * animation because non of the task/activity animations actually work well with translucent
+ * apps.
+ *
+ * @param transit The current transition type.
+ * @return The current transition type or
+ * {@link WindowManager#TRANSIT_TRANSLUCENT_ACTIVITY_CLOSE}/
+ * {@link WindowManager#TRANSIT_TRANSLUCENT_ACTIVITY_OPEN} if appropriate for the
+ * situation.
+ */
+ @VisibleForTesting
+ int maybeUpdateTransitToTranslucentAnim(int transit) {
+ final boolean taskOrActivity = AppTransition.isTaskTransit(transit)
+ || AppTransition.isActivityTransit(transit);
+ boolean allOpeningVisible = true;
+ boolean allTranslucentOpeningApps = !mDisplayContent.mOpeningApps.isEmpty();
+ for (int i = mDisplayContent.mOpeningApps.size() - 1; i >= 0; i--) {
+ final AppWindowToken token = mDisplayContent.mOpeningApps.valueAt(i);
+ if (!token.isVisible()) {
+ allOpeningVisible = false;
+ if (token.fillsParent()) {
+ allTranslucentOpeningApps = false;
+ }
+ }
+ }
+ boolean allTranslucentClosingApps = !mDisplayContent.mClosingApps.isEmpty();
+ for (int i = mDisplayContent.mClosingApps.size() - 1; i >= 0; i--) {
+ if (mDisplayContent.mClosingApps.valueAt(i).fillsParent()) {
+ allTranslucentClosingApps = false;
+ break;
+ }
+ }
+
+ if (taskOrActivity && allTranslucentClosingApps && allOpeningVisible) {
+ return TRANSIT_TRANSLUCENT_ACTIVITY_CLOSE;
+ }
+ if (taskOrActivity && allTranslucentOpeningApps && mDisplayContent.mClosingApps.isEmpty()) {
+ return TRANSIT_TRANSLUCENT_ACTIVITY_OPEN;
+ }
+ return transit;
+ }
+
+ private boolean canBeWallpaperTarget(ArraySet<AppWindowToken> apps) {
+ for (int i = apps.size() - 1; i >= 0; i--) {
+ if (apps.valueAt(i).windowsCanBeWallpaperTarget()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Finds the top app in a list of apps, using its {@link AppWindowToken#getPrefixOrderIndex} to
+ * compare z-order.
+ *
+ * @param apps The list of apps to search.
+ * @param ignoreHidden If set to true, ignores apps that are {@link AppWindowToken#isHidden}.
+ * @return The top {@link AppWindowToken}.
+ */
+ private AppWindowToken getTopApp(ArraySet<AppWindowToken> apps, boolean ignoreHidden) {
+ int topPrefixOrderIndex = Integer.MIN_VALUE;
+ AppWindowToken topApp = null;
+ for (int i = apps.size() - 1; i >= 0; i--) {
+ final AppWindowToken app = apps.valueAt(i);
+ if (ignoreHidden && app.isHidden()) {
+ continue;
+ }
+ final int prefixOrderIndex = app.getPrefixOrderIndex();
+ if (prefixOrderIndex > topPrefixOrderIndex) {
+ topPrefixOrderIndex = prefixOrderIndex;
+ topApp = app;
+ }
+ }
+ return topApp;
+ }
+
+ private void processApplicationsAnimatingInPlace(int transit) {
+ if (transit == TRANSIT_TASK_IN_PLACE) {
+ // Find the focused window
+ final WindowState win = mDisplayContent.findFocusedWindow();
+ if (win != null) {
+ final AppWindowToken wtoken = win.mAppToken;
+ if (DEBUG_APP_TRANSITIONS)
+ Slog.v(TAG, "Now animating app in place " + wtoken);
+ wtoken.cancelAnimation();
+ wtoken.applyAnimationLocked(null, transit, false, false);
+ wtoken.updateReportedVisibilityLocked();
+ wtoken.showAllWindowsLocked();
+ }
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/wm/AppWindowContainerController.java b/services/core/java/com/android/server/wm/AppWindowContainerController.java
index 330c54c..7435ea5 100644
--- a/services/core/java/com/android/server/wm/AppWindowContainerController.java
+++ b/services/core/java/com/android/server/wm/AppWindowContainerController.java
@@ -16,6 +16,15 @@
package com.android.server.wm;
+import static android.app.ActivityOptions.ANIM_CLIP_REVEAL;
+import static android.app.ActivityOptions.ANIM_CUSTOM;
+import static android.app.ActivityOptions.ANIM_OPEN_CROSS_PROFILE_APPS;
+import static android.app.ActivityOptions.ANIM_REMOTE_ANIMATION;
+import static android.app.ActivityOptions.ANIM_SCALE_UP;
+import static android.app.ActivityOptions.ANIM_THUMBNAIL_ASPECT_SCALE_DOWN;
+import static android.app.ActivityOptions.ANIM_THUMBNAIL_ASPECT_SCALE_UP;
+import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN;
+import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_UP;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
@@ -30,14 +39,20 @@
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.app.ActivityManager.TaskSnapshot;
+import android.app.ActivityOptions;
+import android.content.Intent;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
+import android.graphics.GraphicBuffer;
+import android.graphics.Rect;
import android.os.Debug;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.util.Slog;
+import android.view.AppTransitionAnimationSpec;
+import android.view.IAppTransitionAnimationSpecsFuture;
import android.view.IApplicationToken;
import android.view.RemoteAnimationDefinition;
import android.view.WindowManager;
@@ -324,6 +339,7 @@
}
final AppWindowToken wtoken = mContainer;
+ final AppTransition appTransition = mContainer.getDisplayContent().mAppTransition;
// Don't set visibility to false if we were already not visible. This prevents WM from
// adding the app to the closing app list which doesn't make sense for something that is
@@ -344,12 +360,13 @@
}
if (DEBUG_APP_TRANSITIONS || DEBUG_ORIENTATION) Slog.v(TAG_WM, "setAppVisibility("
- + mToken + ", visible=" + visible + "): " + mService.mAppTransition
+ + mToken + ", visible=" + visible + "): " + appTransition
+ " hidden=" + wtoken.isHidden() + " hiddenRequested="
+ wtoken.hiddenRequested + " Callers=" + Debug.getCallers(6));
- mService.mOpeningApps.remove(wtoken);
- mService.mClosingApps.remove(wtoken);
+ final DisplayContent displayContent = mContainer.getDisplayContent();
+ displayContent.mOpeningApps.remove(wtoken);
+ displayContent.mClosingApps.remove(wtoken);
wtoken.waitingToShow = false;
wtoken.hiddenRequested = !visible;
wtoken.mDeferHidingClient = deferHidingClient;
@@ -360,12 +377,12 @@
// if made visible again.
wtoken.removeDeadWindows();
} else {
- if (!mService.mAppTransition.isTransitionSet()
- && mService.mAppTransition.isReady()) {
+ if (!appTransition.isTransitionSet()
+ && appTransition.isReady()) {
// Add the app mOpeningApps if transition is unset but ready. This means
// we're doing a screen freeze, and the unfreeze will wait for all opening
// apps to be ready.
- mService.mOpeningApps.add(wtoken);
+ displayContent.mOpeningApps.add(wtoken);
}
wtoken.startingMoved = false;
// If the token is currently hidden (should be the common case), or has been
@@ -395,16 +412,16 @@
// If we are preparing an app transition, then delay changing
// the visibility of this token until we execute that transition.
- if (wtoken.okToAnimate() && mService.mAppTransition.isTransitionSet()) {
+ if (wtoken.okToAnimate() && appTransition.isTransitionSet()) {
wtoken.inPendingTransaction = true;
if (visible) {
- mService.mOpeningApps.add(wtoken);
+ displayContent.mOpeningApps.add(wtoken);
wtoken.mEnteringAnimation = true;
} else {
- mService.mClosingApps.add(wtoken);
+ displayContent.mClosingApps.add(wtoken);
wtoken.mEnteringAnimation = false;
}
- if (mService.mAppTransition.getAppTransition()
+ if (appTransition.getAppTransition()
== WindowManager.TRANSIT_TASK_OPEN_BEHIND) {
// We're launchingBehind, add the launching activity to mOpeningApps.
final WindowState win = mContainer.getDisplayContent().findFocusedWindow();
@@ -415,7 +432,7 @@
+ " adding " + focusedToken + " to mOpeningApps");
// Force animation to be loaded.
focusedToken.setHidden(true);
- mService.mOpeningApps.add(focusedToken);
+ displayContent.mOpeningApps.add(focusedToken);
}
}
}
@@ -434,7 +451,8 @@
public void notifyUnknownVisibilityLaunched() {
synchronized(mWindowMap) {
if (mContainer != null) {
- mService.mUnknownAppVisibilityController.notifyLaunched(mContainer);
+ mContainer.getDisplayContent().mUnknownAppVisibilityController.notifyLaunched(
+ mContainer);
}
}
}
@@ -547,7 +565,8 @@
private int getStartingWindowType(boolean newTask, boolean taskSwitch, boolean processRunning,
boolean allowTaskSnapshot, boolean activityCreated, boolean fromRecents,
TaskSnapshot snapshot) {
- if (mService.mAppTransition.getAppTransition() == TRANSIT_DOCK_TASK_FROM_RECENTS) {
+ if (mContainer.getDisplayContent().mAppTransition.getAppTransition()
+ == TRANSIT_DOCK_TASK_FROM_RECENTS) {
// TODO(b/34099271): Remove this statement to add back the starting window and figure
// out why it causes flickering, the starting window appears over the thumbnail while
// the docked from recents transition occurs
@@ -753,6 +772,104 @@
}
/**
+ * Apply override app transition base on options & animation type.
+ */
+ public void applyOptionsLocked(ActivityOptions pendingOptions, Intent intent) {
+ synchronized (mWindowMap) {
+ final int animationType = pendingOptions.getAnimationType();
+ final DisplayContent displayContent = mContainer.getDisplayContent();
+ switch (animationType) {
+ case ANIM_CUSTOM:
+ displayContent.mAppTransition.overridePendingAppTransition(
+ pendingOptions.getPackageName(),
+ pendingOptions.getCustomEnterResId(),
+ pendingOptions.getCustomExitResId(),
+ pendingOptions.getOnAnimationStartListener());
+ break;
+ case ANIM_CLIP_REVEAL:
+ displayContent.mAppTransition.overridePendingAppTransitionClipReveal(
+ pendingOptions.getStartX(), pendingOptions.getStartY(),
+ pendingOptions.getWidth(), pendingOptions.getHeight());
+ if (intent.getSourceBounds() == null) {
+ intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
+ pendingOptions.getStartY(),
+ pendingOptions.getStartX() + pendingOptions.getWidth(),
+ pendingOptions.getStartY() + pendingOptions.getHeight()));
+ }
+ break;
+ case ANIM_SCALE_UP:
+ displayContent.mAppTransition.overridePendingAppTransitionScaleUp(
+ pendingOptions.getStartX(), pendingOptions.getStartY(),
+ pendingOptions.getWidth(), pendingOptions.getHeight());
+ if (intent.getSourceBounds() == null) {
+ intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
+ pendingOptions.getStartY(),
+ pendingOptions.getStartX() + pendingOptions.getWidth(),
+ pendingOptions.getStartY() + pendingOptions.getHeight()));
+ }
+ break;
+ case ANIM_THUMBNAIL_SCALE_UP:
+ case ANIM_THUMBNAIL_SCALE_DOWN:
+ final boolean scaleUp = (animationType == ANIM_THUMBNAIL_SCALE_UP);
+ final GraphicBuffer buffer = pendingOptions.getThumbnail();
+ displayContent.mAppTransition.overridePendingAppTransitionThumb(buffer,
+ pendingOptions.getStartX(), pendingOptions.getStartY(),
+ pendingOptions.getOnAnimationStartListener(),
+ scaleUp);
+ if (intent.getSourceBounds() == null && buffer != null) {
+ intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
+ pendingOptions.getStartY(),
+ pendingOptions.getStartX() + buffer.getWidth(),
+ pendingOptions.getStartY() + buffer.getHeight()));
+ }
+ break;
+ case ANIM_THUMBNAIL_ASPECT_SCALE_UP:
+ case ANIM_THUMBNAIL_ASPECT_SCALE_DOWN:
+ final AppTransitionAnimationSpec[] specs = pendingOptions.getAnimSpecs();
+ final IAppTransitionAnimationSpecsFuture specsFuture =
+ pendingOptions.getSpecsFuture();
+ if (specsFuture != null) {
+ // TODO(multidisplay): Shouldn't be really used anymore from next CL.
+ displayContent.mAppTransition.overridePendingAppTransitionMultiThumbFuture(
+ specsFuture, pendingOptions.getOnAnimationStartListener(),
+ animationType == ANIM_THUMBNAIL_ASPECT_SCALE_UP);
+ } else if (animationType == ANIM_THUMBNAIL_ASPECT_SCALE_DOWN
+ && specs != null) {
+ displayContent.mAppTransition.overridePendingAppTransitionMultiThumb(
+ specs, pendingOptions.getOnAnimationStartListener(),
+ pendingOptions.getAnimationFinishedListener(), false);
+ } else {
+ displayContent.mAppTransition.overridePendingAppTransitionAspectScaledThumb(
+ pendingOptions.getThumbnail(),
+ pendingOptions.getStartX(), pendingOptions.getStartY(),
+ pendingOptions.getWidth(), pendingOptions.getHeight(),
+ pendingOptions.getOnAnimationStartListener(),
+ (animationType == ANIM_THUMBNAIL_ASPECT_SCALE_UP));
+ if (intent.getSourceBounds() == null) {
+ intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
+ pendingOptions.getStartY(),
+ pendingOptions.getStartX() + pendingOptions.getWidth(),
+ pendingOptions.getStartY() + pendingOptions.getHeight()));
+ }
+ }
+ break;
+ case ANIM_OPEN_CROSS_PROFILE_APPS:
+ displayContent.mAppTransition
+ .overridePendingAppTransitionStartCrossProfileApps();
+ break;
+ case ANIM_REMOTE_ANIMATION:
+ // TODO(multidisplay): Will pass displayId and adjust dependencies from next CL.
+ displayContent.mAppTransition.overridePendingAppTransitionRemote(
+ pendingOptions.getRemoteAnimationAdapter());
+ break;
+ default:
+ Slog.e(TAG_WM, "applyOptionsLocked: Unknown animationType=" + animationType);
+ break;
+ }
+ }
+ }
+
+ /**
* Notifies AWT that this app is waiting to pause in order to determine if it will enter PIP.
* This information helps AWT know that the app is in the process of pausing before it gets the
* signal on the WM side.
diff --git a/services/core/java/com/android/server/wm/AppWindowThumbnail.java b/services/core/java/com/android/server/wm/AppWindowThumbnail.java
index ad92f81..729f89b 100644
--- a/services/core/java/com/android/server/wm/AppWindowThumbnail.java
+++ b/services/core/java/com/android/server/wm/AppWindowThumbnail.java
@@ -96,7 +96,7 @@
anim.scaleCurrentDuration(mAppToken.mService.getTransitionAnimationScaleLocked());
mSurfaceAnimator.startAnimation(t, new LocalAnimationAdapter(
new WindowAnimationSpec(anim, position,
- mAppToken.mService.mAppTransition.canSkipFirstFrame()),
+ mAppToken.getDisplayContent().mAppTransition.canSkipFirstFrame()),
mAppToken.mService.mSurfaceAnimationRunner), false /* hidden */);
}
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index e38e229..9baafcb 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -111,6 +111,7 @@
import java.io.PrintWriter;
import java.util.ArrayDeque;
import java.util.ArrayList;
+import java.util.function.Consumer;
class AppTokenList extends ArrayList<AppWindowToken> {
}
@@ -500,14 +501,14 @@
setClientHidden(!visible);
}
- if (!mService.mClosingApps.contains(this) && !mService.mOpeningApps.contains(this)) {
+ if (!getDisplayContent().mClosingApps.contains(this)
+ && !getDisplayContent().mOpeningApps.contains(this)) {
// The token is not closing nor opening, so even if there is an animation set, that
// doesn't mean that it goes through the normal app transition cycle so we have
// to inform the docked controller about visibility change.
// TODO(multi-display): notify docked divider on all displays where visibility was
// affected.
- mService.getDefaultDisplayContentLocked().getDockedDividerController()
- .notifyAppVisibilityChanged();
+ getDisplayContent().getDockedDividerController().notifyAppVisibilityChanged();
// Take the screenshot before possibly hiding the WSA, otherwise the screenshot
// will not be taken.
@@ -524,7 +525,7 @@
// no animation but there will still be a transition set.
// We still need to delay hiding the surface such that it
// can be synchronized with showing the next surface in the transition.
- if (isHidden() && !delayed && !mService.mAppTransition.isTransitionSet()) {
+ if (isHidden() && !delayed && !getDisplayContent().mAppTransition.isTransitionSet()) {
SurfaceControl.openTransaction();
for (int i = mChildren.size() - 1; i >= 0; i--) {
mChildren.get(i).mWinAnimator.hide("immediately hidden");
@@ -630,14 +631,14 @@
boolean delayed = setVisibility(null, false, TRANSIT_UNSET, true, mVoiceInteraction);
- mService.mOpeningApps.remove(this);
- mService.mUnknownAppVisibilityController.appRemovedOrHidden(this);
+ getDisplayContent().mOpeningApps.remove(this);
+ getDisplayContent().mUnknownAppVisibilityController.appRemovedOrHidden(this);
mService.mTaskSnapshotController.onAppRemoved(this);
waitingToShow = false;
- if (mService.mClosingApps.contains(this)) {
+ if (getDisplayContent().mClosingApps.contains(this)) {
delayed = true;
- } else if (mService.mAppTransition.isTransitionSet()) {
- mService.mClosingApps.add(this);
+ } else if (getDisplayContent().mAppTransition.isTransitionSet()) {
+ getDisplayContent().mClosingApps.add(this);
delayed = true;
}
@@ -652,10 +653,10 @@
}
// If this window was animating, then we need to ensure that the app transition notifies
- // that animations have completed in WMS.handleAnimatingStoppedAndTransitionLocked(), so
- // add to that list now
+ // that animations have completed in DisplayContent.handleAnimatingStoppedAndTransition(),
+ // so add to that list now
if (isSelfAnimating()) {
- mService.mNoAnimationNotifyOnTransitionFinished.add(token);
+ getDisplayContent().mNoAnimationNotifyOnTransitionFinished.add(token);
}
final TaskStack stack = getStack();
@@ -795,7 +796,7 @@
if (task == null) {
// It is possible we have been marked as a closing app earlier. We must remove ourselves
// from this list so we do not participate in any future animations.
- mService.mClosingApps.remove(this);
+ getDisplayContent().mClosingApps.remove(this);
} else if (mLastParent != null && mLastParent.mStack != null) {
task.mStack.mExitingAppTokens.remove(this);
}
@@ -1219,7 +1220,7 @@
if (tStartingWindow != null && fromToken.startingSurface != null) {
// In this case, the starting icon has already been displayed, so start
// letting windows get shown immediately without any more transitions.
- mService.mSkipAppTransitionAnimation = true;
+ getDisplayContent().mSkipAppTransitionAnimation = true;
if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Moving existing starting " + tStartingWindow
+ " from " + fromToken + " to " + this);
@@ -1269,7 +1270,7 @@
// When transferring an animation, we no longer need to apply an animation to the
// the token we transfer the animation over. Thus, remove the animation from
// pending opening apps.
- mService.mOpeningApps.remove(this);
+ getDisplayContent().mOpeningApps.remove(this);
mService.updateFocusedWindowLocked(
UPDATE_FOCUS_WILL_PLACE_SURFACES, true /*updateInputWindows*/);
@@ -1323,8 +1324,8 @@
// The {@link AppWindowToken} should only specify an orientation when it is not closing or
// going to the bottom. Allowing closing {@link AppWindowToken} to participate can lead to
// an Activity in another task being started in the wrong orientation during the transition.
- if (!(sendingToBottom || mService.mClosingApps.contains(this))
- && (isVisible() || mService.mOpeningApps.contains(this))) {
+ if (!(sendingToBottom || getDisplayContent().mClosingApps.contains(this))
+ && (isVisible() || getDisplayContent().mOpeningApps.contains(this))) {
return mOrientation;
}
@@ -1398,7 +1399,7 @@
setAppLayoutChanges(FINISH_LAYOUT_REDO_ANIM, "checkAppWindowsReadyToShow");
// We can now show all of the drawn windows!
- if (!mService.mOpeningApps.contains(this) && canShowWindows()) {
+ if (!getDisplayContent().mOpeningApps.contains(this) && canShowWindows()) {
showAllWindowsLocked();
}
}
@@ -1572,6 +1573,11 @@
return forAllWindowsUnchecked(callback, traverseTopToBottom);
}
+ @Override
+ void forAllAppWindows(Consumer<AppWindowToken> callback) {
+ callback.accept(this);
+ }
+
boolean forAllWindowsUnchecked(ToBooleanFunction<WindowState> callback,
boolean traverseTopToBottom) {
return super.forAllWindows(callback, traverseTopToBottom);
@@ -1629,7 +1635,8 @@
final boolean containsShowWhenLocked = containsShowWhenLockedWindow();
if (containsDismissKeyguard != mLastContainsDismissKeyguardWindow
|| containsShowWhenLocked != mLastContainsShowWhenLockedWindow) {
- mService.notifyKeyguardFlagsChanged(null /* callback */);
+ mService.notifyKeyguardFlagsChanged(null /* callback */,
+ getDisplayContent().getDisplayId());
}
mLastContainsDismissKeyguardWindow = containsDismissKeyguard;
mLastContainsShowWhenLockedWindow = containsShowWhenLocked;
@@ -1787,19 +1794,20 @@
getAnimationBounds(mTmpPoint, mTmpRect);
// Delaying animation start isn't compatible with remote animations at all.
- if (mService.mAppTransition.getRemoteAnimationController() != null
+ if (getDisplayContent().mAppTransition.getRemoteAnimationController() != null
&& !mSurfaceAnimator.isAnimationStartDelayed()) {
- adapter = mService.mAppTransition.getRemoteAnimationController()
+ adapter = getDisplayContent().mAppTransition.getRemoteAnimationController()
.createAnimationAdapter(this, mTmpPoint, mTmpRect);
} else {
- final int appStackClipMode = mService.mAppTransition.getAppStackClipMode();
+ final int appStackClipMode =
+ getDisplayContent().mAppTransition.getAppStackClipMode();
mNeedsAnimationBoundsLayer = (appStackClipMode == STACK_CLIP_AFTER_ANIM);
final Animation a = loadAnimation(lp, transit, enter, isVoiceInteraction);
if (a != null) {
adapter = new LocalAnimationAdapter(
new WindowAnimationSpec(a, mTmpPoint, mTmpRect,
- mService.mAppTransition.canSkipFirstFrame(),
+ getDisplayContent().mAppTransition.canSkipFirstFrame(),
appStackClipMode,
true /* isAppAnimation */),
mService.mSurfaceAnimationRunner);
@@ -1807,7 +1815,7 @@
mNeedsZBoost = true;
}
mTransit = transit;
- mTransitFlags = mService.mAppTransition.getTransitFlags();
+ mTransitFlags = getDisplayContent().mAppTransition.getTransitFlags();
} else {
adapter = null;
}
@@ -1877,7 +1885,7 @@
+ " transit=" + AppTransition.appTransitionToString(transit) + " enter=" + enter
+ " frame=" + frame + " insets=" + insets + " surfaceInsets=" + surfaceInsets);
final Configuration displayConfig = displayContent.getConfiguration();
- final Animation a = mService.mAppTransition.loadAnimation(lp, transit, enter,
+ final Animation a = getDisplayContent().mAppTransition.loadAnimation(lp, transit, enter,
displayConfig.uiMode, displayConfig.orientation, frame, displayFrame, insets,
surfaceInsets, stableInsets, isVoiceInteraction, freeform, getTask().mTaskId);
if (a != null) {
@@ -2017,7 +2025,7 @@
final ArrayList<WindowState> children = new ArrayList<>(mChildren);
children.forEach(WindowState::onExitAnimationDone);
- mService.mAppTransition.notifyAppTransitionFinishedLocked(token);
+ getDisplayContent().mAppTransition.notifyAppTransitionFinishedLocked(token);
scheduleAnimation();
}
@@ -2048,8 +2056,9 @@
}
boolean isWaitingForTransitionStart() {
- return mService.mAppTransition.isTransitionSet()
- && (mService.mOpeningApps.contains(this) || mService.mClosingApps.contains(this));
+ return getDisplayContent().mAppTransition.isTransitionSet()
+ && (getDisplayContent().mOpeningApps.contains(this)
+ || getDisplayContent().mClosingApps.contains(this));
}
public int getTransit() {
@@ -2066,7 +2075,7 @@
}
final int taskId = getTask().mTaskId;
final GraphicBuffer thumbnailHeader =
- mService.mAppTransition.getAppTransitionThumbnailHeader(taskId);
+ getDisplayContent().mAppTransition.getAppTransitionThumbnailHeader(taskId);
if (thumbnailHeader == null) {
if (DEBUG_APP_TRANSITIONS) Slog.d(TAG, "No thumbnail header bitmap for: " + taskId);
return;
@@ -2095,14 +2104,14 @@
? R.drawable.ic_account_circle
: R.drawable.ic_corp_badge;
final GraphicBuffer thumbnail =
- mService.mAppTransition
+ getDisplayContent().mAppTransition
.createCrossProfileAppsThumbnail(thumbnailDrawableRes, frame);
if (thumbnail == null) {
return;
}
mThumbnail = new AppWindowThumbnail(getPendingTransaction(), this, thumbnail);
final Animation animation =
- mService.mAppTransition.createCrossProfileAppsThumbnailAnimationLocked(
+ getDisplayContent().mAppTransition.createCrossProfileAppsThumbnailAnimationLocked(
win.getFrameLw());
mThumbnail.startAnimation(getPendingTransaction(), animation, new Point(frame.left,
frame.top));
@@ -2119,7 +2128,7 @@
new Rect(0, 0, displayInfo.appWidth, displayInfo.appHeight);
final Rect insets = win != null ? win.getContentInsets() : null;
final Configuration displayConfig = mDisplayContent.getConfiguration();
- return mService.mAppTransition.createThumbnailAspectScaleAnimationLocked(
+ return getDisplayContent().mAppTransition.createThumbnailAspectScaleAnimationLocked(
appRect, insets, thumbnailHeader, getTask().mTaskId, displayConfig.uiMode,
displayConfig.orientation);
}
@@ -2357,4 +2366,11 @@
return forAllWindows(ws -> ws.mAttrs.getColorMode() != COLOR_MODE_DEFAULT,
true /* topToBottom */);
}
+
+ void removeFromPendingTransition() {
+ if (isWaitingForTransitionStart() && mDisplayContent != null) {
+ mDisplayContent.mOpeningApps.remove(this);
+ mDisplayContent.mClosingApps.remove(this);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/wm/BlackFrame.java b/services/core/java/com/android/server/wm/BlackFrame.java
index fff1fa4..e358ad5 100644
--- a/services/core/java/com/android/server/wm/BlackFrame.java
+++ b/services/core/java/com/android/server/wm/BlackFrame.java
@@ -16,21 +16,18 @@
package com.android.server.wm;
-import static android.graphics.PixelFormat.OPAQUE;
-import static android.view.SurfaceControl.FX_SURFACE_DIM;
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC;
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-import java.io.PrintWriter;
-
import android.graphics.Matrix;
-import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.util.Slog;
import android.view.Surface.OutOfResourcesException;
import android.view.SurfaceControl;
+import java.io.PrintWriter;
+
/**
* Four black surfaces put together to make a black frame.
*/
@@ -59,6 +56,7 @@
transaction.setLayerStack(surface, dc.getDisplayId());
transaction.setAlpha(surface, 1);
transaction.setLayer(surface, layer);
+ transaction.setPosition(surface, left, top);
transaction.show(surface);
if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) Slog.i(TAG_WM,
" BLACK " + surface + ": CREATE layer=" + layer);
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index fa9ae52..ba03034 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -65,6 +65,7 @@
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
import static com.android.server.wm.DisplayContentProto.ABOVE_APP_WINDOWS;
+import static com.android.server.wm.DisplayContentProto.APP_TRANSITION;
import static com.android.server.wm.DisplayContentProto.BELOW_APP_WINDOWS;
import static com.android.server.wm.DisplayContentProto.DISPLAY_FRAMES;
import static com.android.server.wm.DisplayContentProto.DISPLAY_INFO;
@@ -80,6 +81,7 @@
import static com.android.server.wm.DisplayContentProto.SURFACE_SIZE;
import static com.android.server.wm.DisplayContentProto.WINDOW_CONTAINER;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_BOOT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS;
@@ -119,6 +121,7 @@
import static com.android.server.wm.WindowStateAnimator.DRAW_PENDING;
import static com.android.server.wm.WindowStateAnimator.READY_TO_SHOW;
+import android.animation.AnimationHandler;
import android.annotation.CallSuper;
import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -155,6 +158,7 @@
import android.view.SurfaceControl.Transaction;
import android.view.SurfaceSession;
import android.view.WindowManagerPolicyConstants.PointerEventListener;
+import android.view.WindowManager;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ToBooleanFunction;
@@ -228,6 +232,21 @@
private boolean mTmpInitial;
private int mMaxUiWidth;
+ final AppTransition mAppTransition;
+ final AppTransitionController mAppTransitionController;
+ boolean mSkipAppTransitionAnimation = false;
+
+ final ArraySet<AppWindowToken> mOpeningApps = new ArraySet<>();
+ final ArraySet<AppWindowToken> mClosingApps = new ArraySet<>();
+ final UnknownAppVisibilityController mUnknownAppVisibilityController;
+ BoundsAnimationController mBoundsAnimationController;
+
+ /**
+ * List of clients without a transtiton animation that we notify once we are done
+ * transitioning since they won't be notified through the app window animator.
+ */
+ final List<IBinder> mNoAnimationNotifyOnTransitionFinished = new ArrayList<>();
+
// Mapping from a token IBinder to a WindowToken object on this display.
private final HashMap<IBinder, WindowToken> mTokenMap = new HashMap();
@@ -821,6 +840,15 @@
mDividerControllerLocked = new DockedStackDividerController(service, this);
mPinnedStackControllerLocked = new PinnedStackController(service, this);
+ mAppTransition = new AppTransition(service.mContext, service, this);
+ mAppTransition.registerListenerLocked(service.mActivityManagerAppTransitionNotifier);
+ mAppTransitionController = new AppTransitionController(service, this);
+ mUnknownAppVisibilityController = new UnknownAppVisibilityController(service, this);
+
+ AnimationHandler animationHandler = new AnimationHandler();
+ mBoundsAnimationController = new BoundsAnimationController(service.mContext,
+ mAppTransition, SurfaceAnimationThread.getHandler(), animationHandler);
+
// We use this as our arbitrary surface size for buffer-less parents
// that don't impose cropping on their children. It may need to be larger
// than the display size because fullscreen windows can be shifted offscreen
@@ -2135,6 +2163,9 @@
+ " to its current displayId=" + mDisplayId);
}
+ // Clean up all pending transitions when stack reparent to another display.
+ stack.forAllAppWindows(AppWindowToken::removeFromPendingTransition);
+
prevDc.mTaskStackContainers.removeChild(stack);
mTaskStackContainers.addStackToDisplay(stack, onTop);
}
@@ -2294,6 +2325,13 @@
void removeImmediately() {
mRemovingDisplay = true;
try {
+ // Clear all transitions & screen frozen states when removing display.
+ mOpeningApps.clear();
+ mClosingApps.clear();
+ mUnknownAppVisibilityController.clear();
+ mAppTransition.removeAppTransitionTimeoutCallbacks();
+ handleAnimatingStoppedAndTransition();
+ mService.stopFreezingDisplayLocked();
super.removeImmediately();
if (DEBUG_DISPLAY) Slog.v(TAG_WM, "Removing display=" + this);
if (mPointerEventDispatcher != null && mTapDetector != null) {
@@ -2514,6 +2552,7 @@
screenRotationAnimation.writeToProto(proto, SCREEN_ROTATION_ANIMATION);
}
mDisplayFrames.writeToProto(proto, DISPLAY_FRAMES);
+ mAppTransition.writeToProto(proto, APP_TRANSITION);
proto.write(SURFACE_SIZE, mSurfaceSize);
if (mFocusedApp != null) {
mFocusedApp.writeNameToProto(proto, FOCUSED_APP);
@@ -2998,11 +3037,10 @@
}
if (highestTarget != null) {
- final AppTransition appTransition = mService.mAppTransition;
- if (DEBUG_INPUT_METHOD) Slog.v(TAG_WM, appTransition + " " + highestTarget
+ if (DEBUG_INPUT_METHOD) Slog.v(TAG_WM, mAppTransition + " " + highestTarget
+ " animating=" + highestTarget.isAnimating());
- if (appTransition.isTransitionSet()) {
+ if (mAppTransition.isTransitionSet()) {
// If we are currently setting up for an animation, hold everything until we
// can find out what will happen.
setInputMethodTarget(highestTarget, true);
@@ -3093,6 +3131,18 @@
pw.println();
}
}
+
+ if (!mOpeningApps.isEmpty() || !mClosingApps.isEmpty()) {
+ pw.println();
+ if (mOpeningApps.size() > 0) {
+ pw.print(" mOpeningApps="); pw.println(mOpeningApps);
+ }
+ if (mClosingApps.size() > 0) {
+ pw.print(" mClosingApps="); pw.println(mClosingApps);
+ }
+ }
+
+ mUnknownAppVisibilityController.dump(pw, " ");
}
void dumpWindowAnimators(PrintWriter pw, String subPrefix) {
@@ -3989,7 +4039,7 @@
final AppTokenList appTokens = mChildren.get(i).mExitingAppTokens;
for (int j = appTokens.size() - 1; j >= 0; --j) {
final AppWindowToken token = appTokens.get(j);
- if (!token.hasVisible && !mService.mClosingApps.contains(token)
+ if (!token.hasVisible && !mClosingApps.contains(token)
&& (!token.mIsExiting || token.isEmpty())) {
// Make sure there is no animation running on this token, so any windows
// associated with it will be removed as soon as their animations are
@@ -4287,8 +4337,8 @@
// Only allow force setting the orientation when all unknown visibilities have been
// resolved, as otherwise we just may be starting another occluding activity.
final boolean isUnoccluding =
- mService.mAppTransition.getAppTransition() == TRANSIT_KEYGUARD_UNOCCLUDE
- && mService.mUnknownAppVisibilityController.allResolved();
+ mAppTransition.getAppTransition() == TRANSIT_KEYGUARD_UNOCCLUDE
+ && mUnknownAppVisibilityController.allResolved();
if (policy.isKeyguardShowingAndNotOccluded() || isUnoccluding) {
return mLastKeyguardForcedOrientation;
}
@@ -4528,4 +4578,56 @@
mPointerEventDispatcher.unregisterInputEventListener(listener);
}
}
+
+ void prepareAppTransition(@WindowManager.TransitionType int transit,
+ boolean alwaysKeepCurrent, @WindowManager.TransitionFlags int flags,
+ boolean forceOverride) {
+ final boolean prepared = mAppTransition.prepareAppTransitionLocked(
+ transit, alwaysKeepCurrent, flags, forceOverride);
+ if (prepared && okToAnimate()) {
+ mSkipAppTransitionAnimation = false;
+ }
+ }
+
+ void executeAppTransition() {
+ if (mAppTransition.isTransitionSet()) {
+ if (DEBUG_APP_TRANSITIONS) {
+ Slog.w(TAG_WM, "Execute app transition: " + mAppTransition + ", displayId: "
+ + mDisplayId + " Callers=" + Debug.getCallers(5));
+ }
+ mAppTransition.setReady();
+ mService.mWindowPlacerLocked.requestTraversal();
+ }
+ }
+
+ /**
+ * Update pendingLayoutChanges after app transition has finished.
+ */
+ void handleAnimatingStoppedAndTransition() {
+ int changes = 0;
+
+ mAppTransition.setIdle();
+
+ for (int i = mNoAnimationNotifyOnTransitionFinished.size() - 1; i >= 0; i--) {
+ final IBinder token = mNoAnimationNotifyOnTransitionFinished.get(i);
+ mAppTransition.notifyAppTransitionFinishedLocked(token);
+ }
+ mNoAnimationNotifyOnTransitionFinished.clear();
+
+ mWallpaperController.hideDeferredWallpapersIfNeeded();
+
+ onAppTransitionDone();
+
+ changes |= FINISH_LAYOUT_REDO_LAYOUT;
+ if (DEBUG_WALLPAPER_LIGHT) {
+ Slog.v(TAG_WM, "Wallpaper layer changed: assigning layers + relayout");
+ }
+ computeImeTarget(true /* updateImeTarget */);
+ mService.mRoot.mWallpaperMayChange = true;
+ // Since the window list has been rebuilt, focus might have to be recomputed since the
+ // actual order of windows might have changed again.
+ mService.mFocusMayChange = true;
+
+ pendingLayoutChanges |= changes;
+ }
}
diff --git a/services/core/java/com/android/server/wm/DisplayWindowController.java b/services/core/java/com/android/server/wm/DisplayWindowController.java
index 3282b1c..01d556a 100644
--- a/services/core/java/com/android/server/wm/DisplayWindowController.java
+++ b/services/core/java/com/android/server/wm/DisplayWindowController.java
@@ -16,6 +16,10 @@
package com.android.server.wm;
+import static android.view.WindowManager.TRANSIT_ACTIVITY_OPEN;
+import static android.view.WindowManager.TRANSIT_TASK_OPEN;
+import static android.view.WindowManager.TRANSIT_TASK_TO_FRONT;
+
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
@@ -23,10 +27,17 @@
import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL;
import android.content.res.Configuration;
+import android.graphics.GraphicBuffer;
import android.os.Binder;
import android.os.IBinder;
+import android.os.IRemoteCallback;
import android.util.Slog;
+import android.view.AppTransitionAnimationSpec;
import android.view.Display;
+import android.view.WindowManager;
+import android.view.WindowManager.TransitionType;
+
+import com.android.internal.annotations.VisibleForTesting;
/**
* Controller for the display container. This is created by activity manager to link activity
@@ -56,6 +67,12 @@
}
}
+ @VisibleForTesting
+ public DisplayWindowController(Display display, WindowManagerService service) {
+ super(null, service);
+ mDisplayId = display.getDisplayId();
+ }
+
@Override
public void removeContainer() {
synchronized (mWindowMap) {
@@ -179,6 +196,124 @@
}
}
+ public void prepareAppTransition(@WindowManager.TransitionType int transit,
+ boolean alwaysKeepCurrent) {
+ prepareAppTransition(transit, alwaysKeepCurrent, 0 /* flags */, false /* forceOverride */);
+ }
+
+ /**
+ * @param transit What kind of transition is happening. Use one of the constants
+ * AppTransition.TRANSIT_*.
+ * @param alwaysKeepCurrent If true and a transition is already set, new transition will NOT
+ * be set.
+ * @param flags Additional flags for the app transition, Use a combination of the constants
+ * AppTransition.TRANSIT_FLAG_*.
+ * @param forceOverride Always override the transit, not matter what was set previously.
+ */
+ public void prepareAppTransition(@WindowManager.TransitionType int transit,
+ boolean alwaysKeepCurrent, @WindowManager.TransitionFlags int flags,
+ boolean forceOverride) {
+ synchronized (mWindowMap) {
+ mRoot.getDisplayContent(mDisplayId).prepareAppTransition(transit, alwaysKeepCurrent,
+ flags, forceOverride);
+ }
+ }
+
+ public void executeAppTransition() {
+ synchronized (mWindowMap) {
+ mRoot.getDisplayContent(mDisplayId).executeAppTransition();
+ }
+ }
+
+ public void overridePendingAppTransition(String packageName,
+ int enterAnim, int exitAnim, IRemoteCallback startedCallback) {
+ synchronized (mWindowMap) {
+ mRoot.getDisplayContent(mDisplayId).mAppTransition.overridePendingAppTransition(
+ packageName, enterAnim, exitAnim, startedCallback);
+ }
+ }
+
+ public void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth,
+ int startHeight) {
+ synchronized (mWindowMap) {
+ mRoot.getDisplayContent(mDisplayId).mAppTransition.overridePendingAppTransitionScaleUp(
+ startX, startY, startWidth, startHeight);
+ }
+ }
+
+ public void overridePendingAppTransitionClipReveal(int startX, int startY,
+ int startWidth, int startHeight) {
+ synchronized (mWindowMap) {
+ mRoot.getDisplayContent(mDisplayId)
+ .mAppTransition.overridePendingAppTransitionClipReveal(startX, startY,
+ startWidth, startHeight);
+ }
+ }
+
+ public void overridePendingAppTransitionThumb(GraphicBuffer srcThumb, int startX,
+ int startY, IRemoteCallback startedCallback, boolean scaleUp) {
+ synchronized (mWindowMap) {
+ mRoot.getDisplayContent(mDisplayId)
+ .mAppTransition.overridePendingAppTransitionThumb(srcThumb, startX, startY,
+ startedCallback, scaleUp);
+ }
+ }
+
+ public void overridePendingAppTransitionAspectScaledThumb(GraphicBuffer srcThumb, int startX,
+ int startY, int targetWidth, int targetHeight, IRemoteCallback startedCallback,
+ boolean scaleUp) {
+ synchronized (mWindowMap) {
+ mRoot.getDisplayContent(mDisplayId)
+ .mAppTransition.overridePendingAppTransitionAspectScaledThumb(srcThumb, startX,
+ startY, targetWidth, targetHeight, startedCallback, scaleUp);
+ }
+ }
+
+ public void overridePendingAppTransitionMultiThumb(AppTransitionAnimationSpec[] specs,
+ IRemoteCallback onAnimationStartedCallback, IRemoteCallback onAnimationFinishedCallback,
+ boolean scaleUp) {
+ synchronized (mWindowMap) {
+ mRoot.getDisplayContent(mDisplayId)
+ .mAppTransition.overridePendingAppTransitionMultiThumb(specs,
+ onAnimationStartedCallback, onAnimationFinishedCallback, scaleUp);
+ }
+ }
+
+ public void overridePendingAppTransitionStartCrossProfileApps() {
+ synchronized (mWindowMap) {
+ mRoot.getDisplayContent(mDisplayId)
+ .mAppTransition.overridePendingAppTransitionStartCrossProfileApps();
+ }
+ }
+
+ public void overridePendingAppTransitionInPlace(String packageName, int anim) {
+ synchronized (mWindowMap) {
+ mRoot.getDisplayContent(mDisplayId)
+ .mAppTransition.overrideInPlaceAppTransition(packageName, anim);
+ }
+ }
+
+ /**
+ * Get Pending App transition of display.
+ *
+ * @return The pending app transition of the display.
+ */
+ public @TransitionType int getPendingAppTransition() {
+ synchronized (mWindowMap) {
+ return mRoot.getDisplayContent(mDisplayId).mAppTransition.getAppTransition();
+ }
+ }
+
+ /**
+ * Check if pending app transition is for activity / task launch.
+ */
+ public boolean isNextTransitionForward() {
+ final int transit = getPendingAppTransition();
+ return transit == TRANSIT_ACTIVITY_OPEN
+ || transit == TRANSIT_TASK_OPEN
+ || transit == TRANSIT_TASK_TO_FRONT;
+ }
+
@Override
public String toString() {
return "{DisplayWindowController displayId=" + mDisplayId + "}";
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index ac93848..84c3aa3 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -27,14 +27,15 @@
import static android.view.WindowManager.DOCKED_LEFT;
import static android.view.WindowManager.DOCKED_RIGHT;
import static android.view.WindowManager.DOCKED_TOP;
+import static android.view.WindowManager.TRANSIT_NONE;
+
import static com.android.server.wm.AppTransition.DEFAULT_APP_TRANSITION_DURATION;
import static com.android.server.wm.AppTransition.TOUCH_RESPONSE_INTERPOLATOR;
-import static android.view.WindowManager.TRANSIT_NONE;
+import static com.android.server.wm.DockedStackDividerControllerProto.MINIMIZED_DOCK;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.WindowManagerService.H.NOTIFY_DOCKED_STACK_MINIMIZED_CHANGED;
import static com.android.server.wm.WindowManagerService.LAYER_OFFSET_DIM;
-import static com.android.server.wm.DockedStackDividerControllerProto.MINIMIZED_DOCK;
import android.content.Context;
import android.content.res.Configuration;
@@ -531,7 +532,7 @@
final TaskStack stack =
mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility();
final long transitionDuration = isAnimationMaximizing()
- ? mService.mAppTransition.getLastClipRevealTransitionDuration()
+ ? mDisplayContent.mAppTransition.getLastClipRevealTransitionDuration()
: DEFAULT_APP_TRANSITION_DURATION;
mAnimationDuration = (long)
(transitionDuration * mService.getTransitionAnimationScaleLocked());
@@ -950,7 +951,7 @@
return naturalAmount;
}
final int minimizeDistance = stack.getMinimizeDistance();
- float startPrime = mService.mAppTransition.getLastClipRevealMaxTranslation()
+ final float startPrime = mDisplayContent.mAppTransition.getLastClipRevealMaxTranslation()
/ (float) minimizeDistance;
final float amountPrime = t * mAnimationTarget + (1 - t) * startPrime;
final float t2 = Math.min(t / mMaximizeMeetFraction, 1);
@@ -963,12 +964,12 @@
*/
private float getClipRevealMeetFraction(TaskStack stack) {
if (!isAnimationMaximizing() || stack == null ||
- !mService.mAppTransition.hadClipRevealAnimation()) {
+ !mDisplayContent.mAppTransition.hadClipRevealAnimation()) {
return 1f;
}
final int minimizeDistance = stack.getMinimizeDistance();
- final float fraction = Math.abs(mService.mAppTransition.getLastClipRevealMaxTranslation())
- / (float) minimizeDistance;
+ final float fraction = Math.abs(mDisplayContent.mAppTransition
+ .getLastClipRevealMaxTranslation()) / (float) minimizeDistance;
final float t = Math.max(0, Math.min(1, (fraction - CLIP_REVEAL_MEET_FRACTION_MIN)
/ (CLIP_REVEAL_MEET_FRACTION_MAX - CLIP_REVEAL_MEET_FRACTION_MIN)));
return CLIP_REVEAL_MEET_EARLIEST
diff --git a/services/core/java/com/android/server/wm/PinnedStackController.java b/services/core/java/com/android/server/wm/PinnedStackController.java
index b64d4f8..52b0241 100644
--- a/services/core/java/com/android/server/wm/PinnedStackController.java
+++ b/services/core/java/com/android/server/wm/PinnedStackController.java
@@ -20,10 +20,10 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.PinnedStackControllerProto.DEFAULT_BOUNDS;
import static com.android.server.wm.PinnedStackControllerProto.MOVEMENT_BOUNDS;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.app.RemoteAction;
import android.content.pm.ParceledListSlice;
diff --git a/services/core/java/com/android/server/wm/PinnedStackWindowController.java b/services/core/java/com/android/server/wm/PinnedStackWindowController.java
index 02fbfba..1807eeb 100644
--- a/services/core/java/com/android/server/wm/PinnedStackWindowController.java
+++ b/services/core/java/com/android/server/wm/PinnedStackWindowController.java
@@ -117,11 +117,12 @@
final Rect finalToBounds = toBounds;
final @SchedulePipModeChangedState int finalSchedulePipModeChangedState =
schedulePipModeChangedState;
- mService.mBoundsAnimationController.getHandler().post(() -> {
+ final DisplayContent displayContent = mContainer.getDisplayContent();
+ displayContent.mBoundsAnimationController.getHandler().post(() -> {
if (mContainer == null) {
return;
}
- mService.mBoundsAnimationController.animateBounds(mContainer, fromBounds,
+ displayContent.mBoundsAnimationController.animateBounds(mContainer, fromBounds,
finalToBounds, animationDuration, finalSchedulePipModeChangedState,
fromFullscreen, toFullscreen);
});
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index 5c80759..c4fbee9 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -467,7 +467,8 @@
// so if we are actually transitioning there, notify again here
if (mTargetAppToken != null) {
if (reorderMode == REORDER_MOVE_TO_TOP || reorderMode == REORDER_KEEP_IN_PLACE) {
- mService.mAppTransition.notifyAppTransitionFinishedLocked(mTargetAppToken.token);
+ mService.mRoot.getDisplayContent(mDisplayId)
+ .mAppTransition.notifyAppTransitionFinishedLocked(mTargetAppToken.token);
}
}
}
diff --git a/services/core/java/com/android/server/wm/RemoteAnimationController.java b/services/core/java/com/android/server/wm/RemoteAnimationController.java
index 8ec0a01..0ec4baf 100644
--- a/services/core/java/com/android/server/wm/RemoteAnimationController.java
+++ b/services/core/java/com/android/server/wm/RemoteAnimationController.java
@@ -317,7 +317,7 @@
}
private int getMode() {
- if (mService.mOpeningApps.contains(mAppWindowToken)) {
+ if (mAppWindowToken.getDisplayContent().mOpeningApps.contains(mAppWindowToken)) {
return RemoteAnimationTarget.MODE_OPENING;
} else {
return RemoteAnimationTarget.MODE_CLOSING;
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index c8977be..62078f7 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -576,17 +576,15 @@
mSustainedPerformanceModeCurrent = false;
mService.mTransactionSequence++;
- // TODO(multi-display):
+ // TODO(multi-display): recents animation & wallpaper need support multi-display.
final DisplayContent defaultDisplay = mService.getDefaultDisplayContentLocked();
- final DisplayInfo defaultInfo = defaultDisplay.getDisplayInfo();
- final int defaultDw = defaultInfo.logicalWidth;
- final int defaultDh = defaultInfo.logicalHeight;
+ final WindowSurfacePlacer surfacePlacer = mService.mWindowPlacerLocked;
if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
">>> OPEN TRANSACTION performLayoutAndPlaceSurfaces");
mService.openSurfaceTransaction();
try {
- applySurfaceChangesTransaction(recoveringMemory, defaultDw, defaultDh);
+ applySurfaceChangesTransaction(recoveringMemory);
} catch (RuntimeException e) {
Slog.wtf(TAG, "Unhandled exception in Window Manager", e);
} finally {
@@ -594,39 +592,13 @@
if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
"<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces");
}
-
mService.mAnimator.executeAfterPrepareSurfacesRunnables();
- final WindowSurfacePlacer surfacePlacer = mService.mWindowPlacerLocked;
-
- // If we are ready to perform an app transition, check through all of the app tokens to be
- // shown and see if they are ready to go.
- if (mService.mAppTransition.isReady()) {
- // This needs to be split into two expressions, as handleAppTransitionReadyLocked may
- // modify dc.pendingLayoutChanges, which would get lost when writing
- // defaultDisplay.pendingLayoutChanges |= handleAppTransitionReadyLocked()
- final int layoutChanges = surfacePlacer.handleAppTransitionReadyLocked();
- defaultDisplay.pendingLayoutChanges |= layoutChanges;
- if (DEBUG_LAYOUT_REPEATS)
- surfacePlacer.debugLayoutRepeats("after handleAppTransitionReadyLocked",
- defaultDisplay.pendingLayoutChanges);
- }
-
- if (!isAppAnimating() && mService.mAppTransition.isRunning()) {
- // We have finished the animation of an app transition. To do this, we have delayed a
- // lot of operations like showing and hiding apps, moving apps in Z-order, etc. The app
- // token list reflects the correct Z-order, but the window list may now be out of sync
- // with it. So here we will just rebuild the entire app window list. Fun!
- defaultDisplay.pendingLayoutChanges |=
- mService.handleAnimatingStoppedAndTransitionLocked();
- if (DEBUG_LAYOUT_REPEATS)
- surfacePlacer.debugLayoutRepeats("after handleAnimStopAndXitionLock",
- defaultDisplay.pendingLayoutChanges);
- }
+ checkAppTransitionReady(surfacePlacer);
// Defer starting the recents animation until the wallpaper has drawn
final RecentsAnimationController recentsAnimationController =
- mService.getRecentsAnimationController();
+ mService.getRecentsAnimationController();
if (recentsAnimationController != null) {
recentsAnimationController.checkAnimationReady(mWallpaperController);
}
@@ -732,8 +704,8 @@
mUpdateRotation = updateRotationUnchecked();
}
- if (mService.mWaitingForDrawnCallback != null ||
- (mOrientationChangeComplete && !defaultDisplay.isLayoutNeeded()
+ if (mService.mWaitingForDrawnCallback != null
+ || (mOrientationChangeComplete && !isLayoutNeeded()
&& !mUpdateRotation)) {
mService.checkDrawnWindowsLocked();
}
@@ -741,7 +713,7 @@
final int N = mService.mPendingRemove.size();
if (N > 0) {
if (mService.mPendingRemoveTmp.length < N) {
- mService.mPendingRemoveTmp = new WindowState[N+10];
+ mService.mPendingRemoveTmp = new WindowState[N + 10];
}
mService.mPendingRemove.toArray(mService.mPendingRemoveTmp);
mService.mPendingRemove.clear();
@@ -783,12 +755,47 @@
"performSurfacePlacementInner exit: animating=" + mService.mAnimator.isAnimating());
}
- private void applySurfaceChangesTransaction(boolean recoveringMemory, int defaultDw,
- int defaultDh) {
+ private void checkAppTransitionReady(WindowSurfacePlacer surfacePlacer) {
+ // Trace all displays app transition by Z-order for pending layout change.
+ for (int i = mChildren.size() - 1; i >= 0; --i) {
+ final DisplayContent curDisplay = mChildren.get(i);
+
+ // If we are ready to perform an app transition, check through all of the app tokens
+ // to be shown and see if they are ready to go.
+ if (curDisplay.mAppTransition.isReady()) {
+ // handleAppTransitionReady may modify curDisplay.pendingLayoutChanges.
+ curDisplay.mAppTransitionController.handleAppTransitionReady();
+ if (DEBUG_LAYOUT_REPEATS) {
+ surfacePlacer.debugLayoutRepeats("after handleAppTransitionReady",
+ curDisplay.pendingLayoutChanges);
+ }
+ }
+
+ if (!curDisplay.isAppAnimating() && curDisplay.mAppTransition.isRunning()) {
+ // We have finished the animation of an app transition. To do this, we have
+ // delayed a lot of operations like showing and hiding apps, moving apps in
+ // Z-order, etc.
+ // The app token list reflects the correct Z-order, but the window list may now
+ // be out of sync with it. So here we will just rebuild the entire app window
+ // list. Fun!
+ curDisplay.handleAnimatingStoppedAndTransition();
+ if (DEBUG_LAYOUT_REPEATS) {
+ surfacePlacer.debugLayoutRepeats("after handleAnimStopAndXitionLock",
+ curDisplay.pendingLayoutChanges);
+ }
+ }
+ }
+ }
+
+ private void applySurfaceChangesTransaction(boolean recoveringMemory) {
mHoldScreenWindow = null;
mObscuringWindow = null;
// TODO(multi-display): Support these features on secondary screens.
+ final DisplayContent defaultDc = mService.getDefaultDisplayContentLocked();
+ final DisplayInfo defaultInfo = defaultDc.getDisplayInfo();
+ final int defaultDw = defaultInfo.logicalWidth;
+ final int defaultDh = defaultInfo.logicalHeight;
if (mService.mWatermark != null) {
mService.mWatermark.positionSurface(defaultDw, defaultDh);
}
diff --git a/services/core/java/com/android/server/wm/StackWindowController.java b/services/core/java/com/android/server/wm/StackWindowController.java
index 1fd2c0f..40a002b 100644
--- a/services/core/java/com/android/server/wm/StackWindowController.java
+++ b/services/core/java/com/android/server/wm/StackWindowController.java
@@ -16,6 +16,11 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowContainer.POSITION_BOTTOM;
+import static com.android.server.wm.WindowContainer.POSITION_TOP;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.app.WindowConfiguration;
import android.content.res.Configuration;
import android.graphics.Rect;
@@ -31,11 +36,6 @@
import java.lang.ref.WeakReference;
-import static com.android.server.wm.WindowContainer.POSITION_BOTTOM;
-import static com.android.server.wm.WindowContainer.POSITION_TOP;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-
/**
* Controller for the stack container. This is created by activity manager to link activity stacks
* to the stack container they use in window manager.
@@ -140,10 +140,11 @@
}
mContainer.positionChildAt(POSITION_TOP, childTask, includingParents);
- if (mService.mAppTransition.isTransitionSet()) {
+ final DisplayContent displayContent = mContainer.getDisplayContent();
+ if (displayContent.mAppTransition.isTransitionSet()) {
childTask.setSendingToBottom(false);
}
- mContainer.getDisplayContent().layoutAndAssignWindowLayersIfNeeded();
+ displayContent.layoutAndAssignWindowLayersIfNeeded();
}
}
@@ -162,7 +163,7 @@
}
mContainer.positionChildAt(POSITION_BOTTOM, childTask, includingParents);
- if (mService.mAppTransition.isTransitionSet()) {
+ if (mContainer.getDisplayContent().mAppTransition.isTransitionSet()) {
childTask.setSendingToBottom(true);
}
mContainer.getDisplayContent().layoutAndAssignWindowLayersIfNeeded();
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java
index ef63b9b..0d5469b 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotController.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java
@@ -129,8 +129,8 @@
mPersister.start();
}
- void onTransitionStarting() {
- handleClosingApps(mService.mClosingApps);
+ void onTransitionStarting(DisplayContent displayContent) {
+ handleClosingApps(displayContent.mClosingApps);
}
/**
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 3d27bab..f39ba6d 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -1641,7 +1641,7 @@
return;
}
- mService.mBoundsAnimationController.onAllWindowsDrawn();
+ getDisplayContent().mBoundsAnimationController.onAllWindowsDrawn();
}
@Override // AnimatesBounds
diff --git a/services/core/java/com/android/server/wm/UnknownAppVisibilityController.java b/services/core/java/com/android/server/wm/UnknownAppVisibilityController.java
index eb751fa..01abcab 100644
--- a/services/core/java/com/android/server/wm/UnknownAppVisibilityController.java
+++ b/services/core/java/com/android/server/wm/UnknownAppVisibilityController.java
@@ -60,8 +60,11 @@
private final WindowManagerService mService;
- UnknownAppVisibilityController(WindowManagerService service) {
+ private final DisplayContent mDisplayContent;
+
+ UnknownAppVisibilityController(WindowManagerService service, DisplayContent displayContent) {
mService = service;
+ mDisplayContent = displayContent;
}
boolean allResolved() {
@@ -128,7 +131,8 @@
int state = mUnknownApps.get(appWindow);
if (state == UNKNOWN_STATE_WAITING_RELAYOUT) {
mUnknownApps.put(appWindow, UNKNOWN_STATE_WAITING_VISIBILITY_UPDATE);
- mService.notifyKeyguardFlagsChanged(this::notifyVisibilitiesUpdated);
+ mService.notifyKeyguardFlagsChanged(this::notifyVisibilitiesUpdated,
+ appWindow.getDisplayContent().getDisplayId());
}
}
diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java
index a448f97..942cdb9 100644
--- a/services/core/java/com/android/server/wm/WallpaperController.java
+++ b/services/core/java/com/android/server/wm/WallpaperController.java
@@ -16,16 +16,14 @@
package com.android.server.wm;
-import com.android.internal.util.ToBooleanFunction;
-
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
+import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER;
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
-import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER;
import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_ORIGINAL_POSITION;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SCREENSHOT;
@@ -50,6 +48,8 @@
import android.view.WindowManager;
import android.view.animation.Animation;
+import com.android.internal.util.ToBooleanFunction;
+
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -263,7 +263,8 @@
&& (mWallpaperTarget != winGoingAway || mPrevWallpaperTarget != null)) {
return;
}
- if (mService.mAppTransition.isRunning()) {
+ if (mWallpaperTarget != null
+ && mWallpaperTarget.getDisplayContent().mAppTransition.isRunning()) {
// Defer hiding the wallpaper when app transition is running until the animations
// are done.
mDeferredHideWallpaper = winGoingAway;
@@ -549,9 +550,9 @@
// is not. If they're both hidden, still use the new target.
mWallpaperTarget = prevWallpaperTarget;
} else if (newTargetHidden == oldTargetHidden
- && !mService.mOpeningApps.contains(wallpaperTarget.mAppToken)
- && (mService.mOpeningApps.contains(prevWallpaperTarget.mAppToken)
- || mService.mClosingApps.contains(prevWallpaperTarget.mAppToken))) {
+ && !dc.mOpeningApps.contains(wallpaperTarget.mAppToken)
+ && (dc.mOpeningApps.contains(prevWallpaperTarget.mAppToken)
+ || dc.mClosingApps.contains(prevWallpaperTarget.mAppToken))) {
// If they're both hidden (or both not hidden), prefer the one that's currently in
// opening or closing app list, this allows transition selection logic to better
// determine the wallpaper status of opening/closing apps.
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index 46999a2..abc3826 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -826,6 +826,12 @@
wrapper.release();
}
+ void forAllAppWindows(Consumer<AppWindowToken> callback) {
+ for (int i = mChildren.size() - 1; i >= 0; --i) {
+ mChildren.get(i).forAllAppWindows(callback);
+ }
+ }
+
/**
* For all tasks at or below this container call the callback.
*
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 3aad73c..96fc2e2 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -67,12 +67,10 @@
import static com.android.internal.util.LatencyTracker.ACTION_ROTATE_SCREEN;
import static com.android.server.LockGuard.INDEX_WINDOW;
import static com.android.server.LockGuard.installLock;
-import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
import static com.android.server.wm.KeyguardDisableHandler.KEYGUARD_POLICY_CHANGED;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_BOOT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_CONFIGURATION;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY;
@@ -86,7 +84,6 @@
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SCREEN_ON;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STARTING_WINDOW;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_MOVEMENT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_TRACE;
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
@@ -96,7 +93,6 @@
import static com.android.server.wm.WindowManagerDebugConfig.TAG_KEEP_SCREEN_ON;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-import static com.android.server.wm.WindowManagerServiceDumpProto.APP_TRANSITION;
import static com.android.server.wm.WindowManagerServiceDumpProto.DISPLAY_FROZEN;
import static com.android.server.wm.WindowManagerServiceDumpProto.FOCUSED_APP;
import static com.android.server.wm.WindowManagerServiceDumpProto.FOCUSED_WINDOW;
@@ -108,7 +104,6 @@
import android.Manifest;
import android.Manifest.permission;
-import android.animation.AnimationHandler;
import android.animation.ValueAnimator;
import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -134,7 +129,6 @@
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.graphics.Bitmap;
-import android.graphics.GraphicBuffer;
import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
@@ -188,7 +182,6 @@
import android.util.TimeUtils;
import android.util.TypedValue;
import android.util.proto.ProtoOutputStream;
-import android.view.AppTransitionAnimationSpec;
import android.view.Display;
import android.view.DisplayCutout;
import android.view.DisplayInfo;
@@ -221,7 +214,6 @@
import android.view.WindowContentFrameStats;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
-import android.view.WindowManager.TransitionFlags;
import android.view.WindowManager.TransitionType;
import android.view.WindowManagerGlobal;
import android.view.WindowManagerPolicyConstants.PointerEventListener;
@@ -266,7 +258,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
-import java.util.List;
/** {@hide} */
public class WindowManagerService extends IWindowManager.Stub
@@ -612,14 +603,6 @@
// changes the orientation.
private final PowerManager.WakeLock mScreenFrozenLock;
- final AppTransition mAppTransition;
- boolean mSkipAppTransitionAnimation = false;
-
- final ArraySet<AppWindowToken> mOpeningApps = new ArraySet<>();
- final ArraySet<AppWindowToken> mClosingApps = new ArraySet<>();
-
- final UnknownAppVisibilityController mUnknownAppVisibilityController =
- new UnknownAppVisibilityController(this);
final TaskSnapshotController mTaskSnapshotController;
boolean mIsTouchDevice;
@@ -751,7 +734,6 @@
* up when the animation finishes.
*/
final ArrayMap<AnimationAdapter, SurfaceAnimator> mAnimationTransferMap = new ArrayMap<>();
- final BoundsAnimationController mBoundsAnimationController;
private WindowContentFrameStats mTempWindowRenderStats;
@@ -779,10 +761,6 @@
// For example, when this flag is true, there will be no wallpaper service.
final boolean mOnlyCore;
- // List of clients without a transtiton animation that we notify once we are done transitioning
- // since they won't be notified through the app window animator.
- final List<IBinder> mNoAnimationNotifyOnTransitionFinished = new ArrayList<>();
-
static WindowManagerThreadPriorityBooster sThreadPriorityBooster =
new WindowManagerThreadPriorityBooster();
@@ -975,13 +953,6 @@
PowerManager.PARTIAL_WAKE_LOCK, "SCREEN_FROZEN");
mScreenFrozenLock.setReferenceCounted(false);
- mAppTransition = new AppTransition(context, this);
- mAppTransition.registerListenerLocked(mActivityManagerAppTransitionNotifier);
-
- final AnimationHandler animationHandler = new AnimationHandler();
- mBoundsAnimationController = new BoundsAnimationController(context, mAppTransition,
- AnimationThread.getHandler(), animationHandler);
-
mActivityManager = ActivityManager.getService();
mActivityTaskManager = ActivityTaskManager.getService();
mAmInternal = LocalServices.getService(ActivityManagerInternal.class);
@@ -1577,11 +1548,13 @@
Rect frame = replacedWindow.getVisibleFrameLw();
// We treat this as if this activity was opening, so we can trigger the app transition
// animation and piggy-back on existing transition animation infrastructure.
- mOpeningApps.add(atoken);
- prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_RELAUNCH, ALWAYS_KEEP_CURRENT);
- mAppTransition.overridePendingAppTransitionClipReveal(frame.left, frame.top,
+ final DisplayContent dc = atoken.getDisplayContent();
+ dc.mOpeningApps.add(atoken);
+ dc.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_RELAUNCH, ALWAYS_KEEP_CURRENT,
+ 0 /* flags */, false /* forceOverride */);
+ dc.mAppTransition.overridePendingAppTransitionClipReveal(frame.left, frame.top,
frame.width(), frame.height());
- executeAppTransition();
+ dc.executeAppTransition();
return true;
}
@@ -1590,10 +1563,12 @@
// unfreeze wait for the apps to be drawn.
// Note that if the display unfroze already because app unfreeze timed out,
// we don't set up the transition anymore and just let it go.
- if (mDisplayFrozen && !mOpeningApps.contains(atoken) && atoken.isRelaunching()) {
- mOpeningApps.add(atoken);
- prepareAppTransition(WindowManager.TRANSIT_NONE, !ALWAYS_KEEP_CURRENT);
- executeAppTransition();
+ final DisplayContent dc = atoken.getDisplayContent();
+ if (mDisplayFrozen && !dc.mOpeningApps.contains(atoken) && atoken.isRelaunching()) {
+ dc.mOpeningApps.add(atoken);
+ dc.prepareAppTransition(WindowManager.TRANSIT_NONE, !ALWAYS_KEEP_CURRENT, 0 /* flags */,
+ false /* forceOverride */);
+ dc.executeAppTransition();
}
}
@@ -2087,7 +2062,7 @@
}
if (win.mAppToken != null) {
- mUnknownAppVisibilityController.notifyRelayouted(win.mAppToken);
+ dc.mUnknownAppVisibilityController.notifyRelayouted(win.mAppToken);
}
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER,
@@ -2445,6 +2420,9 @@
long ident = Binder.clearCallingIdentity();
try {
final DisplayContent dc = mRoot.getDisplayContent(displayId);
+ if (dc == null) {
+ return false;
+ }
final int req = dc.getOrientation();
if (req != dc.getLastOrientation() || forceUpdate) {
dc.setLastOrientation(req);
@@ -2475,109 +2453,15 @@
}
}
+ // TODO(multi-display): remove when no default display use case.
+ // (i.e. KeyguardController / RecentsAnimation)
@Override
public void prepareAppTransition(@TransitionType int transit, boolean alwaysKeepCurrent) {
- prepareAppTransition(transit, alwaysKeepCurrent, 0 /* flags */, false /* forceOverride */);
- }
-
- /**
- * @param transit What kind of transition is happening. Use one of the constants
- * AppTransition.TRANSIT_*.
- * @param alwaysKeepCurrent If true and a transition is already set, new transition will NOT
- * be set.
- * @param flags Additional flags for the app transition, Use a combination of the constants
- * AppTransition.TRANSIT_FLAG_*.
- * @param forceOverride Always override the transit, not matter what was set previously.
- */
- public void prepareAppTransition(@TransitionType int transit, boolean alwaysKeepCurrent,
- @TransitionFlags int flags, boolean forceOverride) {
if (!checkCallingPermission(MANAGE_APP_TOKENS, "prepareAppTransition()")) {
throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
}
- synchronized(mWindowMap) {
- boolean prepared = mAppTransition.prepareAppTransitionLocked(transit, alwaysKeepCurrent,
- flags, forceOverride);
- // TODO (multidisplay): associate app transitions with displays
- final DisplayContent dc = mRoot.getDisplayContent(DEFAULT_DISPLAY);
- if (prepared && dc != null && dc.okToAnimate()) {
- mSkipAppTransitionAnimation = false;
- }
- }
- }
-
- @Override
- public @TransitionType int getPendingAppTransition() {
- return mAppTransition.getAppTransition();
- }
-
- @Override
- public void overridePendingAppTransition(String packageName,
- int enterAnim, int exitAnim, IRemoteCallback startedCallback) {
- synchronized(mWindowMap) {
- mAppTransition.overridePendingAppTransition(packageName, enterAnim, exitAnim,
- startedCallback);
- }
- }
-
- @Override
- public void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth,
- int startHeight) {
- synchronized(mWindowMap) {
- mAppTransition.overridePendingAppTransitionScaleUp(startX, startY, startWidth,
- startHeight);
- }
- }
-
- @Override
- public void overridePendingAppTransitionClipReveal(int startX, int startY,
- int startWidth, int startHeight) {
- synchronized(mWindowMap) {
- mAppTransition.overridePendingAppTransitionClipReveal(startX, startY, startWidth,
- startHeight);
- }
- }
-
- @Override
- public void overridePendingAppTransitionThumb(GraphicBuffer srcThumb, int startX,
- int startY, IRemoteCallback startedCallback, boolean scaleUp) {
- synchronized(mWindowMap) {
- mAppTransition.overridePendingAppTransitionThumb(srcThumb, startX, startY,
- startedCallback, scaleUp);
- }
- }
-
- @Override
- public void overridePendingAppTransitionAspectScaledThumb(GraphicBuffer srcThumb, int startX,
- int startY, int targetWidth, int targetHeight, IRemoteCallback startedCallback,
- boolean scaleUp) {
- synchronized(mWindowMap) {
- mAppTransition.overridePendingAppTransitionAspectScaledThumb(srcThumb, startX, startY,
- targetWidth, targetHeight, startedCallback, scaleUp);
- }
- }
-
- @Override
- public void overridePendingAppTransitionMultiThumb(AppTransitionAnimationSpec[] specs,
- IRemoteCallback onAnimationStartedCallback, IRemoteCallback onAnimationFinishedCallback,
- boolean scaleUp) {
- synchronized (mWindowMap) {
- mAppTransition.overridePendingAppTransitionMultiThumb(specs, onAnimationStartedCallback,
- onAnimationFinishedCallback, scaleUp);
-
- }
- }
-
- public void overridePendingAppTransitionStartCrossProfileApps() {
- synchronized (mWindowMap) {
- mAppTransition.overridePendingAppTransitionStartCrossProfileApps();
- }
- }
-
- @Override
- public void overridePendingAppTransitionInPlace(String packageName, int anim) {
- synchronized(mWindowMap) {
- mAppTransition.overrideInPlaceAppTransition(packageName, anim);
- }
+ getDefaultDisplayContentLocked().prepareAppTransition(transit,
+ alwaysKeepCurrent, 0 /* flags */, false /* forceOverride */);
}
@Override
@@ -2585,8 +2469,10 @@
IAppTransitionAnimationSpecsFuture specsFuture, IRemoteCallback callback,
boolean scaleUp) {
synchronized(mWindowMap) {
- mAppTransition.overridePendingAppTransitionMultiThumbFuture(specsFuture, callback,
- scaleUp);
+ // TODO(multi-display): sysui using this api only support default display.
+ mRoot.getDisplayContent(DEFAULT_DISPLAY)
+ .mAppTransition.overridePendingAppTransitionMultiThumbFuture(specsFuture,
+ callback, scaleUp);
}
}
@@ -2598,7 +2484,9 @@
"Requires CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS permission");
}
synchronized (mWindowMap) {
- mAppTransition.overridePendingAppTransitionRemote(remoteAnimationAdapter);
+ // TODO(multi-display): sysui using this api only support default display.
+ mRoot.getDisplayContent(DEFAULT_DISPLAY)
+ .mAppTransition.overridePendingAppTransitionRemote(remoteAnimationAdapter);
}
}
@@ -2607,20 +2495,14 @@
// TODO: Remove once clients are updated.
}
+ // TODO(multi-display): remove when no default display use case.
+ // (i.e. KeyguardController / RecentsAnimation)
@Override
public void executeAppTransition() {
if (!checkCallingPermission(MANAGE_APP_TOKENS, "executeAppTransition()")) {
throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
}
-
- synchronized(mWindowMap) {
- if (DEBUG_APP_TRANSITIONS) Slog.w(TAG_WM, "Execute app transition: " + mAppTransition
- + " Callers=" + Debug.getCallers(5));
- if (mAppTransition.isTransitionSet()) {
- mAppTransition.setReady();
- mWindowPlacerLocked.requestTraversal();
- }
- }
+ getDefaultDisplayContentLocked().executeAppTransition();
}
public void initializeRecentsAnimation(int targetActivityType,
@@ -2630,7 +2512,7 @@
synchronized (mWindowMap) {
mRecentsAnimationController = new RecentsAnimationController(this,
recentsAnimationRunner, callbacks, displayId);
- mAppTransition.updateBooster();
+ mRoot.getDisplayContent(displayId).mAppTransition.updateBooster();
mRecentsAnimationController.initialize(targetActivityType, recentTaskIds);
}
}
@@ -2650,7 +2532,8 @@
*/
public boolean canStartRecentsAnimation() {
synchronized (mWindowMap) {
- if (mAppTransition.isTransitionSet()) {
+ // TODO(multi-display): currently only default display support recent activity
+ if (getDefaultDisplayContentLocked().mAppTransition.isTransitionSet()) {
return false;
}
return true;
@@ -2677,7 +2560,8 @@
final RecentsAnimationController controller = mRecentsAnimationController;
mRecentsAnimationController = null;
controller.cleanupAnimation(reorderMode);
- mAppTransition.updateBooster();
+ // TODO(mult-display): currently only default display support recents animation.
+ getDefaultDisplayContentLocked().mAppTransition.updateBooster();
}
}
}
@@ -2747,7 +2631,8 @@
@Override
public void notifyShowingDreamChanged() {
- notifyKeyguardFlagsChanged(null /* callback */);
+ // TODO(multi-display): support show dream in multi-display.
+ notifyKeyguardFlagsChanged(null /* callback */, DEFAULT_DISPLAY);
}
@Override
@@ -2822,11 +2707,12 @@
* reevaluate the visibilities of the activities.
* @param callback Runnable to be called when activity manager is done reevaluating visibilities
*/
- void notifyKeyguardFlagsChanged(@Nullable Runnable callback) {
+ void notifyKeyguardFlagsChanged(@Nullable Runnable callback, int displayId) {
final Runnable wrappedCallback = callback != null
? () -> { synchronized (mWindowMap) { callback.run(); } }
: null;
- mH.obtainMessage(H.NOTIFY_KEYGUARD_FLAGS_CHANGED, wrappedCallback).sendToTarget();
+ mH.obtainMessage(H.NOTIFY_KEYGUARD_FLAGS_CHANGED, displayId, 0,
+ wrappedCallback).sendToTarget();
}
public boolean isKeyguardTrusted() {
@@ -3215,7 +3101,6 @@
synchronized (mWindowMap) {
mCurrentUserId = newUserId;
mCurrentProfileIds = currentProfileIds;
- mAppTransition.setCurrentUser(newUserId);
mPolicy.setCurrentUserLw(newUserId);
// If keyguard was disabled, re-enable it
@@ -3234,6 +3119,8 @@
displayContent.mDividerControllerLocked.notifyDockedStackExistsChanged(
stack != null && stack.hasTaskForUser(newUserId));
+ mRoot.forAllDisplays(dc -> dc.mAppTransition.setCurrentUser(newUserId));
+
// If the display is already prepared, update the density.
// Otherwise, we'll update it when it's prepared.
if (mDisplayReady) {
@@ -4895,7 +4782,7 @@
}
break;
case NOTIFY_KEYGUARD_FLAGS_CHANGED: {
- mAtmInternal.notifyKeyguardFlagsChanged((Runnable) msg.obj);
+ mAtmInternal.notifyKeyguardFlagsChanged((Runnable) msg.obj, msg.arg1);
}
break;
case NOTIFY_KEYGUARD_TRUSTED_CHANGED: {
@@ -5314,39 +5201,6 @@
}
}
- /**
- * @return bitmap indicating if another pass through layout must be made.
- */
- int handleAnimatingStoppedAndTransitionLocked() {
- int changes = 0;
-
- mAppTransition.setIdle();
-
- for (int i = mNoAnimationNotifyOnTransitionFinished.size() - 1; i >= 0; i--) {
- final IBinder token = mNoAnimationNotifyOnTransitionFinished.get(i);
- mAppTransition.notifyAppTransitionFinishedLocked(token);
- }
- mNoAnimationNotifyOnTransitionFinished.clear();
-
- // TODO: multi-display.
- final DisplayContent dc = getDefaultDisplayContentLocked();
-
- dc.mWallpaperController.hideDeferredWallpapersIfNeeded();
-
- dc.onAppTransitionDone();
-
- changes |= FINISH_LAYOUT_REDO_LAYOUT;
- if (DEBUG_WALLPAPER_LIGHT) Slog.v(TAG_WM,
- "Wallpaper layer changed: assigning layers + relayout");
- dc.computeImeTarget(true /* updateImeTarget */);
- mRoot.mWallpaperMayChange = true;
- // Since the window list has been rebuilt, focus might have to be recomputed since the
- // actual order of windows might have changed again.
- mFocusMayChange = true;
-
- return changes;
- }
-
void checkDrawnWindowsLocked() {
if (mWaitingForDrawn.isEmpty() || mWaitingForDrawnCallback == null) {
return;
@@ -5459,8 +5313,8 @@
mInputManagerCallback.freezeInputDispatchingLw();
- if (mAppTransition.isTransitionSet()) {
- mAppTransition.freeze();
+ if (displayContent.mAppTransition.isTransitionSet()) {
+ displayContent.mAppTransition.freeze();
}
if (PROFILE_ORIENTATION) {
@@ -5495,15 +5349,16 @@
return;
}
+ final DisplayContent dc = mRoot.getDisplayContent(mFrozenDisplayId);
if (mWaitingForConfig || mAppsFreezingScreen > 0
|| mWindowsFreezingScreen == WINDOWS_FREEZING_SCREENS_ACTIVE
- || mClientFreezingScreen || !mOpeningApps.isEmpty()) {
+ || mClientFreezingScreen || (dc != null && !dc.mOpeningApps.isEmpty())) {
if (DEBUG_ORIENTATION) Slog.d(TAG_WM,
"stopFreezingDisplayLocked: Returning mWaitingForConfig=" + mWaitingForConfig
+ ", mAppsFreezingScreen=" + mAppsFreezingScreen
+ ", mWindowsFreezingScreen=" + mWindowsFreezingScreen
+ ", mClientFreezingScreen=" + mClientFreezingScreen
- + ", mOpeningApps.size()=" + mOpeningApps.size());
+ + ", mOpeningApps.size()=" + (dc != null ? dc.mOpeningApps.size() : 0));
return;
}
@@ -5583,7 +5438,7 @@
mScreenFrozenLock.release();
- if (updateRotation) {
+ if (updateRotation && displayContent != null && updateRotation) {
if (DEBUG_ORIENTATION) Slog.d(TAG_WM, "Performing post-rotate rotation");
configChanged |= displayContent.updateRotationUnchecked();
}
@@ -5909,7 +5764,8 @@
synchronized (mWindowMap) {
final AppWindowToken appWindow = mRoot.getAppWindowToken(token);
if (appWindow != null) {
- mUnknownAppVisibilityController.notifyAppResumedFinished(appWindow);
+ appWindow.getDisplayContent().mUnknownAppVisibilityController
+ .notifyAppResumedFinished(appWindow);
}
}
}
@@ -5955,15 +5811,6 @@
private void dumpTokensLocked(PrintWriter pw, boolean dumpAll) {
pw.println("WINDOW MANAGER TOKENS (dumpsys window tokens)");
mRoot.dumpTokens(pw, dumpAll);
- if (!mOpeningApps.isEmpty() || !mClosingApps.isEmpty()) {
- pw.println();
- if (mOpeningApps.size() > 0) {
- pw.print(" mOpeningApps="); pw.println(mOpeningApps);
- }
- if (mClosingApps.size() > 0) {
- pw.print(" mClosingApps="); pw.println(mClosingApps);
- }
- }
}
private void dumpSessionsLocked(PrintWriter pw, boolean dumpAll) {
@@ -6000,7 +5847,6 @@
final DisplayContent defaultDisplayContent = getDefaultDisplayContentLocked();
proto.write(ROTATION, defaultDisplayContent.getRotation());
proto.write(LAST_ORIENTATION, defaultDisplayContent.getLastOrientation());
- mAppTransition.writeToProto(proto, APP_TRANSITION);
}
void traceStateLocked(String where) {
@@ -6133,7 +5979,6 @@
pw.println();
mInputManagerCallback.dump(pw, " ");
- mUnknownAppVisibilityController.dump(pw, " ");
mTaskSnapshotController.dump(pw, " ");
if (dumpAll) {
@@ -6172,9 +6017,6 @@
pw.print(" window="); pw.print(mWindowAnimationScaleSetting);
pw.print(" transition="); pw.print(mTransitionAnimationScaleSetting);
pw.print(" animator="); pw.println(mAnimatorDurationScaleSetting);
- pw.print(" mSkipAppTransitionAnimation=");pw.println(mSkipAppTransitionAnimation);
- pw.println(" mLayoutToAnim:");
- mAppTransition.dump(pw, " ");
if (mRecentsAnimationController != null) {
pw.print(" mRecentsAnimationController="); pw.println(mRecentsAnimationController);
mRecentsAnimationController.dump(pw, " ");
@@ -7024,10 +6866,12 @@
}
}
+ // TODO(multi-display): currently only used by PWM to notify keyguard transitions as well
+ // forwarding it to SystemUI for synchronizing status and navigation bar animations.
@Override
public void registerAppTransitionListener(AppTransitionListener listener) {
synchronized (mWindowMap) {
- mAppTransition.registerListenerLocked(listener);
+ getDefaultDisplayContentLocked().mAppTransition.registerListenerLocked(listener);
}
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 2f89d5c..9dc7721 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -1364,7 +1364,7 @@
@Override
boolean hasContentToDisplay() {
if (!mAppFreezing && isDrawnLw() && (mViewVisibility == View.VISIBLE
- || (isAnimating() && !mService.mAppTransition.isTransitionSet()))) {
+ || (isAnimating() && !getDisplayContent().mAppTransition.isTransitionSet()))) {
return true;
}
@@ -1473,7 +1473,7 @@
* of a transition that has not yet been started.
*/
boolean isReadyForDisplay() {
- if (mToken.waitingToShow && mService.mAppTransition.isTransitionSet()) {
+ if (mToken.waitingToShow && getDisplayContent().mAppTransition.isTransitionSet()) {
return false;
}
final boolean parentAndClientVisible = !isParentWindowHidden()
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 2beb788..838d2a1 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -1364,7 +1364,8 @@
break;
}
if (attr >= 0) {
- a = mService.mAppTransition.loadAnimationAttr(mWin.mAttrs, attr, TRANSIT_NONE);
+ a = mWin.getDisplayContent().mAppTransition.loadAnimationAttr(
+ mWin.mAttrs, attr, TRANSIT_NONE);
}
}
if (DEBUG_ANIM) Slog.v(TAG,
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index e13a70a..e82ffe8 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -16,62 +16,18 @@
package com.android.server.wm;
-import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
-import static android.view.WindowManager.TRANSIT_ACTIVITY_CLOSE;
-import static android.view.WindowManager.TRANSIT_ACTIVITY_OPEN;
-import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE;
-import static android.view.WindowManager.TRANSIT_DOCK_TASK_FROM_RECENTS;
-import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION;
-import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_SHADE;
-import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER;
-import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY;
-import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
-import static android.view.WindowManager.TRANSIT_NONE;
-import static android.view.WindowManager.TRANSIT_TASK_CLOSE;
-import static android.view.WindowManager.TRANSIT_TASK_IN_PLACE;
-import static android.view.WindowManager.TRANSIT_TASK_OPEN;
-import static android.view.WindowManager.TRANSIT_TASK_TO_BACK;
-import static android.view.WindowManager.TRANSIT_TASK_TO_FRONT;
-import static android.view.WindowManager.TRANSIT_TRANSLUCENT_ACTIVITY_CLOSE;
-import static android.view.WindowManager.TRANSIT_TRANSLUCENT_ACTIVITY_OPEN;
-import static android.view.WindowManager.TRANSIT_WALLPAPER_CLOSE;
-import static android.view.WindowManager.TRANSIT_WALLPAPER_INTRA_CLOSE;
-import static android.view.WindowManager.TRANSIT_WALLPAPER_INTRA_OPEN;
-import static android.view.WindowManager.TRANSIT_WALLPAPER_OPEN;
-import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_CONFIG;
-import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
-import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_SNAPSHOT;
-import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_SPLASH_SCREEN;
-import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_WINDOWS_DRAWN;
-import static com.android.server.wm.AppTransition.isKeyguardGoingAwayTransit;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
-import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-import static com.android.server.wm.WindowManagerService.H.NOTIFY_APP_TRANSITION_STARTING;
import static com.android.server.wm.WindowManagerService.H.REPORT_WINDOWS_CHANGE;
import static com.android.server.wm.WindowManagerService.LAYOUT_REPEAT_THRESHOLD;
-import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_PLACING_SURFACES;
-import android.app.WindowConfiguration;
import android.os.Debug;
import android.os.Trace;
-import android.util.ArraySet;
import android.util.Slog;
import android.util.SparseIntArray;
-import android.view.Display;
-import android.view.RemoteAnimationAdapter;
-import android.view.RemoteAnimationDefinition;
-import android.view.WindowManager;
-import android.view.WindowManager.LayoutParams;
-import android.view.WindowManager.TransitionType;
-import android.view.animation.Animation;
-
-import com.android.internal.annotations.VisibleForTesting;
import java.io.PrintWriter;
-import java.util.function.Predicate;
/**
* Positions windows and their surfaces.
@@ -233,550 +189,6 @@
return mInLayout;
}
- /**
- * @return bitmap indicating if another pass through layout must be made.
- */
- int handleAppTransitionReadyLocked() {
- int appsCount = mService.mOpeningApps.size();
- if (!transitionGoodToGo(appsCount, mTempTransitionReasons)) {
- return 0;
- }
- Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "AppTransitionReady");
-
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "**** GOOD TO GO");
- int transit = mService.mAppTransition.getAppTransition();
- if (mService.mSkipAppTransitionAnimation && !isKeyguardGoingAwayTransit(transit)) {
- transit = WindowManager.TRANSIT_UNSET;
- }
- mService.mSkipAppTransitionAnimation = false;
- mService.mNoAnimationNotifyOnTransitionFinished.clear();
-
- mService.mAppTransition.removeAppTransitionTimeoutCallbacks();
-
- final DisplayContent displayContent = mService.getDefaultDisplayContentLocked();
-
- mService.mRoot.mWallpaperMayChange = false;
-
- int i;
- for (i = 0; i < appsCount; i++) {
- final AppWindowToken wtoken = mService.mOpeningApps.valueAt(i);
- // Clearing the mAnimatingExit flag before entering animation. It's set to true if app
- // window is removed, or window relayout to invisible. This also affects window
- // visibility. We need to clear it *before* maybeUpdateTransitToWallpaper() as the
- // transition selection depends on wallpaper target visibility.
- wtoken.clearAnimatingFlags();
- }
-
- // Adjust wallpaper before we pull the lower/upper target, since pending changes
- // (like the clearAnimatingFlags() above) might affect wallpaper target result.
- // Or, the opening app window should be a wallpaper target.
- mWallpaperControllerLocked.adjustWallpaperWindowsForAppTransitionIfNeeded(displayContent,
- mService.mOpeningApps);
-
- // Determine if closing and opening app token sets are wallpaper targets, in which case
- // special animations are needed.
- final boolean hasWallpaperTarget = mWallpaperControllerLocked.getWallpaperTarget() != null;
- final boolean openingAppHasWallpaper = canBeWallpaperTarget(mService.mOpeningApps)
- && hasWallpaperTarget;
- final boolean closingAppHasWallpaper = canBeWallpaperTarget(mService.mClosingApps)
- && hasWallpaperTarget;
-
- transit = maybeUpdateTransitToTranslucentAnim(transit);
- transit = maybeUpdateTransitToWallpaper(transit, openingAppHasWallpaper,
- closingAppHasWallpaper);
-
- // Find the layout params of the top-most application window in the tokens, which is
- // what will control the animation theme. If all closing windows are obscured, then there is
- // no need to do an animation. This is the case, for example, when this transition is being
- // done behind a dream window.
- final ArraySet<Integer> activityTypes = collectActivityTypes(mService.mOpeningApps,
- mService.mClosingApps);
- final boolean allowAnimations = mService.mPolicy.allowAppAnimationsLw();
- final AppWindowToken animLpToken = allowAnimations
- ? findAnimLayoutParamsToken(transit, activityTypes)
- : null;
- final AppWindowToken topOpeningApp = allowAnimations
- ? getTopApp(mService.mOpeningApps, false /* ignoreHidden */)
- : null;
- final AppWindowToken topClosingApp = allowAnimations
- ? getTopApp(mService.mClosingApps, false /* ignoreHidden */)
- : null;
- final LayoutParams animLp = getAnimLp(animLpToken);
- overrideWithRemoteAnimationIfSet(animLpToken, transit, activityTypes);
-
- final boolean voiceInteraction = containsVoiceInteraction(mService.mOpeningApps)
- || containsVoiceInteraction(mService.mOpeningApps);
-
- final int layoutRedo;
- mService.mSurfaceAnimationRunner.deferStartingAnimations();
- try {
- processApplicationsAnimatingInPlace(transit);
-
- handleClosingApps(transit, animLp, voiceInteraction);
- handleOpeningApps(transit, animLp, voiceInteraction);
-
- mService.mAppTransition.setLastAppTransition(transit, topOpeningApp, topClosingApp);
-
- final int flags = mService.mAppTransition.getTransitFlags();
- layoutRedo = mService.mAppTransition.goodToGo(transit, topOpeningApp, topClosingApp,
- mService.mOpeningApps, mService.mClosingApps);
- handleNonAppWindowsInTransition(transit, flags);
- mService.mAppTransition.postAnimationCallback();
- mService.mAppTransition.clear();
- } finally {
- mService.mSurfaceAnimationRunner.continueStartingAnimations();
- }
-
- mService.mTaskSnapshotController.onTransitionStarting();
-
- mService.mOpeningApps.clear();
- mService.mClosingApps.clear();
- mService.mUnknownAppVisibilityController.clear();
-
- // This has changed the visibility of windows, so perform
- // a new layout to get them all up-to-date.
- displayContent.setLayoutNeeded();
-
- // TODO(multidisplay): IMEs are only supported on the default display.
- final DisplayContent dc = mService.getDefaultDisplayContentLocked();
- dc.computeImeTarget(true /* updateImeTarget */);
- mService.updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES,
- true /*updateInputWindows*/);
- mService.mFocusMayChange = false;
-
- mService.mH.obtainMessage(NOTIFY_APP_TRANSITION_STARTING,
- mTempTransitionReasons.clone()).sendToTarget();
-
- Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
-
- return layoutRedo | FINISH_LAYOUT_REDO_LAYOUT | FINISH_LAYOUT_REDO_CONFIG;
- }
-
- private static LayoutParams getAnimLp(AppWindowToken wtoken) {
- final WindowState mainWindow = wtoken != null ? wtoken.findMainWindow() : null;
- return mainWindow != null ? mainWindow.mAttrs : null;
- }
-
- /**
- * Overrides the pending transition with the remote animation defined for the transition in the
- * set of defined remote animations in the app window token.
- */
- private void overrideWithRemoteAnimationIfSet(AppWindowToken animLpToken, int transit,
- ArraySet<Integer> activityTypes) {
- if (transit == TRANSIT_CRASHING_ACTIVITY_CLOSE) {
- // The crash transition has higher priority than any involved remote animations.
- return;
- }
- if (animLpToken == null) {
- return;
- }
- final RemoteAnimationDefinition definition = animLpToken.getRemoteAnimationDefinition();
- if (definition != null) {
- final RemoteAnimationAdapter adapter = definition.getAdapter(transit, activityTypes);
- if (adapter != null) {
- mService.mAppTransition.overridePendingAppTransitionRemote(adapter);
- }
- }
- }
-
- /**
- * @return The window token that determines the animation theme.
- */
- private AppWindowToken findAnimLayoutParamsToken(@TransitionType int transit,
- ArraySet<Integer> activityTypes) {
- AppWindowToken result;
-
- // Remote animations always win, but fullscreen tokens override non-fullscreen tokens.
- result = lookForHighestTokenWithFilter(mService.mClosingApps, mService.mOpeningApps,
- w -> w.getRemoteAnimationDefinition() != null
- && w.getRemoteAnimationDefinition().hasTransition(transit, activityTypes));
- if (result != null) {
- return result;
- }
- result = lookForHighestTokenWithFilter(mService.mClosingApps, mService.mOpeningApps,
- w -> w.fillsParent() && w.findMainWindow() != null);
- if (result != null) {
- return result;
- }
- return lookForHighestTokenWithFilter(mService.mClosingApps, mService.mOpeningApps,
- w -> w.findMainWindow() != null);
- }
-
- /**
- * @return The set of {@link WindowConfiguration.ActivityType}s contained in the set of apps in
- * {@code array1} and {@code array2}.
- */
- private ArraySet<Integer> collectActivityTypes(ArraySet<AppWindowToken> array1,
- ArraySet<AppWindowToken> array2) {
- final ArraySet<Integer> result = new ArraySet<>();
- for (int i = array1.size() - 1; i >= 0; i--) {
- result.add(array1.valueAt(i).getActivityType());
- }
- for (int i = array2.size() - 1; i >= 0; i--) {
- result.add(array2.valueAt(i).getActivityType());
- }
- return result;
- }
-
- private AppWindowToken lookForHighestTokenWithFilter(ArraySet<AppWindowToken> array1,
- ArraySet<AppWindowToken> array2, Predicate<AppWindowToken> filter) {
- final int array1count = array1.size();
- final int count = array1count + array2.size();
- int bestPrefixOrderIndex = Integer.MIN_VALUE;
- AppWindowToken bestToken = null;
- for (int i = 0; i < count; i++) {
- final AppWindowToken wtoken = i < array1count
- ? array1.valueAt(i)
- : array2.valueAt(i - array1count);
- final int prefixOrderIndex = wtoken.getPrefixOrderIndex();
- if (filter.test(wtoken) && prefixOrderIndex > bestPrefixOrderIndex) {
- bestPrefixOrderIndex = prefixOrderIndex;
- bestToken = wtoken;
- }
- }
- return bestToken;
- }
-
- private boolean containsVoiceInteraction(ArraySet<AppWindowToken> apps) {
- for (int i = apps.size() - 1; i >= 0; i--) {
- if (apps.valueAt(i).mVoiceInteraction) {
- return true;
- }
- }
- return false;
- }
-
- private void handleOpeningApps(int transit, LayoutParams animLp, boolean voiceInteraction) {
- final int appsCount = mService.mOpeningApps.size();
- for (int i = 0; i < appsCount; i++) {
- AppWindowToken wtoken = mService.mOpeningApps.valueAt(i);
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Now opening app" + wtoken);
-
- if (!wtoken.setVisibility(animLp, true, transit, false, voiceInteraction)) {
- // This token isn't going to be animating. Add it to the list of tokens to
- // be notified of app transition complete since the notification will not be
- // sent be the app window animator.
- mService.mNoAnimationNotifyOnTransitionFinished.add(wtoken.token);
- }
- wtoken.updateReportedVisibilityLocked();
- wtoken.waitingToShow = false;
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
- ">>> OPEN TRANSACTION handleAppTransitionReadyLocked()");
- mService.openSurfaceTransaction();
- try {
- wtoken.showAllWindowsLocked();
- } finally {
- mService.closeSurfaceTransaction("handleAppTransitionReadyLocked");
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
- "<<< CLOSE TRANSACTION handleAppTransitionReadyLocked()");
- }
-
- if (mService.mAppTransition.isNextAppTransitionThumbnailUp()) {
- wtoken.attachThumbnailAnimation();
- } else if (mService.mAppTransition.isNextAppTransitionOpenCrossProfileApps()) {
- wtoken.attachCrossProfileAppsThumbnailAnimation();
- }
- }
- }
-
- private void handleClosingApps(int transit, LayoutParams animLp, boolean voiceInteraction) {
- final int appsCount;
- appsCount = mService.mClosingApps.size();
- for (int i = 0; i < appsCount; i++) {
- AppWindowToken wtoken = mService.mClosingApps.valueAt(i);
-
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Now closing app " + wtoken);
- // TODO: Do we need to add to mNoAnimationNotifyOnTransitionFinished like above if not
- // animating?
- wtoken.setVisibility(animLp, false, transit, false, voiceInteraction);
- wtoken.updateReportedVisibilityLocked();
- // Force the allDrawn flag, because we want to start
- // this guy's animations regardless of whether it's
- // gotten drawn.
- wtoken.allDrawn = true;
- wtoken.deferClearAllDrawn = false;
- // Ensure that apps that are mid-starting are also scheduled to have their
- // starting windows removed after the animation is complete
- if (wtoken.startingWindow != null && !wtoken.startingWindow.mAnimatingExit
- && wtoken.getController() != null) {
- wtoken.getController().removeStartingWindow();
- }
-
- if (mService.mAppTransition.isNextAppTransitionThumbnailDown()) {
- wtoken.attachThumbnailAnimation();
- }
- }
- }
-
- private void handleNonAppWindowsInTransition(int transit, int flags) {
- if (transit == TRANSIT_KEYGUARD_GOING_AWAY) {
- if ((flags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER) != 0
- && (flags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION) == 0) {
- Animation anim = mService.mPolicy.createKeyguardWallpaperExit(
- (flags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_SHADE) != 0);
- if (anim != null) {
- mService.getDefaultDisplayContentLocked().mWallpaperController
- .startWallpaperAnimation(anim);
- }
- }
- }
- if (transit == TRANSIT_KEYGUARD_GOING_AWAY
- || transit == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER) {
- mService.getDefaultDisplayContentLocked().startKeyguardExitOnNonAppWindows(
- transit == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER,
- (flags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_SHADE) != 0);
- }
- }
-
- private boolean transitionGoodToGo(int appsCount, SparseIntArray outReasons) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
- "Checking " + appsCount + " opening apps (frozen="
- + mService.mDisplayFrozen + " timeout="
- + mService.mAppTransition.isTimeout() + ")...");
- final ScreenRotationAnimation screenRotationAnimation =
- mService.mAnimator.getScreenRotationAnimationLocked(
- Display.DEFAULT_DISPLAY);
-
- outReasons.clear();
- if (!mService.mAppTransition.isTimeout()) {
- // Imagine the case where we are changing orientation due to an app transition, but a previous
- // orientation change is still in progress. We won't process the orientation change
- // for our transition because we need to wait for the rotation animation to finish.
- // If we start the app transition at this point, we will interrupt it halfway with a new rotation
- // animation after the old one finally finishes. It's better to defer the
- // app transition.
- if (screenRotationAnimation != null && screenRotationAnimation.isAnimating() &&
- mService.getDefaultDisplayContentLocked().rotationNeedsUpdate()) {
- if (DEBUG_APP_TRANSITIONS) {
- Slog.v(TAG, "Delaying app transition for screen rotation animation to finish");
- }
- return false;
- }
- for (int i = 0; i < appsCount; i++) {
- AppWindowToken wtoken = mService.mOpeningApps.valueAt(i);
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
- "Check opening app=" + wtoken + ": allDrawn="
- + wtoken.allDrawn + " startingDisplayed="
- + wtoken.startingDisplayed + " startingMoved="
- + wtoken.startingMoved + " isRelaunching()="
- + wtoken.isRelaunching() + " startingWindow="
- + wtoken.startingWindow);
-
-
- final boolean allDrawn = wtoken.allDrawn && !wtoken.isRelaunching();
- if (!allDrawn && !wtoken.startingDisplayed && !wtoken.startingMoved) {
- return false;
- }
- final int windowingMode = wtoken.getWindowingMode();
- if (allDrawn) {
- outReasons.put(windowingMode, APP_TRANSITION_WINDOWS_DRAWN);
- } else {
- outReasons.put(windowingMode,
- wtoken.startingData instanceof SplashScreenStartingData
- ? APP_TRANSITION_SPLASH_SCREEN
- : APP_TRANSITION_SNAPSHOT);
- }
- }
-
- // We also need to wait for the specs to be fetched, if needed.
- if (mService.mAppTransition.isFetchingAppTransitionsSpecs()) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "isFetchingAppTransitionSpecs=true");
- return false;
- }
-
- if (!mService.mUnknownAppVisibilityController.allResolved()) {
- if (DEBUG_APP_TRANSITIONS) {
- Slog.v(TAG, "unknownApps is not empty: "
- + mService.mUnknownAppVisibilityController.getDebugMessage());
- }
- return false;
- }
-
- // If the wallpaper is visible, we need to check it's ready too.
- boolean wallpaperReady = !mWallpaperControllerLocked.isWallpaperVisible() ||
- mWallpaperControllerLocked.wallpaperTransitionReady();
- if (wallpaperReady) {
- return true;
- }
- return false;
- }
- return true;
- }
-
- private int maybeUpdateTransitToWallpaper(int transit, boolean openingAppHasWallpaper,
- boolean closingAppHasWallpaper) {
- // Given no app transition pass it through instead of a wallpaper transition.
- // Never convert the crashing transition.
- // Never update the transition for the wallpaper if we are just docking from recents
- if (transit == TRANSIT_NONE || transit == TRANSIT_CRASHING_ACTIVITY_CLOSE
- || transit == TRANSIT_DOCK_TASK_FROM_RECENTS) {
- return transit;
- }
-
- final WindowState wallpaperTarget = mWallpaperControllerLocked.getWallpaperTarget();
- final boolean showWallpaper = wallpaperTarget != null
- && (wallpaperTarget.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0;
- // If wallpaper is animating or wallpaperTarget doesn't have SHOW_WALLPAPER flag set,
- // don't consider upgrading to wallpaper transition.
- final WindowState oldWallpaper =
- (mWallpaperControllerLocked.isWallpaperTargetAnimating() || !showWallpaper)
- ? null
- : wallpaperTarget;
- final ArraySet<AppWindowToken> openingApps = mService.mOpeningApps;
- final ArraySet<AppWindowToken> closingApps = mService.mClosingApps;
- final AppWindowToken topOpeningApp = getTopApp(mService.mOpeningApps,
- false /* ignoreHidden */);
- final AppWindowToken topClosingApp = getTopApp(mService.mClosingApps,
- true /* ignoreHidden */);
-
- boolean openingCanBeWallpaperTarget = canBeWallpaperTarget(openingApps);
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
- "New wallpaper target=" + wallpaperTarget
- + ", oldWallpaper=" + oldWallpaper
- + ", openingApps=" + openingApps
- + ", closingApps=" + closingApps);
-
- if (openingCanBeWallpaperTarget && transit == TRANSIT_KEYGUARD_GOING_AWAY) {
- transit = TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
- "New transit: " + AppTransition.appTransitionToString(transit));
- }
- // We never want to change from a Keyguard transit to a non-Keyguard transit, as our logic
- // relies on the fact that we always execute a Keyguard transition after preparing one.
- else if (!isKeyguardGoingAwayTransit(transit)) {
- if (closingAppHasWallpaper && openingAppHasWallpaper) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Wallpaper animation!");
- switch (transit) {
- case TRANSIT_ACTIVITY_OPEN:
- case TRANSIT_TASK_OPEN:
- case TRANSIT_TASK_TO_FRONT:
- transit = TRANSIT_WALLPAPER_INTRA_OPEN;
- break;
- case TRANSIT_ACTIVITY_CLOSE:
- case TRANSIT_TASK_CLOSE:
- case TRANSIT_TASK_TO_BACK:
- transit = TRANSIT_WALLPAPER_INTRA_CLOSE;
- break;
- }
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
- "New transit: " + AppTransition.appTransitionToString(transit));
- } else if (oldWallpaper != null && !mService.mOpeningApps.isEmpty()
- && !openingApps.contains(oldWallpaper.mAppToken)
- && closingApps.contains(oldWallpaper.mAppToken)
- && topClosingApp == oldWallpaper.mAppToken) {
- // We are transitioning from an activity with a wallpaper to one without.
- transit = TRANSIT_WALLPAPER_CLOSE;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit away from wallpaper: "
- + AppTransition.appTransitionToString(transit));
- } else if (wallpaperTarget != null && wallpaperTarget.isVisibleLw()
- && openingApps.contains(wallpaperTarget.mAppToken)
- && topOpeningApp == wallpaperTarget.mAppToken
- && transit != TRANSIT_TRANSLUCENT_ACTIVITY_CLOSE) {
- // We are transitioning from an activity without
- // a wallpaper to now showing the wallpaper
- transit = TRANSIT_WALLPAPER_OPEN;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit into wallpaper: "
- + AppTransition.appTransitionToString(transit));
- }
- }
- return transit;
- }
-
- /**
- * There are cases where we open/close a new task/activity, but in reality only a translucent
- * activity on top of existing activities is opening/closing. For that one, we have a different
- * animation because non of the task/activity animations actually work well with translucent
- * apps.
- *
- * @param transit The current transition type.
- * @return The current transition type or
- * {@link WindowManager#TRANSIT_TRANSLUCENT_ACTIVITY_CLOSE}/
- * {@link WindowManager#TRANSIT_TRANSLUCENT_ACTIVITY_OPEN} if appropriate for the
- * situation.
- */
- @VisibleForTesting
- int maybeUpdateTransitToTranslucentAnim(int transit) {
- final boolean taskOrActivity = AppTransition.isTaskTransit(transit)
- || AppTransition.isActivityTransit(transit);
- boolean allOpeningVisible = true;
- boolean allTranslucentOpeningApps = !mService.mOpeningApps.isEmpty();
- for (int i = mService.mOpeningApps.size() - 1; i >= 0; i--) {
- final AppWindowToken token = mService.mOpeningApps.valueAt(i);
- if (!token.isVisible()) {
- allOpeningVisible = false;
- if (token.fillsParent()) {
- allTranslucentOpeningApps = false;
- }
- }
- }
- boolean allTranslucentClosingApps = !mService.mClosingApps.isEmpty();
- for (int i = mService.mClosingApps.size() - 1; i >= 0; i--) {
- if (mService.mClosingApps.valueAt(i).fillsParent()) {
- allTranslucentClosingApps = false;
- break;
- }
- }
-
- if (taskOrActivity && allTranslucentClosingApps && allOpeningVisible) {
- return TRANSIT_TRANSLUCENT_ACTIVITY_CLOSE;
- }
- if (taskOrActivity && allTranslucentOpeningApps && mService.mClosingApps.isEmpty()) {
- return TRANSIT_TRANSLUCENT_ACTIVITY_OPEN;
- }
- return transit;
- }
-
- private boolean canBeWallpaperTarget(ArraySet<AppWindowToken> apps) {
- for (int i = apps.size() - 1; i >= 0; i--) {
- if (apps.valueAt(i).windowsCanBeWallpaperTarget()) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Finds the top app in a list of apps, using its {@link AppWindowToken#getPrefixOrderIndex} to
- * compare z-order.
- *
- * @param apps The list of apps to search.
- * @param ignoreHidden If set to true, ignores apps that are {@link AppWindowToken#isHidden}.
- * @return The top {@link AppWindowToken}.
- */
- private AppWindowToken getTopApp(ArraySet<AppWindowToken> apps, boolean ignoreHidden) {
- int topPrefixOrderIndex = Integer.MIN_VALUE;
- AppWindowToken topApp = null;
- for (int i = apps.size() - 1; i >= 0; i--) {
- final AppWindowToken app = apps.valueAt(i);
- if (ignoreHidden && app.isHidden()) {
- continue;
- }
- final int prefixOrderIndex = app.getPrefixOrderIndex();
- if (prefixOrderIndex > topPrefixOrderIndex) {
- topPrefixOrderIndex = prefixOrderIndex;
- topApp = app;
- }
- }
- return topApp;
- }
-
- private void processApplicationsAnimatingInPlace(int transit) {
- if (transit == TRANSIT_TASK_IN_PLACE) {
- // TODO (b/111362605): non-default-display transition.
- // Find the focused window
- final WindowState win = mService.getDefaultDisplayContentLocked().findFocusedWindow();
- if (win != null) {
- final AppWindowToken wtoken = win.mAppToken;
- if (DEBUG_APP_TRANSITIONS)
- Slog.v(TAG, "Now animating app in place " + wtoken);
- wtoken.cancelAnimation();
- wtoken.applyAnimationLocked(null, transit, false, false);
- wtoken.updateReportedVisibilityLocked();
- wtoken.showAllWindowsLocked();
- }
- }
- }
-
void requestTraversal() {
if (!mTraversalScheduled) {
mTraversalScheduled = true;
diff --git a/services/core/jni/com_android_server_connectivity_Vpn.cpp b/services/core/jni/com_android_server_connectivity_Vpn.cpp
index b6bea11..836d6d8 100644
--- a/services/core/jni/com_android_server_connectivity_Vpn.cpp
+++ b/services/core/jni/com_android_server_connectivity_Vpn.cpp
@@ -57,7 +57,7 @@
static int create_interface(int mtu)
{
- int tun = open("/dev/tun", O_RDWR | O_NONBLOCK);
+ int tun = open("/dev/tun", O_RDWR | O_NONBLOCK | O_CLOEXEC);
ifreq ifr4;
memset(&ifr4, 0, sizeof(ifr4));
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
index 7a716dc..a4983a9 100644
--- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
@@ -40,7 +40,7 @@
#include <cinttypes>
#include <iomanip>
-static jobject mCallbacksObj = NULL;
+static jobject mCallbacksObj = nullptr;
static jmethodID method_reportLocation;
static jmethodID method_reportStatus;
@@ -717,7 +717,7 @@
std::vector<uint8_t> navigationData = message.data;
uint8_t* data = &(navigationData[0]);
- if (dataLength == 0 || data == NULL) {
+ if (dataLength == 0 || data == nullptr) {
ALOGE("Invalid Navigation Message found: data=%p, length=%zd", data,
dataLength);
return Void();
@@ -749,7 +749,7 @@
Return<void> GnssMeasurementCb(const IGnssMeasurementCallback_V1_0::GnssData& data) override;
private:
void translateGnssMeasurement_V1_0(
- JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement,
+ const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement,
JavaObject& object);
jobjectArray translateGnssMeasurements(
JNIEnv* env,
@@ -772,7 +772,7 @@
clock = translateGnssClock(env, &data.clock);
measurementArray = translateGnssMeasurements(
- env, data.measurements.data(), NULL, data.measurements.size());
+ env, data.measurements.data(), nullptr, data.measurements.size());
setMeasurementData(env, clock, measurementArray);
env->DeleteLocalRef(clock);
@@ -789,7 +789,7 @@
clock = translateGnssClock(env, &data.clock);
measurementArray = translateGnssMeasurements(
- env, NULL, data.measurements.data(), data.measurementCount);
+ env, nullptr, data.measurements.data(), data.measurementCount);
setMeasurementData(env, clock, measurementArray);
env->DeleteLocalRef(clock);
@@ -799,7 +799,7 @@
// preallocate object as: JavaObject object(env, "android/location/GnssMeasurement");
void GnssMeasurementCallback::translateGnssMeasurement_V1_0(
- JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement,
+ const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement,
JavaObject& object) {
uint32_t flags = static_cast<uint32_t>(measurement->flags);
@@ -883,26 +883,26 @@
const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0,
size_t count) {
if (count == 0) {
- return NULL;
+ return nullptr;
}
jclass gnssMeasurementClass = env->FindClass("android/location/GnssMeasurement");
jobjectArray gnssMeasurementArray = env->NewObjectArray(
count,
gnssMeasurementClass,
- NULL /* initialElement */);
+ nullptr /* initialElement */);
for (uint16_t i = 0; i < count; ++i) {
JavaObject object(env, "android/location/GnssMeasurement");
- if (measurements_v1_1 != NULL) {
- translateGnssMeasurement_V1_0(env, &(measurements_v1_1[i].v1_0), object);
+ if (measurements_v1_1 != nullptr) {
+ translateGnssMeasurement_V1_0(&(measurements_v1_1[i].v1_0), object);
// Set the V1_1 flag, and mark that new field has valid information for Java Layer
SET(AccumulatedDeltaRangeState,
(static_cast<int32_t>(measurements_v1_1[i].accumulatedDeltaRangeState) |
ADR_STATE_HALF_CYCLE_REPORTED));
} else {
- translateGnssMeasurement_V1_0(env, &(measurements_v1_0[i]), object);
+ translateGnssMeasurement_V1_0(&(measurements_v1_0[i]), object);
}
env->SetObjectArrayElement(gnssMeasurementArray, i, object.get());
@@ -987,14 +987,12 @@
Return<void> AGnssCallback::agnssStatusIpV6Cb(
const IAGnssCallback::AGnssStatusIpV6& agps_status) {
JNIEnv* env = getJniEnv();
- jbyteArray byteArray = NULL;
- bool isSupported = false;
+ jbyteArray byteArray = nullptr;
byteArray = env->NewByteArray(16);
- if (byteArray != NULL) {
+ if (byteArray != nullptr) {
env->SetByteArrayRegion(byteArray, 0, 16,
(const jbyte*)(agps_status.ipV6Addr.data()));
- isSupported = true;
} else {
ALOGE("Unable to allocate byte array for IPv6 address.");
}
@@ -1006,7 +1004,7 @@
ALOGD("AGPS IP is v6: %s", str);
}
- jsize byteArrayLength = byteArray != NULL ? env->GetArrayLength(byteArray) : 0;
+ jsize byteArrayLength = byteArray != nullptr ? env->GetArrayLength(byteArray) : 0;
ALOGV("Passing AGPS IP addr: size %d", byteArrayLength);
env->CallVoidMethod(mCallbacksObj, method_reportAGpsStatus,
agps_status.type, agps_status.status, byteArray);
@@ -1023,7 +1021,7 @@
Return<void> AGnssCallback::agnssStatusIpV4Cb(
const IAGnssCallback::AGnssStatusIpV4& agps_status) {
JNIEnv* env = getJniEnv();
- jbyteArray byteArray = NULL;
+ jbyteArray byteArray = nullptr;
uint32_t ipAddr = agps_status.ipV4Addr;
byteArray = convertToIpV4(ipAddr);
@@ -1039,7 +1037,7 @@
}
jsize byteArrayLength =
- byteArray != NULL ? env->GetArrayLength(byteArray) : 0;
+ byteArray != nullptr ? env->GetArrayLength(byteArray) : 0;
ALOGV("Passing AGPS IP addr: size %d", byteArrayLength);
env->CallVoidMethod(mCallbacksObj, method_reportAGpsStatus,
agps_status.type, agps_status.status, byteArray);
@@ -1054,14 +1052,14 @@
jbyteArray AGnssCallback::convertToIpV4(uint32_t ip) {
if (INADDR_NONE == ip) {
- return NULL;
+ return nullptr;
}
JNIEnv* env = getJniEnv();
jbyteArray byteArray = env->NewByteArray(4);
- if (byteArray == NULL) {
+ if (byteArray == nullptr) {
ALOGE("Unable to allocate byte array for IPv4 address");
- return NULL;
+ return nullptr;
}
jbyte ipv4[4];
@@ -1483,7 +1481,7 @@
return;
}
- const char *setid = env->GetStringUTFChars(setid_string, NULL);
+ const char *setid = env->GetStringUTFChars(setid_string, nullptr);
agnssRilIface->setSetId((IAGnssRil::SetIDType)type, setid);
env->ReleaseStringUTFChars(setid_string, setid);
}
@@ -1579,12 +1577,12 @@
ALOGE("no AGPS interface in agps_data_conn_open");
return;
}
- if (apn == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
+ if (apn == nullptr) {
+ jniThrowException(env, "java/lang/IllegalArgumentException", nullptr);
return;
}
- const char *apnStr = env->GetStringUTFChars(apn, NULL);
+ const char *apnStr = env->GetStringUTFChars(apn, nullptr);
auto result = agnssIface->dataConnOpen(apnStr, static_cast<IAGnss::ApnIpType>(apnIpType));
if (!result.isOk() || !result){
@@ -1626,7 +1624,7 @@
return;
}
- const char *c_hostname = env->GetStringUTFChars(hostname, NULL);
+ const char *c_hostname = env->GetStringUTFChars(hostname, nullptr);
auto result = agnssIface->setServer(static_cast<IAGnssCallback::AGnssType>(type),
c_hostname,
port);
@@ -1649,7 +1647,7 @@
static jstring android_location_GnssLocationProvider_get_internal_state(JNIEnv* env,
jobject /* obj */) {
- jstring result = NULL;
+ jstring result = nullptr;
/*
* TODO(b/33089503) : Create a jobject to represent GnssDebug.
*/
@@ -1736,7 +1734,7 @@
ALOGE("updateNetworkState failed");
}
- const char *c_apn = env->GetStringUTFChars(apn, NULL);
+ const char *c_apn = env->GetStringUTFChars(apn, nullptr);
result = agnssRilIface->updateNetworkAvailability(available, c_apn);
if (!result.isOk() || !result) {
ALOGE("updateNetworkAvailability failed");
@@ -2019,15 +2017,15 @@
}
jint *constellation_array = env->GetIntArrayElements(constellations, 0);
- if (NULL == constellation_array) {
- ALOGI("GetIntArrayElements returns NULL.");
+ if (nullptr == constellation_array) {
+ ALOGI("GetIntArrayElements returns nullptr.");
return JNI_FALSE;
}
jsize length = env->GetArrayLength(constellations);
jint *sv_id_array = env->GetIntArrayElements(sv_ids, 0);
- if (NULL == sv_id_array) {
- ALOGI("GetIntArrayElements returns NULL.");
+ if (nullptr == sv_id_array) {
+ ALOGI("GetIntArrayElements returns nullptr.");
return JNI_FALSE;
}
diff --git a/services/core/jni/com_android_server_security_VerityUtils.cpp b/services/core/jni/com_android_server_security_VerityUtils.cpp
index d0f173b..ec94e3c9 100644
--- a/services/core/jni/com_android_server_security_VerityUtils.cpp
+++ b/services/core/jni/com_android_server_security_VerityUtils.cpp
@@ -66,6 +66,30 @@
jbyte* mElements;
};
+jbyteArray constructFsveritySignedData(JNIEnv* env, jobject /* clazz */, jbyteArray digest) {
+#if HAS_FSVERITY
+ const int kSha256Bytes = 32;
+ auto raii = JavaByteArrayHolder::newArray(env, sizeof(fsverity_digest_disk) + kSha256Bytes);
+ fsverity_digest_disk* data = reinterpret_cast<fsverity_digest_disk*>(raii->getRaw());
+
+ data->digest_algorithm = FS_VERITY_ALG_SHA256;
+ data->digest_size = kSha256Bytes;
+ if (env->GetArrayLength(digest) != kSha256Bytes) {
+ jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "Invalid hash size of %d",
+ env->GetArrayLength(digest));
+ return 0;
+ }
+ const jbyte* src = env->GetByteArrayElements(digest, nullptr);
+ memcpy(data->digest, src, kSha256Bytes);
+
+ return raii->release();
+#else
+ LOG_ALWAYS_FATAL("fs-verity is used while not enabled");
+ return 0;
+#endif // HAS_FSVERITY
+}
+
+
jbyteArray constructFsverityDescriptor(JNIEnv* env, jobject /* clazz */, jlong fileSize) {
#if HAS_FSVERITY
auto raii = JavaByteArrayHolder::newArray(env, sizeof(fsverity_descriptor));
@@ -122,6 +146,7 @@
}
const JNINativeMethod sMethods[] = {
+ { "constructFsveritySignedDataNative", "([B)[B", (void *)constructFsveritySignedData },
{ "constructFsverityDescriptorNative", "(J)[B", (void *)constructFsverityDescriptor },
{ "constructFsverityExtensionNative", "(SI)[B", (void *)constructFsverityExtension },
{ "constructFsverityFooterNative", "(I)[B", (void *)constructFsverityFooter },
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index bbc4f44..b1b5a7a 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -243,6 +243,8 @@
"com.android.server.timezonedetector.TimeZoneDetectorService$Lifecycle";
private static final String ACCESSIBILITY_MANAGER_SERVICE_CLASS =
"com.android.server.accessibility.AccessibilityManagerService$Lifecycle";
+ private static final String ADB_SERVICE_CLASS =
+ "com.android.server.adb.AdbService$Lifecycle";
private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst";
@@ -1372,6 +1374,15 @@
traceEnd();
}
+ // Start ADB Debugging Service
+ traceBeginAndSlog("StartAdbService");
+ try {
+ mSystemServiceManager.startService(ADB_SERVICE_CLASS);
+ } catch (Throwable e) {
+ Slog.e(TAG, "Failure starting AdbService");
+ }
+ traceEnd();
+
if (!isWatch) {
traceBeginAndSlog("StartSerialService");
try {
diff --git a/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java
index f85ffc8..3979a8e 100644
--- a/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java
@@ -27,7 +27,6 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.timeout;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
import static com.android.server.AlarmManagerService.Constants.KEY_ALLOW_WHILE_IDLE_LONG_TIME;
@@ -40,14 +39,15 @@
import static com.android.server.AlarmManagerService.Constants.KEY_MIN_INTERVAL;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.atLeastOnce;
import android.app.ActivityManager;
import android.app.AlarmManager;
@@ -61,7 +61,6 @@
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
-import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.Log;
@@ -92,7 +91,6 @@
private static final String TEST_CALLING_PACKAGE = "com.android.framework.test-package";
private static final int SYSTEM_UI_UID = 123456789;
private static final int TEST_CALLING_UID = 12345;
- private static final long DEFAULT_TIMEOUT = 5_000;
private AlarmManagerService mService;
@Mock
@@ -126,10 +124,11 @@
mElapsed = millisElapsed;
}
- synchronized long expire() {
+ synchronized void expire() throws InterruptedException {
mExpired = true;
- notify();
- return mElapsed;
+ notifyAll();
+ // Now wait for the alarm thread to finish execution.
+ wait();
}
}
@@ -146,6 +145,7 @@
@Override
int waitForAlarm() {
synchronized (mTestTimer) {
+ mTestTimer.notifyAll();
if (!mTestTimer.mExpired) {
try {
mTestTimer.wait();
@@ -268,15 +268,16 @@
final PendingIntent alarmPi = getNewMockPendingIntent();
setTestAlarm(ELAPSED_REALTIME_WAKEUP, triggerTime, alarmPi);
- mNowElapsedTest = mTestTimer.expire();
+ mNowElapsedTest = mTestTimer.getElapsed();
+ mTestTimer.expire();
final ArgumentCaptor<PendingIntent.OnFinished> onFinishedCaptor =
ArgumentCaptor.forClass(PendingIntent.OnFinished.class);
- verify(alarmPi, timeout(DEFAULT_TIMEOUT)).send(any(Context.class), eq(0),
- any(Intent.class), onFinishedCaptor.capture(), any(Handler.class), isNull(), any());
- verify(mWakeLock, timeout(DEFAULT_TIMEOUT)).acquire();
+ verify(alarmPi).send(any(Context.class), eq(0), any(Intent.class),
+ onFinishedCaptor.capture(), any(Handler.class), isNull(), any());
+ verify(mWakeLock).acquire();
onFinishedCaptor.getValue().onSendFinished(alarmPi, null, 0, null, null);
- verify(mWakeLock, timeout(DEFAULT_TIMEOUT)).release();
+ verify(mWakeLock).release();
}
@Test
@@ -351,57 +352,58 @@
when(mUsageStatsManagerInternal.getAppStandbyBucket(eq(TEST_CALLING_PACKAGE), anyInt(),
anyLong())).thenReturn(STANDBY_BUCKET_WORKING_SET);
- mNowElapsedTest = mTestTimer.expire();
- verify(mUsageStatsManagerInternal, timeout(DEFAULT_TIMEOUT).atLeastOnce())
+
+ mNowElapsedTest = mTestTimer.getElapsed();
+ mTestTimer.expire();
+
+ verify(mUsageStatsManagerInternal, atLeastOnce())
.getAppStandbyBucket(eq(TEST_CALLING_PACKAGE),
eq(UserHandle.getUserId(TEST_CALLING_UID)), anyLong());
final long expectedNextTrigger = mNowElapsedTest
+ mService.getMinDelayForBucketLocked(STANDBY_BUCKET_WORKING_SET);
- assertTrue("Incorrect next alarm trigger. Expected " + expectedNextTrigger + " found: "
- + mTestTimer.getElapsed(), pollingCheck(DEFAULT_TIMEOUT,
- () -> (mTestTimer.getElapsed() == expectedNextTrigger)));
+ assertEquals("Incorrect next alarm trigger", expectedNextTrigger, mTestTimer.getElapsed());
}
@Test
- public void testStandbyBucketDelay_frequent() {
+ public void testStandbyBucketDelay_frequent() throws Exception {
setTestAlarm(ELAPSED_REALTIME_WAKEUP, mNowElapsedTest + 5, getNewMockPendingIntent());
setTestAlarm(ELAPSED_REALTIME_WAKEUP, mNowElapsedTest + 6, getNewMockPendingIntent());
assertEquals(mNowElapsedTest + 5, mTestTimer.getElapsed());
when(mUsageStatsManagerInternal.getAppStandbyBucket(eq(TEST_CALLING_PACKAGE), anyInt(),
anyLong())).thenReturn(STANDBY_BUCKET_FREQUENT);
- mNowElapsedTest = mTestTimer.expire();
- verify(mUsageStatsManagerInternal, timeout(DEFAULT_TIMEOUT).atLeastOnce())
+ mNowElapsedTest = mTestTimer.getElapsed();
+ mTestTimer.expire();
+
+ verify(mUsageStatsManagerInternal, atLeastOnce())
.getAppStandbyBucket(eq(TEST_CALLING_PACKAGE),
eq(UserHandle.getUserId(TEST_CALLING_UID)), anyLong());
final long expectedNextTrigger = mNowElapsedTest
+ mService.getMinDelayForBucketLocked(STANDBY_BUCKET_FREQUENT);
- assertTrue("Incorrect next alarm trigger. Expected " + expectedNextTrigger + " found: "
- + mTestTimer.getElapsed(), pollingCheck(DEFAULT_TIMEOUT,
- () -> (mTestTimer.getElapsed() == expectedNextTrigger)));
+ assertEquals("Incorrect next alarm trigger.", expectedNextTrigger, mTestTimer.getElapsed());
}
@Test
- public void testStandbyBucketDelay_rare() {
+ public void testStandbyBucketDelay_rare() throws Exception {
setTestAlarm(ELAPSED_REALTIME_WAKEUP, mNowElapsedTest + 5, getNewMockPendingIntent());
setTestAlarm(ELAPSED_REALTIME_WAKEUP, mNowElapsedTest + 6, getNewMockPendingIntent());
assertEquals(mNowElapsedTest + 5, mTestTimer.getElapsed());
when(mUsageStatsManagerInternal.getAppStandbyBucket(eq(TEST_CALLING_PACKAGE), anyInt(),
anyLong())).thenReturn(STANDBY_BUCKET_RARE);
- mNowElapsedTest = mTestTimer.expire();
- verify(mUsageStatsManagerInternal, timeout(DEFAULT_TIMEOUT).atLeastOnce())
+ mNowElapsedTest = mTestTimer.getElapsed();
+ mTestTimer.expire();
+
+ verify(mUsageStatsManagerInternal, atLeastOnce())
.getAppStandbyBucket(eq(TEST_CALLING_PACKAGE),
eq(UserHandle.getUserId(TEST_CALLING_UID)), anyLong());
final long expectedNextTrigger = mNowElapsedTest
+ mService.getMinDelayForBucketLocked(STANDBY_BUCKET_RARE);
- assertTrue("Incorrect next alarm trigger. Expected " + expectedNextTrigger + " found: "
- + mTestTimer.getElapsed(), pollingCheck(DEFAULT_TIMEOUT,
- () -> (mTestTimer.getElapsed() == expectedNextTrigger)));
+ assertEquals("Incorrect next alarm trigger.", expectedNextTrigger, mTestTimer.getElapsed());
}
@Test
- public void testAlarmRestrictedInBatterSaver() throws PendingIntent.CanceledException {
+ public void testAlarmRestrictedInBatterSaver() throws Exception {
final ArgumentCaptor<AppStateTracker.Listener> listenerArgumentCaptor =
ArgumentCaptor.forClass(AppStateTracker.Listener.class);
verify(mAppStateTracker).addListener(listenerArgumentCaptor.capture());
@@ -416,8 +418,9 @@
mService.mPendingBackgroundAlarms;
assertNull(restrictedAlarms.get(TEST_CALLING_UID));
- mNowElapsedTest = mTestTimer.expire();
- pollingCheck(DEFAULT_TIMEOUT, () -> (restrictedAlarms.get(TEST_CALLING_UID) != null));
+ mNowElapsedTest = mTestTimer.getElapsed();
+ mTestTimer.expire();
+ assertNotNull(restrictedAlarms.get(TEST_CALLING_UID));
listenerArgumentCaptor.getValue().unblockAlarmsForUid(TEST_CALLING_UID);
verify(alarmPi).send(any(Context.class), eq(0), any(Intent.class), any(),
@@ -431,25 +434,4 @@
mMockingSession.finishMocking();
}
}
-
- private boolean pollingCheck(long timeout, Condition condition) {
- final long deadline = SystemClock.uptimeMillis() + timeout;
- boolean interrupted = false;
- while (!condition.check() && SystemClock.uptimeMillis() < deadline) {
- try {
- Thread.sleep(500);
- } catch (InterruptedException ie) {
- interrupted = true;
- }
- }
- if (interrupted) {
- Thread.currentThread().interrupt();
- }
- return condition.check();
- }
-
- @FunctionalInterface
- interface Condition {
- boolean check();
- }
}
diff --git a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java
index 129b835..04fe787 100644
--- a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java
@@ -30,6 +30,7 @@
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.view.Display.DEFAULT_DISPLAY;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -55,7 +56,6 @@
import android.os.SystemClock;
import android.platform.test.annotations.Presubmit;
import android.util.MutableLong;
-import android.util.SparseArray;
import android.util.SparseBooleanArray;
import androidx.test.InstrumentationRegistry;
@@ -665,6 +665,39 @@
}
@Test
+ public void testNotRestoreRecentTaskApis() {
+ final TaskRecord task = createTaskBuilder(".Task").build();
+ final int taskId = task.taskId;
+ mRecentTasks.add(task);
+ // Only keep the task in RecentTasks.
+ task.removeWindowContainer();
+ mStack.remove();
+
+ // The following APIs should not restore task from recents to the active list.
+ assertNotRestoreTask(() -> mService.setFocusedTask(taskId));
+ assertNotRestoreTask(() -> mService.startSystemLockTaskMode(taskId));
+ assertNotRestoreTask(() -> mService.cancelTaskWindowTransition(taskId));
+ assertNotRestoreTask(
+ () -> mService.resizeTask(taskId, null /* bounds */, 0 /* resizeMode */));
+ assertNotRestoreTask(
+ () -> mService.setTaskWindowingMode(taskId, WINDOWING_MODE_FULLSCREEN,
+ false/* toTop */));
+ assertNotRestoreTask(
+ () -> mService.setTaskWindowingModeSplitScreenPrimary(taskId,
+ SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT,
+ false /* toTop */, false /* animate */, null /* initialBounds */,
+ true /* showRecents */));
+ }
+
+ private void assertNotRestoreTask(Runnable action) {
+ // Verify stack count doesn't change because task with fullscreen mode and standard type
+ // would have its own stack.
+ final int orignalStackCount = mDisplay.getChildCount();
+ action.run();
+ assertEquals(orignalStackCount, mDisplay.getChildCount());
+ }
+
+ @Test
public void testNotRecentsComponent_denyApiAccess() throws Exception {
doReturn(PackageManager.PERMISSION_DENIED).when(mService)
.checkGetTasksPermission(anyString(), anyInt(), anyInt());
diff --git a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
index 92211ec..7c00299 100644
--- a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
+++ b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
@@ -118,8 +118,8 @@
}
@Test
- public void initialize_forUserSystem_successfullyInitialized() {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ public void initializeService_forUserSystem_successfullyInitialized() {
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertTrue(mTrampoline.isBackupServiceActive(UserHandle.USER_SYSTEM));
}
@@ -127,29 +127,29 @@
// The BackupManagerService can only be initialized by USER_SYSTEM, so we check that if any
// other user trying to initialize it leaves it non-active.
@Test
- public void initialize_forNonUserSystem_nonInitialized() {
- mTrampoline.initialize(NON_USER_SYSTEM);
+ public void initializeService_forNonUserSystem_nonInitialized() {
+ mTrampoline.initializeService(NON_USER_SYSTEM);
assertFalse(mTrampoline.isBackupServiceActive(NON_USER_SYSTEM));
}
@Test
- public void initialize_globallyDisabled_nonInitialized() {
+ public void initializeService_globallyDisabled_nonInitialized() {
TrampolineTestable.sBackupDisabled = true;
TrampolineTestable trampoline = new TrampolineTestable(mContextMock);
- trampoline.initialize(UserHandle.USER_SYSTEM);
+ trampoline.initializeService(UserHandle.USER_SYSTEM);
assertFalse(trampoline.isBackupServiceActive(UserHandle.USER_SYSTEM));
}
// Verify that BackupManagerService is not initialized if suppress file exists.
@Test
- public void initialize_suppressFileExists_nonInitialized() {
+ public void initializeService_suppressFileExists_nonInitialized() {
when(mSuppressFileMock.exists()).thenReturn(true);
TrampolineTestable trampoline = new TrampolineTestable(mContextMock);
- trampoline.initialize(UserHandle.USER_SYSTEM);
+ trampoline.initializeService(UserHandle.USER_SYSTEM);
assertFalse(trampoline.isBackupServiceActive(UserHandle.USER_SYSTEM));
}
@@ -229,7 +229,7 @@
@Test
public void setBackupServiceActive_makeNonActive_serviceDeletedAndSuppressFileCreated()
throws IOException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertTrue(mTrampoline.isBackupServiceActive(UserHandle.USER_SYSTEM));
mTrampoline.setBackupServiceActive(UserHandle.USER_SYSTEM, false);
@@ -243,7 +243,7 @@
setBackupServiceActive_makeNonActive_serviceDeletedAndSuppressFileCreated_ioExceptionHandled()
throws IOException {
when(mSuppressFileMock.createNewFile()).thenThrow(new IOException());
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertTrue(mTrampoline.isBackupServiceActive(UserHandle.USER_SYSTEM));
mTrampoline.setBackupServiceActive(UserHandle.USER_SYSTEM, false);
@@ -269,7 +269,7 @@
@Test
public void dataChanged_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.dataChanged(PACKAGE_NAME);
verify(mBackupManagerServiceMock).dataChanged(PACKAGE_NAME);
}
@@ -282,7 +282,7 @@
@Test
public void clearBackupData_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.clearBackupData(TRANSPORT_NAME, PACKAGE_NAME);
verify(mBackupManagerServiceMock).clearBackupData(TRANSPORT_NAME, PACKAGE_NAME);
}
@@ -295,7 +295,7 @@
@Test
public void agentConnected_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.agentConnected(PACKAGE_NAME, mAgentMock);
verify(mBackupManagerServiceMock).agentConnected(PACKAGE_NAME, mAgentMock);
}
@@ -308,7 +308,7 @@
@Test
public void agentDisconnected_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.agentDisconnected(PACKAGE_NAME);
verify(mBackupManagerServiceMock).agentDisconnected(PACKAGE_NAME);
}
@@ -321,7 +321,7 @@
@Test
public void restoreAtInstall_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.restoreAtInstall(PACKAGE_NAME, 123);
verify(mBackupManagerServiceMock).restoreAtInstall(PACKAGE_NAME, 123);
}
@@ -334,7 +334,7 @@
@Test
public void setBackupEnabled_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.setBackupEnabled(true);
verify(mBackupManagerServiceMock).setBackupEnabled(true);
}
@@ -347,7 +347,7 @@
@Test
public void setAutoRestore_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.setAutoRestore(true);
verify(mBackupManagerServiceMock).setAutoRestore(true);
}
@@ -360,7 +360,7 @@
@Test
public void setBackupProvisioned_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.setBackupProvisioned(true);
verify(mBackupManagerServiceMock).setBackupProvisioned(true);
}
@@ -373,7 +373,7 @@
@Test
public void isBackupEnabled_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.isBackupEnabled();
verify(mBackupManagerServiceMock).isBackupEnabled();
}
@@ -386,7 +386,7 @@
@Test
public void setBackupPassword_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.setBackupPassword(CURRENT_PASSWORD, NEW_PASSWORD);
verify(mBackupManagerServiceMock).setBackupPassword(CURRENT_PASSWORD, NEW_PASSWORD);
}
@@ -399,7 +399,7 @@
@Test
public void hasBackupPassword_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.hasBackupPassword();
verify(mBackupManagerServiceMock).hasBackupPassword();
}
@@ -412,7 +412,7 @@
@Test
public void backupNow_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.backupNow();
verify(mBackupManagerServiceMock).backupNow();
}
@@ -427,7 +427,7 @@
@Test
public void adbBackup_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.adbBackup(mParcelFileDescriptorMock, true, true, true, true, true, true, true,
true,
PACKAGE_NAMES);
@@ -444,7 +444,7 @@
@Test
public void fullTransportBackup_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.fullTransportBackup(PACKAGE_NAMES);
verify(mBackupManagerServiceMock).fullTransportBackup(PACKAGE_NAMES);
}
@@ -457,7 +457,7 @@
@Test
public void adbRestore_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.adbRestore(mParcelFileDescriptorMock);
verify(mBackupManagerServiceMock).adbRestore(mParcelFileDescriptorMock);
}
@@ -472,7 +472,7 @@
@Test
public void acknowledgeFullBackupOrRestore_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.acknowledgeFullBackupOrRestore(123, true, CURRENT_PASSWORD, ENCRYPTION_PASSWORD,
mFullBackupRestoreObserverMock);
verify(mBackupManagerServiceMock).acknowledgeAdbBackupOrRestore(123, true, CURRENT_PASSWORD,
@@ -489,7 +489,7 @@
public void getCurrentTransport_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.getCurrentTransport()).thenReturn(TRANSPORT_NAME);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertEquals(TRANSPORT_NAME, mTrampoline.getCurrentTransport());
verify(mBackupManagerServiceMock).getCurrentTransport();
@@ -505,7 +505,7 @@
public void listAllTransports_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.listAllTransports()).thenReturn(TRANSPORTS);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertEquals(TRANSPORTS, mTrampoline.listAllTransports());
verify(mBackupManagerServiceMock).listAllTransports();
}
@@ -521,7 +521,7 @@
when(mBackupManagerServiceMock.listAllTransportComponents()).thenReturn(
TRANSPORT_COMPONENTS);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertEquals(TRANSPORT_COMPONENTS, mTrampoline.listAllTransportComponents());
verify(mBackupManagerServiceMock).listAllTransportComponents();
}
@@ -536,7 +536,7 @@
public void getTransportWhitelist_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.getTransportWhitelist()).thenReturn(TRANSPORTS);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertEquals(TRANSPORTS, mTrampoline.getTransportWhitelist());
verify(mBackupManagerServiceMock).getTransportWhitelist();
}
@@ -552,7 +552,7 @@
public void describeTransport_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.getTransportWhitelist()).thenReturn(TRANSPORTS);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.updateTransportAttributes(TRANSPORT_COMPONENT_NAME, TRANSPORT_NAME, null,
"Transport Destination", null, "Data Management");
verify(mBackupManagerServiceMock).updateTransportAttributes(TRANSPORT_COMPONENT_NAME,
@@ -567,7 +567,7 @@
@Test
public void selectBackupTransport_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.selectBackupTransport(TRANSPORT_NAME);
verify(mBackupManagerServiceMock).selectBackupTransport(TRANSPORT_NAME);
}
@@ -634,7 +634,7 @@
@Test
public void selectBackupTransportAsync_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.selectBackupTransportAsync(TRANSPORT_COMPONENT_NAME, null);
verify(mBackupManagerServiceMock).selectBackupTransportAsync(TRANSPORT_COMPONENT_NAME,
null);
@@ -652,7 +652,7 @@
when(mBackupManagerServiceMock.getConfigurationIntent(TRANSPORT_NAME)).thenReturn(
configurationIntentStub);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertEquals(configurationIntentStub, mTrampoline.getConfigurationIntent(TRANSPORT_NAME));
verify(mBackupManagerServiceMock).getConfigurationIntent(TRANSPORT_NAME);
}
@@ -668,7 +668,7 @@
when(mBackupManagerServiceMock.getDestinationString(TRANSPORT_NAME)).thenReturn(
DESTINATION_STRING);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertEquals(DESTINATION_STRING, mTrampoline.getDestinationString(TRANSPORT_NAME));
verify(mBackupManagerServiceMock).getDestinationString(TRANSPORT_NAME);
}
@@ -685,7 +685,7 @@
when(mBackupManagerServiceMock.getDataManagementIntent(TRANSPORT_NAME)).thenReturn(
dataManagementIntent);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertEquals(dataManagementIntent, mTrampoline.getDataManagementIntent(TRANSPORT_NAME));
verify(mBackupManagerServiceMock).getDataManagementIntent(TRANSPORT_NAME);
}
@@ -701,7 +701,7 @@
when(mBackupManagerServiceMock.getDataManagementLabel(TRANSPORT_NAME)).thenReturn(
DATA_MANAGEMENT_LABEL);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertEquals(DATA_MANAGEMENT_LABEL, mTrampoline.getDataManagementLabel(TRANSPORT_NAME));
verify(mBackupManagerServiceMock).getDataManagementLabel(TRANSPORT_NAME);
}
@@ -714,7 +714,7 @@
@Test
public void beginRestoreSession_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.beginRestoreSession(PACKAGE_NAME, TRANSPORT_NAME);
verify(mBackupManagerServiceMock).beginRestoreSession(PACKAGE_NAME, TRANSPORT_NAME);
}
@@ -727,7 +727,7 @@
@Test
public void opComplete_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.opComplete(1, 2);
verify(mBackupManagerServiceMock).opComplete(1, 2);
}
@@ -742,7 +742,7 @@
public void getAvailableRestoreToken_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.getAvailableRestoreToken(PACKAGE_NAME)).thenReturn(123L);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertEquals(123, mTrampoline.getAvailableRestoreToken(PACKAGE_NAME));
verify(mBackupManagerServiceMock).getAvailableRestoreToken(PACKAGE_NAME);
}
@@ -757,7 +757,7 @@
public void isAppEligibleForBackup_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.isAppEligibleForBackup(PACKAGE_NAME)).thenReturn(true);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertTrue(mTrampoline.isAppEligibleForBackup(PACKAGE_NAME));
verify(mBackupManagerServiceMock).isAppEligibleForBackup(PACKAGE_NAME);
}
@@ -774,7 +774,7 @@
when(mBackupManagerServiceMock.requestBackup(PACKAGE_NAMES, mBackupObserverMock,
mBackupManagerMonitorMock, 123)).thenReturn(456);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertEquals(456, mTrampoline.requestBackup(PACKAGE_NAMES, mBackupObserverMock,
mBackupManagerMonitorMock, 123));
verify(mBackupManagerServiceMock).requestBackup(PACKAGE_NAMES, mBackupObserverMock,
@@ -789,7 +789,7 @@
@Test
public void cancelBackups_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.cancelBackups();
verify(mBackupManagerServiceMock).cancelBackups();
}
@@ -805,7 +805,7 @@
FullBackupJob fullBackupJob = new FullBackupJob();
when(mBackupManagerServiceMock.beginFullBackup(fullBackupJob)).thenReturn(true);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
assertTrue(mTrampoline.beginFullBackup(fullBackupJob));
verify(mBackupManagerServiceMock).beginFullBackup(fullBackupJob);
}
@@ -818,7 +818,7 @@
@Test
public void endFullBackup_forwarded() throws RemoteException {
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.endFullBackup();
verify(mBackupManagerServiceMock).endFullBackup();
}
@@ -829,7 +829,7 @@
android.Manifest.permission.DUMP)).thenReturn(
PackageManager.PERMISSION_DENIED);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.dump(mFileDescriptorStub, mPrintWriterMock, new String[0]);
@@ -853,7 +853,7 @@
android.Manifest.permission.DUMP)).thenReturn(
PackageManager.PERMISSION_GRANTED);
- mTrampoline.initialize(UserHandle.USER_SYSTEM);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.dump(mFileDescriptorStub, mPrintWriterMock, null);
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowSurfacePlacerTest.java b/services/tests/servicestests/src/com/android/server/wm/AppTransitionControllerTest.java
similarity index 79%
rename from services/tests/servicestests/src/com/android/server/wm/WindowSurfacePlacerTest.java
rename to services/tests/servicestests/src/com/android/server/wm/AppTransitionControllerTest.java
index 057f047..aa495f7 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowSurfacePlacerTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/AppTransitionControllerTest.java
@@ -36,14 +36,14 @@
@SmallTest
@Presubmit
@RunWith(AndroidJUnit4.class)
-public class WindowSurfacePlacerTest extends WindowTestsBase {
+public class AppTransitionControllerTest extends WindowTestsBase {
- private WindowSurfacePlacer mWindowSurfacePlacer;
+ private AppTransitionController mAppTransitionController;
@Before
public void setUp() throws Exception {
super.setUp();
- mWindowSurfacePlacer = new WindowSurfacePlacer(sWm);
+ mAppTransitionController = new AppTransitionController(sWm, mDisplayContent);
}
@Test
@@ -55,10 +55,11 @@
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
translucentOpening.setFillsParent(false);
translucentOpening.setHidden(true);
- sWm.mOpeningApps.add(behind);
- sWm.mOpeningApps.add(translucentOpening);
+ mDisplayContent.mOpeningApps.add(behind);
+ mDisplayContent.mOpeningApps.add(translucentOpening);
assertEquals(WindowManager.TRANSIT_TRANSLUCENT_ACTIVITY_OPEN,
- mWindowSurfacePlacer.maybeUpdateTransitToTranslucentAnim(TRANSIT_TASK_OPEN));
+ mAppTransitionController.maybeUpdateTransitToTranslucentAnim(
+ TRANSIT_TASK_OPEN));
}
}
@@ -70,9 +71,10 @@
final AppWindowToken translucentClosing = createAppWindowToken(mDisplayContent,
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
translucentClosing.setFillsParent(false);
- sWm.mClosingApps.add(translucentClosing);
+ mDisplayContent.mClosingApps.add(translucentClosing);
assertEquals(WindowManager.TRANSIT_TRANSLUCENT_ACTIVITY_CLOSE,
- mWindowSurfacePlacer.maybeUpdateTransitToTranslucentAnim(TRANSIT_TASK_CLOSE));
+ mAppTransitionController.maybeUpdateTransitToTranslucentAnim(
+ TRANSIT_TASK_CLOSE));
}
}
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/AppTransitionTests.java b/services/tests/servicestests/src/com/android/server/wm/AppTransitionTests.java
index 3053c41..ee6fbac 100644
--- a/services/tests/servicestests/src/com/android/server/wm/AppTransitionTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/AppTransitionTests.java
@@ -16,22 +16,33 @@
package com.android.server.wm;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.view.WindowManager.TRANSIT_ACTIVITY_CLOSE;
import static android.view.WindowManager.TRANSIT_ACTIVITY_OPEN;
import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE;
import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY;
import static android.view.WindowManager.TRANSIT_KEYGUARD_UNOCCLUDE;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
import android.content.Context;
+import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
+import android.view.Display;
+import android.view.IApplicationToken;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -43,51 +54,142 @@
@SmallTest
@Presubmit
@RunWith(AndroidJUnit4.class)
-public class AppTransitionTests {
+public class AppTransitionTests extends WindowTestsBase {
- @Rule
- public final WindowManagerServiceRule mRule = new WindowManagerServiceRule();
- private WindowManagerService mWm;
+ private DisplayContent mDc;
@Before
public void setUp() throws Exception {
+ super.setUp();
final Context context = InstrumentationRegistry.getTargetContext();
- mWm = mRule.getWindowManagerService();
+ mDc = sWm.getDefaultDisplayContentLocked();
+ // For unit test, we don't need to test performSurfacePlacement to prevent some
+ // abnormal interaction with surfaceflinger native side.
+ sWm.mRoot = spy(sWm.mRoot);
+ doNothing().when(sWm.mRoot).performSurfacePlacement(anyBoolean());
}
@Test
public void testKeyguardOverride() throws Exception {
- mWm.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false /* alwaysKeepCurrent */);
- mWm.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY, false /* alwaysKeepCurrent */);
- assertEquals(TRANSIT_KEYGUARD_GOING_AWAY, mWm.mAppTransition.getAppTransition());
+ sWm.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false /* alwaysKeepCurrent */);
+ sWm.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY, false /* alwaysKeepCurrent */);
+ assertEquals(TRANSIT_KEYGUARD_GOING_AWAY, mDc.mAppTransition.getAppTransition());
}
@Test
public void testKeyguardKeep() throws Exception {
- mWm.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY, false /* alwaysKeepCurrent */);
- mWm.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false /* alwaysKeepCurrent */);
- assertEquals(TRANSIT_KEYGUARD_GOING_AWAY, mWm.mAppTransition.getAppTransition());
+ sWm.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY, false /* alwaysKeepCurrent */);
+ sWm.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false /* alwaysKeepCurrent */);
+ assertEquals(TRANSIT_KEYGUARD_GOING_AWAY, mDc.mAppTransition.getAppTransition());
}
@Test
public void testForceOverride() throws Exception {
- mWm.prepareAppTransition(TRANSIT_KEYGUARD_UNOCCLUDE, false /* alwaysKeepCurrent */);
- mWm.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false /* alwaysKeepCurrent */,
- 0 /* flags */, true /* forceOverride */);
- assertEquals(TRANSIT_ACTIVITY_OPEN, mWm.mAppTransition.getAppTransition());
+ sWm.prepareAppTransition(TRANSIT_KEYGUARD_UNOCCLUDE, false /* alwaysKeepCurrent */);
+ mDc.getController().prepareAppTransition(TRANSIT_ACTIVITY_OPEN,
+ false /* alwaysKeepCurrent */, 0 /* flags */, true /* forceOverride */);
+ assertEquals(TRANSIT_ACTIVITY_OPEN, mDc.mAppTransition.getAppTransition());
}
@Test
public void testCrashing() throws Exception {
- mWm.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false /* alwaysKeepCurrent */);
- mWm.prepareAppTransition(TRANSIT_CRASHING_ACTIVITY_CLOSE, false /* alwaysKeepCurrent */);
- assertEquals(TRANSIT_CRASHING_ACTIVITY_CLOSE, mWm.mAppTransition.getAppTransition());
+ sWm.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false /* alwaysKeepCurrent */);
+ sWm.prepareAppTransition(TRANSIT_CRASHING_ACTIVITY_CLOSE, false /* alwaysKeepCurrent */);
+ assertEquals(TRANSIT_CRASHING_ACTIVITY_CLOSE, mDc.mAppTransition.getAppTransition());
}
@Test
public void testKeepKeyguard_withCrashing() throws Exception {
- mWm.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY, false /* alwaysKeepCurrent */);
- mWm.prepareAppTransition(TRANSIT_CRASHING_ACTIVITY_CLOSE, false /* alwaysKeepCurrent */);
- assertEquals(TRANSIT_KEYGUARD_GOING_AWAY, mWm.mAppTransition.getAppTransition());
+ sWm.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY, false /* alwaysKeepCurrent */);
+ sWm.prepareAppTransition(TRANSIT_CRASHING_ACTIVITY_CLOSE, false /* alwaysKeepCurrent */);
+ assertEquals(TRANSIT_KEYGUARD_GOING_AWAY, mDc.mAppTransition.getAppTransition());
+ }
+
+ @Test
+ public void testAppTransitionStateForMultiDisplay() throws Exception {
+ // Create 2 displays & presume both display the state is ON for ready to display & animate.
+ final DisplayContent dc1 = createNewDisplayWithController(Display.STATE_ON);
+ final DisplayContent dc2 = createNewDisplayWithController(Display.STATE_ON);
+
+ // Create 2 app window tokens to represent 2 activity window.
+ final WindowTestUtils.TestAppWindowToken token1 = createTestAppWindowToken(dc1,
+ WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
+ final WindowTestUtils.TestAppWindowToken token2 = createTestAppWindowToken(dc2,
+ WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
+
+ // Set TestAppWindowContainerController & assign first app token state to be good to go.
+ final WindowTestUtils.TestAppWindowContainerController controller1 =
+ createAppWindowController(dc1, token1.appToken);
+ final WindowTestUtils.TestAppWindowContainerController controller2 =
+ createAppWindowController(dc1, token2.appToken);
+ controller1.setContainer(token1);
+ token1.allDrawn = true;
+ token1.startingDisplayed = true;
+ token1.startingMoved = true;
+ controller2.setContainer(token2);
+
+ // Simulate activity resume / finish flows to prepare app transition & set visibility,
+ // make sure transition is set as expected for each display.
+ dc1.getController().prepareAppTransition(TRANSIT_ACTIVITY_OPEN,
+ false /* alwaysKeepCurrent */, 0 /* flags */, false /* forceOverride */);
+ assertEquals(TRANSIT_ACTIVITY_OPEN, dc1.mAppTransition.getAppTransition());
+ dc2.getController().prepareAppTransition(TRANSIT_ACTIVITY_CLOSE,
+ false /* alwaysKeepCurrent */, 0 /* flags */, false /* forceOverride */);
+ assertEquals(TRANSIT_ACTIVITY_CLOSE, dc2.mAppTransition.getAppTransition());
+ // One activity window is visible for resuming & the other activity window is invisible
+ // for finishing in different display.
+ controller1.setVisibility(true, false);
+ controller2.setVisibility(false, false);
+
+ // Make sure each display is in animating stage.
+ assertTrue(dc1.mOpeningApps.size() > 0);
+ assertTrue(dc2.mClosingApps.size() > 0);
+ assertTrue(dc1.isAppAnimating());
+ assertTrue(dc2.isAppAnimating());
+ }
+
+ @Test
+ public void testCleanAppTransitionWhenTaskStackReparent() throws Exception {
+ // Create 2 displays & presume both display the state is ON for ready to display & animate.
+ final DisplayContent dc1 = createNewDisplayWithController(Display.STATE_ON);
+ final DisplayContent dc2 = createNewDisplayWithController(Display.STATE_ON);
+
+ final TaskStack stack1 = createTaskStackOnDisplay(dc1);
+ final Task task1 = createTaskInStack(stack1, 0 /* userId */);
+ final WindowTestUtils.TestAppWindowToken token1 =
+ WindowTestUtils.createTestAppWindowToken(dc1);
+ task1.addChild(token1, 0);
+
+ // Simulate same app is during opening / closing transition set stage.
+ dc1.mClosingApps.add(token1);
+ assertTrue(dc1.mClosingApps.size() > 0);
+
+ dc1.getController().prepareAppTransition(TRANSIT_ACTIVITY_OPEN,
+ false /* alwaysKeepCurrent */, 0 /* flags */, false /* forceOverride */);
+ assertEquals(TRANSIT_ACTIVITY_OPEN, dc1.mAppTransition.getAppTransition());
+ assertTrue(dc1.mAppTransition.isTransitionSet());
+
+ dc1.mOpeningApps.add(token1);
+ assertTrue(dc1.mOpeningApps.size() > 0);
+
+ // Move stack to another display.
+ stack1.getController().reparent(dc2.getDisplayId(), new Rect(), true);
+
+ // Verify if token are cleared from both pending transition list in former display.
+ assertFalse(dc1.mOpeningApps.contains(token1));
+ assertFalse(dc1.mOpeningApps.contains(token1));
+ }
+
+ private WindowTestUtils.TestAppWindowContainerController createAppWindowController(
+ DisplayContent dc, IApplicationToken token) {
+ return createAppWindowController(
+ new WindowTestUtils.TestTaskWindowContainerController(
+ createStackControllerOnDisplay(dc)), token);
+ }
+
+ private WindowTestUtils.TestAppWindowContainerController createAppWindowController(
+ WindowTestUtils.TestTaskWindowContainerController taskController,
+ IApplicationToken token) {
+ return new WindowTestUtils.TestAppWindowContainerController(taskController, token);
}
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java
index e6e08bb..d65055c 100644
--- a/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java
@@ -16,6 +16,8 @@
package com.android.server.wm;
+import static android.view.Display.DEFAULT_DISPLAY;
+
import static com.android.server.wm.BoundsAnimationController.NO_PIP_MODE_CHANGED_CALLBACKS;
import static com.android.server.wm.BoundsAnimationController.SCHEDULE_PIP_MODE_CHANGED_ON_END;
import static com.android.server.wm.BoundsAnimationController.SCHEDULE_PIP_MODE_CHANGED_ON_START;
@@ -90,7 +92,7 @@
private AppTransitionListener mListener;
MockAppTransition(Context context) {
- super(context, sWm);
+ super(context, sWm, mDisplayContent);
}
@Override
diff --git a/services/tests/servicestests/src/com/android/server/wm/RemoteAnimationControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/RemoteAnimationControllerTest.java
index 7d19baa..ae92984 100644
--- a/services/tests/servicestests/src/com/android/server/wm/RemoteAnimationControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/RemoteAnimationControllerTest.java
@@ -85,7 +85,7 @@
@Test
public void testRun() throws Exception {
final WindowState win = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin");
- sWm.mOpeningApps.add(win.mAppToken);
+ mDisplayContent.mOpeningApps.add(win.mAppToken);
try {
final AnimationAdapter adapter = mController.createAnimationAdapter(win.mAppToken,
new Point(50, 100), new Rect(50, 100, 150, 150));
@@ -113,7 +113,7 @@
finishedCaptor.getValue().onAnimationFinished();
verify(mFinishedCallback).onAnimationFinished(eq(adapter));
} finally {
- sWm.mOpeningApps.clear();
+ mDisplayContent.mOpeningApps.clear();
}
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java
index 53a1185..cb5c1cd 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java
@@ -74,7 +74,7 @@
appWindowToken2.setOrientation(SCREEN_ORIENTATION_PORTRAIT);
assertEquals(SCREEN_ORIENTATION_PORTRAIT, stack.getOrientation());
- sWm.mClosingApps.add(appWindowToken2);
+ mDisplayContent.mClosingApps.add(appWindowToken2);
assertEquals(SCREEN_ORIENTATION_LANDSCAPE, stack.getOrientation());
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java
index 3ac97027..54456fb 100644
--- a/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java
@@ -40,50 +40,50 @@
@Before
public void setUp() throws Exception {
super.setUp();
- sWm.mUnknownAppVisibilityController.clear();
+ mDisplayContent.mUnknownAppVisibilityController.clear();
}
@Test
public void testFlow() throws Exception {
final AppWindowToken token = WindowTestUtils.createTestAppWindowToken(mDisplayContent);
- sWm.mUnknownAppVisibilityController.notifyLaunched(token);
- sWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token);
- sWm.mUnknownAppVisibilityController.notifyRelayouted(token);
+ mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(token);
+ mDisplayContent.mUnknownAppVisibilityController.notifyAppResumedFinished(token);
+ mDisplayContent.mUnknownAppVisibilityController.notifyRelayouted(token);
// Make sure our handler processed the message.
Thread.sleep(100);
- assertTrue(sWm.mUnknownAppVisibilityController.allResolved());
+ assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved());
}
@Test
public void testMultiple() throws Exception {
final AppWindowToken token1 = WindowTestUtils.createTestAppWindowToken(mDisplayContent);
final AppWindowToken token2 = WindowTestUtils.createTestAppWindowToken(mDisplayContent);
- sWm.mUnknownAppVisibilityController.notifyLaunched(token1);
- sWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token1);
- sWm.mUnknownAppVisibilityController.notifyLaunched(token2);
- sWm.mUnknownAppVisibilityController.notifyRelayouted(token1);
- sWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token2);
- sWm.mUnknownAppVisibilityController.notifyRelayouted(token2);
+ mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(token1);
+ mDisplayContent.mUnknownAppVisibilityController.notifyAppResumedFinished(token1);
+ mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(token2);
+ mDisplayContent.mUnknownAppVisibilityController.notifyRelayouted(token1);
+ mDisplayContent.mUnknownAppVisibilityController.notifyAppResumedFinished(token2);
+ mDisplayContent.mUnknownAppVisibilityController.notifyRelayouted(token2);
// Make sure our handler processed the message.
Thread.sleep(100);
- assertTrue(sWm.mUnknownAppVisibilityController.allResolved());
+ assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved());
}
@Test
public void testClear() throws Exception {
final AppWindowToken token = WindowTestUtils.createTestAppWindowToken(mDisplayContent);
- sWm.mUnknownAppVisibilityController.notifyLaunched(token);
- sWm.mUnknownAppVisibilityController.clear();;
- assertTrue(sWm.mUnknownAppVisibilityController.allResolved());
+ mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(token);
+ mDisplayContent.mUnknownAppVisibilityController.clear();;
+ assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved());
}
@Test
public void testAppRemoved() throws Exception {
final AppWindowToken token = WindowTestUtils.createTestAppWindowToken(mDisplayContent);
- sWm.mUnknownAppVisibilityController.notifyLaunched(token);
- sWm.mUnknownAppVisibilityController.appRemovedOrHidden(token);
- assertTrue(sWm.mUnknownAppVisibilityController.allResolved());
+ mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(token);
+ mDisplayContent.mUnknownAppVisibilityController.appRemovedOrHidden(token);
+ assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved());
}
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRule.java b/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRule.java
index 389eba5..012c4be 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRule.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRule.java
@@ -33,6 +33,7 @@
import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManagerInternal;
import android.os.PowerSaveState;
+import android.view.Display;
import android.view.InputChannel;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction;
@@ -114,7 +115,7 @@
runnable.run();
}
return null;
- }).when(atm).notifyKeyguardFlagsChanged(any());
+ }).when(atm).notifyKeyguardFlagsChanged(any(), anyInt());
InputManagerService ims = mock(InputManagerService.class);
// InputChannel is final and can't be mocked.
@@ -142,11 +143,11 @@
mService.onInitReady();
+ final Display display = mService.mDisplayManager.getDisplay(DEFAULT_DISPLAY);
+ final DisplayWindowController dcw = new DisplayWindowController(display, mService);
// Display creation is driven by the ActivityManagerService via ActivityStackSupervisor.
// We emulate those steps here.
- mService.mRoot.createDisplayContent(
- mService.mDisplayManager.getDisplay(DEFAULT_DISPLAY),
- mock(DisplayWindowController.class));
+ mService.mRoot.createDisplayContent(display, dcw);
}
private void removeServices() {
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
index d0a81b2..dcfe556 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
@@ -181,9 +181,12 @@
displayContent.removeImmediately();
}
}
+ // Remove app transition & window freeze timeout callbacks to prevent unnecessary
+ // actions after test.
+ sWm.getDefaultDisplayContentLocked().mAppTransition
+ .removeAppTransitionTimeoutCallbacks();
+ sWm.mH.removeMessages(WindowManagerService.H.WINDOW_FREEZE_TIMEOUT);
sWm.mInputMethodTarget = null;
- sWm.mClosingApps.clear();
- sWm.mOpeningApps.clear();
}
// Wait until everything is really cleaned up.
@@ -354,6 +357,32 @@
}
}
+ /**
+ * Creates a {@link DisplayContent} with given display state and adds it to the system.
+ *
+ * Unlike {@link #createNewDisplay()} that uses a mock {@link DisplayWindowController} to
+ * initialize {@link DisplayContent}, this method used real controller object when the test
+ * need to verify its related flows.
+ *
+ * @param displayState For initializing the state of the display. See
+ * {@link Display#getState()}.
+ */
+ DisplayContent createNewDisplayWithController(int displayState) {
+ // Leverage main display info & initialize it with display state for given displayId.
+ DisplayInfo displayInfo = new DisplayInfo();
+ displayInfo.copyFrom(mDisplayInfo);
+ displayInfo.state = displayState;
+ final int displayId = sNextDisplayId++;
+ final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId,
+ displayInfo, DEFAULT_DISPLAY_ADJUSTMENTS);
+ final DisplayWindowController dcw = new DisplayWindowController(display, sWm);
+ synchronized (sWm.mWindowMap) {
+ // Display creation is driven by DisplayWindowController via ActivityStackSupervisor.
+ // We skip those steps here.
+ return sWm.mRoot.createDisplayContent(display, dcw);
+ }
+ }
+
/** Creates a {@link com.android.server.wm.WindowTestUtils.TestWindowState} */
WindowTestUtils.TestWindowState createWindowState(WindowManager.LayoutParams attrs,
WindowToken token) {
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeExtractorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeExtractorTest.java
index beff0d1..95bfa44 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeExtractorTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeExtractorTest.java
@@ -59,7 +59,7 @@
assertFalse(r.isIntercepted());
when(mZenModeHelper.shouldIntercept(any())).thenReturn(true);
- when(mZenModeHelper.getNotificationPolicy()).thenReturn(
+ when(mZenModeHelper.getConsolidatedNotificationPolicy()).thenReturn(
new NotificationManager.Policy(0,0,0));
extractor.process(r);
@@ -74,7 +74,7 @@
NotificationRecord r = generateRecord();
when(mZenModeHelper.shouldIntercept(any())).thenReturn(false);
- when(mZenModeHelper.getNotificationPolicy()).thenReturn(
+ when(mZenModeHelper.getConsolidatedNotificationPolicy()).thenReturn(
new NotificationManager.Policy(0,0,0));
extractor.process(r);
@@ -89,7 +89,7 @@
NotificationRecord r = generateRecord();
when(mZenModeHelper.shouldIntercept(any())).thenReturn(true);
- when(mZenModeHelper.getNotificationPolicy()).thenReturn(
+ when(mZenModeHelper.getConsolidatedNotificationPolicy()).thenReturn(
new NotificationManager.Policy(0,0,0, SUPPRESSED_EFFECT_PEEK
| SUPPRESSED_EFFECT_NOTIFICATION_LIST));
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java
index d335450..6c125d1 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java
@@ -32,6 +32,7 @@
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
+import android.app.NotificationManager.Policy;
import android.media.AudioAttributes;
import android.service.notification.StatusBarNotification;
import android.service.notification.ZenModeConfig;
@@ -121,11 +122,10 @@
NotificationRecord r = getNotificationRecord();
when(r.sbn.getPackageName()).thenReturn("android");
when(r.sbn.getId()).thenReturn(SystemMessage.NOTE_ZEN_UPGRADE);
- ZenModeConfig config = mock(ZenModeConfig.class);
- config.suppressedVisualEffects = NotificationManager.Policy.getAllSuppressedVisualEffects()
- - SUPPRESSED_EFFECT_STATUS_BAR;
+ Policy policy = new Policy(0, 0, 0, Policy.getAllSuppressedVisualEffects()
+ - SUPPRESSED_EFFECT_STATUS_BAR);
- assertTrue(mZenModeFiltering.shouldIntercept(ZEN_MODE_IMPORTANT_INTERRUPTIONS, config, r));
+ assertTrue(mZenModeFiltering.shouldIntercept(ZEN_MODE_IMPORTANT_INTERRUPTIONS, policy, r));
}
@Test
@@ -133,10 +133,9 @@
NotificationRecord r = getNotificationRecord();
when(r.sbn.getPackageName()).thenReturn("android");
when(r.sbn.getId()).thenReturn(SystemMessage.NOTE_ACCOUNT_CREDENTIAL_PERMISSION);
- ZenModeConfig config = mock(ZenModeConfig.class);
- config.suppressedVisualEffects = NotificationManager.Policy.getAllSuppressedVisualEffects();
+ Policy policy = new Policy(0, 0, 0, Policy.getAllSuppressedVisualEffects());
- assertTrue(mZenModeFiltering.shouldIntercept(ZEN_MODE_IMPORTANT_INTERRUPTIONS, config, r));
+ assertTrue(mZenModeFiltering.shouldIntercept(ZEN_MODE_IMPORTANT_INTERRUPTIONS, policy, r));
}
@Test
@@ -144,10 +143,9 @@
NotificationRecord r = getNotificationRecord();
when(r.sbn.getPackageName()).thenReturn("android2");
when(r.sbn.getId()).thenReturn(SystemMessage.NOTE_ZEN_UPGRADE);
- ZenModeConfig config = mock(ZenModeConfig.class);
- config.suppressedVisualEffects = NotificationManager.Policy.getAllSuppressedVisualEffects();
+ Policy policy = new Policy(0, 0, 0, Policy.getAllSuppressedVisualEffects());
- assertTrue(mZenModeFiltering.shouldIntercept(ZEN_MODE_IMPORTANT_INTERRUPTIONS, config, r));
+ assertTrue(mZenModeFiltering.shouldIntercept(ZEN_MODE_IMPORTANT_INTERRUPTIONS, policy, r));
}
@Test
@@ -155,21 +153,20 @@
NotificationRecord r = getNotificationRecord();
when(r.sbn.getPackageName()).thenReturn("android");
when(r.sbn.getId()).thenReturn(SystemMessage.NOTE_ZEN_UPGRADE);
- ZenModeConfig config = mock(ZenModeConfig.class);
- config.suppressedVisualEffects = NotificationManager.Policy.getAllSuppressedVisualEffects();
+ Policy policy = new Policy(0, 0, 0, Policy.getAllSuppressedVisualEffects());
- assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_IMPORTANT_INTERRUPTIONS, config, r));
- assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_ALARMS, config, r));
- assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_NO_INTERRUPTIONS, config, r));
+ assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_IMPORTANT_INTERRUPTIONS, policy, r));
+ assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_ALARMS, policy, r));
+ assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_NO_INTERRUPTIONS, policy, r));
}
@Test
public void testSuppressAnything_yes_ZenModeOff() {
NotificationRecord r = getNotificationRecord();
when(r.sbn.getPackageName()).thenReturn("bananas");
- ZenModeConfig config = mock(ZenModeConfig.class);
+ Policy policy = new Policy(0, 0, 0, Policy.getAllSuppressedVisualEffects());
- assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_OFF, config, r));
+ assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_OFF, policy, r));
}
@Test
@@ -177,11 +174,11 @@
NotificationRecord r = getNotificationRecord();
r.setCriticality(CriticalNotificationExtractor.CRITICAL);
when(r.sbn.getPackageName()).thenReturn("bananas");
- ZenModeConfig config = mock(ZenModeConfig.class);
+ Policy policy = new Policy(0, 0, 0, Policy.getAllSuppressedVisualEffects());
- assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_NO_INTERRUPTIONS, config, r));
+ assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_NO_INTERRUPTIONS, policy, r));
r.setCriticality(CriticalNotificationExtractor.CRITICAL_LOW);
- assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_NO_INTERRUPTIONS, config, r));
+ assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_NO_INTERRUPTIONS, policy, r));
}
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
index 13f3e5e..b19cc86 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
@@ -41,6 +41,7 @@
import android.app.AppGlobals;
import android.app.AppOpsManager;
import android.app.NotificationManager;
+import android.app.NotificationManager.Policy;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
@@ -165,7 +166,8 @@
@Test
public void testZenOff_NoMuteApplied() {
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_OFF;
- assertTrue(mZenModeHelperSpy.mConfig.allowAlarms);
+ mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
+ Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0);
mZenModeHelperSpy.applyRestrictions();
doNothing().when(mZenModeHelperSpy).applyRestrictions(anyBoolean(), anyInt());
@@ -178,8 +180,9 @@
@Test
public void testZenOn_AllowAlarmsMedia_NoAlarmMediaMuteApplied() {
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
- assertTrue(mZenModeHelperSpy.mConfig.allowAlarms);
- assertTrue(mZenModeHelperSpy.mConfig.allowMedia);
+ mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
+ Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0);
+
mZenModeHelperSpy.applyRestrictions();
verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false,
AudioAttributes.USAGE_ALARM);
@@ -190,12 +193,7 @@
@Test
public void testZenOn_DisallowAlarmsMedia_AlarmMediaMuteApplied() {
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
- mZenModeHelperSpy.mConfig.allowAlarms = false;
- mZenModeHelperSpy.mConfig.allowMedia = false;
- mZenModeHelperSpy.mConfig.allowSystem = false;
- assertFalse(mZenModeHelperSpy.mConfig.allowAlarms);
- assertFalse(mZenModeHelperSpy.mConfig.allowMedia);
- assertFalse(mZenModeHelperSpy.mConfig.allowSystem);
+ mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0);
mZenModeHelperSpy.applyRestrictions();
verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true,
AudioAttributes.USAGE_ALARM);
@@ -210,6 +208,8 @@
@Test
public void testTotalSilence() {
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_NO_INTERRUPTIONS;
+ mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
+ Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0);
mZenModeHelperSpy.applyRestrictions();
// Total silence will silence alarms, media and system noises (but not vibrations)
@@ -230,11 +230,7 @@
@Test
public void testAlarmsOnly_alarmMediaMuteNotApplied() {
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS;
- mZenModeHelperSpy.mConfig.allowAlarms = false;
- mZenModeHelperSpy.mConfig.allowSystem = false;
- mZenModeHelperSpy.mConfig.allowMedia = false;
- assertFalse(mZenModeHelperSpy.mConfig.allowAlarms);
- assertFalse(mZenModeHelperSpy.mConfig.allowMedia);
+ mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0);
mZenModeHelperSpy.applyRestrictions();
// Alarms only mode will not silence alarms
@@ -257,8 +253,7 @@
@Test
public void testAlarmsOnly_callsMuteApplied() {
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS;
- mZenModeHelperSpy.mConfig.allowCalls = true;
- assertTrue(mZenModeHelperSpy.mConfig.allowCalls);
+ mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0);
mZenModeHelperSpy.applyRestrictions();
// Alarms only mode will silence calls despite priority-mode config
@@ -272,21 +267,7 @@
public void testAlarmsOnly_allZenConfigToggledCannotBypass_alarmMuteNotApplied() {
// Only audio attributes with SUPPRESIBLE_NEVER can bypass
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS;
- mZenModeHelperSpy.mConfig.allowAlarms = false;
- mZenModeHelperSpy.mConfig.allowMedia = false;
- mZenModeHelperSpy.mConfig.allowSystem = false;
- mZenModeHelperSpy.mConfig.allowReminders = false;
- mZenModeHelperSpy.mConfig.allowCalls = false;
- mZenModeHelperSpy.mConfig.allowMessages = false;
- mZenModeHelperSpy.mConfig.allowEvents = false;
- mZenModeHelperSpy.mConfig.allowRepeatCallers= false;
- assertFalse(mZenModeHelperSpy.mConfig.allowAlarms);
- assertFalse(mZenModeHelperSpy.mConfig.allowMedia);
- assertFalse(mZenModeHelperSpy.mConfig.allowReminders);
- assertFalse(mZenModeHelperSpy.mConfig.allowCalls);
- assertFalse(mZenModeHelperSpy.mConfig.allowMessages);
- assertFalse(mZenModeHelperSpy.mConfig.allowEvents);
- assertFalse(mZenModeHelperSpy.mConfig.allowRepeatCallers);
+ mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0);
mZenModeHelperSpy.applyRestrictions();
verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false,
@@ -298,21 +279,7 @@
// Only audio attributes with SUPPRESIBLE_NEVER can bypass
// with special case USAGE_ASSISTANCE_SONIFICATION
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
- mZenModeHelperSpy.mConfig.allowAlarms = false;
- mZenModeHelperSpy.mConfig.allowMedia = false;
- mZenModeHelperSpy.mConfig.allowSystem = false;
- mZenModeHelperSpy.mConfig.allowReminders = false;
- mZenModeHelperSpy.mConfig.allowCalls = false;
- mZenModeHelperSpy.mConfig.allowMessages = false;
- mZenModeHelperSpy.mConfig.allowEvents = false;
- mZenModeHelperSpy.mConfig.allowRepeatCallers= false;
- assertFalse(mZenModeHelperSpy.mConfig.allowAlarms);
- assertFalse(mZenModeHelperSpy.mConfig.allowMedia);
- assertFalse(mZenModeHelperSpy.mConfig.allowReminders);
- assertFalse(mZenModeHelperSpy.mConfig.allowCalls);
- assertFalse(mZenModeHelperSpy.mConfig.allowMessages);
- assertFalse(mZenModeHelperSpy.mConfig.allowEvents);
- assertFalse(mZenModeHelperSpy.mConfig.allowRepeatCallers);
+ mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0);
mZenModeHelperSpy.applyRestrictions();
for (int usage : AudioAttributes.SDK_USAGES) {
@@ -338,6 +305,7 @@
Settings.Secure.putInt(mContentResolver, Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 1);
Settings.Secure.putInt(mContentResolver, Settings.Secure.ZEN_SETTINGS_UPDATED, 0);
mZenModeHelperSpy.mIsBootComplete = true;
+ mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0);
mZenModeHelperSpy.setZenModeSetting(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
verify(mZenModeHelperSpy, times(1)).createZenUpgradeNotification();
@@ -548,6 +516,7 @@
@Test
public void testSilentRingerSavedInZenOff_startsZenOff() {
AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class);
+ mZenModeHelperSpy.mConfig = new ZenModeConfig();
mZenModeHelperSpy.mAudioManager = mAudioManager;
// apply zen off multiple times - verify ringer is not set to normal
@@ -568,6 +537,7 @@
AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class);
mZenModeHelperSpy.mAudioManager = mAudioManager;
mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF;
+ mZenModeHelperSpy.mConfig = new ZenModeConfig();
// previously set silent ringer
ZenModeHelper.RingerModeDelegate ringerModeDelegate =
@@ -581,7 +551,6 @@
// apply zen off multiple times - verify ringer is not set to normal
when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT);
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
- mZenModeHelperSpy.mConfig = null; // will evaluate config to zen mode off
for (int i = 0; i < 3; i++) {
// if zen doesn't change, zen should not reapply itself to the ringer
mZenModeHelperSpy.evaluateZenMode("test", true);
@@ -596,6 +565,7 @@
AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class);
mZenModeHelperSpy.mAudioManager = mAudioManager;
mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF;
+ mZenModeHelperSpy.mConfig = new ZenModeConfig();
// previously set silent ringer
ZenModeHelper.RingerModeDelegate ringerModeDelegate =
@@ -609,7 +579,6 @@
// apply zen off multiple times - verify ringer is not set to normal
when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE);
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
- mZenModeHelperSpy.mConfig = null; // will evaluate config to zen mode off
for (int i = 0; i < 3; i++) {
// if zen doesn't change, zen should not reapply itself to the ringer
mZenModeHelperSpy.evaluateZenMode("test", true);
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 9918395..27b8cdf 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -34,7 +34,8 @@
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Resources;
-import android.database.ContentObserver;
+import android.debug.AdbManagerInternal;
+import android.debug.IAdbTransport;
import android.hardware.usb.UsbAccessory;
import android.hardware.usb.UsbConfiguration;
import android.hardware.usb.UsbConstants;
@@ -178,7 +179,6 @@
private final boolean mHasUsbAccessory;
@GuardedBy("mLock")
private String[] mAccessoryStrings;
- private UsbDebuggingManager mDebuggingManager;
private final UEventObserver mUEventObserver;
private static Set<Integer> sBlackListedInterfaces;
@@ -199,19 +199,6 @@
sBlackListedInterfaces.add(UsbConstants.USB_CLASS_WIRELESS_CONTROLLER);
}
- private class AdbSettingsObserver extends ContentObserver {
- public AdbSettingsObserver() {
- super(null);
- }
-
- @Override
- public void onChange(boolean selfChange) {
- boolean enable = (Settings.Global.getInt(mContentResolver,
- Settings.Global.ADB_ENABLED, 0) > 0);
- mHandler.sendMessage(MSG_ENABLE_ADB, enable);
- }
- }
-
/*
* Listens for uevent messages from the kernel to monitor the USB state
*/
@@ -284,24 +271,18 @@
}
mControlFds.put(UsbManager.FUNCTION_PTP, ptpFd);
- boolean secureAdbEnabled = SystemProperties.getBoolean("ro.adb.secure", false);
- boolean dataEncrypted = "1".equals(SystemProperties.get("vold.decrypt"));
- if (secureAdbEnabled && !dataEncrypted) {
- mDebuggingManager = new UsbDebuggingManager(context);
- }
-
if (halNotPresent) {
/**
* Initialze the legacy UsbHandler
*/
mHandler = new UsbHandlerLegacy(FgThread.get().getLooper(), mContext, this,
- mDebuggingManager, alsaManager, settingsManager);
+ alsaManager, settingsManager);
} else {
/**
* Initialize HAL based UsbHandler
*/
mHandler = new UsbHandlerHal(FgThread.get().getLooper(), mContext, this,
- mDebuggingManager, alsaManager, settingsManager);
+ alsaManager, settingsManager);
}
if (nativeIsStartRequested()) {
@@ -364,11 +345,6 @@
mUEventObserver = new UsbUEventObserver();
mUEventObserver.startObserving(USB_STATE_MATCH);
mUEventObserver.startObserving(ACCESSORY_START_MATCH);
-
- // register observer to listen for settings changes
- mContentResolver.registerContentObserver(
- Settings.Global.getUriFor(Settings.Global.ADB_ENABLED),
- false, new AdbSettingsObserver());
}
UsbProfileGroupSettingsManager getCurrentSettings() {
@@ -482,13 +458,11 @@
private int mMidiDevice;
private final Context mContext;
- private final UsbDebuggingManager mDebuggingManager;
private final UsbAlsaManager mUsbAlsaManager;
private final UsbSettingsManager mSettingsManager;
private NotificationManager mNotificationManager;
protected long mScreenUnlockedFunctions;
- protected boolean mAdbEnabled;
protected boolean mBootCompleted;
protected boolean mCurrentFunctionsApplied;
protected boolean mUseUsbNotification;
@@ -506,11 +480,9 @@
protected static final String USB_PERSISTENT_CONFIG_PROPERTY = "persist.sys.usb.config";
UsbHandler(Looper looper, Context context, UsbDeviceManager deviceManager,
- UsbDebuggingManager debuggingManager, UsbAlsaManager alsaManager,
- UsbSettingsManager settingsManager) {
+ UsbAlsaManager alsaManager, UsbSettingsManager settingsManager) {
super(looper);
mContext = context;
- mDebuggingManager = debuggingManager;
mUsbDeviceManager = deviceManager;
mUsbAlsaManager = alsaManager;
mSettingsManager = settingsManager;
@@ -519,13 +491,6 @@
mCurrentUser = ActivityManager.getCurrentUser();
mScreenLocked = true;
- /*
- * Use the normal bootmode persistent prop to maintain state of adb across
- * all boot modes.
- */
- mAdbEnabled = UsbHandlerLegacy.containsFunction(getSystemProperty(
- USB_PERSISTENT_CONFIG_PROPERTY, ""), UsbManager.USB_FUNCTION_ADB);
-
mSettings = getPinnedSharedPrefs(mContext);
if (mSettings == null) {
Slog.e(TAG, "Couldn't load shared preferences");
@@ -626,22 +591,15 @@
private void setAdbEnabled(boolean enable) {
if (DEBUG) Slog.d(TAG, "setAdbEnabled: " + enable);
- if (enable != mAdbEnabled) {
- mAdbEnabled = enable;
- if (enable) {
- setSystemProperty(USB_PERSISTENT_CONFIG_PROPERTY, UsbManager.USB_FUNCTION_ADB);
- } else {
- setSystemProperty(USB_PERSISTENT_CONFIG_PROPERTY, "");
- }
-
- setEnabledFunctions(mCurrentFunctions, true);
- updateAdbNotification(false);
+ if (enable) {
+ setSystemProperty(USB_PERSISTENT_CONFIG_PROPERTY, UsbManager.USB_FUNCTION_ADB);
+ } else {
+ setSystemProperty(USB_PERSISTENT_CONFIG_PROPERTY, "");
}
- if (mDebuggingManager != null) {
- mDebuggingManager.setAdbEnabled(mAdbEnabled);
- }
+ setEnabledFunctions(mCurrentFunctions, true);
+ updateAdbNotification(false);
}
protected boolean isUsbTransferAllowed() {
@@ -799,6 +757,19 @@
setEnabledFunctions(mScreenUnlockedFunctions, false);
}
+ private static class AdbTransport extends IAdbTransport.Stub {
+ private final UsbHandler mHandler;
+
+ AdbTransport(UsbHandler handler) {
+ mHandler = handler;
+ }
+
+ @Override
+ public void onAdbEnabled(boolean enabled) {
+ mHandler.sendMessage(MSG_ENABLE_ADB, enabled);
+ }
+ }
+
/**
* Returns the functions that are passed down to the low level driver once adb and
* charging are accounted for.
@@ -807,7 +778,7 @@
if (functions == UsbManager.FUNCTION_NONE) {
return getChargingFunctions();
}
- if (mAdbEnabled) {
+ if (isAdbEnabled()) {
return functions | UsbManager.FUNCTION_ADB;
}
return functions;
@@ -964,6 +935,9 @@
mNotificationManager = (NotificationManager)
mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+ LocalServices.getService(
+ AdbManagerInternal.class).registerTransport(new AdbTransport(this));
+
// Ensure that the notification channels are set up
if (isTv()) {
// TV-specific notification channel
@@ -1029,19 +1003,6 @@
if (mCurrentAccessory != null) {
mUsbDeviceManager.getCurrentSettings().accessoryAttached(mCurrentAccessory);
}
- if (mDebuggingManager != null) {
- mDebuggingManager.setAdbEnabled(mAdbEnabled);
- }
-
- // make sure the ADB_ENABLED setting value matches the current state
- try {
- putGlobalSettings(mContentResolver, Settings.Global.ADB_ENABLED,
- mAdbEnabled ? 1 : 0);
- } catch (SecurityException e) {
- // If UserManager.DISALLOW_DEBUGGING_FEATURES is on, that this setting can't
- // be changed.
- Slog.d(TAG, "ADB_ENABLED is restricted.");
- }
updateUsbNotification(false);
updateAdbNotification(false);
@@ -1191,12 +1152,16 @@
}
}
+ protected boolean isAdbEnabled() {
+ return LocalServices.getService(AdbManagerInternal.class).isAdbEnabled();
+ }
+
protected void updateAdbNotification(boolean force) {
if (mNotificationManager == null) return;
final int id = SystemMessage.NOTE_ADB_ACTIVE;
final int titleRes = com.android.internal.R.string.adb_active_notification_title;
- if (mAdbEnabled && mConnected) {
+ if (isAdbEnabled() && mConnected) {
if ("0".equals(getSystemProperty("persist.adb.notify", ""))) return;
if (force && mAdbNotificationShown) {
@@ -1250,7 +1215,7 @@
protected long getChargingFunctions() {
// if ADB is enabled, reset functions to ADB
// else enable MTP as usual.
- if (mAdbEnabled) {
+ if (isAdbEnabled()) {
return UsbManager.FUNCTION_ADB;
} else {
return UsbManager.FUNCTION_MTP;
@@ -1319,7 +1284,6 @@
mHideUsbNotification);
dump.write("audio_accessory_connected", UsbHandlerProto.AUDIO_ACCESSORY_CONNECTED,
mAudioAccessoryConnected);
- dump.write("adb_enabled", UsbHandlerProto.ADB_ENABLED, mAdbEnabled);
try {
writeStringIfNotNull(dump, "kernel_state", UsbHandlerProto.KERNEL_STATE,
@@ -1362,9 +1326,8 @@
private boolean mUsbDataUnlocked;
UsbHandlerLegacy(Looper looper, Context context, UsbDeviceManager deviceManager,
- UsbDebuggingManager debuggingManager, UsbAlsaManager alsaManager,
- UsbSettingsManager settingsManager) {
- super(looper, context, deviceManager, debuggingManager, alsaManager, settingsManager);
+ UsbAlsaManager alsaManager, UsbSettingsManager settingsManager) {
+ super(looper, context, deviceManager, alsaManager, settingsManager);
try {
readOemUsbOverrideConfig(context);
// Restore default functions.
@@ -1446,7 +1409,7 @@
+ overrideFunctions.second);
if (!overrideFunctions.second.equals("")) {
String newFunction;
- if (mAdbEnabled) {
+ if (isAdbEnabled()) {
newFunction = addFunction(overrideFunctions.second,
UsbManager.USB_FUNCTION_ADB);
} else {
@@ -1457,7 +1420,7 @@
setSystemProperty(getPersistProp(false), newFunction);
}
return overrideFunctions.first;
- } else if (mAdbEnabled) {
+ } else if (isAdbEnabled()) {
String newFunction = addFunction(UsbManager.USB_FUNCTION_NONE,
UsbManager.USB_FUNCTION_ADB);
setSystemProperty(getPersistProp(false), newFunction);
@@ -1563,7 +1526,7 @@
if (functions == null) {
functions = "";
}
- if (mAdbEnabled) {
+ if (isAdbEnabled()) {
functions = addFunction(functions, UsbManager.USB_FUNCTION_ADB);
} else {
functions = removeFunction(functions, UsbManager.USB_FUNCTION_ADB);
@@ -1752,9 +1715,8 @@
protected boolean mCurrentUsbFunctionsRequested;
UsbHandlerHal(Looper looper, Context context, UsbDeviceManager deviceManager,
- UsbDebuggingManager debuggingManager, UsbAlsaManager alsaManager,
- UsbSettingsManager settingsManager) {
- super(looper, context, deviceManager, debuggingManager, alsaManager, settingsManager);
+ UsbAlsaManager alsaManager, UsbSettingsManager settingsManager) {
+ super(looper, context, deviceManager, alsaManager, settingsManager);
try {
ServiceNotification serviceNotification = new ServiceNotification();
@@ -1850,7 +1812,7 @@
* Dont force to default when the configuration is already set to default.
*/
if (msg.arg1 != 1) {
- setEnabledFunctions(UsbManager.FUNCTION_NONE, !mAdbEnabled);
+ setEnabledFunctions(UsbManager.FUNCTION_NONE, !isAdbEnabled());
}
break;
default:
@@ -2061,25 +2023,8 @@
mHandler.sendMessage(MSG_SET_SCREEN_UNLOCKED_FUNCTIONS, functions);
}
- public void allowUsbDebugging(boolean alwaysAllow, String publicKey) {
- if (mDebuggingManager != null) {
- mDebuggingManager.allowUsbDebugging(alwaysAllow, publicKey);
- }
- }
-
- public void denyUsbDebugging() {
- if (mDebuggingManager != null) {
- mDebuggingManager.denyUsbDebugging();
- }
- }
-
- public void clearUsbDebuggingKeys() {
- if (mDebuggingManager != null) {
- mDebuggingManager.clearUsbDebuggingKeys();
- } else {
- throw new RuntimeException("Cannot clear Usb Debugging keys, "
- + "UsbDebuggingManager not enabled");
- }
+ private void onAdbEnabled(boolean enabled) {
+ mHandler.sendMessage(MSG_ENABLE_ADB, enabled);
}
/**
@@ -2091,10 +2036,6 @@
if (mHandler != null) {
mHandler.dump(dump, "handler", UsbDeviceManagerProto.HANDLER);
}
- if (mDebuggingManager != null) {
- mDebuggingManager.dump(dump, "debugging_manager",
- UsbDeviceManagerProto.DEBUGGING_MANAGER);
- }
dump.end(token);
}
diff --git a/services/usb/java/com/android/server/usb/UsbService.java b/services/usb/java/com/android/server/usb/UsbService.java
index e0f3685..f9abedf 100644
--- a/services/usb/java/com/android/server/usb/UsbService.java
+++ b/services/usb/java/com/android/server/usb/UsbService.java
@@ -489,24 +489,6 @@
}
@Override
- public void allowUsbDebugging(boolean alwaysAllow, String publicKey) {
- mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mDeviceManager.allowUsbDebugging(alwaysAllow, publicKey);
- }
-
- @Override
- public void denyUsbDebugging() {
- mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mDeviceManager.denyUsbDebugging();
- }
-
- @Override
- public void clearUsbDebuggingKeys() {
- mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mDeviceManager.clearUsbDebuggingKeys();
- }
-
- @Override
public UsbPort[] getPorts() {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index daa09f5..b6ac91d 100644
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -467,8 +467,24 @@
*/
public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 0x00000800;
+ /**
+ * Indicates that the call is using VoIP audio mode.
+ * <p>
+ * When this property is set, the {@link android.media.AudioManager} audio mode for this
+ * call will be {@link android.media.AudioManager#MODE_IN_COMMUNICATION}. When this
+ * property is not set, the audio mode for this call will be
+ * {@link android.media.AudioManager#MODE_IN_CALL}.
+ * <p>
+ * This property reflects changes made using {@link Connection#setAudioModeIsVoip(boolean)}.
+ * <p>
+ * You can use this property to determine whether an un-answered incoming call or a held
+ * call will use VoIP audio mode (if the call does not currently have focus, the system
+ * audio mode may not reflect the mode the call will use).
+ */
+ public static final int PROPERTY_VOIP_AUDIO_MODE = 0x00001000;
+
//******************************************************************************************
- // Next PROPERTY value: 0x00001000
+ // Next PROPERTY value: 0x00002000
//******************************************************************************************
private final String mTelecomCallId;
@@ -628,15 +644,21 @@
if (hasProperty(properties, PROPERTY_IS_EXTERNAL_CALL)) {
builder.append(" PROPERTY_IS_EXTERNAL_CALL");
}
- if(hasProperty(properties, PROPERTY_HAS_CDMA_VOICE_PRIVACY)) {
+ if (hasProperty(properties, PROPERTY_HAS_CDMA_VOICE_PRIVACY)) {
builder.append(" PROPERTY_HAS_CDMA_VOICE_PRIVACY");
}
- if(hasProperty(properties, PROPERTY_ASSISTED_DIALING_USED)) {
+ if (hasProperty(properties, PROPERTY_ASSISTED_DIALING_USED)) {
builder.append(" PROPERTY_ASSISTED_DIALING_USED");
}
if (hasProperty(properties, PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL)) {
builder.append(" PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL");
}
+ if (hasProperty(properties, PROPERTY_RTT)) {
+ builder.append(" PROPERTY_RTT");
+ }
+ if (hasProperty(properties, PROPERTY_VOIP_AUDIO_MODE)) {
+ builder.append(" PROPERTY_VOIP_AUDIO_MODE");
+ }
builder.append("]");
return builder.toString();
}
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 5b88663..983e766 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -2569,7 +2569,7 @@
sDefaults.putBoolean(KEY_SPN_DISPLAY_RULE_USE_ROAMING_FROM_SERVICE_STATE_BOOL, false);
sDefaults.putBoolean(KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL, false);
sDefaults.putBoolean(KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL, false);
- sDefaults.putBoolean(KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL, false);
+ sDefaults.putBoolean(KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL, true);
sDefaults.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, false);
sDefaults.putBoolean(KEY_CHECK_PRICING_WITH_CARRIER_FOR_DATA_ROAMING_BOOL, false);
sDefaults.putIntArray(KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY,
diff --git a/telephony/java/android/telephony/CellSignalStrengthLte.java b/telephony/java/android/telephony/CellSignalStrengthLte.java
index d6856b3..05c1fd5 100644
--- a/telephony/java/android/telephony/CellSignalStrengthLte.java
+++ b/telephony/java/android/telephony/CellSignalStrengthLte.java
@@ -31,8 +31,27 @@
private static final String LOG_TAG = "CellSignalStrengthLte";
private static final boolean DBG = false;
+ /**
+ * Indicates the unknown or undetectable RSSI value in ASU.
+ *
+ * Reference: TS 27.007 8.5 - Signal quality +CSQ
+ */
+ private static final int SIGNAL_STRENGTH_LTE_RSSI_ASU_UNKNOWN = 99;
+ /**
+ * Indicates the maximum valid RSSI value in ASU.
+ *
+ * Reference: TS 27.007 8.5 - Signal quality +CSQ
+ */
+ private static final int SIGNAL_STRENGTH_LTE_RSSI_VALID_ASU_MAX_VALUE = 31;
+ /**
+ * Indicates the minimum valid RSSI value in ASU.
+ *
+ * Reference: TS 27.007 8.5 - Signal quality +CSQ
+ */
+ private static final int SIGNAL_STRENGTH_LTE_RSSI_VALID_ASU_MIN_VALUE = 0;
+
@UnsupportedAppUsage
- private int mSignalStrength;
+ private int mRssi;
@UnsupportedAppUsage
private int mRsrp;
@UnsupportedAppUsage
@@ -51,9 +70,9 @@
}
/** @hide */
- public CellSignalStrengthLte(int signalStrength, int rsrp, int rsrq, int rssnr, int cqi,
+ public CellSignalStrengthLte(int rssi, int rsrp, int rsrq, int rssnr, int cqi,
int timingAdvance) {
- mSignalStrength = signalStrength;
+ mRssi = convertRssiAsuToDBm(rssi);
mRsrp = rsrp;
mRsrq = rsrq;
mRssnr = rssnr;
@@ -68,7 +87,7 @@
/** @hide */
protected void copyFrom(CellSignalStrengthLte s) {
- mSignalStrength = s.mSignalStrength;
+ mRssi = s.mRssi;
mRsrp = s.mRsrp;
mRsrq = s.mRsrq;
mRssnr = s.mRssnr;
@@ -85,7 +104,7 @@
/** @hide */
@Override
public void setDefaultValues() {
- mSignalStrength = CellInfo.UNAVAILABLE;
+ mRssi = CellInfo.UNAVAILABLE;
mRsrp = CellInfo.UNAVAILABLE;
mRsrq = CellInfo.UNAVAILABLE;
mRssnr = CellInfo.UNAVAILABLE;
@@ -142,6 +161,19 @@
}
/**
+ * Get Received Signal Strength Indication (RSSI) in dBm
+ *
+ * The value range is [-113, -51] inclusively or {@link CellInfo#UNAVAILABLE} if unavailable.
+ *
+ * Reference: TS 27.007 8.5 Signal quality +CSQ
+ *
+ * @return the RSSI if available or {@link CellInfo#UNAVAILABLE} if unavailable.
+ */
+ public int getRssi() {
+ return mRssi;
+ }
+
+ /**
* Get reference signal signal-to-noise ratio
*
* @return the RSSNR if available or
@@ -210,7 +242,7 @@
@Override
public int hashCode() {
- return Objects.hash(mSignalStrength, mRsrp, mRsrq, mRssnr, mCqi, mTimingAdvance);
+ return Objects.hash(mRssi, mRsrp, mRsrq, mRssnr, mCqi, mTimingAdvance);
}
@Override
@@ -227,7 +259,7 @@
return false;
}
- return mSignalStrength == s.mSignalStrength
+ return mRssi == s.mRssi
&& mRsrp == s.mRsrp
&& mRsrq == s.mRsrq
&& mRssnr == s.mRssnr
@@ -241,7 +273,7 @@
@Override
public String toString() {
return "CellSignalStrengthLte:"
- + " ss=" + mSignalStrength
+ + " rssi(dBm)=" + mRssi
+ " rsrp=" + mRsrp
+ " rsrq=" + mRsrq
+ " rssnr=" + mRssnr
@@ -253,7 +285,7 @@
@Override
public void writeToParcel(Parcel dest, int flags) {
if (DBG) log("writeToParcel(Parcel, int): " + toString());
- dest.writeInt(mSignalStrength);
+ dest.writeInt(mRssi);
// Need to multiply rsrp and rsrq by -1
// to ensure consistency when reading values written here
// unless the values are invalid
@@ -269,7 +301,7 @@
* where the token is already been processed.
*/
private CellSignalStrengthLte(Parcel in) {
- mSignalStrength = in.readInt();
+ mRssi = convertRssiAsuToDBm(in.readInt());
// rsrp and rsrq are written into the parcel as positive values.
// Need to convert into negative values unless the values are invalid
mRsrp = in.readInt();
@@ -309,4 +341,17 @@
private static void log(String s) {
Rlog.w(LOG_TAG, s);
}
+
+ private static int convertRssiAsuToDBm(int rssiAsu) {
+ if (rssiAsu != SIGNAL_STRENGTH_LTE_RSSI_ASU_UNKNOWN
+ && (rssiAsu < SIGNAL_STRENGTH_LTE_RSSI_VALID_ASU_MIN_VALUE
+ || rssiAsu > SIGNAL_STRENGTH_LTE_RSSI_VALID_ASU_MAX_VALUE)) {
+ Rlog.e(LOG_TAG, "convertRssiAsuToDBm: invalid RSSI in ASU=" + rssiAsu);
+ return CellInfo.UNAVAILABLE;
+ }
+ if (rssiAsu == SIGNAL_STRENGTH_LTE_RSSI_ASU_UNKNOWN) {
+ return CellInfo.UNAVAILABLE;
+ }
+ return -113 + (2 * rssiAsu);
+ }
}
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java
index fb801b2..bc832c3 100644
--- a/telephony/java/android/telephony/SignalStrength.java
+++ b/telephony/java/android/telephony/SignalStrength.java
@@ -21,8 +21,8 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.CarrierConfigManager;
-import android.text.TextUtils;
import android.util.Log;
+import android.content.res.Resources;
import java.util.ArrayList;
import java.util.Arrays;
@@ -65,8 +65,9 @@
};
/**
- * Use Integer.MAX_VALUE because -1 is a valid value in signal strength.
- * @hide
+ * Indicates the invalid measures of signal strength.
+ *
+ * For example, this can be returned by {@link #getEvdoDbm()} or {@link #getCdmaDbm()}
*/
public static final int INVALID = Integer.MAX_VALUE;
@@ -173,9 +174,9 @@
public SignalStrength(boolean gsmFlag) {
mGsmSignalStrength = 99;
mGsmBitErrorRate = -1;
- mCdmaDbm = -1;
+ mCdmaDbm = INVALID;
mCdmaEcio = -1;
- mEvdoDbm = -1;
+ mEvdoDbm = INVALID;
mEvdoEcio = -1;
mEvdoSnr = -1;
mLteSignalStrength = 99;
@@ -542,6 +543,8 @@
/**
* Get the CDMA RSSI value in dBm
+ *
+ * @return the CDMA RSSI value or {@link #INVALID} if invalid
*/
public int getCdmaDbm() {
return this.mCdmaDbm;
@@ -556,6 +559,8 @@
/**
* Get the EVDO RSSI value in dBm
+ *
+ * @return the EVDO RSSI value or {@link #INVALID} if invalid
*/
public int getEvdoDbm() {
return this.mEvdoDbm;
@@ -1116,7 +1121,7 @@
public int getWcdmaLevel() {
int level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
- if (TextUtils.isEmpty(mWcdmaDefaultSignalMeasurement)) {
+ if (mWcdmaDefaultSignalMeasurement == null) {
Log.wtf(LOG_TAG, "getWcdmaLevel - WCDMA default signal measurement is invalid.");
return level;
}
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 32ca156..e5c4ccd 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -6326,7 +6326,7 @@
/**
* Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning
- * SystemProperty, and config_tether_apndata to decide whether DUN APN is required for
+ * SystemProperty to decide whether DUN APN is required for
* tethering.
*
* @return 0: Not required. 1: required. 2: Not set.
@@ -7445,6 +7445,27 @@
}
/**
+ * Determines whether the device currently supports RTT (Real-time text). Based both on carrier
+ * support for the feature and device firmware support.
+ *
+ * @return {@code true} if the device and carrier both support RTT, {@code false} otherwise.
+ * @hide
+ */
+ @TestApi
+ public boolean isRttSupported() {
+ try {
+ ITelephony telephony = getITelephony();
+ if (telephony != null) {
+ return telephony.isRttSupported(mSubId);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error calling ITelephony#isRttSupported", e);
+ } catch (SecurityException e) {
+ Log.e(TAG, "Permission error calling ITelephony#isWorldPhone", e);
+ }
+ return false;
+ }
+ /**
* Whether the phone supports hearing aid compatibility.
*
* @return {@code true} if the device supports hearing aid compatibility, and {@code false}
@@ -8274,6 +8295,29 @@
}
/**
+ * Return a list of certs in hex string from loaded carrier privileges access rules.
+ *
+ * @return a list of certificate in hex string. return {@code null} if there is no certs
+ * or privilege rules are not loaded yet.
+ *
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE}
+ * @hide
+ */
+ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
+ public List<String> getCertsFromCarrierPrivilegeAccessRules() {
+ try {
+ ITelephony service = getITelephony();
+ if (service != null) {
+ return service.getCertsFromCarrierPrivilegeAccessRules(getSubId());
+ }
+ } catch (RemoteException ex) {
+ // This could happen if binder process crashes.
+ }
+ return null;
+ }
+
+ /**
* Return the application ID for the uicc application type like {@link #APPTYPE_CSIM}.
* All uicc applications are uniquely identified by application ID. See ETSI 102.221 and 101.220
* <p>Requires Permission:
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index d206277..b20b164 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -683,7 +683,7 @@
/**
* Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning
- * SystemProperty, and config_tether_apndata to decide whether DUN APN is required for
+ * SystemProperty to decide whether DUN APN is required for
* tethering.
*
* @return 0: Not required. 1: required. 2: Not set.
@@ -1054,6 +1054,8 @@
*/
boolean isTtyModeSupported();
+ boolean isRttSupported(int subscriptionId);
+
/**
* Whether the phone supports hearing aid compatibility.
*
@@ -1641,4 +1643,9 @@
* Identify if the number is emergency number, based on all the active subscriptions.
*/
boolean isCurrentEmergencyNumber(String number);
+
+ /**
+ * Return a list of certs in hex string from loaded carrier privileges access rules.
+ */
+ List<String> getCertsFromCarrierPrivilegeAccessRules(int subId);
}
diff --git a/telephony/java/com/android/internal/telephony/SmsApplication.java b/telephony/java/com/android/internal/telephony/SmsApplication.java
index 5b8028b..9874f80 100644
--- a/telephony/java/com/android/internal/telephony/SmsApplication.java
+++ b/telephony/java/com/android/internal/telephony/SmsApplication.java
@@ -562,8 +562,7 @@
+ AppOpsManager.modeToName(appOp) + ": "
+ (updateIfNeeded ? " (fixing)" : " (no permission to fix)"));
if (updateIfNeeded) {
- setExclusiveAppop(applicationData.mPackageName, appOps, appOp,
- AppOpsManager.MODE_ALLOWED, applicationData.mUid);
+ appOps.setUidMode(appOp, applicationData.mUid, AppOpsManager.MODE_ALLOWED);
} else {
return false;
}
@@ -732,14 +731,6 @@
private static void setExclusiveAppops(String pkg, AppOpsManager appOpsManager, int uid,
int mode) {
for (int appop : DEFAULT_APP_EXCLUSIVE_APPOPS) {
- setExclusiveAppop(pkg, appOpsManager, appop, mode, uid);
- }
- }
-
- private static void setExclusiveAppop(String pkg, AppOpsManager appOpsManager, int appop,
- int mode, int uid) {
- // IGNORED means user explicitly revoked permission in settings, so avoid overriding it.
- if (appOpsManager.checkOpNoThrow(appop, uid, pkg) != AppOpsManager.MODE_IGNORED) {
appOpsManager.setUidMode(appop, uid, mode);
}
}
diff --git a/tests/UsbTests/src/com/android/server/usb/UsbHandlerTest.java b/tests/UsbTests/src/com/android/server/usb/UsbHandlerTest.java
index 23311b0..4b93ca3 100644
--- a/tests/UsbTests/src/com/android/server/usb/UsbHandlerTest.java
+++ b/tests/UsbTests/src/com/android/server/usb/UsbHandlerTest.java
@@ -59,8 +59,6 @@
@Mock
private UsbDeviceManager mUsbDeviceManager;
@Mock
- private UsbDebuggingManager mUsbDebuggingManager;
- @Mock
private UsbAlsaManager mUsbAlsaManager;
@Mock
private UsbSettingsManager mUsbSettingsManager;
@@ -89,9 +87,8 @@
Intent mBroadcastedIntent;
MockUsbHandler(Looper looper, Context context, UsbDeviceManager deviceManager,
- UsbDebuggingManager debuggingManager, UsbAlsaManager alsaManager,
- UsbSettingsManager settingsManager) {
- super(looper, context, deviceManager, debuggingManager, alsaManager, settingsManager);
+ UsbAlsaManager alsaManager, UsbSettingsManager settingsManager) {
+ super(looper, context, deviceManager, alsaManager, settingsManager);
mUseUsbNotification = false;
mIsUsbTransferAllowed = true;
mCurrentUsbFunctionsReceived = true;
@@ -144,8 +141,8 @@
when(mSharedPreferences.edit()).thenReturn(mEditor);
mUsbHandler = new MockUsbHandler(FgThread.get().getLooper(),
- InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbDebuggingManager,
- mUsbAlsaManager, mUsbSettingsManager);
+ InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbAlsaManager,
+ mUsbSettingsManager);
}
@SmallTest
@@ -190,8 +187,7 @@
assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE);
assertEquals(mMockProperties.get(UsbDeviceManager.UsbHandler
.USB_PERSISTENT_CONFIG_PROPERTY), UsbManager.USB_FUNCTION_ADB);
- verify(mUsbDebuggingManager).setAdbEnabled(true);
- assertTrue(mUsbHandler.mAdbEnabled);
+ assertTrue(mUsbHandler.isAdbEnabled());
mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_STATE, 1, 1));
@@ -208,16 +204,15 @@
mMockProperties.put(UsbDeviceManager.UsbHandler.USB_PERSISTENT_CONFIG_PROPERTY,
UsbManager.USB_FUNCTION_ADB);
mUsbHandler = new MockUsbHandler(FgThread.get().getLooper(),
- InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbDebuggingManager,
- mUsbAlsaManager, mUsbSettingsManager);
+ InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbAlsaManager,
+ mUsbSettingsManager);
sendBootCompleteMessages(mUsbHandler);
mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_ENABLE_ADB, 0));
assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE);
- assertFalse(mUsbHandler.mAdbEnabled);
+ assertFalse(mUsbHandler.isAdbEnabled());
assertEquals(mMockProperties.get(UsbDeviceManager.UsbHandler
.USB_PERSISTENT_CONFIG_PROPERTY), "");
- verify(mUsbDebuggingManager).setAdbEnabled(false);
}
@SmallTest
@@ -232,14 +227,13 @@
public void bootCompletedAdbEnabled() {
mMockProperties.put(UsbDeviceManager.UsbHandler.USB_PERSISTENT_CONFIG_PROPERTY, "adb");
mUsbHandler = new MockUsbHandler(FgThread.get().getLooper(),
- InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbDebuggingManager,
- mUsbAlsaManager, mUsbSettingsManager);
+ InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbAlsaManager,
+ mUsbSettingsManager);
sendBootCompleteMessages(mUsbHandler);
assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE);
assertEquals(mMockGlobalSettings.get(Settings.Global.ADB_ENABLED).intValue(), 1);
- assertTrue(mUsbHandler.mAdbEnabled);
- verify(mUsbDebuggingManager).setAdbEnabled(true);
+ assertTrue(mUsbHandler.isAdbEnabled());
}
@SmallTest
@@ -321,8 +315,8 @@
UsbDeviceManager.UNLOCKED_CONFIG_PREF, mUsbHandler.mCurrentUser), ""))
.thenReturn(UsbManager.USB_FUNCTION_MTP);
mUsbHandler = new MockUsbHandler(FgThread.get().getLooper(),
- InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbDebuggingManager,
- mUsbAlsaManager, mUsbSettingsManager);
+ InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbAlsaManager,
+ mUsbSettingsManager);
sendBootCompleteMessages(mUsbHandler);
mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_SCREEN_LOCK, 1));
mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_SCREEN_LOCK, 0));
@@ -335,4 +329,4 @@
handler.handleMessage(handler.obtainMessage(MSG_BOOT_COMPLETED));
handler.handleMessage(handler.obtainMessage(MSG_SYSTEM_READY));
}
-}
\ No newline at end of file
+}
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 7472278..0330614 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -785,6 +785,23 @@
/**
* @hide
+ * Use factory MAC when connecting to this network
+ */
+ public static final int RANDOMIZATION_NONE = 0;
+ /**
+ * @hide
+ * Generate a randomized MAC once and reuse it for all connections to this network
+ */
+ public static final int RANDOMIZATION_PERSISTENT = 1;
+
+ /**
+ * @hide
+ * Level of MAC randomization for this network
+ */
+ public int macRandomizationSetting = RANDOMIZATION_PERSISTENT;
+
+ /**
+ * @hide
* Randomized MAC address to use with this particular network
*/
@NonNull
@@ -1645,6 +1662,7 @@
if (this.meteredOverride != METERED_OVERRIDE_NONE) {
sbuf.append(" meteredOverride ").append(meteredOverride).append("\n");
}
+ sbuf.append(" macRandomizationSetting ").append(macRandomizationSetting).append("\n");
sbuf.append(" KeyMgmt:");
for (int k = 0; k < this.allowedKeyManagement.size(); k++) {
if (this.allowedKeyManagement.get(k)) {
@@ -2109,6 +2127,7 @@
shared = source.shared;
recentFailure.setAssociationStatus(source.recentFailure.getAssociationStatus());
mRandomizedMacAddress = source.mRandomizedMacAddress;
+ macRandomizationSetting = source.macRandomizationSetting;
}
}
@@ -2173,6 +2192,7 @@
dest.writeString(mPasspointManagementObjectTree);
dest.writeInt(recentFailure.getAssociationStatus());
dest.writeParcelable(mRandomizedMacAddress, flags);
+ dest.writeInt(macRandomizationSetting);
}
/** Implement the Parcelable interface {@hide} */
@@ -2239,6 +2259,7 @@
config.mPasspointManagementObjectTree = in.readString();
config.recentFailure.setAssociationStatus(in.readInt());
config.mRandomizedMacAddress = in.readParcelable(null);
+ config.macRandomizationSetting = in.readInt();
return config;
}
diff --git a/wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java b/wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java
index 4b76526..5c9db53 100644
--- a/wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java
+++ b/wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java
@@ -160,9 +160,9 @@
public static final int OSU_STATUS_AP_CONNECTED = 2;
/**
- * The status code for provisioning flow to indicate the server connection is completed.
+ * The status code for provisioning flow to indicate connecting to the server.
*/
- public static final int OSU_STATUS_SERVER_CONNECTED = 3;
+ public static final int OSU_STATUS_SERVER_CONNECTING = 3;
/**
* The status code for provisioning flow to indicate the server certificate is validated.
@@ -170,9 +170,9 @@
public static final int OSU_STATUS_SERVER_VALIDATED = 4;
/**
- * The status code for provisioning flow to indicate the service provider is verified.
+ * The status code for provisioning flow to indicate the server is connected
*/
- public static final int OSU_STATUS_SERVICE_PROVIDER_VERIFIED = 5;
+ public static final int OSU_STATUS_SERVER_CONNECTED = 5;
/**
* The status code for provisioning flow to indicate starting the first SOAP exchange.