Merge "Reload flags whenever doze state changes"
diff --git a/api/current.txt b/api/current.txt
index 6a02cb4..533c70f 100755
--- a/api/current.txt
+++ b/api/current.txt
@@ -1845,6 +1845,10 @@
field public static final int accessibilityActionContextClick = 16908348; // 0x102003c
field public static final int accessibilityActionHideTooltip = 16908357; // 0x1020045
field public static final int accessibilityActionMoveWindow = 16908354; // 0x1020042
+ field public static final int accessibilityActionPageDown = 16908359; // 0x1020047
+ field public static final int accessibilityActionPageLeft = 16908360; // 0x1020048
+ field public static final int accessibilityActionPageRight = 16908361; // 0x1020049
+ field public static final int accessibilityActionPageUp = 16908358; // 0x1020046
field public static final int accessibilityActionScrollDown = 16908346; // 0x102003a
field public static final int accessibilityActionScrollLeft = 16908345; // 0x1020039
field public static final int accessibilityActionScrollRight = 16908347; // 0x102003b
@@ -47859,6 +47863,7 @@
field public static final int KEYCODE_PLUS = 81; // 0x51
field public static final int KEYCODE_POUND = 18; // 0x12
field public static final int KEYCODE_POWER = 26; // 0x1a
+ field public static final int KEYCODE_PROFILE_SWITCH = 288; // 0x120
field public static final int KEYCODE_PROG_BLUE = 186; // 0xba
field public static final int KEYCODE_PROG_GREEN = 184; // 0xb8
field public static final int KEYCODE_PROG_RED = 183; // 0xb7
@@ -47897,6 +47902,8 @@
field public static final int KEYCODE_SYSTEM_NAVIGATION_UP = 280; // 0x118
field public static final int KEYCODE_T = 48; // 0x30
field public static final int KEYCODE_TAB = 61; // 0x3d
+ field public static final int KEYCODE_THUMBS_DOWN = 287; // 0x11f
+ field public static final int KEYCODE_THUMBS_UP = 286; // 0x11e
field public static final int KEYCODE_TV = 170; // 0xaa
field public static final int KEYCODE_TV_ANTENNA_CABLE = 242; // 0xf2
field public static final int KEYCODE_TV_AUDIO_DESCRIPTION = 252; // 0xfc
@@ -50765,6 +50772,10 @@
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_MOVE_WINDOW;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_HTML_ELEMENT;
+ field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_DOWN;
+ field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_LEFT;
+ field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_RIGHT;
+ field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_UP;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PASTE;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_HTML_ELEMENT;
diff --git a/api/system-current.txt b/api/system-current.txt
index 576df268..e0c58b4 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -5476,6 +5476,7 @@
method public int getDomain();
method public int getRegState();
method public int getRejectCause();
+ method public int getRoamingType();
method public int getTransportType();
method public boolean isEmergencyEnabled();
method public boolean isRoaming();
@@ -5535,6 +5536,10 @@
method public deprecated android.telephony.NetworkRegistrationState getNetworkRegistrationStates(int, int);
method public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStatesForDomain(int);
method public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStatesForTransportType(int);
+ field public static final int ROAMING_TYPE_DOMESTIC = 2; // 0x2
+ field public static final int ROAMING_TYPE_INTERNATIONAL = 3; // 0x3
+ field public static final int ROAMING_TYPE_NOT_ROAMING = 0; // 0x0
+ field public static final int ROAMING_TYPE_UNKNOWN = 1; // 0x1
}
public final class SmsManager {
diff --git a/api/test-current.txt b/api/test-current.txt
index 5dc2945..8b8c542 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -1591,7 +1591,7 @@
public class KeyEvent extends android.view.InputEvent implements android.os.Parcelable {
method public static java.lang.String actionToString(int);
- field public static final int LAST_KEYCODE = 285; // 0x11d
+ field public static final int LAST_KEYCODE = 288; // 0x120
}
public final class KeyboardShortcutGroup implements android.os.Parcelable {
diff --git a/cmds/sm/src/com/android/commands/sm/Sm.java b/cmds/sm/src/com/android/commands/sm/Sm.java
index 09343f1..c6d717a 100644
--- a/cmds/sm/src/com/android/commands/sm/Sm.java
+++ b/cmds/sm/src/com/android/commands/sm/Sm.java
@@ -101,6 +101,8 @@
runFstrim();
} else if ("set-virtual-disk".equals(op)) {
runSetVirtualDisk();
+ } else if ("set-isolated-storage".equals(op)) {
+ runIsolatedStorage();
} else {
throw new IllegalArgumentException();
}
@@ -278,6 +280,20 @@
StorageManager.DEBUG_VIRTUAL_DISK);
}
+ public void runIsolatedStorage() throws RemoteException {
+ final boolean enableIsolatedStorage = Boolean.parseBoolean(nextArg());
+ // Toggling isolated-storage state will result in a device reboot. So to avoid this command
+ // from erroring out (DeadSystemException), call setDebugFlags() in a separate thread.
+ new Thread(() -> {
+ try {
+ mSm.setDebugFlags(enableIsolatedStorage ? StorageManager.DEBUG_ISOLATED_STORAGE : 0,
+ StorageManager.DEBUG_ISOLATED_STORAGE);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Encountered an error!", e);
+ }
+ }).start();
+ }
+
public void runIdleMaint() throws RemoteException {
final boolean im_run = "run".equals(nextArg());
if (im_run) {
@@ -316,6 +332,8 @@
System.err.println("");
System.err.println(" sm set-emulate-fbe [true|false]");
System.err.println("");
+ System.err.println(" sm set-isolated-storage [true|false]");
+ System.err.println("");
return 1;
}
}
diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp
index a0d77d6..6617689 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.cpp
+++ b/cmds/statsd/src/guardrail/StatsdStats.cpp
@@ -47,11 +47,9 @@
const int FIELD_ID_ATOM_STATS = 7;
const int FIELD_ID_UIDMAP_STATS = 8;
const int FIELD_ID_ANOMALY_ALARM_STATS = 9;
-// const int FIELD_ID_PULLED_ATOM_STATS = 10; // The proto is written in stats_log_util.cpp
-const int FIELD_ID_LOGGER_ERROR_STATS = 11;
const int FIELD_ID_PERIODIC_ALARM_STATS = 12;
-// const int FIELD_ID_LOG_LOSS_STATS = 14;
const int FIELD_ID_SYSTEM_SERVER_RESTART = 15;
+const int FIELD_ID_LOGGER_ERROR_STATS = 16;
const int FIELD_ID_ATOM_STATS_TAG = 1;
const int FIELD_ID_ATOM_STATS_COUNT = 2;
@@ -59,8 +57,9 @@
const int FIELD_ID_ANOMALY_ALARMS_REGISTERED = 1;
const int FIELD_ID_PERIODIC_ALARMS_REGISTERED = 1;
-const int FIELD_ID_LOGGER_STATS_TIME = 1;
-const int FIELD_ID_LOGGER_STATS_ERROR_CODE = 2;
+const int FIELD_ID_LOG_LOSS_STATS_TIME = 1;
+const int FIELD_ID_LOG_LOSS_STATS_COUNT = 2;
+const int FIELD_ID_LOG_LOSS_STATS_ERROR = 3;
const int FIELD_ID_CONFIG_STATS_UID = 1;
const int FIELD_ID_CONFIG_STATS_ID = 2;
@@ -181,12 +180,12 @@
noteConfigResetInternalLocked(key);
}
-void StatsdStats::noteLogLost(int32_t wallClockTimeSec, int32_t count) {
+void StatsdStats::noteLogLost(int32_t wallClockTimeSec, int32_t count, int32_t lastError) {
lock_guard<std::mutex> lock(mLock);
if (mLogLossStats.size() == kMaxLoggerErrors) {
mLogLossStats.pop_front();
}
- mLogLossStats.push_back(std::make_pair(wallClockTimeSec, count));
+ mLogLossStats.emplace_back(wallClockTimeSec, count, lastError);
}
void StatsdStats::noteBroadcastSent(const ConfigKey& key) {
@@ -564,8 +563,8 @@
}
for (const auto& loss : mLogLossStats) {
- dprintf(out, "Log loss: %lld (wall clock sec) - %d (count)\n", (long long)loss.first,
- loss.second);
+ dprintf(out, "Log loss: %lld (wall clock sec) - %d (count) %d (last error)\n",
+ (long long)loss.mWallClockSec, loss.mCount, loss.mLastError);
}
}
@@ -720,13 +719,11 @@
proto.end(uidMapToken);
for (const auto& error : mLogLossStats) {
- // The logger error stats are not used anymore since we move away from logd.
- // Temporarily use this field to log the log loss timestamp and count
- // TODO(b/80538532) Add a dedicated field in stats_log for this.
uint64_t token = proto.start(FIELD_TYPE_MESSAGE | FIELD_ID_LOGGER_ERROR_STATS |
FIELD_COUNT_REPEATED);
- proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOGGER_STATS_TIME, error.first);
- proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOGGER_STATS_ERROR_CODE, error.second);
+ proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOG_LOSS_STATS_TIME, error.mWallClockSec);
+ proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOG_LOSS_STATS_COUNT, error.mCount);
+ proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOG_LOSS_STATS_ERROR, error.mLastError);
proto.end(token);
}
diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h
index 2008abd..343709a 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.h
+++ b/cmds/statsd/src/guardrail/StatsdStats.h
@@ -303,7 +303,7 @@
/**
* Records statsd skipped an event.
*/
- void noteLogLost(int32_t wallClockTimeSec, int32_t count);
+ void noteLogLost(int32_t wallClockTimeSec, int32_t count, int lastError);
/**
* Reset the historical stats. Including all stats in icebox, and the tracked stats about
@@ -364,8 +364,18 @@
// Maps PullAtomId to its stats. The size is capped by the puller atom counts.
std::map<int, PulledAtomStats> mPulledAtomStats;
+ struct LogLossStats {
+ LogLossStats(int32_t sec, int32_t count, int32_t error)
+ : mWallClockSec(sec), mCount(count), mLastError(error) {
+ }
+ int32_t mWallClockSec;
+ int32_t mCount;
+ // error code defined in linux/errno.h
+ int32_t mLastError;
+ };
+
// Timestamps when we detect log loss, and the number of logs lost.
- std::list<std::pair<int32_t, int32_t>> mLogLossStats;
+ std::list<LogLossStats> mLogLossStats;
std::list<int32_t> mSystemServerRestartSec;
diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp
index c8b1cf0..7250b17 100644
--- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp
@@ -64,8 +64,10 @@
const int FIELD_ID_DIMENSION_LEAF_IN_WHAT = 4;
const int FIELD_ID_DIMENSION_LEAF_IN_CONDITION = 5;
// for ValueBucketInfo
-const int FIELD_ID_VALUE_LONG = 7;
-const int FIELD_ID_VALUE_DOUBLE = 8;
+const int FIELD_ID_VALUE_INDEX = 1;
+const int FIELD_ID_VALUE_LONG = 2;
+const int FIELD_ID_VALUE_DOUBLE = 3;
+const int FIELD_ID_VALUES = 9;
const int FIELD_ID_BUCKET_NUM = 4;
const int FIELD_ID_START_BUCKET_ELAPSED_MILLIS = 5;
const int FIELD_ID_END_BUCKET_ELAPSED_MILLIS = 6;
@@ -78,7 +80,6 @@
const sp<StatsPullerManager>& pullerManager)
: MetricProducer(metric.id(), key, timeBaseNs, conditionIndex, wizard),
mPullerManager(pullerManager),
- mValueField(metric.value_field()),
mPullTagId(pullTagId),
mIsPulled(pullTagId != -1),
mMinBucketSizeNs(metric.min_bucket_size_nanos()),
@@ -103,6 +104,9 @@
}
mBucketSizeNs = bucketSizeMills * 1000000;
+
+ translateFieldMatcher(metric.value_field(), &mFieldMatchers);
+
if (metric.has_dimensions_in_what()) {
translateFieldMatcher(metric.dimensions_in_what(), &mDimensionsInWhat);
mContainANYPositionInDimensionsInWhat = HasPositionANY(metric.dimensions_in_what());
@@ -122,9 +126,6 @@
}
}
- if (mValueField.child_size() > 0) {
- mField = mValueField.child(0).field();
- }
mConditionSliced = (metric.links().size() > 0) || (mDimensionsInCondition.size() > 0);
mSliceByPositionALL = HasPositionALL(metric.dimensions_in_what()) ||
HasPositionALL(metric.dimensions_in_condition());
@@ -259,18 +260,27 @@
protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_BUCKET_NUM,
(long long)(getBucketNumFromEndTimeNs(bucket.mBucketEndNs)));
}
- if (bucket.value.getType() == LONG) {
- protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_VALUE_LONG,
- (long long)bucket.value.long_value);
- VLOG("\t bucket [%lld - %lld] count: %lld", (long long)bucket.mBucketStartNs,
- (long long)bucket.mBucketEndNs, (long long)bucket.value.long_value);
- } else if (bucket.value.getType() == DOUBLE) {
- protoOutput->write(FIELD_TYPE_DOUBLE | FIELD_ID_VALUE_DOUBLE,
- bucket.value.double_value);
- VLOG("\t bucket [%lld - %lld] count: %.2f", (long long)bucket.mBucketStartNs,
- (long long)bucket.mBucketEndNs, bucket.value.double_value);
- } else {
- VLOG("Wrong value type for ValueMetric output: %d", bucket.value.getType());
+ for (int i = 0; i < (int)bucket.valueIndex.size(); i ++) {
+ int index = bucket.valueIndex[i];
+ const Value& value = bucket.values[i];
+ uint64_t valueToken = protoOutput->start(
+ FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_VALUES);
+ protoOutput->write(FIELD_TYPE_INT32 | FIELD_ID_VALUE_INDEX,
+ index);
+ if (value.getType() == LONG) {
+ protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_VALUE_LONG,
+ (long long)value.long_value);
+ VLOG("\t bucket [%lld - %lld] value %d: %lld", (long long)bucket.mBucketStartNs,
+ (long long)bucket.mBucketEndNs, index, (long long)value.long_value);
+ } else if (value.getType() == DOUBLE) {
+ protoOutput->write(FIELD_TYPE_DOUBLE | FIELD_ID_VALUE_DOUBLE,
+ value.double_value);
+ VLOG("\t bucket [%lld - %lld] value %d: %.2f", (long long)bucket.mBucketStartNs,
+ (long long)bucket.mBucketEndNs, index, value.double_value);
+ } else {
+ VLOG("Wrong value type for ValueMetric output: %d", value.getType());
+ }
+ protoOutput->end(valueToken);
}
protoOutput->end(bucketInfoToken);
}
@@ -303,7 +313,9 @@
// when condition change from true to false, clear diff base
if (mUseDiff && mCondition && !condition) {
for (auto& slice : mCurrentSlicedBucket) {
- slice.second.hasBase = false;
+ for (auto& interval : slice.second) {
+ interval.hasBase = false;
+ }
}
}
@@ -363,10 +375,12 @@
(unsigned long)mCurrentSlicedBucket.size());
if (verbose) {
for (const auto& it : mCurrentSlicedBucket) {
+ for (const auto& interval : it.second) {
fprintf(out, "\t(what)%s\t(condition)%s (value)%s\n",
it.first.getDimensionKeyInWhat().toString().c_str(),
it.first.getDimensionKeyInCondition().toString().c_str(),
- it.second.value.toString().c_str());
+ interval.value.toString().c_str());
+ }
}
}
}
@@ -391,25 +405,29 @@
return false;
}
-const Value getDoubleOrLong(const Value& value) {
- Value v;
- switch (value.type) {
- case INT:
- v.setLong(value.int_value);
- break;
- case LONG:
- v.setLong(value.long_value);
- break;
- case FLOAT:
- v.setDouble(value.float_value);
- break;
- case DOUBLE:
- v.setDouble(value.double_value);
- break;
- default:
- break;
+bool getDoubleOrLong(const LogEvent& event, const Matcher& matcher, Value& ret) {
+ for (const FieldValue& value : event.getValues()) {
+ if (value.mField.matches(matcher)) {
+ switch (value.mValue.type) {
+ case INT:
+ ret.setLong(value.mValue.int_value);
+ break;
+ case LONG:
+ ret.setLong(value.mValue.long_value);
+ break;
+ case FLOAT:
+ ret.setDouble(value.mValue.float_value);
+ break;
+ case DOUBLE:
+ ret.setDouble(value.mValue.double_value);
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
}
- return v;
+ return false;
}
void ValueMetricProducer::onMatchedLogEventInternalLocked(const size_t matcherIndex,
@@ -436,82 +454,90 @@
if (hitGuardRailLocked(eventKey)) {
return;
}
- Interval& interval = mCurrentSlicedBucket[eventKey];
-
- if (mField > event.size()) {
- VLOG("Failed to extract value field %d from atom %s. %d", mField, event.ToString().c_str(),
- (int)event.size());
- return;
+ vector<Interval>& multiIntervals = mCurrentSlicedBucket[eventKey];
+ if (multiIntervals.size() < mFieldMatchers.size()) {
+ VLOG("Resizing number of intervals to %d", (int)mFieldMatchers.size());
+ multiIntervals.resize(mFieldMatchers.size());
}
- Value value = getDoubleOrLong(event.getValues()[mField - 1].mValue);
- if (mUseDiff) {
- // no base. just update base and return.
- if (!interval.hasBase) {
- interval.base = value;
- interval.hasBase = true;
+ for (int i = 0; i < (int)mFieldMatchers.size(); i++) {
+ const Matcher& matcher = mFieldMatchers[i];
+ Interval& interval = multiIntervals[i];
+ interval.valueIndex = i;
+ Value value;
+ if (!getDoubleOrLong(event, matcher, value)) {
+ VLOG("Failed to get value %d from event %s", i, event.ToString().c_str());
return;
}
- Value diff;
- switch (mValueDirection) {
- case ValueMetric::INCREASING:
- if (value >= interval.base) {
- diff = value - interval.base;
- } else if (mUseAbsoluteValueOnReset) {
- diff = value;
- } else {
- VLOG("Unexpected decreasing value");
- StatsdStats::getInstance().notePullDataError(mPullTagId);
- interval.base = value;
- return;
- }
- break;
- case ValueMetric::DECREASING:
- if (interval.base >= value) {
- diff = interval.base - value;
- } else if (mUseAbsoluteValueOnReset) {
- diff = value;
- } else {
- VLOG("Unexpected increasing value");
- StatsdStats::getInstance().notePullDataError(mPullTagId);
- interval.base = value;
- return;
- }
- break;
- case ValueMetric::ANY:
- diff = value - interval.base;
- break;
- default:
- break;
- }
- interval.base = value;
- value = diff;
- }
- if (interval.hasValue) {
- switch (mAggregationType) {
- case ValueMetric::SUM:
- // for AVG, we add up and take average when flushing the bucket
- case ValueMetric::AVG:
- interval.value += value;
- break;
- case ValueMetric::MIN:
- interval.value = std::min(value, interval.value);
- break;
- case ValueMetric::MAX:
- interval.value = std::max(value, interval.value);
- break;
- default:
- break;
+ if (mUseDiff) {
+ // no base. just update base and return.
+ if (!interval.hasBase) {
+ interval.base = value;
+ interval.hasBase = true;
+ return;
+ }
+ Value diff;
+ switch (mValueDirection) {
+ case ValueMetric::INCREASING:
+ if (value >= interval.base) {
+ diff = value - interval.base;
+ } else if (mUseAbsoluteValueOnReset) {
+ diff = value;
+ } else {
+ VLOG("Unexpected decreasing value");
+ StatsdStats::getInstance().notePullDataError(mPullTagId);
+ interval.base = value;
+ return;
+ }
+ break;
+ case ValueMetric::DECREASING:
+ if (interval.base >= value) {
+ diff = interval.base - value;
+ } else if (mUseAbsoluteValueOnReset) {
+ diff = value;
+ } else {
+ VLOG("Unexpected increasing value");
+ StatsdStats::getInstance().notePullDataError(mPullTagId);
+ interval.base = value;
+ return;
+ }
+ break;
+ case ValueMetric::ANY:
+ diff = value - interval.base;
+ break;
+ default:
+ break;
+ }
+ interval.base = value;
+ value = diff;
}
- } else {
- interval.value = value;
- interval.hasValue = true;
+
+ if (interval.hasValue) {
+ switch (mAggregationType) {
+ case ValueMetric::SUM:
+ // for AVG, we add up and take average when flushing the bucket
+ case ValueMetric::AVG:
+ interval.value += value;
+ break;
+ case ValueMetric::MIN:
+ interval.value = std::min(value, interval.value);
+ break;
+ case ValueMetric::MAX:
+ interval.value = std::max(value, interval.value);
+ break;
+ default:
+ break;
+ }
+ } else {
+ interval.value = value;
+ interval.hasValue = true;
+ }
+ interval.sampleSize += 1;
}
- interval.sampleSize += 1;
// TODO: propgate proper values down stream when anomaly support doubles
- long wholeBucketVal = interval.value.long_value;
+ long wholeBucketVal = multiIntervals[0].value.long_value;
auto prev = mCurrentFullBucket.find(eventKey);
if (prev != mCurrentFullBucket.end()) {
wholeBucketVal += prev->second;
@@ -540,7 +566,9 @@
VLOG("Skipping forward %lld buckets", (long long)numBucketsForward);
// take base again in future good bucket.
for (auto& slice : mCurrentSlicedBucket) {
- slice.second.hasBase = false;
+ for (auto& interval : slice.second) {
+ interval.hasBase = false;
+ }
}
}
VLOG("metric %lld: new bucket start time: %lld", (long long)mMetricId,
@@ -552,37 +580,38 @@
(int)mCurrentSlicedBucket.size());
int64_t fullBucketEndTimeNs = getCurrentBucketEndTimeNs();
- ValueBucket info;
- info.mBucketStartNs = mCurrentBucketStartTimeNs;
- if (eventTimeNs < fullBucketEndTimeNs) {
- info.mBucketEndNs = eventTimeNs;
- } else {
- info.mBucketEndNs = fullBucketEndTimeNs;
- }
+ int64_t bucketEndTime = eventTimeNs < fullBucketEndTimeNs ? eventTimeNs : fullBucketEndTimeNs;
- if (info.mBucketEndNs - mCurrentBucketStartTimeNs >= mMinBucketSizeNs) {
+ if (bucketEndTime - mCurrentBucketStartTimeNs >= mMinBucketSizeNs) {
// The current bucket is large enough to keep.
for (const auto& slice : mCurrentSlicedBucket) {
- if (slice.second.hasValue) {
- // skip the output if the diff is zero
- if (mSkipZeroDiffOutput && mUseDiff && slice.second.value.isZero()) {
- continue;
+ ValueBucket bucket;
+ bucket.mBucketStartNs = mCurrentBucketStartTimeNs;
+ bucket.mBucketEndNs = bucketEndTime;
+ for (const auto& interval : slice.second) {
+ if (interval.hasValue) {
+ // skip the output if the diff is zero
+ if (mSkipZeroDiffOutput && mUseDiff && interval.value.isZero()) {
+ continue;
+ }
+ bucket.valueIndex.push_back(interval.valueIndex);
+ if (mAggregationType != ValueMetric::AVG) {
+ bucket.values.push_back(interval.value);
+ } else {
+ double sum = interval.value.type == LONG ? (double)interval.value.long_value
+ : interval.value.double_value;
+ bucket.values.push_back(Value((double)sum / interval.sampleSize));
+ }
}
- if (mAggregationType != ValueMetric::AVG) {
- info.value = slice.second.value;
- } else {
- double sum = slice.second.value.type == LONG
- ? (double)slice.second.value.long_value
- : slice.second.value.double_value;
- info.value.setDouble(sum / slice.second.sampleSize);
- }
- // it will auto create new vector of ValuebucketInfo if the key is not found.
+ }
+ // it will auto create new vector of ValuebucketInfo if the key is not found.
+ if (bucket.valueIndex.size() > 0) {
auto& bucketList = mPastBuckets[slice.first];
- bucketList.push_back(info);
+ bucketList.push_back(bucket);
}
}
} else {
- mSkippedBuckets.emplace_back(info.mBucketStartNs, info.mBucketEndNs);
+ mSkippedBuckets.emplace_back(mCurrentBucketStartTimeNs, bucketEndTime);
}
if (eventTimeNs > fullBucketEndTimeNs) { // If full bucket, send to anomaly tracker.
@@ -590,7 +619,7 @@
if (mCurrentFullBucket.size() > 0) {
for (const auto& slice : mCurrentSlicedBucket) {
// TODO: fix this when anomaly can accept double values
- mCurrentFullBucket[slice.first] += slice.second.value.long_value;
+ mCurrentFullBucket[slice.first] += slice.second[0].value.long_value;
}
for (const auto& slice : mCurrentFullBucket) {
for (auto& tracker : mAnomalyTrackers) {
@@ -606,7 +635,7 @@
for (auto& tracker : mAnomalyTrackers) {
if (tracker != nullptr) {
// TODO: fix this when anomaly can accept double values
- tracker->addPastBucket(slice.first, slice.second.value.long_value,
+ tracker->addPastBucket(slice.first, slice.second[0].value.long_value,
mCurrentBucketNum);
}
}
@@ -616,14 +645,16 @@
// Accumulate partial bucket.
for (const auto& slice : mCurrentSlicedBucket) {
// TODO: fix this when anomaly can accept double values
- mCurrentFullBucket[slice.first] += slice.second.value.long_value;
+ mCurrentFullBucket[slice.first] += slice.second[0].value.long_value;
}
}
// Reset counters
for (auto& slice : mCurrentSlicedBucket) {
- slice.second.hasValue = false;
- slice.second.sampleSize = 0;
+ for (auto& interval : slice.second) {
+ interval.hasValue = false;
+ interval.sampleSize = 0;
+ }
}
}
diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.h b/cmds/statsd/src/metrics/ValueMetricProducer.h
index 3416afe..c682a66 100644
--- a/cmds/statsd/src/metrics/ValueMetricProducer.h
+++ b/cmds/statsd/src/metrics/ValueMetricProducer.h
@@ -34,7 +34,8 @@
struct ValueBucket {
int64_t mBucketStartNs;
int64_t mBucketEndNs;
- Value value;
+ std::vector<int> valueIndex;
+ std::vector<Value> values;
};
class ValueMetricProducer : public virtual MetricProducer, public virtual PullDataReceiver {
@@ -97,7 +98,8 @@
sp<StatsPullerManager> mPullerManager;
- const FieldMatcher mValueField;
+ // Value fields for matching.
+ std::vector<Matcher> mFieldMatchers;
// tagId for pulled data. -1 if this is not pulled
const int mPullTagId;
@@ -105,10 +107,10 @@
// if this is pulled metric
const bool mIsPulled;
- int mField;
-
- // internal state of a bucket.
+ // internal state of an ongoing aggregation bucket.
typedef struct {
+ // Index in multi value aggregation.
+ int valueIndex;
// Holds current base value of the dimension. Take diff and update if necessary.
Value base;
// Whether there is a base to diff to.
@@ -122,7 +124,7 @@
bool hasValue;
} Interval;
- std::unordered_map<MetricDimensionKey, Interval> mCurrentSlicedBucket;
+ std::unordered_map<MetricDimensionKey, std::vector<Interval>> mCurrentSlicedBucket;
std::unordered_map<MetricDimensionKey, int64_t> mCurrentFullBucket;
diff --git a/cmds/statsd/src/socket/StatsSocketListener.cpp b/cmds/statsd/src/socket/StatsSocketListener.cpp
index 9b0691b..6bb8cda 100755
--- a/cmds/statsd/src/socket/StatsSocketListener.cpp
+++ b/cmds/statsd/src/socket/StatsSocketListener.cpp
@@ -40,7 +40,6 @@
namespace statsd {
static const int kLogMsgHeaderSize = 28;
-static const int kLibLogTag = 1006;
StatsSocketListener::StatsSocketListener(const sp<LogListener>& listener)
: SocketListener(getLogSocket(), false /*start listen*/), mListener(listener) {
@@ -109,10 +108,11 @@
// TODO(b/80538532): In addition to log it in StatsdStats, we should properly reset the config.
if (n == sizeof(android_log_event_int_t)) {
android_log_event_int_t* int_event = reinterpret_cast<android_log_event_int_t*>(ptr);
- if (int_event->header.tag == kLibLogTag && int_event->payload.type == EVENT_TYPE_INT) {
- ALOGE("Found dropped events: %d", int_event->payload.data);
+ if (int_event->payload.type == EVENT_TYPE_INT) {
+ ALOGE("Found dropped events: %d error %d", int_event->payload.data,
+ int_event->header.tag);
StatsdStats::getInstance().noteLogLost((int32_t)getWallClockSec(),
- int_event->payload.data);
+ int_event->payload.data, int_event->header.tag);
return true;
}
}
diff --git a/cmds/statsd/src/stats_log.proto b/cmds/statsd/src/stats_log.proto
index 4da3828..5d0f3d1 100644
--- a/cmds/statsd/src/stats_log.proto
+++ b/cmds/statsd/src/stats_log.proto
@@ -108,12 +108,22 @@
optional int64 value = 3 [deprecated = true];
- oneof values {
- int64 value_long = 7;
+ oneof single_value {
+ int64 value_long = 7 [deprecated = true];
- double value_double = 8;
+ double value_double = 8 [deprecated = true];
}
+ message Value {
+ optional int32 index = 1;
+ oneof value {
+ int64 value_long = 2;
+ double value_double = 3;
+ }
+ }
+
+ repeated Value values = 9;
+
optional int64 bucket_num = 4;
optional int64 start_bucket_elapsed_millis = 5;
@@ -398,4 +408,11 @@
repeated int64 log_loss_stats = 14;
repeated int32 system_restart_sec = 15;
+
+ message LogLossStats {
+ optional int32 detected_time_sec = 1;
+ optional int32 count = 2;
+ optional int32 last_error = 3;
+ }
+ repeated LogLossStats detected_log_loss = 16;
}
diff --git a/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp b/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp
index 095b401..abf1ab1 100644
--- a/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp
@@ -142,23 +142,23 @@
EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
- EXPECT_TRUE(data.bucket_info(0).has_value_long());
+ EXPECT_EQ(1, data.bucket_info(0).values_size());
EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
- EXPECT_TRUE(data.bucket_info(1).has_value_long());
+ EXPECT_EQ(1, data.bucket_info(1).values_size());
EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
- EXPECT_TRUE(data.bucket_info(2).has_value_long());
+ EXPECT_EQ(1, data.bucket_info(2).values_size());
EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(3).start_bucket_elapsed_nanos());
EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(3).end_bucket_elapsed_nanos());
- EXPECT_TRUE(data.bucket_info(3).has_value_long());
+ EXPECT_EQ(1, data.bucket_info(3).values_size());
EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(4).start_bucket_elapsed_nanos());
EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(4).end_bucket_elapsed_nanos());
- EXPECT_TRUE(data.bucket_info(4).has_value_long());
+ EXPECT_EQ(1, data.bucket_info(4).values_size());
}
TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm) {
@@ -249,15 +249,15 @@
EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
- EXPECT_TRUE(data.bucket_info(0).has_value_long());
+ EXPECT_EQ(1, data.bucket_info(0).values_size());
EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
- EXPECT_TRUE(data.bucket_info(1).has_value_long());
+ EXPECT_EQ(1, data.bucket_info(1).values_size());
EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
EXPECT_EQ(baseTimeNs + 10 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
- EXPECT_TRUE(data.bucket_info(2).has_value_long());
+ EXPECT_EQ(1, data.bucket_info(2).values_size());
}
#else
diff --git a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
index ffa07081..ee225df 100644
--- a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
+++ b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
@@ -140,7 +140,7 @@
valueProducer.onDataPulled(allData);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(11, curInterval.base.long_value);
@@ -157,7 +157,7 @@
valueProducer.onDataPulled(allData);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(23, curInterval.base.long_value);
@@ -165,7 +165,7 @@
EXPECT_EQ(12, curInterval.value.long_value);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_EQ(8, valueProducer.mPastBuckets.begin()->second.back().value.long_value);
+ EXPECT_EQ(8, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value);
allData.clear();
event = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
@@ -175,7 +175,7 @@
allData.push_back(event);
valueProducer.onDataPulled(allData);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(36, curInterval.base.long_value);
@@ -183,7 +183,7 @@
EXPECT_EQ(13, curInterval.value.long_value);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(2UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second.back().value.long_value);
+ EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value);
}
/*
@@ -217,7 +217,7 @@
valueProducer.onDataPulled(allData);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(11, curInterval.base.long_value);
@@ -233,7 +233,7 @@
valueProducer.onDataPulled(allData);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(10, curInterval.base.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -248,14 +248,14 @@
allData.push_back(event);
valueProducer.onDataPulled(allData);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(36, curInterval.base.long_value);
EXPECT_EQ(true, curInterval.hasValue);
EXPECT_EQ(26, curInterval.value.long_value);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_EQ(10, valueProducer.mPastBuckets.begin()->second.back().value.long_value);
+ EXPECT_EQ(10, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value);
}
/*
@@ -288,7 +288,7 @@
valueProducer.onDataPulled(allData);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(11, curInterval.base.long_value);
@@ -304,7 +304,7 @@
valueProducer.onDataPulled(allData);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(10, curInterval.base.long_value);
EXPECT_EQ(false, curInterval.hasValue);
@@ -318,7 +318,7 @@
allData.push_back(event);
valueProducer.onDataPulled(allData);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(36, curInterval.base.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -370,7 +370,7 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
// startUpdated:false sum:0 start:100
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(100, curInterval.base.long_value);
@@ -388,7 +388,7 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(110, curInterval.base.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -399,7 +399,7 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasValue);
EXPECT_EQ(10, curInterval.value.long_value);
EXPECT_EQ(false, curInterval.hasBase);
@@ -486,7 +486,7 @@
valueProducer.notifyAppUpgrade(bucket2StartTimeNs + 150, "ANY.APP", 1, 1);
EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
EXPECT_EQ(bucket2StartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs);
- EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].value.long_value);
+ EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].values[0].long_value);
allData.clear();
event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
@@ -497,7 +497,7 @@
valueProducer.onDataPulled(allData);
EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
EXPECT_EQ(bucket2StartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs);
- EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].value.long_value);
+ EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].values[0].long_value);
}
TEST(ValueMetricProducerTest, TestPulledValueWithUpgradeWhileConditionFalse) {
@@ -545,7 +545,7 @@
EXPECT_EQ(bucket2StartTimeNs-50, valueProducer.mCurrentBucketStartTimeNs);
EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
EXPECT_EQ(bucketStartTimeNs, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketStartNs);
- EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].value.long_value);
+ EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].values[0].long_value);
EXPECT_FALSE(valueProducer.mCondition);
}
@@ -573,7 +573,7 @@
valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(10, curInterval.value.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -581,13 +581,13 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(30, curInterval.value.long_value);
valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_EQ(30, valueProducer.mPastBuckets.begin()->second.back().value.long_value);
+ EXPECT_EQ(30, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value);
}
TEST(ValueMetricProducerTest, TestPushedEventsWithCondition) {
@@ -620,8 +620,8 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(20, curInterval.value.long_value);
shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 30);
@@ -632,7 +632,7 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(50, curInterval.value.long_value);
valueProducer.onConditionChangedLocked(false, bucketStartTimeNs + 35);
@@ -644,13 +644,13 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(50, curInterval.value.long_value);
valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_EQ(50, valueProducer.mPastBuckets.begin()->second.back().value.long_value);
+ EXPECT_EQ(50, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value);
}
TEST(ValueMetricProducerTest, TestAnomalyDetection) {
@@ -765,7 +765,7 @@
valueProducer.onDataPulled(allData);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
// startUpdated:true sum:0 start:11
EXPECT_EQ(true, curInterval.hasBase);
@@ -783,7 +783,7 @@
valueProducer.onDataPulled(allData);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
// tartUpdated:false sum:12
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(23, curInterval.base.long_value);
@@ -803,14 +803,14 @@
allData.push_back(event);
valueProducer.onDataPulled(allData);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
// startUpdated:false sum:12
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(36, curInterval.base.long_value);
EXPECT_EQ(false, curInterval.hasValue);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second.back().value.long_value);
+ EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value);
}
/*
@@ -860,7 +860,7 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(100, curInterval.base.long_value);
EXPECT_EQ(false, curInterval.hasValue);
@@ -868,7 +868,7 @@
// pull on bucket boundary come late, condition change happens before it
valueProducer.onConditionChanged(false, bucket2StartTimeNs + 1);
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(false, curInterval.hasBase);
EXPECT_EQ(true, curInterval.hasValue);
EXPECT_EQ(20, curInterval.value.long_value);
@@ -885,7 +885,7 @@
allData.push_back(event);
valueProducer.onDataPulled(allData);
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(false, curInterval.hasBase);
EXPECT_EQ(true, curInterval.hasValue);
EXPECT_EQ(20, curInterval.value.long_value);
@@ -950,7 +950,7 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
// startUpdated:false sum:0 start:100
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(100, curInterval.base.long_value);
@@ -959,7 +959,7 @@
// pull on bucket boundary come late, condition change happens before it
valueProducer.onConditionChanged(false, bucket2StartTimeNs + 1);
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(false, curInterval.hasBase);
EXPECT_EQ(true, curInterval.hasValue);
EXPECT_EQ(20, curInterval.value.long_value);
@@ -967,7 +967,7 @@
// condition changed to true again, before the pull alarm is delivered
valueProducer.onConditionChanged(true, bucket2StartTimeNs + 25);
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(130, curInterval.base.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -984,7 +984,7 @@
allData.push_back(event);
valueProducer.onDataPulled(allData);
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(130, curInterval.base.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -1017,7 +1017,7 @@
valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(10, curInterval.value.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -1025,13 +1025,13 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(10, curInterval.value.long_value);
valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_EQ(10, valueProducer.mPastBuckets.begin()->second.back().value.long_value);
+ EXPECT_EQ(10, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value);
}
TEST(ValueMetricProducerTest, TestPushedAggregateMax) {
@@ -1059,7 +1059,7 @@
valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(10, curInterval.value.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -1067,13 +1067,13 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(20, curInterval.value.long_value);
valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_EQ(20, valueProducer.mPastBuckets.begin()->second.back().value.long_value);
+ EXPECT_EQ(20, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value);
}
TEST(ValueMetricProducerTest, TestPushedAggregateAvg) {
@@ -1102,7 +1102,7 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
ValueMetricProducer::Interval curInterval;
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(10, curInterval.value.long_value);
EXPECT_EQ(true, curInterval.hasValue);
EXPECT_EQ(1, curInterval.sampleSize);
@@ -1111,14 +1111,14 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(25, curInterval.value.long_value);
EXPECT_EQ(2, curInterval.sampleSize);
valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_TRUE(std::abs(valueProducer.mPastBuckets.begin()->second.back().value.double_value - 12.5) < epsilon);
+ EXPECT_TRUE(std::abs(valueProducer.mPastBuckets.begin()->second.back().values[0].double_value - 12.5) < epsilon);
}
TEST(ValueMetricProducerTest, TestPushedAggregateSum) {
@@ -1146,7 +1146,7 @@
valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(10, curInterval.value.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -1154,13 +1154,13 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(25, curInterval.value.long_value);
valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_EQ(25, valueProducer.mPastBuckets.begin()->second.back().value.long_value);
+ EXPECT_EQ(25, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value);
}
TEST(ValueMetricProducerTest, TestSkipZeroDiffOutput) {
@@ -1189,7 +1189,7 @@
valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(10, curInterval.base.long_value);
EXPECT_EQ(false, curInterval.hasValue);
@@ -1198,7 +1198,7 @@
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasValue);
EXPECT_EQ(5, curInterval.value.long_value);
@@ -1209,7 +1209,7 @@
event3->init();
valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(15, curInterval.base.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -1220,7 +1220,7 @@
event4->init();
valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
- curInterval = valueProducer.mCurrentSlicedBucket.begin()->second;
+ curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
EXPECT_EQ(15, curInterval.base.long_value);
EXPECT_EQ(true, curInterval.hasValue);
@@ -1228,7 +1228,7 @@
valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
- EXPECT_EQ(5, valueProducer.mPastBuckets.begin()->second.back().value.long_value);
+ EXPECT_EQ(5, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value);
}
} // namespace statsd
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 7330da3..1cf042f 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -1751,6 +1751,8 @@
*/
public static class TaskSnapshot implements Parcelable {
+ // Top activity in task when snapshot was taken
+ private final ComponentName mTopActivityComponent;
private final GraphicBuffer mSnapshot;
private final int mOrientation;
private final Rect mContentInsets;
@@ -1765,9 +1767,11 @@
private final int mSystemUiVisibility;
private final boolean mIsTranslucent;
- public TaskSnapshot(GraphicBuffer snapshot, int orientation, Rect contentInsets,
- boolean reducedResolution, float scale, boolean isRealSnapshot, int windowingMode,
- int systemUiVisibility, boolean isTranslucent) {
+ public TaskSnapshot(@NonNull ComponentName topActivityComponent, GraphicBuffer snapshot,
+ int orientation, Rect contentInsets, boolean reducedResolution, float scale,
+ boolean isRealSnapshot, int windowingMode, int systemUiVisibility,
+ boolean isTranslucent) {
+ mTopActivityComponent = topActivityComponent;
mSnapshot = snapshot;
mOrientation = orientation;
mContentInsets = new Rect(contentInsets);
@@ -1780,6 +1784,7 @@
}
private TaskSnapshot(Parcel source) {
+ mTopActivityComponent = ComponentName.readFromParcel(source);
mSnapshot = source.readParcelable(null /* classLoader */);
mOrientation = source.readInt();
mContentInsets = source.readParcelable(null /* classLoader */);
@@ -1792,6 +1797,13 @@
}
/**
+ * @return The top activity component for the task at the point this snapshot was taken.
+ */
+ public ComponentName getTopActivityComponent() {
+ return mTopActivityComponent;
+ }
+
+ /**
* @return The graphic buffer representing the screenshot.
*/
@UnsupportedAppUsage
@@ -1871,6 +1883,7 @@
@Override
public void writeToParcel(Parcel dest, int flags) {
+ ComponentName.writeToParcel(mTopActivityComponent, dest);
dest.writeParcelable(mSnapshot, 0);
dest.writeInt(mOrientation);
dest.writeParcelable(mContentInsets, 0);
@@ -1886,7 +1899,9 @@
public String toString() {
final int width = mSnapshot != null ? mSnapshot.getWidth() : 0;
final int height = mSnapshot != null ? mSnapshot.getHeight() : 0;
- return "TaskSnapshot{mSnapshot=" + mSnapshot + " (" + width + "x" + height + ")"
+ return "TaskSnapshot{"
+ + " mTopActivityComponent=" + mTopActivityComponent.flattenToShortString()
+ + " mSnapshot=" + mSnapshot + " (" + width + "x" + height + ")"
+ " mOrientation=" + mOrientation
+ " mContentInsets=" + mContentInsets.toShortString()
+ " mReducedResolution=" + mReducedResolution + " mScale=" + mScale
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index a9819fc..2be5dc9 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -2323,7 +2323,7 @@
*/
private static long sum(@NonNull long[] counts, int start, int end) {
long totalCount = 0;
- for (int i = start; i <= end; i++) {
+ for (int i = start; i < end; i++) {
totalCount += counts[i];
}
return totalCount;
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 4f4df5d..df37a02 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -5937,8 +5937,9 @@
/**
* @return whether this notification is a foreground service notification
+ * @hide
*/
- private boolean isForegroundService() {
+ public boolean isForegroundService() {
return (flags & Notification.FLAG_FOREGROUND_SERVICE) != 0;
}
diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java
index 43f902a..cc4d4b1a 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -61,37 +61,39 @@
* <a href="/guide/topics/text/autofill">Autofill Framework</a> guides.
*/
public class AssistStructure implements Parcelable {
- static final String TAG = "AssistStructure";
+ private static final String TAG = "AssistStructure";
- static final boolean DEBUG_PARCEL = false;
- static final boolean DEBUG_PARCEL_CHILDREN = false;
- static final boolean DEBUG_PARCEL_TREE = false;
+ private static final boolean DEBUG_PARCEL = false;
+ private static final boolean DEBUG_PARCEL_CHILDREN = false;
+ private static final boolean DEBUG_PARCEL_TREE = false;
- static final int VALIDATE_WINDOW_TOKEN = 0x11111111;
- static final int VALIDATE_VIEW_TOKEN = 0x22222222;
+ private static final int VALIDATE_WINDOW_TOKEN = 0x11111111;
+ private static final int VALIDATE_VIEW_TOKEN = 0x22222222;
- boolean mHaveData;
+ private boolean mHaveData;
- ComponentName mActivityComponent;
+ // The task id and component of the activity which this assist structure is for
+ private int mTaskId;
+ private ComponentName mActivityComponent;
private boolean mIsHomeActivity;
private int mFlags;
private int mAutofillFlags;
- final ArrayList<WindowNode> mWindowNodes = new ArrayList<>();
+ private final ArrayList<WindowNode> mWindowNodes = new ArrayList<>();
- final ArrayList<ViewNodeBuilder> mPendingAsyncChildren = new ArrayList<>();
+ private final ArrayList<ViewNodeBuilder> mPendingAsyncChildren = new ArrayList<>();
- SendChannel mSendChannel;
- IBinder mReceiveChannel;
+ private SendChannel mSendChannel;
+ private IBinder mReceiveChannel;
- Rect mTmpRect = new Rect();
+ private Rect mTmpRect = new Rect();
- boolean mSanitizeOnWrite = false;
+ private boolean mSanitizeOnWrite = false;
private long mAcquisitionStartTime;
private long mAcquisitionEndTime;
- static final int TRANSACTION_XFER = Binder.FIRST_CALL_TRANSACTION+1;
- static final String DESCRIPTOR = "android.app.AssistStructure";
+ private static final int TRANSACTION_XFER = Binder.FIRST_CALL_TRANSACTION+1;
+ private static final String DESCRIPTOR = "android.app.AssistStructure";
/** @hide */
public void setAcquisitionStartTime(long acquisitionStartTime) {
@@ -197,7 +199,6 @@
ParcelTransferWriter(AssistStructure as, Parcel out) {
mSanitizeOnWrite = as.mSanitizeOnWrite;
mWriteStructure = as.waitForReady();
- ComponentName.writeToParcel(as.mActivityComponent, out);
out.writeInt(as.mFlags);
out.writeInt(as.mAutofillFlags);
out.writeLong(as.mAcquisitionStartTime);
@@ -353,7 +354,6 @@
void go() {
fetchData();
- mActivityComponent = ComponentName.readFromParcel(mCurParcel);
mFlags = mCurParcel.readInt();
mAutofillFlags = mCurParcel.readInt();
mAcquisitionStartTime = mCurParcel.readLong();
@@ -2129,7 +2129,6 @@
/** @hide */
public AssistStructure(Activity activity, boolean forAutoFill, int flags) {
mHaveData = true;
- mActivityComponent = activity.getComponentName();
mFlags = flags;
ArrayList<ViewRootImpl> views = WindowManagerGlobal.getInstance().getRootViews(
activity.getActivityToken());
@@ -2145,12 +2144,13 @@
public AssistStructure() {
mHaveData = true;
- mActivityComponent = null;
mFlags = 0;
}
/** @hide */
public AssistStructure(Parcel in) {
+ mTaskId = in.readInt();
+ mActivityComponent = ComponentName.readFromParcel(in);
mIsHomeActivity = in.readInt() == 1;
mReceiveChannel = in.readStrongBinder();
}
@@ -2171,7 +2171,10 @@
Log.i(TAG, "dump(): calling ensureData() first");
ensureData();
}
- Log.i(TAG, "Activity: " + mActivityComponent.flattenToShortString());
+ Log.i(TAG, "Task id: " + mTaskId);
+ Log.i(TAG, "Activity: " + (mActivityComponent != null
+ ? mActivityComponent.flattenToShortString()
+ : null));
Log.i(TAG, "Sanitize on write: " + mSanitizeOnWrite);
Log.i(TAG, "Flags: " + mFlags);
final int N = getWindowNodeCount();
@@ -2283,23 +2286,37 @@
}
/**
- * Return the activity this AssistStructure came from.
+ * Sets the task id is associated with the activity from which this AssistStructure was
+ * generated.
+ * @hide
*/
- public ComponentName getActivityComponent() {
- ensureData();
- return mActivityComponent;
+ public void setTaskId(int taskId) {
+ mTaskId = taskId;
}
/**
- * Called by Autofill server when app forged a different value.
- *
+ * @return The task id for the associated activity.
+ * @hide
+ */
+ public int getTaskId() {
+ return mTaskId;
+ }
+
+ /**
+ * Sets the activity that is associated with this AssistStructure.
* @hide
*/
public void setActivityComponent(ComponentName componentName) {
- ensureData();
mActivityComponent = componentName;
}
+ /**
+ * Return the activity this AssistStructure came from.
+ */
+ public ComponentName getActivityComponent() {
+ return mActivityComponent;
+ }
+
/** @hide */
public int getFlags() {
return mFlags;
@@ -2393,6 +2410,8 @@
@Override
public void writeToParcel(Parcel out, int flags) {
+ out.writeInt(mTaskId);
+ ComponentName.writeToParcel(mActivityComponent, out);
out.writeInt(mIsHomeActivity ? 1 : 0);
if (mHaveData) {
// This object holds its data. We want to write a send channel that the
diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java
index c6e94c7..318dbee 100644
--- a/core/java/android/appwidget/AppWidgetHostView.java
+++ b/core/java/android/appwidget/AppWidgetHostView.java
@@ -24,6 +24,8 @@
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
+import android.content.pm.LauncherActivityInfo;
+import android.content.pm.LauncherApps;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.graphics.Color;
@@ -622,6 +624,7 @@
}
}
defaultView = inflater.inflate(layoutId, this, false);
+ defaultView.setOnClickListener(this::onDefaultViewClicked);
} else {
Log.w(TAG, "can't inflate defaultView because mInfo is missing");
}
@@ -641,6 +644,19 @@
return defaultView;
}
+ private void onDefaultViewClicked(View view) {
+ if (mInfo != null) {
+ LauncherApps launcherApps = getContext().getSystemService(LauncherApps.class);
+ List<LauncherActivityInfo> activities = launcherApps.getActivityList(
+ mInfo.provider.getPackageName(), mInfo.getProfile());
+ if (!activities.isEmpty()) {
+ LauncherActivityInfo ai = activities.get(0);
+ launcherApps.startMainActivity(ai.getComponentName(), ai.getUser(),
+ RemoteViews.getSourceBounds(view), null);
+ }
+ }
+ }
+
/**
* Inflate and return a view that represents an error state.
*/
diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java
index 007f4bc..dc4f0b7 100644
--- a/core/java/android/hardware/soundtrigger/SoundTrigger.java
+++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java
@@ -611,6 +611,13 @@
* @hide
*/
public static final int RECOGNITION_STATUS_FAILURE = 2;
+ /**
+ * Recognition event was triggered by a getModelState request, not by the
+ * DSP.
+ *
+ * @hide
+ */
+ public static final int RECOGNITION_STATUS_GET_STATE_RESPONSE = 3;
/**
* A RecognitionEvent is provided by the
diff --git a/core/java/android/hardware/soundtrigger/SoundTriggerModule.java b/core/java/android/hardware/soundtrigger/SoundTriggerModule.java
index e970747..402c228 100644
--- a/core/java/android/hardware/soundtrigger/SoundTriggerModule.java
+++ b/core/java/android/hardware/soundtrigger/SoundTriggerModule.java
@@ -133,12 +133,21 @@
public native int stopRecognition(int soundModelHandle);
/**
- * Get the current state of a {@link SoundTrigger.SoundModel}
+ * Get the current state of a {@link SoundTrigger.SoundModel}.
+ * The state will be returned asynchronously as a {@link SoundTrigger#RecognitionEvent}
+ * in the callback registered in the {@link SoundTrigger.startRecognition} method.
* @param soundModelHandle The sound model handle indicating which model's state to return
- * @return - {@link SoundTrigger#RecognitionEvent} in case of success
- * - null in case of an error or if not supported
+ * @return - {@link SoundTrigger#STATUS_OK} in case of success
+ * - {@link SoundTrigger#STATUS_ERROR} in case of unspecified error
+ * - {@link SoundTrigger#STATUS_PERMISSION_DENIED} if the caller does not have
+ * system permission
+ * - {@link SoundTrigger#STATUS_NO_INIT} if the native service cannot be reached
+ * - {@link SoundTrigger#STATUS_BAD_VALUE} if the sound model handle is invalid
+ * - {@link SoundTrigger#STATUS_DEAD_OBJECT} if the binder transaction to the native
+ * service fails
+ * - {@link SoundTrigger#STATUS_INVALID_OPERATION} if the call is out of sequence
*/
- public native SoundTrigger.RecognitionEvent getModelState(int soundModelHandle);
+ public native int getModelState(int soundModelHandle);
private class NativeEventHandlerDelegate {
private final Handler mHandler;
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 0c4a0b3e..1bae3f7 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -468,6 +468,14 @@
}
/**
+ * Returns location of packages cache directory.
+ * {@hide}
+ */
+ public static File getPackageCacheDirectory() {
+ return new File(getDataSystemDirectory(), "package_cache");
+ }
+
+ /**
* Return the primary shared/external storage directory. This directory may
* not currently be accessible if it has been mounted by the user on their
* computer, has been removed from the device, or some other problem has
diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java
index 0b90f54..1f47f93 100644
--- a/core/java/android/os/FileUtils.java
+++ b/core/java/android/os/FileUtils.java
@@ -1156,11 +1156,16 @@
public static @Nullable File createDir(File baseDir, String name) {
final File dir = new File(baseDir, name);
+ return createDir(dir) ? dir : null;
+ }
+
+ /** @hide */
+ public static boolean createDir(File dir) {
if (dir.exists()) {
- return dir.isDirectory() ? dir : null;
+ return dir.isDirectory();
}
- return dir.mkdir() ? dir : null;
+ return dir.mkdir();
}
/**
diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java
index 70688fd..126588a 100644
--- a/core/java/android/os/ParcelFileDescriptor.java
+++ b/core/java/android/os/ParcelFileDescriptor.java
@@ -881,9 +881,9 @@
@Override
public void close() throws IOException {
try {
- mPfd.close();
- } finally {
super.close();
+ } finally {
+ mPfd.close();
}
}
@@ -932,9 +932,9 @@
@Override
public void close() throws IOException {
try {
- mPfd.close();
- } finally {
super.close();
+ } finally {
+ mPfd.close();
}
}
}
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index c91cda6..a61d8cb 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -225,6 +225,8 @@
public static final int DEBUG_SDCARDFS_FORCE_OFF = 1 << 4;
/** {@hide} */
public static final int DEBUG_VIRTUAL_DISK = 1 << 5;
+ /** {@hide} */
+ public static final int DEBUG_ISOLATED_STORAGE = 1 << 6;
/** {@hide} */
public static final int FLAG_STORAGE_DE = IInstalld.FLAG_STORAGE_DE;
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 3f14379..4ead34e 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -455,6 +455,19 @@
}
/**
+ * Gets the display unique id.
+ * <p>
+ * Unique id is different from display id because physical displays have stable unique id across
+ * reboots.
+ *
+ * @see com.android.service.display.DisplayDevice#hasStableUniqueId().
+ * @hide
+ */
+ public String getUniqueId() {
+ return mDisplayInfo.uniqueId;
+ }
+
+ /**
* Returns true if this display is still valid, false if the display has been removed.
*
* If the display is invalid, then the methods of this class will
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index 7e5c149..907f385 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -814,13 +814,19 @@
public static final int KEYCODE_ALL_APPS = 284;
/** Key code constant: Refresh key. */
public static final int KEYCODE_REFRESH = 285;
+ /** Key code constant: Thumbs up key. Apps can use this to let user upvote content. */
+ public static final int KEYCODE_THUMBS_UP = 286;
+ /** Key code constant: Thumbs down key. Apps can use this to let user downvote content. */
+ public static final int KEYCODE_THUMBS_DOWN = 287;
+ /** Key code constant: Consumed by system to switch current viewer profile. */
+ public static final int KEYCODE_PROFILE_SWITCH = 288;
/**
* Integer value of the last KEYCODE. Increases as new keycodes are added to KeyEvent.
* @hide
*/
@TestApi
- public static final int LAST_KEYCODE = KEYCODE_REFRESH;
+ public static final int LAST_KEYCODE = KEYCODE_PROFILE_SWITCH;
// NOTE: If you add a new keycode here you must also add it to:
// isSystem()
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index e129091..d7c8aed 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -3838,6 +3838,14 @@
return "ACTION_SCROLL_DOWN";
case R.id.accessibilityActionScrollRight:
return "ACTION_SCROLL_RIGHT";
+ case R.id.accessibilityActionPageDown:
+ return "ACTION_PAGE_DOWN";
+ case R.id.accessibilityActionPageUp:
+ return "ACTION_PAGE_UP";
+ case R.id.accessibilityActionPageLeft:
+ return "ACTION_PAGE_LEFT";
+ case R.id.accessibilityActionPageRight:
+ return "ACTION_PAGE_RIGHT";
case R.id.accessibilityActionSetProgress:
return "ACTION_SET_PROGRESS";
case R.id.accessibilityActionContextClick:
@@ -4368,6 +4376,30 @@
new AccessibilityAction(R.id.accessibilityActionScrollRight);
/**
+ * Action to move to the page above.
+ */
+ public static final AccessibilityAction ACTION_PAGE_UP =
+ new AccessibilityAction(R.id.accessibilityActionPageUp);
+
+ /**
+ * Action to move to the page below.
+ */
+ public static final AccessibilityAction ACTION_PAGE_DOWN =
+ new AccessibilityAction(R.id.accessibilityActionPageDown);
+
+ /**
+ * Action to move to the page left.
+ */
+ public static final AccessibilityAction ACTION_PAGE_LEFT =
+ new AccessibilityAction(R.id.accessibilityActionPageLeft);
+
+ /**
+ * Action to move to the page right.
+ */
+ public static final AccessibilityAction ACTION_PAGE_RIGHT =
+ new AccessibilityAction(R.id.accessibilityActionPageRight);
+
+ /**
* Action that context clicks the node.
*/
public static final AccessibilityAction ACTION_CONTEXT_CLICK =
diff --git a/core/java/com/android/internal/app/ISoundTriggerService.aidl b/core/java/com/android/internal/app/ISoundTriggerService.aidl
index c0c689c..764c0cf 100644
--- a/core/java/com/android/internal/app/ISoundTriggerService.aidl
+++ b/core/java/com/android/internal/app/ISoundTriggerService.aidl
@@ -53,5 +53,5 @@
/** For both ...Intent and ...Service based usage */
boolean isRecognitionActive(in ParcelUuid parcelUuid);
- SoundTrigger.RecognitionEvent getModelState(in ParcelUuid parcelUuid);
+ int getModelState(in ParcelUuid soundModelId);
}
diff --git a/core/java/com/android/internal/os/KernelCpuProcStringReader.java b/core/java/com/android/internal/os/KernelCpuProcStringReader.java
new file mode 100644
index 0000000..22435ae
--- /dev/null
+++ b/core/java/com/android/internal/os/KernelCpuProcStringReader.java
@@ -0,0 +1,269 @@
+/*
+ * 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.os;
+
+import android.os.StrictMode;
+import android.os.SystemClock;
+import android.util.Slog;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.CharBuffer;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * Reads human-readable cpu time proc files.
+ *
+ * It is implemented as singletons for built-in kernel proc files. Get___Instance() method will
+ * return corresponding reader instance. In order to prevent frequent GC, it reuses the same char[]
+ * to store data read from proc files.
+ *
+ * A KernelCpuProcStringReader instance keeps an error counter. When the number of read errors
+ * within that instance accumulates to 5, this instance will reject all further read requests.
+ *
+ * Data fetched within last 500ms is considered fresh, since the reading lifecycle can take up to
+ * 100ms. KernelCpuProcStringReader always tries to use cache if it is fresh and valid, but it can
+ * be disabled through a parameter.
+ *
+ * A KernelCpuProcReader instance is thread-safe. It acquires a write lock when reading the proc
+ * file, releases it right after, then acquires a read lock before returning a ProcFileIterator.
+ * Caller is responsible for closing ProcFileIterator (also auto-closable) after reading, otherwise
+ * deadlock will occur.
+ */
+public class KernelCpuProcStringReader {
+ private static final String TAG = KernelCpuProcStringReader.class.getSimpleName();
+ private static final int ERROR_THRESHOLD = 5;
+ // Data read within the last 500ms is considered fresh.
+ private static final long FRESHNESS = 500L;
+ private static final int MAX_BUFFER_SIZE = 1024 * 1024;
+
+ private static final String PROC_UID_FREQ_TIME = "/proc/uid_time_in_state";
+ private static final String PROC_UID_ACTIVE_TIME = "/proc/uid_concurrent_active_time";
+ private static final String PROC_UID_CLUSTER_TIME = "/proc/uid_concurrent_policy_time";
+
+ private static final KernelCpuProcStringReader FREQ_TIME_READER =
+ new KernelCpuProcStringReader(PROC_UID_FREQ_TIME);
+ private static final KernelCpuProcStringReader ACTIVE_TIME_READER =
+ new KernelCpuProcStringReader(PROC_UID_ACTIVE_TIME);
+ private static final KernelCpuProcStringReader CLUSTER_TIME_READER =
+ new KernelCpuProcStringReader(PROC_UID_CLUSTER_TIME);
+
+ public static KernelCpuProcStringReader getFreqTimeReaderInstance() {
+ return FREQ_TIME_READER;
+ }
+
+ public static KernelCpuProcStringReader getActiveTimeReaderInstance() {
+ return ACTIVE_TIME_READER;
+ }
+
+ public static KernelCpuProcStringReader getClusterTimeReaderInstance() {
+ return CLUSTER_TIME_READER;
+ }
+
+ private int mErrors = 0;
+ private final Path mFile;
+ private char[] mBuf;
+ private int mSize;
+ private long mLastReadTime = 0;
+ private final ReentrantReadWriteLock mLock = new ReentrantReadWriteLock();
+ private final ReentrantReadWriteLock.ReadLock mReadLock = mLock.readLock();
+ private final ReentrantReadWriteLock.WriteLock mWriteLock = mLock.writeLock();
+
+ public KernelCpuProcStringReader(String file) {
+ mFile = Paths.get(file);
+ }
+
+ /**
+ * @see #open(boolean) Default behavior is trying to use cache.
+ */
+ public ProcFileIterator open() {
+ return open(false);
+ }
+
+ /**
+ * Opens the proc file and buffers all its content, which can be traversed through a
+ * ProcFileIterator.
+ *
+ * This method will tolerate at most 5 errors. After that, it will always return null. This is
+ * to save resources and to prevent log spam.
+ *
+ * This method is thread-safe. It first checks if there are other threads holding read/write
+ * lock. If there are, it assumes data is fresh and reuses the data.
+ *
+ * A read lock is automatically acquired when a valid ProcFileIterator is returned. Caller MUST
+ * call {@link ProcFileIterator#close()} when it is done to release the lock.
+ *
+ * @param ignoreCache If true, ignores the cache and refreshes the data anyway.
+ * @return A {@link ProcFileIterator} to iterate through the file content, or null if there is
+ * error.
+ */
+ public ProcFileIterator open(boolean ignoreCache) {
+ if (mErrors >= ERROR_THRESHOLD) {
+ return null;
+ }
+
+ if (ignoreCache) {
+ mWriteLock.lock();
+ } else {
+ mReadLock.lock();
+ if (dataValid()) {
+ return new ProcFileIterator(mSize);
+ }
+ mReadLock.unlock();
+ mWriteLock.lock();
+ if (dataValid()) {
+ // Recheck because another thread might have written data just before we did.
+ mReadLock.lock();
+ mWriteLock.unlock();
+ return new ProcFileIterator(mSize);
+ }
+ }
+
+ // At this point, write lock is held and data is invalid.
+ int total = 0;
+ int curr;
+ mSize = 0;
+ final int oldMask = StrictMode.allowThreadDiskReadsMask();
+ try (BufferedReader r = Files.newBufferedReader(mFile)) {
+ if (mBuf == null) {
+ mBuf = new char[1024];
+ }
+ while ((curr = r.read(mBuf, total, mBuf.length - total)) >= 0) {
+ total += curr;
+ if (total == mBuf.length) {
+ // Hit the limit. Resize buffer.
+ if (mBuf.length == MAX_BUFFER_SIZE) {
+ mErrors++;
+ Slog.e(TAG, "Proc file too large: " + mFile);
+ return null;
+ }
+ mBuf = Arrays.copyOf(mBuf, Math.min(mBuf.length << 1, MAX_BUFFER_SIZE));
+ }
+ }
+ mSize = total;
+ mLastReadTime = SystemClock.elapsedRealtime();
+ // ReentrantReadWriteLock allows lock downgrading.
+ mReadLock.lock();
+ return new ProcFileIterator(total);
+ } catch (FileNotFoundException e) {
+ mErrors++;
+ Slog.w(TAG, "File not found. It's normal if not implemented: " + mFile);
+ } catch (IOException e) {
+ mErrors++;
+ Slog.e(TAG, "Error reading: " + mFile, e);
+ } finally {
+ StrictMode.setThreadPolicyMask(oldMask);
+ mWriteLock.unlock();
+ }
+ return null;
+ }
+
+ private boolean dataValid() {
+ return mSize > 0 && (SystemClock.elapsedRealtime() - mLastReadTime < FRESHNESS);
+ }
+
+ /**
+ * An autoCloseable iterator to iterate through a string proc file line by line. User must call
+ * close() when finish using to prevent deadlock.
+ */
+ public class ProcFileIterator implements AutoCloseable {
+ private final int mSize;
+ private int mPos;
+
+ public ProcFileIterator(int size) {
+ mSize = size;
+ }
+
+ /**
+ * Fetches the next line. Note that all subsequent return values share the same char[]
+ * under the hood.
+ *
+ * @return A {@link java.nio.CharBuffer} containing the next line without the new line
+ * symbol.
+ */
+ public CharBuffer nextLine() {
+ if (mPos >= mSize) {
+ return null;
+ }
+ int i = mPos;
+ // Move i to the next new line symbol, which is always '\n' in Android.
+ while (i < mSize && mBuf[i] != '\n') {
+ i++;
+ }
+ int start = mPos;
+ mPos = i + 1;
+ return CharBuffer.wrap(mBuf, start, i - start);
+ }
+
+ /**
+ * Fetches the next line, converts all numbers into long, and puts into the given long[].
+ * To avoid GC, caller should try to use the same array for all calls. All non-numeric
+ * chars are treated as delimiters. All numbers are non-negative.
+ *
+ * @param array An array to store the parsed numbers.
+ * @return The number of elements written to the given array. -1 if there is no more line.
+ */
+ public int nextLineAsArray(long[] array) {
+ CharBuffer buf = nextLine();
+ if (buf == null) {
+ return -1;
+ }
+ int count = 0;
+ long num = -1;
+ char c;
+
+ while (buf.remaining() > 0 && count < array.length) {
+ c = buf.get();
+ if (num < 0) {
+ if (isNumber(c)) {
+ num = c - '0';
+ }
+ } else {
+ if (isNumber(c)) {
+ num = num * 10 + c - '0';
+ } else {
+ array[count++] = num;
+ num = -1;
+ }
+ }
+ }
+ if (num >= 0) {
+ array[count++] = num;
+ }
+ return count;
+ }
+
+ /** Total size of the proc file in chars. */
+ public int size() {
+ return mSize;
+ }
+
+ /** Must call close at the end to release the read lock! Or use try-with-resources. */
+ public void close() {
+ mReadLock.unlock();
+ }
+
+ private boolean isNumber(char c) {
+ return c >= '0' && c <= '9';
+ }
+ }
+}
diff --git a/core/jni/android_hardware_SoundTrigger.cpp b/core/jni/android_hardware_SoundTrigger.cpp
index b417a56..98bc735 100644
--- a/core/jni/android_hardware_SoundTrigger.cpp
+++ b/core/jni/android_hardware_SoundTrigger.cpp
@@ -788,61 +788,18 @@
return status;
}
-static jobject
+static jint
android_hardware_SoundTrigger_getModelState(JNIEnv *env, jobject thiz,
jint jHandle)
{
+ jint status = SOUNDTRIGGER_STATUS_OK;
ALOGV("getModelState");
sp<SoundTrigger> module = getSoundTrigger(env, thiz);
if (module == NULL) {
- return NULL;
+ return SOUNDTRIGGER_STATUS_ERROR;
}
- sp<IMemory> memory;
- jint status = module->getModelState(jHandle, memory);
- if (status != 0 || memory == NULL) {
- ALOGW("getModelState, failed to get model state, status: %d", status);
- return NULL;
- }
- struct sound_trigger_recognition_event* event =
- (struct sound_trigger_recognition_event *)memory->pointer();
- if (event == NULL) {
- return NULL;
- }
- if (event->type != SOUND_MODEL_TYPE_GENERIC) {
- ALOGW("getModelState, unsupported model type: %d", event->type);
- return NULL;
- }
-
- jbyteArray jData = NULL;
- if (event->data_size) {
- jData = env->NewByteArray(event->data_size);
- jbyte *nData = env->GetByteArrayElements(jData, NULL);
- memcpy(nData, (char *)event + event->data_offset, event->data_size);
- env->ReleaseByteArrayElements(jData, nData, 0);
- }
-
- jobject jAudioFormat = NULL;
- if (event->trigger_in_data || event->capture_available) {
- jAudioFormat = env->NewObject(gAudioFormatClass,
- gAudioFormatCstor,
- audioFormatFromNative(event->audio_config.format),
- event->audio_config.sample_rate,
- inChannelMaskFromNative(event->audio_config.channel_mask));
-
- }
- jobject jEvent = NULL;
- jEvent = env->NewObject(gGenericRecognitionEventClass, gGenericRecognitionEventCstor,
- event->status, event->model, event->capture_available,
- event->capture_session, event->capture_delay_ms,
- event->capture_preamble_ms, event->trigger_in_data,
- jAudioFormat, jData);
- if (jAudioFormat != NULL) {
- env->DeleteLocalRef(jAudioFormat);
- }
- if (jData != NULL) {
- env->DeleteLocalRef(jData);
- }
- return jEvent;
+ status = module->getModelState(jHandle);
+ return status;
}
static const JNINativeMethod gMethods[] = {
@@ -875,7 +832,7 @@
"(I)I",
(void *)android_hardware_SoundTrigger_stopRecognition},
{"getModelState",
- "(I)Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;",
+ "(I)I",
(void *)android_hardware_SoundTrigger_getModelState},
};
diff --git a/core/proto/android/server/jobscheduler.proto b/core/proto/android/server/jobscheduler.proto
index 54f0934..e83a2bf 100644
--- a/core/proto/android/server/jobscheduler.proto
+++ b/core/proto/android/server/jobscheduler.proto
@@ -609,6 +609,17 @@
repeated Constraint unsatisfied_constraints = 9;
optional bool is_doze_whitelisted = 10;
+ message ImplicitConstraints {
+ // The device isn't Dozing or this job will be in the foreground. This
+ // implicit constraint must be satisfied for the job to run.
+ optional bool is_not_dozing = 1;
+ // The job is not restricted from running in the background (due to
+ // Battery Saver). This implicit constraint must be satisfied for the
+ // job to run.
+ optional bool is_not_restricted_in_bg = 2;
+ }
+ optional ImplicitConstraints implicit_constraints = 25;
+
enum TrackingController {
TRACKING_BATTERY = 0;
TRACKING_CONNECTIVITY = 1;
@@ -662,4 +673,6 @@
optional int64 last_failed_run_time = 23;
optional int64 internal_flags = 24;
+
+ // Next tag: 26
}
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 6a355ed..6ae183b 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -906,7 +906,7 @@
<!-- Control whether to lock day/night mode change from normal application. When it is
true, day / night mode change is only allowed to apps with MODIFY_DAY_NIGHT_MODE
permission. -->
- <bool name="config_lockDayNightMode">false</bool>
+ <bool name="config_lockDayNightMode">true</bool>
<!-- Control the default night mode to use when there is no other mode override set.
One of the following values (see UiModeManager.java):
diff --git a/core/res/res/values/ids.xml b/core/res/res/values/ids.xml
index 3183169..64e5bc0 100644
--- a/core/res/res/values/ids.xml
+++ b/core/res/res/values/ids.xml
@@ -121,6 +121,18 @@
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_SCROLL_RIGHT}. -->
<item type="id" name="accessibilityActionScrollRight" />
+ <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_PAGE_UP}. -->
+ <item type="id" name="accessibilityActionPageUp" />
+
+ <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_PAGE_DOWN}. -->
+ <item type="id" name="accessibilityActionPageDown" />
+
+ <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_PAGE_LEFT}. -->
+ <item type="id" name="accessibilityActionPageLeft" />
+
+ <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_PAGE_RIGHT}. -->
+ <item type="id" name="accessibilityActionPageRight" />
+
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_SET_PROGRESS}. -->
<item type="id" name="accessibilityActionSetProgress" />
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 15f29ce..86879c3 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2930,6 +2930,10 @@
</public-group>
<public-group type="id" first-id="0x01020046">
+ <public name="accessibilityActionPageUp" />
+ <public name="accessibilityActionPageDown" />
+ <public name="accessibilityActionPageLeft" />
+ <public name="accessibilityActionPageRight" />
</public-group>
<public-group type="string" first-id="0x0104001b">
diff --git a/core/tests/coretests/src/android/app/assist/AssistStructureTest.java b/core/tests/coretests/src/android/app/assist/AssistStructureTest.java
index fe51a39..689e683 100644
--- a/core/tests/coretests/src/android/app/assist/AssistStructureTest.java
+++ b/core/tests/coretests/src/android/app/assist/AssistStructureTest.java
@@ -133,8 +133,6 @@
private void assertStructureWithManySmallViews(AssistStructure structure, int expectedSize) {
int i = 0;
try {
- assertPackageName(structure);
-
assertThat(structure.getWindowNodeCount()).isEqualTo(1);
ViewNode rootView = structure.getWindowNodeAt(0).getRootViewNode();
@@ -188,8 +186,6 @@
private void assertStructureWithOneBigView(AssistStructure structure) {
try {
- assertPackageName(structure);
-
assertThat(structure.getWindowNodeCount()).isEqualTo(1);
ViewNode rootView = structure.getWindowNodeAt(0).getRootViewNode();
@@ -275,12 +271,6 @@
assertThat(hint.charAt(BIG_VIEW_SIZE - 1)).isEqualTo(BIG_VIEW_CHAR);
}
- private void assertPackageName(AssistStructure structure) {
- assertThat(structure.getActivityComponent()).isEqualTo(
- new ComponentName("com.android.frameworks.coretests",
- "android.app.assist.EmptyLayoutActivity"));
- }
-
private AssistStructure cloneThroughParcel(AssistStructure structure) {
Parcel parcel = Parcel.obtain();
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java
index b798042..3cfc644 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java
@@ -38,6 +38,7 @@
BatteryStatsUidTest.class,
BatteryStatsUserLifecycleTests.class,
KernelCpuProcReaderTest.class,
+ KernelCpuProcStringReaderTest.class,
KernelMemoryBandwidthStatsTest.class,
KernelSingleUidTimeReaderTest.class,
KernelUidCpuFreqTimeReaderTest.class,
diff --git a/core/tests/coretests/src/com/android/internal/os/KernelCpuProcStringReaderTest.java b/core/tests/coretests/src/com/android/internal/os/KernelCpuProcStringReaderTest.java
new file mode 100644
index 0000000..dae9eb5
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/os/KernelCpuProcStringReaderTest.java
@@ -0,0 +1,323 @@
+/*
+ * 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.os;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import android.content.Context;
+import android.os.FileUtils;
+import android.os.SystemClock;
+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 java.io.BufferedWriter;
+import java.io.File;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.IntStream;
+
+/**
+ * Test class for {@link KernelCpuProcStringReader}.
+ *
+ * $ atest FrameworksCoreTests:com.android.internal.os.KernelCpuProcStringReaderTest
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class KernelCpuProcStringReaderTest {
+ private File mRoot;
+ private File mTestDir;
+ private File mTestFile;
+ private Random mRand = new Random(12345);
+ private KernelCpuProcStringReader mReader;
+
+ private Context getContext() {
+ return InstrumentationRegistry.getContext();
+ }
+
+ @Before
+ public void setUp() {
+ mTestDir = getContext().getDir("test", Context.MODE_PRIVATE);
+ mRoot = getContext().getFilesDir();
+ mTestFile = new File(mTestDir, "test.file");
+ mReader = new KernelCpuProcStringReader(mTestFile.getAbsolutePath());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ FileUtils.deleteContents(mTestDir);
+ FileUtils.deleteContents(mRoot);
+ }
+
+
+ /**
+ * Tests that reading will return null if the file does not exist.
+ */
+ @Test
+ public void testReadInvalidFile() throws Exception {
+ assertEquals(null, mReader.open());
+ }
+
+ /**
+ * Tests that reading will always return null after 5 failures.
+ */
+ @Test
+ public void testReadErrorsLimit() throws Exception {
+ for (int i = 0; i < 3; i++) {
+ try (KernelCpuProcStringReader.ProcFileIterator iter = mReader.open()) {
+ assertNull(iter);
+ }
+ SystemClock.sleep(50);
+ }
+ final String data = "018n9x134yrm9sry01298yMF1X980Ym908u98weruwe983^(*)0N)&tu09281my\n";
+ try (BufferedWriter w = Files.newBufferedWriter(mTestFile.toPath())) {
+ w.write(data);
+ }
+ try (KernelCpuProcStringReader.ProcFileIterator iter = mReader.open()) {
+ assertEquals(data.length(), iter.size());
+ assertEquals(data, iter.nextLine().toString() + '\n');
+ }
+ assertTrue(mTestFile.delete());
+ for (int i = 0; i < 3; i++) {
+ try (KernelCpuProcStringReader.ProcFileIterator iter = mReader.open(true)) {
+ assertNull(iter);
+ }
+ SystemClock.sleep(50);
+ }
+ try (BufferedWriter w = Files.newBufferedWriter(mTestFile.toPath())) {
+ w.write(data);
+ }
+ try (KernelCpuProcStringReader.ProcFileIterator iter = mReader.open(true)) {
+ assertNull(iter);
+ }
+ }
+
+ /** Tests nextLine functionality. */
+ @Test
+ public void testReadLine() throws Exception {
+ final String data = "10103: 0 0 0 1 5 3 1 2 0 0 3 0 0 0 0 2 2 330 0 0 0 0 1 0 0 0 0 0 0 0"
+ + " 0 0 0 0 0 0 0 0 0 0 0 13\n"
+ + "50083: 0 0 0 29 0 13 0 4 5 0 0 0 0 0 1 0 0 15 0 0 0 0 0 0 1 0 0 0 0 1 0 1 7 0 "
+ + "0 1 1 1 0 2 0 221\n"
+ + "50227: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 196 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
+ + " 0 2 0 0 0 2 721\n"
+ + "10158: 0 0 0 0 19 3 9 1 0 7 4 3 3 3 1 3 10 893 2 0 3 0 0 0 0 0 0 0 0 1 0 2 0 0"
+ + " 1 2 10 0 0 0 1 58\n"
+ + "50138: 0 0 0 8 7 0 0 0 0 0 0 0 0 0 0 0 0 322 0 0 0 3 0 5 0 0 3 0 0 0 0 1 0 0 0"
+ + " 0 0 2 0 0 7 707\n";
+ try (BufferedWriter w = Files.newBufferedWriter(mTestFile.toPath())) {
+ w.write(data);
+ }
+ try (KernelCpuProcStringReader.ProcFileIterator iter = mReader.open()) {
+ assertEquals(
+ "10103: 0 0 0 1 5 3 1 2 0 0 3 0 0 0 0 2 2 330 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0"
+ + " 0 0 0 0 0 0 0 13",
+ iter.nextLine().toString());
+ assertEquals(
+ "50083: 0 0 0 29 0 13 0 4 5 0 0 0 0 0 1 0 0 15 0 0 0 0 0 0 1 0 0 0 0 1 0 1 7 "
+ + "0 0 1 1 1 0 2 0 221",
+ iter.nextLine().toString());
+ long[] actual = new long[43];
+ iter.nextLineAsArray(actual);
+ assertArrayEquals(
+ new long[]{50227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 721},
+ actual);
+ assertEquals(
+ "10158: 0 0 0 0 19 3 9 1 0 7 4 3 3 3 1 3 10 893 2 0 3 0 0 0 0 0 0 0 0 1 0 2 0"
+ + " 0 1 2 10 0 0 0 1 58",
+ iter.nextLine().toString());
+ assertEquals(
+ "50138: 0 0 0 8 7 0 0 0 0 0 0 0 0 0 0 0 0 322 0 0 0 3 0 5 0 0 3 0 0 0 0 1 0 0"
+ + " 0 0 0 2 0 0 7 707",
+ iter.nextLine().toString());
+ }
+ }
+
+ /** Stress tests read functionality. */
+ @Test
+ public void testMultipleRead() throws Exception {
+ for (int i = 0; i < 100; i++) {
+ final String data = getTestString(600, 150);
+ try (BufferedWriter w = Files.newBufferedWriter(mTestFile.toPath())) {
+ w.write(data);
+ }
+ String[] lines = data.split("\n");
+ try (KernelCpuProcStringReader.ProcFileIterator iter = mReader.open(true)) {
+ for (String line : lines) {
+ assertEquals(line, iter.nextLine().toString());
+ }
+ }
+ assertTrue(mTestFile.delete());
+ }
+ }
+
+ /** Tests nextLineToArray functionality. */
+ @Test
+ public void testReadLineToArray() throws Exception {
+ final long[][] data = getTestArray(800, 50);
+ try (BufferedWriter w = Files.newBufferedWriter(mTestFile.toPath())) {
+ w.write(arrayToString(data));
+ }
+ long[] actual = new long[50];
+ try (KernelCpuProcStringReader.ProcFileIterator iter = mReader.open()) {
+ for (long[] expected : data) {
+ assertEquals(50, iter.nextLineAsArray(actual));
+ assertArrayEquals(expected, actual);
+ }
+ }
+ }
+
+ /**
+ * Tests that reading a file over the limit (1MB) will return null.
+ */
+ @Test
+ public void testReadOverLimit() throws Exception {
+ final String data = getTestString(1, 1024 * 1024 + 1);
+ try (BufferedWriter w = Files.newBufferedWriter(mTestFile.toPath())) {
+ w.write(data);
+ }
+ try (KernelCpuProcStringReader.ProcFileIterator iter = mReader.open()) {
+ assertNull(iter);
+ }
+ }
+
+ /**
+ * Tests concurrent reading with 5 threads.
+ */
+ @Test
+ public void testConcurrent() throws Exception {
+ final String data = getTestString(200, 150);
+ final String data1 = getTestString(180, 120);
+ final String[] lines = data.split("\n");
+ final String[] lines1 = data1.split("\n");
+ final List<Throwable> errs = Collections.synchronizedList(new ArrayList<>());
+ try (BufferedWriter w = Files.newBufferedWriter(mTestFile.toPath())) {
+ w.write(data);
+ }
+ // An additional thread for modifying the file content.
+ ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(11);
+ final CountDownLatch ready = new CountDownLatch(10);
+ final CountDownLatch start = new CountDownLatch(1);
+ final CountDownLatch modify = new CountDownLatch(1);
+ final CountDownLatch done = new CountDownLatch(10);
+
+ // Schedules 5 threads to be executed together now, and 5 to be executed after file is
+ // modified.
+ for (int i = 0; i < 5; i++) {
+ threadPool.submit(() -> {
+ ready.countDown();
+ try {
+ start.await();
+ try (KernelCpuProcStringReader.ProcFileIterator iter = mReader.open()) {
+ for (String line : lines) {
+ assertEquals(line, iter.nextLine().toString());
+ }
+ }
+ } catch (Throwable e) {
+ errs.add(e);
+ } finally {
+ done.countDown();
+ }
+ });
+ threadPool.submit(() -> {
+ ready.countDown();
+ try {
+ start.await();
+ // Wait for file modification.
+ modify.await();
+ try (KernelCpuProcStringReader.ProcFileIterator iter = mReader.open()) {
+ for (String line : lines1) {
+ assertEquals(line, iter.nextLine().toString());
+ }
+ }
+ } catch (Throwable e) {
+ errs.add(e);
+ } finally {
+ done.countDown();
+ }
+ });
+ }
+
+ assertTrue("Prep timed out", ready.await(100, TimeUnit.MILLISECONDS));
+ start.countDown();
+
+ threadPool.schedule(() -> {
+ assertTrue(mTestFile.delete());
+ try (BufferedWriter w = Files.newBufferedWriter(mTestFile.toPath())) {
+ w.write(data1);
+ modify.countDown();
+ } catch (Throwable e) {
+ errs.add(e);
+ }
+ }, 600, TimeUnit.MILLISECONDS);
+
+ assertTrue("Execution timed out", done.await(3, TimeUnit.SECONDS));
+ threadPool.shutdownNow();
+
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ errs.forEach(e -> e.printStackTrace(pw));
+
+ assertTrue("All Exceptions:\n" + sw.toString(), errs.isEmpty());
+ }
+
+ private String getTestString(int lines, int charsPerLine) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < lines; i++) {
+ for (int j = 0; j < charsPerLine; j++) {
+ sb.append((char) (mRand.nextInt(93) + 32));
+ }
+ sb.append('\n');
+ }
+ return sb.toString();
+ }
+
+ private long[][] getTestArray(int lines, int numPerLine) {
+ return IntStream.range(0, lines).mapToObj(
+ (i) -> mRand.longs(numPerLine, 0, Long.MAX_VALUE).toArray()).toArray(long[][]::new);
+ }
+
+ private String arrayToString(long[][] array) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < array.length; i++) {
+ sb.append(array[i][0]).append(':');
+ for (int j = 1; j < array[0].length; j++) {
+ sb.append(' ').append(array[i][j]);
+ }
+ sb.append('\n');
+ }
+ return sb.toString();
+ }
+}
diff --git a/libs/androidfw/Android.bp b/libs/androidfw/Android.bp
index 92efb6b..98af3eb 100644
--- a/libs/androidfw/Android.bp
+++ b/libs/androidfw/Android.bp
@@ -59,8 +59,6 @@
"ZipFileRO.cpp",
"ZipUtils.cpp",
],
- // Allow implicit fallthroughs in Locale.cpp and ResourceTypes.cpp until they are fixed.
- cflags: ["-Wno-implicit-fallthrough"],
export_include_dirs: ["include"],
export_shared_lib_headers: ["libz"],
target: {
diff --git a/libs/androidfw/Locale.cpp b/libs/androidfw/Locale.cpp
index 2870066..3eedda8 100644
--- a/libs/androidfw/Locale.cpp
+++ b/libs/androidfw/Locale.cpp
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+#include "android-base/macros.h"
#include "androidfw/Locale.h"
#include "androidfw/Util.h"
@@ -162,6 +163,7 @@
set_script(subtags[1].c_str());
break;
}
+ FALLTHROUGH_INTENDED;
case 5:
case 6:
case 7:
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index 388548b..76db18d 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -29,6 +29,7 @@
#include <memory>
#include <type_traits>
+#include <android-base/macros.h>
#include <androidfw/ByteBucketArray.h>
#include <androidfw/ResourceTypes.h>
#include <androidfw/TypeWrappers.h>
@@ -3073,6 +3074,7 @@
}
break;
}
+ FALLTHROUGH_INTENDED;
case 5:
case 6:
case 7:
@@ -7002,7 +7004,7 @@
switch (value->dataType) {
case Res_value::TYPE_ATTRIBUTE:
resolvedType = Res_value::TYPE_ATTRIBUTE;
- // fallthrough
+ FALLTHROUGH_INTENDED;
case Res_value::TYPE_REFERENCE:
// Only resolve non-dynamic references and attributes if the package is loaded as a
// library or if a shared library is attempting to retrieve its own resource
@@ -7015,7 +7017,7 @@
break;
case Res_value::TYPE_DYNAMIC_ATTRIBUTE:
resolvedType = Res_value::TYPE_ATTRIBUTE;
- // fallthrough
+ FALLTHROUGH_INTENDED;
case Res_value::TYPE_DYNAMIC_REFERENCE:
break;
default:
diff --git a/media/java/android/media/MediaCas.java b/media/java/android/media/MediaCas.java
index 12352e7..ce631a433 100644
--- a/media/java/android/media/MediaCas.java
+++ b/media/java/android/media/MediaCas.java
@@ -104,7 +104,7 @@
@Override
protected IMediaCasService create() {
try {
- return IMediaCasService.getService();
+ return IMediaCasService.getService(true /*wait*/);
} catch (RemoteException e) {}
return null;
}
diff --git a/media/java/android/media/soundtrigger/SoundTriggerManager.java b/media/java/android/media/soundtrigger/SoundTriggerManager.java
index cf7bf19..fa69062 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerManager.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerManager.java
@@ -24,7 +24,6 @@
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.UnsupportedAppUsage;
-import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.hardware.soundtrigger.SoundTrigger;
@@ -367,15 +366,15 @@
}
/**
- * Synchronously get state of the indicated model. The model state is returned as
- * a recognition event, or null if the model is not loaded, or if this method
- * is not supported.
+ * Asynchronously get state of the indicated model. The model state is returned as
+ * a recognition event in the callback that was registered in the startRecognition
+ * method.
* @hide
*/
@RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER)
- public SoundTrigger.RecognitionEvent getModelState(UUID soundModelId) {
+ public int getModelState(UUID soundModelId) {
if (soundModelId == null) {
- return null;
+ return STATUS_ERROR;
}
try {
return mSoundTriggerService.getModelState(new ParcelUuid(soundModelId));
diff --git a/packages/PackageInstaller/res/values-pt-rPT/strings.xml b/packages/PackageInstaller/res/values-pt-rPT/strings.xml
index d45dc1c..e27fed5 100644
--- a/packages/PackageInstaller/res/values-pt-rPT/strings.xml
+++ b/packages/PackageInstaller/res/values-pt-rPT/strings.xml
@@ -41,7 +41,7 @@
<string name="unknown_apps_user_restriction_dlg_text" msgid="151020786933988344">"Este utilizador não pode instalar aplicações desconhecidas."</string>
<string name="install_apps_user_restriction_dlg_text" msgid="2154119597001074022">"Este utilizador não tem autorização para instalar aplicações."</string>
<string name="ok" msgid="7871959885003339302">"OK"</string>
- <string name="manage_applications" msgid="5400164782453975580">"Gerir aplic."</string>
+ <string name="manage_applications" msgid="5400164782453975580">"Gerir app"</string>
<string name="out_of_space_dlg_title" msgid="4156690013884649502">"Sem espaço"</string>
<string name="out_of_space_dlg_text" msgid="8727714096031856231">"Não foi possível instalar a aplicação <xliff:g id="APP_NAME">%1$s</xliff:g>. Liberte algum espaço e tente novamente."</string>
<string name="app_not_found_dlg_title" msgid="5107924008597470285">"Aplicação não encontrada"</string>
@@ -70,7 +70,7 @@
<string name="uninstall_failed_device_policy_manager_of_user" msgid="4813104025494168064">"Não é possível desinstalar a aplicação de administração de dispositivos ativa para <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
<string name="uninstall_all_blocked_profile_owner" msgid="2009393666026751501">"Esta aplicação é necessária para alguns utilizadores ou perfis e foi desinstalada para outros."</string>
<string name="uninstall_blocked_profile_owner" msgid="6373897407002404848">"O perfil necessita desta aplicação e não é possível desinstalá-la."</string>
- <string name="uninstall_blocked_device_owner" msgid="6724602931761073901">"Esta aplic. é exigida pelo administrador do disp. e não pode ser desinstalada."</string>
+ <string name="uninstall_blocked_device_owner" msgid="6724602931761073901">"Esta app é exigida pelo administrador do disp. e não pode ser desinstalada."</string>
<string name="manage_device_administrators" msgid="3092696419363842816">"Gerir aplicações de administração de dispositivos"</string>
<string name="manage_users" msgid="1243995386982560813">"Gerir utilizadores"</string>
<string name="uninstall_failed_msg" msgid="2176744834786696012">"Não foi possível desinstalar a aplicação <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml b/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml
index 9c29ff2..5f0322f 100644
--- a/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml
+++ b/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml
@@ -86,7 +86,7 @@
<string name="failed_notification_title_template" msgid="2256217208186530973">"Greška štampača <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="blocked_notification_title_template" msgid="1175435827331588646">"Štampač je blokirao <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancel" msgid="4373674107267141885">"Otkaži"</string>
- <string name="restart" msgid="2472034227037808749">"Ponovo pokreni"</string>
+ <string name="restart" msgid="2472034227037808749">"Restartuj"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Nema veze sa štampačem"</string>
<string name="reason_unknown" msgid="5507940196503246139">"nepoznato"</string>
<string name="print_service_security_warning_title" msgid="2160752291246775320">"Želite li da koristite <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
diff --git a/packages/PrintSpooler/res/values-sr/strings.xml b/packages/PrintSpooler/res/values-sr/strings.xml
index cb23c3c..c2f99d9 100644
--- a/packages/PrintSpooler/res/values-sr/strings.xml
+++ b/packages/PrintSpooler/res/values-sr/strings.xml
@@ -86,7 +86,7 @@
<string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка штампача <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="blocked_notification_title_template" msgid="1175435827331588646">"Штампач је блокирао <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancel" msgid="4373674107267141885">"Откажи"</string>
- <string name="restart" msgid="2472034227037808749">"Поново покрени"</string>
+ <string name="restart" msgid="2472034227037808749">"Рестартуј"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Нема везе са штампачем"</string>
<string name="reason_unknown" msgid="5507940196503246139">"непознато"</string>
<string name="print_service_security_warning_title" msgid="2160752291246775320">"Желите ли да користите <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 523361d..22d5d83 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -158,11 +158,11 @@
* These values are matched in string arrays -- changes must be kept in sync
*/
public static final int SECURITY_NONE = 0;
- public static final int SECURITY_OWE = 1;
- public static final int SECURITY_WEP = 2;
- public static final int SECURITY_PSK = 3;
- public static final int SECURITY_SAE = 4;
- public static final int SECURITY_EAP = 5;
+ public static final int SECURITY_WEP = 1;
+ public static final int SECURITY_PSK = 2;
+ public static final int SECURITY_EAP = 3;
+ public static final int SECURITY_OWE = 4;
+ public static final int SECURITY_SAE = 5;
public static final int SECURITY_EAP_SUITE_B = 6;
private static final int PSK_UNKNOWN = 0;
diff --git a/packages/Shell/OWNERS b/packages/Shell/OWNERS
new file mode 100644
index 0000000..75c0391
--- /dev/null
+++ b/packages/Shell/OWNERS
@@ -0,0 +1,10 @@
+svetoslavganov@google.com
+hackbod@google.com
+yamasani@google.com
+moltmann@google.com
+toddke@google.com
+jsharkey@google.com
+cbrubaker@google.com
+omakoto@google.com
+nandana@google.com
+felipeal@google.com
diff --git a/packages/SystemUI/legacy/recents/res/values-as/strings.xml b/packages/SystemUI/legacy/recents/res/values-as/strings.xml
new file mode 100644
index 0000000..c742dab
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-as/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-bn/strings.xml b/packages/SystemUI/legacy/recents/res/values-bn/strings.xml
new file mode 100644
index 0000000..b22672e
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-bn/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-es-rUS/strings.xml b/packages/SystemUI/legacy/recents/res/values-es-rUS/strings.xml
index 8bf3807..f212b02 100644
--- a/packages/SystemUI/legacy/recents/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/legacy/recents/res/values-es-rUS/strings.xml
@@ -21,9 +21,9 @@
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_item_dismissed" msgid="4816790842084268400">"Se descartó <xliff:g id="APP">%s</xliff:g>."</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_open_app_info" msgid="3406797323476801016">"Permite abrir la información de la 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>
diff --git a/packages/SystemUI/legacy/recents/res/values-hi/strings.xml b/packages/SystemUI/legacy/recents/res/values-hi/strings.xml
index c9ac2a0..3f19f33 100644
--- a/packages/SystemUI/legacy/recents/res/values-hi/strings.xml
+++ b/packages/SystemUI/legacy/recents/res/values-hi/strings.xml
@@ -37,7 +37,7 @@
<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>
+ <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-ml/strings.xml b/packages/SystemUI/legacy/recents/res/values-ml/strings.xml
new file mode 100644
index 0000000..6dd797e
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ml/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-ne/strings.xml b/packages/SystemUI/legacy/recents/res/values-ne/strings.xml
new file mode 100644
index 0000000..0113833
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ne/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-or/strings.xml b/packages/SystemUI/legacy/recents/res/values-or/strings.xml
new file mode 100644
index 0000000..7ffcc94
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-or/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-si/strings.xml b/packages/SystemUI/legacy/recents/res/values-si/strings.xml
new file mode 100644
index 0000000..cae8357
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-si/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-ta/strings.xml b/packages/SystemUI/legacy/recents/res/values-ta/strings.xml
new file mode 100644
index 0000000..91643fd
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-ta/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-te/strings.xml b/packages/SystemUI/legacy/recents/res/values-te/strings.xml
new file mode 100644
index 0000000..ea4e638
--- /dev/null
+++ b/packages/SystemUI/legacy/recents/res/values-te/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/plugin/src/com/android/systemui/plugins/statusbar/phone/NavGesture.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavGesture.java
index 814324e..99cc3a3 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavGesture.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavGesture.java
@@ -36,7 +36,7 @@
public boolean onInterceptTouchEvent(MotionEvent event);
- public void setBarState(boolean vertical, boolean isRtl);
+ public void setBarState(boolean isRtl, int navBarPosition);
public void onDraw(Canvas canvas);
diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml
index 50dc26b..f4a3794 100644
--- a/packages/SystemUI/res-keyguard/values-da/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-da/strings.xml
@@ -118,14 +118,14 @@
<string name="accessibility_ime_switch_button" msgid="2695096475319405612">"Skift indtastningsmetode"</string>
<string name="airplane_mode" msgid="3807209033737676010">"Flytilstand"</string>
<string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"Du skal angive et mønster, når du har genstartet enheden"</string>
- <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"Der skal indtastes en pinkode efter genstart af enheden"</string>
- <string name="kg_prompt_reason_restart_password" msgid="6984641181515902406">"Der skal indtastes en adgangskode efter genstart af enheden"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"Der skal angives en pinkode efter genstart af enheden"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="6984641181515902406">"Der skal angives en adgangskode efter genstart af enheden"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5304487696073914063">"Der kræves et mønster som ekstra beskyttelse"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"Der kræves en pinkode som ekstra beskyttelse"</string>
<string name="kg_prompt_reason_timeout_password" msgid="6563904839641583441">"Der kræves en adgangskode som ekstra beskyttelse"</string>
<string name="kg_prompt_reason_switch_profiles_pattern" msgid="3398054847288438444">"Du skal angive et mønster, når du skifter profil"</string>
- <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"Der skal indtastes en pinkode, når du skifter profil"</string>
- <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"Der skal indtastes en adgangskode, når du skifter profil"</string>
+ <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"Der skal angives en pinkode, når du skifter profil"</string>
+ <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"Der skal angives en adgangskode, når du skifter profil"</string>
<string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"Enheden er blevet låst af administratoren"</string>
<string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"Enheden blev låst manuelt"</string>
<plurals name="kg_prompt_reason_time_pattern" formatted="false" msgid="71299470072448533">
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 1835a56..de1ef3d 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Probeer weer skermkiekie neem"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Kan weens beperkte bergingspasie nie skermkiekie stoor nie"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Die program of jou organisasie laat nie toe dat skermkiekies geneem word nie"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Skermopname"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Deurlopende kennisgewing vir \'n skermopnamesessie"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Begin opname"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Neem stemopname op"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Wys tikke"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stop"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Laat wag"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Hervat"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Kanselleer"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Deel"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Vee uit"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Skermopname is gekanselleer"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Skermopname is gestoor, tik om te sien"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Skermopname is uitgevee"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Kon nie skermopname uitvee nie"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Kon nie toestemmings kry nie"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB-lêeroordrag-opsies"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Heg as \'n mediaspeler (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Heg as \'n kamera (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Kennisgewings"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Jy sal nie meer hierdie kennisgewings sien nie"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Hierdie kennisgewings sal geminimeer word"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Jy maak hierdie kennisgewings gewoonlik toe. \nMoet ons aanhou om hulle te wys?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Hou aan om hierdie kennisgewings te wys?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stop kennisgewings"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Hou aan wys"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimeer"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Wys laeprioriteit-kennisgewingikone"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Program is oopgemaak sonder dat dit geïnstalleer is."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Program is oopgemaak sonder dat dit geïnstalleer is. Tik om meer te wete te kom."</string>
<string name="app_info" msgid="6856026610594615344">"Programinligting"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Gaan na web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Gaan na blaaier"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiele data"</string>
<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">"Wi-Fi is af"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Instellings"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Het dit"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Stort SysUI-hoop"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> gebruik tans jou <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Programme gebruik tans jou <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Open app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Kanselleer"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Goed"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Stellings"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> gebruik die afgelope <xliff:g id="TIME">%3$d</xliff:g> min. jou <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> gebruik tans jou <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> gebruik tans jou <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ligging"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofoon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index dea4256..04f5d4c 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"ቅጽበታዊ ገጽ ዕይታን እንደገና ማንሳት ይሞክሩ"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"ባለው ውሱን የማከማቻ ቦታ ምክንያት ቅጽበታዊ ገጽ ዕይታን ማስቀመጥ አይችልም"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ቅጽበታዊ ገጽ እይታዎችን ማንሳት በመተግበሪያው ወይም በእርስዎ ድርጅት አይፈቀድም"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"የማያ ገጽ ቀረጻ"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"ለአንድ የማያ ገጽ ቀረጻ ክፍለ-ጊዜ በመካሄድ ያለ ማሳወቂያ"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"መቅረጽ ጀምር"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"ድምጽን ቅረጽ"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"መታ ማድረጎችን አሳይ"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"አቁም"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"ባለበት አቁም"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"ከቆመበት ቀጥል"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"ይቅር"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"አጋራ"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"ሰርዝ"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"የማያ ገጽ ቀረጻ ተሰርዟል"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"የማያ ገጽ ቀረጻ ተቀምጧል፣ ለመመልከት መታ ያድርጉ"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"የማያ ገጽ ቀረጻ ተሰርዟል"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"የማያ ገጽ ቀረጻን መሰረዝ ላይ ስህተት"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"ፈቃዶችን ማግኘት አልተቻለም"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"የUSB ፋይል ሰደዳ አማራጮች"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"እንደ ማህደረ አጫዋች (MTP) ሰካ"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"እንደ ካሜራ (PTP) ሰካ"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"አብዛኛውን ጊዜ እነዚህን ማሳወቂያዎች ያሰናብቷቸዋል። \nመታየታቸው ይቀጥል??"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"እነዚህን ማሳወቂያዎች ማሳየት ይቀጥሉ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"ማሳወቂያዎችን አስቁም"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"ማሳየትን ቀጥል"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"አሳንስ"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"የባትሪ ኃይል በሚሞላበት ጊዜ መቶኛ አሳይ (ነባሪ)"</item>
<item msgid="3327323682209964956">"ይህን አዶ አታሳይ"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"አነስተኛ ቅድሚያ ያላቸው የማሳወቂያ አዶዎችን አሳይ"</string>
<string name="other" msgid="4060683095962566764">"ሌላ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"የተከፈለ የማያ ገጽ ከፋይ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"የግራ ሙሉ ማያ ገጽ"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"መተግበሪያ ሳይጫን ተከፍቷል።"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"መተግበሪያ ሳይጫን ተከፍቷል። ተጨማሪ ለማወቅ መታ ያድርጉ።"</string>
<string name="app_info" msgid="6856026610594615344">"የመተግበሪያ መረጃ"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ወደ ድር ሂድ"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ወደ አሳሽ ሂድ"</string>
<string name="mobile_data" msgid="7094582042819250762">"የተንቀሳቃሽ ስልክ ውሂብ"</string>
<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">"Wi-Fi ጠፍቷል"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"ቅንብሮች"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"ገባኝ"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI Heap አራግፍ"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> የእርስዎን <xliff:g id="TYPES_LIST">%2$s</xliff:g> እየተጠቀመ ነው።"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"መተግበሪያዎች የእርስዎን <xliff:g id="TYPES_LIST">%s</xliff:g> እየተጠቀሙ ነው።"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"መተግበሪያን ክፈት"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"ይቅር"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"እሺ"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"ቅንብሮች"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> የእርስዎን <xliff:g id="TYPE">%2$s</xliff:g> ላለፉት <xliff:g id="TIME">%3$d</xliff:g> ደቂቃዎች እየተጠቀመ ነው"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> የእርስዎን <xliff:g id="TYPE">%2$s</xliff:g> እየተጠቀመ ነው"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> የእርስዎን <xliff:g id="TYPES_LIST">%2$s</xliff:g> እየተጠቀመ ነው"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"ካሜራ"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"አካባቢ"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"ማይክሮፎን"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index b3ac2cd..11144ee 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"جرّب أخذ لقطة الشاشة مرة أخرى"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"يتعذر حفظ لقطة الشاشة لأن مساحة التخزين المتاحة محدودة."</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"يحظر التطبيق أو تحظر مؤسستك التقاط لقطات شاشة"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"تسجيل الشاشة"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"إشعار مستمر لجلسة تسجيل شاشة"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"بدء التسجيل"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"تسجيل التعليق الصوتي"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"عرض النقرات"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"إيقاف"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"إيقاف مؤقت"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"استئناف"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"إلغاء"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"مشاركة"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"حذف"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"تمّ إلغاء تسجيل الشاشة."</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"تمّ حفظ تسجيل الشاشة، انقر لعرضه."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"تمّ حذف تسجيل الشاشة."</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"حدث خطأ أثناء حذف تسجيل الشاشة."</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"تعذّر الحصول على أذونات."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"خيارات نقل الملفات عبر USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"تثبيت كمشغل وسائط (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"تثبيت ككاميرا (PTP)"</string>
@@ -304,7 +320,7 @@
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"تم تشغيل Wi-Fi"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"لا تتوفر أي شبكة Wi-Fi"</string>
<string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"جارٍ التفعيل…"</string>
- <string name="quick_settings_cast_title" msgid="7709016546426454729">"إرسال"</string>
+ <string name="quick_settings_cast_title" msgid="7709016546426454729">"الإرسال"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"جارٍ الإرسال"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"جهاز لا يحمل اسمًا"</string>
<string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"جاهز للإرسال"</string>
@@ -346,7 +362,7 @@
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"حتى شروق الشمس"</string>
<string name="quick_settings_night_secondary_label_on_at" msgid="6256314040368487637">"تفعيل الإعداد في <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="quick_settings_secondary_label_until" msgid="2749196569462600150">"حتى <xliff:g id="TIME">%s</xliff:g>"</string>
- <string name="quick_settings_nfc_label" msgid="9012153754816969325">"الاتصال القريب المدى (NFC)"</string>
+ <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_swipe_up_onboarding" msgid="3824607135920170001">"مرّر سريعًا لأعلى لتبديل التطبيقات"</string>
@@ -594,15 +610,17 @@
<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>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"يتم عرض هذه الإشعارات بدون تنبيه صوتي"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"يتم عرض هذه الإشعارات مع تنبيه صوتي"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"أنت تتجاهل عادةً هذه الإشعارات. \nهل تريد الاستمرار في عرضها؟"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"هل تريد الاستمرار في تلقي هذه الإشعارات؟"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"إيقاف الإشعارات"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"الاستمرار في تلقّي الإشعارات"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"تصغير"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"عرض بدون تنبيه صوتي"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"العرض والتنبيه"</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>
@@ -745,8 +763,7 @@
<item msgid="2139628951880142927">"عرض النسبة المئوية عند الشحن (تلقائي)"</item>
<item msgid="3327323682209964956">"عدم عرض هذا الرمز"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"إظهار رموز الإشعارات ذات الأولوية المنخفضة"</string>
<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 +843,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"تمّ فتح التطبيق بدون تثبيته."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"تمّ فتح التطبيق بدون تثبيته. انقر لمعرفة مزيد من المعلومات."</string>
<string name="app_info" msgid="6856026610594615344">"معلومات عن التطبيق"</string>
- <string name="go_to_web" msgid="1106022723459948514">"الانتقال إلى الويب"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"الانتقال إلى المتصفح"</string>
<string name="mobile_data" msgid="7094582042819250762">"بيانات الجوّال"</string>
<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">"تم إيقاف شبكة Wi-Fi"</string>
@@ -858,4 +875,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"الإعدادات"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"حسنًا"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"تفريغ ذاكرة SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"التطبيق <xliff:g id="APP">%1$s</xliff:g> يستخدم <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"تستخدم التطبيقات <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"فتح التطبيق"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"إلغاء"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"موافق"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"الإعدادات"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"التطبيق <xliff:g id="APP">%1$s</xliff:g> يستخدم <xliff:g id="TYPE">%2$s</xliff:g> منذ <xliff:g id="TIME">%3$d</xliff:g> من الدقائق مضت."</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"التطبيقات <xliff:g id="APPS">%1$s</xliff:g> تستخدم <xliff:g id="TYPE">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"التطبيق <xliff:g id="APP">%1$s</xliff:g> يستخدم <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"الكاميرا"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"الموقع"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"الميكروفون"</string>
</resources>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 2574838..c60d2d4 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"স্ক্ৰীণশ্বট আকৌ ল\'বলৈ চেষ্টা কৰক"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"সঞ্চয়াগাৰত সীমিত খালী ঠাই থকাৰ বাবে স্ক্ৰীণশ্বট ছেভ কৰিব পৰা নগ\'ল"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"এপটোৱে বা আপোনাৰ প্ৰতিষ্ঠানে স্ক্ৰীণশ্বট ল\'বলৈ অনুমতি নিদিয়ে"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"স্ক্রীণ ৰেকৰ্ডিং"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"স্ক্রীণ ৰেকৰ্ডিং ছেশ্বন চলি থকা সময়ত পোৱা জাননী"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"ৰেকৰ্ডিং কৰা আৰম্ভ কৰক"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"পাৰ্শ্ব-ধ্বনি ৰেকৰ্ড কৰক"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"টিপা ঠাইসমূহ দেখুৱাওক"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"বন্ধ কৰক"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"প\'জ কৰক"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"ৰখোৱাৰ পৰা পুনৰ আৰম্ভ কৰক"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"বাতিল কৰক"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"শ্বেয়াৰ কৰক"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"মচক"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"স্ক্রীণ ৰেকৰ্ড কৰাটো বাতিল কৰা হ\'ল"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"স্ক্রীণ ৰেকৰ্ডিং ছেভ কৰা হ\'ল, চাবলৈ টিপক"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"স্ক্রীণ ৰেকৰ্ডিং মচা হ\'ল"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"স্ক্রীণ ৰেকৰ্ডিং মচি থাকোঁতে কিবা আসোঁৱাহ হ\'ল"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"অনুমতি পাব পৰা নগ\'ল"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"ইউএছবিৰে ফাইল স্থানান্তৰণৰ বিকল্পসমূহ"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"মিডিয়া প্লেয়াৰ (এমটিপি) হিচাপে সংলগ্ন কৰক"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"কেমেৰা (পিটিপি) হিচাপে সংলগ্ন কৰক"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"আপুনি সাধাৰণতে এই জাননীসমূহ অগ্ৰাহ্য কৰে। \nসেইবোৰ দেখুওৱাই থাকিব লাগিবনে?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"এই জাননীসমূহ দেখুওৱাই থাকিব লাগিবনে?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"জাননী বন্ধ কৰক"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"দেখুওৱাই থাকক"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"সৰু কৰক"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"চ্চাৰ্জ কৰি থকাৰ সময়ত শতাংশ দেখুৱাওক (ডিফ\'ল্ট)"</item>
<item msgid="3327323682209964956">"এই আইকনটো নেদেখুৱাব"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"কম গুৰুত্বপূৰ্ণ জাননীৰ আইকনসমূহ দেখুৱাওক"</string>
<string name="other" msgid="4060683095962566764">"অন্যান্য"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"স্প্লিট স্ক্ৰীণৰ বিভাজক"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"বাওঁফালৰ স্ক্ৰীণখন সম্পূৰ্ণ স্ক্ৰীণ কৰক"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"ইনষ্ট\'ল নকৰাকৈয়েই এপটো খোলা হৈছে।"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"ইনষ্ট\'ল নকৰাকৈয়েই এপটো খোলা হৈছে। অধিক জানিবলৈ টিপক।"</string>
<string name="app_info" msgid="6856026610594615344">"এপ্ সম্পৰ্কীয় তথ্য"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ৱেবলৈ যাওক"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ব্ৰাউজাৰলৈ যাওক"</string>
<string name="mobile_data" msgid="7094582042819250762">"ম\'বাইল ডেটা"</string>
<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">"ৱাই-ফাই অফ অৱস্থাত আছে"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"ছেটিংবোৰ"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"বুজি পালোঁ"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI হীপ ডাম্প কৰক"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ব্যৱহাৰ কৰি আছে।"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"এপ্লিকেশ্বনসমূহে আপোনাৰ <xliff:g id="TYPES_LIST">%s</xliff:g> ব্যৱহাৰ কৰি আছে।"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"এপ্ খোলক"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"বাতিল কৰক"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ঠিক আছে"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"ছেটিংসমূহ"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g>এ যোৱা <xliff:g id="TIME">%3$d</xliff:g> মিনিটৰ পৰা আপোনাৰ <xliff:g id="TYPE">%2$s</xliff:g> ব্যৱহাৰ কৰি আছে"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="TYPE">%2$s</xliff:g> ব্যৱহাৰ কৰি আছে"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ব্যৱহাৰ কৰি আছে"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"কেমেৰা"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"অৱস্থান"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"মাইক্ৰ\'ফ\'ন"</string>
</resources>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 58947da..b47d5ff 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Skrinşotu yenidən çəkin"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Yaddaş ehtiyatının az olması səbəbindən skrinşotu yadda saxlamaq olmur"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Skrinşot çəkməyə tətbiq və ya təşkilat tərəfindən icazə verilmir"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Ekranın Video Çəkimi"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Ekranın video çəkimi ərzində silinməyən bildiriş"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Ekranın Video Çəkimini Başladın"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Ekranın səsli video çəkimi"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Klikləmələri göstərin"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Dayandırın"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Dayandırın"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Davam edin"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Ləğv edin"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Paylaşın"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Silin"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Ekranın video çəkimi ləğv edildi"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Ekranın video çəkimi yadda saxlanıldı. Baxmaq üçün klikləyin"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Ekranın video çəkimi silindi"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Ekranın video çəkiminin silinməsi zamanı xəta baş verdi"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"İcazələr əldə edilmədi"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB fayl transferi seçimləri"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Media pleyer (MTP) kimi montaj edin"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Kamera kimi birləşdir (PTP)"</string>
@@ -582,14 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Bildirişlər"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Artıq bu bildirişləri görməyəcəkəsiniz"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Bu bildirişlər kiçildiləcək"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Bu bildirişlər səssiz görünəcək"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Bu bildirişlər Sizi xəbərdar edəcək"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Adətən bu bildirişləri rədd edirsiniz. \nBildirişlər göstərilsin?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Bu bildirişlər göstərilməyə davam edilsin?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Bildirişləri dayandırın"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Göstərməyə davam edin"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Kiçildin"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Səssiz göstərin"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Göstərin və xəbərdar edin"</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>
@@ -804,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Quraşdırılmadan açılan tətbiq."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Quraşdırılmadan açılan tətbiq. Ətraflı məlumat üçün klikləyin."</string>
<string name="app_info" msgid="6856026610594615344">"Tətbiq məlumatı"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Vebə keçin"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Brauzerə daxil edin"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobil data"</string>
<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">"Wi-Fi deaktivdir"</string>
@@ -836,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Ayarlar"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Anladım"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="TYPES_LIST">%2$s</xliff:g> tətbiqlərindən istifadə edir."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Tətbiqlər <xliff:g id="TYPES_LIST">%s</xliff:g> istifadə edir."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Tətbiqi açın"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Ləğv edin"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Oldu"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Ayarlar"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> son <xliff:g id="TIME">%3$d</xliff:g> dəqiqədir ki, <xliff:g id="TYPE">%2$s</xliff:g> tətbiqindən istifadə edir"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> <xliff:g id="TYPE">%2$s</xliff:g> tətbiqindən istifadə edir"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="TYPES_LIST">%2$s</xliff:g> tətbiqlərindən istifadə edir"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"məkan"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index b2bcda8..8538565 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Probajte da ponovo napravite snimak ekrana"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Čuvanje snimka ekrana nije uspelo zbog ograničenog memorijskog prostora"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Aplikacija ili organizacija ne dozvoljavaju pravljenje snimaka ekrana"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Snimanje ekrana"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Obaveštenje o sesiji snimanja ekrana je aktivno"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Započni snimanje"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Snimi prenos glasa"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Prikazuj dodire"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Zaustavi"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pauziraj"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Nastavi"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Otkaži"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Deli"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Izbriši"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Snimanje ekrana je otkazano"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Snimak ekrana je sačuvan, dodirnite da biste pregledali"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Snimak ekrana je izbrisan"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Došlo je do problema pri brisanju snimka ekrana"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Preuzimanje dozvola nije uspelo"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opcije USB prenosa datoteka"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Priključi kao medija plejer (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Priključi kao kameru (PTP)"</string>
@@ -585,15 +601,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Obaveštenja"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Više nećete videti ova obaveštenja"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Ova obaveštenja će se umanjiti"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Obično odbacujete ova obaveštenja. \nŽelite li da se i dalje prikazuju?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Želite li da se ova obaveštenja i dalje prikazuju?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Prestani da prikazuješ obaveštenja"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Nastavi da prikazuješ"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Umanji"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -730,8 +752,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Prikaži ikone obaveštenja niskog prioriteta"</string>
<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>
@@ -811,7 +832,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Aplikacija se otvorila bez instaliranja."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Aplikacija se otvorila bez instaliranja. Dodirnite da biste saznali više."</string>
<string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Idi na veb"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Idi na pregledač"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilni podaci"</string>
<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">"Wi-Fi je isključen"</string>
@@ -843,4 +864,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Podešavanja"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Važi"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Izdvoji SysUI mem."</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> koristi <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikacije koriste <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Otvori"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Otkaži"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Potvrdi"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Podešavanja"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> tokom nekoliko poslednjih minuta (<xliff:g id="TIME">%3$d</xliff:g>) koristi <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> koriste <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> koristi <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kameru"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"lokaciju"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index ac430ba..e83b9be 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Паспрабуйце зрабіць здымак экрана яшчэ раз"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Немагчыма захаваць здымак экрана, бо мала месца ў сховішчы"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Рабіць здымкі экрана не дазваляе праграма ці ваша арганізацыя"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Запіс экрана"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Бягучае апавяшчэнне для сеанса запісу экрана"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Пачаць запіс"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Закадравае агучванне запісу"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Паказваць дотыкі"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Спыніць"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Прыпыніць"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Узнавіць"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Скасаваць"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Абагуліць"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Выдаліць"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Запіс экрана скасаваны"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Запіс экрана захаваны. Націсніце, каб прагледзець"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Запіс экрана выдалены"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Памылка выдалення запісу экрана"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Не ўдалося атрымаць дазволы"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Парам. перадачы файлаў па USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Падлучыць як медыяпрайгравальнік (ССП)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Падлучыць як камеру (PTP)"</string>
@@ -590,15 +606,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Звычайна вы адхіляеце гэтыя апавяшчэнні. \nПаказваць іх?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Працягваць паказваць гэтыя апавяшчэнні?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Спыніць апавяшчэнні"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Працягваць паказваць"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Згарнуць"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -737,8 +759,7 @@
<item msgid="2139628951880142927">"Паказваць працэнты падчас зарадкі (стандартна)"</item>
<item msgid="3327323682209964956">"Не паказваць гэты значок"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Паказваць значкі апавяшчэнняў з нізкім прыярытэтам"</string>
<string name="other" msgid="4060683095962566764">"Іншае"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Раздзяляльнік падзеленага экрана"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Левы экран – поўнаэкранны рэжым"</string>
@@ -818,7 +839,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Праграма адкрыта без усталёўкі."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Праграма адкрыта без усталёўкі. Націсніце, каб даведацца больш."</string>
<string name="app_info" msgid="6856026610594615344">"Інфармацыя пра праграму"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Перайсці ў інтэрнэт"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Перайсці ў браўзер"</string>
<string name="mobile_data" msgid="7094582042819250762">"Маб. перадача даных"</string>
<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">"Wi-Fi выключаны"</string>
@@ -850,4 +871,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Налады"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Зразумела"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Дамп кучы SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"Праграма \"<xliff:g id="APP">%1$s</xliff:g>\" выкарыстоўвае: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Праграмы выкарыстоўваюць: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Адкрыць"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Скасаваць"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ОК"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Налады"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Праграма \"<xliff:g id="APP">%1$s</xliff:g>\" на працягу апошніх <xliff:g id="TIME">%3$d</xliff:g> хв. выкарыстоўвае: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Праграма \"<xliff:g id="APPS">%1$s</xliff:g>\" выкарыстоўвае: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"Праграма \"<xliff:g id="APP">%1$s</xliff:g>\" выкарыстоўвае: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"камера"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"геалакацыя"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"мікрафон"</string>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index c6bc414..bdc561a 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Опитайте да направите екранна снимка отново"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Екранната снимка не може да се запази поради ограничено място в хранилището"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Правенето на екранни снимки не е разрешено от приложението или организацията ви"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Записване на екрана"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Текущо известие за сесия за записване на екрана"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Стартиране на записа"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Записване на озвучаване"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Показване на докосванията"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Спиране"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Поставяне на пауза"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Възобновяване"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Отказ"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Споделяне"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Изтриване"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Записването на екрана е анулирано"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Записът на екрана е запазен. Докоснете, за да го видите"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Записът на екрана е изтрит"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"При изтриването на записа на екрана възникна грешка"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Извличането на разрешенията не бе успешно."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Опции за пренос на файлове чрез USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Свързване като медиен плейър (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Свързване като камера (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Обикновено отхвърляте тези известия. \nИскате ли да продължат да се показват?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Тези известия да продължат ли да се показват?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Спиране на известията"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Да продължат да се показват"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Намаляване"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"Процентът да се показва при зареждане (по подразбиране)"</item>
<item msgid="3327323682209964956">"Тази икона да не се показва"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Показване на иконите за известията с нисък приоритет"</string>
<string name="other" msgid="4060683095962566764">"Друго"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Разделител в режима за разделен екран"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Ляв екран: Показване на цял екран"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Приложението се отвори, без да бъде инсталирано."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Приложението се отвори, без да бъде инсталирано. Докоснете, за да научите повече."</string>
<string name="app_info" msgid="6856026610594615344">"Информация за приложението"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Към мрежата"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Към браузъра"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобилни данни"</string>
<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">"Функцията за Wi‑Fi е изключена"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Настройки"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Разбрах"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> използва <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Някои приложения използват <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Отваряне"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Отказ"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Настройки"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> използва <xliff:g id="TYPE">%2$s</xliff:g> през последните <xliff:g id="TIME">%3$d</xliff:g> минути"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> използват <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> използва <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"камерата"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"местополож."</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"микрофона"</string>
</resources>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 412f90cf..b22714d 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"আবার স্ক্রিনশট নেওয়ার চেষ্টা করুন"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"বেশি জায়গা নেই তাই স্ক্রিনশটটি সেভ করা যাবে না৷"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"এই অ্যাপ বা আপনার প্রতিষ্ঠান স্ক্রিনশট নেওয়ার অনুমতি দেয়নি"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"স্ক্রিন রেকর্ডিং"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"স্ক্রিন রেকর্ডিং সেশন চলার বিজ্ঞপ্তি"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"রেকর্ডিং শুরু করুন"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"ভয়েসওভার রেকর্ড করুন"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"ট্যাপগুলি দেখুন"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"বন্ধ করুন"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"পজ করুন"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"আবার চালু করুন"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"বাতিল করুন"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"শেয়ার করুন"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"মুছুন"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"স্ক্রিন রেকর্ডিং বাতিল করা হয়েছে"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"স্ক্রিন রেকর্ডিং সেভ করা হয়েছে, দেখতে ট্যাপ করুন"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"স্ক্রিন রেকর্ডিং মুছে ফেলা হয়েছে"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"স্ক্রিন রেকডিং মুছে ফেলার সময় সমস্যা হয়েছে"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"অনুমতি পাওয়া যায়নি"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ফাইল স্থানান্তরের বিকল্পগুলি"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"একটি মিডিয়া প্লেয়ার হিসেবে মাউন্ট করুন (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"একটি ক্যামেরা হিসেবে মাউন্ট করুন (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"এই বিজ্ঞপ্তিগুলিকে আপনি সাধারণত বাতিল করেন। \nসেগুলি দেখতে চান?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"এই বিজ্ঞপ্তিগুলি পরেও দেখে যেতে চান?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"বিজ্ঞপ্তি বন্ধ করুন"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"দেখতে থাকুন"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"ছোট করে দিন"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"চার্জ করার সময় শতাংশ দেখান (ডিফল্ট)"</item>
<item msgid="3327323682209964956">"এই আইকনটি দেখাবেন না"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"কম-গুরুত্বপূর্ণ বিজ্ঞপ্তির আইকন দেখুন"</string>
<string name="other" msgid="4060683095962566764">"অন্যান্য"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"বিভক্ত-স্ক্রিন বিভাজক"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"বাঁ দিকের অংশ নিয়ে পূর্ণ স্ক্রিন"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"অ্যাপটি ইনস্টল না করে চালু করা হয়েছে।"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"অ্যাপটি ইনস্টল না করে চালু করা হয়েছে। আরও জানতে ট্যাপ করুন।"</string>
<string name="app_info" msgid="6856026610594615344">"অ্যাপের তথ্য"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ওয়েবে যান"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ব্রাউজারে যান"</string>
<string name="mobile_data" msgid="7094582042819250762">"মোবাইল ডেটা"</string>
<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">"ওয়াই ফাই বন্ধ আছে"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"সেটিংস"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"বুঝেছি"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> আপনার <xliff:g id="TYPES_LIST">%2$s</xliff:g> ব্যবহার করছে।"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"অ্যাপ্লিকেশনগুলি আপনার <xliff:g id="TYPES_LIST">%s</xliff:g> ব্যবহার করছে।"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"অ্যাপ খুলুন"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"বাতিল করুন"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ঠিক আছে"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"সেটিংস"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> আপনার <xliff:g id="TYPE">%2$s</xliff:g> গত <xliff:g id="TIME">%3$d</xliff:g> মিনিট ধরে ব্যবহার করছে"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> আপনার <xliff:g id="TYPE">%2$s</xliff:g> ব্যবহার করছে"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> আপনার <xliff:g id="TYPES_LIST">%2$s</xliff:g> ব্যবহার করছে"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"ক্যামেরা"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"লোকেশন"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"মাইক্রোফোন"</string>
</resources>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 42616a6..bd48839 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Pokušajte ponovo snimiti ekran"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Snimak ekrana se ne može sačuvati zbog manjka prostora za pohranu"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Ova aplikacija ili vaša organizacija ne dozvoljavaju snimanje ekrana"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Snimanje ekrana"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Obavještenje za sesiju snimanja ekrana je u toku"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Započni snimanje"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Govor snimka"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Prikaži dodirivanja"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Zaustavi"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pauza"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Nastavi"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Otkaži"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Dijeli"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Izbriši"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Snimanje ekrana je otkazano"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Snimak ekrana je sačuvan. Dodirnite za prikaz."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Snimak ekrana je izbrisan"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Greška prilikom brisanja snimka ekrana"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Dobijanje odobrenja nije uspjelo"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opcije USB prijenosa fajlova"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Reproduciranje medijskih sadržaja (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Priključiti kao kameru (PTP)"</string>
@@ -587,14 +603,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Obavještenja"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Nećete više vidjeti ova obavještenja"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Ova obavještenja će se minimizirati"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Ove obavijesti prikazivat će se tiho"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Ove obavijesti imat će zvučni signal"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Obično odbacujete ova obavještenja. \nNastaviti ih prikazivati?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Nastaviti prikazivanje ovih obavještenja?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Zaustavi obavještenja"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Nastavi prikazivanje"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimiziraj"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Prikaži tiho"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Prikaži uz zvučni signal"</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>
@@ -731,7 +750,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="tuner_low_priority" msgid="1325884786608312358">"Prikaži ikone obavještenja 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>
@@ -811,7 +830,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Aplikacija je otvorena bez prethodne instalacije."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Aplikacija je otvorena bez prethodne instalacije. Dodirnite da saznate više."</string>
<string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Idite na internet"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Idi na preglednik"</string>
<string name="mobile_data" msgid="7094582042819250762">"Prijenos podataka"</string>
<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">"WiFi veza je isključena"</string>
@@ -843,4 +862,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Postavke"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Razumijem"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Izdvoji SysUI mem."</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> koristi <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikacije koriste <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Otvori"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Otkaži"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Uredu"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Postavke"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> koristi <xliff:g id="TYPE">%2$s</xliff:g> u vremenskom periodu od <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Aplikacije <xliff:g id="APPS">%1$s</xliff:g> koriste <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> koristi <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kameru"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"lokaciju"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index d7300f6..0e91142 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Prova de tornar a fer una captura de pantalla"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"La captura de pantalla no es pot desar perquè no hi ha prou espai d\'emmagatzematge"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"L\'aplicació o la teva organització no permeten fer captures de pantalla"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Gravació de la pantalla"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notificació en curs d\'una sessió de gravació de la pantalla"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Inicia la gravació"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Grava la veu en off"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Mostra els tocs"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Atura"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Posa en pausa"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Reprèn"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancel·la"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Comparteix"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Suprimeix"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"S\'ha cancel·lat la gravació de la pantalla"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"S\'ha desat la gravació de la pantalla; toca per mostrar"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"S\'ha suprimit la gravació de la pantalla"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"S\'ha produït un error en suprimir la gravació de la pantalla"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"No s\'han pogut obtenir els permisos"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opcions transf. fitxers USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Munta com a reproductor multimèdia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Munta com a càmera (PTP)"</string>
@@ -582,14 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificacions"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Ja no veuràs aquestes notificacions"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Aquestes notificacions es minimitzaran"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Normalment ignores aquestes notificacions. \nVols que es continuïn mostrant?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Vols continuar rebent aquestes notificacions?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Deixa d\'enviar notificacions"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continua rebent"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimitza"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -804,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"L\'aplicació s\'ha obert sense instal·lar-se."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"L\'aplicació s\'ha obert sense instal·lar-se. Toca per obtenir més informació."</string>
<string name="app_info" msgid="6856026610594615344">"Informació de l\'aplicació"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Ves al web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Ves al navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dades mòbils"</string>
<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">"La Wi-Fi està desactivada"</string>
@@ -836,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Configuració"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"D\'acord"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Aboca espai de SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> està fent servir el següent: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Algunes aplicacions estan fent servir el següent: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Obre l\'app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancel·la"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"D\'acord"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Configuració"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Durant els <xliff:g id="TIME">%3$d</xliff:g> últims minuts, <xliff:g id="APP">%1$s</xliff:g> ha estat fent servir el següent: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> estan fent servir el següent: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> està fent servir el següent: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"càmera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ubicació"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"micròfon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 0efbe7d..b246579 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Zkuste snímek pořídit znovu"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Snímek obrazovky kvůli nedostatku místa v úložišti nelze uložit"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Aplikace nebo organizace zakazuje pořizování snímků obrazovky"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Nahrávání obrazovky"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Trvalé oznámení o relaci nahrávání"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Spustit nahrávání"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Nahrávat komentář"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Zobrazovat klepnutí"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Zastavit"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pozastavit"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Obnovit"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Zrušit"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Sdílet"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Smazat"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Nahrávání obrazovky bylo zrušeno"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Záznam obrazovky byl uložen, zobrazíte jej klepnutím"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Záznam obrazovky byl smazán"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Při mazání záznamu obrazovky došlo k chybě"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Nepodařilo se načíst oprávnění"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti přenosu souborů pomocí rozhraní USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Připojit jako přehrávač médií (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Připojit jako fotoaparát (PTP)"</string>
@@ -588,15 +604,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Oznámení"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Tato oznámení již nebudete dostávat"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Tato oznámení budou minimalizována"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Tato oznámení obvykle odmítáte. \nChcete je nadále zobrazovat?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Mají se tato oznámení nadále zobrazovat?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Přestat zobrazovat oznámení"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Nadále zobrazovat"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimalizovat"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -735,8 +757,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Zobrazit ikony oznámení s nízkou prioritou"</string>
<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>
@@ -816,7 +837,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Aplikace byla otevřena bez instalace."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Aplikace byla otevřena bez instalace. Klepnutím zobrazíte další informace."</string>
<string name="app_info" msgid="6856026610594615344">"O aplikaci"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Přejít na web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Přejít do prohlížeče"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilní data"</string>
<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">"Wi-Fi je vypnuta"</string>
@@ -848,4 +869,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Nastavení"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Rozumím"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Výpis haldy SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"Aplikace <xliff:g id="APP">%1$s</xliff:g> využívá tato oprávnění: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikace využívají tato oprávnění: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Otevřít aplikaci"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Zrušit"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Nastavení"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Aplikace <xliff:g id="APP">%1$s</xliff:g> v posledních <xliff:g id="TIME">%3$d</xliff:g> min využívá toto oprávnění: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Aplikace <xliff:g id="APPS">%1$s</xliff:g> využívají toto oprávnění: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"Aplikace <xliff:g id="APP">%1$s</xliff:g> využívá tato oprávnění: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"fotoaparát"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"poloha"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index d470582..c30441b 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Prøv at tage et screenshot igen"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Screenshottet kan ikke gemmes, fordi der er begrænset lagerplads"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Appen eller din organisation tillader ikke, at du tager screenshots"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Skærmoptagelse"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Konstant underretning om skærmoptagelse"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Start optagelse"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Optag voiceover"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Vis tryk"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stop"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Sæt på pause"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Genoptag"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Annuller"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Del"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Slet"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Skærmoptagelsen er annulleret"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Skærmoptagelsen er gemt. Tryk for at se den."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Skærmoptagelsen er slettet"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Der opstod en fejl ved sletning af skærmoptagelsen"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Det lykkedes ikke et hente tilladelserne"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Muligheder for USB-filoverførsel"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Isæt som en medieafspiller (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Isæt som et kamera (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Underretninger"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Du får ikke længere vist disse underretninger"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Disse underretninger minimeres"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Du afviser som regel disse underretninger. \nVil du blive ved med at se dem?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Vil du fortsætte med at se disse underretninger?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stop underretninger"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Fortsæt med at vise underretninger"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimer"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Vis ikoner for underretninger med lav prioritet"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"En app blev åbnet uden at blive installeret."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"En app blev åbnet uden at blive installeret. Tryk for at få flere oplysninger."</string>
<string name="app_info" msgid="6856026610594615344">"Appinfo"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Gå til website"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Gå til en browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobildata"</string>
<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">"Wi-Fi er slået fra"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Indstillinger"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Gem SysUI-heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> anvender enhedens <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Apps anvender enhedens <xliff:g id="TYPES_LIST">%s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Åbn app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Luk"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Indstillinger"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> har anvendt enhedens <xliff:g id="TYPE">%2$s</xliff:g> i de sidste <xliff:g id="TIME">%3$d</xliff:g> min."</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> anvender enhedens <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> anvender enhedens <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"placering"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 7fcb02c..69af8f7 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Versuche noch einmal, den Screenshot zu erstellen"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Speichern des Screenshots aufgrund von zu wenig Speicher nicht möglich"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Die App oder deine Organisation lässt das Erstellen von Screenshots nicht zu"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Bildschirmaufzeichnung"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Fortlaufende Benachrichtigung für eine Bildschirmaufzeichnung"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Aufzeichnung starten"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Voice-over aufnehmen"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Fingertipps anzeigen"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Anhalten"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pausieren"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Fortsetzen"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Abbrechen"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Teilen"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Löschen"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Bildschirmaufzeichnung abgebrochen"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Bildschirmaufzeichnung gespeichert, zum Ansehen tippen"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Bildschirmaufzeichnung gelöscht"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Fehler beim Löschen der Bildschirmaufzeichnung"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Berechtigungen nicht erhalten"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB-Dateiübertragungsoptionen"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Als Medienplayer (MTP) bereitstellen"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Als Kamera (PTP) bereitstellen"</string>
@@ -586,14 +602,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Benachrichtigungen"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Du erhältst diese Benachrichtigungen nicht mehr"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Diese Benachrichtigungen werden minimiert"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Normalerweise schließt du diese Benachrichtigungen. \nSollen sie trotzdem weiter angezeigt werden?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Diese Benachrichtigungen weiterhin anzeigen?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Benachrichtigungen nicht mehr anzeigen"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Weiterhin anzeigen"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimieren"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -808,7 +831,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"App wurde geöffnet, ohne vorher installiert zu werden."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"App wurde geöffnet, ohne vorher installiert zu werden. Tippe, um weitere Informationen zu erhalten."</string>
<string name="app_info" msgid="6856026610594615344">"App-Informationen"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Web aufrufen"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Browser öffnen"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile Daten"</string>
<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>
@@ -840,4 +863,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Einstellungen"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> verwendet gerade Folgendes: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Apps verwenden gerade Folgendes: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"App öffnen"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Abbrechen"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Einstellungen"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> verwendet seit <xliff:g id="TIME">%3$d</xliff:g> Minuten Folgendes: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> verwenden gerade Folgendes: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> verwendet gerade Folgendes: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"Kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"Standort"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"Mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 12f0d532..67355ef 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Δοκιμάστε να κάνετε ξανά λήψη του στιγμιότυπου οθόνης"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Αδύνατη η αποθήκευση του στιγμιότυπου οθόνης λόγω περιορισμένου αποθηκευτικού χώρου"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Η λήψη στιγμιότυπων οθόνης δεν επιτρέπεται από την εφαρμογή ή τον οργανισμό σας"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Εγγραφή οθόνης"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Ειδοποίηση σε εξέλιξη για μια περίοδο λειτουργίας εγγραφής οθόνης"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Έναρξη εγγραφής"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Εγγραφή σπικάζ"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Εμφάνιση πατημάτων"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Διακοπή"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Παύση"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Συνέχιση"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Ακύρωση"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Κοινοποίηση"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Διαγραφή"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Η εγγραφή οθόνης ακυρώθηκε"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Η εγγραφή οθόνης αποθηκεύτηκε. Πατήστε για προβολή."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Η εγγραφή οθόνης διαγράφηκε"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Παρουσιάστηκε σφάλμα κατά τη διαγραφή της εγγραφής οθόνης"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Η λήψη αδειών απέτυχε"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Επιλογές μεταφοράς αρχείων μέσω USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Προσάρτηση ως μονάδας αναπαραγωγής μέσων (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Προσάρτηση ως κάμερας (PTP)"</string>
@@ -130,7 +146,7 @@
<string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Το Ethernet αποσυνδέθηκε."</string>
<string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Το Ethernet συνδέθηκε."</string>
<string name="accessibility_no_signal" msgid="7064645320782585167">"Δεν υπάρχει σήμα."</string>
- <string name="accessibility_not_connected" msgid="6395326276213402883">"Δεν έχει συνδεθεί."</string>
+ <string name="accessibility_not_connected" msgid="6395326276213402883">"Μη συνδεδεμένο"</string>
<string name="accessibility_zero_bars" msgid="3806060224467027887">"Μηδέν γραμμές."</string>
<string name="accessibility_one_bar" msgid="1685730113192081895">"Μία γραμμή."</string>
<string name="accessibility_two_bars" msgid="6437363648385206679">"Δύο γραμμές."</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Συνήθως απορρίπτετε αυτές τις ειδοποιήσεις. \nΝα εξακολουθήσουν να εμφανίζονται;"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Να συνεχίσουν να εμφανίζονται αυτές οι ειδοποιήσεις;"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Διακοπή ειδοποιήσεων"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Συνέχιση εμφάνισης"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Ελαχιστοποίηση"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"Να εμφανίζεται ποσοστό κατά τη φόρτιση (προεπιλογή)"</item>
<item msgid="3327323682209964956">"Να μην εμφανίζεται αυτό το εικονίδιο"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Εμφάνιση εικονιδίων ειδοποιήσεων χαμηλής προτεραιότητας"</string>
<string name="other" msgid="4060683095962566764">"Άλλο"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Διαχωριστικό οθόνης"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Αριστερή πλήρης οθόνη"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Η εφαρμογή άνοιξε χωρίς να έχει εγκατασταθεί."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Η εφαρμογή άνοιξε χωρίς να έχει εγκατασταθεί. Πατήστε για να μάθετε περισσότερα."</string>
<string name="app_info" msgid="6856026610594615344">"Πληροφορίες εφαρμογής"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Μετάβαση στον ιστό"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Μετάβ. σε πρόγ. περ."</string>
<string name="mobile_data" msgid="7094582042819250762">"Δεδομένα κινητής τηλεφωνίας"</string>
<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">"Το Wi-Fi είναι ανενεργό"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Ρυθμίσεις"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Το κατάλαβα"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Στιγμ. μνήμης SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"Η εφαρμογή <xliff:g id="APP">%1$s</xliff:g> χρησιμοποιεί τις λειτουργίες <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Οι εφαρμογές χρησιμοποιούν τις λειτουργίες <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Άν. εφαρμ."</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Ακύρωση"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ΟΚ"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Ρυθμίσεις"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Η εφαρμογή <xliff:g id="APP">%1$s</xliff:g> χρησιμοποιεί τη λειτουργία <xliff:g id="TYPE">%2$s</xliff:g> εδώ και <xliff:g id="TIME">%3$d</xliff:g> λ."</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Οι εφαρμογές <xliff:g id="APPS">%1$s</xliff:g> χρησιμοποιούν τη λειτουργία <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"Η εφαρμογή <xliff:g id="APP">%1$s</xliff:g> χρησιμοποιεί τις λειτουργίες <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"κάμερα"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"τοποθεσία"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"μικρόφωνο"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 82c91c7..26590be 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Try taking screenshot again"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Can\'t save screenshot due to limited storage space"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Screen Recording"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Ongoing notification for a screen record session"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Start Recording"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Record voiceover"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Show taps"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stop"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pause"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Resume"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancel"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Share"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Delete"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Screen recording cancelled"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Screen recording saved, tap to view"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Screen recording deleted"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Error deleting screen recording"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Failed to get permissions"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string>
@@ -582,14 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"You won\'t see these notifications anymore"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"These notifications will be minimised"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"These notifications will be shown silently"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"These notifications will alert you"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"You usually dismiss these notifications. \nKeep showing them?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Keep showing these notifications?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stop notifications"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Keep showing"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Show silently"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Show and alert"</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>
@@ -804,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"App opened without being installed."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"App opened without being installed. Tap to find out more."</string>
<string name="app_info" msgid="6856026610594615344">"App info"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Go to web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Go to browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
<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">"Wi-Fi is off"</string>
@@ -836,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Settings"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Applications are using your <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Open app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancel"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Settings"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPE">%2$s</xliff:g> for the last <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> are using your <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"camera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"location"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microphone"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index 361310e..2a59d07 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Try taking screenshot again"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Can\'t save screenshot due to limited storage space"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Screen Recording"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Ongoing notification for a screen record session"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Start Recording"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Record voiceover"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Show taps"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stop"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pause"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Resume"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancel"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Share"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Delete"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Screen recording cancelled"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Screen recording saved, tap to view"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Screen recording deleted"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Error deleting screen recording"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Failed to get permissions"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string>
@@ -582,14 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"You won\'t see these notifications anymore"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"These notifications will be minimised"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"These notifications will be shown silently"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"These notifications will alert you"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"You usually dismiss these notifications. \nKeep showing them?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Keep showing these notifications?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stop notifications"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Keep showing"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Show silently"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Show and alert"</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>
@@ -804,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"App opened without being installed."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"App opened without being installed. Tap to find out more."</string>
<string name="app_info" msgid="6856026610594615344">"App info"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Go to web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Go to browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
<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">"Wi-Fi is off"</string>
@@ -836,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Settings"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Applications are using your <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Open app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancel"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Settings"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPE">%2$s</xliff:g> for the last <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> are using your <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"camera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"location"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microphone"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 82c91c7..26590be 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Try taking screenshot again"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Can\'t save screenshot due to limited storage space"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Screen Recording"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Ongoing notification for a screen record session"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Start Recording"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Record voiceover"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Show taps"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stop"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pause"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Resume"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancel"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Share"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Delete"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Screen recording cancelled"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Screen recording saved, tap to view"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Screen recording deleted"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Error deleting screen recording"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Failed to get permissions"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string>
@@ -582,14 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"You won\'t see these notifications anymore"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"These notifications will be minimised"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"These notifications will be shown silently"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"These notifications will alert you"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"You usually dismiss these notifications. \nKeep showing them?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Keep showing these notifications?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stop notifications"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Keep showing"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Show silently"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Show and alert"</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>
@@ -804,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"App opened without being installed."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"App opened without being installed. Tap to find out more."</string>
<string name="app_info" msgid="6856026610594615344">"App info"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Go to web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Go to browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
<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">"Wi-Fi is off"</string>
@@ -836,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Settings"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Applications are using your <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Open app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancel"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Settings"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPE">%2$s</xliff:g> for the last <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> are using your <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"camera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"location"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microphone"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 82c91c7..26590be 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Try taking screenshot again"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Can\'t save screenshot due to limited storage space"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Screen Recording"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Ongoing notification for a screen record session"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Start Recording"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Record voiceover"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Show taps"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stop"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pause"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Resume"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancel"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Share"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Delete"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Screen recording cancelled"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Screen recording saved, tap to view"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Screen recording deleted"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Error deleting screen recording"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Failed to get permissions"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string>
@@ -582,14 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"You won\'t see these notifications anymore"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"These notifications will be minimised"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"These notifications will be shown silently"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"These notifications will alert you"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"You usually dismiss these notifications. \nKeep showing them?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Keep showing these notifications?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stop notifications"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Keep showing"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Show silently"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Show and alert"</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>
@@ -804,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"App opened without being installed."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"App opened without being installed. Tap to find out more."</string>
<string name="app_info" msgid="6856026610594615344">"App info"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Go to web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Go to browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
<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">"Wi-Fi is off"</string>
@@ -836,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Settings"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Applications are using your <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Open app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancel"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Settings"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPE">%2$s</xliff:g> for the last <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> are using your <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"camera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"location"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microphone"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 8005d79..35075a7 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Try taking screenshot again"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Can\'t save screenshot due to limited storage space"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Taking screenshots isn\'t allowed by the app or your organization"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Screen Recording"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Ongoing notification for a screen record session"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Start Recording"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Record voiceover"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Show taps"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stop"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pause"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Resume"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancel"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Share"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Delete"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Screen recording canceled"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Screen recording saved, tap to view"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Screen recording deleted"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Error deleting screen recording"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Failed to get permissions"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string>
@@ -582,14 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"You won\'t see these notifications anymore"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"These notifications will be minimized"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"These notifications will be shown silently"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"These notifications will alert you"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"You usually dismiss these notifications. \nKeep showing them?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Keep showing these notifications?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stop notifications"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Keep showing"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimize"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Show silently"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Show and alert"</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>
@@ -804,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"App opened without being installed."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"App opened without being installed. Tap to learn more."</string>
<string name="app_info" msgid="6856026610594615344">"App info"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Go to web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Go to browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
<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">"Wi-Fi is off"</string>
@@ -836,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Settings"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Got it"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Applications are using your <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Open app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancel"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Okay"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Settings"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPE">%2$s</xliff:g> for the last <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> are using your <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> is using your <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"camera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"location"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microphone"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 3f3187b..54362c3 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Vuelve a hacer una captura de pantalla"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"No se puede guardar la captura de pantalla debido a que no hay suficiente espacio de almacenamiento"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"La app o tu organización no permiten las capturas de pantalla"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Grabación de pantalla"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notificación constante para una sesión de grabación de pantalla"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Iniciar grabación"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Grabar voz superpuesta"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Mostrar toques"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Detener"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pausar"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Reanudar"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancelar"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Compartir"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Borrar"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Se canceló la grabación de pantalla"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Se guardó la grabación de pantalla; presiona para verla"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Se borró la grabación de pantalla"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Error al borrar la grabación de pantalla"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Error al obtener permisos"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opciones de transferencia de archivos por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Activar como reproductor de medios (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Activar como cámara (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificaciones"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Ya no verás estas notificaciones"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Se minimizarán estas notificaciones"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Sueles descartar estas notificaciones. \n¿Quieres seguir recibiéndolas?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"¿Quieres seguir viendo estas notificaciones?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Detener notificaciones"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Seguir viendo"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Mostrar íconos de notificaciones con prioridad baja"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"La app se abrió sin instalarse."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"La app se abrió sin instalarse. Presiona para obtener más información."</string>
<string name="app_info" msgid="6856026610594615344">"Información de apps"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Ir a la Web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Ir al navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Datos móviles"</string>
<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">"Wi-Fi desactivado"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Configuración"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Entendido"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Volcar pila de SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> está usando tu <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Hay aplicaciones que están usando tu <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Abrir app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancelar"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Aceptar"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Ajustes"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> lleva <xliff:g id="TIME">%3$d</xliff:g> min usando tu <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> están usando tu <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> está usando tu <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"cámara"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ubicación"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"micrófono"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 356ef45..7fb2b8e 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Vuelve a intentar hacer la captura de pantalla"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"No se puede guardar la captura de pantalla porque no hay espacio de almacenamiento suficiente"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"La aplicación o tu organización no permiten realizar capturas de pantalla"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Grabación de la pantalla"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notificación continua de una sesión de grabación de la pantalla"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Iniciar grabación"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Grabar voz en off"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Mostrar toques"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Detener"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pausar"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Seguir"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancelar"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Compartir"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Eliminar"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Se ha cancelado la grabación de la pantalla"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Se ha guardado la grabación de la pantalla; toca para verla"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Se ha eliminado la grabación de la pantalla"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"No se ha podido eliminar la grabación de la pantalla"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"No se han podido obtener los permisos"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opciones de transferencia de archivos por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Activar como reproductor de medios (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Activar como cámara (PTP)"</string>
@@ -582,14 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificaciones"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"No volverás a ver estas notificaciones"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Se minimizarán estas notificaciones"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Estas notificaciones se mostrarán de forma silenciosa"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Estas notificaciones te avisarán con sonido"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Normalmente ignoras estas notificaciones. \n¿Quieres seguir viéndolas?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"¿Quieres seguir viendo estas notificaciones?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Detener las notificaciones"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Seguir mostrando"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Mostrar en silencio"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Mostrar y sonar"</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>
@@ -804,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"La aplicación se ha abierto sin instalarse."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"La aplicación se ha abierto sin instalarse. Toca para obtener más información."</string>
<string name="app_info" msgid="6856026610594615344">"Información de la aplicación"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Ir a la Web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Ir al navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Datos móviles"</string>
<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">"Wi-Fi desactivado"</string>
@@ -836,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Ajustes"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Entendido"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Volcar pila de SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> está usando tu <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Hay aplicaciones que usan tu <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Abrir app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancelar"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Aceptar"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Ajustes"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> está usando tu <xliff:g id="TYPE">%2$s</xliff:g> desde hace <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> están usando tu <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> está usando tu <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"cámara"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ubicación"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"micrófono"</string>
</resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index f125b84..65a42a6 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Proovige ekraanipilt uuesti jäädvustada"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Piiratud salvestusruumi tõttu ei saa ekraanipilti salvestada"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Rakendus või teie organisatsioon ei luba ekraanipilte jäädvustada"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Ekraanikuva salvestamine"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Pooleli märguanne ekraanikuva salvestamise seansi puhul"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Alusta salvestamist"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Salvesta hääl"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Kuva puudutused"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Peata"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Peata"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Jätka"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Tühista"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Jaga"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Kustuta"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Ekraanikuva salvestamine on tühistatud"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Ekraanikuva salvestis on salvestatud, puudutage vaatamiseks"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Ekraanikuva salvestis on kustutatud"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Viga ekraanikuva salvestise kustutamisel"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Lubade hankimine ebaõnnestus"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB-failiedastuse valikud"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Paigalda meediumimängijana (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Paigalda kaamerana (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Märguanded"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Te ei näe enam neid märguandeid"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Need märguanded minimeeritakse"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Tavaliselt loobute nendest märguannetest. \nKas soovite neid jätkuvalt näidata?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Kas soovite nende märguannete kuvamist jätkata?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Peata märguanded"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Jätka kuvamist"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimeeri"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Kuva madala prioriteediga märguande ikoonid"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Rakendus avati installimata."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Rakendus avati installimata. Lisateabe saamiseks puudutage."</string>
<string name="app_info" msgid="6856026610594615344">"Rakenduse teave"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Avage veebis"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Ava brauser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiilne andmeside"</string>
<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">"WiFi on välja lülitatud"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Seaded"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Selge"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> kasutab järgmisi: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Rakendused kasutavad järgmisi: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Ava rakendus"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Tühista"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Seaded"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> on viimased <xliff:g id="TIME">%3$d</xliff:g> minutit kasutanud järgmist: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> kasutavad järgmist: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> kasutab järgmisi: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kaamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"asukoht"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 6e3f094..97ba5b9 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Saiatu berriro pantaila-argazkia ateratzen"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Ezin da gorde pantaila-argazkia ez delako gelditzen tokirik"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Aplikazioak edo erakundeak ez du onartzen pantaila-argazkiak ateratzea"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Pantailaren grabaketa"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Pantailaren grabaketa-saioaren jakinarazpen jarraitua"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Hasi grabatzen"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Grabatu off ahotsa"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Erakutsi sakatzeak"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Utzi"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pausatu"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Berrekin"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Utzi"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Partekatu"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Ezabatu"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Utzi zaio pantaila grabatzeari"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Gorde da pantailaren grabaketa; sakatu ikusteko"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Ezabatu da pantailaren grabaketa"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Errore bat gertatu da pantailaren grabaketa ezabatzean"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Ezin izan dira lortu baimenak"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB fitxategiak transferitzeko aukerak"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Muntatu multimedia-erreproduzigailu gisa (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Muntatu kamera gisa (PTP)"</string>
@@ -582,14 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Jakinarazpenak"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Aurrerantzean ez duzu ikusiko horrelako jakinarazpenik"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Minimizatu egingo dira jakinarazpen hauek"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Jakinarazpen hauek soinurik egin gabe erakutsiko dira"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Jakinarazpen hauek soinu bidezko alerta bidez erakutsiko dira"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Baztertu egin ohi dituzu jakinarazpen hauek. \nHaiek erakusten jarraitzea nahi duzu?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Jakinarazpenak erakusten jarraitzea nahi duzu?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Blokeatu jakinarazpenak"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Jarraitu erakusten"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizatu"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Erakutsi soinurik egin gabepen"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Erakutsi eta egin soinua"</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>
@@ -804,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Ezer instalatu gabe ireki da aplikazioa."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Ezer instalatu gabe ireki da aplikazioa. Sakatu informazio gehiago lortzeko."</string>
<string name="app_info" msgid="6856026610594615344">"Aplikazioari buruzko informazioa"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Joan sarera"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Joan arakatzailera"</string>
<string name="mobile_data" msgid="7094582042819250762">"Datu-konexioa"</string>
<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">"Wi-Fi konexioa desaktibatuta dago"</string>
@@ -836,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Ezarpenak"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Ados"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="TYPES_LIST">%2$s</xliff:g> erabiltzen ari da."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikazio batzuk <xliff:g id="TYPES_LIST">%s</xliff:g> erabiltzen ari dira."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Ireki aplikazioa"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Utzi"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Ados"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Ezarpenak"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> aplikazioak <xliff:g id="TYPE">%2$s</xliff:g> erabili du azken <xliff:g id="TIME">%3$d</xliff:g> minutuetan"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> <xliff:g id="TYPE">%2$s</xliff:g> erabiltzen ari dira"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="TYPES_LIST">%2$s</xliff:g> erabiltzen ari da"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"kokapena"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofonoa"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index e785f76..049513a 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"دوباره عکس صفحهنمایش بگیرید"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"به دلیل محدود بودن فضای ذخیرهسازی نمیتوان عکس صفحهنمایش را ذخیره کرد"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"برنامه یا سازمان شما اجازه نمیدهند عکس صفحهنمایش بگیرید."</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"ضبط صفحهنمایش"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"اعلان درحال انجام برای جلسه ضبط صفحهنمایش"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"شروع ضبط"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"ضبط صدا روی تصویر"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"نمایش ضربهها"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"توقف"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"مکث"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"ازسرگیری"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"لغو"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"همرسانی"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"حذف"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"ضبط صفحهنمایش لغو شد"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"ضبط صفحهنمایش ذخیره شد، برای مشاهده ضربه بزنید"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"فایل ضبط صفحهنمایش حذف شد"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"خطا در حذف فایل ضبط صفحهنمایش"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"مجوزها دریافت نشدند"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"گزینههای انتقال فایل USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"نصب بهعنوان دستگاه پخش رسانه (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"تصب بهعنوان دوربین (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"معمولاً این اعلانها را رد میکنید. \nهمچنان نشان داده شود؟"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"نمایش این اعلانها ادامه یابد؟"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"توقف اعلانها"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"همچنان نشان داده شود"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"کوچک کردن"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"هنگام شارژ شدن درصد نشان داده شود (پیشفرض)"</item>
<item msgid="3327323682209964956">"این نماد نشان داده نشود"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"نمایش نمادهای اعلان کماهمیت"</string>
<string name="other" msgid="4060683095962566764">"موارد دیگر"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"تقسیمکننده صفحه"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"تمامصفحه چپ"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"برنامه بدون نصب شدن باز شد."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"برنامه بدون نصب شدن باز شد. برای اطلاعات بیشتر ضربه بزنید."</string>
<string name="app_info" msgid="6856026610594615344">"اطلاعات برنامه"</string>
- <string name="go_to_web" msgid="1106022723459948514">"رفتن به وب"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"رفتن به مرورگر"</string>
<string name="mobile_data" msgid="7094582042819250762">"داده تلفن همراه"</string>
<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">"Wi-Fi خاموش است"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"تنظیمات"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"متوجه شدم"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> از <xliff:g id="TYPES_LIST">%2$s</xliff:g> شما استفاده میکند."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"برنامهها از <xliff:g id="TYPES_LIST">%s</xliff:g> شما استفاده میکنند."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"باز کردن برنامه"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"لغو"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"خوب"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"تنظیمات"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> از <xliff:g id="TYPE">%2$s</xliff:g> در <xliff:g id="TIME">%3$d</xliff:g> دقیقه آخر استفاده میکند"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> از <xliff:g id="TYPE">%2$s</xliff:g> شما استفاده میکند"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> از <xliff:g id="TYPES_LIST">%2$s</xliff:g> شما استفاده میکند"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"دوربین"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"مکان"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"میکروفون"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index af35a85..277ef5d 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Yritä ottaa kuvakaappaus uudelleen."</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Kuvakaappauksen tallennus epäonnistui, sillä tallennustilaa ei ole riittävästi"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Sovellus tai organisaatio ei salli kuvakaappauksien tallentamista."</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Näytön tallennus"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Pysyvä ilmoitus näytön tallentamisesta"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Aloita tallennus"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Äänitä taustaselostus"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Näytä napautukset"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Lopeta"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Keskeytä"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Jatka"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Peruuta"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Jaa"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Poista"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Näytön tallennus peruutettu"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Näyttötallenne tallennettu, katso napauttamalla"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Näyttötallenne poistettu"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Virhe poistettaessa näyttötallennetta"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Käyttöoikeuksien hakeminen epäonnistui."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB-tiedostonsiirtoasetukset"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Käytä mediasoittimena (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Käytä kamerana (PTP)"</string>
@@ -582,14 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Ilmoitukset"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Et näe näitä ilmoituksia enää"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Nämä ilmoitukset pienennetään"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Hylkäät yleensä nämä ilmoitukset. \nHaluatko, että niitä näytetään myös jatkossa?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Jatketaanko näiden ilmoitusten näyttämistä?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Lopeta ilmoitukset"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Jatka näyttämistä"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Pienennä"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -804,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Sovellus avattiin ilman asennusta."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Sovellus avattiin ilman asennusta. Katso lisätietoja napauttamalla."</string>
<string name="app_info" msgid="6856026610594615344">"Sovelluksen tiedot"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Avaa verkossa"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Siirry selaimeen"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiilitiedonsiirto"</string>
<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">"Wi-Fi on pois käytöstä"</string>
@@ -836,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Asetukset"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Selvä"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Luo SysUI-keon vedos"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> käyttää ominaisuuksia (<xliff:g id="TYPES_LIST">%2$s</xliff:g>)."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"<xliff:g id="TYPES_LIST">%s</xliff:g> ovat sovellusten käytössä."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Avaa"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Peruuta"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Asetukset"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> on käyttänyt ominaisuutta (<xliff:g id="TYPE">%2$s</xliff:g>) <xliff:g id="TIME">%3$d</xliff:g> minuutin ajan."</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> käyttävät ominaisuutta (<xliff:g id="TYPE">%2$s</xliff:g>)."</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> käyttää ominaisuuksia (<xliff:g id="TYPES_LIST">%2$s</xliff:g>)."</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"sijainti"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofoni"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 06f178a..905af5b 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Essayez de faire une autre capture d\'écran"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Impossible d\'enregistrer la capture d\'écran, car l\'espace de stockage est limité"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"L\'application ou votre organisation n\'autorise pas les saisies d\'écran"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Enregistrement d\'écran"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notification en cours pour une session d\'enregistrement d\'écran"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Commencer l\'enregistrement"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Enregistrer la voix hors champ"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Afficher les éléments sélectionnés"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Arrêter"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pause"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Reprendre"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Annuler"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Partager"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Supprimer"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"L\'enregistrement d\'écran a été annulé"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"L\'enregistrement d\'écran est terminé. Touchez ici pour l\'afficher."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"L\'enregistrement d\'écran a été supprimé"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Une erreur s\'est produite lors de la suppression de l\'enregistrement d\'écran"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Impossible d\'obtenir les autorisations"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Options transfert fichiers USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Installer comme un lecteur multimédia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Installer comme un appareil photo (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Vous ne verrez plus ces notifications"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Ces notifications seront réduites"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Vous ignorez habituellement ces notifications. \nSouhaitez-vous continuer à les afficher?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Continuer à afficher ces notifications?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Arrêter les notifications"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuer à afficher"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Réduire"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Afficher les icônes de notification de faible priorité"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Application ouverte sans avoir été installée."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Application ouverte sans avoir été installée. Touchez ici pour en savoir plus."</string>
<string name="app_info" msgid="6856026610594615344">"Détails de l\'application"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Accéder au Web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Ouvrir le navigateur"</string>
<string name="mobile_data" msgid="7094582042819250762">"Données cellulaires"</string>
<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">"Le Wi-Fi est désactivé"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Paramètres"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Capturer mémoire SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> utilise votre <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Des applications utilisent votre <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Ouv. appli"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Annuler"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Paramètres"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> utilise votre <xliff:g id="TYPE">%2$s</xliff:g> depuis <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> utilisent votre <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> utilise votre <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"appareil photo"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"position"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microphone"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 7157cb5..88e5f6cd 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Essayez de nouveau de faire une capture d\'écran"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Impossible d\'enregistrer la capture d\'écran, car l\'espace de stockage est limité"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Les captures d\'écran ne sont pas autorisées par l\'application ni par votre organisation"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Enregistrement de l\'écran"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notification en cours pour une session d\'enregistrement de l\'écran"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Démarrer l\'enregistrement"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Enregistrer une voix off"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Afficher les éléments sélectionnés"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Arrêter"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pause"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Reprendre"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Annuler"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Partager"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Supprimer"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Enregistrement de l\'écran annulé"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Enregistrement de l\'écran enregistré. Appuyez pour afficher"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Enregistrement de l\'écran supprimé"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Erreur lors de la suppression de l\'enregistrement de l\'écran"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Échec d\'obtention des autorisations"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Options transfert fichiers USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Installer en tant que lecteur multimédia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Installer en tant qu\'appareil photo (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Vous ne recevrez plus ces notifications"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Ces notifications seront réduites"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Vous ignorez généralement ces notifications. \nSouhaitez-vous continuer de les recevoir ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Continuer d\'afficher ces notifications ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Arrêter les notifications"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuer d\'afficher les notifications"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Réduire"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Afficher les icônes de notification à faible priorité"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Vous pouvez ouvrir cette application sans l\'installer."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Vous pouvez ouvrir cette application sans l\'installer. Appuyez pour en savoir plus."</string>
<string name="app_info" msgid="6856026610594615344">"Infos sur l\'appli"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Accéder au site Web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Accéder au navigateur"</string>
<string name="mobile_data" msgid="7094582042819250762">"Données mobiles"</string>
<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">"Wi-Fi désactivé"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Paramètres"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Copier mémoire SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> utilise votre <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Des applications utilisent votre <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Ouvrir appli"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Annuler"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Paramètres"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> utilise votre <xliff:g id="TYPE">%2$s</xliff:g> depuis <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> utilisent votre <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> utilise votre <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"appareil photo"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"position"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"micro"</string>
</resources>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index f17243e..999c1ca 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Volve tentar crear unha captura de pantalla"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Non se puido gardar a captura de pantalla porque o espazo de almacenamento é limitado"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"A aplicación ou a túa organización non permite realizar capturas de pantalla"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Gravación de pantalla"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notificación en curso sobre unha sesión de gravación de pantalla"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Iniciar gravación"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Gravar voz en off"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Mostrar toques"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Deter"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Poñer en pausa"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Retomar"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancelar"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Compartir"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Eliminar"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Cancelouse a gravación de pantalla"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Gardouse a gravación de pantalla; toca esta notificación para visualizala"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Eliminouse a gravación de pantalla"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Produciuse un erro ao eliminar a gravación de pantalla"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Produciuse un erro ao obter os permisos"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opcións de transferencia USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Inserir como reprodutor multimedia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Inserir como cámara (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificacións"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Deixarás de ver estas notificacións"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Minimizaranse estas notificacións"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Ignoras estas notificacións a miúdo. \nQueres seguir recibíndoas?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Queres seguir mostrando estas notificacións?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Deter notificacións"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuar mostrando notificacións"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Mostrar iconas das notificacións que teñan baixa prioridade"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Abriuse a aplicación sen ter que instalala."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Abriuse a aplicación sen ter que instalala. Tocar para obter máis información."</string>
<string name="app_info" msgid="6856026610594615344">"Info. da aplicación"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Acceder á web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Ir ao navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Datos móbiles"</string>
<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">"A wifi está desactivada"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Configuración"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"De acordo"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Baleirar mont. SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> está utilizando <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Hai aplicacións que están utilizando <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Abrir app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancelar"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Aceptar"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Axustes"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> está utilizando <xliff:g id="TYPE">%2$s</xliff:g> desde hai <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> están utilizando <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> está utilizando <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"a cámara"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"a localiz."</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"o micrófono"</string>
</resources>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 1d55555..ecaa321 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"ફરીથી સ્ક્રીનશૉટ લેવાનો પ્રયાસ કરો"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"મર્યાદિત સ્ટોરેજ સ્પેસને કારણે સ્ક્રીનશૉટ સાચવી શકાતો નથી"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ઍપ્લિકેશન કે તમારી સંસ્થા દ્વારા સ્ક્રીનશૉટ લેવાની મંજૂરી નથી"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"સ્ક્રીન રેકોર્ડિંગ"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"સ્ક્રીન રેકોર્ડિંગ સત્ર માટે ચાલુ નોટિફિકેશન"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"રેકોર્ડિંગ શરૂ કરો"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"વૉઇસઓવર રેકોર્ડ કરો"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"ટૅપ કર્યાની સંખ્યા બતાવો"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"રોકો"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"થોભાવો"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"ફરી શરૂ કરો"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"રદ કરો"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"શેર કરો"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"ડિલીટ કરો"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"સ્ક્રીન રેકોર્ડિંગ રદ કર્યું"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"સ્ક્રીન રેકોર્ડિંગ સાચવ્યું, જોવા માટે ટૅપ કરો"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"સ્ક્રીન રેકોર્ડિંગ ડિલીટ કર્યું"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"સ્ક્રીન રેકોર્ડિંગ ડિલીટ કરવામાં ભૂલ આવી"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"પરવાનગીઓ મેળવવામાં નિષ્ફળ રહ્યાં"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ફાઇલ ટ્રાન્સફર વિકલ્પો"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"મીડિયા પ્લેયર તરીકે માઉન્ટ કરો (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"કૅમેરા તરીકે માઉન્ટ કરો (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"તમે સામાન્ય રીતે આ નોટીફિકેશનને છોડી દો છો. \nતેમને બતાવવાનું ચાલુ રાખીએ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"આ નોટિફિકેશન બતાવવાનું ચાલુ રાખીએ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"નોટિફિકેશન બંધ કરો"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"બતાવવાનું ચાલુ રાખો"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"નાનું કરો"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"ચાર્જ થાય ત્યારે ટકાવારી બતાવો (ડિફોલ્ટ)"</item>
<item msgid="3327323682209964956">"આ આઇકન બતાવશો નહીં"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"ઓછી પ્રાધાન્યતાનું નોટિફિકેશન આઇકન બતાવો"</string>
<string name="other" msgid="4060683095962566764">"અન્ય"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"સ્પ્લિટ-સ્ક્રીન વિભાજક"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ડાબી પૂર્ણ સ્ક્રીન"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"ઍપ ઇન્સ્ટૉલ કર્યા વિના ખુલી જાય છે."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"ઍપ ઇન્સ્ટૉલ કર્યા વિના ખુલી જાય છે. વધુ જાણવા માટે ટૅપ કરો."</string>
<string name="app_info" msgid="6856026610594615344">"ઍપ્લિકેશન માહિતી"</string>
- <string name="go_to_web" msgid="1106022723459948514">"વેબ પર જાઓ"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"બ્રાઉઝર પર જાઓ"</string>
<string name="mobile_data" msgid="7094582042819250762">"મોબાઇલ ડેટા"</string>
<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">"વાઇ-ફાઇ બંધ છે"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"સેટિંગ"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"સમજાઈ ગયું"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> ઍપ તમારા <xliff:g id="TYPES_LIST">%2$s</xliff:g>નો ઉપયોગ કરી રહી છે."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"ઍપ્લિકેશન તમારા <xliff:g id="TYPES_LIST">%s</xliff:g>નો ઉપયોગ કરી રહી છે."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"ઍપ ખોલો"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"રદ કરો"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ઓકે"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"સેટિંગ"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"છેલ્લી <xliff:g id="TIME">%3$d</xliff:g> મિનિટથી <xliff:g id="APP">%1$s</xliff:g> ઍપ તમારા <xliff:g id="TYPE">%2$s</xliff:g>નો ઉપયોગ કરી રહી છે"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> ઍપ તમારા <xliff:g id="TYPE">%2$s</xliff:g>નો ઉપયોગ કરી રહી છે"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> અૅપ તમારા <xliff:g id="TYPES_LIST">%2$s</xliff:g>નો ઉપયોગ કરી રહી છે"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"કૅમેરા"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"સ્થાન"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"માઇક્રોફોન"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index e6004f3..c1cb317 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"स्क्रीनशॉट दोबारा लेने की कोशिश करें"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"मेमोरी कम होने की वजह से स्क्रीनशॉट सेव नहीं किया जा सका"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ऐप्लिकेशन या आपका संगठन स्क्रीनशॉट लेने की अनुमति नहीं देता"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"स्क्रीन रिकॉर्डिंग"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"स्क्रीन रिकॉर्ड सेशन के लिए जारी सूचना"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"रिकॉर्डिंग शुरू करें"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"वॉइसओवर रिकॉर्ड करें"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"टैप दिखाएं"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"रोकें"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"रोकें"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"फिर से शुरू करें"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"रद्द करें"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"शेयर करें"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"मिटाएं"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"स्क्रीन रिकॉर्डिंग रद्द कर दी गई"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"स्क्रीन रिकॉर्डिंग सेव की गई, देखने के लिए टैप करें"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"स्क्रीन रिकॉर्डिंग मिटा दी गई"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"स्क्रीन रिकॉर्डिंग मिटाने में गड़बड़ी हुई"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"मंज़ूरी नहीं मिल सकी"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB फ़ाइल स्थानांतरण विकल्प"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"मीडिया प्लेयर के रूप में माउंट करें (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"कैमरे के रूप में माउंट करें (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"अाप अक्सर इन सूचनाओं को खारिज कर देते हैं. \nआगे भी इन्हें देखना जारी रखना चाहते हैं?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ये सूचनाएं दिखाना जारी रखें?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"सूचनाएं दिखाना बंद करें"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"दिखाना जारी रखें"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"सूचनाएं छोटी करें"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"चार्ज होते समय प्रतिशत दिखाएं (डिफ़ॉल्ट)"</item>
<item msgid="3327323682209964956">"इस आइकॉन को ना दिखाएं"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"कम प्राथमिकता वाली सूचना के आइकॉन दिखाएं"</string>
<string name="other" msgid="4060683095962566764">"अन्य"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"विभाजित स्क्रीन विभाजक"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"बाईं स्क्रीन को पूर्ण स्क्रीन बनाएं"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"ऐप्लिकेशन इंस्टॉल किए बिना ही खुल गया है."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"ऐप्लिकेशन इंस्टॉल किए बिना ही खुल गया है. ज़्यादा जानने के लिए टैप करें."</string>
<string name="app_info" msgid="6856026610594615344">"ऐप की जानकारी"</string>
- <string name="go_to_web" msgid="1106022723459948514">"वेब पर जाएं"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ब्राउज़र पर जाएं"</string>
<string name="mobile_data" msgid="7094582042819250762">"मोबाइल डेटा"</string>
<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">"वाई-फ़ाई बंद है"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"सेटिंग"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"ठीक है"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> आपकी <xliff:g id="TYPES_LIST">%2$s</xliff:g> का इस्तेमाल कर रहा है."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"ऐप्लिकेशन आपकी <xliff:g id="TYPES_LIST">%s</xliff:g> का इस्तेमाल कर रहे हैं."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"ऐप खोलें"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"रद्द करें"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ठीक है"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"सेटिंग"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"पिछले <xliff:g id="TIME">%3$d</xliff:g> मि. से <xliff:g id="APP">%1$s</xliff:g> आपकी <xliff:g id="TYPE">%2$s</xliff:g> का इस्तेमाल कर रहा है"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> आपकी <xliff:g id="TYPE">%2$s</xliff:g> का इस्तेमाल कर रहे हैं"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> आपकी <xliff:g id="TYPES_LIST">%2$s</xliff:g> का इस्तेमाल कर रहा है"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"कैमरा"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"जगह"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"माइक्रोफ़ोन"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 777a9ff..901e2fe 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Pokušajte ponovo napraviti snimku zaslona"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Zaslon nije snimljen zbog ograničenog prostora za pohranu"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Aplikacija ili vaša organizacija ne dopuštaju snimanje zaslona"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Snimanje zaslona"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Tekuća obavijest za sesiju snimanja zaslona"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Započni snimanje"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Snimi glasovni zapis"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Prikaži dodire"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Zaustavi"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pauza"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Nastavi"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Odustani"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Dijeli"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Izbriši"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Snimanje zaslona otkazano"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Snimanje zaslona spremljeno je, dodirnite da biste ga pregledali"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Snimanje zaslona izbrisano"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Pogreška prilikom brisanja snimanja zaslona"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Dohvaćanje dopuštenja nije uspjelo"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opcije USB prijenosa datoteka"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Učitaj kao media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Učitaj kao fotoaparat (PTP)"</string>
@@ -585,14 +601,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Obavijesti"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Te vam se obavijesti više neće prikazivati"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Te će se obavijesti minimizirati"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Ove obavijesti prikazivat će se tiho"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Ove obavijesti imat će zvučni signal"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Obično odbacujete te obavijesti. \nŽelite li da se nastave prikazivati?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Želite li da se obavijesti nastave prikazivati?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Zaustavi obavijesti"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Nastavi prikazivati"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimiziraj"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Prikaži tiho"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Prikaži uz zvučni signal"</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>
@@ -809,7 +828,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Aplikacija je otvorena bez instaliranja."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Aplikacija je otvorena bez instaliranja. Dodirnite da biste saznali više."</string>
<string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Prijeđi na web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Otvori preglednik"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilni podaci"</string>
<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">"Wi-Fi je isključen"</string>
@@ -841,4 +860,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Postavke"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Shvaćam"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Izdvoji mem. SysUI-a"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> upotrebljava <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikacije upotrebljavaju <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Otvori aplikaciju"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Odustani"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"U redu"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Postavke"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> upotrebljava <xliff:g id="TYPE">%2$s</xliff:g> unatrag <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Aplikacije <xliff:g id="APPS">%1$s</xliff:g> upotrebljavaju <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> upotrebljava <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"fotoaparat"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"lokaciju"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 16db000..7a5e026 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Próbálja meg újra elkészíteni a képernyőképet"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Nem menthet képernyőképet, mert kevés a tárhely"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Az alkalmazás vagy az Ön szervezete nem engedélyezi képernyőkép készítését"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Képernyőrögzítés"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Folyamatban lévő értesítés képernyőrögzítési munkamenethez"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Rögzítés indítása"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Hang rögzítése"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Koppintások megjelenítése"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Leállítás"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Szünet"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Folytatás"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Mégse"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Megosztás"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Törlés"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"A képernyő rögzítése megszakítva"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Képernyőfelvétel mentve, koppintson a megtekintéshez"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"A képernyőről készült felvétel törölve"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Hiba történt a képernyőről készült felvétel törlésekor"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Nincs engedély"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB-fájlátvitel beállításai"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Csatlakoztatás médialejátszóként (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Csatlakoztatás kameraként (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Értesítések"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Többé nem jelennek meg ezek az értesítések"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Ezek az értesítések kis méretben jelennek meg"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Általában elveti ezeket az értesítéseket.\nSzeretné, hogy továbbra is megjelenjenek?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Továbbra is megjelenjenek ezek az értesítések?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Értesítések letiltása"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Megjelenítés továbbra is"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Kis méret"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Alacsony prioritású értesítési ikonok mutatása"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Az alkalmazás telepítés nélkül lett megnyitva."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Az alkalmazás telepítés nélkül lett megnyitva. Ha további információra van szüksége, koppintson ide."</string>
<string name="app_info" msgid="6856026610594615344">"Alkalmazásinformáció"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Tovább az internetre"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Ugrás a böngészőbe"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiladatok"</string>
<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">"A Wi-Fi ki van kapcsolva"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Beállítások"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Értem"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI-memória-kiírás"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"A(z) <xliff:g id="APP">%1$s</xliff:g> használja a következőket: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Több alkalmazás használja a következőket: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Megnyitás"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Mégse"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Beállítás"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"A(z) <xliff:g id="APP">%1$s</xliff:g> az elmúlt <xliff:g id="TIME">%3$d</xliff:g> percben használta a következőt: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"A(z) <xliff:g id="APPS">%1$s</xliff:g> használja a következőt: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"A(z) <xliff:g id="APP">%1$s</xliff:g> használja a következőt: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"helyadatok"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index c1ee1d7..da36e62 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Փորձեք նորից"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Չհաջողվեց պահել սքրինշոթը անբավարար հիշողության պատճառով"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Հավելվածը կամ ձեր կազմակերպությունը չի թույլատրում սքրինշոթի ստացումը"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Էկրանի տեսագրում"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Էկրանի տեսագրման աշխատաշրջանի ընթացիկ ծանուցում"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Սկսել տեսագրումը"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Ձայնագրել ուղեկցող ձայները"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Ցույց տալ հպումները"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Կանգնեցնել"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Դադարեցնել"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Վերսկսել"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Չեղարկել"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Կիսվել"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Ջնջել"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Էկրանի տեսագրումը չեղարկվեց"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Էկրանի տեսագրությունը պահվեց։ Հպեք՝ դիտելու համար:"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Էկրանի տեսագրությունը ջնջվեց"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Չհաջողվեց ջնջել տեսագրությունը"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Չհաջողվեց ստանալ անհրաժեշտ թույլտվությունները"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ֆայլերի փոխանցման ընտրանքներ"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Միացնել որպես մեդիա նվագարկիչ (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Միացնել որպես ֆոտոխցիկ (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Դուք սովորաբար փակում եք այս ծանուցումները: \nՇարունակե՞լ ցուցադրել դրանք:"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Ցուցադրե՞լ այս ծանուցումները։"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Չցուցադրել ծանուցումներ"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Ցուցադրել"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Ծալել"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"Ցույց տալ տոկոսը լիցքավորելու ժամանակ (կանխադրված է)"</item>
<item msgid="3327323682209964956">"Ցույց չտալ այս պատկերակը"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Ցուցադրել ցածր առաջնահերթության ծանուցումների պատկերակները"</string>
<string name="other" msgid="4060683095962566764">"Այլ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Տրոհված էկրանի բաժանիչ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Ձախ էկրանը՝ լիաէկրան"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Հավելվածը բացվել է առանց տեղադրման։"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Հավելվածը բացվել է առանց տեղադրման։ Հպեք՝ ավելին իմանալու համար։"</string>
<string name="app_info" msgid="6856026610594615344">"Հավելվածի տվյալներ"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Բացեք համացանցում"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Անցնել դիտարկիչ"</string>
<string name="mobile_data" msgid="7094582042819250762">"Բջջային ինտերնետ"</string>
<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">"Wi-Fi-ն անջատված է"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Կարգավորումներ"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Եղավ"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> հավելվածն օգտագործում է ձեր <xliff:g id="TYPES_LIST">%2$s</xliff:g>:"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Հավելվածներն օգտագործում են ձեր <xliff:g id="TYPES_LIST">%s</xliff:g>:"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Բացել հավելվածը"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Չեղարկել"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Փակել"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Պարամետրեր"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> հավելվածն օգտագործում է ձեր <xliff:g id="TYPE">%2$s</xliff:g> վերջին <xliff:g id="TIME">%3$d</xliff:g> րոպեի ընթացքում"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> հավելվածներն օգտագործում են ձեր <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> հավելվածն օգտագործում է ձեր <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"տեսախցիկը"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"վայրը"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"խոսափողը"</string>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 1cd4d30..bb0a725 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Coba ambil screenshot lagi"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Tidak dapat menyimpan screenshot karena ruang penyimpanan terbatas"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Mengambil screenshot tidak diizinkan oleh aplikasi atau organisasi"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Rekaman Layar"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notifikasi yang sedang berjalan untuk sesi rekaman layar"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Mulai Merekam"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Rekam voiceover"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Tampilkan sentuhan"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stop"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Jeda"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Lanjutkan"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Batal"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Bagikan"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Hapus"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Rekaman layar dibatalkan"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Rekaman layar disimpan, tap untuk melihat"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Rekaman layar dihapus"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Error saat menghapus rekaman layar"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Gagal mendapatkan izin"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opsi transfer file USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pasang sebagai pemutar media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pasang sebagai kamera (PTP)"</string>
@@ -287,7 +303,7 @@
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokasi Nonaktif"</string>
<string name="quick_settings_media_device_label" msgid="1302906836372603762">"Perangkat media"</string>
<string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
- <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Telepon urgen saja"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Panggilan Darurat Saja"</string>
<string name="quick_settings_settings_label" msgid="5326556592578065401">"Setelan"</string>
<string name="quick_settings_time_label" msgid="4635969182239736408">"Waktu"</string>
<string name="quick_settings_user_label" msgid="5238995632130897840">"Saya"</string>
@@ -582,14 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notifikasi"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Anda tidak akan melihat notifikasi ini lagi"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Notifikasi ini akan diperkecil"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Notifikasi ini akan ditampilkan tanpa suara"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Notifikasi ini akan mengingatkan Anda"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Anda biasanya menutup notifikasi ini. \nTerus tampilkan?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Terus tampilkan notifikasi ini?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Hentikan notifikasi"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Terus tampilkan"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Perkecil"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Tampilkan tanpa suara"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Tampilkan dan ingatkan"</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>
@@ -804,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Aplikasi dapat dibuka tanpa perlu diinstal."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Aplikasi dapat dibuka tanpa perlu diinstal. Tap untuk mempelajari lebih lanjut."</string>
<string name="app_info" msgid="6856026610594615344">"Info aplikasi"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Buka di web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Buka browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Data seluler"</string>
<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">"Wi-Fi nonaktif"</string>
@@ -836,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Setelan"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Hapus Heap SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> menggunakan <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikasi menggunakan <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Buka apl"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Batal"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Oke"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Setelan"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> menggunakan <xliff:g id="TYPE">%2$s</xliff:g> selama <xliff:g id="TIME">%3$d</xliff:g> menit terakhir"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> menggunakan <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> menggunakan <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"lokasi"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 92d86ae..3d01b94 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Prófaðu að taka skjámynd aftur"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Ekki tókst að vista skjámynd vegna takmarkaðs geymslupláss"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Forritið eða fyrirtækið þitt leyfir ekki skjámyndatöku"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Skjáupptaka"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Áframhaldandi tilkynning fyrir skjáupptökulotu"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Hefja upptöku"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Taka upp talsetningu"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Sýna snertingar"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stöðva"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Hlé"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Halda áfram"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Hætta við"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Deila"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Eyða"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Hætt við skjáupptöku"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Skjáupptaka vistuð, ýttu til að skoða"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Skjáupptöku eytt"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Villa við að eyða skjáupptöku"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Ekki tókst að fá heimildir"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Valkostir USB-skráaflutnings"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Tengja sem efnisspilara (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Tengja sem myndavél (PTP)"</string>
@@ -582,14 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Tilkynningar"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Þú munt ekki sjá þessar tilkynningar aftur"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Þessar tilkynningar verða faldar"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Þú hunsar yfirleitt þessar tilkynningar. \nViltu halda áfram að fá þær?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Sýna áfram þessar tilkynningar?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stöðva tilkynningar"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Sýna áfram"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minnka"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -804,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Forrit opnað án þess að vera uppsett."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Forrit opnað án þess að vera uppsett. Ýttu til að fá frekari upplýsingar."</string>
<string name="app_info" msgid="6856026610594615344">"Forritsupplýsingar"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Fara á vefinn"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Opna vafra"</string>
<string name="mobile_data" msgid="7094582042819250762">"Farsímagögn"</string>
<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">"Slökkt á Wi-Fi"</string>
@@ -836,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Stillingar"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Ég skil"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Vista SysUI-gögn"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> er að nota <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Forrit eru að nota <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Opna forr."</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Hætta við"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Í lagi"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Stillingar"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> hefur verið að nota <xliff:g id="TYPE">%2$s</xliff:g> í <xliff:g id="TIME">%3$d</xliff:g> mín."</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> er að nota <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> er að nota <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"myndavél"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"staðsetning"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"hljóðnemi"</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 3cac6c9..b1f9230 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Riprova ad acquisire lo screenshot"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Impossibile salvare lo screenshot a causa dello spazio di archiviazione limitato"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"L\'acquisizione di screenshot non è consentita dall\'app o dall\'organizzazione"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Registrazione dello schermo"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notifica costante per una sessione di registrazione dello schermo"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Avvia registrazione"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Registra voce fuori campo"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Mostra tocchi"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Interrompi"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pausa"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Riprendi"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Annulla"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Condividi"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"CANC"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Registrazione dello schermo annullata"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Registrazione dello schermo salvata. Tocca per visualizzarla."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Registrazione dello schermo eliminata"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Errore durante l\'eliminazione della registrazione dello schermo"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Impossibile ottenere le autorizzazioni"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opzioni trasferimento file USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Monta come lettore multimediale (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Monta come videocamera (PTP)"</string>
@@ -259,7 +275,7 @@
<string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"Ora lo schermo è bloccato nell\'orientamento orizzontale."</string>
<string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"Ora lo schermo è bloccato nell\'orientamento verticale."</string>
<string name="dessert_case" msgid="1295161776223959221">"Vetrina di dolci"</string>
- <string name="start_dreams" msgid="5640361424498338327">"Screensaver"</string>
+ <string name="start_dreams" msgid="5640361424498338327">"Salvaschermo"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
<string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Tocca e tieni premuta ciascuna icona per visualizzare altre opzioni"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Non disturbare"</string>
@@ -582,14 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notifiche"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Non vedrai più queste notifiche"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Le notifiche verranno ridotte a icona"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Queste notifiche verranno mostrate in modalità silenziosa"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Queste notifiche ti avviseranno"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"In genere ignori queste notifiche. \nVuoi continuare a riceverle?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Continuare a ricevere queste notifiche?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Interrompi la ricezione di notifiche"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continua a mostrare"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Riduci a icona"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Mostra silenziosamente"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Mostra e avvisa"</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>
@@ -804,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"App aperta senza essere stata installata."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"App aperta senza essere stata installata. Tocca per avere ulteriori informazioni."</string>
<string name="app_info" msgid="6856026610594615344">"Informazioni app"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Vai sul Web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Vai al browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dati mobili"</string>
<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">"Wi-Fi disattivato"</string>
@@ -836,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Impostazioni"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Esegui dump heap SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"L\'app <xliff:g id="APP">%1$s</xliff:g> sta usando <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Le app stanno usando <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Apri app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Annulla"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Impostazioni"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"L\'app <xliff:g id="APP">%1$s</xliff:g> sta usando <xliff:g id="TYPE">%2$s</xliff:g> da <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Le app <xliff:g id="APPS">%1$s</xliff:g> stanno usando <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"L\'app <xliff:g id="APP">%1$s</xliff:g> sta usando <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"Fotocamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"luogo"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"un microfono"</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index a65b917..70ab947 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"יש לנסות שוב לבצע צילום מסך"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"לא היה מספיק מקום לשמור את צילום המסך"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"האפליקציה או הארגון שלך אינם מתירים ליצור צילומי מסך"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"הקלטת מסך"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"התראה מתמשכת לסשן הקלטת מסך"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"הפעלת ההקלטה"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"הקלטת voiceover"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"הצגת הקשות"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"עצירה"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"השהיה"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"המשך"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"ביטול"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"שיתוף"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"מחיקה"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"הקלטת המסך בוטלה"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"הקלטת המסך נשמרה, יש להקיש כדי להציג"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"הקלטת המסך נמחקה"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"שגיאה במחיקת הקלטת המסך"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"קבלת ההרשאות נכשלה"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"אפשרויות העברת קבצים ב-USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"טען כנגן מדיה (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"טען כמצלמה (PTP)"</string>
@@ -243,7 +259,7 @@
<string name="gps_notification_searching_text" msgid="8574247005642736060">"מחפש GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"מיקום מוגדר על ידי GPS"</string>
<string name="accessibility_location_active" msgid="2427290146138169014">"בקשות מיקום פעילות"</string>
- <string name="accessibility_clear_all" msgid="5235938559247164925">"נקה את כל ההודעות."</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"הסרת כל ההתראות."</string>
<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">
@@ -588,15 +604,17 @@
<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>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"הודעות אלה יוצגו ללא צליל"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"הודעות אלה יישלחו כהתראה"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"הודעות אלה בדרך כלל נדחות על ידיך. \nלהמשיך להציג אותן?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"שנמשיך להציג לך את ההודעות האלה?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"לא, אל תמשיכו"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"כן, המשיכו"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"מזעור"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"הצגה ללא צליל"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"הצגה ושליחת התראה"</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>
@@ -735,8 +753,7 @@
<item msgid="2139628951880142927">"הצג באחוזים בזמן טעינה (ברירת מחדל)"</item>
<item msgid="3327323682209964956">"אל תציג את הסמל הזה"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"הצגת סמלי התראות בעדיפות נמוכה"</string>
<string name="other" msgid="4060683095962566764">"אחר"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"מחלק מסך מפוצל"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"מסך שמאלי מלא"</string>
@@ -816,7 +833,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"האפליקציה נפתחת בלי התקנה."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"האפליקציה נפתחת בלי התקנה. אפשר להקיש כדי לקבל מידע נוסף."</string>
<string name="app_info" msgid="6856026610594615344">"פרטי אפליקציה"</string>
- <string name="go_to_web" msgid="1106022723459948514">"התחבר לאינטרנט"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"מעבר אל הדפדפן"</string>
<string name="mobile_data" msgid="7094582042819250762">"נתונים סלולריים"</string>
<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">"Wi-Fi כבוי"</string>
@@ -848,4 +865,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"הגדרות"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"הבנתי"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"ערימת Dump SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> משתמשת ב<xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"אפליקציות משתמשות ב<xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"לאפליקציה"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"ביטול"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"אישור"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"הגדרות"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> משתמשת ב<xliff:g id="TYPE">%2$s</xliff:g> ב-<xliff:g id="TIME">%3$d</xliff:g> הדקות האחרונות"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> משתמשות ב<xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> משתמשת ב<xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"מצלמה"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"מיקום"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"מיקרופון"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 6617fdd..bd5fb37 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"スクリーンショットを撮り直してください"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"空き容量が足りないため、スクリーンショットを保存できません"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"スクリーンショットの作成はアプリまたは組織で許可されていません"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"画面の録画"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"画面の録画セッション中の通知"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"録画を開始"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"ナレーションの録音"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"タップの表示"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"停止"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"一時停止"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"再開"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"キャンセル"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"共有"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"削除"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"画面の録画をキャンセルしました"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"画面の録画を保存しました。タップで表示できます"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"画面の録画を削除しました"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"画面の録画の削除中にエラーが発生しました"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"権限を取得できませんでした"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USBファイル転送オプション"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"メディアプレーヤー(MTP)としてマウント"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"カメラ(PTP)としてマウント"</string>
@@ -198,9 +214,9 @@
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"機内モードをONにしました。"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"サイレント"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"アラームのみ"</string>
- <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"マナーモード"</string>
- <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"マナーモードを OFF にしました。"</string>
- <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"マナーモードを ON にしました。"</string>
+ <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"サイレント モード"</string>
+ <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"サイレント モードを OFF にしました。"</string>
+ <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"サイレント モードを ON にしました。"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth"</string>
<string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"BluetoothがOFFです。"</string>
<string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"BluetoothがONです。"</string>
@@ -262,7 +278,7 @@
<string name="start_dreams" msgid="5640361424498338327">"スクリーン セーバー"</string>
<string name="ethernet_label" msgid="7967563676324087464">"イーサネット"</string>
<string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"アイコンを押し続けると、その他の項目が表示されます"</string>
- <string name="quick_settings_dnd_label" msgid="8735855737575028208">"マナーモード"</string>
+ <string name="quick_settings_dnd_label" msgid="8735855737575028208">"サイレント モード"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"優先する通知のみ"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"アラームのみ"</string>
<string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"サイレント"</string>
@@ -415,7 +431,7 @@
<string name="media_projection_remember_text" msgid="3103510882172746752">"次回から表示しない"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"すべて消去"</string>
<string name="manage_notifications_text" msgid="2386728145475108753">"管理"</string>
- <string name="dnd_suppressing_shade_text" msgid="1904574852846769301">"マナーモードにより通知は一時停止中です"</string>
+ <string name="dnd_suppressing_shade_text" msgid="1904574852846769301">"サイレント モードにより通知は一時停止中です"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"今すぐ開始"</string>
<string name="empty_shade_text" msgid="708135716272867002">"通知はありません"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"プロファイルが監視されている可能性があります"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"通常、この通知はスワイプして非表示にしています。\n今後も表示しますか?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"この通知を今後も表示しますか?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"通知を表示しない"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"今後も表示する"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -668,9 +690,9 @@
<string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string>
<string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"カレンダー"</string>
<string name="tuner_full_zen_title" msgid="4540823317772234308">"音量調節を表示"</string>
- <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"マナーモード"</string>
+ <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"サイレント モード"</string>
<string name="volume_dnd_silent" msgid="4363882330723050727">"音量ボタンのショートカット"</string>
- <string name="volume_up_silent" msgid="7141255269783588286">"音量上げボタンでマナーモードを OFF にする"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"音量上げボタンでサイレント モードを OFF にする"</string>
<string name="battery" msgid="7498329822413202973">"電池"</string>
<string name="clock" msgid="7416090374234785905">"時計"</string>
<string name="headset" msgid="4534219457597457353">"ヘッドセット"</string>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"変更時に割合を表示(デフォルト)"</item>
<item msgid="3327323682209964956">"このアイコンを表示しない"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"優先度の低い通知アイコンを表示"</string>
<string name="other" msgid="4060683095962566764">"その他"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"分割画面の分割線"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"左全画面"</string>
@@ -806,15 +827,15 @@
<string name="instant_apps_message" msgid="1183313016396018086">"アプリをインストールせずに開きました。"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"アプリをインストールせずに開きました。詳細を見るにはタップしてください。"</string>
<string name="app_info" msgid="6856026610594615344">"アプリ情報"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ウェブページを開く"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ブラウザに移動"</string>
<string name="mobile_data" msgid="7094582042819250762">"モバイルデータ"</string>
<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">"Wi-Fi は OFF です"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth は OFF です"</string>
- <string name="dnd_is_off" msgid="6167780215212497572">"マナーモードは OFF です"</string>
- <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"マナーモードが自動ルール(<xliff:g id="ID_1">%s</xliff:g>)によって ON になりました。"</string>
- <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"マナーモードがアプリ(<xliff:g id="ID_1">%s</xliff:g>)によって ON になりました。"</string>
- <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"マナーモードが自動ルールまたはアプリによって ON になりました。"</string>
+ <string name="dnd_is_off" msgid="6167780215212497572">"サイレント モードは OFF です"</string>
+ <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"サイレント モードが自動ルール(<xliff:g id="ID_1">%s</xliff:g>)によって ON になりました。"</string>
+ <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"サイレント モードがアプリ(<xliff:g id="ID_1">%s</xliff:g>)によって ON になりました。"</string>
+ <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"サイレント モードが自動ルールまたはアプリによって ON になりました。"</string>
<string name="qs_dnd_until" msgid="3469471136280079874">"終了時間: <xliff:g id="ID_1">%s</xliff:g>"</string>
<string name="qs_dnd_keep" msgid="1825009164681928736">"設定を維持"</string>
<string name="qs_dnd_replace" msgid="8019520786644276623">"設定を変更"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"設定"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI ヒープのダンプ"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g>は<xliff:g id="TYPES_LIST">%2$s</xliff:g>を使用しています。"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"アプリは<xliff:g id="TYPES_LIST">%s</xliff:g>を使用しています。"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"アプリを開く"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"キャンセル"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"設定"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g>は過去 <xliff:g id="TIME">%3$d</xliff:g> 分間に<xliff:g id="TYPE">%2$s</xliff:g>を使用しています"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g>は<xliff:g id="TYPE">%2$s</xliff:g>を使用しています"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g>は<xliff:g id="TYPES_LIST">%2$s</xliff:g>を使用しています"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"カメラ"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"現在地情報"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"マイク"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 359e689..5e2454c 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"ხელახლა ცადეთ ეკრანის ანაბეჭდის გაკეთება"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"ეკრანის ანაბეჭდის შენახვა ვერ მოხერხდა შეზღუდული მეხსიერების გამო"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ეკრანის ანაბეჭდების შექმნა არ არის ნებადართული აპის ან თქვენი ორგანიზაციის მიერ"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"ეკრანის ჩაწერა"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"უწყვეტი შეტყობინება ეკრანის ჩაწერის სესიისთვის"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"ჩაწერის დაწყება"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"ხმის ჩაწერა"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"შეხებების ჩვენება"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"შეწყვეტა"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"პაუზა"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"გაგრძელება"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"გაუქმება"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"გაზიარება"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"წაშლა"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"ეკრანის ჩაწერა გაუქმდა"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"ეკრანის ჩანაწერი შენახულია, შეეხეთ სანახავად"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"ეკრანის ჩანაწერი წაიშალა"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"ეკრანის ჩანაწერის წაშლისას წარმოიშვა შეცდომა"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"ნებართვების მიღება ვერ მოხერხდა"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ფაილის ტრანსფერის პარამეტრები"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"მედია-საკრავად (MTP) ჩართვა"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"მიუერთეთ როგორც კამერა (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"როგორც წესი, თქვენ ასეთ შეტყობინებებს ხურავთ. \nგსურთ მათი ჩვენების გაგრძელება?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"გაგრძელდეს ამ შეტყობინებათა ჩვენება?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"შეტყობინებების შეწყვეტა"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"ჩვენების გაგრძელება"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"ჩაკეცვა"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"პროცენტულობის დატენვისას ჩვენება (ნაგულისხმევი)"</item>
<item msgid="3327323682209964956">"აღარ მაჩვენო ეს ხატულა"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"დაბალი პრიორიტეტის მქონე შეტყობინებების ხატულების ჩვენება"</string>
<string name="other" msgid="4060683095962566764">"სხვა"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"გაყოფილი ეკრანის რეჟიმის გამყოფი"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"მარცხენა ნაწილის სრულ ეკრანზე გაშლა"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"აპი გაიხსნა ინსტალაციის გარეშე."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"აპი გაიხსნა ინსტალაციის გარეშე. შეეხეთ მეტის გასაგებად."</string>
<string name="app_info" msgid="6856026610594615344">"აპის შესახებ"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ვებზე გადასვლა"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ბრაუზერზე გადასვლა"</string>
<string name="mobile_data" msgid="7094582042819250762">"მობილური ინტერნეტი"</string>
<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">"Wi-Fi გამორთულია"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"პარამეტრები"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"გასაგებია"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI გროვის გამოტანა"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g>-ის მიერ გამოიყენება თქვენი <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"აპლიკაციების მიერ გამოიყენება თქვენი <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"აპის გახსნა"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"გაუქმება"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"კარგი"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"პარამეტრები"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g>-ის მიერ გამოიყენება თქვენი <xliff:g id="TYPE">%2$s</xliff:g> ბოლო <xliff:g id="TIME">%3$d</xliff:g> წუთის განმავლობაში"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g>-ის მიერ გამოიყენება თქვენი <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g>-ის მიერ გამოიყენება თქვენი <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"კამერა"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"მდებარეობა"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"მიკროფონი"</string>
</resources>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 6598bf0..f990be8 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Қайта скриншот жасап көріңіз"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Жадтағы шектеулі бос орынға байланысты скриншот сақталмайды"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Қолданба немесе ұйым скриншоттар түсіруге рұқсат етпейді"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Экранды бейнеге жазу"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Экранды бейнеге жазудың ағымдағы хабарландыруы"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Жазуды бастау"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Кадр сыртындағы дыбысты жазу"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Түрту әрекеттерін көрсету"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Тоқтату"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Тоқтата тұру"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Жалғастыру"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Бас тарту"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Бөлісу"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Жою"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Экранды бейнеге жазудан бас тартылды"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Экран бейне жазбасы сақталды, көру үшін түртіңіз"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Экран бейне жазбасы жойылды"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Экран бейне жазбасын жою кезінде қате кетті"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Рұқсаттар алынбады"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB файлын жіберу опциялары"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Медиа ойнатқыш (MTP) ретінде қосыңыз"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Камера ретінде (PTP) қосыңыз"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Әдетте хабарландыруларды көрмейсіз. \nОлар көрсетілсін бе?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Хабарландырулар көрсетілсін бе?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Хабарландыруларға тыйым салу"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Көрсету"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Жасыру"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"Зарядтау кезінде пайызды көрсету (әдепкі)"</item>
<item msgid="3327323682209964956">"Бұл белгішені көрсетпеу"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Маңызды емес хабарландыру белгішелерін көрсету"</string>
<string name="other" msgid="4060683095962566764">"Басқа"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Бөлінген экран бөлгіші"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Сол жағын толық экранға шығару"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Қолданба орнатылмай-ақ ашылды."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Қолданба орнатылмай-ақ ашылды. Толығырақ мәлімет алу үшін түртіңіз."</string>
<string name="app_info" msgid="6856026610594615344">"Қолданба ақпараты"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Вебке өту"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Браузерге өту"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобильдік деректер"</string>
<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">"Wi-Fi өшірулі"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Параметрлер"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Түсінікті"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> қолданбасында <xliff:g id="TYPES_LIST">%2$s</xliff:g> пайдалануда."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Қолданбаларда <xliff:g id="TYPES_LIST">%s</xliff:g> пайдаланылуда."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Ашу"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Бас тарту"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Жарайды"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Параметр"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> қолданбасында <xliff:g id="TIME">%3$d</xliff:g> минут бойы <xliff:g id="TYPE">%2$s</xliff:g> пайдаланылуда"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> қолданбасында <xliff:g id="TYPE">%2$s</xliff:g> пайдаланылуда"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> қолданбасында <xliff:g id="TYPES_LIST">%2$s</xliff:g> пайдаланылуда"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"камера"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"геодерек"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"микрофон"</string>
</resources>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 8545ad6..6c584ad 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"សាកល្បងថតរូបថតអេក្រង់ម្តងទៀត"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"មិនអាចរក្សាទុករូបថតអេក្រង់បានទេ ដោយសារទំហំផ្ទុកមានកម្រិតទាប"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ការថតរូបអេក្រង់មិនត្រូវបានអនុញ្ញាតដោយកម្មវិធីនេះ ឬស្ថាប័នរបស់អ្នក"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"ការថតសកម្មភាពអេក្រង់"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"ការជូនដំណឹងដែលកំពុងដំណើរការសម្រាប់រយៈពេលប្រើការថតសកម្មភាពអេក្រង់"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"ចាប់ផ្តើមថត"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"ថតការបញ្ចូលសំឡេង"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"បង្ហាញការចុច"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"ឈប់"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"ផ្អាក"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"បន្ត"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"បោះបង់"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"ចែករំលែក"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"លុប"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"បានបោះបង់ការថតសកម្មភាពអេក្រង់"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"បានរក្សាទុកការថតសកម្មភាពអេក្រង់។ សូមចុចដើម្បីមើល"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"បានលុបការថតសកម្មភាពអេក្រង់"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"មានបញ្ហាក្នុងការលុបការថតសកម្មភាពអេក្រង់"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"មិនអាចទទួលបានការអនុញ្ញាតទេ"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"ជម្រើសផ្ទេរឯកសារតាមយូអេសប៊ី"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ភ្ជាប់ជាកម្មវិធីចាក់មេឌៀ (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ភ្ជាប់ជាម៉ាស៊ីនថត (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"ជាធម្មតាអ្នកច្រានចោលការជូនដំណឹងទាំងនេះ។ \nបន្តបង្ហាញពួកវាទៀតដែរទេ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"បន្តបង្ហាញការជូនដំណឹងទាំងនេះ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"បញ្ឈប់ការជូនដំណឹង"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"បន្តបង្ហាញ"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"បង្រួម"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"បង្ហាញភាគរយនៅពេលសាកថ្ម (លំនាំដើម)"</item>
<item msgid="3327323682209964956">"កុំបង្ហាញរូបតំណាងនេះ"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"បង្ហាញរូបការជូនដំណឹងដែលមានអាទិភាពទាប"</string>
<string name="other" msgid="4060683095962566764">"ផ្សេងៗ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"កម្មវិធីចែកអេក្រង់បំបែក"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"អេក្រង់ពេញខាងឆ្វេង"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"កម្មវិធីត្រូវបានបើកដោយមិនចាំបាច់ដំឡើង។"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"កម្មវិធីត្រូវបានបើកដោយមិនចាំបាច់ដំឡើង។ ចុចដើម្បីស្វែងយល់បន្ថែម។"</string>
<string name="app_info" msgid="6856026610594615344">"ព័ត៌មានកម្មវិធី"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ចូលទៅកាន់បណ្តាញ"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ចូលទៅកម្មវិធីរុករកតាមអ៊ីនធឺណិត"</string>
<string name="mobile_data" msgid="7094582042819250762">"ទិន្នន័យទូរសព្ទចល័ត"</string>
<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">"Wi-Fi បានបិទ"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"ការកំណត់"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"យល់ហើយ"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"ចម្លង SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> កំពុងប្រើ <xliff:g id="TYPES_LIST">%2$s</xliff:g> របស់អ្នក។"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"កម្មវិធីកំពុងប្រើ <xliff:g id="TYPES_LIST">%s</xliff:g> របស់អ្នក។"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"បើកកម្មវិធី"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"បោះបង់"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"យល់ព្រម"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"ការកំណត់"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> កំពុងប្រើ <xliff:g id="TYPE">%2$s</xliff:g> របស់អ្នករយៈពេល <xliff:g id="TIME">%3$d</xliff:g> នាទីចុងក្រោយ"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> កំពុងប្រើ <xliff:g id="TYPE">%2$s</xliff:g> របស់អ្នក"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> កំពុងប្រើ <xliff:g id="TYPES_LIST">%2$s</xliff:g> របស់អ្នក"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"កាមេរ៉ា"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ទីតាំង"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"មីក្រូហ្វូន"</string>
</resources>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index ccbb31e..9269026 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"ಸ್ಕ್ರೀನ್ಶಾಟ್ ಅನ್ನು ಪುನಃ ತೆಗೆದುಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"ಪರಿಮಿತ ಸಂಗ್ರಹಣೆ ಸ್ಥಳದ ಕಾರಣದಿಂದಾಗಿ ಸ್ಕ್ರೀನ್ಶಾಟ್ ಉಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ಅಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಸಂಸ್ಥೆಯು ಸ್ಕ್ರೀನ್ಶಾಟ್ಗಳನ್ನು ತೆಗೆಯುವುದನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಸೆಶನ್ಗಾಗಿ ಚಾಲ್ತಿಯಲ್ಲಿರುವ ಅಧಿಸೂಚನೆ"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"ರೆಕಾರ್ಡಿಂಗ್ ಆರಂಭಿಸಿ"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"voiceover ಅನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಿ"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"ಟ್ಯಾಪ್ಗಳನ್ನು ತೋರಿಸಿ"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"ನಿಲ್ಲಿಸಿ"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"ವಿರಾಮಗೊಳಿಸಿ"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"ಮುಂದುವರಿಸಿ"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"ರದ್ದುಮಾಡಿ"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"ಹಂಚಿಕೊಳ್ಳಿ"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"ಅಳಿಸಿ"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಅನ್ನು ರದ್ದುಮಾಡಲಾಗಿದೆ"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಅನ್ನು ಉಳಿಸಲಾಗಿದೆ, ವೀಕ್ಷಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಅಳಿಸಲಾಗಿದೆ"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಅಳಿಸುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"ಅನುಮತಿಗಳನ್ನು ಪಡೆಯುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ಫೈಲ್ ವರ್ಗಾವಣೆ ಆಯ್ಕೆಗಳು"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ಮೀಡಿಯಾ ಪ್ಲೇಯರ್ ರೂಪದಲ್ಲಿ ಅಳವಡಿಸಿ (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ಕ್ಯಾಮರಾ ರೂಪದಲ್ಲಿ ಅಳವಡಿಸಿ (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ವಜಾಗೊಳಿಸಿದ್ದೀರಿ. \nಅವುಗಳನ್ನು ತೋರಿಸುತ್ತಲೇ ಇರಬೇಕೆ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸುತ್ತಲೇ ಇರಬೇಕೆ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿಲ್ಲಿಸಿ"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"ತೋರಿಸುತ್ತಲಿರಿ"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"ಕಿರಿದುಗೊಳಿಸಿ"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"ಚಾರ್ಜ್ ಮಾಡುವಾಗ ಪ್ರತಿಶತವನ್ನು ತೋರಿಸು (ಡಿಫಾಲ್ಟ್)"</item>
<item msgid="3327323682209964956">"ಈ ಐಕಾನ್ ತೋರಿಸಬೇಡ"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"ಕಡಿಮೆ-ಆದ್ಯತೆ ಸೂಚನೆಯ ಐಕಾನ್ಗಳನ್ನು ತೋರಿಸಿ"</string>
<string name="other" msgid="4060683095962566764">"ಇತರ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"ಸ್ಪ್ಲಿಟ್-ಪರದೆ ಡಿವೈಡರ್"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ಎಡ ಪೂರ್ಣ ಪರದೆ"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"ಇನ್ಸ್ಟಾಲ್ ಮಾಡದೆ ಆ್ಯಪ್ ತೆರೆಯಲಾಗಿದೆ."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"ಇನ್ಸ್ಟಾಲ್ ಮಾಡದೆ ಆ್ಯಪ್ ತೆರೆಯಲಾಗಿದೆ. ಇನ್ನಷ್ಟು ತಿಳಿಯಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="app_info" msgid="6856026610594615344">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ವೆಬ್ಗೆ ಹೋಗಿ"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ಬ್ರೌಸರ್ಗೆ ಹೋಗಿ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ಮೊಬೈಲ್ ಡೇಟಾ"</string>
<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">"ವೈ-ಫೈ ಆಫ್ ಆಗಿದೆ"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"ಅರ್ಥವಾಯಿತು"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI ಹೀಪ್ ಡಂಪ್ ಮಾಡಿ"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"ನಿಮ್ಮ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ಅನ್ನು <xliff:g id="APP">%1$s</xliff:g> ಬಳಸುತ್ತಿದೆ."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"ನಿಮ್ಮ <xliff:g id="TYPES_LIST">%s</xliff:g> ಅನ್ನು ಆ್ಯಪ್ಗಳು ಬಳಸುತ್ತಿವೆ."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"ಆ್ಯಪ್ ತೆರೆ"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"ರದ್ದುಮಾಡಿ"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ಸರಿ"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"ಕೊನೆಯ <xliff:g id="TIME">%3$d</xliff:g> ನಿಮಿಷಕ್ಕಾಗಿ ನಿಮ್ಮ <xliff:g id="TYPE">%2$s</xliff:g> ಅನ್ನು <xliff:g id="APP">%1$s</xliff:g> ಬಳಸುತ್ತಿದೆ"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"ನಿಮ್ಮ <xliff:g id="TYPE">%2$s</xliff:g> ಅನ್ನು <xliff:g id="APPS">%1$s</xliff:g> ಬಳಸುತ್ತಿದೆ"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"ನಿಮ್ಮ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ಅನ್ನು <xliff:g id="APP">%1$s</xliff:g> ಬಳಸುತ್ತಿದೆ"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"ಕ್ಯಾಮರಾ"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ಸ್ಥಳ"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"ಮೈಕ್ರೋಫೋನ್"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 716e2f2..b6dda32 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"스크린샷을 다시 찍어 보세요."</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"저장용량이 부족하여 스크린샷을 저장할 수 없습니다"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"앱이나 조직에서 스크린샷 촬영을 허용하지 않습니다."</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"화면 녹화"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"화면 녹화 세션에 관한 지속적인 알림"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"녹화 시작"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"음성 해설 녹음"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"탭한 항목 표시"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"중지"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"일시중지"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"재개"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"취소"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"공유"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"삭제"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"화면 녹화가 취소되었습니다."</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"화면 녹화본이 저장되었습니다. 확인하려면 탭하세요."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"화면 녹화가 삭제되었습니다."</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"화면 녹화는 삭제하는 중에 오류가 발생했습니다."</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"권한을 확보하지 못했습니다."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB 파일 전송 옵션"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"미디어 플레이어로 마운트(MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"카메라로 마운트(PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"보통 이 알림을 닫았습니다. \n알림을 계속 표시하시겠습니까?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"이 알림을 계속 표시하시겠습니까?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"알림 중지"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"계속 표시하기"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"최소화"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"충전할 때 퍼센트 표시(기본값)"</item>
<item msgid="3327323682209964956">"이 아이콘 표시 안함"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"우선순위가 낮은 알림 아이콘 표시"</string>
<string name="other" msgid="4060683095962566764">"기타"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"화면 분할기"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"왼쪽 화면 전체화면"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"설치 없이 앱이 실행되었습니다."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"설치 없이 앱이 실행되었습니다. 탭하여 자세히 알아보세요."</string>
<string name="app_info" msgid="6856026610594615344">"앱 정보"</string>
- <string name="go_to_web" msgid="1106022723459948514">"웹으로 이동"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"브라우저로 이동"</string>
<string name="mobile_data" msgid="7094582042819250762">"모바일 데이터"</string>
<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">"Wi-Fi가 사용 중지됨"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"설정"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"확인"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g>이(가) <xliff:g id="TYPES_LIST">%2$s</xliff:g>을(를) 사용 중입니다."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"애플리케이션이 <xliff:g id="TYPES_LIST">%s</xliff:g>을(를) 사용 중입니다."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"앱 열기"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"취소"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"확인"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"설정"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g>이(가) 지난 <xliff:g id="TIME">%3$d</xliff:g>분 동안 <xliff:g id="TYPE">%2$s</xliff:g>을(를) 사용 중입니다."</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g>이(가) <xliff:g id="TYPE">%2$s</xliff:g>을(를) 사용 중입니다."</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g>이(가) <xliff:g id="TYPES_LIST">%2$s</xliff:g>을(를) 사용 중입니다."</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"카메라"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"위치"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"마이크"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 2f49cdb..f4dbcbd 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Скриншотту кайра тартып көрүңүз"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Сактагычта бош орун аз болгондуктан скриншот сакталбай жатат"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Скриншот тартууга колдонмо же ишканаңыз тыюу салган."</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Экранды жаздыруу"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Экранды жаздыруу сеансы боюнча учурдагы билдирме"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Жаздырып баштоо"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Үн коштоону жаздыруу"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Басылган жерди көрсөтүү"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Токтотуу"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Тындыруу"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Улантуу"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Жокко чыгаруу"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Бөлүшүү"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Ооба"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Экранды жаздыруу жокко чыгарылды"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Экранды жаздыруу сакталды, көрүү үчүн таптап коюңуз"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Экранды жаздыруу өчүрүлдү"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Экранды жаздырууну өчүрүүдө ката кетти"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Уруксаттар алынбай калды"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB менен файл өткөрүү мүмкүнчүлүктөрү"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Медиа ойноткуч катары кошуу (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Камера катары кошуу (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Адатта мындай эскертмелерди өткөрүп жибересиз. \nАлар көрсөтүлө берсинби?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Бул эскертмелер көрсөтүлө берсинби?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Эскертмелерди токтотуу"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Көрсөтүлө берсин"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Кичирейтүү"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"Кубаттоо учурунда пайызы көрсөтүлсүн (демейки)"</item>
<item msgid="3327323682209964956">"Бул сөлөкөт көрсөтүлбөсүн"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Анча маанилүү эмес билдирменин сүрөтчөлөрүн көрсөтүү"</string>
<string name="other" msgid="4060683095962566764">"Башка"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Экранды бөлгүч"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Сол жактагы экранды толук экран режимине өткөрүү"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Колдонмо орнотулбастан ачылды."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Колдонмо орнотулбастан ачылды. Толугураак маалымат алуу үчүн таптап коюңуз."</string>
<string name="app_info" msgid="6856026610594615344">"Колдонмо тууралуу"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Интернетке өтүү"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Серепчиге өтүү"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобилдик Интернет"</string>
<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">"Wi-Fi өчүк"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Жөндөөлөр"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Түшүндүм"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> төмөнкүлөрдү колдонуп жатат: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Колдонмолор төмөнкүлөрдү пайдаланып жатышат: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Колдн ачуу"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Жок"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Макул"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Жөндөөлөр"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> төмөнкүлөрдү <xliff:g id="TIME">%3$d</xliff:g> мүн. бери колдонуп жатат: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> төмөнкүлөрдү колдонуп жатышат: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> төмөнкүлөрдү колдонуп жатат: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"камера"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"жайгашкан жер"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"микрофон"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index dd874d5..2a508b3 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"ກະລຸນາລອງຖ່າຍຮູບໜ້າຈໍອີກຄັ້ງ"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"ບໍ່ສາມາດຖ່າຍຮູບໜ້າຈໍໄດ້ເນື່ອງຈາກພື້ນທີ່ຈັດເກັບຂໍ້ມູນມີຈຳກັດ"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ແອັບ ຫຼື ອົງກອນຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ຖ່າຍຮູບໜ້າຈໍ"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"ການບັນທຶກໜ້າຈໍ"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"ການແຈ້ງເຕືອນສຳລັບເຊດຊັນການບັນທຶກໜ້າຈໍໃດໜຶ່ງ"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"ເລີ່ມການບັນທຶກ"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"ບັນທຶກສຽງພາກ"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"ສະແດງການແຕະ"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"ຢຸດ"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"ຢຸດຊົ່ວຄາວ"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"ສືບຕໍ່"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"ຍົກເລີກ"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"ແບ່ງປັນ"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"ລຶບ"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"ຍົກເລີກການບັນທຶກໜ້າຈໍແລ້ວ"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"ຈັດເກັບການບັນທຶກໜ້າຈໍ, ແຕະເພື່ອເບິ່ງ"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"ລຶບການບັນທຶກໜ້າຈໍອອກແລ້ວ"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"ເກີດຄວາມຜິດພາດໃນການລຶບການບັນທຶກໜ້າຈໍ"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"ໂຫຼດສິດອະນຸຍາດບໍ່ສຳເລັດ"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ໂຕເລືອກການຍ້າຍໄຟລ໌"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ເຊື່ອມຕໍ່ເປັນ media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ເຊື່ອມຕໍ່ເປັນກ້ອງຖ່າຍຮູບ (PTP)"</string>
@@ -582,15 +598,17 @@
<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>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"ການແຈ້ງເຕືອນເຫຼົ່ານີ້ຈະສະແດງແບບງຽບໆ"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"ການແຈ້ງເຕືອນເຫຼົ່ານີ້ຈະເຕືອນທ່ານ"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"ໂດຍປົກກະຕິທ່ານປິດການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄວ້. \nສືບຕໍ່ສະແດງພວກມັນບໍ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ສະແດງການແຈ້ງເຕືອນເຫຼົ່ານີ້ຕໍ່ໄປບໍ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"ຢຸດການແຈ້ງເຕືອນ"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"ສະແດງຕໍ່ໄປ"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"ຫຍໍ້"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"ສະແດງແບບງຽບໆ"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"ສະແດງ ແລະ ເຕືອນ"</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>
@@ -725,8 +743,7 @@
<item msgid="2139628951880142927">"ສະແດງເປີເຊັນເມື່ອກຳລັງສາກໄຟ (ຄ່າເລີ່ມຕົ້ນ)"</item>
<item msgid="3327323682209964956">"ຢ່າສະແດງໄອຄອນນີ້"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"ສະແດງໄອຄອນການແຈ້ງເຕືອນຄວາມສຳຄັນຕ່ຳ"</string>
<string name="other" msgid="4060683095962566764">"ອື່ນໆ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"ຕົວຂັ້ນການແບ່ງໜ້າຈໍ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ເຕັມໜ້າຈໍຊ້າຍ"</string>
@@ -806,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"ເປີດແອັບໂດຍບໍ່ມີການຕິດຕັ້ງແລ້ວ."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"ເປີດແອັບໂດຍບໍ່ມີການຕິດຕັ້ງແລ້ວ. ແຕະເພື່ອສຶກສາເພີ່ມເຕີມ."</string>
<string name="app_info" msgid="6856026610594615344">"ຂໍ້ມູນແອັບ"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ໄປທີ່ເວັບ"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ໄປທີ່ໂປຣແກຣມທ່ອງເວັບ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ອິນເຕີເນັດມືຖື"</string>
<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">"Wi-Fi ປິດຢູ່"</string>
@@ -838,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"ການຕັ້ງຄ່າ"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"ເຂົ້າໃຈແລ້ວ"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> ກຳລັງໃຊ້ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ຂອງທ່ານ."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"ແອັບພລິເຄຊັນກຳລັງໃຊ້ <xliff:g id="TYPES_LIST">%s</xliff:g> ຂອງທ່ານ."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"ເປີດແອັບ"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"ຍົກເລີກ"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ຕົກລົງ"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"ການຕັ້ງຄ່າ"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> ກຳລັງໃຊ້ <xliff:g id="TYPE">%2$s</xliff:g> ຂອງທ່ານ <xliff:g id="TIME">%3$d</xliff:g> ນທ ທີ່ຜ່ານມາ"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> ກຳລັງໃຊ້ <xliff:g id="TYPE">%2$s</xliff:g> ຂອງທ່ານ"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> ກຳລັງໃຊ້ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ຂອງທ່ານ"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"ກ້ອງຖ່າຍຮູບ"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ສະຖານທີ່"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"ໄມໂຄຣໂຟນ"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 68e64d3..0792bbb 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Pabandykite padaryti ekrano kopiją dar kartą"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Negalima išsaugoti ekrano kopijos dėl ribotos saugyklos vietos"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Jūsų organizacijoje arba naudojant šią programą neleidžiama daryti ekrano kopijų"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Ekrano įrašymas"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Šiuo metu rodomas ekrano įrašymo sesijos pranešimas"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Pradėti įrašymą"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Įrašyti balsą už kadro"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Rodyti palietimus"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Sustabdyti"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pristabdyti"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Tęsti"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Atšaukti"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Bendrinti"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Ištrinti"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Ekrano įrašymas atšauktas"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Ekrano įrašas išsaugotas, palieskite ir peržiūrėkite"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Ekrano įrašas ištrintas"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Ištrinant ekrano įrašą įvyko klaida"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Nepavyko gauti leidimų"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB failo perdavimo parinktys"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Įmontuoti kaip medijos leistuvę (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Įmontuoti kaip fotoaparatą (PTP)"</string>
@@ -588,14 +604,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Pranešimai"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Nebematysite šių pranešimų"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Šie pranešimai bus sumažinti"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Paprastai šių pranešimų atsisakote. \nToliau juos rodyti?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Toliau rodyti šiuos pranešimus?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Sustabdyti pranešimus"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Toliau rodyti"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Sumažinti"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -814,7 +837,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Programa atidaryta jos neįdiegus."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Programa atidaryta jos neįdiegus. Palieskite, kad sužinotumėte daugiau."</string>
<string name="app_info" msgid="6856026610594615344">"Programos informacija"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Eiti į žiniatinklį"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Eiti į naršyklę"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilieji duomenys"</string>
<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">"„Wi-Fi“ išjungtas"</string>
@@ -846,4 +869,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Nustatymai"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Supratau"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Pat. „SysUI“ krūvą"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"Programa „<xliff:g id="APP">%1$s</xliff:g>“ naudoja: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Programos naudoja: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Atid. pr."</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Atšaukti"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Gerai"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Nustatymai"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Programa „<xliff:g id="APP">%1$s</xliff:g>“ pastar. <xliff:g id="TIME">%3$d</xliff:g> min. naudoja: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Programos (<xliff:g id="APPS">%1$s</xliff:g>) naudoja: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"Programa „<xliff:g id="APP">%1$s</xliff:g>“ naudoja: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"fotoaparatą"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"vietovę"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofoną"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index eb5e92c..14a859c 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Mēģiniet izveidot jaunu ekrānuzņēmumu."</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Nevar saglabāt ekrānuzņēmumu, jo krātuvē nepietiek vietas."</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Lietotne vai jūsu organizācija neatļauj veikt ekrānuzņēmumus."</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Notiek ekrāna ierakstīšana"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Aktīvs paziņojums par ekrāna ierakstīšanas sesiju"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Sākt ierakstīšanu"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Ierakstīt balsi"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Rādīt pieskārienus"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Pārtraukt"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Apturēt"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Atsākt"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Atcelt"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Kopīgot"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Dzēst"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Ekrāna ierakstīšana ir atcelta."</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Ekrāna ieraksts ir saglabāts. Pieskarieties, lai to skatītu."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Ekrāna ieraksts ir izdzēsts."</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Dzēšot ekrāna ierakstu, radās kļūda."</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Neizdevās iegūt atļaujas."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB failu pārsūtīšanas opcijas"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pievienot kā multivides atskaņotāju (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pievienot kā kameru (PTP)"</string>
@@ -585,15 +601,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Paziņojumi"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Jūs vairs neredzēsiet šos paziņojumus."</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Šie paziņojumi tiks minimizēti"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Parasti jūs noraidāt šādus paziņojumus. \nVai turpināt tos rādīt?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Vai turpināt rādīt šos paziņojumus?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Apturēt paziņojumu rādīšanu"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Turpināt rādīt"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizēt"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -730,8 +752,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Rādīt zemas prioritātes paziņojumu ikonas"</string>
<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>
@@ -811,7 +832,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Lai atvērtu šo lietotni, tā nav jāinstalē."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Lai atvērtu šo lietotni, tā nav jāinstalē. Pieskarieties, lai uzzinātu vairāk."</string>
<string name="app_info" msgid="6856026610594615344">"Lietotnes informācija"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Pāriet uz tīmekli"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Atvērt pārlūku"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilie dati"</string>
<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">"Wi-Fi ir izslēgts"</string>
@@ -843,4 +864,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Iestatījumi"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Labi"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"Lietotne <xliff:g id="APP">%1$s</xliff:g> izmanto funkcijas <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Lietojumprogrammas izmanto šādas funkcijas: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Atvērt lietotni"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Atcelt"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Labi"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Iestatījumi"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Lietotne <xliff:g id="APP">%1$s</xliff:g> pēdējās <xliff:g id="TIME">%3$d</xliff:g> min izmanto funkciju <xliff:g id="TYPE">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Lietotnes <xliff:g id="APPS">%1$s</xliff:g> izmanto funkciju <xliff:g id="TYPE">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"Lietotne <xliff:g id="APP">%1$s</xliff:g> izmanto funkcijas <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"atrašanās vieta"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofons"</string>
</resources>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index 9c42805..cc937e9 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Повторно обидете се да направите слика од екранот"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Сликата од екранот не може да се зачува поради ограничена меморија"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Апликацијата или вашата организација не дозволува снимање слики од екранот"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Снимање на екранот"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Тековно известување за сесија за снимање на екранот"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Започни со снимање"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Снимај коментар"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Прикажувај допири"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Сопри"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Паузирај"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Продолжи"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Откажи"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Сподели"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Избриши"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Снимањето екран е откажано"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Снимката од екранот е зачувана, допрете за да ја видите"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Снимката од екранот е избришана"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Грешка при бришењето на снимката од екранот"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Не успеаја да се добијат дозволи"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Пренос на датотека со USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Монтирај како мултимедијален плеер (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Монтирај како фотоапарат (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Обично ги отфрлате известувањава. \nДа продолжат да се прикажуваат?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Дали да продолжат да се прикажуваат известувањава?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Запри ги известувањата"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Продолжи да ги прикажуваш"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Минимизирај"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"Прикажи процент кога се полни (стандардно)"</item>
<item msgid="3327323682209964956">"Не прикажувај ја иконава"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Прикажувај икони за известувања со низок приоритет"</string>
<string name="other" msgid="4060683095962566764">"Друго"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Разделник на поделен екран"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Левиот на цел екран"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Апликацијата беше отворена без да се инсталира."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Апликацијата беше отворена без да се инсталира. Допрете за да дознаете повеќе."</string>
<string name="app_info" msgid="6856026610594615344">"Информации за апликација"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Одете на интернет"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Одете на прелистувач"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобилен интернет"</string>
<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">"Wi-Fi е исклучено"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Поставки"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Сфатив"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Извади SysUI-слика"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> користи <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Апликациите користат <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Отвори апликација"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Откажи"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Во ред"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Поставки"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> користи <xliff:g id="TYPE">%2$s</xliff:g> во последните <xliff:g id="TIME">%3$d</xliff:g> мин."</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> користат <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> користи <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"камера"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"локација"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"микрофон"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 62196ea..b88fbd6 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"സ്ക്രീൻഷോട്ട് എടുക്കാൻ വീണ്ടും ശ്രമിക്കുക"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"സ്റ്റോറേജ് ഇടം പരിമിതമായതിനാൽ സ്ക്രീൻഷോട്ട് സംരക്ഷിക്കാനാകുന്നില്ല"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"സ്ക്രീൻഷോട്ടുകൾ എടുക്കുന്നത് ആപ്പോ നിങ്ങളുടെ സ്ഥാപനമോ അനുവദിക്കുന്നില്ല"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"സ്ക്രീൻ റെക്കോർഡിംഗ്"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"ഒരു സ്ക്രീൻ റെക്കോർഡിംഗ് സെഷനായി നിലവിലുള്ള അറിയിപ്പ്"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"റെക്കോര്ഡിംഗ് ആരംഭിക്കുക"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"വോയ്സ് ഓവർ റെക്കോർഡ് ചെയ്യുക"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"ടാപ്പുകൾ കാണിക്കുക"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"നിർത്തുക"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"താൽക്കാലികമായി നിർത്തുക"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"പുനരാരംഭിക്കുക"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"റദ്ദാക്കുക"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"പങ്കിടുക"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"ഇല്ലാതാക്കുക"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"സ്ക്രീൻ റെക്കോർഡിംഗ് റദ്ദാക്കി"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"സ്ക്രീൻ റെക്കോർഡിംഗ് സംരക്ഷിച്ചു, കാണാൻ ടാപ്പ് ചെയ്യുക"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"സ്ക്രീൻ റെക്കോർഡിംഗ് ഇല്ലാതാക്കി"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"സ്ക്രീൻ റെക്കോർഡിംഗ് ഇല്ലാതാക്കുന്നതിൽ പിശക്"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"അനുമതികൾ ലഭിച്ചില്ല"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ഫയൽ കൈമാറൽ ഓപ്ഷനുകൾ"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ഒരു മീഡിയ പ്ലേയറായി (MTP) മൗണ്ടുചെയ്യുക"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ഒരു ക്യാമറയായി (PTP) മൗണ്ടുചെയ്യുക"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"സാധാരണയായി നിങ്ങൾ ഈ അറിയിപ്പുകൾ നിരാകരിക്കുന്നു. \nഅവ തുടർന്നും കാണിക്കണോ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ഈ അറിയിപ്പുകൾ തുടർന്നും കാണിക്കണോ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"അറിയിപ്പുകൾ നിർത്തുക"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"തുടർന്നും കാണിക്കുക"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"ചെറുതാക്കുക"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"ചാർജ്ജുചെയ്യുമ്പോൾ ശതമാനം കാണിക്കുക (ഡിഫോൾട്ട്)"</item>
<item msgid="3327323682209964956">"ഈ ഐക്കൺ കാണിക്കരുത്"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"പ്രാധാന്യം കുറഞ്ഞ അറിയിപ്പ് ചിഹ്നങ്ങൾ"</string>
<string name="other" msgid="4060683095962566764">"മറ്റുള്ളവ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"സ്പ്ലിറ്റ്-സ്ക്രീൻ ഡിവൈഡർ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ഇടത് പൂർണ്ണ സ്ക്രീൻ"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"ഇൻസ്റ്റാൾ ചെയ്യാതെ ആപ്പ് തുറന്നു."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"ഇൻസ്റ്റാൾ ചെയ്യാതെ ആപ്പ് തുറന്നു. കൂടുതലറിയാൻ ടാപ്പ് ചെയ്യുക."</string>
<string name="app_info" msgid="6856026610594615344">"ആപ്പ് വിവരം"</string>
- <string name="go_to_web" msgid="1106022723459948514">"വെബിൽ പോവുക"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ബ്രൗസറിലേക്ക് പോവുക"</string>
<string name="mobile_data" msgid="7094582042819250762">"മൊബൈൽ ഡാറ്റ"</string>
<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">"വൈഫൈ ഓഫാണ്"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"ക്രമീകരണം"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"മനസ്സിലായി"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI ഹീപ്പ് ഡമ്പ് ചെയ്യുക"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> നിങ്ങളുടെ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ഉപയോഗിക്കുന്നു."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"ആപ്പുകൾ നിങ്ങളുടെ <xliff:g id="TYPES_LIST">%s</xliff:g> ഉപയോഗിക്കുന്നു."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"ആപ്പ് തുറക്കുക"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"റദ്ദാക്കുക"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ശരി"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"ക്രമീകരണം"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"കഴിഞ്ഞ <xliff:g id="TIME">%3$d</xliff:g> മിനിറ്റായി <xliff:g id="APP">%1$s</xliff:g> നിങ്ങളുടെ <xliff:g id="TYPE">%2$s</xliff:g> ഉപയോഗിക്കുന്നു"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> നിങ്ങളുടെ <xliff:g id="TYPE">%2$s</xliff:g> ഉപയോഗിക്കുന്നു"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g>നിങ്ങളുടെ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ഉപയോഗിക്കുന്നു"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"ക്യാമറ"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ലൊക്കേഷന്"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"മൈക്രോഫോൺ"</string>
</resources>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 223f492..7033766 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Дэлгэцийн зургийг дахин дарж үзнэ үү"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Сангийн багтаамж бага байгаа тул дэлгэцээс дарсан зургийг хадгалах боломжгүй байна"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Таны апп, байгууллагад дэлгэцийн зураг авахыг зөвшөөрдөггүй"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Дэлгэцийн бичлэг"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Дэлгэц бичих горимын үргэлжилж буй мэдэгдэл"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Бичлэгийг эхлүүлэх"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Дуу оруулалтыг бичих"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Товшилтыг харуулах"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Зогсоох"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Түр зогсоох"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Үргэлжлүүлэх"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Цуцлах"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Хуваалцах"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Устгах"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Дэлгэцийн бичлэгийг цуцалсан"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Дэлгэцийн бичлэгийг хадгалсан. Харахын тулд товшино уу"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Дэлгэцийн бичлэгийг устгасан"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Дэлгэцийн бичлэгийг устгахад алдаа гарлаа"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Зөвшөөрөл авч чадсангүй"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB файл шилжүүлэх сонголт"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Медиа тоглуулагч(MTP) болгон залгах"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Камер болгон(PTP) залгах"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Та эдгээр мэдэгдлийг ихэвчлэн хаадаг. \nЭдгээрийг харуулсан хэвээр байх уу?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Эдгээр мэдэгдлийг харуулсан хэвээр байх уу?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Мэдэгдлийг зогсоох"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Харуулсан хэвээр байх"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Багасгах"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"Цэнэглэх үед хувийг тогтмол харуулах (өгөгдмөл)"</item>
<item msgid="3327323682209964956">"Энэ дүрс тэмдгийг бүү үзүүл"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Бага ач холбогдолтой мэдэгдлийн дүрс тэмдгийг харуулах"</string>
<string name="other" msgid="4060683095962566764">"Бусад"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"\"Дэлгэц хуваах\" хуваагч"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Зүүн талын бүтэн дэлгэц"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Аппыг суулгахгүйгээр нээсэн."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Аппыг суулгахгүйгээр нээсэн. Нэмэлт мэдээлэл авахын тулд товшино уу."</string>
<string name="app_info" msgid="6856026610594615344">"Апп-н мэдээлэл"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Вэбэд очих"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Хөтчид очих"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобайл дата"</string>
<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">"Wi-Fi унтраалттай байна"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Тохиргоо"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Ойлголоо"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> таны <xliff:g id="TYPES_LIST">%2$s</xliff:g>-г ашиглаж байна."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Аппууд таны <xliff:g id="TYPES_LIST">%s</xliff:g>-г ашиглаж байна."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Аппыг нээх"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Болих"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"За"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Тохиргоо"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> таны <xliff:g id="TYPE">%2$s</xliff:g>-г сүүлийн <xliff:g id="TIME">%3$d</xliff:g> минутын турш ашиглаж байна"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> таны <xliff:g id="TYPE">%2$s</xliff:g>-г ашиглаж байна"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> таны <xliff:g id="TYPES_LIST">%2$s</xliff:g>-г ашиглаж байна"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"камер"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"байршил"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"микрофон"</string>
</resources>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index da37acbf..159926a 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"स्क्रीनशॉट पुन्हा घेण्याचा प्रयत्न करा"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"मर्यादित स्टोरेज जागेमुळे स्क्रीनशॉट सेव्ह करू शकत नाही"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"अॅप किंवा आपल्या संस्थेद्वारे स्क्रीनशॉट घेण्याची अनुमती नाही"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"स्क्रीन रेकॉर्डिंग"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"स्क्रीन रेकॉर्ड सत्रासाठी सुरू असलेली सूचना"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"रेकॉर्डिंग सुरू करा"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"व्हॉइसओव्हर रेकॉर्ड करा"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"टॅप दाखवा"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"थांबवा"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"थांबवा"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"पुन्हा सुरू करा"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"रद्द करा"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"शेअर करा"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"हटवा"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"स्क्रीन रेकॉर्डिंग रद्द केले"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"स्क्रीन रेकॉर्डिंग सेव्ह केली, पाहण्यासाठी टॅप करा"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"स्क्रीन रेकॉर्डिंग हटवले"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"स्क्रीन रेकॉर्डिंग हटवताना एरर आली"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"परवानग्या मिळवता आल्या नाहीत"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB फाईल स्थानांतरण पर्याय"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"मीडिया प्लेअर म्हणून माउंट करा (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"कॅमेरा म्हणून माउंट करा (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"तुम्ही या सूचना सामान्यतः डिसमिस करता. \nते दाखवत राहायचे?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"या सूचना दाखवणे सुरू ठेवायचे?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"सूचना थांबवा"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"दाखवणे सुरू ठेवा"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"लहान करा"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"चार्ज करताना टक्केवारी दर्शवा (डीफॉल्ट)"</item>
<item msgid="3327323682209964956">"हे आयकन दाखवू नका"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"कमी प्राधान्य सूचना आयकन दर्शवा"</string>
<string name="other" msgid="4060683095962566764">"अन्य"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"विभाजित-स्क्रीन विभाजक"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"डावी फुल स्क्रीन"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"इंस्टॉल केल्याशिवाय अॅप उघडले."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"इंस्टॉल केल्याशिवाय अॅप उघडले. अधिक जाणून घेण्यासाठी टॅप करा."</string>
<string name="app_info" msgid="6856026610594615344">"अॅप माहिती"</string>
- <string name="go_to_web" msgid="1106022723459948514">"वेबवर जा"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ब्राउझरवर जा"</string>
<string name="mobile_data" msgid="7094582042819250762">"मोबाइल डेटा"</string>
<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">"वाय-फाय बंद आहे"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"सेटिंग्ज"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"समजले"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI हीप डंप करा"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> तुमचे <xliff:g id="TYPES_LIST">%2$s</xliff:g> वापरत आहे."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"अॅप्लिकेशन्स तुमचे <xliff:g id="TYPES_LIST">%s</xliff:g> वापरत आहे."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"अॅप उघडा"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"रद्द करा"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ओके"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"सेटिंग्ज"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"शेवटच्या <xliff:g id="TIME">%3$d</xliff:g> मिनिटासाठी <xliff:g id="APP">%1$s</xliff:g> तुमचे <xliff:g id="TYPE">%2$s</xliff:g> वापरत आहे"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> तुमचे <xliff:g id="TYPE">%2$s</xliff:g> वापरत आहे"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> तुमचे <xliff:g id="TYPES_LIST">%2$s</xliff:g> वापरत आहे"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"कॅमेरा"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"स्थान"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"मायक्रोफोन"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index cb4dd14..dbaccac 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Cuba ambil tangkapan skrin sekali lagi"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Tidak dapat menyimpan tangkapan skrin kerana ruang storan terhad"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Pengambilan tangkapan skrin tidak dibenarkan oleh apl atau organisasi anda"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Rakaman Skrin"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Pemberitahuan breterusan untuk sesi rakaman skrin"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Mula Merakam"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Rakam suara latar"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Tunjukkan ketikan"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Berhenti"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Jeda"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Sambung semula"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Batal"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Kongsi"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Padam"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Rakaman skrin dibatalkan"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Rakaman skrin disimpan, ketik untuk melihat"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Rakaman skrin dipadamkan"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Ralat semasa memadamkan rakaman skrin"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Gagal mendapatkan kebenaran"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Pilihan pemindahan fail USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Lekapkan sebagai pemain media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Lekapkan sebagai kamera (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Pemberitahuan"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Anda tidak akan melihat pemberitahuan ini lagi"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Pemberitahuan ini akan diminimumkan"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Biasanya anda mengetepikan pemberitahuan ini. \nTerus tunjukkan pemberitahuan?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Terus tunjukkan pemberitahuan ini?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Hentikan pemberitahuan"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Terus tunjukkan"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimumkan"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Tunjukkan ikon pemberitahuan keutamaan rendah"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Apl dibuka tanpa dipasang."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Apl dibuka tanpa dipasang. Ketik untuk mengetahui lebih lanjut."</string>
<string name="app_info" msgid="6856026610594615344">"Maklumat apl"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Pergi ke web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Pergi ke penyemak imbas"</string>
<string name="mobile_data" msgid="7094582042819250762">"Data mudah alih"</string>
<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">"Wi-Fi dimatikan"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Tetapan"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Longgok Tmbunn SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> sedang menggunakan <xliff:g id="TYPES_LIST">%2$s</xliff:g> anda."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikasi sedang menggunakan <xliff:g id="TYPES_LIST">%s</xliff:g> anda."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Buka apl"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Batal"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Okey"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Tetapan"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> sedang menggunakan <xliff:g id="TYPE">%2$s</xliff:g> anda selama <xliff:g id="TIME">%3$d</xliff:g> min yang lalu"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> sedang menggunakan <xliff:g id="TYPE">%2$s</xliff:g> anda"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> sedang menggunakan <xliff:g id="TYPES_LIST">%2$s</xliff:g> anda"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"lokasi"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 777d96e..2a1bf77 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"မျက်နှာပြင်ပုံကို ထပ်ရိုက်ကြည့်ပါ"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"သိုလှောင်ခန်းနေရာ အကန့်အသတ်ရှိသောကြောင့် ဖန်သားပြင်ဓာတ်ပုံကို သိမ်းဆည်း၍မရပါ"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ဖန်သားပြင်ဓာတ်ပုံရိုက်ကူးခြင်းကို ဤအက်ပ် သို့မဟုတ် သင်၏အဖွဲ့အစည်းက ခွင့်မပြုပါ"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"ဖန်သားပြင် ရိုက်ကူးမှု"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"ဖန်သားပြင် ရိုက်ကူးသည့် စက်ရှင်အတွက် ဆက်တိုက်လာနေသော အကြောင်းကြားချက်"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"စတင် ရိုက်ကူးရန်"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"နောက်ခံစကားပြော ကူးယူရန်"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"တို့ခြင်းများကို ပြရန်"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"ရပ်ရန်"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"ခဏရပ်ရန်"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"ဆက်လုပ်ရန်"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"မလုပ်တော့"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"မျှဝေရန်"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"ဖျက်ရန်"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"ဖန်သားပြင် ရိုက်ကူးမှု ပယ်ဖျက်လိုက်ပါပြီ"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"ဖန်သားပြင် ရိုက်ကူးမှု သိမ်းထားသည်၊ ကြည့်ရန် တို့ပါ"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"ဖန်သားပြင် ရိုက်ကူးမှု ဖျက်ပြီးပါပြီ"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"ဖန်သားပြင် ရိုက်ကူးမှု ဖျက်ရာတွင် အမှားအယွင်းရှိနေသည်"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"ခွင့်ပြုချက် မရယူနိုင်ပါ"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ဖိုင်ပြောင်း ရွေးမှုများ"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"မီဒီယာပလေရာအနေဖြင့် တပ်ဆင်ရန် (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ကင်မရာအနေဖြင့် တပ်ဆင်ရန် (PTP)"</string>
@@ -582,15 +598,17 @@
<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>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"ဤအကြောင်းကြားချက်များကို တိတ်တဆိတ် ပြပါမည်"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"ဤအကြောင်းကြားချက်များက သင့်ကို သတိပေးပါမည်"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"သင်သည် အများအားဖြင့် ဤအကြောင်းကြားချက်များကို ပယ်လေ့ရှိပါသည်။ \n၎င်းတို့ကို ဆက်လက်ပြသလိုပါသလား။"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ဤအကြောင်းကြားချက်များကို ဆက်ပြလိုပါသလား။"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"အကြောင်းကြားချက်များကို ရပ်ရန်"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"ဆက်ပြရန်"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"ချုံ့ရန်"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"တိတ်တဆိတ် ပြရန်"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"ပြပြီး သတိပေးရန်"</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>
@@ -725,8 +743,7 @@
<item msgid="2139628951880142927">"အားသွင်းနေစဉ်တွင် ရာခိုင်နှုန်းကိုပြပါ (ပုံသေ)"</item>
<item msgid="3327323682209964956">"ဤသင်္ကေတပုံကို မပြပါနှင့်"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"အရေးမကြီးသော အကြောင်းကြားချက် သင်္ကေတများ ပြရန်"</string>
<string name="other" msgid="4060683095962566764">"အခြား"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"မျက်နှာပြင်ခွဲခြမ်း ပိုင်းခြားပေးသည့်စနစ်"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ဘယ်ဘက် မျက်နှာပြင်အပြည့်"</string>
@@ -806,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"အက်ပ်ကိုမထည့်သွင်းဘဲ ဖွင့်ထားသည်။"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"အက်ပ်ကိုမထည့်သွင်းဘဲ ဖွင့်ထားသည်။ ပိုမိုလေ့လာရန် တို့ပါ။"</string>
<string name="app_info" msgid="6856026610594615344">"အက်ပ်အချက်အလက်"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ဝဘ်သို့ သွားရန်"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ဘရောင်ဇာသို့ သွားပါ"</string>
<string name="mobile_data" msgid="7094582042819250762">"မိုဘိုင်းဒေတာ"</string>
<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">"Wi-Fi ကို ပိတ်ထားသည်"</string>
@@ -838,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"ဆက်တင်များ"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"ရပါပြီ"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> က သင်၏ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ကို အသုံးပြုနေသည်။"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"အပလီကေးရှင်းများက သင်၏ <xliff:g id="TYPES_LIST">%s</xliff:g> ကို အသုံးပြုနေသည်။"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"ဖွင့်ရန်"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"မလုပ်တော့"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Okay"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"ဆက်တင်များ"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> သည် ပြီးခဲ့သော <xliff:g id="TIME">%3$d</xliff:g> မိနစ်က သင်၏ <xliff:g id="TYPE">%2$s</xliff:g> ကို အသုံးပြုနေသည်"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> တို့က သင်၏ <xliff:g id="TYPE">%2$s</xliff:g> ကို အသုံးပြုနေသည်"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> က သင်၏ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ကို အသုံးပြုနေသည်"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"ကင်မရာ"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"တည်နေရာ"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"မိုက်ခရိုဖုန်း"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 9b27df5..4014957 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Prøv å ta skjermdump på nytt"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Kan ikke lagre skjermdumpen på grunn av begrenset lagringsplass"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Appen eller organisasjonen din tillater ikke at du tar skjermdumper"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Skjermopptak"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Vedvarende varsel for et skjermopptak"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Start opptak"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Ta opp et kommentarspor"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Vis trykk"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stopp"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Sett på pause"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Gjenoppta"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Avbryt"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Del"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Slett"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Skjermopptak er avbrutt"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Skjermopptaket er lagret. Trykk for å se det"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Skjermopptaket er slettet"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Feil ved sletting av skjermopptaket"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Kunne ikke få tillatelser"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Altern. for USB-filoverføring"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Sett inn som mediespiller (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Sett inn som kamera (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Varsler"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Du ser ikke disse varslene lenger"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Disse varslene minimeres"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Du avviser vanligvis disse varslene. \nVil du fortsette å vise dem?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Vil du fortsette å vise disse varslene?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stopp varsler"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Fortsett å vise"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimer"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Vis ikoner for varsler med lav prioritet"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Appen ble åpnet uten at den ble installert."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Appen ble åpnet uten at den ble installert. Trykk for å finne ut mer."</string>
<string name="app_info" msgid="6856026610594615344">"Info om appen"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Gå til nettstedet"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Gå til nettleser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobildata"</string>
<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">"Wi-Fi er av"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Innstillinger"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Greit"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI-heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> bruker <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Apper bruker <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Åpne appen"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Avbryt"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Ok"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Innst."</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> har brukt <xliff:g id="TYPE">%2$s</xliff:g> de siste <xliff:g id="TIME">%3$d</xliff:g> minuttene"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> bruker <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> bruker <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"posisjon"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index 5119e5b..67e4223 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"स्क्रिनसट फेरि लिएर हेर्नुहोस्"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"भण्डारण ठाउँ सीमित भएका कारण स्क्रिनसट सुरक्षित गर्न सकिएन"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"उक्त अनुप्रयोग वा तपाईंको संगठनले स्क्रिनसटहरू लिन दिँदैन"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"स्क्रिनको रेकर्डिङ"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"कुनै स्क्रिन रेकर्ड गर्ने सत्रका लागि चलिरहेको सूचना"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"रेकर्डिङ सुरु गर्नुहोस्"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"भ्वाइसओवर रेकर्ड गर्नुहोस्"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"ट्यापहरू देखाउनुहोस्"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"रोक्नुहोस्"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"पज गर्नुहोस्"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"जारी राख्नुहोस्"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"रद्द गर्नुहोस्"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"आदान प्रदान गर्नुहोस्"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"मेट्नुहोस्"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"स्क्रिन रेकर्ड गर्ने कार्य रद्द गरियो"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"स्क्रिन रेकर्डिङ सुरक्षित गरियो, हेर्न ट्याप गर्नुहोस्"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"स्क्रिनको रेकर्डिङ मेटाइयो"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"स्क्रिनको रेकर्डिङ मेट्ने क्रममा त्रुटि"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"अनुमति प्राप्त गर्न सकिएन"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB फाइल सार्ने विकल्पहरू"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"मिडिया प्लेयर(MTP)को रूपमा माउन्ट गर्नुहोस्"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"क्यामेराको रूपमा माउन्ट गर्नुहोस् (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"तपाईं सामान्यतया यी सूचनाहरूलाई खारेज गर्ने गर्नुहुन्छ। \nतिनलाई देखाइरहने हो?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"यी सूचनाहरू देखाउने क्रम जारी राख्ने हो?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"सूचनाहरू देखाउन छाड्नुहोस्"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"देखाउने क्रम जारी राख्नुहोस्"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"सानो बनाउनुहोस्"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"चार्ज गर्दा प्रतिशत देखाउनुहोस् (पूर्वनिर्धारित)"</item>
<item msgid="3327323682209964956">"यो आइकन नदेखाउनुहोस्"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"कम प्राथमिकताका सूचना आइकनहरू देखाउनुहोस्"</string>
<string name="other" msgid="4060683095962566764">"अन्य"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"विभाजित-स्क्रिन छुट्याउने"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"बायाँ भाग पूर्ण स्क्रिन"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"स्थापना नगरिकनै अनुप्रयोग खोलियो।"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"स्थापना नगरिकनै अनुप्रयोग खोलियो। थप जान्न ट्याप गर्नुहोस्।"</string>
<string name="app_info" msgid="6856026610594615344">"अनुप्रयोगका बारे जानकारी"</string>
- <string name="go_to_web" msgid="1106022723459948514">"वेबमा जानुहोस्"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ब्राउजरमा जानुहोस्"</string>
<string name="mobile_data" msgid="7094582042819250762">"मोबाइल डेटा"</string>
<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">"Wi‑Fi निष्क्रिय छ"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"सेटिङहरू"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"बुझेँ"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईंको <xliff:g id="TYPES_LIST">%2$s</xliff:g> प्रयोग गर्दै छ।"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"अनुप्रयोगहरूले तपाईंको <xliff:g id="TYPES_LIST">%s</xliff:g> प्रयोग गर्दै छन्।"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"अनुप्रयोग खोल्नुहोस्"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"रद्द गर्नु…"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ठिक छ"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"सेटिङहरू"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> ले विगत <xliff:g id="TIME">%3$d</xliff:g> मिनेट देखि तपाईंको <xliff:g id="TYPE">%2$s</xliff:g> प्रयोग गर्दै छन्"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> ले तपाईंको <xliff:g id="TYPE">%2$s</xliff:g> प्रयोग गर्दै छन्"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईंको <xliff:g id="TYPES_LIST">%2$s</xliff:g> प्रयोग गर्दै छ"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"क्यामेरा"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"स्थान"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"माइक्रोफोन"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 448a36e..30ccad8 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Probeer opnieuw een screenshot te maken"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Kan screenshot niet opslaan vanwege beperkte opslagruimte"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Het maken van screenshots wordt niet toegestaan door de app of je organisatie"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Schermopname"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Doorlopende melding voor een schermopname-sessie"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Opname starten"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Voice-over opnemen"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Tikken weergeven"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stoppen"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pauzeren"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Hervatten"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Annuleren"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Delen"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Verwijderen"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Schermopname geannuleerd"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Schermopname opgeslagen, tik om te bekijken"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Schermopname verwijderd"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Fout bij verwijderen van schermopname"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Kan machtigingen niet ophalen"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opties voor USB-bestandsoverdracht"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Koppelen als mediaspeler (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Koppelen als camera (PTP)"</string>
@@ -582,15 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Meldingen"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Deze meldingen worden niet meer weergegeven"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Deze meldingen worden geminimaliseerd"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Deze meldingen worden zonder geluid weergegeven"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Deze meldingen stellen je op de hoogte"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Meestal sluit je deze meldingen. \nWil je ze blijven weergeven?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Deze meldingen blijven weergeven?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Meldingen stoppen"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Blijven weergeven"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimaliseren"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Zonder geluid weergeven"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Weergeven en melden"</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>
@@ -725,8 +743,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Pictogrammen voor meldingen met lage prioriteit weergeven"</string>
<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>
@@ -806,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"App geopend zonder dat deze is geïnstalleerd."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"App geopend zonder dat deze is geïnstalleerd. Tik voor meer informatie."</string>
<string name="app_info" msgid="6856026610594615344">"App-info"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Ga naar internet"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Ga naar browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiele data"</string>
<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">"Wifi is uitgeschakeld"</string>
@@ -838,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Instellingen"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> gebruikt je <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Apps gebruiken je <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"App openen"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Annuleren"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Instellingen"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> gebruikt je <xliff:g id="TYPE">%2$s</xliff:g> gedurende de afgelopen <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> gebruiken je <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> gebruikt je <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"camera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"locatie"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microfoon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index a9441fa..1768c69a 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"ପୁଣିଥରେ ସ୍କ୍ରୀନ୍ଶଟ୍ ନେବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"ସୀମିତ ଷ୍ଟୋରେଜ୍ ସ୍ପେସ୍ ହେତୁ ସ୍କ୍ରୀନଶଟ୍ ସେଭ୍ ହୋଇପାରିବ ନାହିଁ"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ଆପ୍ କିମ୍ବା ସଂସ୍ଥା ଦ୍ୱାରା ସ୍କ୍ରୀନଶଟ୍ ନେବାକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"ଏକ ସ୍କ୍ରିନ୍ ରେକର୍ଡ୍ ସେସନ୍ ପାଇଁ ଚାଲୁଥିବା ବିଜ୍ଞପ୍ତି"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"ରେକର୍ଡିଂ ଆରମ୍ଭ କରନ୍ତୁ"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"ଭଏସ୍ଓଭର୍ ରେକର୍ଡ କରନ୍ତୁ"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"ଟାପ୍ ଦେଖାନ୍ତୁ"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"ବନ୍ଦ କରନ୍ତୁ"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"ବିରତି କରନ୍ତୁ"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"ପୁଣି ଚାଲୁ କରନ୍ତୁ"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"ସେୟାର୍ କରନ୍ତୁ"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"ଡିଲିଟ୍ କରନ୍ତୁ"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ ବାତିଲ୍ କରିଦିଆଯାଇଛି"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ ସେଭ୍ ହୋଇଛି, ଦେଖିବାକୁ ଟାପ୍ କରନ୍ତୁ"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ ଡିଲିଟ୍ କରିଦିଆଯାଇଛି"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ ଡିଲିଟ୍ କରିବାରେ ତ୍ରୁଟି"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"ଅନୁମତି ପାଇବାରେ ଅସଫଳ ହେଲା।"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍ର ବିକଳ୍ପ"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ଏକ ମିଡିଆ ପ୍ଲେୟାର୍ (MTP) ଭାବରେ ଭର୍ତ୍ତି କରନ୍ତୁ"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ଏକ କ୍ୟାମେରା (PTP) ଭାବରେ ଭର୍ତ୍ତି କରନ୍ତୁ"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"ସାଧାରଣତଃ ଆପଣ ଏହି ବିଜ୍ଞପ୍ତିକୁ ଖାରଜ କରିଦିଅନ୍ତି। \n ସେଗୁଡ଼ିକୁ ଦେଖାଇବା ଜାରି ରଖିବେ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖାଇବା ଜାରି ରଖିବେ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"ବିଜ୍ଞପ୍ତିକୁ ଦେଖାଇବା ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"ଦେଖାଇବା ଜାରି ରଖନ୍ତୁ"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"ଛୋଟ କରନ୍ତୁ"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"ଚାର୍ଜ କରାଯିବାବେଳେ ଶତକଡ଼ା ଦେଖାନ୍ତୁ (ଡିଫଲ୍ଟ)"</item>
<item msgid="3327323682209964956">"ଏହି ଆଇକନ୍ ଦେଖାନ୍ତୁ ନାହିଁ"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"କମ୍-ଅଗ୍ରାଧିକାର ବିଜ୍ଞପ୍ତି ଆଇକନ୍ ଦେଖାନ୍ତୁ"</string>
<string name="other" msgid="4060683095962566764">"ଅନ୍ୟାନ୍ୟ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"ସ୍ପ୍ଲିଟ୍-ସ୍କ୍ରୀନ ବିଭାଜକ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ବାମ ପଟକୁ ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନ୍ କରନ୍ତୁ"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"ଇନ୍ଷ୍ଟଲ୍ ନହୋଇ ଆପ୍ ଖୋଲିଛି।"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"ଇନ୍ଷ୍ଟଲ୍ ନହୋଇ ଆପ୍ ଖୋଲିଛି। ଅଧିକ ଜାଣିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="app_info" msgid="6856026610594615344">"ଆପ୍ ସୂଚନା"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ୱେବକୁ ଯାଆନ୍ତୁ"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ବ୍ରାଉଜର୍କୁ ଯାଆନ୍ତୁ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ମୋବାଇଲ୍ ଡାଟା"</string>
<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">"ୱାଇ-ଫାଇ ଅଫ୍ ଅଛି"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"ସେଟିଙ୍ଗ"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"ବୁଝିଲି"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI ହିପ୍ ଡମ୍ପ୍ କରନ୍ତୁ"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> ଆପଣଙ୍କ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ବ୍ୟବହାର କରୁଛନ୍ତି।"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"ଆପ୍ଲିକେସନ୍ଗୁଡିକ ଆପଣଙ୍କ <xliff:g id="TYPES_LIST">%s</xliff:g> ବ୍ୟବହାର କରୁଛନ୍ତି।"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"ଆପ୍ ଖୋଲନ୍ତୁ"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"ବାତିଲ୍"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ଠିକ୍ ଅଛି"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"ସେଟିଂସ୍"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> ବିଗତ <xliff:g id="TIME">%3$d</xliff:g> ମିନିଟ୍ ହେବ ଆପଣଙ୍କ <xliff:g id="TYPE">%2$s</xliff:g> ବ୍ୟବହାର କରୁଛନ୍ତି।"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> ଆପଣଙ୍କ <xliff:g id="TYPE">%2$s</xliff:g> ବ୍ୟବହାର କରୁଛନ୍ତି"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> ଆପଣଙ୍କ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ବ୍ୟବହାର କରୁଛନ୍ତି"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"କ୍ୟାମେରା"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ଲୋକେସନ୍"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"ମାଇକ୍ରୋଫୋନ୍"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 57971eb..dbcd43c 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਦੁਬਾਰਾ ਲੈ ਕੇ ਦੇਖੋ"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"ਸੀਮਿਤ ਸਟੋਰੇਜ ਹੋਣ ਕਾਰਨ ਸਕ੍ਰੀਨਸ਼ਾਟ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ਐਪ ਜਾਂ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਸਕ੍ਰੀਨਸ਼ਾਟ ਲੈਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਗਈ ਹੈ"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"ਕਿਸੇ ਸਕ੍ਰੀਨ ਰਿਕਾਰਡ ਸੈਸ਼ਨ ਲਈ ਚੱਲ ਰਹੀ ਸੂਚਨਾ"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"ਰਿਕਾਰਡਿੰਗ ਸ਼ੁਰੂ ਕਰੋ"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"ਅਵਾਜ਼ ਰਿਕਾਰਡ ਕਰੋ"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"ਟੈਪਾਂ ਦਿਖਾਓ"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"ਬੰਦ ਕਰੋ"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"ਰੋਕੋ"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"ਮੁੜ-ਚਾਲੂ ਕਰੋ"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"ਰੱਦ ਕਰੋ"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"ਸਾਂਝਾ ਕਰੋ"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"ਮਿਟਾਓ"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"ਸਕ੍ਰੀਨ ਦੀ ਰਿਕਾਰਡਿੰਗ ਰੱਦ ਕੀਤੀ ਗਈ"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਰੱਖਿਅਤ ਕੀਤੀ ਗਈ, ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਮਿਟਾਇਆ ਗਿਆ"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਮਿਟਾਉਣ ਦੌਰਾਨ ਗੜਬੜ ਹੋਈ"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"ਇਜਾਜ਼ਤਾਂ ਪ੍ਰਾਪਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਚੋਣਾਂ"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ਇੱਕ ਮੀਡੀਆ ਪਲੇਅਰ (MTP) ਦੇ ਤੌਰ ਤੇ ਮਾਊਂਟ ਕਰੋ"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ਇੱਕ ਕੈਮਰੇ (PTP) ਦੇ ਤੌਰ ਤੇ ਮਾਊਂਟ ਕਰੋ"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"ਤੁਸੀਂ ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਆਮ ਤੌਰ \'ਤੇ ਖਾਰਜ ਕਰਦੇ ਹੋ। \nਕੀ ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ਕੀ ਇਨ੍ਹਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰੋ"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖੋ"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"ਛੋਟਾ ਕਰੋ"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"ਚਾਰਜਿੰਗ ਦੌਰਾਨ ਪ੍ਰਤੀਸ਼ਤਤਾ ਦਿਖਾਓ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
<item msgid="3327323682209964956">"ਇਸ ਪ੍ਰਤੀਕ ਨੂੰ ਨਾ ਦਿਖਾਓ"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"ਘੱਟ ਤਰਜੀਹ ਵਾਲੇ ਸੂਚਨਾ ਪ੍ਰਤੀਕਾਂ ਨੂੰ ਦਿਖਾਓ"</string>
<string name="other" msgid="4060683095962566764">"ਹੋਰ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਡਿਵਾਈਡਰ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ਖੱਬੇ ਪੂਰੀ ਸਕ੍ਰੀਨ"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"ਸਥਾਪਤ ਕੀਤੇ ਬਿਨਾਂ ਐਪ ਖੋਲ੍ਹੀ ਗਈ।"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"ਸਥਾਪਤ ਕੀਤੇ ਬਿਨਾਂ ਐਪ ਖੋਲ੍ਹੀ ਗਈ। ਹੋਰ ਜਾਣਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="app_info" msgid="6856026610594615344">"ਐਪ ਜਾਣਕਾਰੀ"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ਵੈੱਬ \'ਤੇ ਜਾਓ"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ਬ੍ਰਾਊਜ਼ਰ \'ਤੇ ਜਾਓ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ਮੋਬਾਈਲ ਡਾਟਾ"</string>
<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">"ਵਾਈ-ਫਾਈ ਬੰਦ ਹੈ"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"ਸੈਟਿੰਗਾਂ"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"ਸਮਝ ਲਿਆ"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI ਹੀਪ ਡੰਪ ਕਰੋ"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ।"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"ਐਪਲੀਕੇਸ਼ਨਾਂ ਤੁਹਾਡੇ <xliff:g id="TYPES_LIST">%s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀਆਂ ਹਨ।"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"ਐਪ ਖੋਲ੍ਹੋ"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"ਰੱਦ ਕਰੋ"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ਠੀਕ ਹੈ"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"ਸੈਟਿੰਗਾਂ"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> ਪਿਛਲੇ <xliff:g id="TIME">%3$d</xliff:g> ਮਿੰਟ ਤੋਂ ਤੁਹਾਡੇ <xliff:g id="TYPE">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="TYPE">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀਆਂ ਹਨ"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="TYPES_LIST">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"ਕੈਮਰਾ"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ਟਿਕਾਣਾ"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 2510aba..f9c1c79 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Spróbuj jeszcze raz wykonać zrzut ekranu"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Nie można zapisać zrzutu ekranu, bo brakuje miejsca w pamięci"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Nie możesz wykonać zrzutu ekranu, bo nie zezwala na to aplikacja lub Twoja organizacja."</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Rejestrowanie zawartości ekranu"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Stałe powiadomienie o sesji rejestrowania zawartości ekranu"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Rozpocznij rejestrowanie"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Nagraj tekst lektora"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Pokaż dotknięcia"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Zatrzymaj"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Wstrzymaj"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Wznów"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Anuluj"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Udostępnij"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Usuń"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Anulowano rejestrowanie zawartości ekranu"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Zapisano nagranie zawartości ekranu – kliknij, by je obejrzeć"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Usunięto nagranie zawartości ekranu"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Błąd podczas usuwania nagrania zawartości ekranu"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Nie udało się uzyskać uprawnień"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB – opcje przesyłania plików"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Podłącz jako odtwarzacz multimedialny (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Podłącz jako aparat (PTP)"</string>
@@ -588,15 +604,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Powiadomienia"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Te powiadomienia nie będą już wyświetlane"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Te powiadomienia zostaną zminimalizowane"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Zwykle odrzucasz te powiadomienia. \nNadal je pokazywać?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Nadal pokazywać te powiadomienia?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Zablokuj powiadomienia"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Pokazuj nadal"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimalizuj"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -735,8 +757,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Pokazuj ikony powiadomień o niskim priorytecie"</string>
<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>
@@ -816,7 +837,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Aplikacja została otwarta bez zainstalowania."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Aplikacja została otwarta bez zainstalowania. Kliknij, by dowiedzieć się więcej."</string>
<string name="app_info" msgid="6856026610594615344">"O aplikacji"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Wejdź na stronę internetową"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Otwórz przeglądarkę"</string>
<string name="mobile_data" msgid="7094582042819250762">"Komórkowa transmisja danych"</string>
<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">"Wi-Fi jest wyłączone"</string>
@@ -848,4 +869,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Ustawienia"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Zrzut stosu SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"Aplikacja <xliff:g id="APP">%1$s</xliff:g> używa: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikacje używają: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Otwórz"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Anuluj"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Ustawienia"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Aplikacja <xliff:g id="APP">%1$s</xliff:g> używa: <xliff:g id="TYPE">%2$s</xliff:g> od <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Aplikacje <xliff:g id="APPS">%1$s</xliff:g> używają: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"Aplikacja <xliff:g id="APP">%1$s</xliff:g> używa: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"aparat"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"lokalizacja"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 507c6b0..cd469e5 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Tente fazer a captura de tela novamente"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Não é possível salvar a captura de tela, porque não há espaço suficiente"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"O app ou a organização não permitem capturas de tela"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Gravação de tela"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notificação contínua para uma sessão de gravação de tela"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Iniciar gravação"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Gravar narração"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Mostrar toques"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Parar"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pausar"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Retomar"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancelar"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Compartilhar"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Excluir"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Gravação de tela cancelada"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Gravação de tela salva, toque para ver"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Gravação de tela excluída"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Erro ao excluir a gravação de tela"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Não foi possível acessar as permissões"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opções transf. arq. por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Conectar como media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montar como uma câmera (PTP)"</string>
@@ -582,14 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificações"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Você deixará de ver essas notificações"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Essas notificações serão minimizadas"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Geralmente você dispensa essas notificações. \nQuer que elas continuem a ser exibidas?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Continuar mostrando essas notificações?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Bloquear notificações"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuar mostrando"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -804,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"O app é aberto sem precisar ser instalado."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"O app é aberto sem precisar ser instalado. Toque para saber mais."</string>
<string name="app_info" msgid="6856026610594615344">"Informações do app"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Acessar a Web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Abrir o navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dados móveis"</string>
<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">"O Wi-Fi está desativado"</string>
@@ -836,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Configurações"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Ok"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Despejar pilha SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"O app <xliff:g id="APP">%1$s</xliff:g> está usando <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplicativos estão usando <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Abrir app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancelar"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Ok"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Config."</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"O app <xliff:g id="APP">%1$s</xliff:g> está usando <xliff:g id="TYPE">%2$s</xliff:g> há <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Os apps <xliff:g id="APPS">%1$s</xliff:g> estão usando <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"O app <xliff:g id="APP">%1$s</xliff:g> está usando <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"câmera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"localização"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microfone"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index f3c993f..8006f33 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -70,10 +70,26 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Experimente voltar a efetuar a captura de ecrã."</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Não é possível guardar a captura de ecrã devido a espaço de armazenamento limitado."</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"A aplicação ou a sua entidade não permitem tirar capturas de ecrã"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Gravação de ecrã"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notificação persistente de uma sessão de gravação de ecrã"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Iniciar gravação"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Gravar voz-off"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Mostrar toques"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Parar"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Colocar em pausa"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Retomar"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancelar"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Partilhar"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Eliminar"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Gravação de ecrã cancelada."</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Gravação de ecrã guardada. Toque para ver."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Gravação de ecrã eliminada."</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Erro ao eliminar a gravação de ecrã."</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Falha ao obter as autorizações."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opções de transm. de fich. USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montar como leitor de multimédia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montar como câmara (PTP)"</string>
- <string name="installer_cd_button_title" msgid="2312667578562201583">"Inst. aplic. Transf. Ficheiros do Android para Mac"</string>
+ <string name="installer_cd_button_title" msgid="2312667578562201583">"Inst. app Transf. Ficheiros do Android para Mac"</string>
<string name="accessibility_back" msgid="567011538994429120">"Anterior"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Página inicial"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
@@ -457,7 +473,7 @@
<string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"O seu perfil pessoal está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"O seu dispositivo é gerido pelo <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"A <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utiliza o <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para gerir o seu dispositivo."</string>
- <string name="monitoring_description_do_body" msgid="3639594537660975895">"O administ. pode monitorizar e gerir definições, acesso empresarial, aplic. e dados associados ao dispositivo, bem como inf. de localiz. do disp."</string>
+ <string name="monitoring_description_do_body" msgid="3639594537660975895">"O administ. pode monitorizar e gerir definições, acesso empresarial, app e dados associados ao dispositivo, bem como inf. de localiz. do disp."</string>
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saiba mais"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string>
@@ -582,14 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificações"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Nunca mais verá estas notificações."</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Estas notificações serão minimizadas."</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Normalmente, ignora estas notificações. \nPretende continuar a mostrá-las?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Pretende continuar a ver estas notificações?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Parar notificações"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuar a mostrar"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -804,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"A aplicação é aberta sem ser instalada."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"A aplicação é aberta sem ser instalada. Toque para saber mais."</string>
<string name="app_info" msgid="6856026610594615344">"Info. da aplicação"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Aceder à Web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Ir para o navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dados móveis"</string>
<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">"Wi-Fi desativado"</string>
@@ -836,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Definições"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Compreendi"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Cp ár. di. da. SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"A aplicação <xliff:g id="APP">%1$s</xliff:g> está a utilizar o(a) <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"As aplicações estão a utilizar o(a) <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Abrir aplicação"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancelar"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Definições"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"A aplicação <xliff:g id="APP">%1$s</xliff:g> está a utilizar o(a) <xliff:g id="TYPE">%2$s</xliff:g> há <xliff:g id="TIME">%3$d</xliff:g> min."</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"As aplicações <xliff:g id="APPS">%1$s</xliff:g> estão a utilizar o(a) <xliff:g id="TYPE">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"A aplicação <xliff:g id="APP">%1$s</xliff:g> está a utilizar o(a) <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"câmara"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"localização"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microfone"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 507c6b0..cd469e5 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Tente fazer a captura de tela novamente"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Não é possível salvar a captura de tela, porque não há espaço suficiente"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"O app ou a organização não permitem capturas de tela"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Gravação de tela"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notificação contínua para uma sessão de gravação de tela"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Iniciar gravação"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Gravar narração"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Mostrar toques"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Parar"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pausar"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Retomar"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Cancelar"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Compartilhar"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Excluir"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Gravação de tela cancelada"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Gravação de tela salva, toque para ver"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Gravação de tela excluída"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Erro ao excluir a gravação de tela"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Não foi possível acessar as permissões"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opções transf. arq. por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Conectar como media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montar como uma câmera (PTP)"</string>
@@ -582,14 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificações"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Você deixará de ver essas notificações"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Essas notificações serão minimizadas"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Geralmente você dispensa essas notificações. \nQuer que elas continuem a ser exibidas?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Continuar mostrando essas notificações?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Bloquear notificações"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuar mostrando"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -804,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"O app é aberto sem precisar ser instalado."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"O app é aberto sem precisar ser instalado. Toque para saber mais."</string>
<string name="app_info" msgid="6856026610594615344">"Informações do app"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Acessar a Web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Abrir o navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dados móveis"</string>
<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">"O Wi-Fi está desativado"</string>
@@ -836,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Configurações"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Ok"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Despejar pilha SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"O app <xliff:g id="APP">%1$s</xliff:g> está usando <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplicativos estão usando <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Abrir app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Cancelar"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Ok"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Config."</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"O app <xliff:g id="APP">%1$s</xliff:g> está usando <xliff:g id="TYPE">%2$s</xliff:g> há <xliff:g id="TIME">%3$d</xliff:g> min"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Os apps <xliff:g id="APPS">%1$s</xliff:g> estão usando <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"O app <xliff:g id="APP">%1$s</xliff:g> está usando <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"câmera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"localização"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microfone"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 53d8277..43a0825 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Încercați să faceți din nou o captură de ecran"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Captura de ecran nu poate fi salvată din cauza spațiului de stocare limitat"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Crearea capturilor de ecran nu este permisă de aplicație sau de organizația dvs."</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Se înregistrează ecranul"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Notificare în curs pentru o sesiune de înregistrare a ecranului"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Începeți înregistrarea"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Înregistrați vocal"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Afișați atingerile"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Opriți"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Întrerupeți"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Reluați"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Anulați"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Trimiteți"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Ștergeți"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Înregistrarea ecranului a fost anulată"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Înregistrarea ecranului a fost salvată. Atingeți pentru vizualizare"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Înregistrarea ecranului a fost ștearsă."</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Eroare la ștergerea înregistrării ecranului"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Nu s-au obținut permisiunile"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opțiuni pentru transferul de fișiere prin USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montați ca player media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montați drept cameră foto (PTP)"</string>
@@ -585,15 +601,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificări"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Nu veți mai vedea aceste notificări"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Aceste notificări vor fi minimizate"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"De regulă respingeți aceste notificări. \nDoriți să fie afișate în continuare?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Doriți să continuați afișarea acestor notificări?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Opriți notificările"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuați afișarea"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizați"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -730,8 +752,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Afișați pictogramele de notificare cu prioritate redusă"</string>
<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>
@@ -811,7 +832,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Aplicația a fost deschisă fără a fi instalată."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Aplicația a fost deschisă fără a fi instalată. Atingeți pentru a afla mai multe."</string>
<string name="app_info" msgid="6856026610594615344">"Informații despre aplicație"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Accesați pe web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Accesați browserul"</string>
<string name="mobile_data" msgid="7094582042819250762">"Date mobile"</string>
<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">"Conexiunea Wi-Fi este dezactivată"</string>
@@ -843,4 +864,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Setări"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Date SysUI memorie"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> folosește <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplicațiile folosesc <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Deschideți aplicația"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Anulați"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Setări"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> folosește <xliff:g id="TYPE">%2$s</xliff:g> de <xliff:g id="TIME">%3$d</xliff:g> minute"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> folosesc <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> folosește <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"cameră foto"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"locație"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"microfon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index b180f87..fb74332 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Попробуйте сделать скриншот снова."</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Не удалось сохранить скриншот: недостаточно места."</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Не удалось сделать скриншот: нет разрешения от приложения или организации."</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Запись видео с экрана"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Текущее уведомление для записи видео с экрана"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Начать запись"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Записать закадровую речь"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Показывать нажатия"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Остановить"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Приостановить"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Возобновить"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Отмена"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Поделиться"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Удалить"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Запись видео с экрана отменена"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Запись видео с экрана сохранена. Чтобы открыть ее, нажмите на уведомление."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Запись видео с экрана удалена"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Не удалось удалить запись видео с экрана"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Не удалось получить необходимые разрешения"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Параметры передачи через USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Подключить как мультимедийный проигрыватель (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Установить как камеру (PTP)"</string>
@@ -588,15 +604,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Обычно вы скрываете эти уведомления.\nПоказывать их?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Показывать эти уведомления?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Отключить уведомления"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Показывать"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Свернуть"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -735,8 +757,7 @@
<item msgid="2139628951880142927">"Показывать процент во время зарядки (по умолчанию)"</item>
<item msgid="3327323682209964956">"Не показывать этот значок"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Показывать значки уведомлений с низким приоритетом"</string>
<string name="other" msgid="4060683095962566764">"Другое"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Разделитель экрана"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Левый во весь экран"</string>
@@ -816,7 +837,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Приложение готово к работе, установка не требуется."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Приложение готово к работе, установка не требуется. Нажмите, чтобы узнать больше."</string>
<string name="app_info" msgid="6856026610594615344">"О приложении"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Перейти в браузер"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Перейти в браузер"</string>
<string name="mobile_data" msgid="7094582042819250762">"Моб. Интернет"</string>
<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">"Модуль Wi-Fi отключен"</string>
@@ -848,4 +869,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Открыть настройки"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"ОК"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Передача SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"В приложении \"<xliff:g id="APP">%1$s</xliff:g>\" используется <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"В приложениях используется <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Открыть"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Отмена"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ОК"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Настройки"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"В приложении \"<xliff:g id="APP">%1$s</xliff:g>\" уже <xliff:g id="TIME">%3$d</xliff:g> мин. используется <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"В нескольких приложениях (<xliff:g id="APPS">%1$s</xliff:g>) используется <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"В приложении \"<xliff:g id="APP">%1$s</xliff:g>\" используется <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"камера"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"местоположение"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"микрофон"</string>
</resources>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 0eae821..3efd747 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"තිර රුව නැවත ගැනීමට උත්සාහ කරන්න"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"සීමිත ගබඩා ඉඩ නිසා තිර රුව සුරැකිය නොහැකිය"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"තිර රූ ගැනීමට යෙදුම හෝ ඔබගේ සංවිධානය ඉඩ නොදේ"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"තිර පටිගත කිරීම"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"තිර පටිගත කිරීමේ සැසියක් සඳහා කෙරෙන දැනුම් දීම"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"පටිගත කිරීම ආරම්භ කරන්න"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"පසුබිම් කථනය පටිගත කරන්න"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"තට්ටු කිරීම් පෙන්වන්න"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"නතර කරන්න"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"විරාම කරන්න"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"නැවත අරඹන්න"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"අවලංගු කරන්න"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"බෙදා ගන්න"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"මකන්න"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"තිර පටිගත කිරීම අවලංගු කරන ලදී"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"තිර පටිගත කිරීම සුරකින ලදී, බැලීමට තට්ටු කරන්න"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"තිර පටිගත කිරීම මකන ලදී"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"තිර පටිගත කිරීම මැකීමේ දෝෂයකි"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"අවසර ලබා ගැනීමට අසමත් විය"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ගොනු හුවමාරු විකල්ප"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"මධ්ය ධාවකයක් (MTP) ලෙස සවි කරන්න"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"කැමරාවක් (PTP) ලෙස සවි කරන්න"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"ඔබ සාමාන්යයෙන් මෙවැනි දැනුම්දීම් ඉවත දමයි. \nඒවා දිගටම පෙන්වන්නද?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"මෙම දැනුම්දීම් පෙන්වමින් තබන්නද?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"දැනුම්දීම් නවත්වන්න"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"පෙන්වමින් තබන්න"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"කුඩා කරන්න"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"ආරෝපණය වන විට ප්රතිශතය පෙන්වන්න (පෙරනිමි)"</item>
<item msgid="3327323682209964956">"මෙම නිරූපකය නොපෙන්වන්න"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"අඩු ප්රමුඛතා දැනුම්දීම් අයිකන පෙන්වන්න"</string>
<string name="other" msgid="4060683095962566764">"වෙනත්"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"බෙදුම්-තිර වෙන්කරණය"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"වම් පූර්ණ තිරය"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"ස්ථාපනය නොකර යෙදුම විවෘත කර ඇත."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"ස්ථාපනය නොකර යෙදුම විවෘත කර ඇත. තව දැන ගැනීමට තට්ටු කරන්න."</string>
<string name="app_info" msgid="6856026610594615344">"යෙදුම් තොරතුරු"</string>
- <string name="go_to_web" msgid="1106022723459948514">"වෙබය වෙත යන්න"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"බ්රවුසරය වෙත යන්න"</string>
<string name="mobile_data" msgid="7094582042819250762">"ජංගම දත්ත"</string>
<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">"Wi-Fi ක්රියා විරහිතයි"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"සැකසීම්"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"තේරුණා"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> ඔබේ <xliff:g id="TYPES_LIST">%2$s</xliff:g> භාවිත කරමින් සිටී."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"යෙදුම් ඔබේ <xliff:g id="TYPES_LIST">%s</xliff:g> භාවිත කරමින් සිටී."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"යෙදුම විවෘත කරන්න"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"අවලංගු කරන්න"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"හරි"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"සැකසීම්"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> අවසන් මිනි <xliff:g id="TIME">%3$d</xliff:g> සඳහා ඔබේ <xliff:g id="TYPE">%2$s</xliff:g> භාවිත කරමින් සිටී"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> ඔබේ <xliff:g id="TYPE">%2$s</xliff:g> භාවිත කරමින් සිටී"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> ඔබේ <xliff:g id="TYPES_LIST">%2$s</xliff:g> භාවිත කරමින් සිටී"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"කැමරාව"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ස්ථානය"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"මයික්රෝෆෝනය"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 6c6ad14..e11acd6 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Skúste snímku urobiť znova"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Snímka obrazovky sa nedá uložiť z dôvodu nedostatku miesta v úložisku"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Vytváranie snímok obrazovky je zakázané aplikáciou alebo vašou organizáciou"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Záznam obrazovky"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Zobrazuje sa upozornenie týkajúce sa relácie záznamu obrazovky"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Spustiť zaznamenávanie"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Hlasový vstup počas záznamu"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Zobrazovať klepnutia"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Ukončiť"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pozastaviť"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Obnoviť"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Zrušiť"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Zdieľať"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Odstrániť"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Záznam obrazovky bol zrušený"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Záznam obrazovky bol uložený, zobrazíte ho klepnutím"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Záznam obrazovky bol odstránený"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Pri odstraňovaní záznamu obrazovky sa vyskytla chyba"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Nepodarilo sa získať povolenia"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti prenosu súborov USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pripojiť ako prehrávač médií (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pripojiť ako fotoaparát (PTP)"</string>
@@ -198,9 +214,9 @@
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Režim v lietadle je zapnutý."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"úplné ticho"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"iba budíky"</string>
- <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Nerušiť"</string>
- <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Stav Nerušiť je vypnutý."</string>
- <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Stav Nerušiť je zapnutý."</string>
+ <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Režim bez vyrušení"</string>
+ <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Režim bez vyrušení je vypnutý."</string>
+ <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Režim bez vyrušení je zapnutý."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth"</string>
<string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Rozhranie Bluetooth je vypnuté."</string>
<string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Rozhranie Bluetooth je zapnuté."</string>
@@ -264,7 +280,7 @@
<string name="start_dreams" msgid="5640361424498338327">"Šetrič obrazovky"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
<string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Pridržaním ikon zobrazíte ďalšie možnosti"</string>
- <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nerušiť"</string>
+ <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Režim bez vyrušení"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Iba prioritné"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Iba budíky"</string>
<string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Úplné ticho"</string>
@@ -421,7 +437,7 @@
<string name="media_projection_remember_text" msgid="3103510882172746752">"Nabudúce nezobrazovať"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Vymazať všetko"</string>
<string name="manage_notifications_text" msgid="2386728145475108753">"Spravovať"</string>
- <string name="dnd_suppressing_shade_text" msgid="1904574852846769301">"Upozornenia sú pozastavené režimom Nerušiť"</string>
+ <string name="dnd_suppressing_shade_text" msgid="1904574852846769301">"Upozornenia sú pozastavené režimom bez vyrušení"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Spustiť"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Žiadne upozornenia"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil môže byť monitorovaný"</string>
@@ -588,15 +604,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Upozornenia"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Tieto upozornenia sa už nebudú zobrazovať"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Tieto upozornenia budú minimalizované"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Tieto upozornenia sa budú zobrazovať potichu"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Tieto upozornenia vás upozornia"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Tieto upozornenia zvyčajne odmietate. \nChcete ich naďalej zobrazovať?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Majú sa tieto upozornenia naďalej zobrazovať?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Prestať zobrazovať upozornenia"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Naďalej zobrazovať"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimalizovať"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Zobraziť potichu"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Zobraziť a upozorniť"</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>
@@ -678,9 +696,9 @@
<string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string>
<string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"Kalendár"</string>
<string name="tuner_full_zen_title" msgid="4540823317772234308">"Zobrazovať s ovládacími prvkami hlasitosti"</string>
- <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Nerušiť"</string>
+ <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Režim bez vyrušení"</string>
<string name="volume_dnd_silent" msgid="4363882330723050727">"Skratka tlačidiel hlasitosti"</string>
- <string name="volume_up_silent" msgid="7141255269783588286">"Pri zvýšení hlasitosti ukončiť režim Nerušiť"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Pri zvýšení hlasitosti ukončiť režim bez vyrušení"</string>
<string name="battery" msgid="7498329822413202973">"Batéria"</string>
<string name="clock" msgid="7416090374234785905">"Hodiny"</string>
<string name="headset" msgid="4534219457597457353">"Náhlavná súprava"</string>
@@ -735,8 +753,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Zobraziť ikony upozornení s nízkou prioritou"</string>
<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>
@@ -816,15 +833,15 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Aplikácia bola otvorená bez inštalácie."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Aplikácia bola otvorená bez inštalácie. Klepnutím zobrazíte ďalšie informácie."</string>
<string name="app_info" msgid="6856026610594615344">"Info o aplikácii"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Prejsť na internet"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Otvoriť prehliadač"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilné dáta"</string>
<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">"Pripojenie Wi‑Fi je vypnuté"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Rozhranie Bluetooth je vypnuté"</string>
- <string name="dnd_is_off" msgid="6167780215212497572">"Nastavenie Nerušiť je vypnuté"</string>
- <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"Režim Nerušiť bol zapnutý automatickým pravidlom (<xliff:g id="ID_1">%s</xliff:g>)."</string>
- <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"Režim Nerušiť bol zapnutý aplikáciou (<xliff:g id="ID_1">%s</xliff:g>)."</string>
- <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"Režim Nerušiť bol zapnutý automatickým pravidlom alebo aplikáciou."</string>
+ <string name="dnd_is_off" msgid="6167780215212497572">"Režim bez vyrušení je vypnutý"</string>
+ <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"Režim bez vyrušení bol zapnutý automatickým pravidlom (<xliff:g id="ID_1">%s</xliff:g>)."</string>
+ <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"Režim bez vyrušení bol zapnutý aplikáciou (<xliff:g id="ID_1">%s</xliff:g>)."</string>
+ <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"Režim bez vyrušení bol zapnutý automatickým pravidlom alebo aplikáciou."</string>
<string name="qs_dnd_until" msgid="3469471136280079874">"Do <xliff:g id="ID_1">%s</xliff:g>"</string>
<string name="qs_dnd_keep" msgid="1825009164681928736">"Ponechať"</string>
<string name="qs_dnd_replace" msgid="8019520786644276623">"Nahradiť"</string>
@@ -848,4 +865,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Nastavenia"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Dobre"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Výpis haldy SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> používa zoznam <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikácie používajú zoznam <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Otvoriť"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Zrušiť"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Nastavenia"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> používa typ <xliff:g id="TYPE">%2$s</xliff:g> posl. <xliff:g id="TIME">%3$d</xliff:g> min."</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Aplikácie <xliff:g id="APPS">%1$s</xliff:g> používajú typ <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> používa zoznam <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"fotoaparát"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"poloha"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofón"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index f94ee60..b050497 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Poskusite znova ustvariti posnetek zaslona"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Shranjevanje posnetka zaslona ni mogoče zaradi omejenega prostora za shranjevanje"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Aplikacija ali vaša organizacija ne dovoljuje posnetkov zaslona"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Snemanje zaslona"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Nenehno obveščanje o seji snemanja zaslona"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Začni snemanje"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Snemanje spremnega govora"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Prikaz dotikov"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Ustavi"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Začasno ustavi"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Nadaljuj"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Prekliči"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Deli"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Izbriši"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Snemanje zaslona je preklicano"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Videoposnetek zaslona je shranjen, dotaknite se za ogled"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Videoposnetek zaslona je izbrisan"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Napaka pri brisanju videoposnetka zaslona"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Dovoljenj ni bilo mogoče pridobiti"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti prenosa datotek prek USB-ja"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Vpni kot predvajalnik (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Vpni kot fotoaparat (PTP)"</string>
@@ -588,15 +604,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Obvestila"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Ta obvestila ne bodo več prikazana"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Ta obvestila bodo minimirana"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Ta obvestila običajno opustite. \nAli želite, da se še naprej prikazujejo?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Želite, da so ta obvestila še naprej prikazana?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Ustavi prikazovanje obvestil"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Prikazuj še naprej"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimiraj"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -735,8 +757,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Pokaži ikone obvestil z nizko stopnjo prednosti"</string>
<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>
@@ -816,7 +837,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Aplikacija je odprta brez namestitve."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Aplikacija je odprta brez namestitve. Dotaknite se, če želite izvedeti več."</string>
<string name="app_info" msgid="6856026610594615344">"Podatki o aplikaciji"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Pojdi v splet"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Odpri brskalnik"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilni podatki"</string>
<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">"Wi-Fi je izklopljen"</string>
@@ -848,4 +869,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Nastavitve"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"V redu"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Izvoz kopice SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> uporablja <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikacije uporabljajo <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Odpri apl."</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Prekliči"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"V redu"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Nastavitve"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> uporablja <xliff:g id="TYPE">%2$s</xliff:g> zadnjih toliko minut: <xliff:g id="TIME">%3$d</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Aplikacije <xliff:g id="APPS">%1$s</xliff:g> uporabljajo <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> uporablja <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"fotoaparat"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"lokacijo"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 7869cd9..146e91c 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Provo ta nxjerrësh përsëri pamjen e ekranit"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Pamja e ekranit nuk mund të ruhet për shkak të hapësirës ruajtëse të kufizuar"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Nxjerrja e pamjeve të ekranit nuk lejohet nga aplikacioni ose organizata jote."</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Regjistrimi i ekranit"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Njoftim i vazhdueshëm për një seancë regjistrimi të ekranit"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Nis regjistrimin"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Regjistro zërin e mikrofonit"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Shfaq trokitjet"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Ndalo"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Ndërprit"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Vazhdo"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Anulo"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Ndaj"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Fshi"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Regjistrimi i ekranit u anulua"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Regjistrimi i ekranit u ruajt, trokit për ta parë"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Regjistrimi i ekranit u fshi"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Gabim gjatë fshirjes së regjistrimit të ekranit"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Marrja e lejeve dështoi"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opsionet e transferimit të dosjeve të USB-së"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Lidh si një lexues \"media\" (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montoje si kamerë (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Njoftime"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Nuk do t\'i shikosh më këto njoftime"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Këto njoftime do të minimizohen"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Këto njoftime ti zakonisht i largon. \nDëshiron të vazhdosh t\'i shfaqësh ato?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Do të vazhdosh t\'i shfaqësh këto njoftime?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Ndalo njoftimet"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Vazhdo të shfaqësh"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimizo"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Shfaq ikonat e njoftimeve me përparësi të ulët"</string>
<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>
@@ -797,7 +818,7 @@
<string name="tuner_app" msgid="3507057938640108777">"Aplikacioni <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="notification_channel_alerts" msgid="4496839309318519037">"Sinjalizimet"</string>
<string name="notification_channel_battery" msgid="5786118169182888462">"Bateria"</string>
- <string name="notification_channel_screenshot" msgid="6314080179230000938">"Pamjet e ekranit"</string>
+ <string name="notification_channel_screenshot" msgid="6314080179230000938">"Pamje ekrani"</string>
<string name="notification_channel_general" msgid="4525309436693914482">"Mesazhe të përgjithshme"</string>
<string name="notification_channel_storage" msgid="3077205683020695313">"Hapësira ruajtëse"</string>
<string name="notification_channel_hints" msgid="7323870212489152689">"Sugjerimet"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Aplikacioni u hap pa u instaluar."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Aplikacioni u hap pa u instaluar. Trokit për të mësuar më shumë."</string>
<string name="app_info" msgid="6856026610594615344">"Informacioni mbi aplikacionin"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Shko në ueb"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Shko te shfletuesi"</string>
<string name="mobile_data" msgid="7094582042819250762">"Të dhënat celulare"</string>
<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">"Wi-Fi është joaktiv"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Cilësimet"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"E kuptova"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Hidh grumbullin SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> po përdor <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Aplikacionet po përdorin <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Hap aplikacionin"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Anulo"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Në rregull"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Cilësimet"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> po përdor <xliff:g id="TYPE">%2$s</xliff:g> për <xliff:g id="TIME">%3$d</xliff:g> minutat e fundit"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> po përdor <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> po përdor <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamerën"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"vendndodhjen"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofonin"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 420056e..a838a0b 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Пробајте да поново направите снимак екрана"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Чување снимка екрана није успело због ограниченог меморијског простора"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Апликација или организација не дозвољавају прављење снимака екрана"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Снимање екрана"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Обавештење о сесији снимања екрана је активно"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Започни снимање"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Сними пренос гласа"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Приказуј додире"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Заустави"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Паузирај"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Настави"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Откажи"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Дели"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Избриши"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Снимање екрана је отказано"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Снимак екрана је сачуван, додирните да бисте прегледали"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Снимак екрана је избрисан"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Дошло је до проблема при брисању снимка екрана"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Преузимање дозвола није успело"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Опције USB преноса датотека"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Прикључи као медија плејер (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Прикључи као камеру (PTP)"</string>
@@ -585,15 +601,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Обично одбацујете ова обавештења. \nЖелите ли да се и даље приказују?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Желите ли да се ова обавештења и даље приказују?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Престани да приказујеш обавештења"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Настави да приказујеш"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Умањи"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -730,8 +752,7 @@
<item msgid="2139628951880142927">"Прикажи проценат током пуњења (подразумевано)"</item>
<item msgid="3327323682209964956">"Не приказуј ову икону"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Прикажи иконе обавештења ниског приоритета"</string>
<string name="other" msgid="4060683095962566764">"Друго"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Разделник подељеног екрана"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Режим целог екрана за леви екран"</string>
@@ -811,7 +832,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Апликација се отворила без инсталирања."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Апликација се отворила без инсталирања. Додирните да бисте сазнали више."</string>
<string name="app_info" msgid="6856026610594615344">"Информације о апликацији"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Иди на веб"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Иди на прегледач"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобилни подаци"</string>
<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">"Wi-Fi је искључен"</string>
@@ -843,4 +864,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Подешавања"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Важи"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Издвоји SysUI мем."</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> користи <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Апликације користе <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Отвори"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Откажи"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Потврди"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Подешавања"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> током неколико последњих минута (<xliff:g id="TIME">%3$d</xliff:g>) користи <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> користе <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> користи <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"камеру"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"локацију"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"микрофон"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 238cc9b..7c4e88a 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Testa att ta en skärmdump igen"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Det går inte att spara skärmdumpen eftersom lagringsutrymmet inte räcker"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Appen eller organisationen tillåter inte att du tar skärmdumpar"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Skärminspelning"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Avisering om att skärminspelning pågår"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Börja spela in"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Spela in med mikrofondubbning"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Visa tryck"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Stoppa"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pausa"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Återuppta"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Avbryt"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Dela"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Radera"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Skärminspelningen har avbrutits"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Skärminspelningen har sparats, tryck här om du vill titta på den"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Skärminspelningen har raderats"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Det gick inte att radera skärminspelningen"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Behörighet saknas"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Överföringsalternativ"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montera som mediaspelare (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montera som kamera (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Aviseringar"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"De här aviseringarna visas inte längre"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Dessa aviseringar minimeras"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Du brukar avvisa de här aviseringarna. \nVill du fortsätta att visa dem?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Vill du fortsätta visa de här aviseringarna?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stoppa aviseringar"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Fortsätt visa"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Minimera"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Visa ikoner för aviseringar med låg prioritet"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Appen öppnades utan installation."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Appen öppnades utan installation. Tryck om du vill veta mer."</string>
<string name="app_info" msgid="6856026610594615344">"Info om appen"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Öppna webbplatsen"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Öppna webbläsaren"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobildata"</string>
<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">"Wi-Fi är inaktiverat"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Inställningar"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dumpa SysUI-heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="TYPES_LIST">%2$s</xliff:g> används av <xliff:g id="APP">%1$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"<xliff:g id="TYPES_LIST">%s</xliff:g> används av appar."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Öppna app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Avbryt"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Inställn."</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="TYPE">%2$s</xliff:g> har använts av <xliff:g id="APP">%1$s</xliff:g> under de senaste <xliff:g id="TIME">%3$d</xliff:g> minuterna"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="TYPE">%2$s</xliff:g> används av <xliff:g id="APPS">%1$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="TYPES_LIST">%2$s</xliff:g> används av <xliff:g id="APP">%1$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"plats"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 54e8544..fbc1022 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Jaribu kupiga picha ya skrini tena"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Imeshindwa kuhifadhi picha ya skrini kwa sababu nafasi haitoshi"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Programu au shirika lako halikuruhusu kupiga picha za skrini"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Kurekodi Skrini"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Arifa inayoendelea ya kipindi cha kurekodi skrini"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Anza Kurekodi"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Rekodi sauti"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Onyesha unapogusa"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Acha"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Sitisha"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Endelea"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Ghairi"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Shiriki"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Futa"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Imeghairi mchakato wa kurekodi skrini"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Imehifadhi rekodi ya skrini, gusa ili uangalie"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Imefuta rekodi ya skrini"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Hitilafu imetokea wakati wa kufuta rekodi ya skrini"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Imeshindwa kupata ruhusa"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Machaguo ya uhamisho wa faili la USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Angika kama kichezaji cha maudhui (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Angika kama kamera (PTP)"</string>
@@ -582,14 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Arifa"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Hutaona tena arifa hizi"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Arifa hizi zitapunguzwa"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Wewe huondoa arifa hizi. \nUngependa kuzionyesha?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Ungependa kuendelea kuonyesha arifa hizi?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Acha kuonyesha arifa"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Endelea kuonyesha"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Punguza"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -804,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Programu inafunguka bila kusakinishwa."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Programu inafunguka bila kusakinishwa. Gusa ili upate maelezo zaidi."</string>
<string name="app_info" msgid="6856026610594615344">"Maelezo ya programu"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Nenda kwenye wavuti"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Tumia kivinjari"</string>
<string name="mobile_data" msgid="7094582042819250762">"Data ya simu"</string>
<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">"Wi-Fi imezimwa"</string>
@@ -836,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Mipangilio"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Nimeelewa"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> inatumia <xliff:g id="TYPES_LIST">%2$s</xliff:g> yako."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Programu zinatumia <xliff:g id="TYPES_LIST">%s</xliff:g> yako."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Fungua programu"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Ghairi"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Sawa"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Mipangilio"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> imekuwa ikitumia <xliff:g id="TYPE">%2$s</xliff:g> yako kwa dakika <xliff:g id="TIME">%3$d</xliff:g> zilizopita"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> zinatumia <xliff:g id="TYPE">%2$s</xliff:g> yako"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> inatumia <xliff:g id="TYPES_LIST">%2$s</xliff:g> yako"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"mahali"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"maikrofoni"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index becd903..8ba895b 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"ஸ்கிரீன் ஷாட்டை மீண்டும் எடுக்க முயலவும்"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"போதுமான சேமிப்பிடம் இல்லாததால் ஸ்கிரீன்ஷாட்டைச் சேமிக்க முடியவில்லை"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ஸ்கிரீன் ஷாட்டுகளை எடுப்பதை, பயன்பாடு அல்லது உங்கள் நிறுவனம் அனுமதிக்கவில்லை"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"திரை ரெக்கார்டிங்"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"திரை ரெக்கார்டிங் அமர்விற்கான தொடர் அறிவிப்பு"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"ரெக்கார்டிங்கைத் தொடங்கு"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"வாய்ஸ் ஓவரை ரெக்கார்டு செய்"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"தட்டல்களைக் காட்டு"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"நிறுத்து"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"இடைநிறுத்து"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"மீண்டும் தொடங்கு"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"ரத்துசெய்"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"பகிர்"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"நீக்கு"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"திரை ரெக்கார்டிங் ரத்துசெய்யப்பட்டது"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"திரை ரெக்கார்டிங் சேமிக்கப்பட்டது, பார்க்கத் தட்டவும்"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"திரை ரெக்கார்டிங் நீக்கப்பட்டது"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"திரை ரெக்கார்டிங்கை நீக்குவதில் பிழை"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"அனுமதிகளைப் பெற இயலவில்லை"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB கோப்பு இடமாற்ற விருப்பங்கள்"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"(MTP) மீடியா பிளேயராக ஏற்று"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"(PTP) கேமராவாக ஏற்று"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"வழக்கமாக, இந்த அறிவிப்புகளை நிராகரிக்கிறீர்கள். \nதொடர்ந்து இவற்றைக் காட்டலாமா?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"இந்த அறிவிப்புகளைத் தொடர்ந்து காட்டவா?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"அறிவிப்புகளை நிறுத்து"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"அறிவிப்புகளைத் தொடர்ந்து காட்டு"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"சிறிதாக்கு"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"சார்ஜ் செய்யும் போது சதவீதத்தைக் காட்டு (இயல்பு)"</item>
<item msgid="3327323682209964956">"இந்த ஐகானைக் காட்டாதே"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"குறைந்த முன்னுரிமை உள்ள அறிவிப்பு ஐகான்களைக் காட்டு"</string>
<string name="other" msgid="4060683095962566764">"மற்றவை"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"திரையைப் பிரிக்கும் பிரிப்பான்"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"இடது புறம் முழுத் திரை"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"நிறுவ வேண்டிய தேவையில்லாமல் ஆப்ஸ் திறக்கப்பட்டது."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"நிறுவ வேண்டிய தேவையில்லாமல் ஆப்ஸ் திறக்கப்பட்டது. மேலும் அறியத் தட்டவும்."</string>
<string name="app_info" msgid="6856026610594615344">"பயன்பாட்டுத் தகவல்"</string>
- <string name="go_to_web" msgid="1106022723459948514">"இணையத்திற்குச் செல்"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"உலாவிக்குச் செல்"</string>
<string name="mobile_data" msgid="7094582042819250762">"மொபைல் டேட்டா"</string>
<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">"வைஃபை முடக்கத்தில் உள்ளது"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"அமைப்புகள்"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"சரி"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"உங்கள் <xliff:g id="TYPES_LIST">%2$s</xliff:g>ஐ <xliff:g id="APP">%1$s</xliff:g> ஆப்ஸ் பயன்படுத்துகிறது."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"உங்கள் <xliff:g id="TYPES_LIST">%s</xliff:g> ஆகியவற்றை ஆப்ஸ் பயன்படுத்துகின்றன."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"ஆப்ஸை திற"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"ரத்துசெய்"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"சரி"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"அமைப்புகள்"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"கடந்த <xliff:g id="TIME">%3$d</xliff:g> நிமிடங்களாக உங்கள் <xliff:g id="TYPE">%2$s</xliff:g>ஐ <xliff:g id="APP">%1$s</xliff:g> ஆப்ஸ் பயன்படுத்துகிறது"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"உங்கள் <xliff:g id="TYPE">%2$s</xliff:g> ஆகியவற்றை <xliff:g id="APPS">%1$s</xliff:g> ஆப்ஸ் பயன்படுத்துகின்றன"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"உங்கள் <xliff:g id="TYPES_LIST">%2$s</xliff:g>ஐ <xliff:g id="APP">%1$s</xliff:g> ஆப்ஸ் பயன்படுத்துகிறது"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"கேமரா"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"இருப்பிடம்"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"மைக்ரோஃபோன்"</string>
</resources>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index b895ae6..12dd31a 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"స్క్రీన్షాట్ తీయడానికి మళ్లీ ప్రయత్నించండి"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"నిల్వ స్థలం పరిమితంగా ఉన్న కారణంగా స్క్రీన్షాట్ను సేవ్ చేయడం సాధ్యపడదు"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"స్క్రీన్షాట్లు తీయడానికి యాప్ లేదా మీ సంస్థ అనుమతించలేదు"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"స్క్రీన్ రికార్డింగ్"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"స్క్రీన్ రికార్డ్ సెషన్ కోసం ఆన్గోయింగ్ నోటిఫికేషన్"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"రికార్డింగ్ను ప్రారంభించు"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"వాయిస్ఓవర్ని రికార్డ్ చేయి"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"నొక్కినవి చూపు"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"ఆపివేయి"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"పాజ్ చేయి"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"కొనసాగించు"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"రద్దు చేయి"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"షేర్ చేయి"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"తొలగించు"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"స్క్రీన్ రికార్డ్ రద్దు చేయబడింది"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"స్క్రీన్ రికార్డింగ్ సేవ్ చేయబడింది, చూడటం కోసం నొక్కండి"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"స్క్రీన్ రికార్డింగ్ తొలగించబడింది"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"స్క్రీన్ రికార్డింగ్ని తొలగిస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"అనుమతులను పొందడం విఫలమైంది"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB ఫైల్ బదిలీ ఎంపికలు"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"మీడియా ప్లేయర్గా (MTP) మౌంట్ చేయి"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"కెమెరాగా (PTP) మౌంట్ చేయి"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"మీరు సాధారణంగా ఈ నోటిఫికేషన్లను విస్మరిస్తారు. \nవాటి ప్రదర్శనను కొనసాగించాలా?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ఈ నోటిఫికేషన్లను చూపిస్తూ ఉండాలా?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"నోటిఫికేషన్లను ఆపివేయి"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"చూపిస్తూనే ఉండు"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"కుదించు"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"ఛార్జ్ అవుతున్నప్పుడు శాతాన్ని చూపు (డిఫాల్ట్)"</item>
<item msgid="3327323682209964956">"ఈ చిహ్నాన్ని చూపవద్దు"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"తక్కువ ప్రాధాన్యత నోటిఫికేషన్ చిహ్నాలను చూపించు"</string>
<string name="other" msgid="4060683095962566764">"ఇతరం"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"విభజన స్క్రీన్ విభాగిని"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"ఎడమవైపు పూర్తి స్క్రీన్"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"ఇన్స్టాల్ చేయకుండా యాప్ తెరవబడింది."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"ఇన్స్టాల్ చేయకుండా యాప్ తెరవబడింది. మరింత తెలుసుకోవడానికి నొక్కండి."</string>
<string name="app_info" msgid="6856026610594615344">"యాప్ సమాచారం"</string>
- <string name="go_to_web" msgid="1106022723459948514">"వెబ్కు వెళ్లు"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"బ్రౌజర్కు వెళ్లండి"</string>
<string name="mobile_data" msgid="7094582042819250762">"మొబైల్ డేటా"</string>
<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">"Wi-Fi ఆఫ్లో ఉంది"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"సెట్టింగ్లు"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"అర్థమైంది"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"డంప్ SysUI హీప్"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> మీ <xliff:g id="TYPES_LIST">%2$s</xliff:g>ని ఉపయోగిస్తోంది."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"అప్లికేషన్లు మీ <xliff:g id="TYPES_LIST">%s</xliff:g>ని ఉపయోగిస్తున్నాయి."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"యాప్ని తెరవండి"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"రద్దు చేయండి"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"సరే"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"సెట్టింగ్లు"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"గత <xliff:g id="TIME">%3$d</xliff:g> నిమిషాలుగా <xliff:g id="APP">%1$s</xliff:g> మీ <xliff:g id="TYPE">%2$s</xliff:g>ని ఉపయోగిస్తోంది"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> మీ <xliff:g id="TYPE">%2$s</xliff:g>ని ఉపయోగిస్తున్నాయి"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> మీ <xliff:g id="TYPES_LIST">%2$s</xliff:g>ను ఉపయోగిస్తోంది"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"కెమెరా"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"స్థానం"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"మైక్రోఫోన్"</string>
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 4df01ed..8efeabe 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"ลองบันทึกภาพหน้าจออีกครั้ง"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"บันทึกภาพหน้าจอไม่ได้เนื่องจากพื้นที่เก็บข้อมูลมีจำกัด"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"แอปหรือองค์กรของคุณไม่อนุญาตให้จับภาพหน้าจอ"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"การบันทึกหน้าจอ"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"การแจ้งเตือนต่อเนื่องสำหรับเซสชันการบันทึกหน้าจอ"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"เริ่มต้นการบันทึก"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"บันทึกเสียงบรรยาย"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"แสดงการแตะ"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"หยุด"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"หยุด"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"ทำต่อ"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"ยกเลิก"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"แชร์"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"ลบ"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"ยกเลิกการบันทึกหน้าจอแล้ว"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"บันทึกการบันทึกหน้าจอแล้ว แตะเพื่อดู"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"ลบการบันทึกหน้าจอแล้ว"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"เกิดข้อผิดพลาดในการลบการบันทึกหน้าจอ"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"ขอสิทธิ์ไม่สำเร็จ"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"ตัวเลือกการถ่ายโอนไฟล์ USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ต่อเชื่อมเป็นโปรแกรมเล่นสื่อ (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ต่อเชื่อมเป็นกล้องถ่ายรูป (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"โดยปกติแล้ว คุณจะปิดการแจ้งเตือนเหล่านี้ \nต้องการให้แสดงต่อไหม"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"แสดงการแจ้งเตือนเหล่านี้ต่อไปไหม"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"ปิดการแจ้งเตือน"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"แสดงต่อไป"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"ย่อเล็กสุด"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"แสดงเปอร์เซ็นต์เมื่อชาร์จ (ค่าเริ่มต้น)"</item>
<item msgid="3327323682209964956">"อย่าแสดงไอคอนนี้"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"แสดงไอคอนการแจ้งเตือนลำดับความสำคัญต่ำ"</string>
<string name="other" msgid="4060683095962566764">"อื่นๆ"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"เส้นแบ่งหน้าจอ"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"เต็มหน้าจอทางซ้าย"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"เปิดแอปได้โดยไม่ต้องติดตั้ง"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"เปิดแอปได้โดยไม่ต้องติดตั้ง แตะเพื่อดูข้อมูลเพิ่มเติม"</string>
<string name="app_info" msgid="6856026610594615344">"ข้อมูลแอป"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ไปที่เว็บ"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"ไปที่เบราว์เซอร์"</string>
<string name="mobile_data" msgid="7094582042819250762">"เน็ตมือถือ"</string>
<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">"Wi-Fi ปิดอยู่"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"การตั้งค่า"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"รับทราบ"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> ใช้<xliff:g id="TYPES_LIST">%2$s</xliff:g>ของคุณอยู่"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"หลายแอปพลิเคชันใช้<xliff:g id="TYPES_LIST">%s</xliff:g>ของคุณอยู่"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"เปิดแอป"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"ยกเลิก"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ตกลง"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"การตั้งค่า"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> ใช้<xliff:g id="TYPE">%2$s</xliff:g>ของคุณอยู่ในช่วง <xliff:g id="TIME">%3$d</xliff:g> นาทีที่ผ่านมา"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> ใช้<xliff:g id="TYPE">%2$s</xliff:g>ของคุณอยู่"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> ใช้<xliff:g id="TYPES_LIST">%2$s</xliff:g>ของคุณอยู่"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"กล้องถ่ายรูป"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"ตำแหน่ง"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"ไมโครโฟน"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 71a26ac..db6ce32f 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Subukang kumuhang muli ng screenshot"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Hindi ma-save ang screenshot dahil sa limitadong espasyo ng storage"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Hindi pinahihintulutan ng app o ng iyong organisasyon ang pagkuha ng mga screenshot"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Pag-record ng Screen"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Kasalukuyang notification para sa session ng pag-record ng screen"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Simulan ang Pag-record"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"I-record ang voiceover"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Ipakita ang mga pag-tap"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Ihinto"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"I-pause"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Ituloy"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Kanselahin"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Ibahagi"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"I-delete"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Kinansela ang pag-record ng screen"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Na-save ang pag-record ng screen, i-tap para tingnan"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Na-delete ang pag-record ng screen"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Error sa pag-delete sa pag-record ng screen"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Hindi nakuha ang mga pahintulot"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opsyon paglipat ng USB file"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"I-mount bilang isang media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"I-mount bilang camera (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Mga Notification"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Hindi mo na makikita ang mga notification na ito"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Imi-minimize ang mga notification na ito"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Karaniwan mong dini-dismiss ang mga ganitong notification. \nPatuloy na ipakita ang mga ito?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Patuloy na ipakita ang mga notification na ito?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Ihinto ang mga notification"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Patuloy na ipakita"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"I-minimize"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Ipakita ang mga icon ng notification na may mababang priority"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Nabuksan ang app nang hindi ini-install."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Nabuksan ang app nang hindi ini-install. I-tap para matuto pa."</string>
<string name="app_info" msgid="6856026610594615344">"Impormasyon ng app"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Pumunta sa web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Pumunta sa browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
<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">"Naka-off ang Wi-Fi"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Mga Setting"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Itapon SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"Ginagamit ng <xliff:g id="APP">%1$s</xliff:g> ang iyong <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Ginagamit ng mga application ang iyong <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Buksan: app"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Kanselahin"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Okay"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Mga Setting"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Ginagamit ng <xliff:g id="APP">%1$s</xliff:g> ang iyong <xliff:g id="TYPE">%2$s</xliff:g> para sa huling <xliff:g id="TIME">%3$d</xliff:g> (na) minuto"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Ginagamit ng <xliff:g id="APPS">%1$s</xliff:g> ang iyong <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"Ginagamit ng <xliff:g id="APP">%1$s</xliff:g> ang iyong <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"camera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"lokasyon"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikropono"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index b3809c4..c7a8150 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Tekrar ekran görüntüsü almayı deneyin"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Depolama alanı sınırlı olduğundan ekran görüntüsü kaydedilemiyor"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Uygulama veya kuruluşunuz, ekran görüntüsü alınmasına izin vermiyor."</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Ekran Kaydı"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Ekran kaydı oturumu için devam eden bildirim"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Kaydı Başlat"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Seslendirme kaydet"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Dokunmaları göster"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Durdur"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Duraklat"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Devam ettir"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"İptal"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Paylaş"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Sil"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Ekran kaydı iptal edildi"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Ekran kaydı tamamlandı, görüntülemek için dokunun"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Ekran kaydı silindi"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Ekran kaydı silinirken hata oluştu"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"İzinler alınamadı"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB dosya aktarım seçenekleri"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Medya oynatıcı olarak ekle (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Kamera olarak ekle (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Bildirimler"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Bu bildirimleri artık görmeyeceksiniz"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Bu bildirimler küçültülecek"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Bu bildirimleri genellikle kapatıyorsunuz. \nBildirimler gösterilmeye devam edilsin mi?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Bu bildirimler gösterilmeye devam edilsin mi?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Bildirimleri durdur"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Göstermeye devam et"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Küçült"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Düşük öncelikli bildirim simgelerini göster"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Uygulama yüklenmeden açıldı."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Uygulama yüklenmeden açıldı. Daha fazla bilgi için dokunun."</string>
<string name="app_info" msgid="6856026610594615344">"Uygulama bilgileri"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Web\'e git"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Tarayıcıya git"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobil veriler"</string>
<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">"Kablosuz bağlantı kapalı"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Ayarlar"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Anladım"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI Yığın Dökümü"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> şunları kullanıyor: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Uygulamalar şunları kullanıyor: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Uygulama aç"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"İptal"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Tamam"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Ayarlar"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> en az <xliff:g id="TIME">%3$d</xliff:g> dakikadır şunları kullanıyor: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> şunları kullanıyor: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> şunları kullanıyor: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"konum"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index a52ec2a..dfac474 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Спробуйте зробити знімок екрана ще раз"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Не вдалося зберегти знімок екрана через обмежений обсяг пам’яті"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Додаток або адміністратор вашої організації не дозволяють робити знімки екрана"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Запис екрана"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Сповіщення про сеанс запису екрана"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Почати запис"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Записувати голосовий супровід"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Показувати дотики"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Зупинити"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Призупинити"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Відновити"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Скасувати"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Поділитися"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Видалити"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Запис екрана скасовано"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Запис екрана збережено. Натисніть, щоб переглянути"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Запис екрана видалено"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Не вдалося видалити запис екрана"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Не вдалось отримати дозволи"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Парам.передав.файлів через USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Підключити як медіапрогравач (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Підключити як камеру (PTP)"</string>
@@ -588,15 +604,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Ви зазвичай закриваєте ці сповіщення. \nПоказувати їх?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Чи показувати ці сповіщення надалі?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Не показувати сповіщення"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Показувати надалі"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Згорнути"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -735,8 +757,7 @@
<item msgid="2139628951880142927">"Показувати відсотки під час заряджання (за умовчанням)"</item>
<item msgid="3327323682209964956">"Не показувати цей значок"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"Показувати значки сповіщень із низьким пріоритетом"</string>
<string name="other" msgid="4060683095962566764">"Інше"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"Розділювач екрана"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Ліве вікно на весь екран"</string>
@@ -816,7 +837,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Додаток відкрито без встановлення."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Додаток відкрито без встановлення. Торкніться, щоб дізнатися більше."</string>
<string name="app_info" msgid="6856026610594615344">"Про додаток"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Перейти на веб-сайт"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Веб-переглядач"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобільний трафік"</string>
<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">"Wi-Fi вимкнено"</string>
@@ -848,4 +869,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Налаштування"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"Додаток <xliff:g id="APP">%1$s</xliff:g> використовує <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Додатки використовують <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Відкрити додаток"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Скасувати"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Параметри"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"Додаток <xliff:g id="APP">%1$s</xliff:g> використовує <xliff:g id="TYPE">%2$s</xliff:g> протягом стількох останніх хвилин: <xliff:g id="TIME">%3$d</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Додатки <xliff:g id="APPS">%1$s</xliff:g> використовують <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"Додаток <xliff:g id="APP">%1$s</xliff:g> використовує <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"камеру"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"місце"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"мікрофон"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index eb0c60b..8b52391 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"دوبارہ اسکرین شاٹ لینے کی کوشش کریں"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"اسٹوریج کی محدود جگہ کی وجہ سے اسکرین شاٹ کو محفوظ نہیں کیا جا سکتا"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ایپ یا آپ کی تنظیم کی جانب سے اسکرین شاٹس لینے کی اجازت نہیں ہے"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"اسکرین ریکارڈنگ"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"اسکرین ریکارڈ سیشن کیلئے جاری اطلاع"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"ریکارڈنگ شروع کریں"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"وائس اوور ریکارڈ کریں"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"تھپتھپاہٹیں دکھائیں"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"روکیں"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"موقوف کریں"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"دوبارہ شروع کریں"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"منسوخ کریں"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"اشتراک کریں"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"حذف کریں"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"اسکرین ریکارڈنگ منسوخ ہو گئی"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"اسکرین ریکارڈنگ محفوظ ہو گئی، دیکھنے کیلئے تھپتھپائیں"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"اسکرین ریکارڈنگ حذف ہو گئی"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"اسکرین ریکارڈنگ کو حذف کرنے میں خرابی"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"اجازتیں حاصل کرنے میں ناکامی"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB فائل منتقل کرنیکے اختیارات"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ایک میڈیا پلیئر (MTP) کے بطور ماؤنٹ کریں"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ایک کیمرہ (PTP) کے بطور ماؤنٹ کریں"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"آپ عام طور پر ان اطلاعات کو مسترد کرتے ہیں۔ \nان کو دکھاتے رہیں؟"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"یہ اطلاعات دکھانا جاری رکھیں؟"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"اطلاعات روک دیں"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"دکھانا جاری رکھیں"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"چھوٹا کریں"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"چارج ہوتے وقت فیصد دکھائیں (ڈیفالٹ)"</item>
<item msgid="3327323682209964956">"یہ آئیکن نہ دکھائیں"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"کم ترجیحی اطلاع کے آئیکنز دکھائیں"</string>
<string name="other" msgid="4060683095962566764">"دیگر"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"سپلٹ اسکرین تقسیم کار"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"بائیں فل اسکرین"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"انسٹال کیے بغیر کھلنے والی ایپ۔"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"انسٹال کیے بغیر کھلنے والی ایپ۔ مزید جاننے کے لیے تھپتھپائيں۔"</string>
<string name="app_info" msgid="6856026610594615344">"ایپ کی معلومات"</string>
- <string name="go_to_web" msgid="1106022723459948514">"ویب پر جائیں"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"براؤزر پر جائیں"</string>
<string name="mobile_data" msgid="7094582042819250762">"موبائل ڈیٹا"</string>
<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">"Wi-Fi آف ہے"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"ترتیبات"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"سمجھ آ گئی"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> آپ کی <xliff:g id="TYPES_LIST">%2$s</xliff:g> کا استعمال کر رہی ہے۔"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"ایپلیکیشنز آپ کی <xliff:g id="TYPES_LIST">%s</xliff:g> کا استعمال کر رہی ہیں۔"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"ایپ کھولیں"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"منسوخ کریں"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"ٹھیک ہے"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"ترتیبات"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> گزشتہ <xliff:g id="TIME">%3$d</xliff:g> منٹ سے آپ کی <xliff:g id="TYPE">%2$s</xliff:g> کا استعمال کر رہی ہے۔"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> آپ کی <xliff:g id="TYPE">%2$s</xliff:g> کا استعمال کر رہی ہیں"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> آپ کی <xliff:g id="TYPES_LIST">%2$s</xliff:g> کا استعمال کر رہی ہے"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"کیمرا"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"مقام"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"مائیکروفون"</string>
</resources>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index e7c3300..4c3909b 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Qayta skrinshot olib ko‘ring"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Xotirada joy kamligi uchun skrinshot saqlanmadi"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Ilova yoki tashkilotingiz skrinshot olishni taqiqlagan"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Ekrandan video yozib olish"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Ekrandan yozib olish seansi uchun joriy bildirishnoma"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Yozuvni boshlash"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Kadrorti nutqini yozib olish"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Bosishlarni ko‘rsatish"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"To‘xtatish"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Pauza"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Davom etish"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Bekor qilish"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Ulashish"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"O‘chirish"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Ekrandan yozib olish bekor qilindi"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Ekrandan yozib olingan video saqlandi. Uni ochish uchun bildirishnomani bosing."</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Ekrandan yozib olingan video o‘chirib tashlandi"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Ekrandan yozib olingan vi olib tashlanmadi"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Zarur ruxsatlar olinmadi"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB fayl ko‘chirish moslamalari"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Media pleyer sifatida ulash (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Kamera sifatida ulash (PTP)"</string>
@@ -582,15 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Bildirishnomalar"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Bu bildirishnomalar endi chiqmaydi"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Bu bildirishnomalar kichraytiriladi"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Bu bildirishnomalar ovozsiz chiqariladi"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Bu bildirishnomalar sizni ogohlantiradi"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Odatda bunday bildirishnomalarni yopasiz. \nUlar ochiq tursinmi?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Mazkur bildirishnomalar chiqaversinmi?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Chiqmasin"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Ha"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Kichraytirish"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Ovozsiz"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Chiqarish va ogohlantirish"</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>
@@ -725,8 +743,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Muhim boʻlmagan bildirishnoma ikonkalarini koʻrsatish"</string>
<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>
@@ -806,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Ilova o‘rnatilmasdan ochildi."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Ilova o‘rnatilmasdan ochildi. Batafsil axborot uchun bu yerga bosing."</string>
<string name="app_info" msgid="6856026610594615344">"Ilova haqida"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Brauzerga o‘tish"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Brauzerni ochish"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobil internet"</string>
<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">"Wi-Fi o‘chiq"</string>
@@ -838,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Sozlamalar"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> ishlatmoqda: <xliff:g id="TYPES_LIST">%2$s</xliff:g>."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Ilovalarda ishlatilmoqda: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Ilovani ochish"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Bekor qilish"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Sozlamalar"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> oxirgi <xliff:g id="TIME">%3$d</xliff:g> daqiqadan beri ishlatmoqda: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> ishlatmoqda: <xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> ishlatmoqda: <xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"kamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"joylashuv"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"mikrofon"</string>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 4356ac5..5fbccf0 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Hãy thử chụp lại màn hình"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Không thể lưu ảnh chụp màn hình do giới hạn dung lượng bộ nhớ"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Ứng dụng hoặc tổ chức của bạn không cho phép chụp ảnh màn hình"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Đang ghi màn hình"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Thông báo đang diễn ra về phiên ghi màn hình"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Bắt đầu ghi"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Ghi phần thuyết minh"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Hiển thị số lần nhấn"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Dừng"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Tạm dừng"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Tiếp tục"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Hủy"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Chia sẻ"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Xóa"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Đã hủy bản ghi màn hình"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Đã lưu bản ghi màn hình, nhấn để xem"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Đã xóa bản ghi màn hình"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Lỗi khi xóa bản ghi màn hình"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Không được cấp đủ quyền"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Tùy chọn truyền tệp USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Gắn như một trình phát đa phương tiện (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Gắn như một máy ảnh (PTP)"</string>
@@ -582,15 +598,21 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Thông báo"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Bạn sẽ không thấy các thông báo này nữa"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Các thông báo này sẽ được thu nhỏ"</string>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"Bạn thường bỏ qua những thông báo này. \nTiếp tục hiển thị thông báo?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Tiếp tục hiển thị các thông báo này?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Dừng thông báo"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Tiếp tục hiển thị"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Thu nhỏ"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Hiển thị biểu tượng thông báo có mức ưu tiên thấp"</string>
<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>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Ứng dụng được mở mà không cần cài đặt."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Ứng dụng được mở mà không cần cài đặt. Nhấn để tìm hiểu thêm."</string>
<string name="app_info" msgid="6856026610594615344">"Thông tin ứng dụng"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Truy cập web"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Đi tới trình duyệt"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dữ liệu di động"</string>
<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">"Wi-Fi tắt"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Cài đặt"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"Trích xuất bộ nhớ SysUI"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g> đang dùng <xliff:g id="TYPES_LIST">%2$s</xliff:g> của bạn."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Các ứng dụng đang dùng <xliff:g id="TYPES_LIST">%s</xliff:g> của bạn."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Mở ứng dụng"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Hủy"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"OK"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Cài đặt"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g> đang dùng <xliff:g id="TYPE">%2$s</xliff:g> của bạn trong <xliff:g id="TIME">%3$d</xliff:g> phút qua"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g> đang dùng <xliff:g id="TYPE">%2$s</xliff:g> của bạn"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g> đang dùng <xliff:g id="TYPES_LIST">%2$s</xliff:g> của bạn"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"máy ảnh"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"vị trí"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"micrô"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 5424266..8ab6905 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"请再次尝试截屏"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"由于存储空间有限,无法保存屏幕截图"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"此应用或您所在的单位不允许进行屏幕截图"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"屏幕录制"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"持续显示屏幕录制会话通知"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"开始录制"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"录制旁白"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"显示点按操作反馈"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"停止"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"暂停"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"继续"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"取消"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"分享"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"删除"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"已取消录制屏幕"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"屏幕录制内容已保存,点按即可查看"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"已删除屏幕录制内容"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"删除屏幕录制内容时出错"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"无法获取权限"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB文件传输选项"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"作为媒体播放器(MTP)装载"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"作为相机(PTP)装载"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"您通常会关闭这些通知。\n是否继续显示通知?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"要继续显示这些通知吗?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"停止通知"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"继续显示"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"充电时显示百分比(默认)"</item>
<item msgid="3327323682209964956">"不显示此图标"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"显示低优先级的通知图标"</string>
<string name="other" msgid="4060683095962566764">"其他"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"分屏分隔线"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"左侧全屏"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"已打开免安装应用。"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"已打开免安装应用。点按即可了解详情。"</string>
<string name="app_info" msgid="6856026610594615344">"应用信息"</string>
- <string name="go_to_web" msgid="1106022723459948514">"转到网页版"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"转到浏览器"</string>
<string name="mobile_data" msgid="7094582042819250762">"移动数据"</string>
<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 已关闭"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"设置"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"知道了"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"转储 SysUI 堆"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"<xliff:g id="APP">%1$s</xliff:g>正在使用您的<xliff:g id="TYPES_LIST">%2$s</xliff:g>。"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"有多个应用正在使用您的<xliff:g id="TYPES_LIST">%s</xliff:g>。"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"打开应用"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"取消"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"确定"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"设置"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"<xliff:g id="APP">%1$s</xliff:g>在过去 <xliff:g id="TIME">%3$d</xliff:g> 分钟内一直在使用您的<xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g>正在使用您的<xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"<xliff:g id="APP">%1$s</xliff:g>正在使用您的<xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"相机"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"位置信息"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"麦克风"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 38e8b3c..19450af 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"請再嘗試拍攝螢幕擷取畫面"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"由於儲存空間有限,因此無法儲存螢幕擷取畫面"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"應用程式或您的機構不允許擷取螢幕畫面"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"錄影畫面"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"持續顯示錄影畫面工作階段通知"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"開始錄影"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"錄製畫面外的音效"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"顯示輕按選項"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"停止"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"暫停"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"繼續"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"取消"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"分享"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"刪除"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"已取消錄影畫面"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"已儲存錄影畫面,輕按即可查看"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"已刪除錄影畫面"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"刪除錄影畫面時發生錯誤"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"無法獲得權限"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB 檔案傳輸選項"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"掛接為媒體播放器 (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"掛接為相機 (PTP)"</string>
@@ -582,15 +598,17 @@
<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>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"系統會顯示這些通知,但不發出音效"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"這些通知會提醒您"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"您通常會關閉這些通知。\n要繼續顯示通知嗎?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"要繼續顯示這些通知嗎?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"停止通知"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"繼續顯示"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"顯示通知但不發出音效"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"顯示並提醒"</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>
@@ -725,8 +743,7 @@
<item msgid="2139628951880142927">"充電時顯示百分比 (預設)"</item>
<item msgid="3327323682209964956">"不顯示這個圖示"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"顯示低優先順序通知圖示"</string>
<string name="other" msgid="4060683095962566764">"其他"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"分割畫面分隔線"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"左邊全螢幕"</string>
@@ -806,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"已開啟免安裝應用程式。"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"已開啟免安裝應用程式。輕按即可瞭解詳情。"</string>
<string name="app_info" msgid="6856026610594615344">"應用程式資料"</string>
- <string name="go_to_web" msgid="1106022723459948514">"前往網頁版"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"前往瀏覽器"</string>
<string name="mobile_data" msgid="7094582042819250762">"流動數據"</string>
<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">"Wi-Fi 已關閉"</string>
@@ -838,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"設定"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"知道了"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"傾印 SysUI 記憶體快照"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"「<xliff:g id="APP">%1$s</xliff:g>」正在使用<xliff:g id="TYPES_LIST">%2$s</xliff:g>。"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"有多個應用程式正在使用<xliff:g id="TYPES_LIST">%s</xliff:g>。"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"開啟應用程式"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"取消"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"確定"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"設定"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"「<xliff:g id="APP">%1$s</xliff:g>」在過去 <xliff:g id="TIME">%3$d</xliff:g> 分鐘內一直使用<xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"<xliff:g id="APPS">%1$s</xliff:g>正在使用<xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"「<xliff:g id="APP">%1$s</xliff:g>」正在使用<xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"相機"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"位置"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"麥克風"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index e399c44..6adc9d9 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"請再次嘗試拍攝螢幕擷取畫面"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"由於儲存空間有限,因此無法儲存螢幕擷取畫面"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"這個應用程式或貴機構不允許擷取螢幕畫面"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"錄製螢幕畫面"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"持續顯示螢幕畫面錄製工作階段通知"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"開始錄製"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"錄製畫面外的音效"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"顯示觸控回應"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"停止"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"暫停"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"繼續"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"取消"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"分享"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"刪除"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"已取消錄製螢幕畫面"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"已儲存螢幕畫面錄製內容,輕觸即可查看"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"已刪除螢幕畫面錄製內容"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"刪除螢幕畫面錄製內容時發生錯誤"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"無法取得權限"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB 檔案傳輸選項"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"掛接為媒體播放器 (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"掛接為相機 (PTP)"</string>
@@ -582,15 +598,21 @@
<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>
+ <!-- no translation found for notification_channel_silenced (2877199534497961942) -->
+ <skip />
+ <!-- no translation found for notification_channel_unsilenced (4790904571552394137) -->
+ <skip />
<string name="inline_blocking_helper" msgid="3055064577771478591">"你通常會關閉這些通知。\n要繼續顯示通知嗎?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"要繼續顯示這些通知嗎?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"停止顯示通知"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"繼續顯示"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string>
+ <!-- no translation found for inline_silent_button_silent (4411510650503783646) -->
+ <skip />
+ <!-- no translation found for inline_silent_button_alert (2967599358027208807) -->
+ <skip />
<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>
@@ -725,8 +747,7 @@
<item msgid="2139628951880142927">"充電時顯示百分比 (預設)"</item>
<item msgid="3327323682209964956">"不顯示這個圖示"</item>
</string-array>
- <!-- no translation found for tuner_low_priority (1325884786608312358) -->
- <skip />
+ <string name="tuner_low_priority" msgid="1325884786608312358">"顯示低優先順序通知圖示"</string>
<string name="other" msgid="4060683095962566764">"其他"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"分割畫面分隔線"</string>
<string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"以全螢幕顯示左側畫面"</string>
@@ -806,7 +827,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"已開啟免安裝應用程式。"</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"已開啟免安裝應用程式。輕觸即可瞭解詳情。"</string>
<string name="app_info" msgid="6856026610594615344">"應用程式資訊"</string>
- <string name="go_to_web" msgid="1106022723459948514">"前往網頁版"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"前往瀏覽器"</string>
<string name="mobile_data" msgid="7094582042819250762">"行動數據"</string>
<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">"Wi-Fi 已關閉"</string>
@@ -838,4 +859,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"設定"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"我知道了"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"傾印 SysUI 記憶體快照"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"「<xliff:g id="APP">%1$s</xliff:g>」正在使用<xliff:g id="TYPES_LIST">%2$s</xliff:g>。"</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"有多個應用程式正在使用<xliff:g id="TYPES_LIST">%s</xliff:g>。"</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"開啟應用程式"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"取消"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"確定"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"設定"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"「<xliff:g id="APP">%1$s</xliff:g>」過去 <xliff:g id="TIME">%3$d</xliff:g> 分鐘一直在使用<xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"「<xliff:g id="APPS">%1$s</xliff:g>」正在使用<xliff:g id="TYPE">%2$s</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"「<xliff:g id="APP">%1$s</xliff:g>」正在使用<xliff:g id="TYPES_LIST">%2$s</xliff:g>"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"相機"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"位置"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"麥克風"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 3887f14..b96b075 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -70,6 +70,22 @@
<string name="screenshot_failed_to_save_unknown_text" msgid="3637758096565605541">"Zama ukuthatha isithombe-skrini futhi"</string>
<string name="screenshot_failed_to_save_text" msgid="3041612585107107310">"Ayikwazi ukulondoloza isithombe-skrini ngenxa yesikhala sesitoreji esikhawulelwe"</string>
<string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Ukuthatha izithombe-skrini akuvunyelwe uhlelo lokusebenza noma inhlangano yakho"</string>
+ <string name="screenrecord_name" msgid="4196719243134204796">"Ukurekhoda isikrini"</string>
+ <string name="screenrecord_channel_description" msgid="4630777331970993858">"Isaziso esiqhubekayo seseshini yokurekhoda isikrini"</string>
+ <string name="screenrecord_start_label" msgid="5177739269492196055">"Qala ukurekhoda"</string>
+ <string name="screenrecord_mic_label" msgid="4522870600914810019">"Rekhoda izwi elingaphezulu"</string>
+ <string name="screenrecord_taps_label" msgid="1776467076607964790">"Bonisa amathebhu"</string>
+ <string name="screenrecord_stop_label" msgid="2544887572381260038">"Misa"</string>
+ <string name="screenrecord_pause_label" msgid="7162476078856786227">"Phumula"</string>
+ <string name="screenrecord_resume_label" msgid="3605818317015993314">"Qalisa kabusha"</string>
+ <string name="screenrecord_cancel_label" msgid="3385204992871088609">"Khansela"</string>
+ <string name="screenrecord_share_label" msgid="4197867360204019389">"Yabelana"</string>
+ <string name="screenrecord_delete_label" msgid="7893716870917824013">"Susa"</string>
+ <string name="screenrecord_cancel_success" msgid="7768976011702614782">"Ukurekhoda isikrini kukhanseliwe"</string>
+ <string name="screenrecord_save_message" msgid="4733982661301846778">"Ukurekhoda isikrini kulondoloziwe, thepha ukuze ubuke"</string>
+ <string name="screenrecord_delete_description" msgid="5743190456090354585">"Ukurekhoda isikrini kususiwe"</string>
+ <string name="screenrecord_delete_error" msgid="8154904464563560282">"Iphutha lokususa ukurekhoda isikrini"</string>
+ <string name="screenrecord_permission_error" msgid="1526755299469001000">"Yehlulekile ukuthola izimvume"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Okukhethwa kokudluliswa kwefayela ye-USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Lengisa njengesidlali semediya (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Lengisa ikhamera (PTP)"</string>
@@ -582,15 +598,17 @@
<string name="notification_header_default_channel" msgid="7506845022070889909">"Izaziso"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Ngeke usabona lezi zaziso"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Lezi zaziso zizokwehlisa"</string>
+ <string name="notification_channel_silenced" msgid="2877199534497961942">"Lezi zaziso zizoboniswa ngokuthulile"</string>
+ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"Lezi zaziso zizokuxwayisa"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Uvamise ukucashisa lezi zaziso. \nQhubeka ulokhu uzibonisa?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Qhubeka nokubonisa lezi zaziso?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Misa izaziso"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Qhubeka nokubonisa"</string>
<string name="inline_minimize_button" msgid="966233327974702195">"Nciphisa"</string>
+ <string name="inline_silent_button_silent" msgid="4411510650503783646">"Bonisa ngokuthulile"</string>
+ <string name="inline_silent_button_alert" msgid="2967599358027208807">"Bonisa futhi xwayisa"</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>
@@ -725,8 +743,7 @@
<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="tuner_low_priority" msgid="1325884786608312358">"Bonisa izithonjana zesaziso zokubaluleka okuncane"</string>
<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>
@@ -806,7 +823,7 @@
<string name="instant_apps_message" msgid="1183313016396018086">"Uhlelo lokusebenza luvulwe ngaphndle kokufakwa."</string>
<string name="instant_apps_message_with_help" msgid="6179830437630729747">"Uhlelo lokusebenza luvulwe ngaphandle kokufakwa. Thepha ukuze ufunde kabanzi."</string>
<string name="app_info" msgid="6856026610594615344">"Ulwazi lohlelo lokusebenza"</string>
- <string name="go_to_web" msgid="1106022723459948514">"Iya kuwebhu"</string>
+ <string name="go_to_web" msgid="2650669128861626071">"Iya kusiphequluli"</string>
<string name="mobile_data" msgid="7094582042819250762">"Idatha yeselula"</string>
<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">"I-Wi-Fi ivaliwe"</string>
@@ -838,4 +855,16 @@
<string name="open_saver_setting_action" msgid="8314624730997322529">"Izilungiselelo"</string>
<string name="auto_saver_okay_action" msgid="2701221740227683650">"Ngiyezwa"</string>
<string name="heap_dump_tile_name" msgid="9141031328971226374">"I-Dump SysUI Heap"</string>
+ <string name="ongoing_privacy_chip_content_single_app" msgid="4479560741898690064">"I-<xliff:g id="APP">%1$s</xliff:g> isebenzisa i-<xliff:g id="TYPES_LIST">%2$s</xliff:g> yakho."</string>
+ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8640691753867990511">"Izinhlelo zokusebenza zisebenzisa i-<xliff:g id="TYPES_LIST">%s</xliff:g> yakho."</string>
+ <string name="ongoing_privacy_dialog_open_app" msgid="2483886665314567948">"Vula uhlelo lokusebenza"</string>
+ <string name="ongoing_privacy_dialog_cancel" msgid="5479124524931216790">"Khansela"</string>
+ <string name="ongoing_privacy_dialog_okay" msgid="5823914553907253532">"Kulungile"</string>
+ <string name="ongoing_privacy_dialog_open_settings" msgid="6382622467527049074">"Izilungiselelo"</string>
+ <string name="ongoing_privacy_dialog_app_item" msgid="486085465491760739">"I-<xliff:g id="APP">%1$s</xliff:g> isebenzisa i-<xliff:g id="TYPE">%2$s</xliff:g> yakho ngeminithi lokugcina elingu-<xliff:g id="TIME">%3$d</xliff:g>"</string>
+ <string name="ongoing_privacy_dialog_apps_item" msgid="9207187236823950491">"Ama-<xliff:g id="APPS">%1$s</xliff:g> asebenzisa i-<xliff:g id="TYPE">%2$s</xliff:g> yakho"</string>
+ <string name="ongoing_privacy_dialog_single_app" msgid="3884812469179810924">"I-<xliff:g id="APP">%1$s</xliff:g> isebenzisa i-<xliff:g id="TYPES_LIST">%2$s</xliff:g> yakho"</string>
+ <string name="privacy_type_camera" msgid="1676604631892420333">"ikhamera"</string>
+ <string name="privacy_type_location" msgid="6435497989657286700">"indawo"</string>
+ <string name="privacy_type_microphone" msgid="4153045784928554506">"imakrofoni"</string>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 3050e79..f132488 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -478,6 +478,9 @@
<!-- The height of the divider between the individual notifications when the notification wants it to be increased. This is currently the case for notification groups -->
<dimen name="notification_divider_height_increased">6dp</dimen>
+ <!-- The height of the gap between adjacent notification sections. -->
+ <dimen name="notification_section_divider_height">@dimen/notification_side_paddings</dimen>
+
<!-- The minimum amount of top overscroll to go to the quick settings. -->
<dimen name="min_top_overscroll_to_qs">36dp</dimen>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java
index e3bc5b9..f7cc9cb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java
@@ -15,7 +15,6 @@
*/
package com.android.systemui.statusbar;
-import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED;
import android.app.ActivityManager;
@@ -295,9 +294,7 @@
}
boolean exceedsPriorityThreshold;
if (NotificationUtils.useNewInterruptionModel(mContext)) {
- exceedsPriorityThreshold =
- getEntryManager().getNotificationData().getImportance(sbn.getKey())
- >= IMPORTANCE_DEFAULT;
+ exceedsPriorityThreshold = getEntryManager().getNotificationData().isHighPriority(sbn);
} else {
exceedsPriorityThreshold =
!getEntryManager().getNotificationData().isAmbient(sbn.getKey());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
index c437b14..fc1e94a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
@@ -280,7 +280,10 @@
if (metaDataChanged) {
getEntryManager().updateNotifications();
}
- mPresenter.updateMediaMetaData(metaDataChanged, true);
+
+ if (mPresenter != null) {
+ mPresenter.updateMediaMetaData(metaDataChanged, true);
+ }
}
public void clearCurrentMediaNotification() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index bf33614..b3be714 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -95,6 +95,7 @@
private float mFirstElementRoundness;
private Rect mClipRect = new Rect();
private int mCutoutHeight;
+ private int mGapHeight;
private final StateListener mStateListener = this::setStatusBarState;
@@ -154,6 +155,7 @@
mScrollFastThreshold = res.getDimensionPixelOffset(R.dimen.scroll_fast_threshold);
mShowNotificationShelf = res.getBoolean(R.bool.config_showNotificationShelf);
mIconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size);
+ mGapHeight = res.getDimensionPixelSize(R.dimen.qs_notification_padding);
if (!mShowNotificationShelf) {
setVisibility(GONE);
@@ -276,6 +278,7 @@
int baseZHeight = mAmbientState.getBaseZHeight();
int backgroundTop = 0;
float firstElementRoundness = 0.0f;
+ ExpandableNotificationRow previousRow = null;
for (int i = 0; i < mHostLayout.getChildCount(); i++) {
ExpandableView child = (ExpandableView) mHostLayout.getChildAt(i);
@@ -343,8 +346,27 @@
+ " \n number of notifications: " + mHostLayout.getChildCount() );
}
}
+ if (row.isFirstInSection() && previousRow != null && previousRow.isLastInSection()) {
+ // If the top of the shelf is between the view before a gap and the view after a gap
+ // then we need to adjust the shelf's top roundness.
+ float distanceToGapBottom = row.getTranslationY() - getTranslationY();
+ float distanceToGapTop = getTranslationY()
+ - (previousRow.getTranslationY() + previousRow.getActualHeight());
+ if (distanceToGapTop > 0) {
+ // We interpolate our top roundness so that it's fully rounded if we're at the
+ // bottom of the gap, and not rounded at all if we're at the top of the gap
+ // (directly up against the bottom of previousRow)
+ // Then we apply the same roundness to the bottom of previousRow so that the
+ // corners join together as the shelf approaches previousRow.
+ firstElementRoundness = (float) Math.min(1.0, distanceToGapTop / mGapHeight);
+ previousRow.setBottomRoundness(firstElementRoundness,
+ false /* don't animate */);
+ backgroundTop = (int) distanceToGapBottom;
+ }
+ }
notGoneIndex++;
previousColor = ownColorUntinted;
+ previousRow = row;
}
clipTransientViews();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationData.java
index fb62baa..4e712a5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationData.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationData.java
@@ -593,6 +593,20 @@
}
}
+ /**
+ * Returns true if this notification should be displayed in the high-priority notifications
+ * section (and on the lockscreen and status bar).
+ */
+ public boolean isHighPriority(StatusBarNotification statusBarNotification) {
+ if (mRankingMap != null) {
+ getRanking(statusBarNotification.getKey(), mTmpRanking);
+ return mTmpRanking.getImportance() >= NotificationManager.IMPORTANCE_DEFAULT
+ || statusBarNotification.getNotification().isForegroundService()
+ || statusBarNotification.getNotification().hasMediaSession();
+ }
+ return false;
+ }
+
public boolean isAmbient(String key) {
if (mRankingMap != null) {
getRanking(key, mTmpRanking);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
index 58db03c..3380b38 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
@@ -40,9 +40,9 @@
import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.notification.FakeShadowView;
import com.android.systemui.statusbar.notification.NotificationUtils;
-import com.android.systemui.statusbar.phone.DoubleTapHelper;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
+import com.android.systemui.statusbar.phone.DoubleTapHelper;
/**
* Base class for both {@link ExpandableNotificationRow} and {@link NotificationShelf}
@@ -134,6 +134,8 @@
private float mAppearAnimationFraction = -1.0f;
private float mAppearAnimationTranslation;
private int mNormalColor;
+ private boolean mLastInSection;
+ private boolean mFirstInSection;
private boolean mIsBelowSpeedBump;
private FalsingManager mFalsingManager;
@@ -533,6 +535,32 @@
mBackgroundDimmed.setDistanceToTopRoundness(distanceToTopRoundness);
}
+ public boolean isLastInSection() {
+ return mLastInSection;
+ }
+
+ public boolean isFirstInSection() {
+ return mFirstInSection;
+ }
+
+ /** Sets whether this view is the last notification in a section. */
+ public void setLastInSection(boolean lastInSection) {
+ if (lastInSection != mLastInSection) {
+ mLastInSection = lastInSection;
+ mBackgroundNormal.setLastInSection(lastInSection);
+ mBackgroundDimmed.setLastInSection(lastInSection);
+ }
+ }
+
+ /** Sets whether this view is the first notification in a section. */
+ public void setFirstInSection(boolean firstInSection) {
+ if (firstInSection != mFirstInSection) {
+ mFirstInSection = firstInSection;
+ mBackgroundNormal.setFirstInSection(firstInSection);
+ mBackgroundDimmed.setFirstInSection(firstInSection);
+ }
+ }
+
/**
* Set an override tint color that is used for the background.
*
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java
index 1ed726d..62d596b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java
@@ -46,6 +46,8 @@
private int mTintColor;
private float[] mCornerRadii = new float[8];
private boolean mBottomIsRounded;
+ private boolean mLastInSection;
+ private boolean mFirstInSection;
private int mBackgroundTop;
private boolean mBottomAmountClips = true;
private boolean mExpandAnimationRunning;
@@ -79,7 +81,10 @@
if (drawable != null) {
int top = mBackgroundTop;
int bottom = mActualHeight;
- if (mBottomIsRounded && mBottomAmountClips && !mExpandAnimationRunning) {
+ if (mBottomIsRounded
+ && mBottomAmountClips
+ && !mExpandAnimationRunning
+ && !mLastInSection) {
bottom -= mClipBottomAmount;
}
int left = 0;
@@ -90,8 +95,10 @@
}
if (mTopAmountRounded) {
int clipTop = (int) (mClipTopAmount - mDistanceToTopRoundness);
- top += clipTop;
- if (clipTop >= 0) {
+ if (clipTop >= 0 || !mFirstInSection) {
+ top += clipTop;
+ }
+ if (clipTop >= 0 && !mLastInSection) {
bottom += clipTop;
}
}
@@ -216,19 +223,23 @@
mBackground.setAlpha(drawableAlpha);
}
- public void setRoundness(float topRoundness, float bottomRoundNess) {
- if (topRoundness == mCornerRadii[0] && bottomRoundNess == mCornerRadii[4]) {
+ /**
+ * Sets the current top and bottom roundness amounts for this background, between 0.0 (not
+ * rounded) and 1.0 (maximally rounded).
+ */
+ public void setRoundness(float topRoundness, float bottomRoundness) {
+ if (topRoundness == mCornerRadii[0] && bottomRoundness == mCornerRadii[4]) {
return;
}
- mBottomIsRounded = bottomRoundNess != 0.0f;
+ mBottomIsRounded = bottomRoundness != 0.0f;
mCornerRadii[0] = topRoundness;
mCornerRadii[1] = topRoundness;
mCornerRadii[2] = topRoundness;
mCornerRadii[3] = topRoundness;
- mCornerRadii[4] = bottomRoundNess;
- mCornerRadii[5] = bottomRoundNess;
- mCornerRadii[6] = bottomRoundNess;
- mCornerRadii[7] = bottomRoundNess;
+ mCornerRadii[4] = bottomRoundness;
+ mCornerRadii[5] = bottomRoundness;
+ mCornerRadii[6] = bottomRoundness;
+ mCornerRadii[7] = bottomRoundness;
updateBackgroundRadii();
}
@@ -239,6 +250,18 @@
}
}
+ /** Sets whether this background belongs to the last notification in a section. */
+ public void setLastInSection(boolean lastInSection) {
+ mLastInSection = lastInSection;
+ invalidate();
+ }
+
+ /** Sets whether this background belongs to the first notification in a section. */
+ public void setFirstInSection(boolean firstInSection) {
+ mFirstInSection = firstInSection;
+ invalidate();
+ }
+
private void updateBackgroundRadii() {
if (mDontModifyCorners) {
return;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
index 0577841..ff1a6fc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
@@ -22,27 +22,32 @@
import com.android.systemui.Dependency;
import com.android.systemui.R;
-import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.AmbientPulseManager;
+import com.android.systemui.statusbar.NotificationShelf;
+import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.notification.NotificationData;
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
-import com.android.systemui.statusbar.notification.NotificationData;
-import com.android.systemui.statusbar.NotificationShelf;
import java.util.ArrayList;
+import java.util.List;
/**
* A global state to track all input states for the algorithm.
*/
public class AmbientState {
- private ArrayList<View> mDraggedViews = new ArrayList<View>();
+
+ private static final int NO_SECTION_BOUNDARY = -1;
+
+ private ArrayList<View> mDraggedViews = new ArrayList<>();
private int mScrollY;
private boolean mDimmed;
private ActivatableNotificationView mActivatedChild;
private float mOverScrollTopAmount;
private float mOverScrollBottomAmount;
private int mSpeedBumpIndex = -1;
+ private final List<Integer> mSectionBoundaryIndices = new ArrayList<>();
private boolean mDark;
private boolean mHideSensitive;
private AmbientPulseManager mAmbientPulseManager = Dependency.get(AmbientPulseManager.class);
@@ -75,6 +80,7 @@
private boolean mAppearing;
public AmbientState(Context context) {
+ mSectionBoundaryIndices.add(NO_SECTION_BOUNDARY);
reload(context);
}
@@ -208,6 +214,27 @@
mSpeedBumpIndex = shelfIndex;
}
+ /**
+ * Returns the index of the boundary between two sections, where the first section is at index
+ * {@code boundaryNum}.
+ */
+ public int getSectionBoundaryIndex(int boundaryNum) {
+ return mSectionBoundaryIndices.get(boundaryNum);
+ }
+
+ /** Returns true if the item at {@code index} is directly below a section boundary. */
+ public boolean beginsNewSection(int index) {
+ return mSectionBoundaryIndices.contains(index);
+ }
+
+ /**
+ * Sets the index of the boundary between the section at {@code boundaryNum} and the following
+ * section to {@code boundaryIndex}.
+ */
+ public void setSectionBoundaryIndex(int boundaryNum, int boundaryIndex) {
+ mSectionBoundaryIndices.set(boundaryNum, boundaryIndex);
+ }
+
public float getStackTranslation() {
return mStackTranslation;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManager.java
index e32df42..c867a41 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManager.java
@@ -16,6 +16,9 @@
package com.android.systemui.statusbar.notification.stack;
+import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
+ .NUM_SECTIONS;
+
import android.view.View;
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
@@ -30,46 +33,92 @@
class NotificationRoundnessManager implements OnHeadsUpChangedListener {
private boolean mExpanded;
- private ActivatableNotificationView mFirst;
- private ActivatableNotificationView mLast;
+ private ActivatableNotificationView[] mFirstInSectionViews;
+ private ActivatableNotificationView[] mLastInSectionViews;
+ private ActivatableNotificationView[] mTmpFirstInSectionViews;
+ private ActivatableNotificationView[] mTmpLastInSectionViews;
private HashSet<View> mAnimatedChildren;
private Runnable mRoundingChangedCallback;
private ExpandableNotificationRow mTrackedHeadsUp;
private float mAppearFraction;
+ NotificationRoundnessManager() {
+ mFirstInSectionViews = new ActivatableNotificationView[NUM_SECTIONS];
+ mLastInSectionViews = new ActivatableNotificationView[NUM_SECTIONS];
+ mTmpFirstInSectionViews = new ActivatableNotificationView[NUM_SECTIONS];
+ mTmpLastInSectionViews = new ActivatableNotificationView[NUM_SECTIONS];
+ }
+
@Override
public void onHeadsUpPinned(ExpandableNotificationRow headsUp) {
- updateRounding(headsUp, false /* animate */);
+ updateView(headsUp, false /* animate */);
}
@Override
public void onHeadsUpUnPinned(ExpandableNotificationRow headsUp) {
- updateRounding(headsUp, true /* animate */);
+ updateView(headsUp, true /* animate */);
}
public void onHeadsupAnimatingAwayChanged(ExpandableNotificationRow row,
boolean isAnimatingAway) {
- updateRounding(row, false /* animate */);
+ updateView(row, false /* animate */);
}
- private void updateRounding(ActivatableNotificationView view, boolean animate) {
- float topRoundness = getRoundness(view, true /* top */);
- float bottomRoundness = getRoundness(view, false /* top */);
- boolean firstChanged = view.setTopRoundness(topRoundness, animate);
- boolean secondChanged = view.setBottomRoundness(bottomRoundness, animate);
- if ((view == mFirst || view == mLast) && (firstChanged || secondChanged)) {
+ private void updateView(ActivatableNotificationView view, boolean animate) {
+ boolean changed = updateViewWithoutCallback(view, animate);
+ if (changed) {
mRoundingChangedCallback.run();
}
}
+ private boolean updateViewWithoutCallback(ActivatableNotificationView view,
+ boolean animate) {
+ float topRoundness = getRoundness(view, true /* top */);
+ float bottomRoundness = getRoundness(view, false /* top */);
+ boolean topChanged = view.setTopRoundness(topRoundness, animate);
+ boolean bottomChanged = view.setBottomRoundness(bottomRoundness, animate);
+ boolean firstInSection = isFirstInSection(view, false /* exclude first section */);
+ boolean lastInSection = isLastInSection(view, false /* exclude last section */);
+ view.setFirstInSection(firstInSection);
+ view.setLastInSection(lastInSection);
+ return (firstInSection || lastInSection) && (topChanged || bottomChanged);
+ }
+
+ private boolean isFirstInSection(ActivatableNotificationView view,
+ boolean includeFirstSection) {
+ int numNonEmptySections = 0;
+ for (int i = 0; i < mFirstInSectionViews.length; i++) {
+ if (view == mFirstInSectionViews[i]) {
+ return includeFirstSection || numNonEmptySections > 0;
+ }
+ if (mFirstInSectionViews[i] != null) {
+ numNonEmptySections++;
+ }
+ }
+ return false;
+ }
+
+ private boolean isLastInSection(ActivatableNotificationView view, boolean includeLastSection) {
+ int numNonEmptySections = 0;
+ for (int i = mLastInSectionViews.length - 1; i >= 0; i--) {
+ if (view == mLastInSectionViews[i]) {
+ return includeLastSection || numNonEmptySections > 0;
+ }
+ if (mLastInSectionViews[i] != null) {
+ numNonEmptySections++;
+ }
+ }
+ return false;
+ }
+
private float getRoundness(ActivatableNotificationView view, boolean top) {
if ((view.isPinned() || view.isHeadsUpAnimatingAway()) && !mExpanded) {
return 1.0f;
}
- if (view == mFirst && top) {
+ if (isFirstInSection(view, true /* include first section */) && top) {
return 1.0f;
}
- if (view == mLast && !top) {
+ if (isLastInSection(view, true /* include last section */) && !top) {
return 1.0f;
}
if (view == mTrackedHeadsUp && mAppearFraction <= 0.0f) {
@@ -84,34 +133,82 @@
mExpanded = expandedHeight != 0.0f;
mAppearFraction = appearFraction;
if (mTrackedHeadsUp != null) {
- updateRounding(mTrackedHeadsUp, true);
+ updateView(mTrackedHeadsUp, true);
}
}
- public void setFirstAndLastBackgroundChild(ActivatableNotificationView first,
- ActivatableNotificationView last) {
- boolean firstChanged = mFirst != first;
- boolean lastChanged = mLast != last;
- if (!firstChanged && !lastChanged) {
- return;
+ public void updateRoundedChildren(NotificationSection[] sections) {
+ boolean anyChanged = false;
+ for (int i = 0; i < NUM_SECTIONS; i++) {
+ mTmpFirstInSectionViews[i] = mFirstInSectionViews[i];
+ mTmpLastInSectionViews[i] = mLastInSectionViews[i];
+ mFirstInSectionViews[i] = sections[i].getFirstVisibleChild();
+ mLastInSectionViews[i] = sections[i].getLastVisibleChild();
}
- ActivatableNotificationView oldFirst = mFirst;
- ActivatableNotificationView oldLast = mLast;
- mFirst = first;
- mLast = last;
- if (firstChanged && oldFirst != null && !oldFirst.isRemoved()) {
- updateRounding(oldFirst, oldFirst.isShown());
+ anyChanged |= handleRemovedOldViews(sections, mTmpFirstInSectionViews, true);
+ anyChanged |= handleRemovedOldViews(sections, mTmpLastInSectionViews, false);
+ anyChanged |= handleAddedNewViews(sections, mTmpFirstInSectionViews, true);
+ anyChanged |= handleAddedNewViews(sections, mTmpLastInSectionViews, false);
+ if (anyChanged) {
+ mRoundingChangedCallback.run();
}
- if (lastChanged && oldLast != null && !oldLast.isRemoved()) {
- updateRounding(oldLast, oldLast.isShown());
+ }
+
+ private boolean handleRemovedOldViews(NotificationSection[] sections,
+ ActivatableNotificationView[] oldViews, boolean first) {
+ boolean anyChanged = false;
+ for (ActivatableNotificationView oldView : oldViews) {
+ if (oldView != null) {
+ boolean isStillPresent = false;
+ boolean adjacentSectionChanged = false;
+ for (NotificationSection section : sections) {
+ ActivatableNotificationView newView =
+ (first ? section.getFirstVisibleChild()
+ : section.getLastVisibleChild());
+ if (newView == oldView) {
+ isStillPresent = true;
+ if (oldView.isFirstInSection() != isFirstInSection(oldView,
+ false /* exclude first section */)
+ || oldView.isLastInSection() != isLastInSection(oldView,
+ false /* exclude last section */)) {
+ adjacentSectionChanged = true;
+ }
+ break;
+ }
+ }
+ if (!isStillPresent || adjacentSectionChanged) {
+ anyChanged = true;
+ if (!oldView.isRemoved()) {
+ updateViewWithoutCallback(oldView, oldView.isShown());
+ }
+ }
+ }
}
- if (mFirst != null) {
- updateRounding(mFirst, mFirst.isShown() && !mAnimatedChildren.contains(mFirst));
+ return anyChanged;
+ }
+
+ private boolean handleAddedNewViews(NotificationSection[] sections,
+ ActivatableNotificationView[] oldViews, boolean first) {
+ boolean anyChanged = false;
+ for (NotificationSection section : sections) {
+ ActivatableNotificationView newView =
+ (first ? section.getFirstVisibleChild() : section.getLastVisibleChild());
+ if (newView != null) {
+ boolean wasAlreadyPresent = false;
+ for (ActivatableNotificationView oldView : oldViews) {
+ if (oldView == newView) {
+ wasAlreadyPresent = true;
+ break;
+ }
+ }
+ if (!wasAlreadyPresent) {
+ anyChanged = true;
+ updateViewWithoutCallback(newView,
+ newView.isShown() && !mAnimatedChildren.contains(newView));
+ }
+ }
}
- if (mLast != null) {
- updateRounding(mLast, mLast.isShown() && !mAnimatedChildren.contains(mLast));
- }
- mRoundingChangedCallback.run();
+ return anyChanged;
}
public void setAnimatedChildren(HashSet<View> animatedChildren) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java
new file mode 100644
index 0000000..40cfd4d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.stack;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.graphics.Rect;
+import android.view.View;
+import android.view.animation.Interpolator;
+
+import com.android.systemui.Interpolators;
+import com.android.systemui.statusbar.notification.ShadeViewRefactor;
+import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
+
+/**
+ * Represents the bounds of a section of the notification shade and handles animation when the
+ * bounds change.
+ */
+class NotificationSection {
+ private View mOwningView;
+ private Rect mBounds = new Rect();
+ private Rect mCurrentBounds = new Rect(-1, -1, -1, -1);
+ private Rect mStartAnimationRect = new Rect();
+ private Rect mEndAnimationRect = new Rect();
+ private ObjectAnimator mTopAnimator = null;
+ private ObjectAnimator mBottomAnimator = null;
+ private ActivatableNotificationView mFirstVisibleChild;
+ private ActivatableNotificationView mLastVisibleChild;
+
+ NotificationSection(View owningView) {
+ mOwningView = owningView;
+ }
+
+ public void cancelAnimators() {
+ if (mBottomAnimator != null) {
+ mBottomAnimator.cancel();
+ }
+ if (mTopAnimator != null) {
+ mTopAnimator.cancel();
+ }
+ }
+
+ public Rect getCurrentBounds() {
+ return mCurrentBounds;
+ }
+
+ public Rect getBounds() {
+ return mBounds;
+ }
+
+ public boolean didBoundsChange() {
+ return !mCurrentBounds.equals(mBounds);
+ }
+
+ public boolean areBoundsAnimating() {
+ return mBottomAnimator != null || mTopAnimator != null;
+ }
+
+ public void startBackgroundAnimation(boolean animateTop, boolean animateBottom) {
+ // Left and right bounds are always applied immediately.
+ mCurrentBounds.left = mBounds.left;
+ mCurrentBounds.right = mBounds.right;
+ startBottomAnimation(animateBottom);
+ startTopAnimation(animateTop);
+ }
+
+
+ @ShadeViewRefactor(ShadeViewRefactor.RefactorComponent.STATE_RESOLVER)
+ private void startTopAnimation(boolean animate) {
+ int previousEndValue = mEndAnimationRect.top;
+ int newEndValue = mBounds.top;
+ ObjectAnimator previousAnimator = mTopAnimator;
+ if (previousAnimator != null && previousEndValue == newEndValue) {
+ return;
+ }
+ if (!animate) {
+ // just a local update was performed
+ if (previousAnimator != null) {
+ // we need to increase all animation keyframes of the previous animator by the
+ // relative change to the end value
+ int previousStartValue = mStartAnimationRect.top;
+ PropertyValuesHolder[] values = previousAnimator.getValues();
+ values[0].setIntValues(previousStartValue, newEndValue);
+ mStartAnimationRect.top = previousStartValue;
+ mEndAnimationRect.top = newEndValue;
+ previousAnimator.setCurrentPlayTime(previousAnimator.getCurrentPlayTime());
+ return;
+ } else {
+ // no new animation needed, let's just apply the value
+ setBackgroundTop(newEndValue);
+ return;
+ }
+ }
+ if (previousAnimator != null) {
+ previousAnimator.cancel();
+ }
+ ObjectAnimator animator = ObjectAnimator.ofInt(this, "backgroundTop",
+ mCurrentBounds.top, newEndValue);
+ Interpolator interpolator = Interpolators.FAST_OUT_SLOW_IN;
+ animator.setInterpolator(interpolator);
+ animator.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
+ // remove the tag when the animation is finished
+ animator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mStartAnimationRect.top = -1;
+ mEndAnimationRect.top = -1;
+ mTopAnimator = null;
+ }
+ });
+ animator.start();
+ mStartAnimationRect.top = mCurrentBounds.top;
+ mEndAnimationRect.top = newEndValue;
+ mTopAnimator = animator;
+ }
+
+ @ShadeViewRefactor(ShadeViewRefactor.RefactorComponent.STATE_RESOLVER)
+ private void startBottomAnimation(boolean animate) {
+ int previousStartValue = mStartAnimationRect.bottom;
+ int previousEndValue = mEndAnimationRect.bottom;
+ int newEndValue = mBounds.bottom;
+ ObjectAnimator previousAnimator = mBottomAnimator;
+ if (previousAnimator != null && previousEndValue == newEndValue) {
+ return;
+ }
+ if (!animate) {
+ // just a local update was performed
+ if (previousAnimator != null) {
+ // we need to increase all animation keyframes of the previous animator by the
+ // relative change to the end value
+ PropertyValuesHolder[] values = previousAnimator.getValues();
+ values[0].setIntValues(previousStartValue, newEndValue);
+ mStartAnimationRect.bottom = previousStartValue;
+ mEndAnimationRect.bottom = newEndValue;
+ previousAnimator.setCurrentPlayTime(previousAnimator.getCurrentPlayTime());
+ return;
+ } else {
+ // no new animation needed, let's just apply the value
+ setBackgroundBottom(newEndValue);
+ return;
+ }
+ }
+ if (previousAnimator != null) {
+ previousAnimator.cancel();
+ }
+ ObjectAnimator animator = ObjectAnimator.ofInt(this, "backgroundBottom",
+ mCurrentBounds.bottom, newEndValue);
+ Interpolator interpolator = Interpolators.FAST_OUT_SLOW_IN;
+ animator.setInterpolator(interpolator);
+ animator.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
+ // remove the tag when the animation is finished
+ animator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mStartAnimationRect.bottom = -1;
+ mEndAnimationRect.bottom = -1;
+ mBottomAnimator = null;
+ }
+ });
+ animator.start();
+ mStartAnimationRect.bottom = mCurrentBounds.bottom;
+ mEndAnimationRect.bottom = newEndValue;
+ mBottomAnimator = animator;
+ }
+
+ @ShadeViewRefactor(ShadeViewRefactor.RefactorComponent.SHADE_VIEW)
+ private void setBackgroundTop(int top) {
+ mCurrentBounds.top = top;
+ mOwningView.invalidate();
+ }
+
+ @ShadeViewRefactor(ShadeViewRefactor.RefactorComponent.SHADE_VIEW)
+ private void setBackgroundBottom(int bottom) {
+ mCurrentBounds.bottom = bottom;
+ mOwningView.invalidate();
+ }
+
+ public ActivatableNotificationView getFirstVisibleChild() {
+ return mFirstVisibleChild;
+ }
+
+ public ActivatableNotificationView getLastVisibleChild() {
+ return mLastVisibleChild;
+ }
+
+ public void setFirstVisibleChild(ActivatableNotificationView child) {
+ mFirstVisibleChild = child;
+ }
+
+ public void setLastVisibleChild(ActivatableNotificationView child) {
+ mLastVisibleChild = child;
+ }
+
+ public void resetCurrentBounds() {
+ mCurrentBounds.set(mBounds);
+ }
+
+ /**
+ * Returns true if {@code top} is equal to the top of this section (if not currently animating)
+ * or where the top of this section will be when animation completes.
+ */
+ public boolean isTargetTop(int top) {
+ return (mTopAnimator == null && mCurrentBounds.top == top)
+ || (mTopAnimator != null && mEndAnimationRect.top == top);
+ }
+
+ /**
+ * Returns true if {@code bottom} is equal to the bottom of this section (if not currently
+ * animating) or where the bottom of this section will be when animation completes.
+ */
+ public boolean isTargetBottom(int bottom) {
+ return (mBottomAnimator == null && mCurrentBounds.bottom == bottom)
+ || (mBottomAnimator != null && mEndAnimationRect.bottom == bottom);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index a315bf3..9daba83 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -22,13 +22,10 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
-import android.animation.ObjectAnimator;
-import android.animation.PropertyValuesHolder;
import android.animation.TimeAnimator;
import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.app.NotificationManager;
import android.app.WallpaperManager;
import android.content.Context;
import android.content.Intent;
@@ -155,6 +152,12 @@
* Sentinel value for no current active pointer. Used by {@link #mActivePointerId}.
*/
private static final int INVALID_POINTER = -1;
+ static final int NUM_SECTIONS = 2;
+ /**
+ * The distance in pixels between sections when the sections are directly adjacent (no visible
+ * gap is drawn between them). In this case we don't want to round their corners.
+ */
+ private static final int DISTANCE_BETWEEN_ADJACENT_SECTIONS_PX = 1;
private ExpandHelper mExpandHelper;
private final NotificationSwipeHelper mSwipeHelper;
@@ -328,16 +331,10 @@
return true;
}
};
- private Rect mBackgroundBounds = new Rect();
- private Rect mStartAnimationRect = new Rect();
- private Rect mEndAnimationRect = new Rect();
- private Rect mCurrentBounds = new Rect(-1, -1, -1, -1);
- private boolean mAnimateNextBackgroundBottom;
+ private NotificationSection[] mSections = new NotificationSection[NUM_SECTIONS];
private boolean mAnimateNextBackgroundTop;
- private ObjectAnimator mBottomAnimator = null;
- private ObjectAnimator mTopAnimator = null;
- private ActivatableNotificationView mFirstVisibleBackgroundChild = null;
- private ActivatableNotificationView mLastVisibleBackgroundChild = null;
+ private boolean mAnimateNextBackgroundBottom;
+ private boolean mAnimateNextSectionBoundsChange;
private int mBgColor;
private float mDimAmount;
private ValueAnimator mDimAnimator;
@@ -480,6 +477,10 @@
super(context, attrs, defStyleAttr, defStyleRes);
Resources res = getResources();
+ for (int i = 0; i < NUM_SECTIONS; i++) {
+ mSections[i] = new NotificationSection(this);
+ }
+
mAmbientState = new AmbientState(context);
mBgColor = context.getColor(R.color.notification_shade_background_color);
int minHeight = res.getDimensionPixelSize(R.dimen.notification_min_height);
@@ -656,7 +657,9 @@
@ShadeViewRefactor(RefactorComponent.DECORATOR)
protected void onDraw(Canvas canvas) {
if (mShouldDrawNotificationBackground
- && (mCurrentBounds.top < mCurrentBounds.bottom || mAmbientState.isDark())) {
+ && (mSections[0].getCurrentBounds().top
+ < mSections[NUM_SECTIONS - 1].getCurrentBounds().bottom
+ || mAmbientState.isDark())) {
drawBackground(canvas);
}
@@ -674,8 +677,8 @@
private void drawBackground(Canvas canvas) {
int lockScreenLeft = mSidePaddings;
int lockScreenRight = getWidth() - mSidePaddings;
- int lockScreenTop = mCurrentBounds.top;
- int lockScreenBottom = mCurrentBounds.bottom;
+ int lockScreenTop = mSections[0].getCurrentBounds().top;
+ int lockScreenBottom = mSections[NUM_SECTIONS - 1].getCurrentBounds().bottom;
int darkLeft = getWidth() / 2;
int darkTop = mRegularTopPadding;
@@ -683,21 +686,79 @@
float xProgress = mDarkXInterpolator.getInterpolation(
(1 - mLinearDarkAmount) * mBackgroundXFactor);
+ int left = (int) MathUtils.lerp(darkLeft, lockScreenLeft, xProgress);
+ int right = (int) MathUtils.lerp(darkLeft, lockScreenRight, xProgress);
+ int top = (int) MathUtils.lerp(darkTop, lockScreenTop, yProgress);
+ int bottom = (int) MathUtils.lerp(darkTop, lockScreenBottom, yProgress);
mBackgroundAnimationRect.set(
- (int) MathUtils.lerp(darkLeft, lockScreenLeft, xProgress),
- (int) MathUtils.lerp(darkTop, lockScreenTop, yProgress),
- (int) MathUtils.lerp(darkLeft, lockScreenRight, xProgress),
- (int) MathUtils.lerp(darkTop, lockScreenBottom, yProgress));
+ left,
+ top,
+ right,
+ bottom);
- if (!mAmbientState.isDark() || mFirstVisibleBackgroundChild != null) {
- canvas.drawRoundRect(mBackgroundAnimationRect.left, mBackgroundAnimationRect.top,
- mBackgroundAnimationRect.right, mBackgroundAnimationRect.bottom,
- mCornerRadius, mCornerRadius, mBackgroundPaint);
+ int backgroundTopAnimationOffset = top - lockScreenTop;
+ // TODO(kprevas): this may not be necessary any more since we don't display the shelf in AOD
+ boolean anySectionHasVisibleChild = false;
+ for (NotificationSection section : mSections) {
+ if (section.getFirstVisibleChild() != null) {
+ anySectionHasVisibleChild = true;
+ break;
+ }
+ }
+ if (!mAmbientState.isDark() || anySectionHasVisibleChild) {
+ drawBackgroundRects(canvas, left, right, top, backgroundTopAnimationOffset);
}
updateClipping();
}
+ /**
+ * Draws round rects for each background section.
+ *
+ * We want to draw a round rect for each background section as defined by {@link #mSections}.
+ * However, if two sections are directly adjacent with no gap between them (e.g. on the
+ * lockscreen where the shelf can appear directly below the high priority section, or while
+ * scrolling the shade so that the top of the shelf is right at the bottom of the high priority
+ * section), we don't want to round the adjacent corners.
+ *
+ * Since {@link Canvas} doesn't provide a way to draw a half-rounded rect, this means that we
+ * need to coalesce the backgrounds for adjacent sections and draw them as a single round rect.
+ * This method tracks the top of each rect we need to draw, then iterates through the visible
+ * sections. If a section is not adjacent to the previous section, we draw the previous rect
+ * behind the sections we've accumulated up to that point, then start a new rect at the top of
+ * the current section. When we're done iterating we will always have one rect left to draw.
+ */
+ private void drawBackgroundRects(Canvas canvas, int left, int right, int top,
+ int animationYOffset) {
+ int backgroundRectTop = top;
+ int lastSectionBottom =
+ mSections[0].getCurrentBounds().bottom + animationYOffset;
+ for (NotificationSection section : mSections) {
+ if (section.getFirstVisibleChild() == null) {
+ continue;
+ }
+ int sectionTop = section.getCurrentBounds().top + animationYOffset;
+ // If sections are directly adjacent to each other, we don't want to draw them
+ // as separate roundrects, as the rounded corners right next to each other look
+ // bad.
+ if (sectionTop - lastSectionBottom > DISTANCE_BETWEEN_ADJACENT_SECTIONS_PX) {
+ canvas.drawRoundRect(left,
+ backgroundRectTop,
+ right,
+ lastSectionBottom,
+ mCornerRadius, mCornerRadius, mBackgroundPaint);
+ backgroundRectTop = sectionTop;
+ }
+ lastSectionBottom =
+ section.getCurrentBounds().bottom + animationYOffset;
+ }
+ canvas.drawRoundRect(left,
+ backgroundRectTop,
+ right,
+ lastSectionBottom,
+ mCornerRadius, mCornerRadius, mBackgroundPaint);
+ }
+
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void updateBackgroundDimming() {
// No need to update the background color if it's not being drawn.
@@ -1067,7 +1128,8 @@
translationY = height - appearStartPosition + getExpandTranslationStart();
}
if (isHeadsUpTransition()) {
- stackHeight = mFirstVisibleBackgroundChild.getPinnedHeadsUpHeight();
+ stackHeight =
+ getFirstVisibleSection().getFirstVisibleChild().getPinnedHeadsUpHeight();
translationY = MathUtils.lerp(mHeadsUpInset - mTopPadding, 0, appearFraction);
} else {
stackHeight = (int) (height - translationY);
@@ -1134,7 +1196,8 @@
@ShadeViewRefactor(RefactorComponent.COORDINATOR)
private float getAppearStartPosition() {
if (isHeadsUpTransition()) {
- return mHeadsUpInset + mFirstVisibleBackgroundChild.getPinnedHeadsUpHeight();
+ return mHeadsUpInset
+ + getFirstVisibleSection().getFirstVisibleChild().getPinnedHeadsUpHeight();
}
return getMinExpansionHeight();
}
@@ -1187,8 +1250,9 @@
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private boolean isHeadsUpTransition() {
- return mTrackingHeadsUp && mFirstVisibleBackgroundChild != null
- && mAmbientState.isAboveShelf(mFirstVisibleBackgroundChild);
+ NotificationSection firstVisibleSection = getFirstVisibleSection();
+ return mTrackingHeadsUp && firstVisibleSection != null
+ && mAmbientState.isAboveShelf(firstVisibleSection.getFirstVisibleChild());
}
/**
@@ -2013,9 +2077,9 @@
}
updateBackgroundBounds();
- if (!mCurrentBounds.equals(mBackgroundBounds)) {
- boolean animate = mAnimateNextBackgroundTop || mAnimateNextBackgroundBottom
- || areBoundsAnimating();
+ if (didSectionBoundsChange()) {
+ boolean animate = mAnimateNextSectionBoundsChange || mAnimateNextBackgroundTop
+ || mAnimateNextBackgroundBottom || areSectionBoundsAnimating();
if (!isExpanded()) {
abortBackgroundAnimators();
animate = false;
@@ -2023,148 +2087,60 @@
if (animate) {
startBackgroundAnimation();
} else {
- mCurrentBounds.set(mBackgroundBounds);
+ for (NotificationSection section : mSections) {
+ section.resetCurrentBounds();
+ }
invalidate();
}
} else {
abortBackgroundAnimators();
}
- mAnimateNextBackgroundBottom = false;
mAnimateNextBackgroundTop = false;
+ mAnimateNextBackgroundBottom = false;
+ mAnimateNextSectionBoundsChange = false;
}
@ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void abortBackgroundAnimators() {
- if (mBottomAnimator != null) {
- mBottomAnimator.cancel();
- }
- if (mTopAnimator != null) {
- mTopAnimator.cancel();
+ for (NotificationSection section : mSections) {
+ section.cancelAnimators();
}
}
+ private boolean didSectionBoundsChange() {
+ for (NotificationSection section : mSections) {
+ if (section.didBoundsChange()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
- private boolean areBoundsAnimating() {
- return mBottomAnimator != null || mTopAnimator != null;
+ private boolean areSectionBoundsAnimating() {
+ for (NotificationSection section : mSections) {
+ if (section.areBoundsAnimating()) {
+ return true;
+ }
+ }
+ return false;
}
@ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void startBackgroundAnimation() {
- // left and right are always instantly applied
- mCurrentBounds.left = mBackgroundBounds.left;
- mCurrentBounds.right = mBackgroundBounds.right;
- startBottomAnimation();
- startTopAnimation();
- }
-
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
- private void startTopAnimation() {
- int previousEndValue = mEndAnimationRect.top;
- int newEndValue = mBackgroundBounds.top;
- ObjectAnimator previousAnimator = mTopAnimator;
- if (previousAnimator != null && previousEndValue == newEndValue) {
- return;
+ // TODO(kprevas): do we still need separate fields for top/bottom?
+ // or can each section manage its own animation state?
+ NotificationSection firstVisibleSection = getFirstVisibleSection();
+ NotificationSection lastVisibleSection = getLastVisibleSection();
+ for (NotificationSection section : mSections) {
+ section.startBackgroundAnimation(
+ section == firstVisibleSection
+ ? mAnimateNextBackgroundTop
+ : mAnimateNextSectionBoundsChange,
+ section == lastVisibleSection
+ ? mAnimateNextBackgroundBottom
+ : mAnimateNextSectionBoundsChange);
}
- if (!mAnimateNextBackgroundTop) {
- // just a local update was performed
- if (previousAnimator != null) {
- // we need to increase all animation keyframes of the previous animator by the
- // relative change to the end value
- int previousStartValue = mStartAnimationRect.top;
- PropertyValuesHolder[] values = previousAnimator.getValues();
- values[0].setIntValues(previousStartValue, newEndValue);
- mStartAnimationRect.top = previousStartValue;
- mEndAnimationRect.top = newEndValue;
- previousAnimator.setCurrentPlayTime(previousAnimator.getCurrentPlayTime());
- return;
- } else {
- // no new animation needed, let's just apply the value
- setBackgroundTop(newEndValue);
- return;
- }
- }
- if (previousAnimator != null) {
- previousAnimator.cancel();
- }
- ObjectAnimator animator = ObjectAnimator.ofInt(this, "backgroundTop",
- mCurrentBounds.top, newEndValue);
- Interpolator interpolator = Interpolators.FAST_OUT_SLOW_IN;
- animator.setInterpolator(interpolator);
- animator.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
- // remove the tag when the animation is finished
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mStartAnimationRect.top = -1;
- mEndAnimationRect.top = -1;
- mTopAnimator = null;
- }
- });
- animator.start();
- mStartAnimationRect.top = mCurrentBounds.top;
- mEndAnimationRect.top = newEndValue;
- mTopAnimator = animator;
- }
-
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
- private void startBottomAnimation() {
- int previousStartValue = mStartAnimationRect.bottom;
- int previousEndValue = mEndAnimationRect.bottom;
- int newEndValue = mBackgroundBounds.bottom;
- ObjectAnimator previousAnimator = mBottomAnimator;
- if (previousAnimator != null && previousEndValue == newEndValue) {
- return;
- }
- if (!mAnimateNextBackgroundBottom) {
- // just a local update was performed
- if (previousAnimator != null) {
- // we need to increase all animation keyframes of the previous animator by the
- // relative change to the end value
- PropertyValuesHolder[] values = previousAnimator.getValues();
- values[0].setIntValues(previousStartValue, newEndValue);
- mStartAnimationRect.bottom = previousStartValue;
- mEndAnimationRect.bottom = newEndValue;
- previousAnimator.setCurrentPlayTime(previousAnimator.getCurrentPlayTime());
- return;
- } else {
- // no new animation needed, let's just apply the value
- setBackgroundBottom(newEndValue);
- return;
- }
- }
- if (previousAnimator != null) {
- previousAnimator.cancel();
- }
- ObjectAnimator animator = ObjectAnimator.ofInt(this, "backgroundBottom",
- mCurrentBounds.bottom, newEndValue);
- Interpolator interpolator = Interpolators.FAST_OUT_SLOW_IN;
- animator.setInterpolator(interpolator);
- animator.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
- // remove the tag when the animation is finished
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mStartAnimationRect.bottom = -1;
- mEndAnimationRect.bottom = -1;
- mBottomAnimator = null;
- }
- });
- animator.start();
- mStartAnimationRect.bottom = mCurrentBounds.bottom;
- mEndAnimationRect.bottom = newEndValue;
- mBottomAnimator = animator;
- }
-
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- private void setBackgroundTop(int top) {
- mCurrentBounds.top = top;
- invalidate();
- }
-
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- public void setBackgroundBottom(int bottom) {
- mCurrentBounds.bottom = bottom;
- invalidate();
}
/**
@@ -2173,32 +2149,38 @@
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void updateBackgroundBounds() {
getLocationInWindow(mTempInt2);
- mBackgroundBounds.left = mTempInt2[0] + mSidePaddings;
- mBackgroundBounds.right = mTempInt2[0] + getWidth() - mSidePaddings;
+ int left = mTempInt2[0] + mSidePaddings;
+ int right = mTempInt2[0] + getWidth() - mSidePaddings;
+ for (NotificationSection section : mSections) {
+ section.getBounds().left = left;
+ section.getBounds().right = right;
+ }
if (!mIsExpanded) {
- mBackgroundBounds.top = 0;
- mBackgroundBounds.bottom = 0;
+ for (NotificationSection section : mSections) {
+ section.getBounds().top = 0;
+ section.getBounds().bottom = 0;
+ }
return;
}
- ActivatableNotificationView firstView = mFirstVisibleBackgroundChild;
+ NotificationSection firstSection = getFirstVisibleSection();
int top = 0;
- if (firstView != null) {
+ if (firstSection != null) {
+ ActivatableNotificationView firstView = firstSection.getFirstVisibleChild();
// Round Y up to avoid seeing the background during animation
int finalTranslationY = (int) Math.ceil(ViewState.getFinalTranslationY(firstView));
- if (mAnimateNextBackgroundTop
- || mTopAnimator == null && mCurrentBounds.top == finalTranslationY
- || mTopAnimator != null && mEndAnimationRect.top == finalTranslationY) {
+ if (mAnimateNextBackgroundTop || firstSection.isTargetTop(finalTranslationY)) {
// we're ending up at the same location as we are now, lets just skip the animation
top = finalTranslationY;
} else {
top = (int) Math.ceil(firstView.getTranslationY());
}
}
+ NotificationSection lastSection = getLastVisibleSection();
ActivatableNotificationView lastView =
mShelf.hasItemsInStableShelf() && mShelf.getVisibility() != GONE
? mShelf
- : mLastVisibleBackgroundChild;
+ : lastSection == null ? null : lastSection.getLastVisibleChild();
int bottom;
if (lastView != null) {
int finalTranslationY;
@@ -2209,9 +2191,7 @@
}
int finalHeight = ExpandableViewState.getFinalActualHeight(lastView);
int finalBottom = finalTranslationY + finalHeight - lastView.getClipBottomAmount();
- if (mAnimateNextBackgroundBottom
- || mBottomAnimator == null && mCurrentBounds.bottom == finalBottom
- || mBottomAnimator != null && mEndAnimationRect.bottom == finalBottom) {
+ if (mAnimateNextBackgroundBottom || lastSection.isTargetBottom(finalBottom)) {
// we're ending up at the same location as we are now, lets just skip the animation
bottom = finalBottom;
} else {
@@ -2228,8 +2208,38 @@
// otherwise the animation from the shade to the keyguard will jump as it's maxed
top = Math.max(0, top);
}
- mBackgroundBounds.top = top;
- mBackgroundBounds.bottom = Math.max(bottom, top);
+ bottom = Math.max(bottom, top);
+
+ setSectionBoundsByPriority(left, right, top, bottom, mSections[0], mSections[1]);
+ }
+
+ private void setSectionBoundsByPriority(int left, int right, int top, int bottom,
+ NotificationSection highPrioritySection, NotificationSection lowPrioritySection) {
+ if (NotificationUtils.useNewInterruptionModel(mContext)) {
+ // TODO(kprevas): can we use section boundary indices from mAmbientState instead?
+ ActivatableNotificationView lastChildAboveGap = getLastHighPriorityChild();
+ ActivatableNotificationView firstChildBelowGap = getFirstLowPriorityChild();
+ if (lastChildAboveGap != null && firstChildBelowGap != null) {
+ int gapTop =
+ (int) Math.max(top,
+ Math.min(lastChildAboveGap.getTranslationY()
+ + lastChildAboveGap.getActualHeight(),
+ bottom));
+ int gapBottom = (int) Math.max(top,
+ Math.min(firstChildBelowGap.getTranslationY(), bottom));
+ highPrioritySection.getBounds().set(left, top, right, gapTop);
+ lowPrioritySection.getBounds().set(left, gapBottom, right, bottom);
+ } else if (lastChildAboveGap != null) {
+ highPrioritySection.getBounds().set(left, top, right, bottom);
+ lowPrioritySection.getBounds().set(left, bottom, right, bottom);
+ } else {
+ highPrioritySection.getBounds().set(left, top, right, top);
+ lowPrioritySection.getBounds().set(left, top, right, bottom);
+ }
+ } else {
+ highPrioritySection.getBounds().set(left, top, right, bottom);
+ lowPrioritySection.getBounds().set(left, bottom, right, bottom);
+ }
}
@ShadeViewRefactor(RefactorComponent.COORDINATOR)
@@ -2248,6 +2258,25 @@
return null;
}
+ private NotificationSection getFirstVisibleSection() {
+ for (NotificationSection section : mSections) {
+ if (section.getFirstVisibleChild() != null) {
+ return section;
+ }
+ }
+ return null;
+ }
+
+ private NotificationSection getLastVisibleSection() {
+ for (int i = mSections.length - 1; i >= 0; i--) {
+ NotificationSection section = mSections[i];
+ if (section.getLastVisibleChild() != null) {
+ return section;
+ }
+ }
+ return null;
+ }
+
@ShadeViewRefactor(RefactorComponent.COORDINATOR)
private ActivatableNotificationView getLastChildWithBackground() {
int childCount = getChildCount();
@@ -2274,6 +2303,43 @@
return null;
}
+ @ShadeViewRefactor(RefactorComponent.COORDINATOR)
+ @Nullable
+ private ActivatableNotificationView getLastHighPriorityChild() {
+ ActivatableNotificationView lastChildBeforeGap = null;
+ int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ View child = getChildAt(i);
+ if (child.getVisibility() != View.GONE && child instanceof ExpandableNotificationRow) {
+ ExpandableNotificationRow row = (ExpandableNotificationRow) child;
+ if (mEntryManager.getNotificationData().isHighPriority(
+ row.getStatusBarNotification())) {
+ break;
+ } else {
+ lastChildBeforeGap = row;
+ }
+ }
+ }
+ return lastChildBeforeGap;
+ }
+
+ @ShadeViewRefactor(RefactorComponent.COORDINATOR)
+ @Nullable
+ private ActivatableNotificationView getFirstLowPriorityChild() {
+ int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ View child = getChildAt(i);
+ if (child.getVisibility() != View.GONE && child instanceof ExpandableNotificationRow) {
+ ExpandableNotificationRow row = (ExpandableNotificationRow) child;
+ if (!mEntryManager.getNotificationData().isHighPriority(
+ row.getStatusBarNotification())) {
+ return row;
+ }
+ }
+ }
+ return null;
+ }
+
/**
* Fling the scroll view
*
@@ -2391,7 +2457,7 @@
final int firstChildMinHeight = firstChild != null ? firstChild.getCollapsedHeight()
: mCollapsedSize;
int shelfHeight = 0;
- if (mLastVisibleBackgroundChild != null && mShelf.getVisibility() != GONE) {
+ if (getLastVisibleSection() != null && mShelf.getVisibility() != GONE) {
shelfHeight = mShelf.getIntrinsicHeight();
}
return mIntrinsicPadding + firstChildMinHeight + shelfHeight;
@@ -2700,23 +2766,68 @@
@ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateFirstAndLastBackgroundViews() {
+ NotificationSection firstSection = getFirstVisibleSection();
+ NotificationSection lastSection = getLastVisibleSection();
+
ActivatableNotificationView firstChild = getFirstChildWithBackground();
ActivatableNotificationView lastChild = getLastChildWithBackground();
+ boolean sectionViewsChanged = updateFirstAndLastViewsInSectionsByPriority(
+ mSections[0], mSections[1], firstChild, lastChild);
+
if (mAnimationsEnabled && mIsExpanded) {
- mAnimateNextBackgroundTop = firstChild != mFirstVisibleBackgroundChild;
- mAnimateNextBackgroundBottom = lastChild != mLastVisibleBackgroundChild;
+ mAnimateNextBackgroundTop =
+ firstSection == null || firstChild != firstSection.getFirstVisibleChild();
+ mAnimateNextBackgroundBottom =
+ lastSection == null || lastChild != lastSection.getLastVisibleChild();
+ mAnimateNextSectionBoundsChange = sectionViewsChanged;
} else {
mAnimateNextBackgroundTop = false;
mAnimateNextBackgroundBottom = false;
+ mAnimateNextSectionBoundsChange = false;
}
- mFirstVisibleBackgroundChild = firstChild;
- mLastVisibleBackgroundChild = lastChild;
mAmbientState.setLastVisibleBackgroundChild(lastChild);
- mRoundnessManager.setFirstAndLastBackgroundChild(mFirstVisibleBackgroundChild,
- mLastVisibleBackgroundChild);
+ mRoundnessManager.updateRoundedChildren(mSections);
invalidate();
}
+ /** @return {@code true} if the last view in the top section changed (so we need to animate). */
+ private boolean updateFirstAndLastViewsInSectionsByPriority(
+ final NotificationSection highPrioritySection,
+ final NotificationSection lowPrioritySection,
+ ActivatableNotificationView firstChild,
+ ActivatableNotificationView lastChild) {
+ if (NotificationUtils.useNewInterruptionModel(mContext)) {
+ ActivatableNotificationView previousLastHighPriorityChild =
+ highPrioritySection.getLastVisibleChild();
+ ActivatableNotificationView previousFirstLowPriorityChild =
+ lowPrioritySection.getFirstVisibleChild();
+ ActivatableNotificationView lastHighPriorityChild = getLastHighPriorityChild();
+ ActivatableNotificationView firstLowPriorityChild = getFirstLowPriorityChild();
+ if (lastHighPriorityChild != null && firstLowPriorityChild != null) {
+ highPrioritySection.setFirstVisibleChild(firstChild);
+ highPrioritySection.setLastVisibleChild(lastHighPriorityChild);
+ lowPrioritySection.setFirstVisibleChild(firstLowPriorityChild);
+ lowPrioritySection.setLastVisibleChild(lastChild);
+ } else if (lastHighPriorityChild != null) {
+ highPrioritySection.setFirstVisibleChild(firstChild);
+ highPrioritySection.setLastVisibleChild(lastChild);
+ lowPrioritySection.setFirstVisibleChild(null);
+ lowPrioritySection.setLastVisibleChild(null);
+ } else {
+ highPrioritySection.setFirstVisibleChild(null);
+ highPrioritySection.setLastVisibleChild(null);
+ lowPrioritySection.setFirstVisibleChild(firstChild);
+ lowPrioritySection.setLastVisibleChild(lastChild);
+ }
+ return lastHighPriorityChild != previousLastHighPriorityChild
+ || firstLowPriorityChild != previousFirstLowPriorityChild;
+ } else {
+ highPrioritySection.setFirstVisibleChild(firstChild);
+ highPrioritySection.setLastVisibleChild(lastChild);
+ return false;
+ }
+ }
+
@ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void onViewAddedInternal(View child) {
updateHideSensitiveForChild(child);
@@ -3903,9 +4014,14 @@
ExpandableNotificationRow row = view instanceof ExpandableNotificationRow
? (ExpandableNotificationRow) view
: null;
- if (row != null && (row == mFirstVisibleBackgroundChild
- || row.getNotificationParent() == mFirstVisibleBackgroundChild)) {
- updateAlgorithmLayoutMinHeight();
+ NotificationSection firstSection = getFirstVisibleSection();
+ ActivatableNotificationView firstVisibleChild =
+ firstSection == null ? null : firstSection.getFirstVisibleChild();
+ if (row != null) {
+ if (row == firstVisibleChild
+ || row.getNotificationParent() == firstVisibleChild) {
+ updateAlgorithmLayoutMinHeight();
+ }
}
if (needsAnimation) {
requestAnimationOnViewResize(row);
@@ -3933,7 +4049,10 @@
endPosition += row.getNotificationParent().getTranslationY();
}
int layoutEnd = mMaxLayoutHeight + (int) mStackTranslation;
- if (row != mLastVisibleBackgroundChild && mShelf.getVisibility() != GONE) {
+ NotificationSection lastSection = getLastVisibleSection();
+ ActivatableNotificationView lastVisibleChild =
+ lastSection == null ? null : lastSection.getLastVisibleChild();
+ if (row != lastVisibleChild && mShelf.getVisibility() != GONE) {
layoutEnd -= mShelf.getIntrinsicHeight() + mPaddingBetweenElements;
}
if (endPosition > layoutEnd) {
@@ -4014,6 +4133,11 @@
return mAmbientState.isDimmed();
}
+ @VisibleForTesting
+ int getSectionBoundaryIndex(int boundaryNum) {
+ return mAmbientState.getSectionBoundaryIndex(boundaryNum);
+ }
+
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void setDimAmount(float dimAmount) {
mDimAmount = dimAmount;
@@ -5091,9 +5215,8 @@
beforeSpeedBump = !mEntryManager.getNotificationData().isAmbient(
row.getStatusBarNotification().getKey());
} else {
- beforeSpeedBump = mEntryManager.getNotificationData().getImportance(
- row.getStatusBarNotification().getKey())
- >= NotificationManager.IMPORTANCE_DEFAULT;
+ beforeSpeedBump = mEntryManager.getNotificationData().isHighPriority(
+ row.getStatusBarNotification());
}
if (beforeSpeedBump) {
speedBumpIndex = currentIndex;
@@ -5103,6 +5226,33 @@
updateSpeedBumpIndex(speedBumpIndex, noAmbient);
}
+ /** Updates the indices of the boundaries between sections. */
+ @ShadeViewRefactor(RefactorComponent.INPUT)
+ public void updateSectionBoundaries() {
+ int gapIndex = -1;
+ if (NotificationUtils.useNewInterruptionModel(mContext)) {
+ int currentIndex = 0;
+ final int n = getChildCount();
+ for (int i = 0; i < n; i++) {
+ View view = getChildAt(i);
+ if (view.getVisibility() == View.GONE
+ || !(view instanceof ExpandableNotificationRow)) {
+ continue;
+ }
+ ExpandableNotificationRow row = (ExpandableNotificationRow) view;
+ if (!mEntryManager.getNotificationData().isHighPriority(
+ row.getStatusBarNotification())) {
+ if (currentIndex > 0) {
+ gapIndex = currentIndex;
+ }
+ break;
+ }
+ currentIndex++;
+ }
+ }
+ mAmbientState.setSectionBoundaryIndex(0, gapIndex);
+ }
+
@ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateContinuousShadowDrawing() {
boolean continuousShadowUpdate = mAnimationRunning
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
index 742d89d..8c13489 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
@@ -21,13 +21,14 @@
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
+
import com.android.systemui.R;
import com.android.systemui.statusbar.EmptyShadeView;
+import com.android.systemui.statusbar.NotificationShelf;
+import com.android.systemui.statusbar.notification.NotificationUtils;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
import com.android.systemui.statusbar.notification.row.FooterView;
-import com.android.systemui.statusbar.NotificationShelf;
-import com.android.systemui.statusbar.notification.NotificationUtils;
import java.util.ArrayList;
import java.util.HashMap;
@@ -44,6 +45,7 @@
private int mPaddingBetweenElements;
private int mIncreasedPaddingBetweenElements;
+ private int mGapHeight;
private int mCollapsedSize;
private StackScrollAlgorithmState mTempAlgorithmState = new StackScrollAlgorithmState();
@@ -74,6 +76,7 @@
R.dimen.heads_up_status_bar_padding);
mPinnedZTranslationExtra = res.getDimensionPixelSize(
R.dimen.heads_up_pinned_elevation);
+ mGapHeight = res.getDimensionPixelSize(R.dimen.notification_section_divider_height);
}
public void getStackScrollState(AmbientState ambientState, StackScrollState resultState) {
@@ -387,6 +390,9 @@
childViewState.location = ExpandableViewState.LOCATION_UNKNOWN;
int paddingAfterChild = getPaddingAfterChild(algorithmState, child);
int childHeight = getMaxAllowedChildHeight(child);
+ if (ambientState.beginsNewSection(i)) {
+ currentYPosition += mGapHeight;
+ }
childViewState.yTranslation = currentYPosition;
boolean isFooterView = child instanceof FooterView;
boolean isEmptyShadeView = child instanceof EmptyShadeView;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
index 4eca6bb..119f01a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
@@ -263,6 +263,16 @@
}
}
+ public void setTranslation(int x, int y, int z) {
+ final int N = mViews.size();
+ for (int i = 0; i < N; i++) {
+ final View view = mViews.get(i);
+ view.setTranslationX(x);
+ view.setTranslationY(y);
+ view.setTranslationZ(z);
+ }
+ }
+
public ArrayList<View> getViews() {
return mViews;
}
@@ -276,6 +286,11 @@
if (mImageDrawable != null) {
mImageDrawable.setCallback(mCurrentView);
}
+ if (mCurrentView != null) {
+ mCurrentView.setTranslationX(0);
+ mCurrentView.setTranslationY(0);
+ mCurrentView.setTranslationZ(0);
+ }
}
public void setVertical(boolean vertical) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBackAction.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBackAction.java
new file mode 100644
index 0000000..1002f9e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBackAction.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_HOME;
+
+import android.annotation.NonNull;
+import android.hardware.input.InputManager;
+import android.os.Handler;
+import android.os.SystemClock;
+import android.view.HapticFeedbackConstants;
+import android.view.InputDevice;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+
+import com.android.systemui.recents.OverviewProxyService;
+
+/**
+ * A back action when triggered will execute a back command
+ */
+public class NavigationBackAction extends NavigationGestureAction {
+
+ private static final String PULL_HOME_GO_BACK_PROP = "quickstepcontroller_homegoesback";
+ private static final String BACK_AFTER_END_PROP =
+ "quickstepcontroller_homegoesbackwhenend";
+ private static final String NAVBAR_EXPERIMENTS_DISABLED = "navbarexperiments_disabled";
+ private static final long BACK_BUTTON_FADE_OUT_ALPHA = 60;
+ private static final long BACK_GESTURE_POLL_TIMEOUT = 1000;
+
+ private final Handler mHandler = new Handler();
+
+ private final Runnable mExecuteBackRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (isEnabled() && canPerformAction()) {
+ performBack();
+ mHandler.postDelayed(this, BACK_GESTURE_POLL_TIMEOUT);
+ }
+ }
+ };
+
+ public NavigationBackAction(@NonNull NavigationBarView navigationBarView,
+ @NonNull OverviewProxyService service) {
+ super(navigationBarView, service);
+ }
+
+ @Override
+ public int requiresTouchDownHitTarget() {
+ return HIT_TARGET_HOME;
+ }
+
+ @Override
+ public boolean requiresDragWithHitTarget() {
+ return true;
+ }
+
+ @Override
+ public boolean canPerformAction() {
+ return mProxySender.getBackButtonAlpha() > 0;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return swipeHomeGoBackGestureEnabled();
+ }
+
+ @Override
+ protected void onGestureStart(MotionEvent event) {
+ if (!QuickStepController.shouldhideBackButton(getContext())) {
+ mNavigationBarView.getBackButton().setAlpha(0 /* alpha */, true /* animate */,
+ BACK_BUTTON_FADE_OUT_ALPHA);
+ }
+ mHandler.removeCallbacks(mExecuteBackRunnable);
+ if (!shouldExecuteBackOnUp()) {
+ performBack();
+ mHandler.postDelayed(mExecuteBackRunnable, BACK_GESTURE_POLL_TIMEOUT);
+ }
+ }
+
+ @Override
+ protected void onGestureEnd() {
+ mHandler.removeCallbacks(mExecuteBackRunnable);
+ if (!QuickStepController.shouldhideBackButton(getContext())) {
+ mNavigationBarView.getBackButton().setAlpha(
+ mProxySender.getBackButtonAlpha(), true /* animate */);
+ }
+ if (shouldExecuteBackOnUp()) {
+ performBack();
+ }
+ }
+
+ private void performBack() {
+ sendEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
+ sendEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
+ mNavigationBarView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
+ }
+
+ private boolean swipeHomeGoBackGestureEnabled() {
+ return !getGlobalBoolean(NAVBAR_EXPERIMENTS_DISABLED)
+ && getGlobalBoolean(PULL_HOME_GO_BACK_PROP);
+ }
+
+ private boolean shouldExecuteBackOnUp() {
+ return !getGlobalBoolean(NAVBAR_EXPERIMENTS_DISABLED)
+ && getGlobalBoolean(BACK_AFTER_END_PROP);
+ }
+
+ private void sendEvent(int action, int code) {
+ long when = SystemClock.uptimeMillis();
+ final KeyEvent ev = new KeyEvent(when, when, action, code, 0 /* repeat */,
+ 0 /* metaState */, KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /* scancode */,
+ KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY,
+ InputDevice.SOURCE_KEYBOARD);
+ InputManager.getInstance().injectInputEvent(ev, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 6728f08..2c3c27f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -38,9 +38,11 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.os.RemoteException;
import android.os.SystemProperties;
import android.util.AttributeSet;
import android.util.Log;
+import android.util.Slog;
import android.util.SparseArray;
import android.view.Display;
import android.view.MotionEvent;
@@ -49,6 +51,7 @@
import android.view.ViewGroup;
import android.view.WindowInsets;
import android.view.WindowManager;
+import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
import android.view.inputmethod.InputMethodManager;
@@ -143,6 +146,10 @@
private RecentsOnboarding mRecentsOnboarding;
private NotificationPanelView mPanelView;
+ private QuickScrubAction mQuickScrubAction;
+ private QuickStepAction mQuickStepAction;
+ private NavigationBackAction mBackAction;
+
/**
* Helper that is responsible for showing the right toast when a disallowed activity operation
* occurred. In pinned mode, we show instructions on how to break out of this mode, whilst in
@@ -299,6 +306,10 @@
mButtonDispatchers.put(R.id.rotate_suggestion, rotateSuggestionButton);
mButtonDispatchers.put(R.id.menu_container, mContextualButtonGroup);
mDeadZone = new DeadZone(this);
+
+ mQuickScrubAction = new QuickScrubAction(this, mOverviewProxyService);
+ mQuickStepAction = new QuickStepAction(this, mOverviewProxyService);
+ mBackAction = new NavigationBackAction(this, mOverviewProxyService);
}
public BarTransitions getBarTransitions() {
@@ -313,6 +324,8 @@
mPanelView = panel;
if (mGestureHelper instanceof QuickStepController) {
((QuickStepController) mGestureHelper).setComponents(this);
+ ((QuickStepController) mGestureHelper).setGestureActions(mQuickStepAction,
+ null /* swipeDownAction*/, mBackAction, mQuickScrubAction);
}
}
@@ -756,24 +769,6 @@
mRecentsOnboarding.hide(true);
}
- /**
- * @return the button at the given {@param x} and {@param y}.
- */
- ButtonDispatcher getButtonAtPosition(int x, int y) {
- for (int i = 0; i < mButtonDispatchers.size(); i++) {
- ButtonDispatcher button = mButtonDispatchers.valueAt(i);
- View buttonView = button.getCurrentView();
- if (buttonView != null) {
- buttonView.getHitRect(mTmpRect);
- offsetDescendantRectToMyCoords(buttonView, mTmpRect);
- if (mTmpRect.contains(x, y)) {
- return button;
- }
- }
- }
- return null;
- }
-
@Override
public void onFinishInflate() {
mNavigationInflaterView = findViewById(R.id.navigation_inflater);
@@ -908,7 +903,13 @@
private void updateTaskSwitchHelper() {
if (mGestureHelper == null) return;
boolean isRtl = (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL);
- mGestureHelper.setBarState(mVertical, isRtl);
+ int navBarPos = 0;
+ try {
+ navBarPos = WindowManagerGlobal.getWindowManagerService().getNavBarPosition();
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Failed to get nav bar position.", e);
+ }
+ mGestureHelper.setBarState(isRtl, navBarPos);
}
@Override
@@ -1112,6 +1113,14 @@
mContextualButtonGroup.dump(pw);
if (mGestureHelper != null) {
+ pw.println("Navigation Gesture Actions {");
+ pw.print(" "); pw.println("QuickScrub Enabled=" + mQuickScrubAction.isEnabled());
+ pw.print(" "); pw.println("QuickScrub Active=" + mQuickScrubAction.isActive());
+ pw.print(" "); pw.println("QuickStep Enabled=" + mQuickStepAction.isEnabled());
+ pw.print(" "); pw.println("QuickStep Active=" + mQuickStepAction.isActive());
+ pw.print(" "); pw.println("Back Gesture Enabled=" + mBackAction.isEnabled());
+ pw.print(" "); pw.println("Back Gesture Active=" + mBackAction.isActive());
+ pw.println("}");
mGestureHelper.dump(pw);
}
mRecentsOnboarding.dump(pw);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationGestureAction.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationGestureAction.java
new file mode 100644
index 0000000..593bfae
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationGestureAction.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_LEFT;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_RIGHT;
+
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_NONE;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.view.MotionEvent;
+
+import android.view.WindowManagerPolicyConstants;
+import com.android.systemui.recents.OverviewProxyService;
+
+/**
+ * A gesture action that would be triggered and reassigned by {@link QuickStepController}
+ */
+public abstract class NavigationGestureAction {
+
+ protected final NavigationBarView mNavigationBarView;
+ protected final OverviewProxyService mProxySender;
+
+ protected int mNavigationBarPosition;
+ protected boolean mDragHorizontalPositive;
+ protected boolean mDragVerticalPositive;
+ private boolean mIsActive;
+
+ public NavigationGestureAction(@NonNull NavigationBarView navigationBarView,
+ @NonNull OverviewProxyService service) {
+ mNavigationBarView = navigationBarView;
+ mProxySender = service;
+ }
+
+ /**
+ * Pass event that the state of the bar (such as rotation) has changed
+ * @param changed if rotation or drag positive direction (such as ltr) has changed
+ * @param navBarPos position of navigation bar
+ * @param dragHorPositive direction of positive horizontal drag, could change with ltr changes
+ * @param dragVerPositive direction of positive vertical drag, could change with ltr changes
+ */
+ public void setBarState(boolean changed, int navBarPos, boolean dragHorPositive,
+ boolean dragVerPositive) {
+ mNavigationBarPosition = navBarPos;
+ mDragHorizontalPositive = dragHorPositive;
+ mDragVerticalPositive = dragVerPositive;
+ }
+
+ /**
+ * Resets the state of the action. Called when touch down occurs over the Navigation Bar.
+ */
+ public void reset() {
+ mIsActive = false;
+ }
+
+ /**
+ * Start the gesture and the action will be active
+ * @param event the event that caused the gesture
+ */
+ public void startGesture(MotionEvent event) {
+ mIsActive = true;
+ onGestureStart(event);
+ }
+
+ /**
+ * Gesture has ended with action cancel or up and this action will not be active
+ */
+ public void endGesture() {
+ mIsActive = false;
+ onGestureEnd();
+ }
+
+ /**
+ * If the action is currently active based on the gesture that triggered it. Only one action
+ * can occur at a time
+ * @return whether or not if this action has been triggered
+ */
+ public boolean isActive() {
+ return mIsActive;
+ }
+
+ /**
+ * @return whether or not this action can run if notification shade is shown
+ */
+ public boolean canRunWhenNotificationsShowing() {
+ return true;
+ }
+
+ /**
+ * @return whether or not this action triggers when starting a gesture from a certain hit target
+ * If {@link HIT_TARGET_NONE} is specified then action does not need to be triggered by button
+ */
+ public int requiresTouchDownHitTarget() {
+ return HIT_TARGET_NONE;
+ }
+
+ /**
+ * @return whether or not to move the button that started gesture over with user input drag
+ */
+ public boolean requiresDragWithHitTarget() {
+ return false;
+ }
+
+ /**
+ * Tell if the action is able to execute. Note that {@link #isEnabled()} must be true for this
+ * to be checked. The difference between this and {@link #isEnabled()} is that this dependent
+ * on the state of the navigation bar
+ * @return true if action can execute after gesture activates based on current states
+ */
+ public boolean canPerformAction() {
+ return true;
+ }
+
+ /**
+ * Tell if action is enabled. Compared to {@link #canPerformAction()} this is based on settings
+ * if the action is disabled for a particular gesture. For example a back action can be enabled
+ * however if there is nothing to back to then {@link #canPerformAction()} should return false.
+ * In this way if the action requires {@link #requiresDragWithHitTarget()} then if enabled, the
+ * button can be dragged with a large dampening factor during the gesture but will not activate
+ * the action.
+ * @return true if this action is enabled and can run
+ */
+ public abstract boolean isEnabled();
+
+ protected void onDarkIntensityChange(float intensity) {
+ }
+
+ protected void onDraw(Canvas canvas) {
+ }
+
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ }
+
+ /**
+ * When gesture starts, this will run to execute the action
+ * @param event the event that triggered the gesture
+ */
+ protected abstract void onGestureStart(MotionEvent event);
+
+ /**
+ * Channels motion move events to the action to track the user inputs
+ * @param x the x position
+ * @param y the y position
+ */
+ public void onGestureMove(int x, int y) {
+ }
+
+ /**
+ * When gesture ends, this will run from action up or cancel
+ */
+ protected void onGestureEnd() {
+ }
+
+ protected Context getContext() {
+ return mNavigationBarView.getContext();
+ }
+
+ protected boolean isNavBarVertical() {
+ return mNavigationBarPosition == NAV_BAR_LEFT || mNavigationBarPosition == NAV_BAR_RIGHT;
+ }
+
+ protected boolean getGlobalBoolean(@NonNull String key) {
+ return QuickStepController.getBoolGlobalSetting(getContext(), key);
+ }
+}
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 8e90f98..184766c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
@@ -2,7 +2,6 @@
import static com.android.systemui.doze.util.BurnInHelperKt.getBurnInOffset;
-import android.app.NotificationManager;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
@@ -190,8 +189,7 @@
return false;
}
if (!showLowPriority
- && mEntryManager.getNotificationData().getImportance(entry.key)
- < NotificationManager.IMPORTANCE_DEFAULT) {
+ && !mEntryManager.getNotificationData().isHighPriority(entry.notification)) {
return false;
}
if (!StatusBar.isTopLevelChild(entry)) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index f4c2e27..ecf6b6a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -2981,6 +2981,7 @@
}
public void updateNotificationViews() {
+ mNotificationStackScroller.updateSectionBoundaries();
mNotificationStackScroller.updateSpeedBumpIndex();
mNotificationStackScroller.updateFooter();
updateShowEmptyShadeView();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickScrubAction.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickScrubAction.java
new file mode 100644
index 0000000..c64e124
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickScrubAction.java
@@ -0,0 +1,329 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import static com.android.systemui.Interpolators.ALPHA_IN;
+import static com.android.systemui.Interpolators.ALPHA_OUT;
+import static com.android.systemui.recents.OverviewProxyService.DEBUG_OVERVIEW_PROXY;
+import static com.android.systemui.recents.OverviewProxyService.TAG_OPS;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.annotation.NonNull;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.RadialGradient;
+import android.graphics.Rect;
+import android.graphics.Shader;
+import android.os.RemoteException;
+
+import android.util.FloatProperty;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+
+import com.android.systemui.R;
+import com.android.systemui.recents.OverviewProxyService;
+import com.android.systemui.shared.recents.utilities.Utilities;
+
+/**
+ * QuickScrub action to send to launcher to start quickscrub gesture
+ */
+public class QuickScrubAction extends NavigationGestureAction {
+ private static final String TAG = "QuickScrubAction";
+
+ private static final float TRACK_SCALE = 0.95f;
+ private static final float GRADIENT_WIDTH = .75f;
+ private static final int ANIM_IN_DURATION_MS = 150;
+ private static final int ANIM_OUT_DURATION_MS = 134;
+
+ private AnimatorSet mTrackAnimator;
+ private View mCurrentNavigationBarView;
+
+ private float mTrackScale = TRACK_SCALE;
+ private float mTrackAlpha;
+ private float mHighlightCenter;
+ private float mDarkIntensity;
+
+ private final int mTrackThickness;
+ private final int mTrackEndPadding;
+ private final Paint mTrackPaint = new Paint();
+ private final Rect mTrackRect = new Rect();
+
+ private final FloatProperty<QuickScrubAction> mTrackAlphaProperty =
+ new FloatProperty<QuickScrubAction>("TrackAlpha") {
+ @Override
+ public void setValue(QuickScrubAction action, float alpha) {
+ mTrackAlpha = alpha;
+ mNavigationBarView.invalidate();
+ }
+
+ @Override
+ public Float get(QuickScrubAction action) {
+ return mTrackAlpha;
+ }
+ };
+
+ private final FloatProperty<QuickScrubAction> mTrackScaleProperty =
+ new FloatProperty<QuickScrubAction>("TrackScale") {
+ @Override
+ public void setValue(QuickScrubAction action, float scale) {
+ mTrackScale = scale;
+ mNavigationBarView.invalidate();
+ }
+
+ @Override
+ public Float get(QuickScrubAction action) {
+ return mTrackScale;
+ }
+ };
+
+ private final FloatProperty<QuickScrubAction> mNavBarAlphaProperty =
+ new FloatProperty<QuickScrubAction>("NavBarAlpha") {
+ @Override
+ public void setValue(QuickScrubAction action, float alpha) {
+ if (mCurrentNavigationBarView != null) {
+ mCurrentNavigationBarView.setAlpha(alpha);
+ }
+ }
+
+ @Override
+ public Float get(QuickScrubAction action) {
+ if (mCurrentNavigationBarView != null) {
+ return mCurrentNavigationBarView.getAlpha();
+ }
+ return 1f;
+ }
+ };
+
+ private AnimatorListenerAdapter mQuickScrubEndListener = new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (mCurrentNavigationBarView != null) {
+ mCurrentNavigationBarView.setAlpha(1f);
+ }
+ mCurrentNavigationBarView = null;
+ updateHighlight();
+ }
+ };
+
+ public QuickScrubAction(@NonNull NavigationBarView navigationBarView,
+ @NonNull OverviewProxyService service) {
+ super(navigationBarView, service);
+ mTrackPaint.setAntiAlias(true);
+ mTrackPaint.setDither(true);
+
+ final Resources res = navigationBarView.getResources();
+ mTrackThickness = res.getDimensionPixelSize(R.dimen.nav_quick_scrub_track_thickness);
+ mTrackEndPadding = res.getDimensionPixelSize(R.dimen.nav_quick_scrub_track_edge_padding);
+ }
+
+ @Override
+ public void setBarState(boolean changed, int navBarPos, boolean dragHorPositive,
+ boolean dragVerPositive) {
+ super.setBarState(changed, navBarPos, dragHorPositive, dragVerPositive);
+ if (changed && isActive()) {
+ // End quickscrub if the state changes mid-transition
+ endQuickScrub(false /* animate */);
+ }
+ }
+
+ @Override
+ public void reset() {
+ super.reset();
+
+ // End any existing quickscrub animations before starting the new transition
+ if (mTrackAnimator != null) {
+ mTrackAnimator.end();
+ mTrackAnimator = null;
+ }
+ mCurrentNavigationBarView = mNavigationBarView.getCurrentView();
+ }
+
+ @Override
+ public void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ final int paddingLeft = mNavigationBarView.getPaddingLeft();
+ final int paddingTop = mNavigationBarView.getPaddingTop();
+ final int paddingRight = mNavigationBarView.getPaddingRight();
+ final int paddingBottom = mNavigationBarView.getPaddingBottom();
+ final int width = (right - left) - paddingRight - paddingLeft;
+ final int height = (bottom - top) - paddingBottom - paddingTop;
+ final int x1, x2, y1, y2;
+ if (isNavBarVertical()) {
+ x1 = (width - mTrackThickness) / 2 + paddingLeft;
+ x2 = x1 + mTrackThickness;
+ y1 = paddingTop + mTrackEndPadding;
+ y2 = y1 + height - 2 * mTrackEndPadding;
+ } else {
+ y1 = (height - mTrackThickness) / 2 + paddingTop;
+ y2 = y1 + mTrackThickness;
+ x1 = mNavigationBarView.getPaddingStart() + mTrackEndPadding;
+ x2 = x1 + width - 2 * mTrackEndPadding;
+ }
+ mTrackRect.set(x1, y1, x2, y2);
+ }
+
+ @Override
+ public void onDarkIntensityChange(float intensity) {
+ mDarkIntensity = intensity;
+ updateHighlight();
+ }
+
+ @Override
+ public void onDraw(Canvas canvas) {
+ if (!isEnabled()) {
+ return;
+ }
+ mTrackPaint.setAlpha(Math.round(255f * mTrackAlpha));
+
+ // Scale the track, but apply the inverse scale from the nav bar
+ final float radius = mTrackRect.height() / 2;
+ canvas.save();
+ float translate = Utilities.clamp(mHighlightCenter, mTrackRect.left, mTrackRect.right);
+ canvas.translate(translate, 0);
+ canvas.scale(mTrackScale / mNavigationBarView.getScaleX(),
+ 1f / mNavigationBarView.getScaleY(),
+ mTrackRect.centerX(), mTrackRect.centerY());
+ canvas.drawRoundRect(mTrackRect.left - translate, mTrackRect.top,
+ mTrackRect.right - translate, mTrackRect.bottom, radius, radius, mTrackPaint);
+ canvas.restore();
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return mNavigationBarView.isQuickScrubEnabled();
+ }
+
+ @Override
+ protected void onGestureStart(MotionEvent event) {
+ updateHighlight();
+ ObjectAnimator trackAnimator = ObjectAnimator.ofPropertyValuesHolder(this,
+ PropertyValuesHolder.ofFloat(mTrackAlphaProperty, 1f),
+ PropertyValuesHolder.ofFloat(mTrackScaleProperty, 1f));
+ trackAnimator.setInterpolator(ALPHA_IN);
+ trackAnimator.setDuration(ANIM_IN_DURATION_MS);
+ ObjectAnimator navBarAnimator = ObjectAnimator.ofFloat(this, mNavBarAlphaProperty, 0f);
+ navBarAnimator.setInterpolator(ALPHA_OUT);
+ navBarAnimator.setDuration(ANIM_OUT_DURATION_MS);
+ mTrackAnimator = new AnimatorSet();
+ mTrackAnimator.playTogether(trackAnimator, navBarAnimator);
+ mTrackAnimator.start();
+
+ // Disable slippery for quick scrub to not cancel outside the nav bar
+ mNavigationBarView.updateSlippery();
+
+ try {
+ mProxySender.getProxy().onQuickScrubStart();
+ if (DEBUG_OVERVIEW_PROXY) {
+ Log.d(TAG_OPS, "Quick Scrub Start");
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to send start of quick scrub.", e);
+ }
+ mProxySender.notifyQuickScrubStarted();
+ }
+
+ @Override
+ public void onGestureMove(int x, int y) {
+ int trackSize, offset;
+ if (isNavBarVertical()) {
+ trackSize = mTrackRect.height();
+ offset = y - mTrackRect.top;
+ } else {
+ offset = x - mTrackRect.left;
+ trackSize = mTrackRect.width();
+ }
+ if (!mDragHorizontalPositive || !mDragVerticalPositive) {
+ offset -= isNavBarVertical() ? mTrackRect.height() : mTrackRect.width();
+ }
+ float scrubFraction = Utilities.clamp(Math.abs(offset) * 1f / trackSize, 0, 1);
+ try {
+ mProxySender.getProxy().onQuickScrubProgress(scrubFraction);
+ if (DEBUG_OVERVIEW_PROXY) {
+ Log.d(TAG_OPS, "Quick Scrub Progress:" + scrubFraction);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to send progress of quick scrub.", e);
+ }
+ mHighlightCenter = x;
+ mNavigationBarView.invalidate();
+ }
+
+ @Override
+ protected void onGestureEnd() {
+ endQuickScrub(true /* animate */);
+ }
+
+ private void endQuickScrub(boolean animate) {
+ animateEnd();
+ try {
+ mProxySender.getProxy().onQuickScrubEnd();
+ if (DEBUG_OVERVIEW_PROXY) {
+ Log.d(TAG_OPS, "Quick Scrub End");
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to send end of quick scrub.", e);
+ }
+ if (!animate) {
+ if (mTrackAnimator != null) {
+ mTrackAnimator.end();
+ mTrackAnimator = null;
+ }
+ }
+ }
+
+ private void updateHighlight() {
+ if (mTrackRect.isEmpty()) {
+ return;
+ }
+ int colorBase, colorGrad;
+ if (mDarkIntensity > 0.5f) {
+ colorBase = getContext().getColor(R.color.quick_step_track_background_background_dark);
+ colorGrad = getContext().getColor(R.color.quick_step_track_background_foreground_dark);
+ } else {
+ colorBase = getContext().getColor(R.color.quick_step_track_background_background_light);
+ colorGrad = getContext().getColor(R.color.quick_step_track_background_foreground_light);
+ }
+ final RadialGradient mHighlight = new RadialGradient(0, mTrackRect.height() / 2,
+ mTrackRect.width() * GRADIENT_WIDTH, colorGrad, colorBase,
+ Shader.TileMode.CLAMP);
+ mTrackPaint.setShader(mHighlight);
+ }
+
+ private void animateEnd() {
+ if (mTrackAnimator != null) {
+ mTrackAnimator.cancel();
+ }
+
+ ObjectAnimator trackAnimator = ObjectAnimator.ofPropertyValuesHolder(this,
+ PropertyValuesHolder.ofFloat(mTrackAlphaProperty, 0f),
+ PropertyValuesHolder.ofFloat(mTrackScaleProperty, TRACK_SCALE));
+ trackAnimator.setInterpolator(ALPHA_OUT);
+ trackAnimator.setDuration(ANIM_OUT_DURATION_MS);
+ ObjectAnimator navBarAnimator = ObjectAnimator.ofFloat(this, mNavBarAlphaProperty, 1f);
+ navBarAnimator.setInterpolator(ALPHA_IN);
+ navBarAnimator.setDuration(ANIM_IN_DURATION_MS);
+ mTrackAnimator = new AnimatorSet();
+ mTrackAnimator.playTogether(trackAnimator, navBarAnimator);
+ mTrackAnimator.addListener(mQuickScrubEndListener);
+ mTrackAnimator.start();
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepAction.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepAction.java
new file mode 100644
index 0000000..b18b79e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepAction.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import static com.android.systemui.recents.OverviewProxyService.DEBUG_OVERVIEW_PROXY;
+import static com.android.systemui.recents.OverviewProxyService.TAG_OPS;
+
+import android.annotation.NonNull;
+import android.os.RemoteException;
+import android.util.Log;
+import android.view.MotionEvent;
+
+import com.android.systemui.recents.OverviewProxyService;
+
+/**
+ * QuickStep action to send to launcher to start overview
+ */
+public class QuickStepAction extends NavigationGestureAction {
+ private static final String TAG = "QuickStepAction";
+
+ public QuickStepAction(@NonNull NavigationBarView navigationBarView,
+ @NonNull OverviewProxyService service) {
+ super(navigationBarView, service);
+ }
+
+ @Override
+ public boolean canRunWhenNotificationsShowing() {
+ return false;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return mNavigationBarView.isQuickStepSwipeUpEnabled();
+ }
+
+ @Override
+ public void onGestureStart(MotionEvent event) {
+ try {
+ mProxySender.getProxy().onQuickStep(event);
+ if (DEBUG_OVERVIEW_PROXY) {
+ Log.d(TAG_OPS, "Quick Step Start");
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to send quick step started.", e);
+ }
+ mProxySender.notifyQuickStepStarted();
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
index 3980126..c03800e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
@@ -18,187 +18,96 @@
import static android.view.WindowManagerPolicyConstants.NAV_BAR_BOTTOM;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_LEFT;
-import static com.android.systemui.Interpolators.ALPHA_IN;
-import static com.android.systemui.Interpolators.ALPHA_OUT;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_RIGHT;
+
import static com.android.systemui.recents.OverviewProxyService.DEBUG_OVERVIEW_PROXY;
import static com.android.systemui.recents.OverviewProxyService.TAG_OPS;
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_BACK;
import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_DEAD_ZONE;
import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_HOME;
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_NONE;
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_OVERVIEW;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.PropertyValuesHolder;
+import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.RadialGradient;
-import android.graphics.Rect;
-import android.graphics.Shader;
-import android.hardware.input.InputManager;
-import android.os.Handler;
import android.os.RemoteException;
-import android.os.SystemClock;
import android.provider.Settings;
-import android.util.FloatProperty;
import android.util.Log;
-import android.util.Slog;
-import android.view.HapticFeedbackConstants;
-import android.view.InputDevice;
-import android.view.KeyCharacterMap;
-import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewPropertyAnimator;
-import android.view.WindowManagerGlobal;
+
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
-import com.android.systemui.recents.OverviewProxyService;
-import com.android.systemui.R;
-import com.android.systemui.SysUiServiceProvider;
import com.android.systemui.plugins.statusbar.phone.NavGesture.GestureHelper;
+import com.android.systemui.R;
+import com.android.systemui.recents.OverviewProxyService;
+import com.android.systemui.SysUiServiceProvider;
import com.android.systemui.shared.recents.IOverviewProxy;
-import com.android.systemui.shared.recents.utilities.Utilities;
import com.android.systemui.shared.system.NavigationBarCompat;
+
import java.io.PrintWriter;
/**
* Class to detect gestures on the navigation bar and implement quick scrub.
+ * Note that the variables in this class horizontal and vertical represents horizontal always
+ * aligned with along the navigation bar).
*/
public class QuickStepController implements GestureHelper {
private static final String TAG = "QuickStepController";
- private static final int ANIM_IN_DURATION_MS = 150;
- private static final int ANIM_OUT_DURATION_MS = 134;
- private static final float TRACK_SCALE = 0.95f;
- private static final float GRADIENT_WIDTH = .75f;
/** Experiment to swipe home button left to execute a back key press */
- private static final String PULL_HOME_GO_BACK_PROP = "quickstepcontroller_homegoesback";
private static final String HIDE_BACK_BUTTON_PROP = "quickstepcontroller_hideback";
- private static final String BACK_AFTER_END_PROP
- = "quickstepcontroller_homegoesbackwhenend";
- private static final String NAVBAR_EXPERIMENTS_DISABLED = "navbarexperiments_disabled";
- private static final long BACK_BUTTON_FADE_OUT_ALPHA = 60;
private static final long BACK_BUTTON_FADE_IN_ALPHA = 150;
- private static final long BACK_GESTURE_POLL_TIMEOUT = 1000;
/** When the home-swipe-back gesture is disallowed, make it harder to pull */
private static final float DISALLOW_GESTURE_DAMPING_FACTOR = 0.16f;
+ private static final int ACTION_SWIPE_UP_INDEX = 0;
+ private static final int ACTION_SWIPE_DOWN_INDEX = 1;
+ private static final int ACTION_SWIPE_LEFT_INDEX = 2;
+ private static final int ACTION_SWIPE_RIGHT_INDEX = 3;
+ private static final int MAX_GESTURES = 4;
+
private NavigationBarView mNavigationBarView;
- private boolean mQuickScrubActive;
private boolean mAllowGestureDetection;
- private boolean mBackGestureActive;
- private boolean mCanPerformBack;
- private boolean mQuickStepStarted;
private boolean mNotificationsVisibleOnDown;
private int mTouchDownX;
private int mTouchDownY;
- private boolean mDragPositive;
- private boolean mIsVertical;
+ private boolean mDragHPositive;
+ private boolean mDragVPositive;
private boolean mIsRTL;
- private float mTrackAlpha;
- private float mTrackScale = TRACK_SCALE;
+ private int mNavBarPosition;
private float mDarkIntensity;
- private RadialGradient mHighlight;
- private float mHighlightCenter;
- private AnimatorSet mTrackAnimator;
- private ViewPropertyAnimator mHomeAnimator;
+ private ViewPropertyAnimator mDragBtnAnimator;
private ButtonDispatcher mHitTarget;
- private View mCurrentNavigationBarView;
private boolean mIsInScreenPinning;
+ private boolean mGestureHorizontalDragsButton;
+ private boolean mGestureVerticalDragsButton;
+ private boolean mGestureTrackPositive;
- private final Handler mHandler = new Handler();
- private final Rect mTrackRect = new Rect();
+ private NavigationGestureAction mCurrentAction;
+ private NavigationGestureAction[] mGestureActions = new NavigationGestureAction[MAX_GESTURES];
+
private final OverviewProxyService mOverviewEventSender;
- private final int mTrackThickness;
- private final int mTrackEndPadding;
private final int mHomeBackGestureDragLimit;
private final Context mContext;
private final StatusBar mStatusBar;
private final Matrix mTransformGlobalMatrix = new Matrix();
private final Matrix mTransformLocalMatrix = new Matrix();
- private final Paint mTrackPaint = new Paint();
-
- private final FloatProperty<QuickStepController> mTrackAlphaProperty =
- new FloatProperty<QuickStepController>("TrackAlpha") {
- @Override
- public void setValue(QuickStepController controller, float alpha) {
- mTrackAlpha = alpha;
- mNavigationBarView.invalidate();
- }
-
- @Override
- public Float get(QuickStepController controller) {
- return mTrackAlpha;
- }
- };
-
- private final FloatProperty<QuickStepController> mTrackScaleProperty =
- new FloatProperty<QuickStepController>("TrackScale") {
- @Override
- public void setValue(QuickStepController controller, float scale) {
- mTrackScale = scale;
- mNavigationBarView.invalidate();
- }
-
- @Override
- public Float get(QuickStepController controller) {
- return mTrackScale;
- }
- };
-
- private final FloatProperty<QuickStepController> mNavBarAlphaProperty =
- new FloatProperty<QuickStepController>("NavBarAlpha") {
- @Override
- public void setValue(QuickStepController controller, float alpha) {
- if (mCurrentNavigationBarView != null) {
- mCurrentNavigationBarView.setAlpha(alpha);
- }
- }
-
- @Override
- public Float get(QuickStepController controller) {
- if (mCurrentNavigationBarView != null) {
- return mCurrentNavigationBarView.getAlpha();
- }
- return 1f;
- }
- };
-
- private AnimatorListenerAdapter mQuickScrubEndListener = new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- resetQuickScrub();
- }
- };
-
- private final Runnable mExecuteBackRunnable = new Runnable() {
- @Override
- public void run() {
- if (canPerformHomeBackGesture()) {
- performBack();
- mHandler.postDelayed(this, BACK_GESTURE_POLL_TIMEOUT);
- }
- }
- };
public QuickStepController(Context context) {
final Resources res = context.getResources();
mContext = context;
mStatusBar = SysUiServiceProvider.getComponent(context, StatusBar.class);
mOverviewEventSender = Dependency.get(OverviewProxyService.class);
- mTrackThickness = res.getDimensionPixelSize(R.dimen.nav_quick_scrub_track_thickness);
- mTrackEndPadding = res.getDimensionPixelSize(R.dimen.nav_quick_scrub_track_edge_padding);
mHomeBackGestureDragLimit =
res.getDimensionPixelSize(R.dimen.nav_home_back_gesture_drag_limit);
- mTrackPaint.setAntiAlias(true);
- mTrackPaint.setDither(true);
}
public void setComponents(NavigationBarView navigationBarView) {
@@ -210,6 +119,31 @@
}
/**
+ * Set each gesture an action. After set the gestures triggered will run the actions attached.
+ * @param swipeUpAction action after swiping up
+ * @param swipeDownAction action after swiping down
+ * @param swipeLeftAction action after swiping left
+ * @param swipeRightAction action after swiping right
+ */
+ public void setGestureActions(@Nullable NavigationGestureAction swipeUpAction,
+ @Nullable NavigationGestureAction swipeDownAction,
+ @Nullable NavigationGestureAction swipeLeftAction,
+ @Nullable NavigationGestureAction swipeRightAction) {
+ mGestureActions[ACTION_SWIPE_UP_INDEX] = swipeUpAction;
+ mGestureActions[ACTION_SWIPE_DOWN_INDEX] = swipeDownAction;
+ mGestureActions[ACTION_SWIPE_LEFT_INDEX] = swipeLeftAction;
+ mGestureActions[ACTION_SWIPE_RIGHT_INDEX] = swipeRightAction;
+
+ // Set the current state to all actions
+ for (NavigationGestureAction action: mGestureActions) {
+ if (action != null) {
+ action.setBarState(true, mNavBarPosition, mDragHPositive, mDragVPositive);
+ action.onDarkIntensityChange(mDarkIntensity);
+ }
+ }
+ }
+
+ /**
* @return true if we want to intercept touch events for quick scrub and prevent proxying the
* event to the overview service.
*/
@@ -242,8 +176,10 @@
private boolean handleTouchEvent(MotionEvent event) {
final boolean deadZoneConsumed =
mNavigationBarView.getDownHitTarget() == HIT_TARGET_DEAD_ZONE;
- if (mOverviewEventSender.getProxy() == null || (!mNavigationBarView.isQuickScrubEnabled()
- && !mNavigationBarView.isQuickStepSwipeUpEnabled())) {
+
+ // Requires proxy and an active gesture or able to perform any gesture to continue
+ if (mOverviewEventSender.getProxy() == null
+ || (mCurrentAction == null && !canPerformAnyAction())) {
return deadZoneConsumed;
}
mNavigationBarView.requestUnbufferedDispatch(event);
@@ -255,33 +191,45 @@
int y = (int) event.getY();
mIsInScreenPinning = mNavigationBarView.inScreenPinning();
- // End any existing quickscrub animations before starting the new transition
- if (mTrackAnimator != null) {
- mTrackAnimator.end();
- mTrackAnimator = null;
+ for (NavigationGestureAction gestureAction: mGestureActions) {
+ if (gestureAction != null) {
+ gestureAction.reset();
+ }
}
- mCurrentNavigationBarView = mNavigationBarView.getCurrentView();
- mHitTarget = mNavigationBarView.getButtonAtPosition(x, y);
+ // Valid buttons to drag over
+ switch (mNavigationBarView.getDownHitTarget()) {
+ case HIT_TARGET_BACK:
+ mHitTarget = mNavigationBarView.getBackButton();
+ break;
+ case HIT_TARGET_HOME:
+ mHitTarget = mNavigationBarView.getHomeButton();
+ break;
+ case HIT_TARGET_OVERVIEW:
+ mHitTarget = mNavigationBarView.getRecentsButton();
+ break;
+ default:
+ mHitTarget = null;
+ break;
+ }
if (mHitTarget != null) {
// Pre-emptively delay the touch feedback for the button that we just touched
mHitTarget.setDelayTouchFeedback(true);
}
mTouchDownX = x;
mTouchDownY = y;
+ mGestureHorizontalDragsButton = false;
+ mGestureVerticalDragsButton = false;
mTransformGlobalMatrix.set(Matrix.IDENTITY_MATRIX);
mTransformLocalMatrix.set(Matrix.IDENTITY_MATRIX);
mNavigationBarView.transformMatrixToGlobal(mTransformGlobalMatrix);
mNavigationBarView.transformMatrixToLocal(mTransformLocalMatrix);
- mQuickStepStarted = false;
- mBackGestureActive = false;
mAllowGestureDetection = true;
mNotificationsVisibleOnDown = !mNavigationBarView.isNotificationsFullyCollapsed();
- mCanPerformBack = canPerformHomeBackGesture();
break;
}
case MotionEvent.ACTION_MOVE: {
- if (mQuickStepStarted || !mAllowGestureDetection){
+ if (!mAllowGestureDetection) {
break;
}
int x = (int) event.getX();
@@ -289,108 +237,132 @@
int xDiff = Math.abs(x - mTouchDownX);
int yDiff = Math.abs(y - mTouchDownY);
- boolean exceededScrubTouchSlop, exceededSwipeUpTouchSlop;
- int pos, touchDown, offset, trackSize;
+ boolean exceededSwipeHorizontalTouchSlop, exceededSwipeVerticalTouchSlop;
+ int posH, touchDownH, posV, touchDownV;
- if (mIsVertical) {
- exceededScrubTouchSlop =
+ if (isNavBarVertical()) {
+ exceededSwipeHorizontalTouchSlop =
yDiff > NavigationBarCompat.getQuickScrubTouchSlopPx() && yDiff > xDiff;
- exceededSwipeUpTouchSlop =
+ exceededSwipeVerticalTouchSlop =
xDiff > NavigationBarCompat.getQuickStepTouchSlopPx() && xDiff > yDiff;
- pos = y;
- touchDown = mTouchDownY;
- offset = pos - mTrackRect.top;
- trackSize = mTrackRect.height();
+ posH = y;
+ touchDownH = mTouchDownY;
+ posV = x;
+ touchDownV = mTouchDownX;
} else {
- exceededScrubTouchSlop =
+ exceededSwipeHorizontalTouchSlop =
xDiff > NavigationBarCompat.getQuickScrubTouchSlopPx() && xDiff > yDiff;
- exceededSwipeUpTouchSlop =
+ exceededSwipeVerticalTouchSlop =
yDiff > NavigationBarCompat.getQuickStepTouchSlopPx() && yDiff > xDiff;
- pos = x;
- touchDown = mTouchDownX;
- offset = pos - mTrackRect.left;
- trackSize = mTrackRect.width();
- }
- // Decide to start quickstep if dragging away from the navigation bar, otherwise in
- // the parallel direction, decide to start quickscrub. Only one may run.
- if (!mBackGestureActive && !mQuickScrubActive && exceededSwipeUpTouchSlop) {
- if (mNavigationBarView.isQuickStepSwipeUpEnabled()
- && !mNotificationsVisibleOnDown) {
- startQuickStep(event);
- }
- break;
+ posH = x;
+ touchDownH = mTouchDownX;
+ posV = y;
+ touchDownV = mTouchDownY;
}
- // Do not handle quick scrub if disabled
- if (!mNavigationBarView.isQuickScrubEnabled()) {
- break;
- }
-
- if (!mDragPositive) {
- offset -= mIsVertical ? mTrackRect.height() : mTrackRect.width();
- }
-
- final boolean allowDrag = !mDragPositive
- ? offset < 0 && pos < touchDown : offset >= 0 && pos > touchDown;
- float scrubFraction = Utilities.clamp(Math.abs(offset) * 1f / trackSize, 0, 1);
- if (!mQuickScrubActive && !mBackGestureActive && exceededScrubTouchSlop) {
- // Passing the drag slop then touch slop will start quick step
- if (allowDrag) {
- startQuickScrub();
- } else if (swipeHomeGoBackGestureEnabled(mContext)
- && mNavigationBarView.getDownHitTarget() == HIT_TARGET_HOME
- && mDragPositive ? pos < touchDown : pos > touchDown) {
- startBackGesture();
- }
- }
-
- if (mQuickScrubActive && (mDragPositive && offset >= 0
- || !mDragPositive && offset <= 0)) {
- try {
- mOverviewEventSender.getProxy().onQuickScrubProgress(scrubFraction);
- if (DEBUG_OVERVIEW_PROXY) {
- Log.d(TAG_OPS, "Quick Scrub Progress:" + scrubFraction);
+ if (mCurrentAction != null) {
+ // Gesture started, provide positions to the current action
+ mCurrentAction.onGestureMove(x, y);
+ } else {
+ // Detect gesture and try to execute an action, only one can run at a time
+ if (exceededSwipeVerticalTouchSlop) {
+ if (mDragVPositive ? (posV < touchDownV) : (posV > touchDownV)) {
+ // Swiping up gesture
+ tryToStartGesture(mGestureActions[ACTION_SWIPE_UP_INDEX],
+ false /* alignedWithNavBar */, false /* positiveDirection */,
+ event);
+ } else {
+ // Swiping down gesture
+ tryToStartGesture(mGestureActions[ACTION_SWIPE_DOWN_INDEX],
+ false /* alignedWithNavBar */, true /* positiveDirection */,
+ event);
}
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to send progress of quick scrub.", e);
- }
- mHighlightCenter = x;
- mNavigationBarView.invalidate();
- } else if (mBackGestureActive) {
- int diff = pos - touchDown;
- // If dragging the incorrect direction after starting back gesture or unable
- // to execute back functionality, then move home but dampen its distance
- if (!mCanPerformBack || (mDragPositive ? diff > 0 : diff < 0)) {
- diff *= DISALLOW_GESTURE_DAMPING_FACTOR;
- } if (Math.abs(diff) > mHomeBackGestureDragLimit) {
- // Once the user drags the home button past a certain limit, the distance
- // will lessen as the home button dampens showing that it was pulled too far
- float distanceAfterDragLimit = (Math.abs(diff) - mHomeBackGestureDragLimit)
- * DISALLOW_GESTURE_DAMPING_FACTOR;
- diff = (int)(distanceAfterDragLimit + mHomeBackGestureDragLimit);
- if (mDragPositive) {
- diff *= -1;
+ } else if (exceededSwipeHorizontalTouchSlop) {
+ if (mDragHPositive ? (posH < touchDownH) : (posH > touchDownH)) {
+ // Swiping left (ltr) gesture
+ tryToStartGesture(mGestureActions[ACTION_SWIPE_LEFT_INDEX],
+ true /* alignedWithNavBar */, false /* positiveDirection */,
+ event);
+ } else {
+ // Swiping right (ltr) gesture
+ tryToStartGesture(mGestureActions[ACTION_SWIPE_RIGHT_INDEX],
+ true /* alignedWithNavBar */, true /* positiveDirection */,
+ event);
}
}
- moveHomeButton(diff);
}
+
+ handleDragHitTarget(mGestureHorizontalDragsButton ? posH : posV,
+ mGestureHorizontalDragsButton ? touchDownH : touchDownV);
break;
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
- endQuickScrub(true /* animate */);
- endBackGesture();
+ if (mCurrentAction != null) {
+ mCurrentAction.endGesture();
+ mCurrentAction = null;
+ }
+
+ // Return the hit target back to its original position
+ if (mHitTarget != null) {
+ final View button = mHitTarget.getCurrentView();
+ if (mGestureHorizontalDragsButton || mGestureVerticalDragsButton) {
+ mDragBtnAnimator = button.animate().setDuration(BACK_BUTTON_FADE_IN_ALPHA)
+ .setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
+ if (mGestureVerticalDragsButton ^ isNavBarVertical()) {
+ mDragBtnAnimator.translationY(0);
+ } else {
+ mDragBtnAnimator.translationX(0);
+ }
+ mDragBtnAnimator.start();
+ }
+ }
break;
}
if (shouldProxyEvents(action)) {
proxyMotionEvents(event);
}
- return mBackGestureActive || mQuickScrubActive || mQuickStepStarted || deadZoneConsumed;
+ return mCurrentAction != null || deadZoneConsumed;
+ }
+
+ private void handleDragHitTarget(int position, int touchDown) {
+ // Drag the hit target if gesture action requires it
+ if (mHitTarget != null && (mGestureVerticalDragsButton || mGestureHorizontalDragsButton)) {
+ final View button = mHitTarget.getCurrentView();
+ if (mDragBtnAnimator != null) {
+ mDragBtnAnimator.cancel();
+ mDragBtnAnimator = null;
+ }
+
+ int diff = position - touchDown;
+ // If dragging the incorrect direction after starting gesture or unable to
+ // execute tried action, then move the button but dampen its distance
+ if (mCurrentAction == null || (mGestureTrackPositive ? diff < 0 : diff > 0)) {
+ diff *= DISALLOW_GESTURE_DAMPING_FACTOR;
+ } else if (Math.abs(diff) > mHomeBackGestureDragLimit) {
+ // Once the user drags the button past a certain limit, the distance will
+ // lessen as the button dampens that it was pulled too far
+ float distanceAfterDragLimit = (Math.abs(diff) - mHomeBackGestureDragLimit)
+ * DISALLOW_GESTURE_DAMPING_FACTOR;
+ diff = (int) (distanceAfterDragLimit + mHomeBackGestureDragLimit);
+ if (!mGestureTrackPositive) {
+ diff *= -1;
+ }
+ }
+ if (mGestureVerticalDragsButton ^ isNavBarVertical()) {
+ button.setTranslationY(diff);
+ } else {
+ button.setTranslationX(diff);
+ }
+ }
}
private boolean shouldProxyEvents(int action) {
- if (!mBackGestureActive && !mQuickScrubActive && !mIsInScreenPinning) {
+ final boolean actionValid = (mCurrentAction == null
+ || (mGestureActions[ACTION_SWIPE_UP_INDEX] != null
+ && mGestureActions[ACTION_SWIPE_UP_INDEX].isActive()));
+ if (actionValid && !mIsInScreenPinning) {
// Allow down, cancel and up events, move and other events are passed if notifications
// are not showing and disabled gestures (such as long press) are not executed
switch (action) {
@@ -407,46 +379,18 @@
@Override
public void onDraw(Canvas canvas) {
- if (!mNavigationBarView.isQuickScrubEnabled()) {
- return;
+ if (mCurrentAction != null) {
+ mCurrentAction.onDraw(canvas);
}
- mTrackPaint.setAlpha(Math.round(255f * mTrackAlpha));
-
- // Scale the track, but apply the inverse scale from the nav bar
- final float radius = mTrackRect.height() / 2;
- canvas.save();
- float translate = Utilities.clamp(mHighlightCenter, mTrackRect.left, mTrackRect.right);
- canvas.translate(translate, 0);
- canvas.scale(mTrackScale / mNavigationBarView.getScaleX(),
- 1f / mNavigationBarView.getScaleY(),
- mTrackRect.centerX(), mTrackRect.centerY());
- canvas.drawRoundRect(mTrackRect.left - translate, mTrackRect.top,
- mTrackRect.right - translate, mTrackRect.bottom, radius, radius, mTrackPaint);
- canvas.restore();
}
@Override
public void onLayout(boolean changed, int left, int top, int right, int bottom) {
- final int paddingLeft = mNavigationBarView.getPaddingLeft();
- final int paddingTop = mNavigationBarView.getPaddingTop();
- final int paddingRight = mNavigationBarView.getPaddingRight();
- final int paddingBottom = mNavigationBarView.getPaddingBottom();
- final int width = (right - left) - paddingRight - paddingLeft;
- final int height = (bottom - top) - paddingBottom - paddingTop;
- final int x1, x2, y1, y2;
- if (mIsVertical) {
- x1 = (width - mTrackThickness) / 2 + paddingLeft;
- x2 = x1 + mTrackThickness;
- y1 = paddingTop + mTrackEndPadding;
- y2 = y1 + height - 2 * mTrackEndPadding;
- } else {
- y1 = (height - mTrackThickness) / 2 + paddingTop;
- y2 = y1 + mTrackThickness;
- x1 = mNavigationBarView.getPaddingStart() + mTrackEndPadding;
- x2 = x1 + width - 2 * mTrackEndPadding;
+ for (NavigationGestureAction action: mGestureActions) {
+ if (action != null) {
+ action.onLayout(changed, left, top, right, bottom);
+ }
}
- mTrackRect.set(x1, y1, x2, y2);
- updateHighlight();
}
@Override
@@ -456,119 +400,104 @@
// When in quick scrub, invalidate gradient if changing intensity from black to white and
// vice-versa
- if (mNavigationBarView.isQuickScrubEnabled()
+ if (mCurrentAction != null && mNavigationBarView.isQuickScrubEnabled()
&& Math.round(intensity) != Math.round(oldIntensity)) {
- updateHighlight();
+ mCurrentAction.onDarkIntensityChange(mDarkIntensity);
}
mNavigationBarView.invalidate();
}
@Override
- public void setBarState(boolean isVertical, boolean isRTL) {
- final boolean changed = (mIsVertical != isVertical) || (mIsRTL != isRTL);
- if (changed) {
- // End quickscrub if the state changes mid-transition
- endQuickScrub(false /* animate */);
- }
- mIsVertical = isVertical;
+ public void setBarState(boolean isRTL, int navBarPosition) {
+ final boolean changed = (mIsRTL != isRTL) || (mNavBarPosition != navBarPosition);
mIsRTL = isRTL;
- try {
- int navbarPos = WindowManagerGlobal.getWindowManagerService().getNavBarPosition();
- mDragPositive = navbarPos == NAV_BAR_LEFT || navbarPos == NAV_BAR_BOTTOM;
- if (isRTL) {
- mDragPositive = !mDragPositive;
+ mNavBarPosition = navBarPosition;
+
+ // Determine the drag directions depending on location of nav bar
+ switch (navBarPosition) {
+ case NAV_BAR_LEFT:
+ mDragHPositive = !isRTL;
+ mDragVPositive = false;
+ break;
+ case NAV_BAR_RIGHT:
+ mDragHPositive = isRTL;
+ mDragVPositive = true;
+ break;
+ case NAV_BAR_BOTTOM:
+ mDragHPositive = !isRTL;
+ mDragVPositive = true;
+ break;
+ }
+
+ for (NavigationGestureAction action: mGestureActions) {
+ if (action != null) {
+ action.setBarState(changed, mNavBarPosition, mDragHPositive, mDragVPositive);
}
- } catch (RemoteException e) {
- Slog.e(TAG, "Failed to get nav bar position.", e);
}
}
@Override
public void onNavigationButtonLongPress(View v) {
mAllowGestureDetection = false;
- mHandler.removeCallbacksAndMessages(null);
}
@Override
public void dump(PrintWriter pw) {
pw.println("QuickStepController {");
- pw.print(" "); pw.println("mQuickScrubActive=" + mQuickScrubActive);
- pw.print(" "); pw.println("mQuickStepStarted=" + mQuickStepStarted);
pw.print(" "); pw.println("mAllowGestureDetection=" + mAllowGestureDetection);
- pw.print(" "); pw.println("mBackGestureActive=" + mBackGestureActive);
- pw.print(" "); pw.println("mCanPerformBack=" + mCanPerformBack);
pw.print(" "); pw.println("mNotificationsVisibleOnDown=" + mNotificationsVisibleOnDown);
- pw.print(" "); pw.println("mIsVertical=" + mIsVertical);
+ pw.print(" "); pw.println("mNavBarPosition=" + mNavBarPosition);
pw.print(" "); pw.println("mIsRTL=" + mIsRTL);
pw.print(" "); pw.println("mIsInScreenPinning=" + mIsInScreenPinning);
pw.println("}");
}
- private void startQuickStep(MotionEvent event) {
- if (mIsInScreenPinning) {
- mNavigationBarView.showPinningEscapeToast();
- mAllowGestureDetection = false;
- return;
- }
-
- mQuickStepStarted = true;
- event.transform(mTransformGlobalMatrix);
- try {
- mOverviewEventSender.getProxy().onQuickStep(event);
- if (DEBUG_OVERVIEW_PROXY) {
- Log.d(TAG_OPS, "Quick Step Start");
- }
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to send quick step started.", e);
- } finally {
- event.transform(mTransformLocalMatrix);
- }
- mOverviewEventSender.notifyQuickStepStarted();
- mHandler.removeCallbacksAndMessages(null);
-
- if (mHitTarget != null) {
- mHitTarget.abortCurrentGesture();
- }
-
- if (mQuickScrubActive) {
- animateEnd();
- }
+ public NavigationGestureAction getCurrentAction() {
+ return mCurrentAction;
}
- private void startQuickScrub() {
+ private void tryToStartGesture(NavigationGestureAction action, boolean alignedWithNavBar,
+ boolean positiveDirection, MotionEvent event) {
+ if (action == null) {
+ return;
+ }
if (mIsInScreenPinning) {
mNavigationBarView.showPinningEscapeToast();
mAllowGestureDetection = false;
return;
}
- if (!mQuickScrubActive) {
- updateHighlight();
- mQuickScrubActive = true;
- ObjectAnimator trackAnimator = ObjectAnimator.ofPropertyValuesHolder(this,
- PropertyValuesHolder.ofFloat(mTrackAlphaProperty, 1f),
- PropertyValuesHolder.ofFloat(mTrackScaleProperty, 1f));
- trackAnimator.setInterpolator(ALPHA_IN);
- trackAnimator.setDuration(ANIM_IN_DURATION_MS);
- ObjectAnimator navBarAnimator = ObjectAnimator.ofFloat(this, mNavBarAlphaProperty, 0f);
- navBarAnimator.setInterpolator(ALPHA_OUT);
- navBarAnimator.setDuration(ANIM_OUT_DURATION_MS);
- mTrackAnimator = new AnimatorSet();
- mTrackAnimator.playTogether(trackAnimator, navBarAnimator);
- mTrackAnimator.start();
-
- // Disable slippery for quick scrub to not cancel outside the nav bar
- mNavigationBarView.updateSlippery();
-
- try {
- mOverviewEventSender.getProxy().onQuickScrubStart();
- if (DEBUG_OVERVIEW_PROXY) {
- Log.d(TAG_OPS, "Quick Scrub Start");
- }
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to send start of quick scrub.", e);
+ // Start new action from gesture if is able to start and depending on notifications
+ // visibility and starting touch down target. If the action is enabled, then also check if
+ // can perform the action so that if action requires the button to be dragged, then the
+ // gesture will have a large dampening factor and prevent action from running.
+ final boolean validHitTarget = action.requiresTouchDownHitTarget() == HIT_TARGET_NONE
+ || action.requiresTouchDownHitTarget() == mNavigationBarView.getDownHitTarget();
+ if (mCurrentAction == null && validHitTarget && action.isEnabled()
+ && (!mNotificationsVisibleOnDown || action.canRunWhenNotificationsShowing())) {
+ if (action.canPerformAction()) {
+ mCurrentAction = action;
+ event.transform(mTransformGlobalMatrix);
+ action.startGesture(event);
+ event.transform(mTransformLocalMatrix);
}
- mOverviewEventSender.notifyQuickScrubStarted();
+
+ // Handle direction of the hit target drag from the axis that started the gesture
+ if (action.requiresDragWithHitTarget()) {
+ if (alignedWithNavBar) {
+ mGestureHorizontalDragsButton = true;
+ mGestureVerticalDragsButton = false;
+ if (positiveDirection) {
+ mGestureTrackPositive = mDragHPositive;
+ }
+ } else {
+ mGestureVerticalDragsButton = true;
+ mGestureHorizontalDragsButton = false;
+ if (positiveDirection) {
+ mGestureTrackPositive = mDragVPositive;
+ }
+ }
+ }
if (mHitTarget != null) {
mHitTarget.abortCurrentGesture();
@@ -576,148 +505,13 @@
}
}
- private void endQuickScrub(boolean animate) {
- if (mQuickScrubActive) {
- animateEnd();
- try {
- mOverviewEventSender.getProxy().onQuickScrubEnd();
- if (DEBUG_OVERVIEW_PROXY) {
- Log.d(TAG_OPS, "Quick Scrub End");
- }
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to send end of quick scrub.", e);
+ private boolean canPerformAnyAction() {
+ for (NavigationGestureAction action: mGestureActions) {
+ if (action != null && action.isEnabled()) {
+ return true;
}
}
- if (!animate) {
- if (mTrackAnimator != null) {
- mTrackAnimator.end();
- mTrackAnimator = null;
- }
- }
- }
-
- private void startBackGesture() {
- if (!mBackGestureActive) {
- mBackGestureActive = true;
- mNavigationBarView.getHomeButton().abortCurrentGesture();
- final boolean runBackMidGesture = !shouldExecuteBackOnUp(mContext);
- if (mCanPerformBack) {
- if (!shouldhideBackButton(mContext)) {
- mNavigationBarView.getBackButton().setAlpha(0 /* alpha */, true /* animate */,
- BACK_BUTTON_FADE_OUT_ALPHA);
- }
- if (runBackMidGesture) {
- performBack();
- }
- }
- mHandler.removeCallbacks(mExecuteBackRunnable);
- if (runBackMidGesture) {
- mHandler.postDelayed(mExecuteBackRunnable, BACK_GESTURE_POLL_TIMEOUT);
- }
- }
- }
-
- private void endBackGesture() {
- if (mBackGestureActive) {
- mHandler.removeCallbacks(mExecuteBackRunnable);
- mHomeAnimator = mNavigationBarView.getHomeButton().getCurrentView()
- .animate()
- .setDuration(BACK_BUTTON_FADE_IN_ALPHA)
- .setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
- if (mIsVertical) {
- mHomeAnimator.translationY(0);
- } else {
- mHomeAnimator.translationX(0);
- }
- mHomeAnimator.start();
- if (!shouldhideBackButton(mContext)) {
- mNavigationBarView.getBackButton().setAlpha(
- mOverviewEventSender.getBackButtonAlpha(), true /* animate */);
- }
- if (shouldExecuteBackOnUp(mContext)) {
- performBack();
- }
- }
- }
-
- private void animateEnd() {
- if (mTrackAnimator != null) {
- mTrackAnimator.cancel();
- }
-
- ObjectAnimator trackAnimator = ObjectAnimator.ofPropertyValuesHolder(this,
- PropertyValuesHolder.ofFloat(mTrackAlphaProperty, 0f),
- PropertyValuesHolder.ofFloat(mTrackScaleProperty, TRACK_SCALE));
- trackAnimator.setInterpolator(ALPHA_OUT);
- trackAnimator.setDuration(ANIM_OUT_DURATION_MS);
- ObjectAnimator navBarAnimator = ObjectAnimator.ofFloat(this, mNavBarAlphaProperty, 1f);
- navBarAnimator.setInterpolator(ALPHA_IN);
- navBarAnimator.setDuration(ANIM_IN_DURATION_MS);
- mTrackAnimator = new AnimatorSet();
- mTrackAnimator.playTogether(trackAnimator, navBarAnimator);
- mTrackAnimator.addListener(mQuickScrubEndListener);
- mTrackAnimator.start();
- }
-
- private void resetQuickScrub() {
- mQuickScrubActive = false;
- mAllowGestureDetection = false;
- if (mCurrentNavigationBarView != null) {
- mCurrentNavigationBarView.setAlpha(1f);
- }
- mCurrentNavigationBarView = null;
- updateHighlight();
- }
-
- private void moveHomeButton(float pos) {
- if (mHomeAnimator != null) {
- mHomeAnimator.cancel();
- mHomeAnimator = null;
- }
- final View homeButton = mNavigationBarView.getHomeButton().getCurrentView();
- if (mIsVertical) {
- homeButton.setTranslationY(pos);
- } else {
- homeButton.setTranslationX(pos);
- }
- }
-
- private void updateHighlight() {
- if (mTrackRect.isEmpty()) {
- return;
- }
- int colorBase, colorGrad;
- if (mDarkIntensity > 0.5f) {
- colorBase = mContext.getColor(R.color.quick_step_track_background_background_dark);
- colorGrad = mContext.getColor(R.color.quick_step_track_background_foreground_dark);
- } else {
- colorBase = mContext.getColor(R.color.quick_step_track_background_background_light);
- colorGrad = mContext.getColor(R.color.quick_step_track_background_foreground_light);
- }
- mHighlight = new RadialGradient(0, mTrackRect.height() / 2,
- mTrackRect.width() * GRADIENT_WIDTH, colorGrad, colorBase,
- Shader.TileMode.CLAMP);
- mTrackPaint.setShader(mHighlight);
- }
-
- private boolean canPerformHomeBackGesture() {
- return swipeHomeGoBackGestureEnabled(mContext)
- && mOverviewEventSender.getBackButtonAlpha() > 0;
- }
-
- private void performBack() {
- sendEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
- sendEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
- mNavigationBarView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
- }
-
- private void sendEvent(int action, int code) {
- long when = SystemClock.uptimeMillis();
- final KeyEvent ev = new KeyEvent(when, when, action, code, 0 /* repeat */,
- 0 /* metaState */, KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /* scancode */,
- KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY,
- InputDevice.SOURCE_KEYBOARD);
- InputManager.getInstance().injectInputEvent(ev, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
+ return false;
}
private boolean proxyMotionEvents(MotionEvent event) {
@@ -740,22 +534,15 @@
return false;
}
- private static boolean getBoolGlobalSetting(Context context, String key) {
+ protected boolean isNavBarVertical() {
+ return mNavBarPosition == NAV_BAR_LEFT || mNavBarPosition == NAV_BAR_RIGHT;
+ }
+
+ static boolean getBoolGlobalSetting(Context context, String key) {
return Settings.Global.getInt(context.getContentResolver(), key, 0) != 0;
}
- public static boolean swipeHomeGoBackGestureEnabled(Context context) {
- return !getBoolGlobalSetting(context, NAVBAR_EXPERIMENTS_DISABLED)
- && getBoolGlobalSetting(context, PULL_HOME_GO_BACK_PROP);
- }
-
public static boolean shouldhideBackButton(Context context) {
- return swipeHomeGoBackGestureEnabled(context)
- && getBoolGlobalSetting(context, HIDE_BACK_BUTTON_PROP);
- }
-
- public static boolean shouldExecuteBackOnUp(Context context) {
- return !getBoolGlobalSetting(context, NAVBAR_EXPERIMENTS_DISABLED)
- && getBoolGlobalSetting(context, BACK_AFTER_END_PROP);
+ return getBoolGlobalSetting(context, HIDE_BACK_BUTTON_PROP);
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
index f2431b4..a4a111a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
@@ -18,7 +18,10 @@
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
@@ -26,8 +29,8 @@
import android.view.View;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.NotificationTestHelper;
+import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import org.junit.Assert;
import org.junit.Before;
@@ -58,39 +61,105 @@
-> mRoundnessManager.onHeadsupAnimatingAwayChanged(mSecond, animatingAway));
mRoundnessManager.setOnRoundingChangedCallback(mRoundnessCallback);
mRoundnessManager.setAnimatedChildren(mAnimatedChildren);
- mRoundnessManager.setFirstAndLastBackgroundChild(mFirst, mFirst);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mFirst, mFirst),
+ createSection(null, null)
+ });
mRoundnessManager.setExpanded(1.0f, 1.0f);
+ reset(mRoundnessCallback);
}
@Test
public void testCallbackCalledWhenSecondChanged() {
- mRoundnessManager.setFirstAndLastBackgroundChild(mFirst, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mFirst, mSecond),
+ createSection(null, null)
+ });
verify(mRoundnessCallback, atLeast(1)).run();
}
@Test
public void testCallbackCalledWhenFirstChanged() {
- mRoundnessManager.setFirstAndLastBackgroundChild(mSecond, mFirst);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mSecond, mFirst),
+ createSection(null, null)
+ });
verify(mRoundnessCallback, atLeast(1)).run();
}
@Test
+ public void testCallbackCalledWhenSecondSectionFirstChanged() {
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mFirst, mFirst),
+ createSection(mSecond, null)
+ });
+ verify(mRoundnessCallback, atLeast(1)).run();
+ }
+
+ @Test
+ public void testCallbackCalledWhenSecondSectionLastChanged() {
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mFirst, mFirst),
+ createSection(null, mSecond)
+ });
+ verify(mRoundnessCallback, atLeast(1)).run();
+ }
+
+ @Test
+ public void testCallbackNotCalledWhenFirstChangesSections() {
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(null, mFirst),
+ createSection(mFirst, null)
+ });
+ verify(mRoundnessCallback, never()).run();
+ }
+
+ @Test
public void testRoundnessSetOnLast() {
- mRoundnessManager.setFirstAndLastBackgroundChild(mFirst, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mFirst, mSecond),
+ createSection(null, null)
+ });
Assert.assertEquals(1.0f, mSecond.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(0.0f, mSecond.getCurrentTopRoundness(), 0.0f);
}
@Test
+ public void testRoundnessSetOnSecondSectionLast() {
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mFirst, mFirst),
+ createSection(null, mSecond)
+ });
+ Assert.assertEquals(1.0f, mSecond.getCurrentBottomRoundness(), 0.0f);
+ Assert.assertEquals(0.0f, mSecond.getCurrentTopRoundness(), 0.0f);
+ }
+
+ @Test
+ public void testRoundnessSetOnSecondSectionFirst() {
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mFirst, mFirst),
+ createSection(mSecond, null)
+ });
+ Assert.assertEquals(0.0f, mSecond.getCurrentBottomRoundness(), 0.0f);
+ Assert.assertEquals(1.0f, mSecond.getCurrentTopRoundness(), 0.0f);
+ }
+
+ @Test
public void testRoundnessSetOnNew() {
- mRoundnessManager.setFirstAndLastBackgroundChild(mFirst, null);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mFirst, null),
+ createSection(null, null)
+ });
Assert.assertEquals(0.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(1.0f, mFirst.getCurrentTopRoundness(), 0.0f);
}
@Test
public void testCompleteReplacement() {
- mRoundnessManager.setFirstAndLastBackgroundChild(mSecond, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mSecond, mSecond),
+ createSection(null, null)
+ });
Assert.assertEquals(0.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(0.0f, mFirst.getCurrentTopRoundness(), 0.0f);
}
@@ -98,7 +167,10 @@
@Test
public void testNotCalledWhenRemoved() {
mFirst.setRemoved();
- mRoundnessManager.setFirstAndLastBackgroundChild(mSecond, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mSecond, mSecond),
+ createSection(null, null)
+ });
Assert.assertEquals(1.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(1.0f, mFirst.getCurrentTopRoundness(), 0.0f);
}
@@ -107,7 +179,10 @@
public void testRoundedWhenPinnedAndCollapsed() {
mFirst.setPinned(true);
mRoundnessManager.setExpanded(0.0f /* expandedHeight */, 0.0f /* appearFraction */);
- mRoundnessManager.setFirstAndLastBackgroundChild(mSecond, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mSecond, mSecond),
+ createSection(null, null)
+ });
Assert.assertEquals(1.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(1.0f, mFirst.getCurrentTopRoundness(), 0.0f);
}
@@ -116,7 +191,10 @@
public void testRoundedWhenGoingAwayAndCollapsed() {
mFirst.setHeadsUpAnimatingAway(true);
mRoundnessManager.setExpanded(0.0f /* expandedHeight */, 0.0f /* appearFraction */);
- mRoundnessManager.setFirstAndLastBackgroundChild(mSecond, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mSecond, mSecond),
+ createSection(null, null)
+ });
Assert.assertEquals(1.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(1.0f, mFirst.getCurrentTopRoundness(), 0.0f);
}
@@ -125,7 +203,10 @@
public void testRoundedNormalRoundingWhenExpanded() {
mFirst.setHeadsUpAnimatingAway(true);
mRoundnessManager.setExpanded(1.0f /* expandedHeight */, 0.0f /* appearFraction */);
- mRoundnessManager.setFirstAndLastBackgroundChild(mSecond, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mSecond, mSecond),
+ createSection(null, null)
+ });
Assert.assertEquals(0.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(0.0f, mFirst.getCurrentTopRoundness(), 0.0f);
}
@@ -134,7 +215,10 @@
public void testTrackingHeadsUpRoundedIfPushingUp() {
mRoundnessManager.setExpanded(1.0f /* expandedHeight */, -0.5f /* appearFraction */);
mRoundnessManager.setTrackingHeadsUp(mFirst);
- mRoundnessManager.setFirstAndLastBackgroundChild(mSecond, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mSecond, mSecond),
+ createSection(null, null)
+ });
Assert.assertEquals(1.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(1.0f, mFirst.getCurrentTopRoundness(), 0.0f);
}
@@ -143,7 +227,10 @@
public void testTrackingHeadsUpNotRoundedIfPushingDown() {
mRoundnessManager.setExpanded(1.0f /* expandedHeight */, 0.5f /* appearFraction */);
mRoundnessManager.setTrackingHeadsUp(mFirst);
- mRoundnessManager.setFirstAndLastBackgroundChild(mSecond, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mSecond, mSecond),
+ createSection(null, null)
+ });
Assert.assertEquals(0.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(0.0f, mFirst.getCurrentTopRoundness(), 0.0f);
}
@@ -151,7 +238,10 @@
@Test
public void testRoundingUpdatedWhenAnimatingAwayTrue() {
mRoundnessManager.setExpanded(0.0f, 0.0f);
- mRoundnessManager.setFirstAndLastBackgroundChild(mSecond, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mSecond, mSecond),
+ createSection(null, null)
+ });
mFirst.setHeadsUpAnimatingAway(true);
Assert.assertEquals(1.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(1.0f, mFirst.getCurrentTopRoundness(), 0.0f);
@@ -161,10 +251,49 @@
@Test
public void testRoundingUpdatedWhenAnimatingAwayFalse() {
mRoundnessManager.setExpanded(0.0f, 0.0f);
- mRoundnessManager.setFirstAndLastBackgroundChild(mSecond, mSecond);
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mSecond, mSecond),
+ createSection(null, null)
+ });
mFirst.setHeadsUpAnimatingAway(true);
mFirst.setHeadsUpAnimatingAway(false);
Assert.assertEquals(0.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
Assert.assertEquals(0.0f, mFirst.getCurrentTopRoundness(), 0.0f);
}
+
+ @Test
+ public void testNoViewsFirstOrLastInSectionWhenSecondSectionEmpty() {
+ Assert.assertFalse(mFirst.isFirstInSection());
+ Assert.assertFalse(mFirst.isLastInSection());
+ }
+
+ @Test
+ public void testNoViewsFirstOrLastInSectionWhenFirstSectionEmpty() {
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(null, null),
+ createSection(mSecond, mSecond)
+ });
+ Assert.assertFalse(mSecond.isFirstInSection());
+ Assert.assertFalse(mSecond.isLastInSection());
+ }
+
+ @Test
+ public void testFirstAndLastViewsInSectionSetWhenBothSectionsNonEmpty() {
+ mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
+ createSection(mFirst, mFirst),
+ createSection(mSecond, mSecond)
+ });
+ Assert.assertFalse(mFirst.isFirstInSection());
+ Assert.assertTrue(mFirst.isLastInSection());
+ Assert.assertTrue(mSecond.isFirstInSection());
+ Assert.assertFalse(mSecond.isLastInSection());
+ }
+
+ private NotificationSection createSection(ExpandableNotificationRow first,
+ ExpandableNotificationRow last) {
+ NotificationSection section = mock(NotificationSection.class);
+ when(section.getFirstVisibleChild()).thenReturn(first);
+ when(section.getLastVisibleChild()).thenReturn(last);
+ return section;
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
index fdd89de..74ce5f6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
@@ -13,6 +13,8 @@
package com.android.systemui.statusbar.notification.stack;
+import static android.provider.Settings.Secure.NOTIFICATION_NEW_INTERRUPTION_MODEL;
+
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
@@ -23,6 +25,7 @@
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doNothing;
@@ -36,6 +39,7 @@
import android.os.IPowerManager;
import android.os.Looper;
import android.os.PowerManager;
+import android.provider.Settings;
import android.service.dreams.IDreamManager;
import android.support.test.annotation.UiThreadTest;
import android.support.test.filters.SmallTest;
@@ -67,6 +71,7 @@
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarTest.TestableNotificationEntryManager;
+import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
@@ -102,6 +107,7 @@
@Mock private IDreamManager mDreamManager;
private PowerManager mPowerManager;
private TestableNotificationEntryManager mEntryManager;
+ private int mOriginalInterruptionModelSetting;
@Before
@UiThreadTest
@@ -147,6 +153,17 @@
doNothing().when(mGroupManager).collapseAllGroups();
doNothing().when(mExpandHelper).cancelImmediately();
doNothing().when(notificationShelf).setAnimationsEnabled(anyBoolean());
+
+ mOriginalInterruptionModelSetting = Settings.Secure.getInt(mContext.getContentResolver(),
+ NOTIFICATION_NEW_INTERRUPTION_MODEL, 0);
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ NOTIFICATION_NEW_INTERRUPTION_MODEL, 1);
+ }
+
+ @After
+ public void tearDown() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ NOTIFICATION_NEW_INTERRUPTION_MODEL, mOriginalInterruptionModelSetting);
}
@Test
@@ -318,6 +335,64 @@
}
@Test
+ public void testUpdateGapIndex_allHighPriority() {
+ when(mStackScroller.getChildCount()).thenReturn(3);
+ for (int i = 0; i < 3; i++) {
+ ExpandableNotificationRow row = mock(ExpandableNotificationRow.class,
+ RETURNS_DEEP_STUBS);
+ String key = Integer.toString(i);
+ when(row.getStatusBarNotification().getKey()).thenReturn(key);
+ when(mNotificationData.isHighPriority(row.getStatusBarNotification())).thenReturn(true);
+ when(mStackScroller.getChildAt(i)).thenReturn(row);
+ }
+
+ mStackScroller.updateSectionBoundaries();
+ assertEquals(-1, mStackScroller.getSectionBoundaryIndex(0));
+ }
+
+ @Test
+ public void testUpdateGapIndex_allLowPriority() {
+ when(mStackScroller.getChildCount()).thenReturn(3);
+ for (int i = 0; i < 3; i++) {
+ ExpandableNotificationRow row = mock(ExpandableNotificationRow.class,
+ RETURNS_DEEP_STUBS);
+ String key = Integer.toString(i);
+ when(row.getStatusBarNotification().getKey()).thenReturn(key);
+ when(mNotificationData.isHighPriority(row.getStatusBarNotification()))
+ .thenReturn(false);
+ when(mStackScroller.getChildAt(i)).thenReturn(row);
+ }
+
+ mStackScroller.updateSectionBoundaries();
+ assertEquals(-1, mStackScroller.getSectionBoundaryIndex(0));
+ }
+
+ @Test
+ public void testUpdateGapIndex_gapExists() {
+ when(mStackScroller.getChildCount()).thenReturn(6);
+ for (int i = 0; i < 6; i++) {
+ ExpandableNotificationRow row = mock(ExpandableNotificationRow.class,
+ RETURNS_DEEP_STUBS);
+ String key = Integer.toString(i);
+ when(row.getStatusBarNotification().getKey()).thenReturn(key);
+ when(mNotificationData.isHighPriority(row.getStatusBarNotification()))
+ .thenReturn(i < 3);
+ when(mStackScroller.getChildAt(i)).thenReturn(row);
+ }
+
+ mStackScroller.updateSectionBoundaries();
+ assertEquals(3, mStackScroller.getSectionBoundaryIndex(0));
+ }
+
+ @Test
+ public void testUpdateGapIndex_empty() {
+ when(mStackScroller.getChildCount()).thenReturn(0);
+
+ mStackScroller.updateSectionBoundaries();
+ assertEquals(-1, mStackScroller.getSectionBoundaryIndex(0));
+ }
+
+ @Test
public void testOnDensityOrFontScaleChanged_reInflatesFooterViews() {
clearInvocations(mStackScroller);
mStackScroller.onDensityOrFontScaleChanged();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/QuickStepControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/QuickStepControllerTest.java
new file mode 100644
index 0000000..0781602
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/QuickStepControllerTest.java
@@ -0,0 +1,618 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_BOTTOM;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_LEFT;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_RIGHT;
+
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_DEAD_ZONE;
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_HOME;
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_NONE;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.anyFloat;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import com.android.systemui.R;
+import com.android.systemui.recents.OverviewProxyService;
+import com.android.systemui.shared.recents.IOverviewProxy;
+import com.android.systemui.SysuiTestCase;
+
+import android.content.res.Resources;
+import android.support.test.filters.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper.RunWithLooper;
+import android.view.MotionEvent;
+import android.view.View;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.MockitoAnnotations;
+
+/** atest QuickStepControllerTest */
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper(setAsMainLooper = true)
+@SmallTest
+public class QuickStepControllerTest extends SysuiTestCase {
+ private QuickStepController mController;
+ private NavigationBarView mNavigationBarView;
+ private StatusBar mStatusBar;
+ private OverviewProxyService mProxyService;
+ private IOverviewProxy mProxy;
+ private Resources mResources;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ final ButtonDispatcher backButton = mock(ButtonDispatcher.class);
+ mResources = mock(Resources.class);
+
+ mProxyService = mock(OverviewProxyService.class);
+ mProxy = mock(IOverviewProxy.Stub.class);
+ doReturn(mProxy).when(mProxyService).getProxy();
+ mDependency.injectTestDependency(OverviewProxyService.class, mProxyService);
+
+ mStatusBar = mock(StatusBar.class);
+ doReturn(false).when(mStatusBar).isKeyguardShowing();
+ mContext.putComponent(StatusBar.class, mStatusBar);
+
+ mNavigationBarView = mock(NavigationBarView.class);
+ doReturn(false).when(mNavigationBarView).inScreenPinning();
+ doReturn(true).when(mNavigationBarView).isNotificationsFullyCollapsed();
+ doReturn(true).when(mNavigationBarView).isQuickScrubEnabled();
+ doReturn(HIT_TARGET_NONE).when(mNavigationBarView).getDownHitTarget();
+ doReturn(backButton).when(mNavigationBarView).getBackButton();
+ doReturn(mResources).when(mNavigationBarView).getResources();
+
+ mController = new QuickStepController(mContext);
+ mController.setComponents(mNavigationBarView);
+ mController.setBarState(false /* isRTL */, NAV_BAR_BOTTOM);
+ }
+
+ @Test
+ public void testNoActionsNoGestures() throws Exception {
+ MotionEvent ev = event(MotionEvent.ACTION_DOWN, 1, 1);
+ assertFalse(mController.onInterceptTouchEvent(ev));
+ verify(mNavigationBarView, never()).requestUnbufferedDispatch(ev);
+ assertNull(mController.getCurrentAction());
+ }
+
+ @Test
+ public void testHasActionDetectGesturesTouchdown() throws Exception {
+ MotionEvent ev = event(MotionEvent.ACTION_DOWN, 1, 1);
+
+ // Add enabled gesture action
+ NavigationGestureAction action = mockAction(true);
+ mController.setGestureActions(action, null /* swipeDownAction */,
+ null /* swipeLeftAction */, null /* swipeRightAction */);
+
+ assertFalse(mController.onInterceptTouchEvent(ev));
+ verify(mNavigationBarView, times(1)).requestUnbufferedDispatch(ev);
+ verify(action, times(1)).reset();
+ verify(mProxy, times(1)).onPreMotionEvent(mNavigationBarView.getDownHitTarget());
+ verify(mProxy, times(1)).onMotionEvent(ev);
+ assertNull(mController.getCurrentAction());
+ }
+
+ @Test
+ public void testProxyDisconnectedNoGestures() throws Exception {
+ MotionEvent ev = event(MotionEvent.ACTION_DOWN, 1, 1);
+
+ // Add enabled gesture action
+ mController.setGestureActions(mockAction(true), null /* swipeDownAction */,
+ null /* swipeLeftAction */, null /* swipeRightAction */);
+
+ // Set the gesture on deadzone
+ doReturn(null).when(mProxyService).getProxy();
+
+ assertFalse(mController.onInterceptTouchEvent(ev));
+ verify(mNavigationBarView, never()).requestUnbufferedDispatch(ev);
+ assertNull(mController.getCurrentAction());
+ }
+
+ @Test
+ public void testNoActionsNoGesturesOverDeadzone() throws Exception {
+ MotionEvent ev = event(MotionEvent.ACTION_DOWN, 1, 1);
+
+ // Touched over deadzone
+ doReturn(HIT_TARGET_DEAD_ZONE).when(mNavigationBarView).getDownHitTarget();
+
+ assertTrue(mController.onInterceptTouchEvent(ev));
+ verify(mNavigationBarView, never()).requestUnbufferedDispatch(ev);
+ assertNull(mController.getCurrentAction());
+ }
+
+ @Test
+ public void testOnTouchIgnoredDownEventAfterOnIntercept() {
+ mController.setGestureActions(mockAction(true), null /* swipeDownAction */,
+ null /* swipeLeftAction */, null /* swipeRightAction */);
+
+ MotionEvent ev = event(MotionEvent.ACTION_DOWN, 1, 1);
+ assertFalse(touch(ev));
+ verify(mNavigationBarView, times(1)).requestUnbufferedDispatch(ev);
+
+ // OnTouch event for down is ignored, so requestUnbufferedDispatch ran once from before
+ assertFalse(mNavigationBarView.onTouchEvent(ev));
+ verify(mNavigationBarView, times(1)).requestUnbufferedDispatch(ev);
+ }
+
+ @Test
+ public void testGesturesCallCorrectAction() throws Exception {
+ NavigationGestureAction swipeUp = mockAction(true);
+ NavigationGestureAction swipeDown = mockAction(true);
+ NavigationGestureAction swipeLeft = mockAction(true);
+ NavigationGestureAction swipeRight = mockAction(true);
+ mController.setGestureActions(swipeUp, swipeDown, swipeLeft, swipeRight);
+
+ // Swipe Up
+ assertGestureTriggersAction(swipeUp, 1, 100, 5, 1);
+ // Swipe Down
+ assertGestureTriggersAction(swipeDown, 1, 1, 5, 100);
+ // Swipe Left
+ assertGestureTriggersAction(swipeLeft, 100, 1, 5, 1);
+ // Swipe Right
+ assertGestureTriggersAction(swipeRight, 1, 1, 100, 5);
+ }
+
+ @Test
+ public void testGesturesCallCorrectActionLandscape() throws Exception {
+ NavigationGestureAction swipeUp = mockAction(true);
+ NavigationGestureAction swipeDown = mockAction(true);
+ NavigationGestureAction swipeLeft = mockAction(true);
+ NavigationGestureAction swipeRight = mockAction(true);
+ mController.setGestureActions(swipeUp, swipeDown, swipeLeft, swipeRight);
+
+ // In landscape
+ mController.setBarState(false /* isRTL */, NAV_BAR_RIGHT);
+
+ // Swipe Up
+ assertGestureTriggersAction(swipeRight, 1, 100, 5, 1);
+ // Swipe Down
+ assertGestureTriggersAction(swipeLeft, 1, 1, 5, 100);
+ // Swipe Left
+ assertGestureTriggersAction(swipeUp, 100, 1, 5, 1);
+ // Swipe Right
+ assertGestureTriggersAction(swipeDown, 1, 1, 100, 5);
+ }
+
+ @Test
+ public void testGesturesCallCorrectActionSeascape() throws Exception {
+ mController.setBarState(false /* isRTL */, NAV_BAR_LEFT);
+ NavigationGestureAction swipeUp = mockAction(true);
+ NavigationGestureAction swipeDown = mockAction(true);
+ NavigationGestureAction swipeLeft = mockAction(true);
+ NavigationGestureAction swipeRight = mockAction(true);
+ mController.setGestureActions(swipeUp, swipeDown, swipeLeft, swipeRight);
+
+ // Swipe Up
+ assertGestureTriggersAction(swipeLeft, 1, 100, 5, 1);
+ // Swipe Down
+ assertGestureTriggersAction(swipeRight, 1, 1, 5, 100);
+ // Swipe Left
+ assertGestureTriggersAction(swipeDown, 100, 1, 5, 1);
+ // Swipe Right
+ assertGestureTriggersAction(swipeUp, 1, 1, 100, 5);
+ }
+
+ @Test
+ public void testGesturesCallCorrectActionRTL() throws Exception {
+ mController.setBarState(true /* isRTL */, NAV_BAR_BOTTOM);
+
+ // The swipe gestures below are for LTR, so RTL in portrait will be swapped
+ NavigationGestureAction swipeUp = mockAction(true);
+ NavigationGestureAction swipeDown = mockAction(true);
+ NavigationGestureAction swipeLeft = mockAction(true);
+ NavigationGestureAction swipeRight = mockAction(true);
+ mController.setGestureActions(swipeUp, swipeDown, swipeLeft, swipeRight);
+
+ // Swipe Up in RTL
+ assertGestureTriggersAction(swipeUp, 1, 100, 5, 1);
+ // Swipe Down in RTL
+ assertGestureTriggersAction(swipeDown, 1, 1, 5, 100);
+ // Swipe Left in RTL
+ assertGestureTriggersAction(swipeRight, 100, 1, 5, 1);
+ // Swipe Right in RTL
+ assertGestureTriggersAction(swipeLeft, 1, 1, 100, 5);
+ }
+
+ @Test
+ public void testGesturesCallCorrectActionLandscapeRTL() throws Exception {
+ mController.setBarState(true /* isRTL */, NAV_BAR_RIGHT);
+
+ // The swipe gestures below are for LTR, so RTL in landscape will be swapped
+ NavigationGestureAction swipeUp = mockAction(true);
+ NavigationGestureAction swipeDown = mockAction(true);
+ NavigationGestureAction swipeLeft = mockAction(true);
+ NavigationGestureAction swipeRight = mockAction(true);
+ mController.setGestureActions(swipeUp, swipeDown, swipeLeft, swipeRight);
+
+ // Swipe Up
+ assertGestureTriggersAction(swipeLeft, 1, 100, 5, 1);
+ // Swipe Down
+ assertGestureTriggersAction(swipeRight, 1, 1, 5, 100);
+ // Swipe Left
+ assertGestureTriggersAction(swipeUp, 100, 1, 5, 1);
+ // Swipe Right
+ assertGestureTriggersAction(swipeDown, 1, 1, 100, 5);
+ }
+
+ @Test
+ public void testGesturesCallCorrectActionSeascapeRTL() throws Exception {
+ mController.setBarState(true /* isRTL */, NAV_BAR_LEFT);
+
+ // The swipe gestures below are for LTR, so RTL in seascape will be swapped
+ NavigationGestureAction swipeUp = mockAction(true);
+ NavigationGestureAction swipeDown = mockAction(true);
+ NavigationGestureAction swipeLeft = mockAction(true);
+ NavigationGestureAction swipeRight = mockAction(true);
+ mController.setGestureActions(swipeUp, swipeDown, swipeLeft, swipeRight);
+
+ // Swipe Up
+ assertGestureTriggersAction(swipeRight, 1, 100, 5, 1);
+ // Swipe Down
+ assertGestureTriggersAction(swipeLeft, 1, 1, 5, 100);
+ // Swipe Left
+ assertGestureTriggersAction(swipeDown, 100, 1, 5, 1);
+ // Swipe Right
+ assertGestureTriggersAction(swipeUp, 1, 1, 100, 5);
+ }
+
+ @Test
+ public void testActionPreventByPinnedState() throws Exception {
+ // Screen is pinned
+ doReturn(true).when(mNavigationBarView).inScreenPinning();
+
+ // Add enabled gesture action
+ NavigationGestureAction action = mockAction(true);
+ mController.setGestureActions(action, null /* swipeDownAction */,
+ null /* swipeLeftAction */, null /* swipeRightAction */);
+
+ // Touch down to begin swipe
+ MotionEvent downEvent = event(MotionEvent.ACTION_DOWN, 1, 100);
+ assertFalse(touch(downEvent));
+ verify(mProxy, never()).onPreMotionEvent(mNavigationBarView.getDownHitTarget());
+ verify(mProxy, never()).onMotionEvent(downEvent);
+
+ // Move to start gesture, but pinned so it should not trigger action
+ MotionEvent moveEvent = event(MotionEvent.ACTION_MOVE, 1, 1);
+ assertFalse(touch(moveEvent));
+ assertNull(mController.getCurrentAction());
+ verify(mNavigationBarView, times(1)).showPinningEscapeToast();
+ verify(action, never()).onGestureStart(moveEvent);
+ }
+
+ @Test
+ public void testActionPreventedNotificationsShown() throws Exception {
+ NavigationGestureAction action = mockAction(true);
+ doReturn(false).when(action).canRunWhenNotificationsShowing();
+ mController.setGestureActions(action, null /* swipeDownAction */,
+ null /* swipeLeftAction */, null /* swipeRightAction */);
+
+ // Show the notifications
+ doReturn(false).when(mNavigationBarView).isNotificationsFullyCollapsed();
+
+ // Swipe up
+ assertFalse(touch(MotionEvent.ACTION_DOWN, 1, 100));
+ assertFalse(touch(MotionEvent.ACTION_MOVE, 1, 1));
+ assertNull(mController.getCurrentAction());
+ assertFalse(touch(MotionEvent.ACTION_UP, 1, 1));
+
+ // Hide the notifications
+ doReturn(true).when(mNavigationBarView).isNotificationsFullyCollapsed();
+
+ // Swipe up
+ assertFalse(touch(MotionEvent.ACTION_DOWN, 1, 100));
+ assertTrue(touch(MotionEvent.ACTION_MOVE, 1, 1));
+ assertEquals(action, mController.getCurrentAction());
+ assertFalse(touch(MotionEvent.ACTION_UP, 1, 1));
+ }
+
+ @Test
+ public void testActionCannotPerform() throws Exception {
+ NavigationGestureAction action = mockAction(true);
+ mController.setGestureActions(action, null /* swipeDownAction */,
+ null /* swipeLeftAction */, null /* swipeRightAction */);
+
+ // Cannot perform action
+ doReturn(false).when(action).canPerformAction();
+
+ // Swipe up
+ assertFalse(touch(MotionEvent.ACTION_DOWN, 1, 100));
+ assertFalse(touch(MotionEvent.ACTION_MOVE, 1, 1));
+ assertNull(mController.getCurrentAction());
+ assertFalse(touch(MotionEvent.ACTION_UP, 1, 1));
+
+ // Cannot perform action
+ doReturn(true).when(action).canPerformAction();
+
+ // Swipe up
+ assertFalse(touch(MotionEvent.ACTION_DOWN, 1, 100));
+ assertTrue(touch(MotionEvent.ACTION_MOVE, 1, 1));
+ assertEquals(action, mController.getCurrentAction());
+ assertFalse(touch(MotionEvent.ACTION_UP, 1, 1));
+ }
+
+ @Test
+ public void testQuickScrub() throws Exception {
+ QuickScrubAction action = spy(new QuickScrubAction(mNavigationBarView, mProxyService));
+ mController.setGestureActions(null /* swipeUpAction */, null /* swipeDownAction */,
+ null /* swipeLeftAction */, action);
+ int y = 20;
+
+ // Set the layout and other padding to make sure the scrub fraction is calculated correctly
+ action.onLayout(true, 0, 0, 400, 100);
+ doReturn(0).when(mNavigationBarView).getPaddingLeft();
+ doReturn(0).when(mNavigationBarView).getPaddingRight();
+ doReturn(0).when(mNavigationBarView).getPaddingStart();
+ doReturn(0).when(mResources)
+ .getDimensionPixelSize(R.dimen.nav_quick_scrub_track_edge_padding);
+
+ // Quickscrub disabled, so the action should be disabled
+ doReturn(false).when(mNavigationBarView).isQuickScrubEnabled();
+ assertFalse(action.isEnabled());
+ doReturn(true).when(mNavigationBarView).isQuickScrubEnabled();
+
+ // Touch down
+ MotionEvent downEvent = event(MotionEvent.ACTION_DOWN, 0, y);
+ assertFalse(touch(downEvent));
+ assertNull(mController.getCurrentAction());
+ verify(mProxy, times(1)).onPreMotionEvent(mNavigationBarView.getDownHitTarget());
+ verify(mProxy, times(1)).onMotionEvent(downEvent);
+
+ // Move to start trigger action from gesture
+ MotionEvent moveEvent1 = event(MotionEvent.ACTION_MOVE, 100, y);
+ assertTrue(touch(moveEvent1));
+ assertEquals(action, mController.getCurrentAction());
+ verify(action, times(1)).onGestureStart(moveEvent1);
+ verify(mProxy, times(1)).onQuickScrubStart();
+ verify(mProxyService, times(1)).notifyQuickScrubStarted();
+ verify(mNavigationBarView, times(1)).updateSlippery();
+
+ // Move again for scrub
+ MotionEvent moveEvent2 = event(MotionEvent.ACTION_MOVE, 200, y);
+ assertTrue(touch(moveEvent2));
+ assertEquals(action, mController.getCurrentAction());
+ verify(action, times(1)).onGestureMove(200, y);
+ verify(mProxy, times(1)).onQuickScrubProgress(1f / 2);
+
+ // Action up
+ MotionEvent upEvent = event(MotionEvent.ACTION_UP, 1, y);
+ assertFalse(touch(upEvent));
+ assertNull(mController.getCurrentAction());
+ verify(action, times(1)).onGestureEnd();
+ verify(mProxy, times(1)).onQuickScrubEnd();
+ }
+
+ @Test
+ public void testQuickStep() throws Exception {
+ QuickStepAction action = new QuickStepAction(mNavigationBarView, mProxyService);
+ mController.setGestureActions(action, null /* swipeDownAction */,
+ null /* swipeLeftAction */, null /* swipeRightAction */);
+
+ // Notifications are up, should prevent quickstep
+ doReturn(false).when(mNavigationBarView).isNotificationsFullyCollapsed();
+
+ // Swipe up
+ assertFalse(touch(MotionEvent.ACTION_DOWN, 1, 100));
+ assertNull(mController.getCurrentAction());
+ assertFalse(touch(MotionEvent.ACTION_MOVE, 1, 1));
+ assertNull(mController.getCurrentAction());
+ assertFalse(touch(MotionEvent.ACTION_UP, 1, 1));
+ doReturn(true).when(mNavigationBarView).isNotificationsFullyCollapsed();
+
+ // Quickstep disabled, so the action should be disabled
+ doReturn(false).when(mNavigationBarView).isQuickStepSwipeUpEnabled();
+ assertFalse(action.isEnabled());
+ doReturn(true).when(mNavigationBarView).isQuickStepSwipeUpEnabled();
+
+ // Swipe up should call proxy events
+ MotionEvent downEvent = event(MotionEvent.ACTION_DOWN, 1, 100);
+ assertFalse(touch(downEvent));
+ assertNull(mController.getCurrentAction());
+ verify(mProxy, times(1)).onPreMotionEvent(mNavigationBarView.getDownHitTarget());
+ verify(mProxy, times(1)).onMotionEvent(downEvent);
+
+ MotionEvent moveEvent = event(MotionEvent.ACTION_MOVE, 1, 1);
+ assertTrue(touch(moveEvent));
+ assertEquals(action, mController.getCurrentAction());
+ verify(mProxy, times(1)).onQuickStep(moveEvent);
+ verify(mProxyService, times(1)).notifyQuickStepStarted();
+ }
+
+ @Test
+ public void testLongPressPreventDetection() throws Exception {
+ NavigationGestureAction action = mockAction(true);
+ mController.setGestureActions(action, null /* swipeDownAction */,
+ null /* swipeLeftAction */, null /* swipeRightAction */);
+
+ // Start the drag up
+ assertFalse(touch(MotionEvent.ACTION_DOWN, 100, 1));
+ assertNull(mController.getCurrentAction());
+
+ // Long press something on the navigation bar such as Home button
+ mNavigationBarView.onNavigationButtonLongPress(mock(View.class));
+
+ // Swipe right will not start any gestures
+ MotionEvent motionMoveEvent = event(MotionEvent.ACTION_MOVE, 1, 1);
+ assertFalse(touch(motionMoveEvent));
+ assertNull(mController.getCurrentAction());
+ verify(action, never()).startGesture(motionMoveEvent);
+
+ // Touch up
+ assertFalse(touch(MotionEvent.ACTION_UP, 1, 1));
+ verify(action, never()).endGesture();
+ }
+
+ @Test
+ public void testHitTargetDragged() throws Exception {
+ ButtonDispatcher button = mock(ButtonDispatcher.class);
+ View buttonView = spy(new View(mContext));
+ doReturn(buttonView).when(button).getCurrentView();
+
+ NavigationGestureAction action = mockAction(true);
+ mController.setGestureActions(action, action, action, action);
+
+ // Setup getting the hit target
+ doReturn(HIT_TARGET_HOME).when(action).requiresTouchDownHitTarget();
+ doReturn(true).when(action).requiresDragWithHitTarget();
+ doReturn(HIT_TARGET_HOME).when(mNavigationBarView).getDownHitTarget();
+ doReturn(button).when(mNavigationBarView).getHomeButton();
+
+ // Portrait
+ assertGestureDragsHitTargetAllDirections(buttonView, false /* isRTL */, NAV_BAR_BOTTOM);
+
+ // Portrait RTL
+ assertGestureDragsHitTargetAllDirections(buttonView, true /* isRTL */, NAV_BAR_BOTTOM);
+
+ // Landscape
+ assertGestureDragsHitTargetAllDirections(buttonView, false /* isRTL */, NAV_BAR_RIGHT);
+
+ // Landscape RTL
+ assertGestureDragsHitTargetAllDirections(buttonView, true /* isRTL */, NAV_BAR_RIGHT);
+
+ // Seascape
+ assertGestureDragsHitTargetAllDirections(buttonView, false /* isRTL */, NAV_BAR_LEFT);
+
+ // Seascape RTL
+ assertGestureDragsHitTargetAllDirections(buttonView, true /* isRTL */, NAV_BAR_LEFT);
+ }
+
+ private void assertGestureDragsHitTargetAllDirections(View buttonView, boolean isRTL,
+ int navPos) {
+ mController.setBarState(isRTL, navPos);
+
+ // Swipe up
+ assertGestureDragsHitTarget(buttonView, 10 /* x1 */, 200 /* y1 */, 0 /* x2 */, 0 /* y2 */,
+ 0 /* dx */, -1 /* dy */);
+ // Swipe left
+ assertGestureDragsHitTarget(buttonView, 200 /* x1 */, 10 /* y1 */, 0 /* x2 */, 0 /* y2 */,
+ -1 /* dx */, 0 /* dy */);
+ // Swipe right
+ assertGestureDragsHitTarget(buttonView, 0 /* x1 */, 0 /* y1 */, 200 /* x2 */, 10 /* y2 */,
+ 1 /* dx */, 0 /* dy */);
+ // Swipe down
+ assertGestureDragsHitTarget(buttonView, 0 /* x1 */, 0 /* y1 */, 10 /* x2 */, 200 /* y2 */,
+ 0 /* dx */, 1 /* dy */);
+ }
+
+ /**
+ * Asserts the gesture actually moves the hit target
+ * @param buttonView button to check if moved, use Mockito.spy on a real object
+ * @param x1 start x
+ * @param x2 start y
+ * @param y1 end x
+ * @param y2 end y
+ * @param dx diff in x, if not 0, its sign determines direction, value does not matter
+ * @param dy diff in y, if not 0, its sign determines direction, value does not matter
+ */
+ private void assertGestureDragsHitTarget(View buttonView, int x1, int y1, int x2, int y2,
+ int dx, int dy) {
+ ArgumentCaptor<Float> captor = ArgumentCaptor.forClass(Float.class);
+ assertFalse(touch(MotionEvent.ACTION_DOWN, x1, y1));
+ assertTrue(touch(MotionEvent.ACTION_MOVE, x2, y2));
+
+ // Verify positions of the button drag
+ if (dx == 0) {
+ verify(buttonView, never()).setTranslationX(anyFloat());
+ } else {
+ verify(buttonView).setTranslationX(captor.capture());
+ if (dx < 0) {
+ assertTrue("Button should have moved left", (float) captor.getValue() < 0);
+ } else {
+ assertTrue("Button should have moved right", (float) captor.getValue() > 0);
+ }
+ }
+ if (dy == 0) {
+ verify(buttonView, never()).setTranslationY(anyFloat());
+ } else {
+ verify(buttonView).setTranslationY(captor.capture());
+ if (dy < 0) {
+ assertTrue("Button should have moved up", (float) captor.getValue() < 0);
+ } else {
+ assertTrue("Button should have moved down", (float) captor.getValue() > 0);
+ }
+ }
+
+ // Touch up
+ assertFalse(touch(MotionEvent.ACTION_UP, x2, y2));
+ verify(buttonView, times(1)).animate();
+
+ // Reset button state
+ reset(buttonView);
+ }
+
+
+ private MotionEvent event(int action, float x, float y) {
+ final MotionEvent event = mock(MotionEvent.class);
+ doReturn(x).when(event).getX();
+ doReturn(y).when(event).getY();
+ doReturn(action & MotionEvent.ACTION_MASK).when(event).getActionMasked();
+ doReturn(action).when(event).getAction();
+ return event;
+ }
+
+ private boolean touch(int action, float x, float y) {
+ return touch(event(action, x, y));
+ }
+
+ private boolean touch(MotionEvent event) {
+ return mController.onInterceptTouchEvent(event);
+ }
+
+ private NavigationGestureAction mockAction(boolean enabled) {
+ final NavigationGestureAction action = mock(NavigationGestureAction.class);
+ doReturn(enabled).when(action).isEnabled();
+ doReturn(HIT_TARGET_NONE).when(action).requiresTouchDownHitTarget();
+ doReturn(true).when(action).canPerformAction();
+ return action;
+ }
+
+ private void assertGestureTriggersAction(NavigationGestureAction action, int x1, int y1,
+ int x2, int y2) {
+ // Start the drag
+ assertFalse(touch(MotionEvent.ACTION_DOWN, x1, y1));
+ assertNull(mController.getCurrentAction());
+
+ // Swipe
+ MotionEvent motionMoveEvent = event(MotionEvent.ACTION_MOVE, x2, y2);
+ assertTrue(touch(motionMoveEvent));
+ assertEquals(action, mController.getCurrentAction());
+ verify(action, times(1)).startGesture(motionMoveEvent);
+
+ // Move again
+ assertTrue(touch(MotionEvent.ACTION_MOVE, x2, y2));
+ verify(action, times(1)).onGestureMove(x2, y2);
+
+ // Touch up
+ assertFalse(touch(MotionEvent.ACTION_UP, x2, y2));
+ assertNull(mController.getCurrentAction());
+ verify(action, times(1)).endGesture();
+ }
+}
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-as/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-as/strings.xml
new file mode 100644
index 0000000..2e4d729
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-as/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"ওপঙি থকা নেভিগে’শ্বন বাৰ সম্পৰীক্ষা"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-bn/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-bn/strings.xml
new file mode 100644
index 0000000..dc4994f
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-bn/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"ফ্লোটিং নেভিগেশন বার সম্পর্কিত পরীক্ষা"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-gu/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-gu/strings.xml
new file mode 100644
index 0000000..10ca61d
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-gu/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"ફ્લોટિંગ નૅવિગેશન બારનો પ્રયોગ"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-kn/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-kn/strings.xml
new file mode 100644
index 0000000..b3949d2
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-kn/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"ಫ್ಲೋಟಿಂಗ್ ನ್ಯಾವಿಗೇಷನ್ ಬಾರ್ ಪ್ರಯೋಗ"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ky/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ky/strings.xml
index bfd96da..51613ee 100644
--- a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ky/strings.xml
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ky/strings.xml
@@ -19,5 +19,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"Калкыма чабыттоо тилкесин колдонуу"</string>
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"Калкыма чабыттоо тилкесин сыноо"</string>
</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ml/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ml/strings.xml
new file mode 100644
index 0000000..f3bfaa2
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ml/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"ഫ്ലോട്ടിംഗ് നാവിഗേഷൻ ബാർ പരീക്ഷണം"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ne/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ne/strings.xml
new file mode 100644
index 0000000..e9a5654
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ne/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"उत्रिएको नेभिगेसन पट्टीको परीक्षण"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-or/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-or/strings.xml
new file mode 100644
index 0000000..1de802b
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-or/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"ଭାସମାନ ନାଭିଗେସନ୍ ବାର୍ର ପ୍ରୟୋଗ"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-pa/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-pa/strings.xml
new file mode 100644
index 0000000..6d0970a
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-pa/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"ਫਲੋਟਿੰਗ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ ਪੱਟੀ ਪ੍ਰਯੋਗ"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-si/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-si/strings.xml
new file mode 100644
index 0000000..48eedd1
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-si/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"පාවෙන සංචාලන තීරු අත්දැකීම"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ta/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ta/strings.xml
new file mode 100644
index 0000000..5c870cd
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-ta/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"மிதக்கும் வழிசெலுத்துதல் பட்டி சோதனை"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-te/strings.xml b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-te/strings.xml
new file mode 100644
index 0000000..3478e10
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarFloatingOverlay/res/values-te/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="7290469683147348228">"కదిలే నావిగేషన్ పట్టీ ప్రయోగం"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-as/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-as/strings.xml
new file mode 100644
index 0000000..8cce570
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-as/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"লাহী নেভিগে’শ্বন বাৰ সম্পৰীক্ষা"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-bn/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-bn/strings.xml
new file mode 100644
index 0000000..c0ab3b1
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-bn/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"স্লিম নেভিগেশন বার সম্পর্কিত পরীক্ষা"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-gu/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-gu/strings.xml
new file mode 100644
index 0000000..96418ae
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-gu/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"સ્લિમ નૅવિગેશન બારનો પ્રયોગ"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-kn/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-kn/strings.xml
new file mode 100644
index 0000000..ccdddea
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-kn/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"ಸ್ಲಿಮ್ ನ್ಯಾವಿಗೇಷನ್ ಬಾರ್ ಪ್ರಯೋಗ"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ky/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ky/strings.xml
index 6b15d51..449de4f 100644
--- a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ky/strings.xml
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ky/strings.xml
@@ -19,5 +19,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"Жука чабыттоо тилкесин колдонуу"</string>
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"Чакан чабыттоо тилкесин сыноо"</string>
</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ml/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ml/strings.xml
new file mode 100644
index 0000000..b65afe3
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ml/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"സ്ലിം നാവിഗേഷൻ ബാർ പരീക്ഷണം"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ne/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ne/strings.xml
new file mode 100644
index 0000000..6022b7f
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ne/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"पातलो नेभिगेसन पट्टीको परीक्षण"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-or/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-or/strings.xml
new file mode 100644
index 0000000..1db9783
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-or/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"ସ୍ଲିମ୍ ନାଭିଗେସନ୍ ବାର୍ର ପ୍ରୟୋଗ"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-pa/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-pa/strings.xml
new file mode 100644
index 0000000..a782f46
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-pa/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"ਸਲਿਮ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ ਪੱਟੀ ਪ੍ਰਯੋਗ"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-si/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-si/strings.xml
new file mode 100644
index 0000000..a1abb64
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-si/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"සිහින් සංචාලන තීරු අත්දැකීම"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ta/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ta/strings.xml
new file mode 100644
index 0000000..9e95c38
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-ta/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"மெலிதான வழிசெலுத்துதல் பட்டி சோதனை"</string>
+</resources>
diff --git a/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-te/strings.xml b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-te/strings.xml
new file mode 100644
index 0000000..d273ab7
--- /dev/null
+++ b/packages/overlays/ExperimentNavigationBarSlimOverlay/res/values-te/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="experiment_navigationbar_overlay" msgid="6953777362606036161">"సన్నని నావిగేషన్ పట్టీ ప్రయోగం"</string>
+</resources>
diff --git a/proto/src/task_snapshot.proto b/proto/src/task_snapshot.proto
index 65d6256..a1bbe52 100644
--- a/proto/src/task_snapshot.proto
+++ b/proto/src/task_snapshot.proto
@@ -31,4 +31,5 @@
int32 windowing_mode = 7;
int32 system_ui_visibility = 8;
bool is_translucent = 9;
+ string top_activity_component = 10;
}
\ No newline at end of file
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 09f915e..1ff1acd 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -281,18 +281,6 @@
return;
}
- // Sanitize structure before it's sent to service.
- final ComponentName componentNameFromApp = structure.getActivityComponent();
- if (componentNameFromApp == null || !mComponentName.getPackageName()
- .equals(componentNameFromApp.getPackageName())) {
- Slog.w(TAG, "Activity " + mComponentName + " forged different component on "
- + "AssistStructure: " + componentNameFromApp);
- structure.setActivityComponent(mComponentName);
- mMetricsLogger.write(newLogMaker(MetricsEvent.AUTOFILL_FORGED_COMPONENT_ATTEMPT)
- .addTaggedData(MetricsEvent.FIELD_AUTOFILL_FORGED_COMPONENT_NAME,
- componentNameFromApp == null ? "null"
- : componentNameFromApp.flattenToShortString()));
- }
// Flags used to start the session.
int flags = structure.getFlags();
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index 54c7d17..86048f0 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -2097,6 +2097,26 @@
Binder.restoreCallingIdentity(token);
}
}
+
+ if ((mask & StorageManager.DEBUG_ISOLATED_STORAGE) != 0) {
+ final boolean enabled = (flags & StorageManager.DEBUG_ISOLATED_STORAGE) != 0;
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ SystemProperties.set(StorageManager.PROP_ISOLATED_STORAGE,
+ Boolean.toString(enabled));
+
+ // Some of the storage related permissions get fiddled with during
+ // package scanning. So, delete the package cache to force PackageManagerService
+ // to do package scanning.
+ FileUtils.deleteContents(Environment.getPackageCacheDirectory());
+
+ // Perform hard reboot to kick policy into place
+ mContext.getSystemService(PowerManager.class).reboot(null);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
}
@Override
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index 5538e72..cb9d4c6 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -300,11 +300,10 @@
@Override
public void setNightMode(int mode) {
- if (isNightModeLocked() && (getContext().checkCallingOrSelfPermission(
+ if (isNightModeLocked() && (getContext().checkCallingOrSelfPermission(
android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)
!= PackageManager.PERMISSION_GRANTED)) {
- Slog.e(TAG,
- "Night mode locked, requires MODIFY_DAY_NIGHT_MODE permission");
+ Slog.e(TAG, "Night mode locked, requires MODIFY_DAY_NIGHT_MODE permission");
return;
}
switch (mode) {
diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java
index dd993b8..b3f0629 100644
--- a/services/core/java/com/android/server/job/JobSchedulerService.java
+++ b/services/core/java/com/android/server/job/JobSchedulerService.java
@@ -1740,11 +1740,6 @@
/**
* The state of at least one job has changed. Here is where we could enforce various
* policies on when we want to execute jobs.
- * Right now the policy is such:
- * If >1 of the ready jobs is idle mode we send all of them off
- * if more than 2 network connectivity jobs are ready we send them all off.
- * If more than 4 jobs total are ready we send them all off.
- * TODO: It would be nice to consolidate these sort of high-level policies somewhere.
*/
final class MaybeReadyJobQueueFunctor implements Consumer<JobStatus> {
int chargingCount;
diff --git a/services/core/java/com/android/server/job/controllers/JobStatus.java b/services/core/java/com/android/server/job/controllers/JobStatus.java
index 4ece538d..35fc29e 100644
--- a/services/core/java/com/android/server/job/controllers/JobStatus.java
+++ b/services/core/java/com/android/server/job/controllers/JobStatus.java
@@ -68,10 +68,10 @@
public static final long NO_LATEST_RUNTIME = Long.MAX_VALUE;
public static final long NO_EARLIEST_RUNTIME = 0L;
- static final int CONSTRAINT_CHARGING = JobInfo.CONSTRAINT_FLAG_CHARGING;
- static final int CONSTRAINT_IDLE = JobInfo.CONSTRAINT_FLAG_DEVICE_IDLE;
- static final int CONSTRAINT_BATTERY_NOT_LOW = JobInfo.CONSTRAINT_FLAG_BATTERY_NOT_LOW;
- static final int CONSTRAINT_STORAGE_NOT_LOW = JobInfo.CONSTRAINT_FLAG_STORAGE_NOT_LOW;
+ static final int CONSTRAINT_CHARGING = JobInfo.CONSTRAINT_FLAG_CHARGING; // 1 < 0
+ static final int CONSTRAINT_IDLE = JobInfo.CONSTRAINT_FLAG_DEVICE_IDLE; // 1 << 2
+ static final int CONSTRAINT_BATTERY_NOT_LOW = JobInfo.CONSTRAINT_FLAG_BATTERY_NOT_LOW; // 1 << 1
+ static final int CONSTRAINT_STORAGE_NOT_LOW = JobInfo.CONSTRAINT_FLAG_STORAGE_NOT_LOW; // 1 << 3
static final int CONSTRAINT_TIMING_DELAY = 1<<31;
static final int CONSTRAINT_DEADLINE = 1<<30;
static final int CONSTRAINT_CONNECTIVITY = 1<<28;
@@ -975,8 +975,7 @@
}
/**
- * @return Whether or not this job is ready to run, based on its requirements. This is true if
- * the constraints are satisfied <strong>or</strong> the deadline on the job has expired.
+ * @return Whether or not this job is ready to run, based on its requirements.
*/
public boolean isReady() {
// Deadline constraint trumps other constraints (except for periodic jobs where deadline
@@ -1234,16 +1233,18 @@
proto.end(token);
}
- // normalized bucket indices, not the AppStandby constants
- private String bucketName(int bucket) {
- switch (bucket) {
+ /**
+ * Returns a bucket name based on the normalized bucket indices, not the AppStandby constants.
+ */
+ String getBucketName() {
+ switch (standbyBucket) {
case 0: return "ACTIVE";
case 1: return "WORKING_SET";
case 2: return "FREQUENT";
case 3: return "RARE";
case 4: return "NEVER";
default:
- return "Unknown: " + bucket;
+ return "Unknown: " + standbyBucket;
}
}
@@ -1385,6 +1386,17 @@
if ((trackingControllers&TRACKING_TIME) != 0) pw.print(" TIME");
pw.println();
}
+
+ pw.print(prefix); pw.println("Implicit constraints:");
+ pw.print(prefix); pw.print(" readyNotDozing: ");
+ pw.println(mReadyNotDozing);
+ pw.print(prefix); pw.print(" readyNotRestrictedInBg: ");
+ pw.println(mReadyNotRestrictedInBg);
+ if (!job.isPeriodic() && hasDeadlineConstraint()) {
+ pw.print(prefix); pw.print(" readyDeadlineSatisfied: ");
+ pw.println(mReadyDeadlineSatisfied);
+ }
+
if (changedAuthorities != null) {
pw.print(prefix); pw.println("Changed authorities:");
for (int i=0; i<changedAuthorities.size(); i++) {
@@ -1413,7 +1425,7 @@
}
}
pw.print(prefix); pw.print("Standby bucket: ");
- pw.println(bucketName(standbyBucket));
+ pw.println(getBucketName());
if (standbyBucket > 0) {
pw.print(prefix); pw.print("Base heartbeat: ");
pw.println(baseHeartbeat);
@@ -1564,6 +1576,13 @@
JobStatusDumpProto.TRACKING_TIME);
}
+ // Implicit constraints
+ final long icToken = proto.start(JobStatusDumpProto.IMPLICIT_CONSTRAINTS);
+ proto.write(JobStatusDumpProto.ImplicitConstraints.IS_NOT_DOZING, mReadyNotDozing);
+ proto.write(JobStatusDumpProto.ImplicitConstraints.IS_NOT_RESTRICTED_IN_BG,
+ mReadyNotRestrictedInBg);
+ proto.end(icToken);
+
if (changedAuthorities != null) {
for (int k = 0; k < changedAuthorities.size(); k++) {
proto.write(JobStatusDumpProto.CHANGED_AUTHORITIES, changedAuthorities.valueAt(k));
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index ed5b33b6..77045fb 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -3203,9 +3203,8 @@
}
// The base directory for the package parser cache lives under /data/system/.
- final File cacheBaseDir = FileUtils.createDir(Environment.getDataSystemDirectory(),
- "package_cache");
- if (cacheBaseDir == null) {
+ final File cacheBaseDir = Environment.getPackageCacheDirectory();
+ if (!FileUtils.createDir(cacheBaseDir)) {
return null;
}
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 79eab6b..ec78560 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -140,13 +140,14 @@
switch (which) {
case 1:
what1 = what;
- return;
+ break;
case 2:
what2 = what;
- return;
+ break;
default:
Slog.w(TAG, "Can't set unsupported disable flag " + which
+ ": 0x" + Integer.toHexString(what));
+ break;
}
this.pkg = pkg;
}
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 8223693..23f8125 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -1009,8 +1009,8 @@
updateOverrideConfiguration();
mWindowContainerController = new AppWindowContainerController(taskController, appToken,
- this, Integer.MAX_VALUE /* add on top */, info.screenOrientation, fullscreen,
- (info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0, info.configChanges,
+ realActivity, this, Integer.MAX_VALUE /* add on top */, info.screenOrientation,
+ fullscreen, (info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0, info.configChanges,
task.voiceSession != null, mLaunchTaskBehind, isAlwaysFocusable(),
appInfo.targetSdkVersion, mRotationAnimationHint,
ActivityTaskManagerService.getInputDispatchingTimeoutLocked(this) * 1000000L);
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index 1944184..7fcee3db 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -5184,12 +5184,14 @@
/**
* Removes the input task from this stack.
+ *
* @param task to remove.
* @param reason for removal.
* @param mode task removal mode. Either {@link #REMOVE_TASK_MODE_DESTROYING},
* {@link #REMOVE_TASK_MODE_MOVING}, {@link #REMOVE_TASK_MODE_MOVING_TO_TOP}.
*/
void removeTask(TaskRecord task, String reason, int mode) {
+ // TODO(b/119259346): Move some logic below to TaskRecord. See bug for more context.
for (ActivityRecord record : task.mActivities) {
onActivityRemovedFromStack(record);
}
@@ -5204,6 +5206,9 @@
updateTaskMovement(task, true);
if (mode == REMOVE_TASK_MODE_DESTROYING && task.mActivities.isEmpty()) {
+ // This task is going away, so save the last state if necessary.
+ task.saveLaunchingStateIfNeeded();
+
// TODO: VI what about activity?
final boolean isVoiceSession = task.voiceSession != null;
if (isVoiceSession) {
diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
index 151f6f7..97eaafc 100644
--- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
@@ -174,6 +174,7 @@
import android.util.TimeUtils;
import android.util.proto.ProtoOutputStream;
import android.view.Display;
+import android.view.DisplayInfo;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -327,6 +328,9 @@
WindowManagerService mWindowManager;
DisplayManager mDisplayManager;
+ /** Common synchronization logic used to save things to disks. */
+ PersisterQueue mPersisterQueue;
+ LaunchParamsPersister mLaunchParamsPersister;
private LaunchParamsController mLaunchParamsController;
/**
@@ -631,10 +635,16 @@
mActivityMetricsLogger = new ActivityMetricsLogger(this, mService.mContext, mHandler.getLooper());
mKeyguardController = new KeyguardController(mService, this);
- mLaunchParamsController = new LaunchParamsController(mService);
+ mPersisterQueue = new PersisterQueue();
+ mLaunchParamsPersister = new LaunchParamsPersister(mPersisterQueue, this);
+ mLaunchParamsController = new LaunchParamsController(mService, mLaunchParamsPersister);
mLaunchParamsController.registerDefaultModifiers(this);
}
+ void onSystemReady() {
+ mPersisterQueue.startPersisting();
+ mLaunchParamsPersister.onSystemReady();
+ }
public ActivityMetricsLogger getActivityMetricsLogger() {
return mActivityMetricsLogger;
@@ -4249,6 +4259,25 @@
return activityDisplay;
}
+ /**
+ * Get an existing instance of {@link ActivityDisplay} that has the given uniqueId. Unique ID is
+ * defined in {@link DisplayInfo#uniqueId}.
+ *
+ * @param uniqueId the unique ID of the display
+ * @return the {@link ActivityDisplay} or {@code null} if nothing is found.
+ */
+ ActivityDisplay getActivityDisplay(String uniqueId) {
+ for (int i = mActivityDisplays.size() - 1; i >= 0; --i) {
+ final ActivityDisplay display = mActivityDisplays.get(i);
+ final boolean isValid = display.mDisplay.isValid();
+ if (isValid && display.mDisplay.getUniqueId().equals(uniqueId)) {
+ return display;
+ }
+ }
+
+ return null;
+ }
+
boolean startHomeOnAllDisplays(int userId, String reason) {
boolean homeStarted = false;
for (int i = mActivityDisplays.size() - 1; i >= 0; i--) {
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 2e75c36..1d00075 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -653,6 +653,7 @@
mAssistUtils = new AssistUtils(mContext);
mVrController.onSystemReady();
mRecentTasks.onSystemReadyLocked();
+ mStackSupervisor.onSystemReady();
}
}
@@ -910,6 +911,20 @@
mService.start();
}
+ @Override
+ public void onUnlockUser(int userId) {
+ synchronized (mService.getGlobalLock()) {
+ mService.mStackSupervisor.mLaunchParamsPersister.onUnlockUser(userId);
+ }
+ }
+
+ @Override
+ public void onCleanupUser(int userId) {
+ synchronized (mService.getGlobalLock()) {
+ mService.mStackSupervisor.mLaunchParamsPersister.onCleanupUser(userId);
+ }
+ }
+
public ActivityTaskManagerService getService() {
return mService;
}
@@ -2745,6 +2760,9 @@
pae.extras.putParcelable(Intent.EXTRA_REFERRER, referrer);
}
if (structure != null) {
+ // Pre-fill the task/activity component for all assist data receivers
+ structure.setTaskId(pae.activity.getTask().taskId);
+ structure.setActivityComponent(pae.activity.realActivity);
structure.setHomeActivity(pae.isHome);
}
pae.haveResult = true;
diff --git a/services/core/java/com/android/server/wm/AppWindowContainerController.java b/services/core/java/com/android/server/wm/AppWindowContainerController.java
index 830c2e6..3cbb2577 100644
--- a/services/core/java/com/android/server/wm/AppWindowContainerController.java
+++ b/services/core/java/com/android/server/wm/AppWindowContainerController.java
@@ -42,6 +42,7 @@
import android.app.ActivityManager.TaskSnapshot;
import android.app.ActivityOptions;
import android.content.Intent;
+import android.content.ComponentName;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
import android.graphics.GraphicBuffer;
@@ -200,20 +201,21 @@
};
public AppWindowContainerController(TaskWindowContainerController taskController,
- IApplicationToken token, AppWindowContainerListener listener, int index,
- int requestedOrientation, boolean fullscreen, boolean showForAllUsers, int configChanges,
+ IApplicationToken token, ComponentName activityComponent,
+ AppWindowContainerListener listener, int index, int requestedOrientation,
+ boolean fullscreen, boolean showForAllUsers, int configChanges,
boolean voiceInteraction, boolean launchTaskBehind, boolean alwaysFocusable,
int targetSdkVersion, int rotationAnimationHint, long inputDispatchingTimeoutNanos) {
- this(taskController, token, listener, index, requestedOrientation, fullscreen,
- showForAllUsers,
- configChanges, voiceInteraction, launchTaskBehind, alwaysFocusable,
- targetSdkVersion, rotationAnimationHint, inputDispatchingTimeoutNanos,
- WindowManagerService.getInstance());
+ this(taskController, token, activityComponent, listener, index, requestedOrientation,
+ fullscreen, showForAllUsers, configChanges, voiceInteraction, launchTaskBehind,
+ alwaysFocusable, targetSdkVersion, rotationAnimationHint,
+ inputDispatchingTimeoutNanos, WindowManagerService.getInstance());
}
public AppWindowContainerController(TaskWindowContainerController taskController,
- IApplicationToken token, AppWindowContainerListener listener, int index,
- int requestedOrientation, boolean fullscreen, boolean showForAllUsers, int configChanges,
+ IApplicationToken token, ComponentName activityComponent,
+ AppWindowContainerListener listener, int index, int requestedOrientation,
+ boolean fullscreen, boolean showForAllUsers, int configChanges,
boolean voiceInteraction, boolean launchTaskBehind, boolean alwaysFocusable,
int targetSdkVersion, int rotationAnimationHint, long inputDispatchingTimeoutNanos,
WindowManagerService service) {
@@ -234,10 +236,10 @@
+ " controller=" + taskController);
}
- atoken = createAppWindow(mService, token, voiceInteraction, task.getDisplayContent(),
- inputDispatchingTimeoutNanos, fullscreen, showForAllUsers, targetSdkVersion,
- requestedOrientation, rotationAnimationHint, configChanges, launchTaskBehind,
- alwaysFocusable, this);
+ atoken = createAppWindow(mService, token, activityComponent, voiceInteraction,
+ task.getDisplayContent(), inputDispatchingTimeoutNanos, fullscreen,
+ showForAllUsers, targetSdkVersion, requestedOrientation, rotationAnimationHint,
+ configChanges, launchTaskBehind, alwaysFocusable, this);
if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "addAppToken: " + atoken
+ " controller=" + taskController + " at " + index);
task.addChild(atoken, index);
@@ -246,11 +248,12 @@
@VisibleForTesting
AppWindowToken createAppWindow(WindowManagerService service, IApplicationToken token,
- boolean voiceInteraction, DisplayContent dc, long inputDispatchingTimeoutNanos,
- boolean fullscreen, boolean showForAllUsers, int targetSdk, int orientation,
- int rotationAnimationHint, int configChanges, boolean launchTaskBehind,
- boolean alwaysFocusable, AppWindowContainerController controller) {
- return new AppWindowToken(service, token, voiceInteraction, dc,
+ ComponentName component, boolean voiceInteraction, DisplayContent dc,
+ long inputDispatchingTimeoutNanos, boolean fullscreen, boolean showForAllUsers,
+ int targetSdk, int orientation, int rotationAnimationHint, int configChanges,
+ boolean launchTaskBehind, boolean alwaysFocusable,
+ AppWindowContainerController controller) {
+ return new AppWindowToken(service, token, component, voiceInteraction, dc,
inputDispatchingTimeoutNanos, fullscreen, showForAllUsers, targetSdk, orientation,
rotationAnimationHint, configChanges, launchTaskBehind, alwaysFocusable,
controller);
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 9baafcb..d30cd19 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -81,6 +81,7 @@
import android.annotation.CallSuper;
import android.app.Activity;
+import android.content.ComponentName;
import android.content.res.Configuration;
import android.graphics.GraphicBuffer;
import android.graphics.Point;
@@ -130,7 +131,7 @@
// Non-null only for application tokens.
final IApplicationToken appToken;
-
+ final ComponentName mActivityComponent;
final boolean mVoiceInteraction;
/** @see WindowContainer#fillsParent() */
@@ -272,12 +273,13 @@
/** Whether this token needs to create mAnimationBoundsLayer for cropping animations. */
boolean mNeedsAnimationBoundsLayer;
- AppWindowToken(WindowManagerService service, IApplicationToken token, boolean voiceInteraction,
- DisplayContent dc, long inputDispatchingTimeoutNanos, boolean fullscreen,
- boolean showForAllUsers, int targetSdk, int orientation, int rotationAnimationHint,
- int configChanges, boolean launchTaskBehind, boolean alwaysFocusable,
+ AppWindowToken(WindowManagerService service, IApplicationToken token,
+ ComponentName activityComponent, boolean voiceInteraction, DisplayContent dc,
+ long inputDispatchingTimeoutNanos, boolean fullscreen, boolean showForAllUsers,
+ int targetSdk, int orientation, int rotationAnimationHint, int configChanges,
+ boolean launchTaskBehind, boolean alwaysFocusable,
AppWindowContainerController controller) {
- this(service, token, voiceInteraction, dc, fullscreen);
+ this(service, token, activityComponent, voiceInteraction, dc, fullscreen);
setController(controller);
mInputDispatchingTimeoutNanos = inputDispatchingTimeoutNanos;
mShowForAllUsers = showForAllUsers;
@@ -293,11 +295,13 @@
hiddenRequested = true;
}
- AppWindowToken(WindowManagerService service, IApplicationToken token, boolean voiceInteraction,
- DisplayContent dc, boolean fillsParent) {
+ AppWindowToken(WindowManagerService service, IApplicationToken token,
+ ComponentName activityComponent, boolean voiceInteraction, DisplayContent dc,
+ boolean fillsParent) {
super(service, token != null ? token.asBinder() : null, TYPE_APPLICATION, true, dc,
false /* ownerCanManageAppTokens */);
appToken = token;
+ mActivityComponent = activityComponent;
mVoiceInteraction = voiceInteraction;
mFillsParent = fillsParent;
mInputApplicationHandle = new InputApplicationHandle(this);
@@ -2155,6 +2159,7 @@
if (appToken != null) {
pw.println(prefix + "app=true mVoiceInteraction=" + mVoiceInteraction);
}
+ pw.println(prefix + "component=" + mActivityComponent.flattenToShortString());
pw.print(prefix); pw.print("task="); pw.println(getTask());
pw.print(prefix); pw.print(" mFillsParent="); pw.print(mFillsParent);
pw.print(" mOrientation="); pw.println(mOrientation);
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index b01d67d..767a6ef 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -2011,9 +2011,7 @@
mDisplay.getDisplayInfo(mDisplayInfo);
mDisplay.getMetrics(mDisplayMetrics);
- for (int i = mTaskStackContainers.getChildCount() - 1; i >= 0; --i) {
- mTaskStackContainers.getChildAt(i).updateDisplayInfo(null);
- }
+ onDisplayChanged(this);
}
void initializeDisplayBaseInfo() {
diff --git a/services/core/java/com/android/server/wm/LaunchParamsController.java b/services/core/java/com/android/server/wm/LaunchParamsController.java
index 252f47c..0947577 100644
--- a/services/core/java/com/android/server/wm/LaunchParamsController.java
+++ b/services/core/java/com/android/server/wm/LaunchParamsController.java
@@ -40,6 +40,7 @@
*/
class LaunchParamsController {
private final ActivityTaskManagerService mService;
+ private final LaunchParamsPersister mPersister;
private final List<LaunchParamsModifier> mModifiers = new ArrayList<>();
// Temporary {@link LaunchParams} for internal calculations. This is kept separate from
@@ -49,8 +50,9 @@
private final LaunchParams mTmpCurrent = new LaunchParams();
private final LaunchParams mTmpResult = new LaunchParams();
- LaunchParamsController(ActivityTaskManagerService service) {
- mService = service;
+ LaunchParamsController(ActivityTaskManagerService service, LaunchParamsPersister persister) {
+ mService = service;
+ mPersister = persister;
}
/**
@@ -75,6 +77,10 @@
ActivityRecord source, ActivityOptions options, LaunchParams result) {
result.reset();
+ if (task != null || activity != null) {
+ mPersister.getLaunchParams(task, activity, result);
+ }
+
// We start at the last registered {@link LaunchParamsModifier} as this represents
// The modifier closest to the product level. Moving back through the list moves closer to
// the platform logic.
@@ -139,12 +145,20 @@
task.getStack().setWindowingMode(mTmpParams.mWindowingMode);
}
- if (!mTmpParams.mBounds.isEmpty()) {
- task.updateOverrideConfiguration(mTmpParams.mBounds);
- return true;
- } else {
+ if (mTmpParams.mBounds.isEmpty()) {
return false;
}
+
+ if (task.getStack().inFreeformWindowingMode()) {
+ // Only set bounds if it's in freeform mode.
+ task.updateOverrideConfiguration(mTmpParams.mBounds);
+ return true;
+ }
+
+ // Setting last non-fullscreen bounds to the bounds so next time the task enters
+ // freeform windowing mode it can be in this bounds.
+ task.setLastNonFullscreenBounds(mTmpParams.mBounds);
+ return false;
} finally {
mService.mWindowManager.continueSurfaceLayout();
}
diff --git a/services/core/java/com/android/server/wm/LaunchParamsPersister.java b/services/core/java/com/android/server/wm/LaunchParamsPersister.java
new file mode 100644
index 0000000..72d5143
--- /dev/null
+++ b/services/core/java/com/android/server/wm/LaunchParamsPersister.java
@@ -0,0 +1,458 @@
+/*
+ * 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 android.content.ComponentName;
+import android.content.pm.PackageList;
+import android.content.pm.PackageManagerInternal;
+import android.graphics.Rect;
+import android.os.Environment;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.AtomicFile;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.util.Xml;
+import android.view.DisplayInfo;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.FastXmlSerializer;
+import com.android.server.LocalServices;
+import com.android.server.wm.LaunchParamsController.LaunchParams;
+
+import libcore.io.IoUtils;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.function.IntFunction;
+
+/**
+ * Persister that saves launch parameters in memory and in storage. It saves the last seen state of
+ * tasks key-ed on task's user ID and the activity used to launch the task ({@link
+ * TaskRecord#realActivity}) and that's used to determine the launch params when the activity is
+ * being launched again in {@link LaunchParamsController}.
+ *
+ * Need to hold {@link ActivityTaskManagerService#getGlobalLock()} to access this class.
+ */
+class LaunchParamsPersister {
+ private static final String TAG = "LaunchParamsPersister";
+ private static final String LAUNCH_PARAMS_DIRNAME = "launch_params";
+ private static final String LAUNCH_PARAMS_FILE_SUFFIX = ".xml";
+
+ // Chars below are used to escape the backslash in component name to underscore.
+ private static final char ORIGINAL_COMPONENT_SEPARATOR = '/';
+ private static final char ESCAPED_COMPONENT_SEPARATOR = '_';
+
+ private static final String TAG_LAUNCH_PARAMS = "launch_params";
+
+ private final PersisterQueue mPersisterQueue;
+ private final ActivityStackSupervisor mSupervisor;
+
+ /**
+ * A function that takes in user ID and returns a folder to store information of that user. Used
+ * to differentiate storage location in test environment and production environment.
+ */
+ private final IntFunction<File> mUserFolderGetter;
+
+ private PackageList mPackageList;
+
+ /**
+ * A dual layer map that first maps user ID to a secondary map, which maps component name (the
+ * launching activity of tasks) to {@link PersistableLaunchParams} that stores launch metadata
+ * that are stable across reboots.
+ */
+ private final SparseArray<ArrayMap<ComponentName, PersistableLaunchParams>> mMap =
+ new SparseArray<>();
+
+ LaunchParamsPersister(PersisterQueue persisterQueue, ActivityStackSupervisor supervisor) {
+ this(persisterQueue, supervisor, Environment::getDataSystemCeDirectory);
+ }
+
+ @VisibleForTesting
+ LaunchParamsPersister(PersisterQueue persisterQueue, ActivityStackSupervisor supervisor,
+ IntFunction<File> userFolderGetter) {
+ mPersisterQueue = persisterQueue;
+ mSupervisor = supervisor;
+ mUserFolderGetter = userFolderGetter;
+ }
+
+ void onSystemReady() {
+ PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class);
+ mPackageList = pmi.getPackageList(new PackageListObserver());
+ }
+
+ void onUnlockUser(int userId) {
+ loadLaunchParams(userId);
+ }
+
+ void onCleanupUser(int userId) {
+ mMap.remove(userId);
+ }
+
+ private void loadLaunchParams(int userId) {
+ final List<File> filesToDelete = new ArrayList<>();
+ final File launchParamsFolder = getLaunchParamFolder(userId);
+ if (!launchParamsFolder.isDirectory()) {
+ Slog.i(TAG, "Didn't find launch param folder for user " + userId);
+ return;
+ }
+
+ final Set<String> packages = new ArraySet<>(mPackageList.getPackageNames());
+
+ final File[] paramsFiles = launchParamsFolder.listFiles();
+ final ArrayMap<ComponentName, PersistableLaunchParams> map =
+ new ArrayMap<>(paramsFiles.length);
+ mMap.put(userId, map);
+
+ for (File paramsFile : paramsFiles) {
+ if (!paramsFile.isFile()) {
+ Slog.w(TAG, paramsFile.getAbsolutePath() + " is not a file.");
+ continue;
+ }
+ if (!paramsFile.getName().endsWith(LAUNCH_PARAMS_FILE_SUFFIX)) {
+ Slog.w(TAG, "Unexpected params file name: " + paramsFile.getName());
+ filesToDelete.add(paramsFile);
+ continue;
+ }
+ final String paramsFileName = paramsFile.getName();
+ final String componentNameString = paramsFileName.substring(
+ 0 /* beginIndex */,
+ paramsFileName.length() - LAUNCH_PARAMS_FILE_SUFFIX.length())
+ .replace(ESCAPED_COMPONENT_SEPARATOR, ORIGINAL_COMPONENT_SEPARATOR);
+ final ComponentName name = ComponentName.unflattenFromString(
+ componentNameString);
+ if (name == null) {
+ Slog.w(TAG, "Unexpected file name: " + paramsFileName);
+ filesToDelete.add(paramsFile);
+ continue;
+ }
+
+ if (!packages.contains(name.getPackageName())) {
+ // Rare case. PersisterQueue doesn't have a chance to remove files for removed
+ // packages last time.
+ filesToDelete.add(paramsFile);
+ continue;
+ }
+
+ BufferedReader reader = null;
+ try {
+ reader = new BufferedReader(new FileReader(paramsFile));
+ final PersistableLaunchParams params = new PersistableLaunchParams();
+ final XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(reader);
+ int event;
+ while ((event = parser.next()) != XmlPullParser.END_DOCUMENT
+ && event != XmlPullParser.END_TAG) {
+ if (event != XmlPullParser.START_TAG) {
+ continue;
+ }
+
+ final String tagName = parser.getName();
+ if (!TAG_LAUNCH_PARAMS.equals(tagName)) {
+ Slog.w(TAG, "Unexpected tag name: " + tagName);
+ continue;
+ }
+
+ params.restoreFromXml(parser);
+ }
+
+ map.put(name, params);
+ } catch (Exception e) {
+ Slog.w(TAG, "Failed to restore launch params for " + name, e);
+ filesToDelete.add(paramsFile);
+ } finally {
+ IoUtils.closeQuietly(reader);
+ }
+ }
+
+ if (!filesToDelete.isEmpty()) {
+ mPersisterQueue.addItem(new CleanUpComponentQueueItem(filesToDelete), true);
+ }
+ }
+
+ void saveTask(TaskRecord task) {
+ final ComponentName name = task.realActivity;
+ final int userId = task.userId;
+ PersistableLaunchParams params;
+ ArrayMap<ComponentName, PersistableLaunchParams> map = mMap.get(userId);
+ if (map == null) {
+ map = new ArrayMap<>();
+ mMap.put(userId, map);
+ }
+
+ params = map.get(name);
+ if (params == null) {
+ params = new PersistableLaunchParams();
+ map.put(name, params);
+ }
+ final boolean changed = saveTaskToLaunchParam(task, params);
+
+ if (changed) {
+ mPersisterQueue.updateLastOrAddItem(
+ new LaunchParamsWriteQueueItem(userId, name, params),
+ /* flush */ false);
+ }
+ }
+
+ private boolean saveTaskToLaunchParam(TaskRecord task, PersistableLaunchParams params) {
+ final ActivityStack<?> stack = task.getStack();
+ final int displayId = stack.mDisplayId;
+ final ActivityDisplay display = mSupervisor.getActivityDisplay(displayId);
+ final DisplayInfo info = new DisplayInfo();
+ display.mDisplay.getDisplayInfo(info);
+
+ boolean changed = !Objects.equals(params.mDisplayUniqueId, info.uniqueId);
+ params.mDisplayUniqueId = info.uniqueId;
+
+ changed |= params.mWindowingMode != stack.getWindowingMode();
+ params.mWindowingMode = stack.getWindowingMode();
+
+ if (task.mLastNonFullscreenBounds != null) {
+ changed |= !Objects.equals(params.mBounds, task.mLastNonFullscreenBounds);
+ params.mBounds.set(task.mLastNonFullscreenBounds);
+ } else {
+ changed |= !params.mBounds.isEmpty();
+ params.mBounds.setEmpty();
+ }
+
+ return changed;
+ }
+
+ void getLaunchParams(TaskRecord task, ActivityRecord activity, LaunchParams outParams) {
+ final ComponentName name = task != null ? task.realActivity : activity.realActivity;
+ final int userId = task != null ? task.userId : activity.userId;
+
+ outParams.reset();
+ Map<ComponentName, PersistableLaunchParams> map = mMap.get(userId);
+ if (map == null) {
+ return;
+ }
+ final PersistableLaunchParams persistableParams = map.get(name);
+
+ if (persistableParams == null) {
+ return;
+ }
+
+ final ActivityDisplay display = mSupervisor.getActivityDisplay(
+ persistableParams.mDisplayUniqueId);
+ if (display != null) {
+ outParams.mPreferredDisplayId = display.mDisplayId;
+ }
+ outParams.mWindowingMode = persistableParams.mWindowingMode;
+ outParams.mBounds.set(persistableParams.mBounds);
+ }
+
+ private void onPackageRemoved(String packageName) {
+ final List<File> fileToDelete = new ArrayList<>();
+ for (int i = 0; i < mMap.size(); ++i) {
+ int userId = mMap.keyAt(i);
+ final File launchParamsFolder = getLaunchParamFolder(userId);
+ ArrayMap<ComponentName, PersistableLaunchParams> map = mMap.valueAt(i);
+ for (int j = map.size() - 1; j >= 0; --j) {
+ final ComponentName name = map.keyAt(j);
+ if (name.getPackageName().equals(packageName)) {
+ map.removeAt(j);
+ fileToDelete.add(getParamFile(launchParamsFolder, name));
+ }
+ }
+ }
+
+ synchronized (mPersisterQueue) {
+ mPersisterQueue.removeItems(
+ item -> item.mComponentName.getPackageName().equals(packageName),
+ LaunchParamsWriteQueueItem.class);
+
+ mPersisterQueue.addItem(new CleanUpComponentQueueItem(fileToDelete), true);
+ }
+ }
+
+ private File getParamFile(File launchParamFolder, ComponentName name) {
+ final String componentNameString = name.flattenToShortString()
+ .replace(ORIGINAL_COMPONENT_SEPARATOR, ESCAPED_COMPONENT_SEPARATOR);
+ return new File(launchParamFolder, componentNameString + LAUNCH_PARAMS_FILE_SUFFIX);
+ }
+
+ private File getLaunchParamFolder(int userId) {
+ final File userFolder = mUserFolderGetter.apply(userId);
+ return new File(userFolder, LAUNCH_PARAMS_DIRNAME);
+ }
+
+ private class PackageListObserver implements PackageManagerInternal.PackageListObserver {
+ @Override
+ public void onPackageAdded(String packageName) { }
+
+ @Override
+ public void onPackageRemoved(String packageName) {
+ LaunchParamsPersister.this.onPackageRemoved(packageName);
+ }
+ }
+
+ private class LaunchParamsWriteQueueItem
+ implements PersisterQueue.WriteQueueItem<LaunchParamsWriteQueueItem> {
+ private final int mUserId;
+ private final ComponentName mComponentName;
+
+ private PersistableLaunchParams mLaunchParams;
+
+ private LaunchParamsWriteQueueItem(int userId, ComponentName componentName,
+ PersistableLaunchParams launchParams) {
+ mUserId = userId;
+ mComponentName = componentName;
+ mLaunchParams = launchParams;
+ }
+
+ private StringWriter saveParamsToXml() {
+ final StringWriter writer = new StringWriter();
+ final XmlSerializer serializer = new FastXmlSerializer();
+
+ try {
+ serializer.setOutput(writer);
+ serializer.startDocument(/* encoding */ null, /* standalone */ true);
+ serializer.startTag(null, TAG_LAUNCH_PARAMS);
+
+ mLaunchParams.saveToXml(serializer);
+
+ serializer.endTag(null, TAG_LAUNCH_PARAMS);
+ serializer.endDocument();
+ serializer.flush();
+
+ return writer;
+ } catch (IOException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public void process() {
+ final StringWriter writer = saveParamsToXml();
+
+ final File launchParamFolder = getLaunchParamFolder(mUserId);
+ if (!launchParamFolder.isDirectory() && !launchParamFolder.mkdirs()) {
+ Slog.w(TAG, "Failed to create folder for " + mUserId);
+ return;
+ }
+
+ final File launchParamFile = getParamFile(launchParamFolder, mComponentName);
+ final AtomicFile atomicFile = new AtomicFile(launchParamFile);
+
+ FileOutputStream stream = null;
+ try {
+ stream = atomicFile.startWrite();
+ stream.write(writer.toString().getBytes());
+ } catch (Exception e) {
+ Slog.e(TAG, "Failed to write param file for " + mComponentName, e);
+ if (stream != null) {
+ atomicFile.failWrite(stream);
+ }
+ return;
+ }
+ atomicFile.finishWrite(stream);
+ }
+
+ @Override
+ public boolean matches(LaunchParamsWriteQueueItem item) {
+ return mUserId == item.mUserId && mComponentName.equals(item.mComponentName);
+ }
+
+ @Override
+ public void updateFrom(LaunchParamsWriteQueueItem item) {
+ mLaunchParams = item.mLaunchParams;
+ }
+ }
+
+ private class CleanUpComponentQueueItem implements PersisterQueue.WriteQueueItem {
+ private final List<File> mComponentFiles;
+
+ private CleanUpComponentQueueItem(List<File> componentFiles) {
+ mComponentFiles = componentFiles;
+ }
+
+ @Override
+ public void process() {
+ for (File file : mComponentFiles) {
+ if (!file.delete()) {
+ Slog.w(TAG, "Failed to delete " + file.getAbsolutePath());
+ }
+ }
+ }
+ }
+
+ private class PersistableLaunchParams {
+ private static final String ATTR_WINDOWING_MODE = "windowing_mode";
+ private static final String ATTR_DISPLAY_UNIQUE_ID = "display_unique_id";
+ private static final String ATTR_BOUNDS = "bounds";
+
+ /** The bounds within the parent container. */
+ final Rect mBounds = new Rect();
+
+ /** The unique id of the display the {@link TaskRecord} would prefer to be on. */
+ String mDisplayUniqueId;
+
+ /** The windowing mode to be in. */
+ int mWindowingMode;
+
+ void saveToXml(XmlSerializer serializer) throws IOException {
+ serializer.attribute(null, ATTR_DISPLAY_UNIQUE_ID, mDisplayUniqueId);
+ serializer.attribute(null, ATTR_WINDOWING_MODE,
+ Integer.toString(mWindowingMode));
+ serializer.attribute(null, ATTR_BOUNDS, mBounds.flattenToString());
+ }
+
+ void restoreFromXml(XmlPullParser parser) {
+ for (int i = 0; i < parser.getAttributeCount(); ++i) {
+ final String attrValue = parser.getAttributeValue(i);
+ switch (parser.getAttributeName(i)) {
+ case ATTR_DISPLAY_UNIQUE_ID:
+ mDisplayUniqueId = attrValue;
+ break;
+ case ATTR_WINDOWING_MODE:
+ mWindowingMode = Integer.parseInt(attrValue);
+ break;
+ case ATTR_BOUNDS: {
+ final Rect bounds = Rect.unflattenFromString(attrValue);
+ if (bounds != null) {
+ mBounds.set(bounds);
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder("PersistableLaunchParams{");
+ builder.append("windowingMode=" + mWindowingMode);
+ builder.append(" displayUniqueId=" + mDisplayUniqueId);
+ builder.append(" bounds=" + mBounds);
+ builder.append(" }");
+ return builder.toString();
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/wm/PersisterQueue.java b/services/core/java/com/android/server/wm/PersisterQueue.java
index 1cfc7ac..a17ee65 100644
--- a/services/core/java/com/android/server/wm/PersisterQueue.java
+++ b/services/core/java/com/android/server/wm/PersisterQueue.java
@@ -130,6 +130,30 @@
return null;
}
+ /**
+ *
+ * @param item
+ * @param flush
+ * @param <T>
+ */
+ synchronized <T extends WriteQueueItem> void updateLastOrAddItem(T item, boolean flush) {
+ final T itemToUpdate = findLastItem(item::matches, (Class<T>) item.getClass());
+ if (itemToUpdate == null) {
+ addItem(item, flush);
+ } else {
+ itemToUpdate.updateFrom(item);
+ }
+
+ yieldIfQueueTooDeep();
+ }
+
+ /**
+ * Removes all items with which given predicate returns {@code true}.
+ *
+ * @param predicate the predicate
+ * @param clazz
+ * @param <T>
+ */
synchronized <T extends WriteQueueItem> void removeItems(Predicate<T> predicate,
Class<T> clazz) {
for (int i = mWriteQueue.size() - 1; i >= 0; --i) {
@@ -230,8 +254,14 @@
item.process();
}
- interface WriteQueueItem {
+ interface WriteQueueItem<T extends WriteQueueItem<T>> {
void process();
+
+ default void updateFrom(T item) {}
+
+ default boolean matches(T item) {
+ return false;
+ }
}
interface Listener {
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java
index c995d3f..15478b4 100644
--- a/services/core/java/com/android/server/wm/RecentTasks.java
+++ b/services/core/java/com/android/server/wm/RecentTasks.java
@@ -19,6 +19,7 @@
import static android.app.ActivityManager.FLAG_AND_UNLOCKED;
import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE;
import static android.app.ActivityManager.RECENT_WITH_EXCLUDED;
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
@@ -33,6 +34,7 @@
import static android.os.Process.SYSTEM_UID;
import static android.view.Display.DEFAULT_DISPLAY;
+import static com.android.server.wm.ActivityStackSupervisor.REMOVE_FROM_RECENTS;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_RECENTS;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_RECENTS_TRIM_TASKS;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_TASKS;
@@ -40,8 +42,6 @@
import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_TASKS;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.ActivityStackSupervisor.REMOVE_FROM_RECENTS;
-import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
@@ -196,7 +196,8 @@
final Resources res = service.mContext.getResources();
mService = service;
mSupervisor = mService.mStackSupervisor;
- mTaskPersister = new TaskPersister(systemDir, stackSupervisor, service, this);
+ mTaskPersister = new TaskPersister(systemDir, stackSupervisor, service, this,
+ stackSupervisor.mPersisterQueue);
mGlobalMaxNumTasks = ActivityTaskManager.getMaxRecentTasksStatic();
mHasVisibleRecentTasks = res.getBoolean(com.android.internal.R.bool.config_hasRecents);
loadParametersFromResources(res);
@@ -432,7 +433,6 @@
void onSystemReadyLocked() {
loadRecentsComponent(mService.mContext.getResources());
mTasks.clear();
- mTaskPersister.onSystemReady();
}
Bitmap getTaskDescriptionIcon(String path) {
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 30eca89..c9800f8 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -237,7 +237,7 @@
super.onParentSet();
// Update task bounds if needed.
- updateDisplayInfo(getDisplayContent());
+ adjustBoundsForDisplayChangeIfNeeded(getDisplayContent());
if (getWindowConfiguration().windowsAreScaleable()) {
// We force windows out of SCALING_MODE_FREEZE so that we can continue to animate them
@@ -303,6 +303,7 @@
@Override
void onDisplayChanged(DisplayContent dc) {
updateSurfaceSize(dc);
+ adjustBoundsForDisplayChangeIfNeeded(dc);
super.onDisplayChanged(dc);
}
@@ -501,7 +502,7 @@
return mDragResizeMode;
}
- void updateDisplayInfo(final DisplayContent displayContent) {
+ private void adjustBoundsForDisplayChangeIfNeeded(final DisplayContent displayContent) {
if (displayContent == null) {
return;
}
diff --git a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
index b7804e8..117984a 100644
--- a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
+++ b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
@@ -48,6 +48,7 @@
import android.os.Build;
import android.util.Slog;
import android.view.Gravity;
+import android.view.View;
import com.android.server.wm.LaunchParamsController.LaunchParams;
import com.android.server.wm.LaunchParamsController.LaunchParamsModifier;
@@ -198,13 +199,13 @@
|| displayId == currentParams.mPreferredDisplayId)) {
if (currentParams.hasWindowingMode()) {
launchMode = currentParams.mWindowingMode;
- fullyResolvedCurrentParam = (launchMode != WINDOWING_MODE_FREEFORM);
+ fullyResolvedCurrentParam = launchMode != WINDOWING_MODE_FREEFORM;
if (DEBUG) {
appendLog("inherit-" + WindowConfiguration.windowingModeToString(launchMode));
}
}
- if (!currentParams.mBounds.isEmpty()) {
+ if (launchMode == WINDOWING_MODE_FREEFORM && !currentParams.mBounds.isEmpty()) {
outParams.mBounds.set(currentParams.mBounds);
fullyResolvedCurrentParam = true;
if (DEBUG) appendLog("inherit-bounds=" + outParams.mBounds);
@@ -250,11 +251,20 @@
// for all other windowing modes that's not freeform mode. One can read comments in
// relevant methods to further understand this step.
//
- // We skip making adjustments if the params are fully resolved from previous results and
- // trust that they are valid.
- if (!fullyResolvedCurrentParam) {
- final int resolvedMode = (launchMode != WINDOWING_MODE_UNDEFINED) ? launchMode
- : display.getWindowingMode();
+ // We skip making adjustments if the params are fully resolved from previous results.
+ final int resolvedMode = (launchMode != WINDOWING_MODE_UNDEFINED) ? launchMode
+ : display.getWindowingMode();
+ if (fullyResolvedCurrentParam) {
+ if (resolvedMode == WINDOWING_MODE_FREEFORM) {
+ // Make sure bounds are in the display if it's possibly in a different display.
+ if (currentParams.mPreferredDisplayId != displayId) {
+ adjustBoundsToFitInDisplay(display, outParams.mBounds);
+ }
+ // Even though we want to keep original bounds, we still don't want it to stomp on
+ // an existing task.
+ adjustBoundsToAvoidConflict(display, outParams.mBounds);
+ }
+ } else {
if (source != null && source.inFreeformWindowingMode()
&& resolvedMode == WINDOWING_MODE_FREEFORM
&& outParams.mBounds.isEmpty()
@@ -291,13 +301,12 @@
}
if (displayId != INVALID_DISPLAY && mSupervisor.getActivityDisplay(displayId) == null) {
- displayId = INVALID_DISPLAY;
+ displayId = currentParams.mPreferredDisplayId;
}
displayId = (displayId == INVALID_DISPLAY) ? currentParams.mPreferredDisplayId : displayId;
- displayId = (displayId == INVALID_DISPLAY) ? DEFAULT_DISPLAY : displayId;
-
- return displayId;
+ return (displayId != INVALID_DISPLAY && mSupervisor.getActivityDisplay(displayId) != null)
+ ? displayId : DEFAULT_DISPLAY;
}
private boolean canApplyFreeformWindowPolicy(@NonNull ActivityDisplay display, int launchMode) {
@@ -596,7 +605,12 @@
if (displayBounds.width() < inOutBounds.width()
|| displayBounds.height() < inOutBounds.height()) {
// There is no way for us to fit the bounds in the display without changing width
- // or height. Don't even try it.
+ // or height. Just move the start to align with the display.
+ final int layoutDirection = mSupervisor.getConfiguration().getLayoutDirection();
+ final int left = layoutDirection == View.LAYOUT_DIRECTION_RTL
+ ? displayBounds.width() - inOutBounds.width()
+ : 0;
+ inOutBounds.offsetTo(left, 0 /* newTop */);
return;
}
diff --git a/services/core/java/com/android/server/wm/TaskPersister.java b/services/core/java/com/android/server/wm/TaskPersister.java
index 9705d42..8120dec 100644
--- a/services/core/java/com/android/server/wm/TaskPersister.java
+++ b/services/core/java/com/android/server/wm/TaskPersister.java
@@ -83,7 +83,8 @@
private final ArraySet<Integer> mTmpTaskIds = new ArraySet<>();
TaskPersister(File systemDir, ActivityStackSupervisor stackSupervisor,
- ActivityTaskManagerService service, RecentTasks recentTasks) {
+ ActivityTaskManagerService service, RecentTasks recentTasks,
+ PersisterQueue persisterQueue) {
final File legacyImagesDir = new File(systemDir, IMAGES_DIRNAME);
if (legacyImagesDir.exists()) {
@@ -103,7 +104,7 @@
mStackSupervisor = stackSupervisor;
mService = service;
mRecentTasks = recentTasks;
- mPersisterQueue = new PersisterQueue();
+ mPersisterQueue = persisterQueue;
mPersisterQueue.addListener(this);
}
@@ -117,10 +118,6 @@
mPersisterQueue.addListener(this);
}
- void onSystemReady() {
- mPersisterQueue.startPersisting();
- }
-
private void removeThumbnails(TaskRecord task) {
mPersisterQueue.removeItems(
item -> {
@@ -219,21 +216,12 @@
}
void saveImage(Bitmap image, String filePath) {
- synchronized (mPersisterQueue) {
- final ImageWriteQueueItem item = mPersisterQueue.findLastItem(
- queueItem -> queueItem.mFilePath.equals(filePath), ImageWriteQueueItem.class);
- if (item != null) {
- // replace the Bitmap with the new one.
- item.mImage = image;
- } else {
- mPersisterQueue.addItem(new ImageWriteQueueItem(filePath, image),
- /* flush */ false);
- }
- if (DEBUG) Slog.d(TAG, "saveImage: filePath=" + filePath + " now=" +
- SystemClock.uptimeMillis() + " Callers=" + Debug.getCallers(4));
+ mPersisterQueue.updateLastOrAddItem(new ImageWriteQueueItem(filePath, image),
+ /* flush */ false);
+ if (DEBUG) {
+ Slog.d(TAG, "saveImage: filePath=" + filePath + " now="
+ + SystemClock.uptimeMillis() + " Callers=" + Debug.getCallers(4));
}
-
- mPersisterQueue.yieldIfQueueTooDeep();
}
Bitmap getTaskDescriptionIcon(String filePath) {
@@ -603,7 +591,8 @@
}
}
- private static class ImageWriteQueueItem implements PersisterQueue.WriteQueueItem {
+ private static class ImageWriteQueueItem implements
+ PersisterQueue.WriteQueueItem<ImageWriteQueueItem> {
final String mFilePath;
Bitmap mImage;
@@ -633,6 +622,16 @@
}
@Override
+ public boolean matches(ImageWriteQueueItem item) {
+ return mFilePath.equals(item.mFilePath);
+ }
+
+ @Override
+ public void updateFrom(ImageWriteQueueItem item) {
+ mImage = item.mImage;
+ }
+
+ @Override
public String toString() {
return "ImageWriteQueueItem{path=" + mFilePath
+ ", image=(" + mImage.getWidth() + "x" + mImage.getHeight() + ")}";
diff --git a/services/core/java/com/android/server/wm/TaskRecord.java b/services/core/java/com/android/server/wm/TaskRecord.java
index d4acb18..bd6689f 100644
--- a/services/core/java/com/android/server/wm/TaskRecord.java
+++ b/services/core/java/com/android/server/wm/TaskRecord.java
@@ -46,22 +46,7 @@
import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
import static android.provider.Settings.Secure.USER_SETUP_COMPLETE;
import static android.view.Display.DEFAULT_DISPLAY;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_ADD_REMOVE;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_LOCKTASK;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_RECENTS;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_TASKS;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_ADD_REMOVE;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_LOCKTASK;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_RECENTS;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_TASKS;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.ActivityRecord.STARTING_WINDOW_SHOWN;
-import static com.android.server.wm.ActivityStack.REMOVE_TASK_MODE_MOVING;
-import static com.android.server.wm.ActivityStack.REMOVE_TASK_MODE_MOVING_TO_TOP;
-import static com.android.server.wm.ActivityStackSupervisor.ON_TOP;
-import static com.android.server.wm.ActivityStackSupervisor.PAUSE_IMMEDIATELY;
-import static com.android.server.wm.ActivityStackSupervisor.PRESERVE_WINDOWS;
+
import static com.android.server.am.TaskRecordProto.ACTIVITIES;
import static com.android.server.am.TaskRecordProto.ACTIVITY_TYPE;
import static com.android.server.am.TaskRecordProto.BOUNDS;
@@ -75,6 +60,23 @@
import static com.android.server.am.TaskRecordProto.REAL_ACTIVITY;
import static com.android.server.am.TaskRecordProto.RESIZE_MODE;
import static com.android.server.am.TaskRecordProto.STACK_ID;
+import static com.android.server.wm.ActivityRecord.STARTING_WINDOW_SHOWN;
+import static com.android.server.wm.ActivityStack.REMOVE_TASK_MODE_MOVING;
+import static com.android.server.wm.ActivityStack.REMOVE_TASK_MODE_MOVING_TO_TOP;
+import static com.android.server.wm.ActivityStackSupervisor.ON_TOP;
+import static com.android.server.wm.ActivityStackSupervisor.PAUSE_IMMEDIATELY;
+import static com.android.server.wm.ActivityStackSupervisor.PRESERVE_WINDOWS;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_ADD_REMOVE;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_LOCKTASK;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_RECENTS;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_TASKS;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_ADD_REMOVE;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_LOCKTASK;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_RECENTS;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_TASKS;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
+
import static java.lang.Integer.MAX_VALUE;
import android.annotation.IntDef;
@@ -87,6 +89,7 @@
import android.app.ActivityTaskManager;
import android.app.AppGlobals;
import android.app.TaskInfo;
+import android.app.WindowConfiguration;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
@@ -550,6 +553,8 @@
}
mWindowContainerController.resize(kept, forced);
+ saveLaunchingStateIfNeeded();
+
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
return kept;
} finally {
@@ -1820,6 +1825,29 @@
mService.mStackSupervisor.scheduleUpdateMultiWindowMode(this);
}
// TODO: Should also take care of Pip mode changes here.
+
+ saveLaunchingStateIfNeeded();
+ }
+
+ /**
+ * Saves launching state if necessary so that we can launch the activity to its latest state.
+ * It only saves state if this task has been shown to user and it's in fullscreen or freeform
+ * mode.
+ */
+ void saveLaunchingStateIfNeeded() {
+ if (!hasBeenVisible) {
+ // Not ever visible to user.
+ return;
+ }
+
+ final int windowingMode = getWindowingMode();
+ if (windowingMode != WindowConfiguration.WINDOWING_MODE_FULLSCREEN
+ && windowingMode != WindowConfiguration.WINDOWING_MODE_FREEFORM) {
+ return;
+ }
+
+ // Saves the new state so that we can launch the activity at the same location.
+ mService.mStackSupervisor.mLaunchParamsPersister.saveTask(this);
}
/** Clears passed config and fills it with new override values. */
@@ -1965,7 +1993,7 @@
? reuseActivitiesReport.base.intent.getComponent()
: null;
info.topActivity = reuseActivitiesReport.top != null
- ? reuseActivitiesReport.top.intent.getComponent()
+ ? reuseActivitiesReport.top.realActivity
: null;
info.origActivity = origActivity;
info.realActivity = realActivity;
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java
index b84d20d..7ab4d08 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotController.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java
@@ -290,9 +290,10 @@
return null;
}
final boolean isWindowTranslucent = mainWindow.getAttrs().format != PixelFormat.OPAQUE;
- return new TaskSnapshot(buffer, appWindowToken.getConfiguration().orientation,
- getInsets(mainWindow), isLowRamDevice /* reduced */, scaleFraction /* scale */,
- true /* isRealSnapshot */, task.getWindowingMode(), getSystemUiVisibility(task),
+ return new TaskSnapshot(appWindowToken.mActivityComponent, buffer,
+ appWindowToken.getConfiguration().orientation, getInsets(mainWindow),
+ isLowRamDevice /* reduced */, scaleFraction /* scale */, true /* isRealSnapshot */,
+ task.getWindowingMode(), getSystemUiVisibility(task),
!appWindowToken.fillsParent() || isWindowTranslucent);
}
@@ -382,7 +383,7 @@
}
// Note, the app theme snapshot is never translucent because we enforce a non-translucent
// color above
- return new TaskSnapshot(hwBitmap.createGraphicBufferHandle(),
+ return new TaskSnapshot(topChild.mActivityComponent, hwBitmap.createGraphicBufferHandle(),
topChild.getConfiguration().orientation, mainWindow.getStableInsets(),
ActivityManager.isLowRamDeviceStatic() /* reduced */, 1.0f /* scale */,
false /* isRealSnapshot */, task.getWindowingMode(), getSystemUiVisibility(task),
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotLoader.java b/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
index 1410c21..0e1570b 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
@@ -21,6 +21,7 @@
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.app.ActivityManager.TaskSnapshot;
+import android.content.ComponentName;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
@@ -87,7 +88,9 @@
+ bitmapFile.getPath());
return null;
}
- return new TaskSnapshot(buffer, proto.orientation,
+ ComponentName topActivityComponent = ComponentName.unflattenFromString(
+ proto.topActivityComponent);
+ return new TaskSnapshot(topActivityComponent, buffer, proto.orientation,
new Rect(proto.insetLeft, proto.insetTop, proto.insetRight, proto.insetBottom),
reducedResolution, reducedResolution ? REDUCED_SCALE : 1f,
proto.isRealSnapshot, proto.windowingMode, proto.systemUiVisibility,
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
index 6fd1795..24b5b61 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
@@ -16,7 +16,7 @@
package com.android.server.wm;
-import static android.graphics.Bitmap.CompressFormat.*;
+import static android.graphics.Bitmap.CompressFormat.JPEG;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
@@ -321,6 +321,7 @@
proto.windowingMode = mSnapshot.getWindowingMode();
proto.systemUiVisibility = mSnapshot.getSystemUiVisibility();
proto.isTranslucent = mSnapshot.isTranslucent();
+ proto.topActivityComponent = mSnapshot.getTopActivityComponent().flattenToString();
final byte[] bytes = TaskSnapshotProto.toByteArray(proto);
final File file = getProtoFile(mTaskId, mUserId);
final AtomicFile atomicFile = new AtomicFile(file);
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 5a9e259..3493111 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -418,32 +418,6 @@
getBounds(out);
}
- void updateDisplayInfo(Rect bounds) {
- if (mDisplayContent == null) {
- return;
- }
-
- for (int taskNdx = mChildren.size() - 1; taskNdx >= 0; --taskNdx) {
- mChildren.get(taskNdx).updateDisplayInfo(mDisplayContent);
- }
- if (bounds != null) {
- setBounds(bounds);
- return;
- } else if (matchParentBounds()) {
- setBounds(null);
- return;
- }
-
- mTmpRect2.set(getRawBounds());
- final int newRotation = mDisplayContent.getDisplayInfo().rotation;
- final int newDensity = mDisplayContent.getDisplayInfo().logicalDensityDpi;
- if (mRotation == newRotation && mDensity == newDensity) {
- setBounds(mTmpRect2);
- }
-
- // If the rotation or density didn't match, we'll update it in onConfigurationChanged.
- }
-
/**
* Updates the passed-in {@code inOutBounds} based on how it would change when this container's
* override configuration is applied to the specified {@code parentConfig} and
@@ -820,16 +794,24 @@
@Override
void onDisplayChanged(DisplayContent dc) {
- if (mDisplayContent != null) {
+ if (mDisplayContent != null && mDisplayContent != dc) {
throw new IllegalStateException("onDisplayChanged: Already attached");
}
+ final boolean movedToNewDisplay = mDisplayContent == null;
mDisplayContent = dc;
- updateBoundsForWindowModeChange();
- mAnimationBackgroundSurface = makeChildSurface(null).setColorLayer(true)
- .setName("animation background stackId=" + mStackId)
- .build();
+ if (movedToNewDisplay) {
+ updateBoundsForWindowModeChange();
+ } else {
+ updateBoundsForDisplayChanges();
+ }
+
+ if (mAnimationBackgroundSurface != null) {
+ mAnimationBackgroundSurface = makeChildSurface(null).setColorLayer(true)
+ .setName("animation background stackId=" + mStackId)
+ .build();
+ }
super.onDisplayChanged(dc);
}
@@ -845,10 +827,41 @@
}, true);
}
- updateDisplayInfo(bounds);
+ setBoundsForWindowModeChange(bounds);
updateSurfaceBounds();
}
+ private void setBoundsForWindowModeChange(Rect bounds) {
+ if (mDisplayContent == null) {
+ return;
+ }
+
+ if (bounds != null) {
+ setBounds(bounds);
+ return;
+ }
+
+ updateBoundsForDisplayChanges();
+ }
+
+ private void updateBoundsForDisplayChanges() {
+ // Avoid setting override bounds to bounds inherited from parent if there was no override
+ // bounds set.
+ if (matchParentBounds()) {
+ setBounds(null);
+ return;
+ }
+
+ mTmpRect2.set(getRawBounds());
+ final int newRotation = mDisplayContent.getDisplayInfo().rotation;
+ final int newDensity = mDisplayContent.getDisplayInfo().logicalDensityDpi;
+ if (mRotation == newRotation && mDensity == newDensity) {
+ setBounds(mTmpRect2);
+ }
+
+ // If the rotation or density didn't match, we'll update it in onConfigurationChanged.
+ }
+
private Rect calculateBoundsForWindowModeChange() {
final boolean inSplitScreenPrimary = inSplitScreenPrimaryWindowingMode();
final TaskStack splitScreenStack =
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index abc3826..266006d 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -42,8 +42,10 @@
import android.view.SurfaceControl;
import android.view.SurfaceControl.Builder;
import android.view.SurfaceSession;
+
import com.android.internal.util.ToBooleanFunction;
import com.android.server.wm.SurfaceAnimator.Animatable;
+
import java.io.PrintWriter;
import java.util.Comparator;
import java.util.LinkedList;
@@ -501,8 +503,10 @@
}
/**
- * Notify that the display this container is on has changed.
- * @param dc The new display this container is on.
+ * Notify that the display this container is on has changed. This could be either this container
+ * is moved to a new display, or some configurations on the display it is on changes.
+ *
+ * @param dc The display this container is on after changes.
*/
void onDisplayChanged(DisplayContent dc) {
for (int i = mChildren.size() - 1; i >= 0; --i) {
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java
index 0f9b825..946ffb60 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java
@@ -24,6 +24,7 @@
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import android.app.ActivityManager.TaskSnapshot;
+import android.content.ComponentName;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.GraphicBuffer;
@@ -126,9 +127,9 @@
Canvas c = buffer.lockCanvas();
c.drawColor(Color.RED);
buffer.unlockCanvasAndPost(c);
- return new TaskSnapshot(buffer, ORIENTATION_PORTRAIT, TEST_INSETS,
- mScale < 1f /* reducedResolution */, mScale, mIsRealSnapshot, mWindowingMode,
- mSystemUiVisibility, mIsTranslucent);
+ return new TaskSnapshot(new ComponentName("", ""), buffer, ORIENTATION_PORTRAIT,
+ TEST_INSETS, mScale < 1f /* reducedResolution */, mScale, mIsRealSnapshot,
+ mWindowingMode, mSystemUiVisibility, mIsTranslucent);
}
}
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotSurfaceTest.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotSurfaceTest.java
index 7c16191..a569b9e 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotSurfaceTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotSurfaceTest.java
@@ -30,6 +30,7 @@
import static org.mockito.Mockito.when;
import android.app.ActivityManager.TaskSnapshot;
+import android.content.ComponentName;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.GraphicBuffer;
@@ -60,7 +61,7 @@
int windowFlags, Rect taskBounds) {
final GraphicBuffer buffer = GraphicBuffer.create(width, height, PixelFormat.RGBA_8888,
GraphicBuffer.USAGE_SW_READ_RARELY | GraphicBuffer.USAGE_SW_WRITE_NEVER);
- final TaskSnapshot snapshot = new TaskSnapshot(buffer,
+ final TaskSnapshot snapshot = new TaskSnapshot(new ComponentName("", ""), buffer,
ORIENTATION_PORTRAIT, contentInsets, false, 1.0f, true /* isRealSnapshot */,
WINDOWING_MODE_FULLSCREEN, 0 /* systemUiVisibility */, false /* isTranslucent */);
mSurface = new TaskSnapshotSurface(mWm, new Window(), new Surface(), snapshot, "Test",
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
index b318b91..80bb936 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
@@ -32,6 +32,7 @@
import static org.mockito.Mockito.when;
import android.app.ActivityManager;
+import android.content.ComponentName;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Rect;
@@ -144,17 +145,19 @@
private TestAppWindowToken(DisplayContent dc) {
super(dc.mService, new IApplicationToken.Stub() {
public String getName() {return null;}
- }, false, dc, true /* fillsParent */);
+ }, new ComponentName("", ""), false, dc, true /* fillsParent */);
}
TestAppWindowToken(WindowManagerService service, IApplicationToken token,
- boolean voiceInteraction, DisplayContent dc, long inputDispatchingTimeoutNanos,
- boolean fullscreen, boolean showForAllUsers, int targetSdk, int orientation,
- int rotationAnimationHint, int configChanges, boolean launchTaskBehind,
- boolean alwaysFocusable, AppWindowContainerController controller) {
- super(service, token, voiceInteraction, dc, inputDispatchingTimeoutNanos, fullscreen,
- showForAllUsers, targetSdk, orientation, rotationAnimationHint, configChanges,
- launchTaskBehind, alwaysFocusable, controller);
+ ComponentName activityComponent, boolean voiceInteraction, DisplayContent dc,
+ long inputDispatchingTimeoutNanos, boolean fullscreen, boolean showForAllUsers,
+ int targetSdk, int orientation, int rotationAnimationHint, int configChanges,
+ boolean launchTaskBehind, boolean alwaysFocusable,
+ AppWindowContainerController controller) {
+ super(service, token, activityComponent, voiceInteraction, dc,
+ inputDispatchingTimeoutNanos, fullscreen, showForAllUsers, targetSdk,
+ orientation, rotationAnimationHint, configChanges, launchTaskBehind,
+ alwaysFocusable, controller);
}
int getWindowsCount() {
@@ -318,22 +321,24 @@
TestAppWindowContainerController(TestTaskWindowContainerController taskController,
IApplicationToken token) {
- super(taskController, token, null /* listener */, 0 /* index */,
- SCREEN_ORIENTATION_UNSPECIFIED, true /* fullscreen */,
- true /* showForAllUsers */, 0 /* configChanges */, false /* voiceInteraction */,
- false /* launchTaskBehind */, false /* alwaysFocusable */,
- 0 /* targetSdkVersion */, 0 /* rotationAnimationHint */,
- 0 /* inputDispatchingTimeoutNanos */, taskController.mService);
+ super(taskController, token, new ComponentName("", "") /* activityComponent */,
+ null /* listener */, 0 /* index */, SCREEN_ORIENTATION_UNSPECIFIED,
+ true /* fullscreen */, true /* showForAllUsers */, 0 /* configChanges */,
+ false /* voiceInteraction */, false /* launchTaskBehind */,
+ false /* alwaysFocusable */, 0 /* targetSdkVersion */,
+ 0 /* rotationAnimationHint */, 0 /* inputDispatchingTimeoutNanos */,
+ taskController.mService);
mToken = token;
}
@Override
AppWindowToken createAppWindow(WindowManagerService service, IApplicationToken token,
- boolean voiceInteraction, DisplayContent dc, long inputDispatchingTimeoutNanos,
+ ComponentName activityComponent, boolean voiceInteraction, DisplayContent dc,
+ long inputDispatchingTimeoutNanos,
boolean fullscreen, boolean showForAllUsers, int targetSdk, int orientation,
int rotationAnimationHint, int configChanges, boolean launchTaskBehind,
boolean alwaysFocusable, AppWindowContainerController controller) {
- return new TestAppWindowToken(service, token, voiceInteraction, dc,
+ return new TestAppWindowToken(service, token, activityComponent, voiceInteraction, dc,
inputDispatchingTimeoutNanos, fullscreen, showForAllUsers, targetSdk,
orientation,
rotationAnimationHint, configChanges, launchTaskBehind, alwaysFocusable,
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
index c35e4d6..26286e2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
@@ -144,6 +144,10 @@
return TestActivityDisplay.create(mSupervisor, sNextDisplayId++);
}
+ TestActivityDisplay createNewActivityDisplay(DisplayInfo info) {
+ return TestActivityDisplay.create(mSupervisor, sNextDisplayId++, info);
+ }
+
/** Creates and adds a {@link TestActivityDisplay} to supervisor at the given position. */
TestActivityDisplay addNewActivityDisplayAt(int position) {
final TestActivityDisplay display = createNewActivityDisplay();
@@ -586,12 +590,17 @@
private final ActivityStackSupervisor mSupervisor;
static TestActivityDisplay create(ActivityStackSupervisor supervisor, int displayId) {
+ return create(supervisor, displayId, new DisplayInfo());
+ }
+
+ static TestActivityDisplay create(ActivityStackSupervisor supervisor, int displayId,
+ DisplayInfo info) {
if (displayId == DEFAULT_DISPLAY) {
return new TestActivityDisplay(supervisor,
supervisor.mDisplayManager.getDisplay(displayId));
}
final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId,
- new DisplayInfo(), DEFAULT_DISPLAY_ADJUSTMENTS);
+ info, DEFAULT_DISPLAY_ADJUSTMENTS);
return new TestActivityDisplay(supervisor, display);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java
index 40c20a4..f8d64e9 100644
--- a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java
@@ -17,6 +17,8 @@
package com.android.server.wm;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.INVALID_DISPLAY;
@@ -37,8 +39,12 @@
import static org.mockito.Mockito.verify;
import android.app.ActivityOptions;
+import android.content.ComponentName;
import android.content.pm.ActivityInfo.WindowLayout;
+import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
+import android.util.ArrayMap;
+import android.util.SparseArray;
import androidx.test.filters.MediumTest;
@@ -48,6 +54,8 @@
import org.junit.Before;
import org.junit.Test;
+import java.util.Map;
+
/**
* Tests for exercising {@link LaunchParamsController}.
*
@@ -58,11 +66,13 @@
@Presubmit
public class LaunchParamsControllerTests extends ActivityTestsBase {
private LaunchParamsController mController;
+ private TestLaunchParamsPersister mPersister;
@Before
public void setUp() throws Exception {
mService = createActivityTaskManagerService();
- mController = new LaunchParamsController(mService);
+ mPersister = new TestLaunchParamsPersister();
+ mController = new LaunchParamsController(mService, mPersister);
}
/**
@@ -86,6 +96,31 @@
}
/**
+ * Makes sure controller passes stored params to modifiers.
+ */
+ @Test
+ public void testStoredParamsRecovery() {
+ final LaunchParamsModifier positioner = mock(LaunchParamsModifier.class);
+ mController.registerModifier(positioner);
+
+ final ComponentName name = new ComponentName("com.android.foo", ".BarActivity");
+ final int userId = 0;
+ final ActivityRecord activity = new ActivityBuilder(mService).setComponent(name)
+ .setUid(userId).build();
+ final LaunchParams expected = new LaunchParams();
+ expected.mPreferredDisplayId = 3;
+ expected.mWindowingMode = WINDOWING_MODE_PINNED;
+ expected.mBounds.set(200, 300, 400, 500);
+
+ mPersister.putLaunchParams(userId, name, expected);
+
+ mController.calculate(activity.getTask(), null /*layout*/, activity, null /*source*/,
+ null /*options*/, new LaunchParams());
+ verify(positioner, times(1)).onCalculate(any(), any(), any(), any(), any(), eq(expected),
+ any());
+ }
+
+ /**
* Ensures positioners further down the chain are not called when RESULT_DONE is returned.
*/
@Test
@@ -254,6 +289,53 @@
assertEquals(windowingMode, afterWindowMode);
}
+ /**
+ * Ensures that {@link LaunchParamsModifier} requests specifying bounds during
+ * layout are honored if window is in freeform.
+ */
+ @Test
+ public void testLayoutTaskBoundsChangeFreeformWindow() {
+ final Rect expected = new Rect(10, 20, 30, 40);
+
+ final LaunchParams params = new LaunchParams();
+ params.mWindowingMode = WINDOWING_MODE_FREEFORM;
+ params.mBounds.set(expected);
+ final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params);
+ final TaskRecord task = new TaskBuilder(mService.mStackSupervisor).build();
+
+ mController.registerModifier(positioner);
+
+ assertNotEquals(expected, task.getBounds());
+
+ mController.layoutTask(task, null /* windowLayout */);
+
+ assertEquals(expected, task.getBounds());
+ }
+
+ /**
+ * Ensures that {@link LaunchParamsModifier} requests specifying bounds during
+ * layout are set to last non-fullscreen bounds.
+ */
+ @Test
+ public void testLayoutTaskBoundsChangeFixedWindow() {
+ final Rect expected = new Rect(10, 20, 30, 40);
+
+ final LaunchParams params = new LaunchParams();
+ params.mWindowingMode = WINDOWING_MODE_FULLSCREEN;
+ params.mBounds.set(expected);
+ final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params);
+ final TaskRecord task = new TaskBuilder(mService.mStackSupervisor).build();
+
+ mController.registerModifier(positioner);
+
+ assertNotEquals(expected, task.getBounds());
+
+ mController.layoutTask(task, null /* windowLayout */);
+
+ assertNotEquals(expected, task.getBounds());
+ assertEquals(expected, task.mLastNonFullscreenBounds);
+ }
+
public static class InstrumentedPositioner implements LaunchParamsModifier {
private final int mReturnVal;
@@ -276,4 +358,73 @@
return mParams;
}
}
+
+ /**
+ * Test double for {@link LaunchParamsPersister}. This class only manages an in-memory storage
+ * of a mapping from user ID and component name to launch params.
+ */
+ static class TestLaunchParamsPersister extends LaunchParamsPersister {
+
+ private final SparseArray<Map<ComponentName, LaunchParams>> mMap =
+ new SparseArray<>();
+ private final LaunchParams mTmpParams = new LaunchParams();
+
+ TestLaunchParamsPersister() {
+ super(null, null, null);
+ }
+
+ void putLaunchParams(int userId, ComponentName name, LaunchParams params) {
+ Map<ComponentName, LaunchParams> map = mMap.get(userId);
+ if (map == null) {
+ map = new ArrayMap<>();
+ mMap.put(userId, map);
+ }
+
+ LaunchParams paramRecord = map.get(name);
+ if (paramRecord == null) {
+ paramRecord = new LaunchParams();
+ map.put(name, params);
+ }
+
+ paramRecord.set(params);
+ }
+
+ @Override
+ void onUnlockUser(int userId) {
+ if (mMap.get(userId) == null) {
+ mMap.put(userId, new ArrayMap<>());
+ }
+ }
+
+ @Override
+ void saveTask(TaskRecord task) {
+ final int userId = task.userId;
+ final ComponentName realActivity = task.realActivity;
+ mTmpParams.mPreferredDisplayId = task.getStack().mDisplayId;
+ mTmpParams.mWindowingMode = task.getWindowingMode();
+ if (task.mLastNonFullscreenBounds != null) {
+ mTmpParams.mBounds.set(task.mLastNonFullscreenBounds);
+ } else {
+ mTmpParams.mBounds.setEmpty();
+ }
+ putLaunchParams(userId, realActivity, mTmpParams);
+ }
+
+ @Override
+ void getLaunchParams(TaskRecord task, ActivityRecord activity, LaunchParams params) {
+ final int userId = task != null ? task.userId : activity.userId;
+ final ComponentName name = task != null ? task.realActivity : activity.realActivity;
+
+ params.reset();
+ final Map<ComponentName, LaunchParams> map = mMap.get(userId);
+ if (map == null) {
+ return;
+ }
+
+ final LaunchParams paramsRecord = map.get(name);
+ if (paramsRecord != null) {
+ params.set(paramsRecord);
+ }
+ }
+ }
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java
new file mode 100644
index 0000000..59e9ce3
--- /dev/null
+++ b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java
@@ -0,0 +1,424 @@
+/*
+ * 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.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.view.Display.INVALID_DISPLAY;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.pm.PackageList;
+import android.content.pm.PackageManagerInternal;
+import android.graphics.Rect;
+import android.os.UserHandle;
+import android.platform.test.annotations.Presubmit;
+import android.view.DisplayInfo;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.FlakyTest;
+import androidx.test.filters.MediumTest;
+
+import com.android.server.LocalServices;
+import com.android.server.wm.LaunchParamsController.LaunchParams;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.IntFunction;
+import java.util.function.Predicate;
+
+/**
+ * Unit tests for {@link LaunchParamsPersister}.
+ *
+ * Build/Install/Run:
+ * atest WmTests:LaunchParamsPersisterTests
+ */
+@MediumTest
+@Presubmit
+@FlakyTest(detail = "Confirm stable in post-submit before removing")
+public class LaunchParamsPersisterTests extends ActivityTestsBase {
+ private static final int TEST_USER_ID = 3;
+ private static final int ALTERNATIVE_USER_ID = 0;
+ private static final ComponentName TEST_COMPONENT =
+ ComponentName.createRelative("com.android.foo", ".BarActivity");
+ private static final ComponentName ALTERNATIVE_COMPONENT =
+ ComponentName.createRelative("com.android.foo", ".AlternativeBarActivity");
+
+ private static final int TEST_WINDOWING_MODE = WINDOWING_MODE_FREEFORM;
+ private static final Rect TEST_BOUNDS = new Rect(100, 200, 300, 400);
+
+ private static int sNextUniqueId;
+
+ private TestPersisterQueue mPersisterQueue;
+ private File mFolder;
+ private ActivityDisplay mTestDisplay;
+ private String mDisplayUniqueId;
+ private TaskRecord mTestTask;
+ private TaskRecord mTaskWithDifferentUser;
+ private TaskRecord mTaskWithDifferentComponent;
+ private PackageManagerInternal mMockPmi;
+ private PackageManagerInternal.PackageListObserver mObserver;
+
+ private final IntFunction<File> mUserFolderGetter =
+ userId -> new File(mFolder, Integer.toString(userId));
+
+ private LaunchParamsPersister mTarget;
+
+ private LaunchParams mResult;
+
+ @Before
+ public void setUp() throws Exception {
+ mPersisterQueue = new TestPersisterQueue();
+
+ final File cacheFolder = InstrumentationRegistry.getContext().getCacheDir();
+ mFolder = new File(cacheFolder, "launch_params_tests");
+ deleteRecursively(mFolder);
+
+ setupActivityTaskManagerService();
+
+ mDisplayUniqueId = "test:" + Integer.toString(sNextUniqueId++);
+ final DisplayInfo info = new DisplayInfo();
+ info.uniqueId = mDisplayUniqueId;
+ mTestDisplay = createNewActivityDisplay(info);
+ mSupervisor.addChild(mTestDisplay, ActivityDisplay.POSITION_TOP);
+ when(mSupervisor.getActivityDisplay(eq(mDisplayUniqueId))).thenReturn(mTestDisplay);
+
+ ActivityStack stack = mTestDisplay.createStack(TEST_WINDOWING_MODE,
+ ACTIVITY_TYPE_STANDARD, /* onTop */ true);
+ mTestTask = new TaskBuilder(mSupervisor).setComponent(TEST_COMPONENT).setStack(stack)
+ .build();
+ mTestTask.userId = TEST_USER_ID;
+ mTestTask.mLastNonFullscreenBounds = TEST_BOUNDS;
+ mTestTask.hasBeenVisible = true;
+
+ mTaskWithDifferentComponent = new TaskBuilder(mSupervisor)
+ .setComponent(ALTERNATIVE_COMPONENT).build();
+ mTaskWithDifferentComponent.userId = TEST_USER_ID;
+
+ mTaskWithDifferentUser = new TaskBuilder(mSupervisor).setComponent(TEST_COMPONENT).build();
+ mTaskWithDifferentUser.userId = ALTERNATIVE_USER_ID;
+
+ mTarget = new LaunchParamsPersister(mPersisterQueue, mSupervisor, mUserFolderGetter);
+
+ LocalServices.removeServiceForTest(PackageManagerInternal.class);
+ mMockPmi = mock(PackageManagerInternal.class);
+ LocalServices.addService(PackageManagerInternal.class, mMockPmi);
+ when(mMockPmi.getPackageList(any())).thenReturn(new PackageList(
+ Collections.singletonList(TEST_COMPONENT.getPackageName()), /* observer */ null));
+ mTarget.onSystemReady();
+
+ final ArgumentCaptor<PackageManagerInternal.PackageListObserver> observerCaptor =
+ ArgumentCaptor.forClass(PackageManagerInternal.PackageListObserver.class);
+ verify(mMockPmi).getPackageList(observerCaptor.capture());
+ mObserver = observerCaptor.getValue();
+
+ mResult = new LaunchParams();
+ mResult.reset();
+ }
+
+ @Test
+ public void testReturnsEmptyLaunchParamsByDefault() {
+ mResult.mWindowingMode = WINDOWING_MODE_FULLSCREEN;
+
+ mTarget.getLaunchParams(mTestTask, null, mResult);
+
+ assertTrue("Default result should be empty.", mResult.isEmpty());
+ }
+
+ @Test
+ public void testSavesAndRestoresLaunchParamsInSameInstance() {
+ mTarget.saveTask(mTestTask);
+
+ mTarget.getLaunchParams(mTestTask, null, mResult);
+
+ assertEquals(mTestDisplay.mDisplayId, mResult.mPreferredDisplayId);
+ assertEquals(TEST_WINDOWING_MODE, mResult.mWindowingMode);
+ assertEquals(TEST_BOUNDS, mResult.mBounds);
+ }
+
+ @Test
+ public void testFetchesSameResultWithActivity() {
+ mTarget.saveTask(mTestTask);
+
+ final ActivityRecord activity = new ActivityBuilder(mService).setComponent(TEST_COMPONENT)
+ .setUid(TEST_USER_ID * UserHandle.PER_USER_RANGE).build();
+
+ mTarget.getLaunchParams(null, activity, mResult);
+
+ assertEquals(mTestDisplay.mDisplayId, mResult.mPreferredDisplayId);
+ assertEquals(TEST_WINDOWING_MODE, mResult.mWindowingMode);
+ assertEquals(TEST_BOUNDS, mResult.mBounds);
+ }
+
+ @Test
+ public void testReturnsEmptyDisplayIfDisplayIsNotFound() {
+ mTarget.saveTask(mTestTask);
+
+ when(mSupervisor.getActivityDisplay(eq(mDisplayUniqueId))).thenReturn(null);
+
+ mTarget.getLaunchParams(mTestTask, null, mResult);
+
+ assertEquals(INVALID_DISPLAY, mResult.mPreferredDisplayId);
+ assertEquals(TEST_WINDOWING_MODE, mResult.mWindowingMode);
+ assertEquals(TEST_BOUNDS, mResult.mBounds);
+ }
+
+ @Test
+ public void testReturnsEmptyLaunchParamsUserIdMismatch() {
+ mTarget.saveTask(mTestTask);
+
+ mResult.mWindowingMode = WINDOWING_MODE_FULLSCREEN;
+ mTarget.getLaunchParams(mTaskWithDifferentUser, null, mResult);
+
+ assertTrue("Result should be empty.", mResult.isEmpty());
+ }
+
+ @Test
+ public void testReturnsEmptyLaunchParamsComponentMismatch() {
+ mTarget.saveTask(mTestTask);
+
+ mResult.mWindowingMode = WINDOWING_MODE_FULLSCREEN;
+ mTarget.getLaunchParams(mTaskWithDifferentComponent, null, mResult);
+
+ assertTrue("Result should be empty.", mResult.isEmpty());
+ }
+
+ @Test
+ public void testSavesAndRestoresLaunchParamsAcrossInstances() {
+ mTarget.saveTask(mTestTask);
+ mPersisterQueue.flush();
+
+ final LaunchParamsPersister target = new LaunchParamsPersister(mPersisterQueue, mSupervisor,
+ mUserFolderGetter);
+ target.onSystemReady();
+ target.onUnlockUser(TEST_USER_ID);
+
+ target.getLaunchParams(mTestTask, null, mResult);
+
+ assertEquals(mTestDisplay.mDisplayId, mResult.mPreferredDisplayId);
+ assertEquals(TEST_WINDOWING_MODE, mResult.mWindowingMode);
+ assertEquals(TEST_BOUNDS, mResult.mBounds);
+ }
+
+ @Test
+ public void testClearsRecordsOfTheUserOnUserCleanUp() {
+ mTarget.saveTask(mTestTask);
+
+ ActivityStack stack = mTestDisplay.createStack(TEST_WINDOWING_MODE,
+ ACTIVITY_TYPE_STANDARD, /* onTop */ true);
+ final TaskRecord anotherTaskOfTheSameUser = new TaskBuilder(mSupervisor)
+ .setComponent(ALTERNATIVE_COMPONENT)
+ .setUserId(TEST_USER_ID)
+ .setStack(stack)
+ .build();
+ anotherTaskOfTheSameUser.setWindowingMode(WINDOWING_MODE_FREEFORM);
+ anotherTaskOfTheSameUser.setBounds(200, 300, 400, 500);
+ anotherTaskOfTheSameUser.hasBeenVisible = true;
+ mTarget.saveTask(anotherTaskOfTheSameUser);
+
+ stack = mTestDisplay.createStack(TEST_WINDOWING_MODE,
+ ACTIVITY_TYPE_STANDARD, /* onTop */ true);
+ final TaskRecord anotherTaskOfDifferentUser = new TaskBuilder(mSupervisor)
+ .setComponent(TEST_COMPONENT)
+ .setUserId(ALTERNATIVE_USER_ID)
+ .setStack(stack)
+ .build();
+ anotherTaskOfDifferentUser.setWindowingMode(WINDOWING_MODE_FREEFORM);
+ anotherTaskOfDifferentUser.setBounds(300, 400, 500, 600);
+ anotherTaskOfDifferentUser.hasBeenVisible = true;
+ mTarget.saveTask(anotherTaskOfDifferentUser);
+
+ mTarget.onCleanupUser(TEST_USER_ID);
+
+ mTarget.getLaunchParams(anotherTaskOfDifferentUser, null, mResult);
+ assertFalse("Shouldn't clear record of a different user.", mResult.isEmpty());
+
+ mTarget.getLaunchParams(mTestTask, null, mResult);
+ assertTrue("Should have cleaned record for " + TEST_COMPONENT, mResult.isEmpty());
+
+ mTarget.getLaunchParams(anotherTaskOfTheSameUser, null, mResult);
+ assertTrue("Should have cleaned record for " + ALTERNATIVE_COMPONENT, mResult.isEmpty());
+ }
+
+ @Test
+ public void testClearsRecordInMemoryOnPackageUninstalled() {
+ mTarget.saveTask(mTestTask);
+
+ mObserver.onPackageRemoved(TEST_COMPONENT.getPackageName());
+
+ mTarget.getLaunchParams(mTestTask, null, mResult);
+
+ assertTrue("Result should be empty.", mResult.isEmpty());
+ }
+
+ @Test
+ public void testClearsWriteQueueItemOnPackageUninstalled() {
+ mTarget.saveTask(mTestTask);
+
+ mObserver.onPackageRemoved(TEST_COMPONENT.getPackageName());
+
+ final LaunchParamsPersister target = new LaunchParamsPersister(mPersisterQueue, mSupervisor,
+ mUserFolderGetter);
+ target.onSystemReady();
+ target.onUnlockUser(TEST_USER_ID);
+
+ target.getLaunchParams(mTestTask, null, mResult);
+
+ assertTrue("Result should be empty.", mResult.isEmpty());
+ }
+
+ @Test
+ public void testClearsFileOnPackageUninstalled() {
+ mTarget.saveTask(mTestTask);
+ mPersisterQueue.flush();
+
+ mObserver.onPackageRemoved(TEST_COMPONENT.getPackageName());
+
+ final LaunchParamsPersister target = new LaunchParamsPersister(mPersisterQueue, mSupervisor,
+ mUserFolderGetter);
+ target.onSystemReady();
+ target.onUnlockUser(TEST_USER_ID);
+
+ target.getLaunchParams(mTestTask, null, mResult);
+
+ assertTrue("Result should be empty.", mResult.isEmpty());
+ }
+
+ @Test
+ public void testClearsRemovedPackageFilesOnStartUp() {
+ mTarget.saveTask(mTestTask);
+ mPersisterQueue.flush();
+
+ when(mMockPmi.getPackageList(any())).thenReturn(
+ new PackageList(Collections.emptyList(), /* observer */ null));
+
+ final LaunchParamsPersister target = new LaunchParamsPersister(mPersisterQueue, mSupervisor,
+ mUserFolderGetter);
+ target.onSystemReady();
+ target.onUnlockUser(TEST_USER_ID);
+
+ target.getLaunchParams(mTestTask, null, mResult);
+
+ assertTrue("Result should be empty.", mResult.isEmpty());
+ }
+
+ private static boolean deleteRecursively(File file) {
+ boolean result = true;
+ if (file.isDirectory()) {
+ for (File child : file.listFiles()) {
+ result &= deleteRecursively(child);
+ }
+ }
+
+ result &= file.delete();
+ return result;
+ }
+
+ /**
+ * Test double to {@link PersisterQueue}. This is not thread-safe and caller should always use
+ * {@link #flush()} to execute write items in it.
+ */
+ static class TestPersisterQueue extends PersisterQueue {
+ private List<WriteQueueItem> mWriteQueue = new ArrayList<>();
+ private List<Listener> mListeners = new ArrayList<>();
+
+ @Override
+ void flush() {
+ while (!mWriteQueue.isEmpty()) {
+ final WriteQueueItem item = mWriteQueue.remove(0);
+ final boolean queueEmpty = mWriteQueue.isEmpty();
+ for (Listener listener : mListeners) {
+ listener.onPreProcessItem(queueEmpty);
+ }
+ item.process();
+ }
+ }
+
+ @Override
+ void startPersisting() {
+ // Do nothing. We're not using threading logic.
+ }
+
+ @Override
+ void stopPersisting() {
+ // Do nothing. We're not using threading logic.
+ }
+
+ @Override
+ void addItem(WriteQueueItem item, boolean flush) {
+ mWriteQueue.add(item);
+ if (flush) {
+ flush();
+ }
+ }
+
+ @Override
+ synchronized <T extends WriteQueueItem> T findLastItem(Predicate<T> predicate,
+ Class<T> clazz) {
+ for (int i = mWriteQueue.size() - 1; i >= 0; --i) {
+ WriteQueueItem writeQueueItem = mWriteQueue.get(i);
+ if (clazz.isInstance(writeQueueItem)) {
+ T item = clazz.cast(writeQueueItem);
+ if (predicate.test(item)) {
+ return item;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ synchronized <T extends WriteQueueItem> void removeItems(Predicate<T> predicate,
+ Class<T> clazz) {
+ for (int i = mWriteQueue.size() - 1; i >= 0; --i) {
+ WriteQueueItem writeQueueItem = mWriteQueue.get(i);
+ if (clazz.isInstance(writeQueueItem)) {
+ T item = clazz.cast(writeQueueItem);
+ if (predicate.test(item)) {
+ mWriteQueue.remove(i);
+ }
+ }
+ }
+ }
+
+ @Override
+ void addListener(Listener listener) {
+ mListeners.add(listener);
+ }
+
+ @Override
+ void yieldIfQueueTooDeep() {
+ // Do nothing. We're not using threading logic.
+ }
+ }
+}
diff --git a/services/tests/wmtests/src/com/android/server/wm/PersisterQueueTests.java b/services/tests/wmtests/src/com/android/server/wm/PersisterQueueTests.java
index 20150b4..434ba93 100644
--- a/services/tests/wmtests/src/com/android/server/wm/PersisterQueueTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/PersisterQueueTests.java
@@ -185,7 +185,7 @@
mLatch.await(PRE_TASK_DELAY_MS + TIMEOUT_ALLOWANCE, TimeUnit.MILLISECONDS));
assertEquals("Target didn't process all items.", 2, mItemCount.get());
processDuration = SystemClock.uptimeMillis() - dispatchTime;
- assertTrue("Target didn't wait enough time before processing item."
+ assertTrue("Target didn't wait enough time before processing item. Process time: "
+ processDuration + "ms pre task delay: "
+ PRE_TASK_DELAY_MS + "ms",
processDuration >= PRE_TASK_DELAY_MS);
@@ -246,6 +246,39 @@
}
@Test
+ public void testUpdateLastOrAddItemUpdatesMatchedItem() throws Exception {
+ mLatch = new CountDownLatch(1);
+ final MatchingTestItem scheduledItem = new MatchingTestItem(true);
+ final MatchingTestItem expected = new MatchingTestItem(true);
+ synchronized (mTarget) {
+ mTarget.addItem(scheduledItem, false);
+ mTarget.updateLastOrAddItem(expected, false);
+ }
+
+ assertSame(expected, scheduledItem.mUpdateFromItem);
+ assertTrue("Target didn't call callback enough times.",
+ mLatch.await(PRE_TASK_DELAY_MS + TIMEOUT_ALLOWANCE, TimeUnit.MILLISECONDS));
+ assertEquals("Target didn't process item.", 1, mItemCount.get());
+ }
+
+ @Test
+ public void testUpdateLastOrAddItemUpdatesAddItemWhenNoMatch() throws Exception {
+ mLatch = new CountDownLatch(2);
+ final MatchingTestItem scheduledItem = new MatchingTestItem(false);
+ final MatchingTestItem expected = new MatchingTestItem(true);
+ synchronized (mTarget) {
+ mTarget.addItem(scheduledItem, false);
+ mTarget.updateLastOrAddItem(expected, false);
+ }
+
+ assertNull(scheduledItem.mUpdateFromItem);
+ assertTrue("Target didn't call callback enough times.",
+ mLatch.await(PRE_TASK_DELAY_MS + INTER_WRITE_DELAY_MS + TIMEOUT_ALLOWANCE,
+ TimeUnit.MILLISECONDS));
+ assertEquals("Target didn't process item.", 2, mItemCount.get());
+ }
+
+ @Test
public void testRemoveItemsRemoveMatchedItem() throws Exception {
mLatch = new CountDownLatch(1);
synchronized (mTarget) {
@@ -283,18 +316,30 @@
mSetUpLatch.countDown();
}
- private class TestItem implements PersisterQueue.WriteQueueItem {
+ private class TestItem<T extends TestItem<T>> implements PersisterQueue.WriteQueueItem<T> {
@Override
public void process() {
mItemCount.getAndIncrement();
}
}
- private class MatchingTestItem extends TestItem {
+ private class MatchingTestItem extends TestItem<MatchingTestItem> {
private boolean mMatching;
+ private MatchingTestItem mUpdateFromItem;
+
private MatchingTestItem(boolean matching) {
mMatching = matching;
}
+
+ @Override
+ public boolean matches(MatchingTestItem item) {
+ return item.mMatching;
+ }
+
+ @Override
+ public void updateFrom(MatchingTestItem item) {
+ mUpdateFromItem = item;
+ }
}
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
index 95965c8..2168fab 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
@@ -41,6 +41,7 @@
import android.graphics.Rect;
import android.os.Build;
import android.platform.test.annotations.Presubmit;
+import android.view.Display;
import android.view.Gravity;
import androidx.test.filters.FlakyTest;
@@ -110,6 +111,16 @@
}
@Test
+ public void testUsesDefaultDisplayIfPreviousDisplayNotExists() {
+ mCurrent.mPreferredDisplayId = 19;
+
+ assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
+ mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+
+ assertEquals(DEFAULT_DISPLAY, mResult.mPreferredDisplayId);
+ }
+
+ @Test
public void testUsesPreviousDisplayIdIfSet() {
createNewActivityDisplay(WINDOWING_MODE_FREEFORM);
final TestActivityDisplay display = createNewActivityDisplay(WINDOWING_MODE_FULLSCREEN);
@@ -856,30 +867,48 @@
}
@Test
- public void testAdjustBoundsToFitDisplay_LargerThanDisplay() {
+ public void testAdjustBoundsToFitNewDisplay_LargerThanDisplay() {
final TestActivityDisplay freeformDisplay = createNewActivityDisplay(
WINDOWING_MODE_FREEFORM);
- Configuration overrideConfig = new Configuration();
- overrideConfig.setTo(mSupervisor.getOverrideConfiguration());
- overrideConfig.setLayoutDirection(new Locale("ar"));
- mSupervisor.onConfigurationChanged(overrideConfig);
-
final ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchDisplayId(freeformDisplay.mDisplayId);
- final ActivityRecord source = createSourceActivity(freeformDisplay);
- source.setBounds(1720, 680, 1920, 1080);
+ mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
+ mCurrent.mBounds.set(100, 200, 2120, 1380);
mActivity.appInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
- mActivity, source, options, mCurrent, mResult));
+ mActivity, /* source */ null, options, mCurrent, mResult));
- final Rect displayBounds = freeformDisplay.getBounds();
- assertTrue("display bounds doesn't contain result. display bounds: "
- + displayBounds + " result: " + mResult.mBounds,
- displayBounds.contains(mResult.mBounds));
+ assertTrue("Result bounds should start from origin, but it's " + mResult.mBounds,
+ mResult.mBounds.left == 0 && mResult.mBounds.top == 0);
+ }
+
+ @Test
+ public void testAdjustBoundsToFitNewDisplay_LargerThanDisplay_RTL() {
+ final Configuration overrideConfig = mSupervisor.getOverrideConfiguration();
+ // Egyptian Arabic is a RTL language.
+ overrideConfig.setLayoutDirection(new Locale("ar", "EG"));
+ mSupervisor.onOverrideConfigurationChanged(overrideConfig);
+
+ final TestActivityDisplay freeformDisplay = createNewActivityDisplay(
+ WINDOWING_MODE_FREEFORM);
+
+ final ActivityOptions options = ActivityOptions.makeBasic();
+ options.setLaunchDisplayId(freeformDisplay.mDisplayId);
+
+ mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
+ mCurrent.mBounds.set(100, 200, 2120, 1380);
+
+ mActivity.appInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
+
+ assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
+ mActivity, /* source */ null, options, mCurrent, mResult));
+
+ assertTrue("Result bounds should start from origin, but it's " + mResult.mBounds,
+ mResult.mBounds.left == -100 && mResult.mBounds.top == 0);
}
@Test
@@ -1021,6 +1050,41 @@
assertEquals(new Rect(0, 0, 1680, 953), mResult.mBounds);
}
+ @Test
+ public void testAdjustsBoundsToFitInDisplayFullyResolvedBounds() {
+ final TestActivityDisplay freeformDisplay = createNewActivityDisplay(
+ WINDOWING_MODE_FREEFORM);
+
+ mCurrent.mPreferredDisplayId = Display.INVALID_DISPLAY;
+ mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
+ mCurrent.mBounds.set(-100, -200, 200, 100);
+
+ final ActivityOptions options = ActivityOptions.makeBasic();
+ options.setLaunchDisplayId(freeformDisplay.mDisplayId);
+
+ assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
+ mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+
+ assertEquals(new Rect(0, 0, 300, 300), mResult.mBounds);
+ }
+
+ @Test
+ public void testAdjustsBoundsToAvoidConflictFullyResolvedBounds() {
+ final TestActivityDisplay freeformDisplay = createNewActivityDisplay(
+ WINDOWING_MODE_FREEFORM);
+
+ addFreeformTaskTo(freeformDisplay, new Rect(0, 0, 200, 100));
+
+ mCurrent.mPreferredDisplayId = freeformDisplay.mDisplayId;
+ mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
+ mCurrent.mBounds.set(0, 0, 200, 100);
+
+ assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
+ mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+
+ assertEquals(new Rect(120, 0, 320, 100), mResult.mBounds);
+ }
+
private TestActivityDisplay createNewActivityDisplay(int windowingMode) {
final TestActivityDisplay display = addNewActivityDisplayAt(ActivityDisplay.POSITION_TOP);
display.setWindowingMode(windowingMode);
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
index ad2501d..d6b40ae 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
@@ -42,6 +42,7 @@
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Slog;
+
import com.android.internal.logging.MetricsLogger;
import java.io.FileDescriptor;
@@ -566,38 +567,34 @@
}
}
- SoundTrigger.RecognitionEvent getGenericModelState(UUID modelId) {
+ int getGenericModelState(UUID modelId) {
synchronized (mLock) {
MetricsLogger.count(mContext, "sth_get_generic_model_state", 1);
if (modelId == null || mModule == null) {
- return null;
+ return STATUS_ERROR;
}
ModelData modelData = mModelDataMap.get(modelId);
if (modelData == null || !modelData.isGenericModel()) {
Slog.w(TAG, "GetGenericModelState error: Invalid generic model id:" +
modelId);
- return null;
+ return STATUS_ERROR;
}
if (!modelData.isModelLoaded()) {
Slog.i(TAG, "GetGenericModelState: Given generic model is not loaded:" + modelId);
- return null;
+ return STATUS_ERROR;
}
if (!modelData.isModelStarted()) {
Slog.i(TAG, "GetGenericModelState: Given generic model is not started:" + modelId);
- return null;
+ return STATUS_ERROR;
}
- SoundTrigger.RecognitionEvent ret = mModule.getModelState(modelData.getHandle());
- if (ret == null) {
- Slog.w(TAG, "GetGenericModelState() call failed");
- }
- return ret;
+ return mModule.getModelState(modelData.getHandle());
}
}
- SoundTrigger.RecognitionEvent getKeyphraseModelState(UUID modelId) {
+ int getKeyphraseModelState(UUID modelId) {
Slog.w(TAG, "GetKeyphraseModelState error: Not implemented");
- return null;
+ return STATUS_ERROR;
}
//---- SoundTrigger.StatusListener methods
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
index d57fcb1..8c82cc8 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
@@ -436,9 +436,10 @@
}
@Override
- public SoundTrigger.RecognitionEvent getModelState(ParcelUuid soundModelId) {
+ public int getModelState(ParcelUuid soundModelId) {
enforceCallingPermission(Manifest.permission.MANAGE_SOUND_TRIGGER);
- if (!isInitialized()) return null;
+ int ret = STATUS_ERROR;
+ if (!isInitialized()) return ret;
if (DEBUG) {
Slog.i(TAG, "getModelState(): id = " + soundModelId);
}
@@ -447,9 +448,8 @@
SoundModel soundModel = mLoadedModels.get(soundModelId.getUuid());
if (soundModel == null) {
Slog.e(TAG, soundModelId + " is not loaded");
- return null;
+ return ret;
}
- SoundTrigger.RecognitionEvent ret = null;
switch (soundModel.type) {
case SoundModel.TYPE_KEYPHRASE:
ret = mSoundTriggerHelper.getKeyphraseModelState(soundModel.uuid);
@@ -461,9 +461,6 @@
Slog.e(TAG, "Unknown model type");
break;
}
- if (ret == null) {
- Slog.e(TAG, "Failed to get model state");
- }
return ret;
}
@@ -942,7 +939,11 @@
runOrAddOperation(new Operation(
// always execute:
() -> {
- if (!mRecognitionConfig.allowMultipleTriggers) {
+ // Don't remove the callback if multiple triggers are allowed or
+ // if this event was triggered by a getModelState request
+ if (!mRecognitionConfig.allowMultipleTriggers
+ && event.status
+ != SoundTrigger.RECOGNITION_STATUS_GET_STATE_RESPONSE) {
// Unregister this remoteService once op is done
synchronized (mCallbacksLock) {
mCallbacks.remove(mPuuid.getUuid());
diff --git a/startop/view_compiler/dex_builder.cc b/startop/view_compiler/dex_builder.cc
index 13e7f73..33df6f9 100644
--- a/startop/view_compiler/dex_builder.cc
+++ b/startop/view_compiler/dex_builder.cc
@@ -17,7 +17,6 @@
#include "dex_builder.h"
#include "dex/descriptors_names.h"
-#include "dex/dex_instruction.h"
#include <fstream>
#include <memory>
@@ -56,6 +55,12 @@
case Instruction::Op::kInvokeVirtual:
out << "kInvokeVirtual";
return out;
+ case Instruction::Op::kBindLabel:
+ out << "kBindLabel";
+ return out;
+ case Instruction::Op::kBranchEqz:
+ out << "kBranchEqz";
+ return out;
}
}
@@ -224,6 +229,11 @@
Value MethodBuilder::MakeRegister() { return Value::Local(num_registers_++); }
+Value MethodBuilder::MakeLabel() {
+ labels_.push_back({});
+ return Value::Label(labels_.size() - 1);
+}
+
void MethodBuilder::AddInstruction(Instruction instruction) {
instructions_.push_back(instruction);
}
@@ -254,6 +264,10 @@
return EncodeMove(instruction);
case Instruction::Op::kInvokeVirtual:
return EncodeInvokeVirtual(instruction);
+ case Instruction::Op::kBindLabel:
+ return BindLabel(instruction.args()[0]);
+ case Instruction::Op::kBranchEqz:
+ return EncodeBranch(art::Instruction::IF_EQZ, instruction);
}
}
@@ -307,7 +321,22 @@
}
}
-size_t MethodBuilder::RegisterValue(Value value) const {
+// Encodes a conditional branch that tests a single argument.
+void MethodBuilder::EncodeBranch(art::Instruction::Code op, const Instruction& instruction) {
+ const auto& args = instruction.args();
+ const auto& test_value = args[0];
+ const auto& branch_target = args[1];
+ CHECK_EQ(2, args.size());
+ CHECK(test_value.is_variable());
+ CHECK(branch_target.is_label());
+
+ size_t instruction_offset = buffer_.size();
+ buffer_.push_back(op | (RegisterValue(test_value) << 8));
+ size_t field_offset = buffer_.size();
+ buffer_.push_back(LabelValue(branch_target, instruction_offset, field_offset));
+}
+
+size_t MethodBuilder::RegisterValue(const Value& value) const {
if (value.is_register()) {
return value.value();
} else if (value.is_parameter()) {
@@ -317,6 +346,37 @@
return 0;
}
+void MethodBuilder::BindLabel(const Value& label_id) {
+ CHECK(label_id.is_label());
+
+ LabelData& label = labels_[label_id.value()];
+ CHECK(!label.bound_address.has_value());
+
+ label.bound_address = buffer_.size();
+
+ // patch any forward references to this label.
+ for (const auto& ref : label.references) {
+ buffer_[ref.field_offset] = *label.bound_address - ref.instruction_offset;
+ }
+ // No point keeping these around anymore.
+ label.references.clear();
+}
+
+::dex::u2 MethodBuilder::LabelValue(const Value& label_id, size_t instruction_offset,
+ size_t field_offset) {
+ CHECK(label_id.is_label());
+ LabelData& label = labels_[label_id.value()];
+
+ // Short-circuit if the label is already bound.
+ if (label.bound_address.has_value()) {
+ return *label.bound_address - instruction_offset;
+ }
+
+ // Otherwise, save a reference to where we need to back-patch later.
+ label.references.push_front(LabelReference{instruction_offset, field_offset});
+ return 0;
+}
+
const MethodDeclData& DexBuilder::GetOrDeclareMethod(TypeDescriptor type, const std::string& name,
Prototype prototype) {
MethodDeclData& entry = method_id_map_[{type, name, prototype}];
diff --git a/startop/view_compiler/dex_builder.h b/startop/view_compiler/dex_builder.h
index e46655e..0744151 100644
--- a/startop/view_compiler/dex_builder.h
+++ b/startop/view_compiler/dex_builder.h
@@ -16,12 +16,14 @@
#ifndef DEX_BUILDER_H_
#define DEX_BUILDER_H_
+#include <forward_list>
#include <map>
#include <optional>
#include <string>
#include <unordered_map>
#include <vector>
+#include "dex/dex_instruction.h"
#include "slicer/dex_ir.h"
#include "slicer/writer.h"
@@ -108,15 +110,18 @@
static constexpr Value Local(size_t id) { return Value{id, Kind::kLocalRegister}; }
static constexpr Value Parameter(size_t id) { return Value{id, Kind::kParameter}; }
static constexpr Value Immediate(size_t value) { return Value{value, Kind::kImmediate}; }
+ static constexpr Value Label(size_t id) { return Value{id, Kind::kLabel}; }
bool is_register() const { return kind_ == Kind::kLocalRegister; }
bool is_parameter() const { return kind_ == Kind::kParameter; }
+ bool is_variable() const { return is_register() || is_parameter(); }
bool is_immediate() const { return kind_ == Kind::kImmediate; }
+ bool is_label() const { return kind_ == Kind::kLabel; }
size_t value() const { return value_; }
private:
- enum class Kind { kLocalRegister, kParameter, kImmediate };
+ enum class Kind { kLocalRegister, kParameter, kImmediate, kLabel };
const size_t value_;
const Kind kind_;
@@ -132,7 +137,7 @@
public:
// The operation performed by this instruction. These are virtual instructions that do not
// correspond exactly to DEX instructions.
- enum class Op { kReturn, kMove, kInvokeVirtual };
+ enum class Op { kReturn, kMove, kInvokeVirtual, kBindLabel, kBranchEqz };
////////////////////////
// Named Constructors //
@@ -195,6 +200,8 @@
// it's up to the caller to reuse registers as appropriate.
Value MakeRegister();
+ Value MakeLabel();
+
/////////////////////////////////
// Instruction builder methods //
/////////////////////////////////
@@ -215,9 +222,18 @@
void EncodeReturn(const Instruction& instruction);
void EncodeMove(const Instruction& instruction);
void EncodeInvokeVirtual(const Instruction& instruction);
+ void EncodeBranch(art::Instruction::Code op, const Instruction& instruction);
// Converts a register or parameter to its DEX register number.
- size_t RegisterValue(Value value) const;
+ size_t RegisterValue(const Value& value) const;
+
+ // Sets a label's address to the current position in the instruction buffer. If there are any
+ // forward references to the label, this function will back-patch them.
+ void BindLabel(const Value& label);
+
+ // Returns the offset of the label relative to the given instruction offset. If the label is not
+ // bound, a reference will be saved and it will automatically be patched when the label is bound.
+ ::dex::u2 LabelValue(const Value& label, size_t instruction_offset, size_t field_offset);
DexBuilder* dex_;
ir::Class* class_;
@@ -231,6 +247,21 @@
// How many registers we've allocated
size_t num_registers_{0};
+
+ // Stores information needed to back-patch a label once it is bound. We need to know the start of
+ // the instruction that refers to the label, and the offset to where the actual label value should
+ // go.
+ struct LabelReference {
+ size_t instruction_offset;
+ size_t field_offset;
+ };
+
+ struct LabelData {
+ std::optional<size_t> bound_address;
+ std::forward_list<LabelReference> references;
+ };
+
+ std::vector<LabelData> labels_;
};
// A helper to build class definitions.
diff --git a/startop/view_compiler/dex_builder_test/src/android/startop/test/DexBuilderTest.java b/startop/view_compiler/dex_builder_test/src/android/startop/test/DexBuilderTest.java
index 87b2578..169c633 100644
--- a/startop/view_compiler/dex_builder_test/src/android/startop/test/DexBuilderTest.java
+++ b/startop/view_compiler/dex_builder_test/src/android/startop/test/DexBuilderTest.java
@@ -65,4 +65,21 @@
Method method = clazz.getMethod("returnStringLength", String.class);
Assert.assertEquals(13, method.invoke(null, "Hello, World!"));
}
+
+ @Test
+ public void returnIfZero() throws Exception {
+ ClassLoader loader = loadDexFile("simple.dex");
+ Class clazz = loader.loadClass("android.startop.test.testcases.SimpleTests");
+ Method method = clazz.getMethod("returnIfZero", int.class);
+ Assert.assertEquals(5, method.invoke(null, 0));
+ Assert.assertEquals(3, method.invoke(null, 17));
+ }
+
+ @Test
+ public void backwardsBranch() throws Exception {
+ ClassLoader loader = loadDexFile("simple.dex");
+ Class clazz = loader.loadClass("android.startop.test.testcases.SimpleTests");
+ Method method = clazz.getMethod("backwardsBranch");
+ Assert.assertEquals(2, method.invoke(null));
+ }
}
diff --git a/startop/view_compiler/dex_testcase_generator.cc b/startop/view_compiler/dex_testcase_generator.cc
index 898817b..c521bf2 100644
--- a/startop/view_compiler/dex_testcase_generator.cc
+++ b/startop/view_compiler/dex_testcase_generator.cc
@@ -46,9 +46,11 @@
// int return5() { return 5; }
auto return5{cbuilder.CreateMethod("return5", Prototype{TypeDescriptor::Int()})};
- Value r{return5.MakeRegister()};
- return5.BuildConst4(r, 5);
- return5.BuildReturn(r);
+ {
+ Value r{return5.MakeRegister()};
+ return5.BuildConst4(r, 5);
+ return5.BuildReturn(r);
+ }
return5.Encode();
// // int returnParam(int x) { return x; }
@@ -64,12 +66,78 @@
auto returnStringLength{
cbuilder.CreateMethod("returnStringLength", Prototype{TypeDescriptor::Int(), string_type})};
- Value result = returnStringLength.MakeRegister();
- returnStringLength.AddInstruction(
- Instruction::InvokeVirtual(string_length.id, result, Value::Parameter(0)));
- returnStringLength.BuildReturn(result);
+ {
+ Value result = returnStringLength.MakeRegister();
+ returnStringLength.AddInstruction(
+ Instruction::InvokeVirtual(string_length.id, result, Value::Parameter(0)));
+ returnStringLength.BuildReturn(result);
+ }
returnStringLength.Encode();
+ // int returnIfZero(int x) { if (x == 0) { return 5; } else { return 3; } }
+ MethodBuilder returnIfZero{cbuilder.CreateMethod(
+ "returnIfZero", Prototype{TypeDescriptor::Int(), TypeDescriptor::Int()})};
+ {
+ Value resultIfZero{returnIfZero.MakeRegister()};
+ Value else_target{returnIfZero.MakeLabel()};
+ returnIfZero.AddInstruction(Instruction::OpWithArgs(
+ Instruction::Op::kBranchEqz, /*dest=*/{}, Value::Parameter(0), else_target));
+ // else branch
+ returnIfZero.BuildConst4(resultIfZero, 3);
+ returnIfZero.AddInstruction(
+ Instruction::OpWithArgs(Instruction::Op::kReturn, /*dest=*/{}, resultIfZero));
+ // then branch
+ returnIfZero.AddInstruction(
+ Instruction::OpWithArgs(Instruction::Op::kBindLabel, /*dest=*/{}, else_target));
+ returnIfZero.BuildConst4(resultIfZero, 5);
+ returnIfZero.AddInstruction(
+ Instruction::OpWithArgs(Instruction::Op::kReturn, /*dest=*/{}, resultIfZero));
+ }
+ returnIfZero.Encode();
+
+ // Make sure backwards branches work too.
+ //
+ // Pseudo code for test:
+ // {
+ // zero = 0;
+ // result = 1;
+ // if (zero == 0) goto B;
+ // A:
+ // return result;
+ // B:
+ // result = 2;
+ // if (zero == 0) goto A;
+ // result = 3;
+ // return result;
+ // }
+ // If it runs correctly, this test should return 2.
+ MethodBuilder backwardsBranch{
+ cbuilder.CreateMethod("backwardsBranch", Prototype{TypeDescriptor::Int()})};
+ [](MethodBuilder& method) {
+ Value zero = method.MakeRegister();
+ Value result = method.MakeRegister();
+ Value labelA = method.MakeLabel();
+ Value labelB = method.MakeLabel();
+ method.BuildConst4(zero, 0);
+ method.BuildConst4(result, 1);
+ method.AddInstruction(
+ Instruction::OpWithArgs(Instruction::Op::kBranchEqz, /*dest=*/{}, zero, labelB));
+
+ method.AddInstruction(
+ Instruction::OpWithArgs(Instruction::Op::kBindLabel, /*dest=*/{}, labelA));
+ method.BuildReturn(result);
+
+ method.AddInstruction(
+ Instruction::OpWithArgs(Instruction::Op::kBindLabel, /*dest=*/{}, labelB));
+ method.BuildConst4(result, 2);
+ method.AddInstruction(
+ Instruction::OpWithArgs(Instruction::Op::kBranchEqz, /*dest=*/{}, zero, labelA));
+
+ method.BuildConst4(result, 3);
+ method.BuildReturn(result);
+ }(backwardsBranch);
+ backwardsBranch.Encode();
+
slicer::MemView image{dex_file.CreateImage()};
std::ofstream out_file(outdir + "/simple.dex");
out_file.write(image.ptr<const char>(), image.size());
diff --git a/telephony/java/android/provider/Telephony.java b/telephony/java/android/provider/Telephony.java
index 61d60e3..b3e1ffa 100644
--- a/telephony/java/android/provider/Telephony.java
+++ b/telephony/java/android/provider/Telephony.java
@@ -3613,6 +3613,27 @@
}
/**
+ * Generates a content {@link Uri} used to receive updates on precise carrier identity
+ * change on the given subscriptionId
+ * {@link TelephonyManager#ACTION_SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED}.
+ * <p>
+ * Use this {@link Uri} with a {@link ContentObserver} to be notified of changes to the
+ * precise carrier identity {@link TelephonyManager#getSimPreciseCarrierId()}
+ * while your app is running. You can also use a {@link JobService} to ensure your app
+ * is notified of changes to the {@link Uri} even when it is not running.
+ * Note, however, that using a {@link JobService} does not guarantee timely delivery of
+ * updates to the {@link Uri}.
+ *
+ * @param subscriptionId the subscriptionId to receive updates on
+ * @return the Uri used to observe precise carrier identity changes
+ * @hide
+ */
+ public static Uri getPreciseCarrierIdUriForSubscriptionId(int subscriptionId) {
+ return Uri.withAppendedPath(Uri.withAppendedPath(CONTENT_URI, "precise"),
+ String.valueOf(subscriptionId));
+ }
+
+ /**
* A user facing carrier name.
* @see TelephonyManager#getSimCarrierIdName()
* <P>Type: TEXT </P>
@@ -3627,6 +3648,35 @@
public static final String CARRIER_ID = "carrier_id";
/**
+ * A user facing carrier name for precise carrier id.
+ * @see TelephonyManager#getSimPreciseCarrierIdName()
+ * This is not a database column, only used to notify content observers for
+ * {@link #getPreciseCarrierIdUriForSubscriptionId(int)}
+ * @hide
+ */
+ public static final String PRECISE_CARRIER_ID_NAME = "precise_carrier_id_name";
+
+ /**
+ * A fine-grained carrier id.
+ * @see TelephonyManager#getSimPreciseCarrierId()
+ * This is not a database column, only used to notify content observers for
+ * {@link #getPreciseCarrierIdUriForSubscriptionId(int)}
+ * @hide
+ */
+ public static final String PRECISE_CARRIER_ID = "precise_carrier_id";
+
+ /**
+ * A unique parent carrier id. The parent-child
+ * relationship can be used to further differentiate a single carrier by different networks,
+ * by prepaid v.s. postpaid or even by 4G v.s. 3G plan. It's an optional field.
+ * A carrier id with a valid parent_carrier_id is considered fine-grained carrier id, will
+ * not be returned as {@link #CARRIER_ID} but {@link #PRECISE_CARRIER_ID}.
+ * <P>Type: INTEGER </P>
+ * @hide
+ */
+ public static final String PARENT_CARRIER_ID = "parent_carrier_id";
+
+ /**
* A unique mno carrier id. mno carrier shares the same {@link All#MCCMNC} as carrier id
* and can be solely identified by {@link All#MCCMNC} only. If there is no such mno
* carrier, then mno carrier id equals to {@link #CARRIER_ID carrier id}.
diff --git a/telephony/java/android/telephony/NetworkRegistrationState.java b/telephony/java/android/telephony/NetworkRegistrationState.java
index c3d8898..68e512e 100644
--- a/telephony/java/android/telephony/NetworkRegistrationState.java
+++ b/telephony/java/android/telephony/NetworkRegistrationState.java
@@ -237,10 +237,9 @@
}
/**
- * @return {@link ServiceState.RoamingType roaming type}. This could return
- * overridden roaming type based on resource overlay or carrier config.
- * @hide
+ * @return the current network roaming type.
*/
+
public @ServiceState.RoamingType int getRoamingType() {
return mRoamingType;
}
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index c407681..0937b10 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -211,29 +211,30 @@
ROAMING_TYPE_INTERNATIONAL
})
public @interface RoamingType {}
+
/**
- * Roaming type
- * HOME : in home network
+ * Not roaming, registered in home network.
* @hide
*/
+ @SystemApi
public static final int ROAMING_TYPE_NOT_ROAMING = 0;
/**
- * Roaming type
- * UNKNOWN : in a roaming network, but we can not tell if it's domestic or international
+ * registered in a roaming network, but can not tell if it's domestic or international.
* @hide
*/
+ @SystemApi
public static final int ROAMING_TYPE_UNKNOWN = 1;
/**
- * Roaming type
- * DOMESTIC : in domestic roaming network
+ * registered in a domestic roaming network
* @hide
*/
+ @SystemApi
public static final int ROAMING_TYPE_DOMESTIC = 2;
/**
- * Roaming type
- * INTERNATIONAL : in international roaming network
+ * registered in an international roaming network
* @hide
*/
+ @SystemApi
public static final int ROAMING_TYPE_INTERNATIONAL = 3;
/**
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 5d7e1fd..a188ef6 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -1212,6 +1212,33 @@
"android.telephony.action.SUBSCRIPTION_CARRIER_IDENTITY_CHANGED";
/**
+ * Broadcast Action: The subscription precise carrier identity has changed.
+ * Similar like {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED}, this intent will be sent
+ * on the event of {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED}. However, its possible
+ * that precise carrier identity changes while
+ * {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED} remains the same e.g, the same
+ * subscription switches to different IMSI could potentially change its precise carrier id.
+ *
+ * The intent will have the following extra values:
+ * <ul>
+ * <li>{@link #EXTRA_PRECISE_CARRIER_ID} The up-to-date precise carrier id of the
+ * current subscription.
+ * </li>
+ * <li>{@link #EXTRA_PRECISE_CARRIER_NAME} The up-to-date carrier name of the current
+ * subscription.
+ * </li>
+ * <li>{@link #EXTRA_SUBSCRIPTION_ID} The subscription id associated with the changed carrier
+ * identity.
+ * </li>
+ * </ul>
+ * <p class="note">This is a protected intent that can only be sent by the system.
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String ACTION_SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED =
+ "android.telephony.action.SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED";
+
+ /**
* An int extra used with {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED} which indicates
* the updated carrier id {@link TelephonyManager#getSimCarrierId()} of
* the current subscription.
@@ -1240,6 +1267,28 @@
public static final String EXTRA_CARRIER_NAME = "android.telephony.extra.CARRIER_NAME";
/**
+ * An int extra used with {@link #ACTION_SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED} which
+ * indicates the updated precise carrier id {@link TelephonyManager#getSimPreciseCarrierId()} of
+ * the current subscription. Note, its possible precise carrier id changes while
+ * {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED} remains the same e.g, when
+ * subscription switch to different IMSI.
+ * <p>Will be {@link TelephonyManager#UNKNOWN_CARRIER_ID} if the subscription is unavailable or
+ * the carrier cannot be identified.
+ * @hide
+ */
+ public static final String EXTRA_PRECISE_CARRIER_ID =
+ "android.telephony.extra.PRECISE_CARRIER_ID";
+
+ /**
+ * An string extra used with {@link #ACTION_SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED} which
+ * indicates the updated precise carrier name of the current subscription.
+ * {@see TelephonyManager#getSimPreciseCarrierIdName()}
+ * <p>it's a user-facing name of the precise carrier id {@link #EXTRA_PRECISE_CARRIER_ID},
+ * @hide
+ */
+ public static final String EXTRA_PRECISE_CARRIER_NAME = "android.telephony.extra.CARRIER_NAME";
+
+ /**
* An int extra used with {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED} to indicate the
* subscription which has changed.
*/
@@ -8320,6 +8369,62 @@
}
/**
+ * Returns fine-grained carrier id of the current subscription.
+ *
+ * <p>The precise carrier id can be used to further differentiate a carrier by different
+ * networks, by prepaid v.s.postpaid or even by 4G v.s.3G plan. Each carrier has a unique
+ * carrier id {@link #getSimCarrierId()} but can have multiple precise carrier id. e.g,
+ * {@link #getSimCarrierId()} will always return Tracfone (id 2022) for a Tracfone SIM, while
+ * {@link #getSimPreciseCarrierId()} can return Tracfone AT&T or Tracfone T-Mobile based on the
+ * current subscription IMSI.
+ *
+ * <p>For carriers without any fine-grained carrier ids, return {@link #getSimCarrierId()}
+ * <p>Precise carrier ids are defined in the same way as carrier id
+ * <a href="https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/master/assets/carrier_list.textpb">here</a>
+ * except each with a "parent" id linking to its top-level carrier id.
+ *
+ * @return Returns fine-grained carrier id of the current subscription.
+ * Return {@link #UNKNOWN_CARRIER_ID} if the subscription is unavailable or the carrier cannot
+ * be identified.
+ *
+ * @hide
+ */
+ public int getSimPreciseCarrierId() {
+ try {
+ ITelephony service = getITelephony();
+ if (service != null) {
+ return service.getSubscriptionPreciseCarrierId(getSubId());
+ }
+ } catch (RemoteException ex) {
+ // This could happen if binder process crashes.
+ }
+ return UNKNOWN_CARRIER_ID;
+ }
+
+ /**
+ * Similar like {@link #getSimCarrierIdName()}, returns user-facing name of the
+ * precise carrier id {@link #getSimPreciseCarrierId()}
+ *
+ * <p>The returned name is unlocalized.
+ *
+ * @return user-facing name of the subscription precise carrier id. Return {@code null} if the
+ * subscription is unavailable or the carrier cannot be identified.
+ *
+ * @hide
+ */
+ public CharSequence getSimPreciseCarrierIdName() {
+ try {
+ ITelephony service = getITelephony();
+ if (service != null) {
+ return service.getSubscriptionPreciseCarrierName(getSubId());
+ }
+ } catch (RemoteException ex) {
+ // This could happen if binder process crashes.
+ }
+ return null;
+ }
+
+ /**
* 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
@@ -9119,7 +9224,7 @@
public static final int NETWORK_TYPE_BITMASK_LTE_CA = (1 << NETWORK_TYPE_LTE_CA);
/**
- * @return Modem supported radio access family bitmask {@link NetworkTypeBitMask}
+ * @return Modem supported radio access family bitmask
*
* <p>Requires permission: {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE} or
* that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}).
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 682141f..3aaa323 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -1323,6 +1323,37 @@
int getSubscriptionMNOCarrierId(int subId);
/**
+ * Returns fine-grained carrier id of the current subscription.
+ *
+ * <p>The precise carrier id can be used to further differentiate a carrier by different
+ * networks, by prepaid v.s.postpaid or even by 4G v.s.3G plan. Each carrier has a unique
+ * carrier id {@link #getSimCarrierId()} but can have multiple precise carrier id. e.g,
+ * {@link #getSimCarrierId()} will always return Tracfone (id 2022) for a Tracfone SIM, while
+ * {@link #getSimPreciseCarrierId()} can return Tracfone AT&T or Tracfone T-Mobile based on the
+ * current underlying network.
+ *
+ * <p>For carriers without any fine-grained carrier ids, return {@link #getSimCarrierId()}
+ *
+ * @return Returns fine-grained carrier id of the current subscription.
+ * Return {@link #UNKNOWN_CARRIER_ID} if the subscription is unavailable or the carrier cannot
+ * be identified.
+ * @hide
+ */
+ int getSubscriptionPreciseCarrierId(int subId);
+
+ /**
+ * Similar like {@link #getSimCarrierIdName()}, returns user-facing name of the
+ * precise carrier id {@link #getSimPreciseCarrierId()}
+ *
+ * <p>The returned name is unlocalized.
+ *
+ * @return user-facing name of the subscription precise carrier id. Return {@code null} if the
+ * subscription is unavailable or the carrier cannot be identified.
+ * @hide
+ */
+ String getSubscriptionPreciseCarrierName(int subId);
+
+ /**
* Action set from carrier signalling broadcast receivers to enable/disable metered apns
* Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required
* @param subId the subscription ID that this action applies to.
diff --git a/tools/stats_log_api_gen/main.cpp b/tools/stats_log_api_gen/main.cpp
index 1ef34b9..8585ae9 100644
--- a/tools/stats_log_api_gen/main.cpp
+++ b/tools/stats_log_api_gen/main.cpp
@@ -435,7 +435,7 @@
fprintf(out, " std::this_thread::sleep_for(std::chrono::milliseconds(10));\n");
fprintf(out, " }\n");
fprintf(out, " if (ret < 0) {\n");
- fprintf(out, " note_log_drop();\n");
+ fprintf(out, " note_log_drop(ret);\n");
fprintf(out, " }\n");
fprintf(out, " return ret;\n");
fprintf(out, "}\n");
@@ -528,7 +528,7 @@
fprintf(out, " std::this_thread::sleep_for(std::chrono::milliseconds(10));\n");
fprintf(out, " }\n");
fprintf(out, " if (ret < 0) {\n");
- fprintf(out, " note_log_drop();\n");
+ fprintf(out, " note_log_drop(ret);\n");
fprintf(out, " }\n");
fprintf(out, " return ret;\n\n");
fprintf(out, "}\n");