Merge "Make util method public" into pi-dev
diff --git a/CleanSpec.mk b/CleanSpec.mk
index e728897..2e949c5 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -243,6 +243,7 @@
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/hardware)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/core/java/android/os/storage/*)
$(call add-clean-step, rm -rf $(OUT_DIR)/host/common/obj/JAVA_LIBRARIES/platformprotos_intermediates)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/statsdprotolite_intermediates)
# ******************************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THIS BANNER
# ******************************************************************
diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp
index f2443e8..d3aefed 100644
--- a/cmds/statsd/src/StatsLogProcessor.cpp
+++ b/cmds/statsd/src/StatsLogProcessor.cpp
@@ -485,6 +485,15 @@
mStatsPullerManager.OnAlarmFired(timestampNs);
}
+int64_t StatsLogProcessor::getLastReportTimeNs(const ConfigKey& key) {
+ auto it = mMetricsManagers.find(key);
+ if (it == mMetricsManagers.end()) {
+ return 0;
+ } else {
+ return it->second->getLastReportTimeNs();
+ }
+}
+
} // namespace statsd
} // namespace os
} // namespace android
diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h
index 6efdf8c..b91b01d 100644
--- a/cmds/statsd/src/StatsLogProcessor.h
+++ b/cmds/statsd/src/StatsLogProcessor.h
@@ -75,6 +75,8 @@
void informPullAlarmFired(const int64_t timestampNs);
+ int64_t getLastReportTimeNs(const ConfigKey& key);
+
private:
// For testing only.
inline sp<AlarmMonitor> getAnomalyAlarmMonitor() const {
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp
index f7cc00c..d025337 100644
--- a/cmds/statsd/src/StatsService.cpp
+++ b/cmds/statsd/src/StatsService.cpp
@@ -27,8 +27,10 @@
#include "subscriber/SubscriberReporter.h"
#include <android-base/file.h>
+#include <android-base/stringprintf.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
+#include <binder/PermissionController.h>
#include <dirent.h>
#include <frameworks/base/cmds/statsd/src/statsd_config.pb.h>
#include <private/android_filesystem_config.h>
@@ -42,13 +44,83 @@
using namespace android;
+using android::base::StringPrintf;
+
namespace android {
namespace os {
namespace statsd {
constexpr const char* kPermissionDump = "android.permission.DUMP";
+constexpr const char* kPermissionUsage = "android.permission.PACKAGE_USAGE_STATS";
+
+constexpr const char* kOpUsage = "android:get_usage_stats";
+
#define STATS_SERVICE_DIR "/data/misc/stats-service"
+static binder::Status ok() {
+ return binder::Status::ok();
+}
+
+static binder::Status exception(uint32_t code, const std::string& msg) {
+ ALOGE("%s (%d)", msg.c_str(), code);
+ return binder::Status::fromExceptionCode(code, String8(msg.c_str()));
+}
+
+binder::Status checkUid(uid_t expectedUid) {
+ uid_t uid = IPCThreadState::self()->getCallingUid();
+ if (uid == expectedUid || uid == AID_ROOT) {
+ return ok();
+ } else {
+ return exception(binder::Status::EX_SECURITY,
+ StringPrintf("UID %d is not expected UID %d", uid, expectedUid));
+ }
+}
+
+binder::Status checkDumpAndUsageStats(const String16& packageName) {
+ pid_t pid = IPCThreadState::self()->getCallingPid();
+ uid_t uid = IPCThreadState::self()->getCallingUid();
+
+ // Root, system, and shell always have access
+ if (uid == AID_ROOT || uid == AID_SYSTEM || uid == AID_SHELL) {
+ return ok();
+ }
+
+ // Caller must be granted these permissions
+ if (!checkCallingPermission(String16(kPermissionDump))) {
+ return exception(binder::Status::EX_SECURITY,
+ StringPrintf("UID %d / PID %d lacks permission %s", uid, pid, kPermissionDump));
+ }
+ if (!checkCallingPermission(String16(kPermissionUsage))) {
+ return exception(binder::Status::EX_SECURITY,
+ StringPrintf("UID %d / PID %d lacks permission %s", uid, pid, kPermissionUsage));
+ }
+
+ // Caller must also have usage stats op granted
+ PermissionController pc;
+ switch (pc.noteOp(String16(kOpUsage), uid, packageName)) {
+ case PermissionController::MODE_ALLOWED:
+ case PermissionController::MODE_DEFAULT:
+ return ok();
+ default:
+ return exception(binder::Status::EX_SECURITY,
+ StringPrintf("UID %d / PID %d lacks app-op %s", uid, pid, kOpUsage));
+ }
+}
+
+#define ENFORCE_UID(uid) { \
+ binder::Status status = checkUid((uid)); \
+ if (!status.isOk()) { \
+ return status; \
+ } \
+}
+
+#define ENFORCE_DUMP_AND_USAGE_STATS(packageName) { \
+ binder::Status status = checkDumpAndUsageStats(packageName); \
+ if (!status.isOk()) { \
+ return status; \
+ } \
+}
+
StatsService::StatsService(const sp<Looper>& handlerLooper)
: mAnomalyAlarmMonitor(new AlarmMonitor(MIN_DIFF_TO_UPDATE_REGISTERED_ALARM_SECS,
[](const sp<IStatsCompanionService>& sc, int64_t timeMillis) {
@@ -90,7 +162,7 @@
VLOG("Statscompanion could not find a broadcast receiver for %s",
key.ToString().c_str());
} else {
- sc->sendDataBroadcast(receiver);
+ sc->sendDataBroadcast(receiver, mProcessor->getLastReportTimeNs(key));
}
}
);
@@ -172,6 +244,9 @@
* Write debugging data about statsd.
*/
status_t StatsService::dump(int fd, const Vector<String16>& args) {
+ if (!checkCallingPermission(String16(kPermissionDump))) {
+ return PERMISSION_DENIED;
+ }
FILE* out = fdopen(fd, "w");
if (out == NULL) {
return NO_MEMORY; // the fd is already open
@@ -212,7 +287,10 @@
* Implementation of the adb shell cmd stats command.
*/
status_t StatsService::command(FILE* in, FILE* out, FILE* err, Vector<String8>& args) {
- // TODO: Permission check
+ uid_t uid = IPCThreadState::self()->getCallingUid();
+ if (uid != AID_ROOT && uid != AID_SHELL) {
+ return PERMISSION_DENIED;
+ }
const int argCount = args.size();
if (argCount >= 1) {
@@ -377,14 +455,15 @@
print_cmd_help(out);
return UNKNOWN_ERROR;
}
- auto receiver = mConfigManager->GetConfigReceiver(ConfigKey(uid, StrToInt64(name)));
+ ConfigKey key(uid, StrToInt64(name));
+ auto receiver = mConfigManager->GetConfigReceiver(key);
sp<IStatsCompanionService> sc = getStatsCompanionService();
if (sc == nullptr) {
VLOG("Could not access statsCompanion");
} else if (receiver == nullptr) {
VLOG("Could not find receiver for %s, %s", args[1].c_str(), args[2].c_str())
} else {
- sc->sendDataBroadcast(receiver);
+ sc->sendDataBroadcast(receiver, mProcessor->getLastReportTimeNs(key));
VLOG("StatsService::trigger broadcast succeeded to %s, %s", args[1].c_str(),
args[2].c_str());
}
@@ -660,13 +739,9 @@
Status StatsService::informAllUidData(const vector<int32_t>& uid, const vector<int64_t>& version,
const vector<String16>& app) {
+ ENFORCE_UID(AID_SYSTEM);
+
VLOG("StatsService::informAllUidData was called");
-
- if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
- return Status::fromExceptionCode(Status::EX_SECURITY,
- "Only system uid can call informAllUidData");
- }
-
mUidMap->updateMap(getElapsedRealtimeNs(), uid, version, app);
VLOG("StatsService::informAllUidData succeeded");
@@ -674,36 +749,26 @@
}
Status StatsService::informOnePackage(const String16& app, int32_t uid, int64_t version) {
- VLOG("StatsService::informOnePackage was called");
+ ENFORCE_UID(AID_SYSTEM);
- if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
- return Status::fromExceptionCode(Status::EX_SECURITY,
- "Only system uid can call informOnePackage");
- }
+ VLOG("StatsService::informOnePackage was called");
mUidMap->updateApp(getElapsedRealtimeNs(), app, uid, version);
return Status::ok();
}
Status StatsService::informOnePackageRemoved(const String16& app, int32_t uid) {
- VLOG("StatsService::informOnePackageRemoved was called");
+ ENFORCE_UID(AID_SYSTEM);
- if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
- return Status::fromExceptionCode(Status::EX_SECURITY,
- "Only system uid can call informOnePackageRemoved");
- }
+ VLOG("StatsService::informOnePackageRemoved was called");
mUidMap->removeApp(getElapsedRealtimeNs(), app, uid);
mConfigManager->RemoveConfigs(uid);
return Status::ok();
}
Status StatsService::informAnomalyAlarmFired() {
+ ENFORCE_UID(AID_SYSTEM);
+
VLOG("StatsService::informAnomalyAlarmFired was called");
-
- if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
- return Status::fromExceptionCode(Status::EX_SECURITY,
- "Only system uid can call informAnomalyAlarmFired");
- }
-
int64_t currentTimeSec = getElapsedRealtimeSec();
std::unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet =
mAnomalyAlarmMonitor->popSoonerThan(static_cast<uint32_t>(currentTimeSec));
@@ -717,14 +782,9 @@
}
Status StatsService::informAlarmForSubscriberTriggeringFired() {
+ ENFORCE_UID(AID_SYSTEM);
+
VLOG("StatsService::informAlarmForSubscriberTriggeringFired was called");
-
- if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
- return Status::fromExceptionCode(
- Status::EX_SECURITY,
- "Only system uid can call informAlarmForSubscriberTriggeringFired");
- }
-
int64_t currentTimeSec = getElapsedRealtimeSec();
std::unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet =
mPeriodicAlarmMonitor->popSoonerThan(static_cast<uint32_t>(currentTimeSec));
@@ -738,44 +798,28 @@
}
Status StatsService::informPollAlarmFired() {
+ ENFORCE_UID(AID_SYSTEM);
+
VLOG("StatsService::informPollAlarmFired was called");
-
- if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
- return Status::fromExceptionCode(Status::EX_SECURITY,
- "Only system uid can call informPollAlarmFired");
- }
-
mProcessor->informPullAlarmFired(getElapsedRealtimeNs());
-
VLOG("StatsService::informPollAlarmFired succeeded");
-
return Status::ok();
}
Status StatsService::systemRunning() {
- if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
- return Status::fromExceptionCode(Status::EX_SECURITY,
- "Only system uid can call systemRunning");
- }
+ ENFORCE_UID(AID_SYSTEM);
// When system_server is up and running, schedule the dropbox task to run.
VLOG("StatsService::systemRunning");
-
sayHiToStatsCompanion();
-
return Status::ok();
}
Status StatsService::writeDataToDisk() {
- if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
- return Status::fromExceptionCode(Status::EX_SECURITY,
- "Only system uid can call systemRunning");
- }
+ ENFORCE_UID(AID_SYSTEM);
VLOG("StatsService::writeDataToDisk");
-
mProcessor->WriteDataToDisk();
-
return Status::ok();
}
@@ -790,13 +834,9 @@
}
Status StatsService::statsCompanionReady() {
+ ENFORCE_UID(AID_SYSTEM);
+
VLOG("StatsService::statsCompanionReady was called");
-
- if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
- return Status::fromExceptionCode(Status::EX_SECURITY,
- "Only system uid can call statsCompanionReady");
- }
-
sp<IStatsCompanionService> statsCompanion = getStatsCompanionService();
if (statsCompanion == nullptr) {
return Status::fromExceptionCode(
@@ -820,33 +860,31 @@
mProcessor->OnLogEvent(event, reconnectionStarts);
}
-Status StatsService::getData(int64_t key, vector<uint8_t>* output) {
+Status StatsService::getData(int64_t key, const String16& packageName, vector<uint8_t>* output) {
+ ENFORCE_DUMP_AND_USAGE_STATS(packageName);
+
IPCThreadState* ipc = IPCThreadState::self();
VLOG("StatsService::getData with Pid %i, Uid %i", ipc->getCallingPid(), ipc->getCallingUid());
- if (!checkCallingPermission(String16(kPermissionDump))) {
- return Status::fromExceptionCode(binder::Status::EX_SECURITY);
- }
ConfigKey configKey(ipc->getCallingUid(), key);
mProcessor->onDumpReport(configKey, getElapsedRealtimeNs(),
false /* include_current_bucket*/, output);
return Status::ok();
}
-Status StatsService::getMetadata(vector<uint8_t>* output) {
+Status StatsService::getMetadata(const String16& packageName, vector<uint8_t>* output) {
+ ENFORCE_DUMP_AND_USAGE_STATS(packageName);
+
IPCThreadState* ipc = IPCThreadState::self();
VLOG("StatsService::getMetadata with Pid %i, Uid %i", ipc->getCallingPid(),
ipc->getCallingUid());
- if (!checkCallingPermission(String16(kPermissionDump))) {
- return Status::fromExceptionCode(binder::Status::EX_SECURITY);
- }
StatsdStats::getInstance().dumpStats(output, false); // Don't reset the counters.
return Status::ok();
}
-Status StatsService::addConfiguration(int64_t key, const vector <uint8_t>& config) {
- if (!checkCallingPermission(String16(kPermissionDump))) {
- return Status::fromExceptionCode(binder::Status::EX_SECURITY);
- }
+Status StatsService::addConfiguration(int64_t key, const vector <uint8_t>& config,
+ const String16& packageName) {
+ ENFORCE_DUMP_AND_USAGE_STATS(packageName);
+
IPCThreadState* ipc = IPCThreadState::self();
if (addConfigurationChecked(ipc->getCallingUid(), key, config)) {
return Status::ok();
@@ -869,30 +907,29 @@
return true;
}
-Status StatsService::removeDataFetchOperation(int64_t key) {
- if (!checkCallingPermission(String16(kPermissionDump))) {
- return Status::fromExceptionCode(binder::Status::EX_SECURITY);
- }
+Status StatsService::removeDataFetchOperation(int64_t key, const String16& packageName) {
+ ENFORCE_DUMP_AND_USAGE_STATS(packageName);
+
IPCThreadState* ipc = IPCThreadState::self();
ConfigKey configKey(ipc->getCallingUid(), key);
mConfigManager->RemoveConfigReceiver(configKey);
return Status::ok();
}
-Status StatsService::setDataFetchOperation(int64_t key, const sp<android::IBinder>& intentSender) {
- if (!checkCallingPermission(String16(kPermissionDump))) {
- return Status::fromExceptionCode(binder::Status::EX_SECURITY);
- }
+Status StatsService::setDataFetchOperation(int64_t key,
+ const sp<android::IBinder>& intentSender,
+ const String16& packageName) {
+ ENFORCE_DUMP_AND_USAGE_STATS(packageName);
+
IPCThreadState* ipc = IPCThreadState::self();
ConfigKey configKey(ipc->getCallingUid(), key);
mConfigManager->SetConfigReceiver(configKey, intentSender);
return Status::ok();
}
-Status StatsService::removeConfiguration(int64_t key) {
- if (!checkCallingPermission(String16(kPermissionDump))) {
- return Status::fromExceptionCode(binder::Status::EX_SECURITY);
- }
+Status StatsService::removeConfiguration(int64_t key, const String16& packageName) {
+ ENFORCE_DUMP_AND_USAGE_STATS(packageName);
+
IPCThreadState* ipc = IPCThreadState::self();
ConfigKey configKey(ipc->getCallingUid(), key);
mConfigManager->RemoveConfig(configKey);
@@ -902,11 +939,11 @@
Status StatsService::setBroadcastSubscriber(int64_t configId,
int64_t subscriberId,
- const sp<android::IBinder>& intentSender) {
+ const sp<android::IBinder>& intentSender,
+ const String16& packageName) {
+ ENFORCE_DUMP_AND_USAGE_STATS(packageName);
+
VLOG("StatsService::setBroadcastSubscriber called.");
- if (!checkCallingPermission(String16(kPermissionDump))) {
- return Status::fromExceptionCode(binder::Status::EX_SECURITY);
- }
IPCThreadState* ipc = IPCThreadState::self();
ConfigKey configKey(ipc->getCallingUid(), configId);
SubscriberReporter::getInstance()
@@ -915,11 +952,11 @@
}
Status StatsService::unsetBroadcastSubscriber(int64_t configId,
- int64_t subscriberId) {
+ int64_t subscriberId,
+ const String16& packageName) {
+ ENFORCE_DUMP_AND_USAGE_STATS(packageName);
+
VLOG("StatsService::unsetBroadcastSubscriber called.");
- if (!checkCallingPermission(String16(kPermissionDump))) {
- return Status::fromExceptionCode(binder::Status::EX_SECURITY);
- }
IPCThreadState* ipc = IPCThreadState::self();
ConfigKey configKey(ipc->getCallingUid(), configId);
SubscriberReporter::getInstance()
@@ -927,7 +964,6 @@
return Status::ok();
}
-
void StatsService::binderDied(const wp <IBinder>& who) {
ALOGW("statscompanion service died");
mProcessor->WriteDataToDisk();
diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h
index d502796..774a3e9 100644
--- a/cmds/statsd/src/StatsService.h
+++ b/cmds/statsd/src/StatsService.h
@@ -81,36 +81,44 @@
/**
* Binder call for clients to request data for this configuration key.
*/
- virtual Status getData(int64_t key, vector<uint8_t>* output) override;
+ virtual Status getData(int64_t key,
+ const String16& packageName,
+ vector<uint8_t>* output) override;
/**
* Binder call for clients to get metadata across all configs in statsd.
*/
- virtual Status getMetadata(vector<uint8_t>* output) override;
+ virtual Status getMetadata(const String16& packageName,
+ vector<uint8_t>* output) override;
/**
* Binder call to let clients send a configuration and indicate they're interested when they
* should requestData for this configuration.
*/
- virtual Status addConfiguration(int64_t key, const vector<uint8_t>& config) override;
+ virtual Status addConfiguration(int64_t key,
+ const vector<uint8_t>& config,
+ const String16& packageName) override;
/**
* Binder call to let clients register the data fetch operation for a configuration.
*/
virtual Status setDataFetchOperation(int64_t key,
- const sp<android::IBinder>& intentSender) override;
+ const sp<android::IBinder>& intentSender,
+ const String16& packageName) override;
/**
* Binder call to remove the data fetch operation for the specified config key.
*/
- virtual Status removeDataFetchOperation(int64_t key) override;
+ virtual Status removeDataFetchOperation(int64_t key,
+ const String16& packageName) override;
/**
* Binder call to allow clients to remove the specified configuration.
*/
- virtual Status removeConfiguration(int64_t key) override;
+ virtual Status removeConfiguration(int64_t key,
+ const String16& packageName) override;
/**
* Binder call to associate the given config's subscriberId with the given intentSender.
@@ -118,12 +126,15 @@
*/
virtual Status setBroadcastSubscriber(int64_t configId,
int64_t subscriberId,
- const sp<android::IBinder>& intentSender) override;
+ const sp<android::IBinder>& intentSender,
+ const String16& packageName) override;
/**
* Binder call to unassociate the given config's subscriberId with any intentSender.
*/
- virtual Status unsetBroadcastSubscriber(int64_t configId, int64_t subscriberId) override;
+ virtual Status unsetBroadcastSubscriber(int64_t configId,
+ int64_t subscriberId,
+ const String16& packageName) override;
/** Inform statsCompanion that statsd is ready. */
virtual void sayHiToStatsCompanion();
diff --git a/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp b/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp
index 5499ee3..af07f6b 100644
--- a/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp
@@ -27,6 +27,7 @@
#ifdef __ANDROID__
+const string kAndroid = "android";
const string kApp1 = "app1.sharing.1";
const int kConfigKey = 789130123; // Randomly chosen to avoid collisions with existing configs.
@@ -35,12 +36,12 @@
config.SerializeToString(&str);
std::vector<uint8_t> configAsVec(str.begin(), str.end());
bool success;
- service.addConfiguration(kConfigKey, configAsVec);
+ service.addConfiguration(kConfigKey, configAsVec, String16(kAndroid.c_str()));
}
ConfigMetricsReport GetReports(StatsService& service) {
vector<uint8_t> output;
- service.getData(kConfigKey, &output);
+ service.getData(kConfigKey, String16(kAndroid.c_str()), &output);
ConfigMetricsReportList reports;
reports.ParseFromArray(output.data(), output.size());
EXPECT_EQ(1, reports.reports_size());
@@ -134,4 +135,4 @@
} // namespace statsd
} // namespace os
-} // namespace android
\ No newline at end of file
+} // namespace android
diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt
index 1ef11b1..fdc6c92 100644
--- a/config/hiddenapi-light-greylist.txt
+++ b/config/hiddenapi-light-greylist.txt
@@ -404,7 +404,10 @@
Landroid/appwidget/AppWidgetManager;->bindAppWidgetId(ILandroid/content/ComponentName;)V
Landroid/appwidget/AppWidgetManager;->mService:Lcom/android/internal/appwidget/IAppWidgetService;
Landroid/appwidget/AppWidgetProviderInfo;->providerInfo:Landroid/content/pm/ActivityInfo;
+Landroid/bluetooth/BluetoothA2dp;->ACTION_ACTIVE_DEVICE_CHANGED:Ljava/lang/String;
Landroid/bluetooth/BluetoothA2dp;->connect(Landroid/bluetooth/BluetoothDevice;)Z
+Landroid/bluetooth/BluetoothA2dp;->getActiveDevice()Landroid/bluetooth/BluetoothDevice;
+Landroid/bluetooth/BluetoothA2dp;->setActiveDevice(Landroid/bluetooth/BluetoothDevice;)Z
Landroid/bluetooth/BluetoothAdapter;->disable(Z)Z
Landroid/bluetooth/BluetoothAdapter;->factoryReset()Z
Landroid/bluetooth/BluetoothAdapter;->getDiscoverableTimeout()I
@@ -421,11 +424,17 @@
Landroid/bluetooth/BluetoothGattDescriptor;->mInstance:I
Landroid/bluetooth/BluetoothGatt;->mAuthRetryState:I
Landroid/bluetooth/BluetoothGatt;->refresh()Z
+Landroid/bluetooth/BluetoothHeadset;->ACTION_ACTIVE_DEVICE_CHANGED:Ljava/lang/String;
Landroid/bluetooth/BluetoothHeadset;->close()V
Landroid/bluetooth/BluetoothHeadset;->connectAudio()Z
Landroid/bluetooth/BluetoothHeadset;->disconnectAudio()Z
+Landroid/bluetooth/BluetoothHeadset;->getActiveDevice()Landroid/bluetooth/BluetoothDevice;
+Landroid/bluetooth/BluetoothHeadset;->setActiveDevice(Landroid/bluetooth/BluetoothDevice;)Z
Landroid/bluetooth/BluetoothHeadset;->startScoUsingVirtualVoiceCall(Landroid/bluetooth/BluetoothDevice;)Z
Landroid/bluetooth/BluetoothHeadset;->stopScoUsingVirtualVoiceCall(Landroid/bluetooth/BluetoothDevice;)Z
+Landroid/bluetooth/BluetoothHearingAid;->ACTION_ACTIVE_DEVICE_CHANGED:Ljava/lang/String;
+Landroid/bluetooth/BluetoothHearingAid;->getActiveDevices()Ljava/util/List;
+Landroid/bluetooth/BluetoothHearingAid;->setActiveDevice(Landroid/bluetooth/BluetoothDevice;)Z
Landroid/bluetooth/BluetoothMapClient;->sendMessage(Landroid/bluetooth/BluetoothDevice;[Landroid/net/Uri;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)Z
Landroid/bluetooth/BluetoothPan;->close()V
Landroid/bluetooth/BluetoothPan;->connect(Landroid/bluetooth/BluetoothDevice;)Z
@@ -989,12 +998,13 @@
Landroid/location/ILocationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationManager;
Landroid/location/ILocationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/location/LocationManager;->mService:Landroid/location/ILocationManager;
+Landroid/media/AudioAttributes$Builder;->addTag(Ljava/lang/String;)Landroid/media/AudioAttributes$Builder;
Landroid/media/AudioAttributes;->mContentType:I
Landroid/media/AudioAttributes;->mFlags:I
Landroid/media/AudioAttributes;->mFormattedTags:Ljava/lang/String;
Landroid/media/AudioAttributes;->mSource:I
Landroid/media/AudioAttributes;->mUsage:I
-Landroid/media/AudioAttributes$Builder;->addTag(Ljava/lang/String;)Landroid/media/AudioAttributes$Builder;
+Landroid/media/AudioAttributes;->toLegacyStreamType(Landroid/media/AudioAttributes;)I
Landroid/media/AudioDevicePortConfig;-><init>(Landroid/media/AudioDevicePort;IIILandroid/media/AudioGainConfig;)V
Landroid/media/AudioDevicePort;-><init>(Landroid/media/AudioHandle;Ljava/lang/String;[I[I[I[I[Landroid/media/AudioGain;ILjava/lang/String;)V
Landroid/media/AudioFormat;-><init>(IIII)V
@@ -1083,6 +1093,7 @@
Landroid/media/IAudioService;->setStreamVolume(IIILjava/lang/String;)V
Landroid/media/IAudioService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioService;
Landroid/media/IAudioService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+Landroid/media/Image;-><init>()V
Landroid/media/IMediaScannerService;->scanFile(Ljava/lang/String;Ljava/lang/String;)V
Landroid/media/IMediaScannerService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaScannerService;
Landroid/media/IRemoteDisplayCallback;->onStateChanged(Landroid/media/RemoteDisplayState;)V
@@ -1199,6 +1210,7 @@
Landroid/net/ConnectivityManager;->TYPE_NONE:I
Landroid/net/ConnectivityManager;->TYPE_PROXY:I
Landroid/net/ConnectivityManager;->TYPE_WIFI_P2P:I
+Landroid/net/http/SslError;->mCertificate:Landroid/net/http/SslCertificate;
Landroid/net/IConnectivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IConnectivityManager;
Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveLinkProperties()Landroid/net/LinkProperties;
Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveNetworkInfo()Landroid/net/NetworkInfo;
@@ -1533,6 +1545,7 @@
Landroid/os/storage/StorageVolume;->getPathFile()Ljava/io/File;
Landroid/os/storage/StorageVolume;->getPath()Ljava/lang/String;
Landroid/os/storage/StorageVolume;->getUserLabel()Ljava/lang/String;
+Landroid/os/storage/StorageVolume;->mPath:Ljava/io/File;
Landroid/os/storage/VolumeInfo;->getDisk()Landroid/os/storage/DiskInfo;
Landroid/os/storage/VolumeInfo;->getFsUuid()Ljava/lang/String;
Landroid/os/storage/VolumeInfo;->getPath()Ljava/io/File;
@@ -1702,6 +1715,7 @@
Landroid/provider/Settings$System;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z
Landroid/provider/Settings$System;->SCREEN_AUTO_BRIGHTNESS_ADJ:Ljava/lang/String;
Landroid/provider/Settings$System;->sNameValueCache:Landroid/provider/Settings$NameValueCache;
+Landroid/provider/Settings$System;->VOLUME_SETTINGS:[Ljava/lang/String;
Landroid/provider/Telephony$Sms;->addMessageToUri(ILandroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZJ)Landroid/net/Uri;
Landroid/provider/Telephony$Sms;->addMessageToUri(ILandroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZ)Landroid/net/Uri;
Landroid/provider/Telephony$Sms;->addMessageToUri(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZJ)Landroid/net/Uri;
@@ -2134,6 +2148,9 @@
Landroid/text/TextUtils$TruncateAt;->END_SMALL:Landroid/text/TextUtils$TruncateAt;
Landroid/transition/ChangeBounds;->BOTTOM_RIGHT_ONLY_PROPERTY:Landroid/util/Property;
Landroid/transition/ChangeBounds;->POSITION_PROPERTY:Landroid/util/Property;
+Landroid/transition/Scene;->mEnterAction:Ljava/lang/Runnable;
+Landroid/transition/Scene;->mExitAction:Ljava/lang/Runnable;
+Landroid/transition/Scene;->setCurrentScene(Landroid/view/View;Landroid/transition/Scene;)V
Landroid/transition/TransitionManager;->sRunningTransitions:Ljava/lang/ThreadLocal;
Landroid/util/ArrayMap;->append(Ljava/lang/Object;Ljava/lang/Object;)V
Landroid/util/ArrayMap;->mBaseCacheSize:I
@@ -2152,6 +2169,7 @@
Landroid/util/NtpTrustedTime;->getCachedNtpTimeReference()J
Landroid/util/NtpTrustedTime;->getInstance(Landroid/content/Context;)Landroid/util/NtpTrustedTime;
Landroid/util/NtpTrustedTime;->hasCache()Z
+Landroid/util/PathParser;->createPathFromPathData(Ljava/lang/String;)Landroid/graphics/Path;
Landroid/util/Pools$SimplePool;->mPool:[Ljava/lang/Object;
Landroid/util/Pools$SynchronizedPool;->acquire()Ljava/lang/Object;
Landroid/util/Pools$SynchronizedPool;-><init>(I)V
@@ -2733,6 +2751,7 @@
Landroid/widget/ProgressBar;->mMaxHeight:I
Landroid/widget/ProgressBar;->mMinHeight:I
Landroid/widget/ProgressBar;->mOnlyIndeterminate:Z
+Landroid/widget/ProgressBar;->setProgressInternal(IZZ)Z
Landroid/widget/RelativeLayout$LayoutParams;->mBottom:I
Landroid/widget/RelativeLayout$LayoutParams;->mLeft:I
Landroid/widget/RelativeLayout$LayoutParams;->mRight:I
@@ -2799,6 +2818,7 @@
Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V
Landroid/widget/Toast;->getService()Landroid/app/INotificationManager;
Landroid/widget/Toast;->getWindowParams()Landroid/view/WindowManager$LayoutParams;
+Landroid/widget/Toast;->mDuration:I
Landroid/widget/Toast;->mTN:Landroid/widget/Toast$TN;
Landroid/widget/Toast;->sService:Landroid/app/INotificationManager;
Landroid/widget/Toast$TN;->mNextView:Landroid/view/View;
@@ -3079,6 +3099,7 @@
Lcom/android/internal/R$styleable;->GridView:[I
Lcom/android/internal/R$styleable;->IconMenuView:[I
Lcom/android/internal/R$styleable;->ImageView:[I
+Lcom/android/internal/R$styleable;->ImageView_scaleType:I
Lcom/android/internal/R$styleable;->ImageView_src:I
Lcom/android/internal/R$styleable;->ListPreference_entries:I
Lcom/android/internal/R$styleable;->ListPreference:[I
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 82c3383..eba7471 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -173,7 +173,6 @@
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -223,9 +222,6 @@
// Whether to invoke an activity callback after delivering new configuration.
private static final boolean REPORT_TO_ACTIVITY = true;
- // Maximum number of recent tokens to maintain for debugging purposes
- private static final int MAX_DESTROYED_ACTIVITIES = 10;
-
/**
* Denotes an invalid sequence number corresponding to a process state change.
*/
@@ -258,8 +254,6 @@
final H mH = new H();
final Executor mExecutor = new HandlerExecutor(mH);
final ArrayMap<IBinder, ActivityClientRecord> mActivities = new ArrayMap<>();
- final ArrayList<DestroyedActivityInfo> mRecentDestroyedActivities = new ArrayList<>();
-
// List of new activities (via ActivityRecord.nextIdle) that should
// be reported when next we idle.
ActivityClientRecord mNewActivities = null;
@@ -341,26 +335,6 @@
}
}
- /**
- * TODO(b/71506345): Remove this once bug is resolved.
- */
- private static final class DestroyedActivityInfo {
- private final Integer mToken;
- private final String mReason;
- private final long mTime;
-
- DestroyedActivityInfo(Integer token, String reason) {
- mToken = token;
- mReason = reason;
- mTime = System.currentTimeMillis();
- }
-
- void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + "[token:" + mToken + " | time:" + mTime + " | reason:" + mReason
- + "]");
- }
- }
-
// The lock of mProviderMap protects the following variables.
final ArrayMap<ProviderKey, ProviderClientRecord> mProviderMap
= new ArrayMap<ProviderKey, ProviderClientRecord>();
@@ -2195,32 +2169,6 @@
pw.println(String.format(format, objs));
}
- @Override
- public void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + "Activities:");
-
- if (!mActivities.isEmpty()) {
- final Iterator<Map.Entry<IBinder, ActivityClientRecord>> activitiesIterator =
- mActivities.entrySet().iterator();
-
- while (activitiesIterator.hasNext()) {
- final ArrayMap.Entry<IBinder, ActivityClientRecord> entry =
- activitiesIterator.next();
- pw.println(prefix + " [token:" + entry.getKey().hashCode() + " record:"
- + entry.getValue().toString() + "]");
- }
- }
-
- if (!mRecentDestroyedActivities.isEmpty()) {
- pw.println(prefix + "Recent destroyed activities:");
- for (int i = 0, size = mRecentDestroyedActivities.size(); i < size; i++) {
- final DestroyedActivityInfo info = mRecentDestroyedActivities.get(i);
- pw.print(prefix);
- info.dump(pw, " ");
- }
- }
- }
-
public static void dumpMemInfoTable(PrintWriter pw, Debug.MemoryInfo memInfo, boolean checkin,
boolean dumpFullInfo, boolean dumpDalvik, boolean dumpSummaryOnly,
int pid, String processName,
@@ -4473,12 +4421,6 @@
r.setState(ON_DESTROY);
}
mActivities.remove(token);
- mRecentDestroyedActivities.add(0, new DestroyedActivityInfo(token.hashCode(), reason));
-
- final int recentDestroyedActivitiesSize = mRecentDestroyedActivities.size();
- if (recentDestroyedActivitiesSize > MAX_DESTROYED_ACTIVITIES) {
- mRecentDestroyedActivities.remove(recentDestroyedActivitiesSize - 1);
- }
StrictMode.decrementExpectedActivityCount(activityClass);
return r;
}
diff --git a/core/java/android/app/ClientTransactionHandler.java b/core/java/android/app/ClientTransactionHandler.java
index 0639b00..e26d989 100644
--- a/core/java/android/app/ClientTransactionHandler.java
+++ b/core/java/android/app/ClientTransactionHandler.java
@@ -27,7 +27,6 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.content.ReferrerIntent;
-import java.io.PrintWriter;
import java.util.List;
/**
@@ -192,11 +191,4 @@
* Used to check if we should report relaunch to WM.
* */
public abstract void reportRelaunch(IBinder token, PendingTransactionActions pendingActions);
-
- /**
- * Debugging output.
- * @param pw {@link PrintWriter} to write logs to.
- * @param prefix Prefix to prepend to output.
- */
- public abstract void dump(PrintWriter pw, String prefix);
}
diff --git a/core/java/android/app/StatsManager.java b/core/java/android/app/StatsManager.java
index 8783d94..45754ae 100644
--- a/core/java/android/app/StatsManager.java
+++ b/core/java/android/app/StatsManager.java
@@ -15,10 +15,13 @@
*/
package android.app;
-import android.Manifest;
+import static android.Manifest.permission.DUMP;
+import static android.Manifest.permission.PACKAGE_USAGE_STATS;
+
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
+import android.content.Context;
import android.os.IBinder;
import android.os.IStatsManager;
import android.os.RemoteException;
@@ -33,10 +36,13 @@
*/
@SystemApi
public final class StatsManager {
- IStatsManager mService;
private static final String TAG = "StatsManager";
private static final boolean DEBUG = false;
+ private final Context mContext;
+
+ private IStatsManager mService;
+
/**
* Long extra of uid that added the relevant stats config.
*/
@@ -79,7 +85,8 @@
*
* @hide
*/
- public StatsManager() {
+ public StatsManager(Context context) {
+ mContext = context;
}
/**
@@ -92,15 +99,18 @@
* @throws StatsUnavailableException if unsuccessful due to failing to connect to stats service
* @throws IllegalArgumentException if config is not a wire-encoded StatsdConfig proto
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public void addConfig(long configKey, byte[] config) throws StatsUnavailableException {
synchronized (this) {
try {
IStatsManager service = getIStatsManagerLocked();
- service.addConfiguration(configKey, config); // can throw IllegalArgumentException
+ // can throw IllegalArgumentException
+ service.addConfiguration(configKey, config, mContext.getOpPackageName());
} catch (RemoteException e) {
Slog.e(TAG, "Failed to connect to statsd when adding configuration");
throw new StatsUnavailableException("could not connect", e);
+ } catch (SecurityException e) {
+ throw new StatsUnavailableException(e.getMessage(), e);
}
}
}
@@ -108,7 +118,7 @@
/**
* TODO: Temporary for backwards compatibility. Remove.
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public boolean addConfiguration(long configKey, byte[] config) {
try {
addConfig(configKey, config);
@@ -124,15 +134,17 @@
* @param configKey Configuration key to remove.
* @throws StatsUnavailableException if unsuccessful due to failing to connect to stats service
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public void removeConfig(long configKey) throws StatsUnavailableException {
synchronized (this) {
try {
IStatsManager service = getIStatsManagerLocked();
- service.removeConfiguration(configKey);
+ service.removeConfiguration(configKey, mContext.getOpPackageName());
} catch (RemoteException e) {
Slog.e(TAG, "Failed to connect to statsd when removing configuration");
throw new StatsUnavailableException("could not connect", e);
+ } catch (SecurityException e) {
+ throw new StatsUnavailableException(e.getMessage(), e);
}
}
}
@@ -140,7 +152,7 @@
/**
* TODO: Temporary for backwards compatibility. Remove.
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public boolean removeConfiguration(long configKey) {
try {
removeConfig(configKey);
@@ -179,7 +191,7 @@
* @param subscriberId ID of the subscriber, as used in the config.
* @throws StatsUnavailableException if unsuccessful due to failing to connect to stats service
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public void setBroadcastSubscriber(
PendingIntent pendingIntent, long configKey, long subscriberId)
throws StatsUnavailableException {
@@ -189,13 +201,17 @@
if (pendingIntent != null) {
// Extracts IIntentSender from the PendingIntent and turns it into an IBinder.
IBinder intentSender = pendingIntent.getTarget().asBinder();
- service.setBroadcastSubscriber(configKey, subscriberId, intentSender);
+ service.setBroadcastSubscriber(configKey, subscriberId, intentSender,
+ mContext.getOpPackageName());
} else {
- service.unsetBroadcastSubscriber(configKey, subscriberId);
+ service.unsetBroadcastSubscriber(configKey, subscriberId,
+ mContext.getOpPackageName());
}
} catch (RemoteException e) {
Slog.e(TAG, "Failed to connect to statsd when adding broadcast subscriber", e);
throw new StatsUnavailableException("could not connect", e);
+ } catch (SecurityException e) {
+ throw new StatsUnavailableException(e.getMessage(), e);
}
}
}
@@ -203,7 +219,7 @@
/**
* TODO: Temporary for backwards compatibility. Remove.
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public boolean setBroadcastSubscriber(
long configKey, long subscriberId, PendingIntent pendingIntent) {
try {
@@ -228,23 +244,26 @@
* @param configKey The integer naming the config to which this operation is attached.
* @throws StatsUnavailableException if unsuccessful due to failing to connect to stats service
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public void setFetchReportsOperation(PendingIntent pendingIntent, long configKey)
throws StatsUnavailableException {
synchronized (this) {
try {
IStatsManager service = getIStatsManagerLocked();
if (pendingIntent == null) {
- service.removeDataFetchOperation(configKey);
+ service.removeDataFetchOperation(configKey, mContext.getOpPackageName());
} else {
// Extracts IIntentSender from the PendingIntent and turns it into an IBinder.
IBinder intentSender = pendingIntent.getTarget().asBinder();
- service.setDataFetchOperation(configKey, intentSender);
+ service.setDataFetchOperation(configKey, intentSender,
+ mContext.getOpPackageName());
}
} catch (RemoteException e) {
Slog.e(TAG, "Failed to connect to statsd when registering data listener.");
throw new StatsUnavailableException("could not connect", e);
+ } catch (SecurityException e) {
+ throw new StatsUnavailableException(e.getMessage(), e);
}
}
}
@@ -252,7 +271,7 @@
/**
* TODO: Temporary for backwards compatibility. Remove.
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public boolean setDataFetchOperation(long configKey, PendingIntent pendingIntent) {
try {
setFetchReportsOperation(pendingIntent, configKey);
@@ -270,15 +289,17 @@
* @return Serialized ConfigMetricsReportList proto.
* @throws StatsUnavailableException if unsuccessful due to failing to connect to stats service
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public byte[] getReports(long configKey) throws StatsUnavailableException {
synchronized (this) {
try {
IStatsManager service = getIStatsManagerLocked();
- return service.getData(configKey);
+ return service.getData(configKey, mContext.getOpPackageName());
} catch (RemoteException e) {
Slog.e(TAG, "Failed to connect to statsd when getting data");
throw new StatsUnavailableException("could not connect", e);
+ } catch (SecurityException e) {
+ throw new StatsUnavailableException(e.getMessage(), e);
}
}
}
@@ -286,7 +307,7 @@
/**
* TODO: Temporary for backwards compatibility. Remove.
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public @Nullable byte[] getData(long configKey) {
try {
return getReports(configKey);
@@ -303,15 +324,17 @@
* @return Serialized StatsdStatsReport proto.
* @throws StatsUnavailableException if unsuccessful due to failing to connect to stats service
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public byte[] getStatsMetadata() throws StatsUnavailableException {
synchronized (this) {
try {
IStatsManager service = getIStatsManagerLocked();
- return service.getMetadata();
+ return service.getMetadata(mContext.getOpPackageName());
} catch (RemoteException e) {
Slog.e(TAG, "Failed to connect to statsd when getting metadata");
throw new StatsUnavailableException("could not connect", e);
+ } catch (SecurityException e) {
+ throw new StatsUnavailableException(e.getMessage(), e);
}
}
}
@@ -323,7 +346,7 @@
*
* @return Serialized StatsdStatsReport proto. Returns null on failure (eg, if statsd crashed).
*/
- @RequiresPermission(Manifest.permission.DUMP)
+ @RequiresPermission(allOf = { DUMP, PACKAGE_USAGE_STATS })
public @Nullable byte[] getMetadata() {
try {
return getStatsMetadata();
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 246d4a3..db011da 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -458,11 +458,11 @@
}});
registerService(Context.STATS_MANAGER, StatsManager.class,
- new StaticServiceFetcher<StatsManager>() {
- @Override
- public StatsManager createService() throws ServiceNotFoundException {
- return new StatsManager();
- }});
+ new CachedServiceFetcher<StatsManager>() {
+ @Override
+ public StatsManager createService(ContextImpl ctx) {
+ return new StatsManager(ctx.getOuterContext());
+ }});
registerService(Context.STATUS_BAR_SERVICE, StatusBarManager.class,
new CachedServiceFetcher<StatusBarManager>() {
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index c491dcc..61aaad2 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -2758,8 +2758,7 @@
* Determine whether the current password the user has set is sufficient to meet the policy
* requirements (e.g. quality, minimum length) that have been requested by the admins of this
* user and its participating profiles. Restrictions on profiles that have a separate challenge
- * are not taken into account. The user must be unlocked in order to perform the check. The
- * password blacklist is not considered when checking sufficiency.
+ * are not taken into account. The user must be unlocked in order to perform the check.
* <p>
* The calling device admin must have requested
* {@link DeviceAdminInfo#USES_POLICY_LIMIT_PASSWORD} to be able to call this method; if it has
diff --git a/core/java/android/app/servertransaction/ActivityLifecycleItem.java b/core/java/android/app/servertransaction/ActivityLifecycleItem.java
index 7f8c50c..c9193a9 100644
--- a/core/java/android/app/servertransaction/ActivityLifecycleItem.java
+++ b/core/java/android/app/servertransaction/ActivityLifecycleItem.java
@@ -17,9 +17,7 @@
package android.app.servertransaction;
import android.annotation.IntDef;
-import android.os.Parcel;
-import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -28,7 +26,6 @@
* @hide
*/
public abstract class ActivityLifecycleItem extends ClientTransactionItem {
- private String mDescription;
@IntDef(prefix = { "UNDEFINED", "PRE_", "ON_" }, value = {
UNDEFINED,
@@ -57,43 +54,8 @@
@LifecycleState
public abstract int getTargetState();
-
- protected ActivityLifecycleItem() {
- }
-
- protected ActivityLifecycleItem(Parcel in) {
- mDescription = in.readString();
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeString(mDescription);
- }
-
- /**
- * Sets a description that can be retrieved later for debugging purposes.
- * @param description Description to set.
- * @return The {@link ActivityLifecycleItem}.
- */
- public ActivityLifecycleItem setDescription(String description) {
- mDescription = description;
- return this;
- }
-
- /**
- * Retrieves description if set through {@link #setDescription(String)}.
- */
- public String getDescription() {
- return mDescription;
- }
-
- void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + "target state:" + getTargetState());
- pw.println(prefix + "description: " + mDescription);
- }
-
+ /** Called by subclasses to make sure base implementation is cleaned up */
@Override
public void recycle() {
- setDescription(null);
}
}
diff --git a/core/java/android/app/servertransaction/ClientTransaction.java b/core/java/android/app/servertransaction/ClientTransaction.java
index fc07879..08ad2f0 100644
--- a/core/java/android/app/servertransaction/ClientTransaction.java
+++ b/core/java/android/app/servertransaction/ClientTransaction.java
@@ -26,7 +26,6 @@
import com.android.internal.annotations.VisibleForTesting;
-import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -238,12 +237,4 @@
result = 31 * result + Objects.hashCode(mLifecycleStateRequest);
return result;
}
-
- void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + "mActivityToken:" + mActivityToken.hashCode());
- pw.println(prefix + "mLifecycleStateRequest:");
- if (mLifecycleStateRequest != null) {
- mLifecycleStateRequest.dump(pw, prefix + " ");
- }
- }
}
diff --git a/core/java/android/app/servertransaction/DestroyActivityItem.java b/core/java/android/app/servertransaction/DestroyActivityItem.java
index 0edcf18..b443166 100644
--- a/core/java/android/app/servertransaction/DestroyActivityItem.java
+++ b/core/java/android/app/servertransaction/DestroyActivityItem.java
@@ -37,7 +37,7 @@
PendingTransactionActions pendingActions) {
Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityDestroy");
client.handleDestroyActivity(token, mFinished, mConfigChanges,
- false /* getNonConfigInstance */, getDescription());
+ false /* getNonConfigInstance */, "DestroyActivityItem");
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}
@@ -77,14 +77,12 @@
/** Write to Parcel. */
@Override
public void writeToParcel(Parcel dest, int flags) {
- super.writeToParcel(dest, flags);
dest.writeBoolean(mFinished);
dest.writeInt(mConfigChanges);
}
/** Read from Parcel. */
private DestroyActivityItem(Parcel in) {
- super(in);
mFinished = in.readBoolean();
mConfigChanges = in.readInt();
}
diff --git a/core/java/android/app/servertransaction/PauseActivityItem.java b/core/java/android/app/servertransaction/PauseActivityItem.java
index 65e4291..0c1eab5 100644
--- a/core/java/android/app/servertransaction/PauseActivityItem.java
+++ b/core/java/android/app/servertransaction/PauseActivityItem.java
@@ -115,7 +115,6 @@
/** Write to Parcel. */
@Override
public void writeToParcel(Parcel dest, int flags) {
- super.writeToParcel(dest, flags);
dest.writeBoolean(mFinished);
dest.writeBoolean(mUserLeaving);
dest.writeInt(mConfigChanges);
@@ -124,7 +123,6 @@
/** Read from Parcel. */
private PauseActivityItem(Parcel in) {
- super(in);
mFinished = in.readBoolean();
mUserLeaving = in.readBoolean();
mConfigChanges = in.readInt();
diff --git a/core/java/android/app/servertransaction/ResumeActivityItem.java b/core/java/android/app/servertransaction/ResumeActivityItem.java
index d16bc97..909eec7 100644
--- a/core/java/android/app/servertransaction/ResumeActivityItem.java
+++ b/core/java/android/app/servertransaction/ResumeActivityItem.java
@@ -115,7 +115,6 @@
/** Write to Parcel. */
@Override
public void writeToParcel(Parcel dest, int flags) {
- super.writeToParcel(dest, flags);
dest.writeInt(mProcState);
dest.writeBoolean(mUpdateProcState);
dest.writeBoolean(mIsForward);
@@ -123,7 +122,6 @@
/** Read from Parcel. */
private ResumeActivityItem(Parcel in) {
- super(in);
mProcState = in.readInt();
mUpdateProcState = in.readBoolean();
mIsForward = in.readBoolean();
diff --git a/core/java/android/app/servertransaction/StopActivityItem.java b/core/java/android/app/servertransaction/StopActivityItem.java
index 8db38d3..87db206 100644
--- a/core/java/android/app/servertransaction/StopActivityItem.java
+++ b/core/java/android/app/servertransaction/StopActivityItem.java
@@ -85,14 +85,12 @@
/** Write to Parcel. */
@Override
public void writeToParcel(Parcel dest, int flags) {
- super.writeToParcel(dest, flags);
dest.writeBoolean(mShowWindow);
dest.writeInt(mConfigChanges);
}
/** Read from Parcel. */
private StopActivityItem(Parcel in) {
- super(in);
mShowWindow = in.readBoolean();
mConfigChanges = in.readInt();
}
diff --git a/core/java/android/app/servertransaction/TransactionExecutor.java b/core/java/android/app/servertransaction/TransactionExecutor.java
index 553c3ae..5c803a5 100644
--- a/core/java/android/app/servertransaction/TransactionExecutor.java
+++ b/core/java/android/app/servertransaction/TransactionExecutor.java
@@ -34,8 +34,6 @@
import com.android.internal.annotations.VisibleForTesting;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.List;
/**
@@ -135,20 +133,7 @@
final IBinder token = transaction.getActivityToken();
final ActivityClientRecord r = mTransactionHandler.getActivityClient(token);
- // TODO(b/71506345): Remove once root cause is found.
if (r == null) {
- final StringWriter stringWriter = new StringWriter();
- final PrintWriter pw = new PrintWriter(stringWriter);
- final String prefix = " ";
-
- pw.println("Lifecycle transaction does not have valid ActivityClientRecord.");
- pw.println("Transaction:");
- transaction.dump(pw, prefix);
- pw.println("Executor:");
- dump(pw, prefix);
-
- Slog.w(TAG, stringWriter.toString());
-
// Ignore requests for non-existent client records for now.
return;
}
@@ -224,9 +209,4 @@
private static void log(String message) {
if (DEBUG_RESOLVER) Slog.d(TAG, message);
}
-
- private void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + "mTransactionHandler:");
- mTransactionHandler.dump(pw, prefix + " ");
- }
}
diff --git a/core/java/android/content/IContentService.aidl b/core/java/android/content/IContentService.aidl
index c500116..dc17666 100644
--- a/core/java/android/content/IContentService.aidl
+++ b/core/java/android/content/IContentService.aidl
@@ -183,4 +183,6 @@
void putCache(in String packageName, in Uri key, in Bundle value, int userId);
Bundle getCache(in String packageName, in Uri key, int userId);
+
+ void resetTodayStats();
}
diff --git a/core/java/android/content/SyncStatusInfo.java b/core/java/android/content/SyncStatusInfo.java
index abf9cc9..ded11cfd 100644
--- a/core/java/android/content/SyncStatusInfo.java
+++ b/core/java/android/content/SyncStatusInfo.java
@@ -21,23 +21,97 @@
import android.util.Log;
import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
/** @hide */
public class SyncStatusInfo implements Parcelable {
private static final String TAG = "Sync";
- static final int VERSION = 4;
+ static final int VERSION = 5;
private static final int MAX_EVENT_COUNT = 10;
public final int authorityId;
- public long totalElapsedTime;
- public int numSyncs;
- public int numSourcePoll;
- public int numSourceServer;
- public int numSourceLocal;
- public int numSourceUser;
- public int numSourcePeriodic;
+
+ /**
+ * # of syncs for each sync source, etc.
+ */
+ public static class Stats {
+ public long totalElapsedTime;
+ public int numSyncs;
+ public int numSourcePoll;
+ public int numSourceOther;
+ public int numSourceLocal;
+ public int numSourceUser;
+ public int numSourcePeriodic;
+ public int numSourceFeed;
+ public int numFailures;
+ public int numCancels;
+
+ /** Copy all the stats to another instance. */
+ public void copyTo(Stats to) {
+ to.totalElapsedTime = totalElapsedTime;
+ to.numSyncs = numSyncs;
+ to.numSourcePoll = numSourcePoll;
+ to.numSourceOther = numSourceOther;
+ to.numSourceLocal = numSourceLocal;
+ to.numSourceUser = numSourceUser;
+ to.numSourcePeriodic = numSourcePeriodic;
+ to.numSourceFeed = numSourceFeed;
+ to.numFailures = numFailures;
+ to.numCancels = numCancels;
+ }
+
+ /** Clear all the stats. */
+ public void clear() {
+ totalElapsedTime = 0;
+ numSyncs = 0;
+ numSourcePoll = 0;
+ numSourceOther = 0;
+ numSourceLocal = 0;
+ numSourceUser = 0;
+ numSourcePeriodic = 0;
+ numSourceFeed = 0;
+ numFailures = 0;
+ numCancels = 0;
+ }
+
+ /** Write all the stats to a parcel. */
+ public void writeToParcel(Parcel parcel) {
+ parcel.writeLong(totalElapsedTime);
+ parcel.writeInt(numSyncs);
+ parcel.writeInt(numSourcePoll);
+ parcel.writeInt(numSourceOther);
+ parcel.writeInt(numSourceLocal);
+ parcel.writeInt(numSourceUser);
+ parcel.writeInt(numSourcePeriodic);
+ parcel.writeInt(numSourceFeed);
+ parcel.writeInt(numFailures);
+ parcel.writeInt(numCancels);
+ }
+
+ /** Read all the stats from a parcel. */
+ public void readFromParcel(Parcel parcel) {
+ totalElapsedTime = parcel.readLong();
+ numSyncs = parcel.readInt();
+ numSourcePoll = parcel.readInt();
+ numSourceOther = parcel.readInt();
+ numSourceLocal = parcel.readInt();
+ numSourceUser = parcel.readInt();
+ numSourcePeriodic = parcel.readInt();
+ numSourceFeed = parcel.readInt();
+ numFailures = parcel.readInt();
+ numCancels = parcel.readInt();
+ }
+ }
+
+ public long lastTodayResetTime;
+
+ public final Stats totalStats = new Stats();
+ public final Stats todayStats = new Stats();
+ public final Stats yesterdayStats = new Stats();
+
public long lastSuccessTime;
public int lastSuccessSource;
public long lastFailureTime;
@@ -75,12 +149,15 @@
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(VERSION);
parcel.writeInt(authorityId);
- parcel.writeLong(totalElapsedTime);
- parcel.writeInt(numSyncs);
- parcel.writeInt(numSourcePoll);
- parcel.writeInt(numSourceServer);
- parcel.writeInt(numSourceLocal);
- parcel.writeInt(numSourceUser);
+
+ // Note we can't use Stats.writeToParcel() here; see the below constructor for the reason.
+ parcel.writeLong(totalStats.totalElapsedTime);
+ parcel.writeInt(totalStats.numSyncs);
+ parcel.writeInt(totalStats.numSourcePoll);
+ parcel.writeInt(totalStats.numSourceOther);
+ parcel.writeInt(totalStats.numSourceLocal);
+ parcel.writeInt(totalStats.numSourceUser);
+
parcel.writeLong(lastSuccessTime);
parcel.writeInt(lastSuccessSource);
parcel.writeLong(lastFailureTime);
@@ -102,7 +179,18 @@
parcel.writeLong(mLastEventTimes.get(i));
parcel.writeString(mLastEvents.get(i));
}
- parcel.writeInt(numSourcePeriodic);
+ // Version 4
+ parcel.writeInt(totalStats.numSourcePeriodic);
+
+ // Version 5
+ parcel.writeInt(totalStats.numSourceFeed);
+ parcel.writeInt(totalStats.numFailures);
+ parcel.writeInt(totalStats.numCancels);
+
+ parcel.writeLong(lastTodayResetTime);
+
+ todayStats.writeToParcel(parcel);
+ yesterdayStats.writeToParcel(parcel);
}
public SyncStatusInfo(Parcel parcel) {
@@ -111,12 +199,15 @@
Log.w("SyncStatusInfo", "Unknown version: " + version);
}
authorityId = parcel.readInt();
- totalElapsedTime = parcel.readLong();
- numSyncs = parcel.readInt();
- numSourcePoll = parcel.readInt();
- numSourceServer = parcel.readInt();
- numSourceLocal = parcel.readInt();
- numSourceUser = parcel.readInt();
+
+ // Note we can't use Stats.writeToParcel() here because the data is persisted and we need
+ // to be able to read from the old format too.
+ totalStats.totalElapsedTime = parcel.readLong();
+ totalStats.numSyncs = parcel.readInt();
+ totalStats.numSourcePoll = parcel.readInt();
+ totalStats.numSourceOther = parcel.readInt();
+ totalStats.numSourceLocal = parcel.readInt();
+ totalStats.numSourceUser = parcel.readInt();
lastSuccessTime = parcel.readLong();
lastSuccessSource = parcel.readInt();
lastFailureTime = parcel.readLong();
@@ -149,25 +240,37 @@
}
if (version < 4) {
// Before version 4, numSourcePeriodic wasn't persisted.
- numSourcePeriodic = numSyncs - numSourceLocal - numSourcePoll - numSourceServer
- - numSourceUser;
- if (numSourcePeriodic < 0) { // Sanity check.
- numSourcePeriodic = 0;
+ totalStats.numSourcePeriodic =
+ totalStats.numSyncs - totalStats.numSourceLocal - totalStats.numSourcePoll
+ - totalStats.numSourceOther
+ - totalStats.numSourceUser;
+ if (totalStats.numSourcePeriodic < 0) { // Sanity check.
+ totalStats.numSourcePeriodic = 0;
}
} else {
- numSourcePeriodic = parcel.readInt();
+ totalStats.numSourcePeriodic = parcel.readInt();
+ }
+ if (version >= 5) {
+ totalStats.numSourceFeed = parcel.readInt();
+ totalStats.numFailures = parcel.readInt();
+ totalStats.numCancels = parcel.readInt();
+
+ lastTodayResetTime = parcel.readLong();
+
+ todayStats.readFromParcel(parcel);
+ yesterdayStats.readFromParcel(parcel);
}
}
public SyncStatusInfo(SyncStatusInfo other) {
authorityId = other.authorityId;
- totalElapsedTime = other.totalElapsedTime;
- numSyncs = other.numSyncs;
- numSourcePoll = other.numSourcePoll;
- numSourceServer = other.numSourceServer;
- numSourceLocal = other.numSourceLocal;
- numSourceUser = other.numSourceUser;
- numSourcePeriodic = other.numSourcePeriodic;
+
+ other.totalStats.copyTo(totalStats);
+ other.todayStats.copyTo(todayStats);
+ other.yesterdayStats.copyTo(yesterdayStats);
+
+ lastTodayResetTime = other.lastTodayResetTime;
+
lastSuccessTime = other.lastSuccessTime;
lastSuccessSource = other.lastSuccessSource;
lastFailureTime = other.lastFailureTime;
@@ -251,4 +354,41 @@
}
}
}
+
+ /**
+ * If the last reset was not not today, move today's stats to yesterday's and clear today's.
+ */
+ public void maybeResetTodayStats(boolean clockValid, boolean force) {
+ final long now = System.currentTimeMillis();
+
+ if (!force) {
+ // Last reset was the same day, nothing to do.
+ if (areSameDates(now, lastTodayResetTime)) {
+ return;
+ }
+
+ // Hack -- on devices with no RTC, until the NTP kicks in, the device won't have the
+ // correct time. So if the time goes back, don't reset, unless we're sure the current
+ // time is correct.
+ if (now < lastTodayResetTime && !clockValid) {
+ return;
+ }
+ }
+
+ lastTodayResetTime = now;
+
+ todayStats.copyTo(yesterdayStats);
+ todayStats.clear();
+ }
+
+ private static boolean areSameDates(long time1, long time2) {
+ final Calendar c1 = new GregorianCalendar();
+ final Calendar c2 = new GregorianCalendar();
+
+ c1.setTimeInMillis(time1);
+ c2.setTimeInMillis(time2);
+
+ return c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)
+ && c1.get(Calendar.DAY_OF_YEAR) == c2.get(Calendar.DAY_OF_YEAR);
+ }
}
\ No newline at end of file
diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java
index 5f9f8f1..5d8122f 100644
--- a/core/java/android/content/pm/PackageInfo.java
+++ b/core/java/android/content/pm/PackageInfo.java
@@ -250,7 +250,7 @@
* reported signing certificate, so that an application will appear to
* callers as though no rotation occurred.
*
- * @deprecated use {@code signingCertificateHistory} instead
+ * @deprecated use {@code signingInfo} instead
*/
@Deprecated
public Signature[] signatures;
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 9d3b53f..db93e17 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -3355,7 +3355,7 @@
@ComponentInfoFlags int flags) throws NameNotFoundException;
/**
- * Return a List of all packages that are installed on the device.
+ * Return a List of all packages that are installed for the current user.
*
* @param flags Additional option flags to modify the data returned.
* @return A List of PackageInfo objects, one for each installed package,
@@ -3742,8 +3742,8 @@
throws NameNotFoundException;
/**
- * Return a List of all application packages that are installed on the
- * device. If flag GET_UNINSTALLED_PACKAGES has been set, a list of all
+ * Return a List of all application packages that are installed for the
+ * current user. If flag GET_UNINSTALLED_PACKAGES has been set, a list of all
* applications including those deleted with {@code DONT_DELETE_DATA}
* (partially installed apps with data directory) will be returned.
*
@@ -6101,7 +6101,7 @@
* case of packages that are signed by multiple certificates, for which signing certificate
* rotation is not supported. This method is analogous to using {@code getPackageInfo} with
* {@code GET_SIGNING_CERTIFICATES} and then searching through the resulting {@code
- * signingCertificateHistory} field to see if the desired certificate is present.
+ * signingInfo} field to see if the desired certificate is present.
*
* @param packageName package whose signing certificates to check
* @param certificate signing certificate for which to search
@@ -6125,7 +6125,7 @@
* rotation is not supported. This method is analogous to using {@code getPackagesForUid}
* followed by {@code getPackageInfo} with {@code GET_SIGNING_CERTIFICATES}, selecting the
* {@code PackageInfo} of the newest-signed bpackage , and finally searching through the
- * resulting {@code signingCertificateHistory} field to see if the desired certificate is there.
+ * resulting {@code signingInfo} field to see if the desired certificate is there.
*
* @param uid uid whose signing certificates to check
* @param certificate signing certificate for which to search
diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java
index 1a5d3ac..262de15 100644
--- a/core/java/android/hardware/camera2/CameraMetadata.java
+++ b/core/java/android/hardware/camera2/CameraMetadata.java
@@ -864,7 +864,7 @@
/**
* <p>The camera device is a monochrome camera that doesn't contain a color filter array,
- * and the pixel values on U and Y planes are all 128.</p>
+ * and the pixel values on U and V planes are all 128.</p>
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
*/
public static final int REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME = 12;
diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java
index 6546c39..75fd77e 100644
--- a/core/java/android/net/NetworkPolicyManager.java
+++ b/core/java/android/net/NetworkPolicyManager.java
@@ -270,8 +270,12 @@
@Override
public Pair<ZonedDateTime, ZonedDateTime> next() {
- final Range<ZonedDateTime> r = it.next();
- return Pair.create(r.getLower(), r.getUpper());
+ if (hasNext()) {
+ final Range<ZonedDateTime> r = it.next();
+ return Pair.create(r.getLower(), r.getUpper());
+ } else {
+ return Pair.create(null, null);
+ }
}
};
}
diff --git a/core/java/android/os/IPermissionController.aidl b/core/java/android/os/IPermissionController.aidl
index 3de953a..dd11d49 100644
--- a/core/java/android/os/IPermissionController.aidl
+++ b/core/java/android/os/IPermissionController.aidl
@@ -20,6 +20,7 @@
/** @hide */
interface IPermissionController {
boolean checkPermission(String permission, int pid, int uid);
+ int noteOp(String op, int uid, String packageName);
String[] getPackagesForUid(int uid);
boolean isRuntimePermission(String permission);
int getPackageUid(String packageName, int flags);
diff --git a/core/java/android/os/IStatsCompanionService.aidl b/core/java/android/os/IStatsCompanionService.aidl
index 116262e..dde46cd 100644
--- a/core/java/android/os/IStatsCompanionService.aidl
+++ b/core/java/android/os/IStatsCompanionService.aidl
@@ -66,7 +66,7 @@
StatsLogEventWrapper[] pullData(int pullCode);
/** Send a broadcast to the specified PendingIntent's as IBinder that it should getData now. */
- oneway void sendDataBroadcast(in IBinder intentSender);
+ oneway void sendDataBroadcast(in IBinder intentSender, long lastReportTimeNs);
/**
* Requests StatsCompanionService to send a broadcast using the given intentSender
diff --git a/core/java/android/os/IStatsManager.aidl b/core/java/android/os/IStatsManager.aidl
index 3b32c52..6b3b93a 100644
--- a/core/java/android/os/IStatsManager.aidl
+++ b/core/java/android/os/IStatsManager.aidl
@@ -80,14 +80,14 @@
*
* Requires Manifest.permission.DUMP.
*/
- byte[] getData(in long key);
+ byte[] getData(in long key, in String packageName);
/**
* Fetches metadata across statsd. Returns byte array representing wire-encoded proto.
*
* Requires Manifest.permission.DUMP.
*/
- byte[] getMetadata();
+ byte[] getMetadata(in String packageName);
/**
* Sets a configuration with the specified config key and subscribes to updates for this
@@ -97,7 +97,7 @@
*
* Requires Manifest.permission.DUMP.
*/
- void addConfiguration(in long configKey, in byte[] config);
+ void addConfiguration(in long configKey, in byte[] config, in String packageName);
/**
* Registers the given pending intent for this config key. This intent is invoked when the
@@ -106,14 +106,14 @@
*
* Requires Manifest.permission.DUMP.
*/
- void setDataFetchOperation(long configKey, in IBinder intentSender);
+ void setDataFetchOperation(long configKey, in IBinder intentSender, in String packageName);
/**
* Removes the data fetch operation for the specified configuration.
*
* Requires Manifest.permission.DUMP.
*/
- void removeDataFetchOperation(long configKey);
+ void removeDataFetchOperation(long configKey, in String packageName);
/**
* Removes the configuration with the matching config key. No-op if this config key does not
@@ -121,7 +121,7 @@
*
* Requires Manifest.permission.DUMP.
*/
- void removeConfiguration(in long configKey);
+ void removeConfiguration(in long configKey, in String packageName);
/**
* Set the IIntentSender (i.e. PendingIntent) to be used when broadcasting subscriber
@@ -141,7 +141,8 @@
*
* Requires Manifest.permission.DUMP.
*/
- void setBroadcastSubscriber(long configKey, long subscriberId, in IBinder intentSender);
+ void setBroadcastSubscriber(long configKey, long subscriberId, in IBinder intentSender,
+ in String packageName);
/**
* Undoes setBroadcastSubscriber() for the (configKey, subscriberId) pair.
@@ -150,5 +151,5 @@
*
* Requires Manifest.permission.DUMP.
*/
- void unsetBroadcastSubscriber(long configKey, long subscriberId);
+ void unsetBroadcastSubscriber(long configKey, long subscriberId, in String packageName);
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 5b7adf0..6ef1234 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -142,6 +142,22 @@
"android.settings.LOCATION_SOURCE_SETTINGS";
/**
+ * Activity Action: Show scanning settings to allow configuration of Wi-Fi
+ * and Bluetooth scanning settings.
+ * <p>
+ * In some cases, a matching Activity may not exist, so ensure you
+ * safeguard against this.
+ * <p>
+ * Input: Nothing.
+ * <p>
+ * Output: Nothing.
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_LOCATION_SCANNING_SETTINGS =
+ "android.settings.LOCATION_SCANNING_SETTINGS";
+
+ /**
* Activity Action: Show settings to allow configuration of users.
* <p>
* In some cases, a matching Activity may not exist, so ensure you
diff --git a/core/java/android/security/keystore/recovery/KeyChainSnapshot.java b/core/java/android/security/keystore/recovery/KeyChainSnapshot.java
index 54f82f9..c748c87 100644
--- a/core/java/android/security/keystore/recovery/KeyChainSnapshot.java
+++ b/core/java/android/security/keystore/recovery/KeyChainSnapshot.java
@@ -71,7 +71,6 @@
private int mMaxAttempts = DEFAULT_MAX_ATTEMPTS;
private long mCounterId = DEFAULT_COUNTER_ID;
private byte[] mServerParams;
- private byte[] mPublicKey; // The raw public key bytes used
private RecoveryCertPath mCertPath; // The cert path including necessary intermediate certs
private List<KeyChainProtectionParams> mKeyChainProtectionParams;
private List<WrappedApplicationKey> mEntryRecoveryData;
@@ -123,7 +122,7 @@
*/
@Deprecated
public @NonNull byte[] getTrustedHardwarePublicKey() {
- return mPublicKey;
+ throw new UnsupportedOperationException();
}
/**
@@ -228,12 +227,11 @@
*
* @param publicKey The public key
* @return This builder.
- * @deprecated Use {@link #setTrustedHardwareCertPath} instead.
+ * @removed Use {@link #setTrustedHardwareCertPath} instead.
*/
@Deprecated
public Builder setTrustedHardwarePublicKey(byte[] publicKey) {
- mInstance.mPublicKey = publicKey;
- return this;
+ throw new UnsupportedOperationException();
}
/**
@@ -313,7 +311,6 @@
out.writeInt(mMaxAttempts);
out.writeLong(mCounterId);
out.writeByteArray(mServerParams);
- out.writeByteArray(mPublicKey);
out.writeTypedObject(mCertPath, /* no flags */ 0);
}
@@ -328,7 +325,6 @@
mMaxAttempts = in.readInt();
mCounterId = in.readLong();
mServerParams = in.createByteArray();
- mPublicKey = in.createByteArray();
mCertPath = in.readTypedObject(RecoveryCertPath.CREATOR);
}
diff --git a/core/java/android/security/keystore/recovery/RecoveryController.java b/core/java/android/security/keystore/recovery/RecoveryController.java
index fa4964d..70054fc 100644
--- a/core/java/android/security/keystore/recovery/RecoveryController.java
+++ b/core/java/android/security/keystore/recovery/RecoveryController.java
@@ -309,17 +309,7 @@
public void initRecoveryService(
@NonNull String rootCertificateAlias, @NonNull byte[] signedPublicKeyList)
throws CertificateException, InternalRecoveryServiceException {
- try {
- mBinder.initRecoveryService(rootCertificateAlias, signedPublicKeyList);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- } catch (ServiceSpecificException e) {
- if (e.errorCode == ERROR_BAD_CERTIFICATE_FORMAT
- || e.errorCode == ERROR_INVALID_CERTIFICATE) {
- throw new CertificateException("Invalid certificate for recovery service", e);
- }
- throw wrapUnexpectedServiceSpecificException(e);
- }
+ throw new UnsupportedOperationException();
}
/**
@@ -379,7 +369,7 @@
@Deprecated
@RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE)
public @Nullable KeyChainSnapshot getRecoveryData() throws InternalRecoveryServiceException {
- return getKeyChainSnapshot();
+ throw new UnsupportedOperationException();
}
/**
@@ -457,7 +447,7 @@
@RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE)
public List<String> getAliases(@Nullable String packageName)
throws InternalRecoveryServiceException {
- return getAliases();
+ throw new UnsupportedOperationException();
}
/**
@@ -484,7 +474,7 @@
public void setRecoveryStatus(
@NonNull String packageName, String alias, int status)
throws NameNotFoundException, InternalRecoveryServiceException {
- setRecoveryStatus(alias, status);
+ throw new UnsupportedOperationException();
}
/**
@@ -518,7 +508,7 @@
@RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE)
public int getRecoveryStatus(String packageName, String alias)
throws InternalRecoveryServiceException {
- return getRecoveryStatus(alias);
+ throw new UnsupportedOperationException();
}
/**
@@ -623,7 +613,7 @@
@RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE)
public Key generateKey(@NonNull String alias, byte[] account)
throws InternalRecoveryServiceException, LockScreenRequiredException {
- return generateKey(alias);
+ throw new UnsupportedOperationException();
}
/**
diff --git a/core/java/android/security/keystore/recovery/RecoverySession.java b/core/java/android/security/keystore/recovery/RecoverySession.java
index dc2961b..3bb6421 100644
--- a/core/java/android/security/keystore/recovery/RecoverySession.java
+++ b/core/java/android/security/keystore/recovery/RecoverySession.java
@@ -89,24 +89,7 @@
@NonNull byte[] vaultChallenge,
@NonNull List<KeyChainProtectionParams> secrets)
throws CertificateException, InternalRecoveryServiceException {
- try {
- byte[] recoveryClaim =
- mRecoveryController.getBinder().startRecoverySession(
- mSessionId,
- verifierPublicKey,
- vaultParams,
- vaultChallenge,
- secrets);
- return recoveryClaim;
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- } catch (ServiceSpecificException e) {
- if (e.errorCode == RecoveryController.ERROR_BAD_CERTIFICATE_FORMAT
- || e.errorCode == RecoveryController.ERROR_INVALID_CERTIFICATE) {
- throw new CertificateException("Invalid certificate for recovery session", e);
- }
- throw mRecoveryController.wrapUnexpectedServiceSpecificException(e);
- }
+ throw new UnsupportedOperationException();
}
/**
@@ -121,28 +104,7 @@
@NonNull byte[] vaultChallenge,
@NonNull List<KeyChainProtectionParams> secrets)
throws CertificateException, InternalRecoveryServiceException {
- // Wrap the CertPath in a Parcelable so it can be passed via Binder calls.
- RecoveryCertPath recoveryCertPath =
- RecoveryCertPath.createRecoveryCertPath(verifierCertPath);
- try {
- byte[] recoveryClaim =
- mRecoveryController.getBinder().startRecoverySessionWithCertPath(
- mSessionId,
- /*rootCertificateAlias=*/ "", // Use the default root cert
- recoveryCertPath,
- vaultParams,
- vaultChallenge,
- secrets);
- return recoveryClaim;
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- } catch (ServiceSpecificException e) {
- if (e.errorCode == RecoveryController.ERROR_BAD_CERTIFICATE_FORMAT
- || e.errorCode == RecoveryController.ERROR_INVALID_CERTIFICATE) {
- throw new CertificateException("Invalid certificate for recovery session", e);
- }
- throw mRecoveryController.wrapUnexpectedServiceSpecificException(e);
- }
+ throw new UnsupportedOperationException();
}
/**
@@ -210,20 +172,7 @@
@NonNull List<WrappedApplicationKey> applicationKeys)
throws SessionExpiredException, DecryptionFailedException,
InternalRecoveryServiceException {
- try {
- return (Map<String, byte[]>) mRecoveryController.getBinder().recoverKeys(
- mSessionId, recoveryKeyBlob, applicationKeys);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- } catch (ServiceSpecificException e) {
- if (e.errorCode == RecoveryController.ERROR_DECRYPTION_FAILED) {
- throw new DecryptionFailedException(e.getMessage());
- }
- if (e.errorCode == RecoveryController.ERROR_SESSION_EXPIRED) {
- throw new SessionExpiredException(e.getMessage());
- }
- throw mRecoveryController.wrapUnexpectedServiceSpecificException(e);
- }
+ throw new UnsupportedOperationException();
}
/**
diff --git a/core/java/android/security/keystore/recovery/WrappedApplicationKey.java b/core/java/android/security/keystore/recovery/WrappedApplicationKey.java
index 7f81d04..187a671 100644
--- a/core/java/android/security/keystore/recovery/WrappedApplicationKey.java
+++ b/core/java/android/security/keystore/recovery/WrappedApplicationKey.java
@@ -80,7 +80,7 @@
*/
@Deprecated
public Builder setAccount(@NonNull byte[] account) {
- return this;
+ throw new UnsupportedOperationException();
}
/**
@@ -139,7 +139,7 @@
*/
@Deprecated
public @NonNull byte[] getAccount() {
- return new byte[0];
+ throw new UnsupportedOperationException();
}
public static final Parcelable.Creator<WrappedApplicationKey> CREATOR =
diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java
index eecdb74..b13f831 100644
--- a/core/java/android/util/FeatureFlagUtils.java
+++ b/core/java/android/util/FeatureFlagUtils.java
@@ -42,7 +42,7 @@
DEFAULT_FLAGS.put("settings_about_phone_v2", "true");
DEFAULT_FLAGS.put("settings_bluetooth_while_driving", "false");
DEFAULT_FLAGS.put("settings_data_usage_v2", "true");
- DEFAULT_FLAGS.put("settings_audio_switcher", "false");
+ DEFAULT_FLAGS.put("settings_audio_switcher", "true");
}
/**
diff --git a/core/java/android/util/MathUtils.java b/core/java/android/util/MathUtils.java
index e865b6e..b2e24c3 100644
--- a/core/java/android/util/MathUtils.java
+++ b/core/java/android/util/MathUtils.java
@@ -56,6 +56,10 @@
return (float) Math.pow(a, b);
}
+ public static float sqrt(float a) {
+ return (float) Math.sqrt(a);
+ }
+
public static float max(float a, float b) {
return a > b ? a : b;
}
diff --git a/core/java/android/view/DisplayCutout.java b/core/java/android/view/DisplayCutout.java
index f59c0b5..47bda53 100644
--- a/core/java/android/view/DisplayCutout.java
+++ b/core/java/android/view/DisplayCutout.java
@@ -16,6 +16,8 @@
package android.view;
+import static android.util.DisplayMetrics.DENSITY_DEFAULT;
+import static android.util.DisplayMetrics.DENSITY_DEVICE_STABLE;
import static android.view.DisplayCutoutProto.BOUNDS;
import static android.view.DisplayCutoutProto.INSETS;
@@ -358,7 +360,7 @@
*/
public static DisplayCutout fromResources(Resources res, int displayWidth, int displayHeight) {
return fromSpec(res.getString(R.string.config_mainBuiltInDisplayCutout),
- displayWidth, displayHeight, res.getDisplayMetrics().density);
+ displayWidth, displayHeight, DENSITY_DEVICE_STABLE / (float) DENSITY_DEFAULT);
}
/**
@@ -368,7 +370,7 @@
*/
public static Path pathFromResources(Resources res, int displayWidth, int displayHeight) {
return pathAndDisplayCutoutFromSpec(res.getString(R.string.config_mainBuiltInDisplayCutout),
- displayWidth, displayHeight, res.getDisplayMetrics().density).first;
+ displayWidth, displayHeight, DENSITY_DEVICE_STABLE / (float) DENSITY_DEFAULT).first;
}
/**
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 937e9f4..730c372 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1334,7 +1334,6 @@
if (renderer != null) {
renderer.destroyHardwareResources(mView);
}
- mSurface.release();
}
for (int i = 0; i < mWindowStoppedCallbacks.size(); i++) {
diff --git a/core/java/com/android/internal/util/DumpUtils.java b/core/java/com/android/internal/util/DumpUtils.java
index 2b51033..e85b782 100644
--- a/core/java/com/android/internal/util/DumpUtils.java
+++ b/core/java/com/android/internal/util/DumpUtils.java
@@ -122,7 +122,7 @@
final String[] pkgs = context.getPackageManager().getPackagesForUid(uid);
if (pkgs != null) {
for (String pkg : pkgs) {
- switch (appOps.checkOpNoThrow(AppOpsManager.OP_GET_USAGE_STATS, uid, pkg)) {
+ switch (appOps.noteOpNoThrow(AppOpsManager.OP_GET_USAGE_STATS, uid, pkg)) {
case AppOpsManager.MODE_ALLOWED:
if (DEBUG) Slog.v(TAG, "Found package " + pkg + " with "
+ "android:get_usage_stats allowed");
diff --git a/core/java/com/android/internal/widget/ILockSettings.aidl b/core/java/com/android/internal/widget/ILockSettings.aidl
index ae7ba19..7e63adc 100644
--- a/core/java/com/android/internal/widget/ILockSettings.aidl
+++ b/core/java/com/android/internal/widget/ILockSettings.aidl
@@ -57,7 +57,6 @@
// Keystore RecoveryController methods.
// {@code ServiceSpecificException} may be thrown to signal an error, which caller can
// convert to {@code RecoveryManagerException}.
- void initRecoveryService(in String rootCertificateAlias, in byte[] signedPublicKeyList);
void initRecoveryServiceWithSigFile(in String rootCertificateAlias,
in byte[] recoveryServiceCertFile, in byte[] recoveryServiceSigFile);
KeyChainSnapshot getKeyChainSnapshot();
@@ -71,14 +70,9 @@
Map getRecoveryStatus();
void setRecoverySecretTypes(in int[] secretTypes);
int[] getRecoverySecretTypes();
- byte[] startRecoverySession(in String sessionId,
- in byte[] verifierPublicKey, in byte[] vaultParams, in byte[] vaultChallenge,
- in List<KeyChainProtectionParams> secrets);
byte[] startRecoverySessionWithCertPath(in String sessionId, in String rootCertificateAlias,
in RecoveryCertPath verifierCertPath, in byte[] vaultParams, in byte[] vaultChallenge,
in List<KeyChainProtectionParams> secrets);
- Map/*<String, byte[]>*/ recoverKeys(in String sessionId, in byte[] recoveryKeyBlob,
- in List<WrappedApplicationKey> applicationKeys);
Map/*<String, String>*/ recoverKeyChainSnapshot(
in String sessionId,
in byte[] recoveryKeyBlob,
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 3f58afa..5b4b5f2 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -877,8 +877,12 @@
SurfaceComposerClient::getHdrCapabilities(token, &capabilities);
const auto& types = capabilities.getSupportedHdrTypes();
+ std::vector<int32_t> intTypes;
+ for (auto type : types) {
+ intTypes.push_back(static_cast<int32_t>(type));
+ }
auto typesArray = env->NewIntArray(types.size());
- env->SetIntArrayRegion(typesArray, 0, types.size(), types.data());
+ env->SetIntArrayRegion(typesArray, 0, intTypes.size(), intTypes.data());
return env->NewObject(gHdrCapabilitiesClassInfo.clazz, gHdrCapabilitiesClassInfo.ctor,
typesArray, capabilities.getDesiredMaxLuminance(),
diff --git a/core/proto/android/os/enums.proto b/core/proto/android/os/enums.proto
index aa99ac7..db4a4c4 100644
--- a/core/proto/android/os/enums.proto
+++ b/core/proto/android/os/enums.proto
@@ -60,7 +60,7 @@
// They are primarily used by android/os/HardwarePropertiesManager.java.
// Any change to the types in the thermal hal should be made here as well.
enum TemperatureTypeEnum {
- TEMPERATURE_TYPE_UKNOWN = -1;
+ TEMPERATURE_TYPE_UNKNOWN = -1;
TEMPERATURE_TYPE_CPU = 0;
TEMPERATURE_TYPE_GPU = 1;
TEMPERATURE_TYPE_BATTERY = 2;
diff --git a/core/res/res/drawable/ic_instant_icon_badge_bolt.xml b/core/res/res/drawable/ic_instant_icon_badge_bolt.xml
index 08512b7..f8fe2f8 100644
--- a/core/res/res/drawable/ic_instant_icon_badge_bolt.xml
+++ b/core/res/res/drawable/ic_instant_icon_badge_bolt.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2017 The Android Open Source Project
@@ -14,16 +15,21 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="64.0dp"
- android:height="64.0dp"
- android:viewportWidth="64.0"
- android:viewportHeight="64.0">
+ android:width="64dp"
+ android:height="64dp"
+ android:viewportWidth="64"
+ android:viewportHeight="64">
- <!--
- The path is similar to ic_corp_icon_badge_case, such that it positions on top of
- ic_corp_icon_badge_shadow.
- -->
+ <group
+ android:translateX="45.500000"
+ android:translateY="42.000000">
+ <path
+ android:fillColor="#757575"
+ android:strokeWidth="1"
+ android:pathData="M 0.685714286 9.82857143 L 3.73333333 9.82857143 L 3.73333333 15.9238095 L 8.3047619 6.78095238 L 5.25714286 6.78095238 L 5.25714286 0.685714286 Z" />
+ </group>
<path
- android:pathData="M43.9 50.9h4v8l6-12h-4v-8l-6 12z"
- android:fillColor="#757575"/>
-</vector>
+ android:fillType="evenOdd"
+ android:strokeWidth="1"
+ android:pathData="M 0 0 H 64 V 64 H 0 V 0 Z" />
+</vector>
\ No newline at end of file
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 634012f..9f727e1 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tik om te kyk wat geblokkeer word."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Stelsel"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Instellings"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index ce87e57..4ff6c3f 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"ምን እንደታገደ ለመፈተሽ መታ ያድርጉ።"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ሥርዓት"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ቅንብሮች"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index df0aac7..f2d656e 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -310,13 +310,13 @@
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"الوصول إلى بيانات المستشعر حول علاماتك الحيوية"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالدخول إلى بيانات المستشعر حول علاماتك الحيوية؟"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"استرداد محتوى النافذة"</string>
- <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"فحص محتوى نافذة يتم التفاعل معها."</string>
+ <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"فحص محتوى نافذة يتم التفاعل معها"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"تشغيل الاستكشاف باللمس"</string>
<string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"سيتم نطق العناصر التي تم النقر عليها بصوت عال ويمكن استكشاف الشاشة باستخدام الإيماءات."</string>
<string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"ملاحظة النص الذي تكتبه"</string>
<string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"يتضمن بيانات شخصية مثل أرقام بطاقات الائتمان وكلمات المرور."</string>
<string name="capability_title_canControlMagnification" msgid="3593493281059424855">"التحكم في تكبير الشاشة"</string>
- <string name="capability_desc_canControlMagnification" msgid="4791858203568383773">"يمكنك التحكم في مستوى التكبير/التصغير للشاشة وتحديد الموضع."</string>
+ <string name="capability_desc_canControlMagnification" msgid="4791858203568383773">"يمكنك التحكّم في مستوى تكبير/تصغير الشاشة وتحديد الموضع."</string>
<string name="capability_title_canPerformGestures" msgid="7418984730362576862">"تنفيذ إيماءات"</string>
<string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"يمكن النقر والتمرير بسرعة والتصغير وتنفيذ إيماءات أخرى."</string>
<string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"إيماءات بصمات الإصبع"</string>
@@ -1913,12 +1913,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"جميع اللغات"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"كل المناطق"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"البحث"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"يتعذّر فتح التطبيق"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"التطبيق <xliff:g id="APP_NAME_0">%1$s</xliff:g> غير متاح الآن، وهو مُدار بواسطة <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"مزيد من المعلومات"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"تفعيل الملف الشخصي للعمل؟"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"سيتم تفعيل تطبيقات العمل التي تستخدمها والإشعارات والبيانات وغيرها من ميزات الملف الشخصي للعمل"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"تشغيل"</string>
@@ -2018,4 +2015,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"انقر للاطّلاع على ما تم حظره."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"النظام"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"الإعدادات"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 7fba807..1c96497 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -1690,8 +1690,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"আপোনাৰ প্ৰশাসকে ইনষ্টল কৰিছে"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"আপোনাৰ প্ৰশাসকে আপেডট কৰিছে"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"আপোনাৰ প্ৰশাসকে মচিছে"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"আপোনাৰ বেটাৰিৰ অৱস্থা উন্নত কৰিবলৈ বেটাৰি সঞ্চয়কাৰীয়ে ডিভাইচৰ কিছুমান সুবিধা অফ কৰে আৰু এপসমূহক সীমিত কৰে।"</string>
<string name="data_saver_description" msgid="6015391409098303235">"ডেটা ব্য়ৱহাৰ মাত্ৰা কম কৰিবৰ বাবে ডেটা সঞ্চয়কাৰীয়ে কিছুমান এপক নেপথ্য়ত ডেটা প্ৰেৰণ বা সংগ্ৰহ কৰাত বাধা প্ৰদান কৰে। আপুনি বৰ্তমান ব্য়ৱহাৰ কৰি থকা এটা এপে ডেটা ব্য়ৱহাৰ কৰিব পাৰে, কিন্তু সঘনাই এই কার্য কৰিব নোৱাৰিব পাৰে। ইয়াৰ অৰ্থ এইয়ে হ\'ব পাৰে যে, উদাহৰণস্বৰূপে, আপুনি নিটিপা পর্যন্ত প্ৰতিচ্ছবিসমূহ দেখুওৱা নহ\'ব।"</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"ডেটা সঞ্চয়কাৰী অন কৰিবনে?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"অন কৰক"</string>
@@ -1873,12 +1872,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"কল আৰু জাননীসমূহ মিউট কৰা হ\'ব"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"ছিষ্টেমৰ সালসলনি"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"অসুবিধা নিদিব"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"নতুন: অসুবিধা নিদিব ম\'ডে জাননীসমূহ লুকাই ৰাখিছে"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"অধিক জানিবলৈ আৰু সলনি কৰিবলৈ টিপক।"</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"অসুবিধা নিদিব সলনি হৈছে"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"কি কি অৱৰোধ কৰা হৈছে জানিবলৈ টিপক।"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ছিষ্টেম"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ছেটিংসমূহ"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 10dc200..26bceb8 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Bütün dillər"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Bütün bölgələr"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Axtarın"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Tətbiqi açmaq alınmadı"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> tətbiqi hazırda əlçatan deyil. Bunu <xliff:g id="APP_NAME_1">%2$s</xliff:g> idarə edir."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Ətraflı məlumat"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"İş profili aktiv edilsin?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"İş tətbiqləri, bildirişləri, data və digər iş profili funksiyaları aktiv ediləcək"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Aktivləşdirin"</string>
@@ -1878,4 +1875,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Nəyin blok edildiyini yoxlamaq üçün klikləyin."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ayarlar"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 0df34c4..4441851 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -1913,4 +1913,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Dodirnite da biste proverili šta je blokirano."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Podešavanja"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index fd4cee4..5d69da6 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -1948,4 +1948,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Націсніце, каб паглядзець заблакіраванае."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Сістэма"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Налады"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index e52e0d6..2334b75 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Докоснете, за да проверите какво е блокирано."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Система"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Настройки"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index d22f253..4af04e8 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -1691,8 +1691,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"আপনার প্রশাসক ইনস্টল করেছেন"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"আপনার প্রশাসক আপডেট করেছেন"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"আপনার প্রশাসক মুছে দিয়েছেন"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"আপনার ডিভাইসের চার্জ যাতে তাড়াতাড়ি শেষ না হয়ে যায় তার জন্য ব্যাটারি সেভার ডিভাইসের কিছু বৈশিষ্ট্যকে বন্ধ করে দেয় এবং অ্যাপের কাজকর্মকে সীমাবদ্ধ করে।"</string>
<string name="data_saver_description" msgid="6015391409098303235">"ডেটার ব্যবহার কমাতে সহায়তা করার জন্য, ডেটা সেভার পটভূমিতে কিছু অ্যাপ্লিকেশনকে ডেটা পাঠাতে বা গ্রহণ করতে বাধা দেয়৷ আপনি বর্তমানে এমন একটি অ্যাপ্লিকেশন ব্যবহার করছেন যেটি ডেটা অ্যাক্সেস করতে পারে, তবে সেটি কমই করে৷ এর ফলে যা হতে পারে, উদাহরণস্বরূপ, আপনি ছবিগুলিতে আলতো চাপ না দেওয়া পর্যন্ত সেগুলি প্রদর্শিত হবে না৷"</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"ডেটা সেভার চালু করবেন?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"চালু করুন"</string>
@@ -1874,12 +1873,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"কল এবং বিজ্ঞপ্তিগুলি মিউট করা হবে"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"সিস্টেমে হয়ে থাকা পরিবর্তন"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"বিরক্ত করবেন না"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"নতুন: \'বিরক্ত করবেন না\' মোড চালু আছে, তাই বিজ্ঞপ্তি লুকিয়ে ফেলা হচ্ছে"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"আরও জানতে এবং পরিবর্তন করতে ট্যাপ করুন।"</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"\'বিরক্ত করবেন না\' মোডের সেটিং বদলে গেছে"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"কী কী ব্লক করা আছে তা দেখতে ট্যাপ করুন।"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"সিস্টেম"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"সেটিংস"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 1a62ff2..4ba3435 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -1813,12 +1813,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Svi jezici"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Sve regije"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Pretraga"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Aplikacija se ne može otvoriti"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> trenutačno nije dostupna. Ovime upravlja aplikacija <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Saznajte više"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Uključiti radni profil?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Uključit će se poslovne aplikacije, obavještenja, podaci i druge funkcije radnog profila"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Uključi"</string>
@@ -1915,4 +1912,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Dodirnite da provjerite šta je blokirano."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Postavke"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 6c2a849..d860f86 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toca per consultar què s\'ha bloquejat."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Configuració"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index ec0d268..73b2fe4 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1948,4 +1948,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Klepnutím zkontrolujete, co je blokováno."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Systém"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Nastavení"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 2361769..f9f45f9 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -297,15 +297,15 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Kropssensorer"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"få adgang til sensordata om dine livstegn"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Vil du give <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> adgang til sensordata om dine livstegn?"</string>
- <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"hente indholdet i vinduet"</string>
- <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"undersøge indholdet i et vindue, du interagerer med."</string>
- <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"aktivere Udforsk ved berøring"</string>
+ <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Hente indholdet i vinduet"</string>
+ <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Undersøge indholdet i et vindue, du interagerer med."</string>
+ <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Aktivere Udforsk ved berøring"</string>
<string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"De elementer, der trykkes på, læses højt, og skærmen kan udforskes ved hjælp af bevægelser."</string>
- <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"observere tekst, du skriver"</string>
+ <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Observere tekst, du skriver"</string>
<string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Dette omfatter personlige data såsom kreditkortnumre og adgangskoder."</string>
- <string name="capability_title_canControlMagnification" msgid="3593493281059424855">"administrere skærmforstørrelsen"</string>
+ <string name="capability_title_canControlMagnification" msgid="3593493281059424855">"Administrere skærmforstørrelsen"</string>
<string name="capability_desc_canControlMagnification" msgid="4791858203568383773">"Tjek skærmens zoomniveau og position."</string>
- <string name="capability_title_canPerformGestures" msgid="7418984730362576862">"Udfør bevægelser"</string>
+ <string name="capability_title_canPerformGestures" msgid="7418984730362576862">"Udføre bevægelser"</string>
<string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"Kan trykke, stryge, knibe sammen og udføre andre bevægelser."</string>
<string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"Fingeraftryksbevægelser"</string>
<string name="capability_desc_canCaptureFingerprintGestures" msgid="4386487962402228670">"Kan registrere bevægelser, der foretages på enhedens fingeraftrykslæser."</string>
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tryk for at se, hvad der er blokeret."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Indstillinger"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index ff39afd..9af59bf 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1422,7 +1422,7 @@
<string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Löschen"</string>
<string name="keyboardview_keycode_done" msgid="1992571118466679775">"Fertig"</string>
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modusänderung"</string>
- <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Umschalttaste"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Eingabetaste"</string>
<string name="activitychooserview_choose_application" msgid="2125168057199941199">"App auswählen"</string>
<string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> konnte nicht gestartet werden."</string>
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tippe, um zu überprüfen, welche Inhalte blockiert werden."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Einstellungen"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index b52fa71..507612e 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Πατήστε για να ελέγξετε το περιεχόμενο που έχει αποκλειστεί."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Σύστημα"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ρυθμίσεις"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 1bad7e3..399758b 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"All languages"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"All regions"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Search"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Can’t open app"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"The app <xliff:g id="APP_NAME_0">%1$s</xliff:g> isn’t available at the moment. This is managed by <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Learn more"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Turn on work profile?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Your work apps, notifications, data and other work profile features will be turned on"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Turn on"</string>
@@ -1878,4 +1875,5 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap to check what\'s blocked."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Settings"</string>
+ <string name="car_loading_profile" msgid="3545132581795684027">"Loading"</string>
</resources>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 9a7d650..00782eb 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"All languages"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"All regions"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Search"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Can’t open app"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"The app <xliff:g id="APP_NAME_0">%1$s</xliff:g> isn’t available at the moment. This is managed by <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Learn more"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Turn on work profile?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Your work apps, notifications, data and other work profile features will be turned on"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Turn on"</string>
@@ -1878,4 +1875,5 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap to check what\'s blocked."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Settings"</string>
+ <string name="car_loading_profile" msgid="3545132581795684027">"Loading"</string>
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 1bad7e3..399758b 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"All languages"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"All regions"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Search"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Can’t open app"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"The app <xliff:g id="APP_NAME_0">%1$s</xliff:g> isn’t available at the moment. This is managed by <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Learn more"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Turn on work profile?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Your work apps, notifications, data and other work profile features will be turned on"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Turn on"</string>
@@ -1878,4 +1875,5 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap to check what\'s blocked."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Settings"</string>
+ <string name="car_loading_profile" msgid="3545132581795684027">"Loading"</string>
</resources>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 1bad7e3..399758b 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"All languages"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"All regions"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Search"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Can’t open app"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"The app <xliff:g id="APP_NAME_0">%1$s</xliff:g> isn’t available at the moment. This is managed by <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Learn more"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Turn on work profile?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Your work apps, notifications, data and other work profile features will be turned on"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Turn on"</string>
@@ -1878,4 +1875,5 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap to check what\'s blocked."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Settings"</string>
+ <string name="car_loading_profile" msgid="3545132581795684027">"Loading"</string>
</resources>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index 89710df..78982ac 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"All languages"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"All regions"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Search"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Can’t open app"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"The app <xliff:g id="APP_NAME_0">%1$s</xliff:g> isn’t available right now. This is managed by <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Learn more"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Turn on work profile?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Your work apps, notifications, data, and other work profile features will be turned on"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Turn on"</string>
@@ -1878,4 +1875,5 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap to check what\'s blocked."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Settings"</string>
+ <string name="car_loading_profile" msgid="3545132581795684027">"Loading"</string>
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 1681e2f..2488f9e 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Todos los idiomas"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Todas las regiones"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Búsqueda"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"No se puede abrir la app"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"La app <xliff:g id="APP_NAME_0">%1$s</xliff:g> no está disponible en este momento. Esto se administra en <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Más información"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"¿Activar el perfil de trabajo?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Se activaran las apps de trabajo, los datos, las notificaciones y otras funciones del perfil de trabajo"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Activar"</string>
@@ -1878,4 +1875,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Presiona para consultar lo que está bloqueado."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Configuración"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 3b33911..24475ad 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -302,8 +302,8 @@
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Activar la exploración táctil"</string>
<string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"Los elementos que tocas se dicen en voz alta y se puede explorar la pantalla mediante gestos."</string>
<string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Observar el texto que escribes"</string>
- <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Incluye datos personales como números de tarjetas de crédito y contraseñas."</string>
- <string name="capability_title_canControlMagnification" msgid="3593493281059424855">"Controla la ampliación de la pantalla"</string>
+ <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Incluye datos personales, como números de tarjetas de crédito y contraseñas."</string>
+ <string name="capability_title_canControlMagnification" msgid="3593493281059424855">"Controlar la ampliación de la pantalla"</string>
<string name="capability_desc_canControlMagnification" msgid="4791858203568383773">"Controla el posicionamiento y el nivel de zoom de la pantalla."</string>
<string name="capability_title_canPerformGestures" msgid="7418984730362576862">"Realizar gestos"</string>
<string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"Puedes tocar y pellizcar la pantalla, deslizar el dedo y hacer otros gestos."</string>
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Todos los idiomas"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Todas las regiones"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Buscar"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"No se puede abrir la app"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"La aplicación <xliff:g id="APP_NAME_0">%1$s</xliff:g> no está disponible en este momento. Esta opción se administra en <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Más información"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"¿Activar el perfil de trabajo?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Tus aplicaciones, notificaciones, datos y otras funciones del perfil de trabajo se activarán"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Activar"</string>
@@ -1878,4 +1875,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toca para consultar lo que se está bloqueando."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ajustes"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 466cc26..7e59a31 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Puudutage, et kontrollida, mis on blokeeritud."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Süsteem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Seaded"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 2a5664b..ee47535 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -1879,4 +1879,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Sakatu zer dagoen blokeatuta ikusteko."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ezarpenak"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index cb907f2..28f0d59 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"برای بررسی موارد مسدودشده ضربه بزنید."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"سیستم"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"تنظیمات"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index a6aaa3d..f24a1a0 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Napauta niin näet, mitä on estetty."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Järjestelmä"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Asetukset"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index d0aa0c2..98ecb50 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Toutes les langues"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Toutes les régions"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Rechercher"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Impossible d\'ouvrir l\'application"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"L\'application <xliff:g id="APP_NAME_0">%1$s</xliff:g> n\'est pas accessible pour le moment. Ceci est géré par <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"En savoir plus"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Activer le profil professionnel?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Vos applications professionnelles, vos notifications, vos données et les autres fonctionnalités de profil professionnel seront activées"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Activer"</string>
@@ -1878,4 +1875,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Touchez l\'écran pour vérifier ce qui est bloqué."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Système"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Paramètres"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 17f81ca..e4a73ad 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Appuyez pour vérifier les contenus bloqués."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Système"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Paramètres"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index f2b7f65..e44ba59 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -1024,7 +1024,7 @@
<string name="view_calendar" msgid="979609872939597838">"Ver"</string>
<string name="view_calendar_desc" msgid="5828320291870344584">"Consulta a hora seleccionada no calendario"</string>
<string name="add_calendar_event" msgid="1953664627192056206">"Programar"</string>
- <string name="add_calendar_event_desc" msgid="4326891793260687388">"Programa un evento para unha data seleccionada"</string>
+ <string name="add_calendar_event_desc" msgid="4326891793260687388">"Programa un evento para a data seleccionada"</string>
<string name="view_flight" msgid="7691640491425680214">"Realizar seguimento"</string>
<string name="view_flight_desc" msgid="3876322502674253506">"Fai un seguimento do voo seleccionado"</string>
<string name="low_internal_storage_view_title" msgid="5576272496365684834">"Estase esgotando o espazo de almacenamento"</string>
@@ -1879,4 +1879,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toca para comprobar o contido bloqueado."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Configuración"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index 131d95f..a554daf 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -297,10 +297,10 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"બોડી સેન્સર્સ"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"તમારા મહત્વપૂર્ણ ચિહ્નો વિશે સેન્સર ડેટા ઍક્સેસ કરો"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ને તમારી મહત્વપૂર્ણ સહી વિશેના સેન્સર ડેટાને ઍક્સેસ કરવાની મંજૂરી આપીએ?"</string>
- <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"વિંડો સામગ્રી પુનર્પ્રાપ્ત કરો"</string>
- <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"તમે જેની સાથે ક્રિયાપ્રતિક્રિયા કરી રહ્યાં છો તે વિંડોની સામગ્રીની તપાસ કરો."</string>
- <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"સ્પર્શ કરીને શોધખોળ કરવું સક્ષમ કરો"</string>
- <string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"ટૅપ કરેલ આઇટમ્સ મોટેથી બોલવામાં આવશે અને હાવભાવની મદદથી સ્ક્રીનનું અન્વેષણ કરી શકાય છે."</string>
+ <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"વિંડો કન્ટેન્ટ પુનઃપ્રાપ્ત કરો"</string>
+ <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"તમે જેની સાથે ક્રિયા-પ્રતિક્રિયા કરી રહ્યાં છો તે વિંડોનું કન્ટેન્ટ તપાસો."</string>
+ <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"સ્પર્શ કરીને શોધખોળ કરવું ચાલુ કરો"</string>
+ <string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"ટૅપ કરેલ આઇટમ મોટેથી બોલવામાં આવશે અને હાવભાવની મદદથી સ્ક્રીનને શોધી શકાય છે."</string>
<string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"તમે લખો તે ટેક્સ્ટનું અવલોકન કરો"</string>
<string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"ક્રેડિટ કાર્ડ નંબર્સ અને પાસવર્ડ્સ જેવો વ્યક્તિગત ડેટા શામેલ છે."</string>
<string name="capability_title_canControlMagnification" msgid="3593493281059424855">"પ્રદર્શન વિસ્તૃતિકરણ નિયંત્રિત કરો"</string>
@@ -1691,8 +1691,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"તમારા વ્યવસ્થાપક દ્વારા ઇન્સ્ટૉલ કરવામાં આવેલ છે"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"તમારા વ્યવસ્થાપક દ્વારા અપડેટ કરવામાં આવેલ છે"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"તમારા વ્યવસ્થાપક દ્વારા કાઢી નાખવામાં આવેલ છે"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"તમારી બૅટરીની આવરદા વધારવા માટે, બૅટરી સેવર ઉપકરણની અમુક સુવિધાઓ બંધ કરે છે અને અમુક ઍપને નિયંત્રિત કરે છે."</string>
<string name="data_saver_description" msgid="6015391409098303235">"ડેટા વપરાશને ઘટાડવામાં સહાય માટે, ડેટા સેવર કેટલીક ઍપ્લિકેશનોને પૃષ્ઠભૂમિમાં ડેટા મોકલવા અથવા પ્રાપ્ત કરવાથી અટકાવે છે. તમે હાલમાં ઉપયોગ કરી રહ્યાં છો તે ઍપ્લિકેશન ડેટાને ઍક્સેસ કરી શકે છે, પરંતુ તે આ ક્યારેક જ કરી શકે છે. આનો અર્થ એ હોઈ શકે છે, ઉદાહરણ તરીકે, છબીઓ ત્યાં સુધી પ્રદર્શિત થશે નહીં જ્યાં સુધી તમે તેને ટૅપ નહીં કરો."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"ડેટા સેવર ચાલુ કરીએ?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"ચાલુ કરો"</string>
@@ -1772,10 +1771,10 @@
<string name="importance_from_person" msgid="9160133597262938296">"શામેલ થયેલ લોકોને કારણે આ મહત્વપૂર્ણ છે."</string>
<string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> ને <xliff:g id="ACCOUNT">%2$s</xliff:g> સાથે એક નવા વપરાશકર્તાને બનાવવાની મંજૂરી આપીએ?"</string>
<string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="ACCOUNT">%2$s</xliff:g> સાથે <xliff:g id="APP">%1$s</xliff:g> ને એક નવા વપરાશકર્તાને બનાવવાની મંજૂરી આપીએ (આ એકાઉન્ટ સાથેના એક વપરાશકર્તા પહેલાંથી અસ્તિત્વમાં છે)?"</string>
- <string name="language_selection_title" msgid="2680677278159281088">"એક ભાષા ઉમેરો"</string>
+ <string name="language_selection_title" msgid="2680677278159281088">"ભાષા ઉમેરો"</string>
<string name="country_selection_title" msgid="2954859441620215513">"પ્રદેશ પસંદગી"</string>
<string name="search_language_hint" msgid="7042102592055108574">"ભાષાનું નામ ટાઇપ કરો"</string>
- <string name="language_picker_section_suggested" msgid="8414489646861640885">"સૂચવેલા"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"સૂચવેલી ભાષા"</string>
<string name="language_picker_section_all" msgid="3097279199511617537">"બધી ભાષાઓ"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"તમામ પ્રદેશ"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"શોધ"</string>
@@ -1874,12 +1873,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"કૉલ અને નોટિફિકેશન મ્યૂટ કરવામાં આવશે"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"સિસ્ટમના ફેરફારો"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"ખલેલ પાડશો નહીં"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"નવું: ખલેલ પાડશો નહીં હવે નોટિફિકેશન છુપાવી શકે છે"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"વધુ જાણવા અને બદલવા માટે ટૅપ કરો."</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"ખલેલ પાડશો નહીંમાં ફેરફાર થયો છે"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"શું બ્લૉક કરેલ છે તે તપાસવા માટે ટૅપ કરો."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"સિસ્ટમ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"સેટિંગ"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index b94ef92..37ec1a3 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -871,7 +871,7 @@
<string name="save_password_never" msgid="8274330296785855105">"कभी नहीं"</string>
<string name="open_permission_deny" msgid="7374036708316629800">"आपके पास इस पेज को खोलने की अनुमति नहीं है."</string>
<string name="text_copied" msgid="4985729524670131385">"लेख को क्लिपबोर्ड पर कॉपी किया गया."</string>
- <string name="more_item_label" msgid="4650918923083320495">"अधिक"</string>
+ <string name="more_item_label" msgid="4650918923083320495">"और"</string>
<string name="prepend_shortcut_label" msgid="2572214461676015642">"मेन्यू+"</string>
<string name="menu_meta_shortcut_label" msgid="4647153495550313570">"Meta+"</string>
<string name="menu_ctrl_shortcut_label" msgid="3917070091228880941">"Ctrl+"</string>
@@ -1261,7 +1261,7 @@
<string name="decline_remote_bugreport_action" msgid="6230987241608770062">"अस्वीकार करें"</string>
<string name="select_input_method" msgid="8547250819326693584">"कीबोर्ड बदलें"</string>
<string name="show_ime" msgid="2506087537466597099">"सामान्य कीबोर्ड के सक्रिय होने के दौरान इसे स्क्रीन पर बनाए रखें"</string>
- <string name="hardware" msgid="194658061510127999">"वर्चुअल कीबोर्ड दिखाएं"</string>
+ <string name="hardware" msgid="194658061510127999">"वर्चूअल कीबोर्ड दिखाएं"</string>
<string name="select_keyboard_layout_notification_title" msgid="597189518763083494">"सामान्य कीबोर्ड कॉन्फ़िगर करें"</string>
<string name="select_keyboard_layout_notification_message" msgid="8084622969903004900">"भाषा और लेआउट चुनने के लिए टैप करें"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1343,7 +1343,7 @@
<string name="forward_intent_to_work" msgid="621480743856004612">"आप इस ऐप्स का उपयोग अपनी कार्य प्रोफ़ाइल में कर रहे हैं"</string>
<string name="input_method_binding_label" msgid="1283557179944992649">"इनपुट विधि"</string>
<string name="sync_binding_label" msgid="3687969138375092423">"समन्वयन"</string>
- <string name="accessibility_binding_label" msgid="4148120742096474641">"सरल उपयोग"</string>
+ <string name="accessibility_binding_label" msgid="4148120742096474641">"सुलभता"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"वॉलपेपर"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"वॉलपेपर बदलें"</string>
<string name="notification_listener_binding_label" msgid="2014162835481906429">"सूचना को सुनने की सुविधा"</string>
@@ -1690,8 +1690,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"आपके व्यवस्थापक ने इंस्टॉल किया है"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"आपके व्यवस्थापक ने अपडेट किया है"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"आपके व्यवस्थापक ने हटा दिया है"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"अापके डिवाइस की बैटरी लाइफ़ बढ़ाने के लिए बैटरी सेवर, डिवाइस की कुछ सुविधाओं को बंद कर देता है और ऐप्लिकेशन को बैटरी इस्तेमाल करने से रोकता है."</string>
<string name="data_saver_description" msgid="6015391409098303235">"डेटा खर्च, कम करने के लिए डेटा सेवर कुछ ऐप को बैकग्राउंड में डेटा भेजने या पाने से रोकता है. आप फ़िलहाल जिस एेप का इस्तेमाल कर रहे हैं वह डेटा तक पहुंच सकता है, लेकिन ऐसा कभी-कभी ही हो पाएगा. उदाहरण के लिए, इसे समझिये कि तस्वीर तब तक दिखाई नहीं देंगी जब तक कि आप उन्हें टैप नहीं करते."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"डेटा बचाने की सेटिंग चालू करें?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"चालू करें"</string>
@@ -1873,12 +1872,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"कॉल अाैर सूचनाओं के लिए डिवाइस म्यूट रहेगा"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"सिस्टम में हुए बदलाव"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"परेशान न करें"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"नई सुविधा: परेशान न करें सुविधा चालू होने की वजह से सूचनाएं नहीं दिखाई जा रही हैं"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"ज़्यादा जानने अाैर बदलाव करने के लिए टैप करें."</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"परेशान न करें की सुविधा बदल गई है"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"टैप करके देखें कि किन चीज़ों पर रोक लगाई गई है."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"सिस्टम"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"सेटिंग"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 4ddf088..7ef5946 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1811,12 +1811,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Svi jezici"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Sve regije"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Pretraži"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Aplikacija se ne može otvoriti"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> trenutačno nije dostupna. Ovime upravlja aplikacija <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Saznajte više"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Želite uključiti radni profil?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Uključit će se vaše radne aplikacije, obavijesti, podaci i druge značajke radnog profila"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Uključi"</string>
@@ -1913,4 +1910,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Dodirnite da biste provjerili što je blokirano."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sustav"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Postavke"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 567bea5..407fba9 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Koppintson a letiltott elemek megtekintéséhez."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Rendszer"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Beállítások"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 48356a9..dea92db 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Հպեք՝ տեսնելու, թե ինչ է արգելափակվել:"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Համակարգ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Կարգավորումներ"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 5fb8835..9c63345 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap untuk memeriksa item yang diblokir."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Setelan"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index 9ff9843..1a6fe06 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -1879,4 +1879,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Ýttu til að skoða hvað lokað hefur verið á."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Kerfi"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Stillingar"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 775f764..113edc7 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Tutte le lingue"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Tutte le aree geografiche"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Cerca"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Impossibile aprire l\'app"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"L\'app <xliff:g id="APP_NAME_0">%1$s</xliff:g> non è al momento disponibile. Viene gestita tramite <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Ulteriori informazioni"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Attivare il profilo di lavoro?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Le tue app di lavoro, le notifiche, i dati e altri elementi del profilo di lavoro saranno attivati."</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Attiva"</string>
@@ -1878,4 +1875,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tocca per controllare le notifiche bloccate."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Impostazioni"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index ae6dff8..2ad7184 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1948,4 +1948,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"יש להקיש כדי לבדוק מה חסום."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"מערכת"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"הגדרות"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index b212930..412163f 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"タップしてブロック対象をご確認ください。"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"システム"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"設定"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index 460b518..2d5a53d 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"შეეხეთ იმის სანახავად, თუ რა არის დაბლოკილი."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"სისტემა"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"პარამეტრები"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index 606a681..0733330 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -1879,4 +1879,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Түймені түртіп, неге тыйым салынатынын көріңіз."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Жүйе"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Параметрлер"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 429a507..2be9984 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -1880,4 +1880,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"សូមចុចដើម្បីមើលថាបានទប់ស្កាត់អ្វីខ្លះ។"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ប្រព័ន្ធ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ការកំណត់"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index e0cad2d..c971f28 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -1691,8 +1691,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸ್ಥಾಪಿಸಿದ್ದಾರೆ"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ಅಪ್ಡೇಟ್ ಮಾಡಲ್ಪಟ್ಟಿದೆ"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಅಳಿಸಿದ್ದಾರೆ"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"ನಿಮ್ಮ ಬ್ಯಾಟರಿ ಅವಧಿಯನ್ನು ವಿಸ್ತರಿಸಲು, ಬ್ಯಾಟರಿ ಉಳಿಸುವಿಕೆ ಕೆಲವು ಸಾಧನ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಆಫ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ."</string>
<string name="data_saver_description" msgid="6015391409098303235">"ಡೇಟಾ ಬಳಕೆ ಕಡಿಮೆ ಮಾಡುವ ನಿಟ್ಟಿನಲ್ಲಿ, ಡೇಟಾ ಸೇವರ್ ಕೆಲವು ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಡೇಟಾ ಕಳುಹಿಸುವುದನ್ನು ಅಥವಾ ಸ್ವೀಕರಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ನೀವು ಪ್ರಸ್ತುತ ಬಳಸುತ್ತಿರುವ ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು ಆದರೆ ಪದೇ ಪದೇ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಇದರರ್ಥ, ಉದಾಹರಣೆಗೆ, ನೀವು ಅವುಗಳನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವವರೆಗೆ ಆ ಚಿತ್ರಗಳು ಕಾಣಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"ಡೇಟಾ ಉಳಿಸುವಿಕೆಯನ್ನು ಆನ್ ಮಾಡುವುದೇ?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"ಆನ್ ಮಾಡಿ"</string>
@@ -1874,12 +1873,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"ಕರೆಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳನ್ನು ಮ್ಯೂಟ್ ಮಾಡಲಾಗುತ್ತದೆ"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"ಸಿಸ್ಟಂ ಬದಲಾವಣೆಗಳು"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಮೋಡ್ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮರೆಮಾಡುತ್ತಿದೆ"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"ಇನ್ನಷ್ಟು ತಿಳಿಯಲು ಮತ್ತು ಬದಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಬದಲಾಗಿದೆ"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"ಏನನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ಪರೀಕ್ಷಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ಸಿಸ್ಟಂ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 7cd17a60..71b8f2c 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"차단된 항목을 확인하려면 탭하세요."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"시스템"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"설정"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index adde776..664d3c7 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -1772,7 +1772,7 @@
<string name="importance_from_person" msgid="9160133597262938296">"Булар сиз үчүн маанилүү адамдар."</string>
<string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> колдонмосу <xliff:g id="ACCOUNT">%2$s</xliff:g> аккаунту менен жаңы колдонуучу түзө берсинби?"</string>
<string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> колдонмосуна <xliff:g id="ACCOUNT">%2$s</xliff:g> аккаунту үчүн жаңы колдонуучу түзгөнгө уруксат бересизби (мындай аккаунту бар колдонуучу мурунтан эле бар)?"</string>
- <string name="language_selection_title" msgid="2680677278159281088">"Тил кошуңуз"</string>
+ <string name="language_selection_title" msgid="2680677278159281088">"Тил кошуу"</string>
<string name="country_selection_title" msgid="2954859441620215513">"Чөлкөмдүк жөндөөлөр"</string>
<string name="search_language_hint" msgid="7042102592055108574">"Тилди киргизиңиз"</string>
<string name="language_picker_section_suggested" msgid="8414489646861640885">"Сунушталган"</string>
@@ -1880,4 +1880,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Бөгөттөлгөн нерселерди көрүү үчүн таптаңыз."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Тутум"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Жөндөөлөр"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index b5d45e6..f3d1436 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"ແຕະເພື່ອກວດສອບວ່າມີຫຍັງຖືກບລັອກໄວ້ແດ່."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ລະບົບ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ການຕັ້ງຄ່າ"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 480fecf..185c6cb 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1948,4 +1948,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Palieskite, kad patikrintumėte, kas blokuojama."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Nustatymai"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 47123da..0a44f736 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1913,4 +1913,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Pieskarieties, lai uzzinātu, kas tiek bloķēts."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistēma"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Iestatījumi"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 6dd3fdf..badbed0 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -1881,4 +1881,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Допрете за да проверите што е блокирано."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Систем"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Поставки"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index be44b87..d68b08a 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -299,7 +299,7 @@
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"നിങ്ങളുടെ ജീവധാരണ ലക്ഷണങ്ങളെ കുറിച്ചുള്ള സെൻസർ ഡാറ്റ ആക്സസ് ചെയ്യാൻ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ആപ്പിനെ അനുവദിക്കണോ?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"വിൻഡോ ഉള്ളടക്കം വീണ്ടെടുക്കുക"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"നിങ്ങൾ സംവദിക്കുന്ന ഒരു വിൻഡോയുടെ ഉള്ളടക്കം പരിശോധിക്കുക."</string>
- <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"സ്പർശനം വഴി പര്യവേക്ഷണം ചെയ്യുക ഓൺ ചെയ്യുക"</string>
+ <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"സ്പർശനം വഴി പര്യവേക്ഷണം ചെയ്യുക, ഓണാക്കുക"</string>
<string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"ടാപ്പുചെയ്ത ഇനങ്ങൾ ഉച്ചത്തിൽ പറയപ്പെടും, ജെസ്റ്ററുകൾ ഉപയോഗിച്ച് സ്ക്രീൻ അടുത്തറിയാവുന്നതാണ്."</string>
<string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"നിങ്ങൾ ടൈപ്പ് ചെയ്യുന്ന ടെക്സ്റ്റ് നിരീക്ഷിക്കുക"</string>
<string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"ക്രെഡിറ്റ് കാർഡ് നമ്പറുകളും പാസ്വേഡുകളും പോലുള്ള വ്യക്തിഗത ഡാറ്റ ഉൾപ്പെടുന്നു."</string>
@@ -1691,8 +1691,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"നിങ്ങളുടെ അഡ്മിൻ ഇൻസ്റ്റാൾ ചെയ്യുന്നത്"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"നിങ്ങളുടെ അഡ്മിൻ അപ്ഡേറ്റ് ചെയ്യുന്നത്"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"നിങ്ങളുടെ അഡ്മിൻ ഇല്ലാതാക്കുന്നത്"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"നിങ്ങളുടെ ബാറ്ററി ലൈഫ് ദീർഘിപ്പിക്കാൻ, ബാറ്ററി ലാഭിക്കൽ, ചില ഉപകരണ ഫീച്ചറുകളെ ഓഫാക്കുകയും ആപ്പുകളെ നിയന്ത്രിക്കുകയും ചെയ്യുന്നു."</string>
<string name="data_saver_description" msgid="6015391409098303235">"ഡാറ്റാ ഉപയോഗം കുറയ്ക്കാൻ സഹായിക്കുന്നതിന്, പശ്ചാത്തലത്തിൽ ഡാറ്റ അയയ്ക്കുകയോ സ്വീകരിക്കുകയോ ചെയ്യുന്നതിൽ നിന്ന് ചില ആപ്സിനെ ഡാറ്റ സേവർ തടയുന്നു. നിങ്ങൾ നിലവിൽ ഉപയോഗിക്കുന്ന ഒരു ആപ്പിന് ഡാറ്റ ആക്സസ്സ് ചെയ്യാൻ കഴിയും, എന്നാൽ കുറഞ്ഞ ആവൃത്തിയിലാണിത് നടക്കുക. ഇതിനർത്ഥം, നിങ്ങൾ ടാപ്പുചെയ്യുന്നത് വരെ ചിത്രങ്ങൾ കാണിക്കുകയില്ല എന്നാണ്."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"ഡാറ്റ സേവർ ഓണാക്കണോ?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"ഓണാക്കുക"</string>
@@ -1874,12 +1873,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"കോളുകളും അറിയിപ്പുകളും മ്യൂട്ട് ചെയ്യപ്പെടും"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"സിസ്റ്റത്തിലെ മാറ്റങ്ങൾ"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"ശല്യപ്പെടുത്തരുത്"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"പുതിയത്: അറിയിപ്പുകളെ \'ശല്യപ്പെടുത്തരുത്\' അദൃശ്യമാക്കുന്നു"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"കൂടുതലറിയാനും മാറ്റാനും ടാപ്പ് ചെയ്യുക."</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"\'ശല്യപ്പെടുത്തരുത്\' മാറ്റി"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"എന്തിനെയാണ് ബ്ലോക്ക് ചെയ്തതെന്ന് പരിശോധിക്കാൻ ടാപ്പ് ചെയ്യുക."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"സിസ്റ്റം"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ക്രമീകരണം"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index 63e8be4..3fff3f7 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -220,7 +220,7 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Алдаа мэдээлэх"</string>
<string name="global_action_logout" msgid="935179188218826050">"Гаргах харилцан үйлдэл"</string>
<string name="global_action_screenshot" msgid="8329831278085426283">"Дэлгэцийн зураг дарах"</string>
- <string name="bugreport_title" msgid="2667494803742548533">"Согог репорт авах"</string>
+ <string name="bugreport_title" msgid="2667494803742548533">"Алдааны тайлан авах"</string>
<string name="bugreport_message" msgid="398447048750350456">"Энэ таны төхөөрөмжийн одоогийн статусын талаарх мэдээллийг цуглуулах ба имэйл мессеж болгон илгээнэ. Алдааны мэдэгдлээс эхэлж илгээхэд бэлэн болоход хэсэг хугацаа зарцуулагдана тэвчээртэй байна уу."</string>
<string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Интерактив тайлан"</string>
<string name="bugreport_option_interactive_summary" msgid="229299488536107968">"Үүнийг ихэнх тохиолдолд ашиглана уу. Энэ нь танд тайлангийн явцыг хянах, асуудлын талаар дэлгэрэнгүй мэдээлэл оруулах болон дэлгэцийн агшин авахыг зөвшөөрнө. Мөн тайлагнахад урт хугацаа шаарддаг таны бага ашигладаг зарим хэсгийг алгасах болно."</string>
@@ -1691,8 +1691,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"Таны админ шинэчилсэн"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"Таны админ устгасан"</string>
<string name="battery_saver_description" msgid="769989536172631582">"Батарейны ажиллах хугацааг ихэсгэхийн тулд Батарей хэмнэгч төхөөрөмжийн зарим онцлогийг унтрааж аппуудыг хязгаарладаг."</string>
- <string name="data_saver_description" msgid="6015391409098303235">"Дата ашиглалтыг багасгахын тулд дата хэмнэгч нь зарим апп-г өгөгдлийг дэвсгэрт илгээх болон авахаас сэргийлдэг. Таны одоогийн ашиглаж буй апп нь өгөгдөлд хандах боломжтой хэдий ч цөөн үйлдэл хийнэ. Жишээлбэл зураг харахын тулд та товших шаардлагатай болно."</string>
- <string name="data_saver_enable_title" msgid="4674073932722787417">"Өгөгдөл хамгаалагчийг асаах уу?"</string>
+ <string name="data_saver_description" msgid="6015391409098303235">"Дата ашиглалтыг багасгахын тулд дата хэмнэгч нь зарим апп-г өгөгдлийг дэвсгэрт илгээх болон авахаас сэргийлдэг. Таны одоогийн ашиглаж буй апп нь өгөгдөлд хандах боломжтой хэдий ч тогтмол хандахгүй. Жишээлбэл зургийг товших хүртэл харагдахгүй."</string>
+ <string name="data_saver_enable_title" msgid="4674073932722787417">"Дата хэмнэгчийг асаах уу?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"Асаах"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other"> %1$d минутын турш ( <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> хүртэл)</item>
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Блоклосон зүйлийг шалгахын тулд товшино уу."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Систем"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Тохиргоо"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 3ac598b..c45a0d7 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -452,7 +452,7 @@
<string name="permlab_accessNetworkState" msgid="4951027964348974773">"नेटवर्क कनेक्शन पहा"</string>
<string name="permdesc_accessNetworkState" msgid="8318964424675960975">"कोणती नेटवर्क अस्तित्वात आहेत आणि कनेक्ट केलेली आहेत यासारख्या नेटवर्क कनेक्शनविषयीची माहिती पाहण्यासाठी अॅप ला अनुमती देते."</string>
<string name="permlab_createNetworkSockets" msgid="7934516631384168107">"पूर्ण नेटवर्क प्रवेश आहे"</string>
- <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"नेटवर्क सॉकेट तयार करण्यासाठी आणि सानुकूल नेटवर्क प्रोटोकॉल वापरण्यासाठी अॅप ला अनुमती देते. ब्राउझर आणि अन्य अॅप्लिकेशन म्हणजे इंटरनेटवर डेटा पाठवण्याचा मार्ग, म्हणजे इंटरनेटवर डेटा पाठविण्यासाठी परवानगीची आवश्यकता नसते."</string>
+ <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"नेटवर्क सॉकेट तयार करण्यासाठी आणि कस्टम नेटवर्क प्रोटोकॉल वापरण्यासाठी अॅप ला अनुमती देते. ब्राउझर आणि अन्य अॅप्लिकेशन म्हणजे इंटरनेटवर डेटा पाठवण्याचा मार्ग, म्हणजे इंटरनेटवर डेटा पाठविण्यासाठी परवानगीची आवश्यकता नसते."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"नेटवर्क कनेक्टिव्हिटी बदला"</string>
<string name="permdesc_changeNetworkState" msgid="6789123912476416214">"नेटवर्क कनेक्टिव्हिटीची स्थिती बदलण्यासाठी अॅप ला अनुमती देते."</string>
<string name="permlab_changeTetherState" msgid="5952584964373017960">"टिथर केलेली कनेक्टिव्हिटी बदला"</string>
@@ -611,30 +611,30 @@
<item msgid="1735177144948329370">"निवास फॅक्स"</item>
<item msgid="603878674477207394">"पेजर"</item>
<item msgid="1650824275177931637">"अन्य"</item>
- <item msgid="9192514806975898961">"सानुकूल"</item>
+ <item msgid="9192514806975898961">"कस्टम"</item>
</string-array>
<string-array name="emailAddressTypes">
<item msgid="8073994352956129127">"घर"</item>
<item msgid="7084237356602625604">"कार्य"</item>
<item msgid="1112044410659011023">"अन्य"</item>
- <item msgid="2374913952870110618">"सानुकूल"</item>
+ <item msgid="2374913952870110618">"कस्टम"</item>
</string-array>
<string-array name="postalAddressTypes">
<item msgid="6880257626740047286">"घर"</item>
<item msgid="5629153956045109251">"कार्य"</item>
<item msgid="4966604264500343469">"अन्य"</item>
- <item msgid="4932682847595299369">"सानुकूल"</item>
+ <item msgid="4932682847595299369">"कस्टम"</item>
</string-array>
<string-array name="imAddressTypes">
<item msgid="1738585194601476694">"घर"</item>
<item msgid="1359644565647383708">"कार्य"</item>
<item msgid="7868549401053615677">"अन्य"</item>
- <item msgid="3145118944639869809">"सानुकूल"</item>
+ <item msgid="3145118944639869809">"कस्टम"</item>
</string-array>
<string-array name="organizationTypes">
<item msgid="7546335612189115615">"कार्य"</item>
<item msgid="4378074129049520373">"अन्य"</item>
- <item msgid="3455047468583965104">"सानुकूल"</item>
+ <item msgid="3455047468583965104">"कस्टम"</item>
</string-array>
<string-array name="imProtocols">
<item msgid="8595261363518459565">"AIM"</item>
@@ -646,7 +646,7 @@
<item msgid="2506857312718630823">"ICQ"</item>
<item msgid="1648797903785279353">"Jabber"</item>
</string-array>
- <string name="phoneTypeCustom" msgid="1644738059053355820">"सानुकूल"</string>
+ <string name="phoneTypeCustom" msgid="1644738059053355820">"कस्टम"</string>
<string name="phoneTypeHome" msgid="2570923463033985887">"घर"</string>
<string name="phoneTypeMobile" msgid="6501463557754751037">"मोबाईल"</string>
<string name="phoneTypeWork" msgid="8863939667059911633">"कार्य"</string>
@@ -667,24 +667,24 @@
<string name="phoneTypeWorkPager" msgid="649938731231157056">"कार्य पेजर"</string>
<string name="phoneTypeAssistant" msgid="5596772636128562884">"साहाय्यक"</string>
<string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
- <string name="eventTypeCustom" msgid="7837586198458073404">"सानुकूल"</string>
+ <string name="eventTypeCustom" msgid="7837586198458073404">"कस्टम"</string>
<string name="eventTypeBirthday" msgid="2813379844211390740">"वाढदिवस"</string>
<string name="eventTypeAnniversary" msgid="3876779744518284000">"वर्षदिन"</string>
<string name="eventTypeOther" msgid="7388178939010143077">"अन्य"</string>
- <string name="emailTypeCustom" msgid="8525960257804213846">"सानुकूल"</string>
+ <string name="emailTypeCustom" msgid="8525960257804213846">"कस्टम"</string>
<string name="emailTypeHome" msgid="449227236140433919">"घर"</string>
<string name="emailTypeWork" msgid="3548058059601149973">"कार्य"</string>
<string name="emailTypeOther" msgid="2923008695272639549">"अन्य"</string>
<string name="emailTypeMobile" msgid="119919005321166205">"मोबाईल"</string>
- <string name="postalTypeCustom" msgid="8903206903060479902">"सानुकूल"</string>
+ <string name="postalTypeCustom" msgid="8903206903060479902">"कस्टम"</string>
<string name="postalTypeHome" msgid="8165756977184483097">"घर"</string>
<string name="postalTypeWork" msgid="5268172772387694495">"कार्य"</string>
<string name="postalTypeOther" msgid="2726111966623584341">"अन्य"</string>
- <string name="imTypeCustom" msgid="2074028755527826046">"सानुकूल"</string>
+ <string name="imTypeCustom" msgid="2074028755527826046">"कस्टम"</string>
<string name="imTypeHome" msgid="6241181032954263892">"घर"</string>
<string name="imTypeWork" msgid="1371489290242433090">"कार्य"</string>
<string name="imTypeOther" msgid="5377007495735915478">"अन्य"</string>
- <string name="imProtocolCustom" msgid="6919453836618749992">"सानुकूल"</string>
+ <string name="imProtocolCustom" msgid="6919453836618749992">"कस्टम"</string>
<string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
<string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
<string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
@@ -696,8 +696,8 @@
<string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
<string name="orgTypeWork" msgid="29268870505363872">"कार्य"</string>
<string name="orgTypeOther" msgid="3951781131570124082">"अन्य"</string>
- <string name="orgTypeCustom" msgid="225523415372088322">"सानुकूल"</string>
- <string name="relationTypeCustom" msgid="3542403679827297300">"सानुकूल"</string>
+ <string name="orgTypeCustom" msgid="225523415372088322">"कस्टम"</string>
+ <string name="relationTypeCustom" msgid="3542403679827297300">"कस्टम"</string>
<string name="relationTypeAssistant" msgid="6274334825195379076">"साहाय्यक"</string>
<string name="relationTypeBrother" msgid="8757913506784067713">"भाऊ"</string>
<string name="relationTypeChild" msgid="1890746277276881626">"मूल"</string>
@@ -712,7 +712,7 @@
<string name="relationTypeRelative" msgid="1799819930085610271">"नातेवाईक"</string>
<string name="relationTypeSister" msgid="1735983554479076481">"बहिण"</string>
<string name="relationTypeSpouse" msgid="394136939428698117">"पती/पत्नी"</string>
- <string name="sipAddressTypeCustom" msgid="2473580593111590945">"सानुकूल"</string>
+ <string name="sipAddressTypeCustom" msgid="2473580593111590945">"कस्टम"</string>
<string name="sipAddressTypeHome" msgid="6093598181069359295">"घर"</string>
<string name="sipAddressTypeWork" msgid="6920725730797099047">"कार्य"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"अन्य"</string>
@@ -1691,8 +1691,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"आपल्या प्रशासकाने इंस्टॉल केले"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"आपल्या प्रशासकाने अपडेट केले"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"आपल्या प्रशासकाने हटवले"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"बॅटरी लाइफ वाढवण्यासाठी, बॅटरी सेव्हर काही वैशिष्ट्ये बंद करते आणि अॅप्स प्रतिबंधित करते."</string>
<string name="data_saver_description" msgid="6015391409098303235">"डेटा वापर कमी करण्यात मदत करण्यासाठी, डेटा सर्व्हर काही अॅप्सना पार्श्वभूमीमध्ये डेटा पाठविण्यास किंवा प्राप्त करण्यास प्रतिबंधित करतो. तुम्ही सध्या वापरत असलेला अॅप डेटामध्ये प्रवेश करू शकतो परंतु तसे तो खूप कमी वेळा करू शकतो. याचा अर्थ, उदाहरणार्थ, तुम्ही इमेज टॅप करेपर्यंत त्या प्रदर्शित करणार नाहीत असा असू शकतो."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"डेटा बचतकर्ता चालू करायचा?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"चालू करा"</string>
@@ -1739,7 +1738,7 @@
<string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"आठवड्याची शेवटची रात्र"</string>
<string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"आठवड्याच्या शेवटी"</string>
<string name="zen_mode_default_events_name" msgid="8158334939013085363">"इव्हेंट"</string>
- <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"झोपलेले आहे"</string>
+ <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"निष्क्रिय आहे"</string>
<string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> द्वारे नि:शब्द केले"</string>
<string name="system_error_wipe_data" msgid="6608165524785354962">"आपल्या डिव्हाइसमध्ये अंतर्गत समस्या आहे आणि आपला फॅक्टरी डेटा रीसेट होईपर्यंत ती अस्थिर असू शकते."</string>
<string name="system_error_manufacturer" msgid="8086872414744210668">"आपल्या डिव्हाइसमध्ये अंतर्गत समस्या आहे. तपशीलांसाठी आपल्या निर्मात्याशी संपर्क साधा."</string>
@@ -1874,12 +1873,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"कॉल आणि सूचना म्युट केल्या जातील"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"सिस्टम बदल"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"व्यत्यय आणू नका"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"व्यत्यय आणू नका सूचना लपवत आहे"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"अधिक जाणून घेण्यासाठी आणि बदलण्यासाठी टॅप करा."</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"व्यत्यय आणू नका बदलले आहे"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"काय ब्लॉक केले आहे हे तपासण्यासाठी टॅप करा."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"सिस्टम"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"सेटिंग्ज"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index ae46240..003b26b 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Ketik untuk menyemak item yang disekat."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Tetapan"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 485d6b8..a41649d 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -1778,12 +1778,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"ဘာသာစကားများအားလုံး"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"ဒေသအားလုံး"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"ရှာဖွေရန်"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"အက်ပ်ကို ဖွင့်၍မရပါ"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> အက်ပ်ကို လောလောဆယ် မရနိုင်ပါ။ ၎င်းကို <xliff:g id="APP_NAME_1">%2$s</xliff:g> က စီမံထားပါသည်။"</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"ပိုမိုလေ့လာရန်"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"အလုပ်ပရိုဖိုင် ဖွင့်လိုသလား။"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"သင်၏ အလုပ်အက်ပ်၊ အကြောင်းကြားချက်၊ ဒေတာနှင့် အခြားအလုပ်ပရိုဖိုင် ဝန်ဆောင်မှုများကို ဖွင့်လိုက်ပါမည်"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"ဖွင့်ပါ"</string>
@@ -1879,4 +1876,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"ပိတ်ထားသည့်အရာများကို ကြည့်ရန် တို့ပါ။"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"စနစ်"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ဆက်တင်များ"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 6a3ebf5..613bcc9 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Trykk for å sjekke hva som er blokkert."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Innstillinger"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 3d02ed8..e6504e9 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -1696,8 +1696,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"तपाईंका प्रशासकले स्थापना गर्नुभएको"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"तपाईंका प्रशासकले अद्यावधिक गर्नुभएको"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"तपाईंका प्रशासकले मेट्नुभएको"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"तपाईंको ब्याट्रीको आयु बढाउनाका लागि ब्याट्री सेभरले यन्त्रका केही सुविधाहरू निष्क्रिय पार्छ र अनुप्रयोगहरूलाई प्रतिबन्धित गर्छ।"</string>
<string name="data_saver_description" msgid="6015391409098303235">"डेटाको प्रयोगलाई कम गर्नमा मद्दतका लागि डेटा सर्भरले केही अनुप्रयोगहरूलाई पृष्ठभूमिमा डेटा पठाउन वा प्राप्त गर्नबाट रोक्दछ। तपाईँले हाल प्रयोग गरिरहनुभएको अनु्प्रयोगले डेटामाथि पहुँच राख्न सक्छ, तर त्यसले यो काम थोरै पटक गर्न सक्छ। उदाहरणका लागि यसको मतलब यो हुन सक्छ: तपाईँले छविहरूलाई ट्याप नगरेसम्म ती प्रदर्शन हुँदैनन्।"</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"डेटा सेभरलाई सक्रिय गर्ने हो?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"सक्रिय गर्नुहोस्"</string>
@@ -1879,12 +1878,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"कल तथा सूचनाहरूलाई म्युट गरिने छ"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"प्रणालीसम्बन्धी परिवर्तनहरू"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"बाधा नपुऱ्याउनुहोस्"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"नयाँ: बाधा नपुर्याउनुहोस् नामक मोडले सूचनाहरू लुकाइरहेको छ"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"थप जान्न र परिवर्तन गर्न ट्याप गर्नुहोस्।"</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"बाधा नपुर्याउनुहोस् मोड परिवर्तन भएको छ"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"रोक लगाइएका कुराहरू जाँच गर्न ट्याप गर्नुहोस्।"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"प्रणाली"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"सेटिङहरू"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index b3f7fab..2af5574 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tik om te controleren wat er is geblokkeerd."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Systeem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Instellingen"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index 479222c..a2b2d06 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -1881,4 +1881,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"କ’ଣ ଅବରୋଧ ହୋଇଛି ଯାଞ୍ଚ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ସିଷ୍ଟମ୍"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ସେଟିଙ୍ଗ"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index cd8f113..19e93ef 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -1691,8 +1691,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਸਥਾਪਤ ਕੀਤਾ ਗਿਆ"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਮਿਟਾਇਆ ਗਿਆ"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"ਬੈਟਰੀ ਲਾਈਫ਼ ਵਧਾਉਣ ਲਈ, ਬੈਟਰੀ ਸੇਵਰ ਕੁਝ ਡੀਵਾਈਸ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਬੰਦ ਕਰਦਾ ਹੈ ਅਤੇ ਐਪਾਂ \'ਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦਾ ਹੈ।"</string>
<string name="data_saver_description" msgid="6015391409098303235">"ਡਾਟਾ ਵਰਤੋਂ ਘਟਾਉਣ ਵਿੱਚ ਮਦਦ ਲਈ, ਡਾਟਾ ਸੇਵਰ ਕੁਝ ਐਪਾਂ ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਡਾਟਾ ਭੇਜਣ ਜਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਤੋਂ ਰੋਕਦਾ ਹੈ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਵਰਤਮਾਨ ਤੌਰ \'ਤੇ ਵਰਤੀ ਜਾ ਰਹੀ ਐਪ ਡਾਟਾ \'ਤੇ ਪਹੁੰਚ ਕਰ ਸਕਦੀ ਹੈ, ਪਰ ਉਹ ਇੰਝ ਕਦੇ-ਕਦਾਈਂ ਕਰ ਸਕਦੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇਸ ਦਾ ਮਤਲਬ ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਚਿੱਤਰ ਤਦ ਤੱਕ ਨਹੀਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕੀਤੇ ਜਾਂਦੇ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ \'ਤੇ ਟੈਪ ਨਹੀਂ ਕਰਦੇ।"</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"ਕੀ ਡਾਟਾ ਸੇਵਰ ਚਾਲੂ ਕਰਨਾ ਹੈ?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"ਚਾਲੂ ਕਰੋ"</string>
@@ -1874,12 +1873,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"ਕਾਲਾਂ ਅਤੇ ਸੂਚਨਾਵਾਂ ਨੂੰ ਮਿਊਟ ਕੀਤਾ ਜਾਵੇਗਾ"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"ਸਿਸਟਮ ਬਦਲਾਅ"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"ਨਵਾਂ: \'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਮੋਡ ਸੂਚਨਾਵਾਂ ਨੂੰ ਲੁਕਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"ਹੋਰ ਜਾਣਨ ਲਈ ਅਤੇ ਬਦਲਾਅ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਵਿਕਲਪ ਬਦਲ ਗਿਆ ਹੈ"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"ਟੈਪ ਕਰਕੇ ਦੋਖੋ ਕਿ ਕਿਹੜੀਆਂ ਚੀਜ਼ਾਂ ਬਲਾਕ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ।"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ਸਿਸਟਮ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ਸੈਟਿੰਗਾਂ"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 352d39e..d7e9a5d 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1948,4 +1948,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Kliknij, by sprawdzić, co jest zablokowane."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ustawienia"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index ac3090f..b055526 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Todos os idiomas"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Todas as regiões"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Pesquisa"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Não é possível abrir o app"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"O app <xliff:g id="APP_NAME_0">%1$s</xliff:g> não está disponível no momento. Isso é gerenciado pelo app <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Saiba mais"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Ativar o perfil de trabalho?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Seus apps, notificações, dados e outros recursos do perfil de trabalho serão ativados"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Ativar"</string>
@@ -1878,4 +1875,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toque para verificar o que está bloqueado."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Configurações"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index aeb5ebc..d39f4d1 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toque para verificar o que está bloqueado."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Definições"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index ac3090f..b055526 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Todos os idiomas"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Todas as regiões"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Pesquisa"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Não é possível abrir o app"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"O app <xliff:g id="APP_NAME_0">%1$s</xliff:g> não está disponível no momento. Isso é gerenciado pelo app <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Saiba mais"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Ativar o perfil de trabalho?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Seus apps, notificações, dados e outros recursos do perfil de trabalho serão ativados"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Ativar"</string>
@@ -1878,4 +1875,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toque para verificar o que está bloqueado."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Configurações"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 56cc722..489f8a9 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1811,12 +1811,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Toate limbile"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Toate regiunile"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Căutați"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Nu se poate deschide aplicația"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"Momentan, aplicația <xliff:g id="APP_NAME_0">%1$s</xliff:g> nu este disponibilă. Aceasta este gestionată de <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Aflați mai multe"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Activați profilul de serviciu?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Se vor activa aplicațiile dvs. de serviciu, notificările, datele și alte funcții ale profilului de serviciu"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Activați"</string>
@@ -1913,4 +1910,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Atingeți pentru a verifica ce este blocat."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Setări"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 1e1bd6a..356f631 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1536,7 +1536,7 @@
<string name="wireless_display_route_description" msgid="9070346425023979651">"Беспроводной монитор"</string>
<string name="media_route_button_content_description" msgid="591703006349356016">"Транслировать."</string>
<string name="media_route_chooser_title" msgid="1751618554539087622">"Подключение к устройству"</string>
- <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Подключение к удаленному дисплею"</string>
+ <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Трансляция экрана"</string>
<string name="media_route_chooser_searching" msgid="4776236202610828706">"Поиск устройств…"</string>
<string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Настройки"</string>
<string name="media_route_controller_disconnect" msgid="8966120286374158649">"Отключить"</string>
@@ -1948,4 +1948,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Нажмите, чтобы проверить настройки."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Система"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Настройки"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index 1c89405..773fb23 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -1880,4 +1880,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"අවහිර කර ඇති දේ පරීක්ෂා කිරීමට තට්ටු කරන්න."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"පද්ධතිය"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"සැකසීම්"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index ebf617f..52c5469 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1948,4 +1948,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Klepnutím skontrolujete, čo je blokované."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Systém"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Nastavenia"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index d2a8be1..ccf461b 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1948,4 +1948,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Dotaknite se, da preverite, kaj je blokirano."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Nastavitve"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index cf5a3b4..dc11f88 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -1879,4 +1879,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Trokit për të shënuar atë që është bllokuar"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistemi"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Cilësimet"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 22f7fa8..b67165a 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1913,4 +1913,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Додирните да бисте проверили шта је блокирано."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Систем"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Подешавања"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 596bf83..d6327f2 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1777,12 +1777,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Alla språk"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Alla regioner"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Söka"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Det gick inte att öppna appen"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"Appen <xliff:g id="APP_NAME_0">%1$s</xliff:g> är inte tillgänglig just nu. Detta hanteras av <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Läs mer"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Vill du aktivera jobbprofilen?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Jobbappar, aviseringar, data och andra funktioner i jobbprofilen aktiveras"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Aktivera"</string>
@@ -1878,4 +1875,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tryck om du vill se vad som blockeras."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Inställningar"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index f638ee0..ea8ff61 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1876,4 +1876,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Gusa ili uangalie kipengee ambacho kimezuiwa."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Mfumo"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Mipangilio"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 5534ccb..88a96fa 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -1189,7 +1189,7 @@
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"இணைப்பை அனுமதிக்கவா?"</string>
<string name="wifi_connect_alert_message" msgid="6451273376815958922">"%2$s வைஃபை நெட்வொர்க்குடன், %1$s பயன்பாடு இணைக்க விரும்புகிறது"</string>
<string name="wifi_connect_default_application" msgid="7143109390475484319">"ஒரு பயன்பாடு"</string>
- <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"வைஃபை Direct"</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"வைஃபை டைரக்ட்"</string>
<string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"வைஃபை Direct ஐத் தொடங்குக. இது வைஃபை க்ளையண்ட்/ஹாட்ஸ்பாட்டை முடக்கும்."</string>
<string name="wifi_p2p_failed_message" msgid="3763669677935623084">"வைஃபை Direct ஐத் தொடங்க முடியவில்லை."</string>
<string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"வைஃபை Direct இயக்கத்தில் உள்ளது"</string>
@@ -1691,8 +1691,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"உங்கள் நிர்வாகி நிறுவியுள்ளார்"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"உங்கள் நிர்வாகி புதுப்பித்துள்ளார்"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"உங்கள் நிர்வாகி நீக்கியுள்ளார்"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"பேட்டரி நிலையை நீட்டிக்க, பேட்டரி சேமிப்பான் அம்சமானது சில சாதன அம்சங்களை ஆஃப் செய்து, ஆப்ஸைக் கட்டுப்படுத்தும்."</string>
<string name="data_saver_description" msgid="6015391409098303235">"டேட்டா பயன்பாட்டைக் குறைப்பதற்கு உதவ, பின்புலத்தில் டேட்டாவை அனுப்புவது அல்லது பெறுவதிலிருந்து சில பயன்பாடுகளை டேட்டா சேமிப்பான் தடுக்கும். தற்போது பயன்படுத்தும் பயன்பாடானது எப்போதாவது டேட்டாவை அணுகலாம். எடுத்துக்காட்டாக, படங்களை நீங்கள் தட்டும் வரை அவை காட்டப்படாது."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"டேட்டா சேமிப்பானை இயக்கவா?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"இயக்கு"</string>
@@ -1874,12 +1873,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"அழைப்புகள் மற்றும் அறிவிப்புகளுக்கு ஒலியை முடக்கும்"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"சிஸ்டம் மாற்றங்கள்"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"தொந்தரவு செய்ய வேண்டாம்"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"புதியது: \'தொந்தரவு செய்ய வேண்டாம்\' பயன்முறையானது அறிவிப்புகளைக் காட்டாமல் மறைக்கிறது"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"மேலும் அறிந்து மாற்ற, தட்டவும்."</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"தொந்தரவு செய்ய வேண்டாம் அமைப்புகள் மாற்றப்பட்டன"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"எவற்றையெல்லாம் தடுக்கிறது என்பதைப் பார்க்க, தட்டவும்."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"சிஸ்டம்"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"அமைப்புகள்"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 9195599..3fe4e5c 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -601,7 +601,7 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"నిల్వ చేయబడిన యాప్ డేటా గుప్తీకరించబడి ఉండటం అవసరం."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"కెమెరాలను నిలిపివేయండి"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"అన్ని పరికర కెమెరాల వినియోగాన్ని నిరోధించండి."</string>
- <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"కొన్ని స్క్రీన్ లాక్ లక్షణాలు నిలిపివేయండి"</string>
+ <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"కొన్ని స్క్రీన్ లాక్ ఫీచర్లు నిలిపివేయండి"</string>
<string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"కొన్ని స్క్రీన్ లాక్ లక్షణాల వినియోగాన్ని నిరోధిస్తుంది."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"ఇల్లు"</item>
@@ -1691,8 +1691,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"మీ నిర్వాహకులు ఇన్స్టాల్ చేసారు"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"మీ నిర్వాహకులు నవీకరించారు"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"మీ నిర్వాహకులు తొలగించారు"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"మీ బ్యాటరీ జీవితకాలాన్ని పెంచుకోవాలనుకుంటే, బ్యాటరీ సేవర్ కొన్ని పరికర ఫీచర్లను ఆఫ్ చేస్తుంది మరియు కొన్ని యాప్లను పరిమితం చేస్తుంది."</string>
<string name="data_saver_description" msgid="6015391409098303235">"డేటా వినియోగాన్ని తగ్గించడంలో సహాయకరంగా ఉండటానికి, డేటా సేవర్ కొన్ని యాప్లను నేపథ్యంలో డేటాను పంపకుండా లేదా స్వీకరించకుండా నిరోధిస్తుంది. మీరు ప్రస్తుతం ఉపయోగిస్తున్న యాప్ డేటాను యాక్సెస్ చేయగలదు కానీ అలా అరుదుగా చేయవచ్చు. అంటే, ఉదాహరణకు, మీరు ఆ చిత్రాలను నొక్కే వరకు అవి ప్రదర్శించబడవు."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"డేటా సేవర్ను ఆన్ చేయాలా?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"ఆన్ చేయి"</string>
@@ -1874,12 +1873,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"కాల్లు మరియు నోటిఫికేషన్లు మ్యూట్ చేయబడతాయి"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"సిస్టమ్ మార్పులు"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"అంతరాయం కలిగించవద్దు"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"కొత్తది: అంతరాయం కలిగించవద్దు నోటిఫికేషన్లను దాస్తోంది"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"మరింత తెలుసుకోవడానికి మరియు మార్చడానికి నొక్కండి."</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"అంతరాయం కలిగించవద్దు మార్చబడింది"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"బ్లాక్ చేయబడిన దాన్ని తనిఖీ చేయడానికి నొక్కండి."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"సిస్టమ్"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"సెట్టింగ్లు"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 95039e1..a64d414 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"แตะเพื่อดูรายการที่ถูกบล็อก"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ระบบ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"การตั้งค่า"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 785f534..34583c8 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"I-tap para tingnan kung ano ang naka-block."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Mga Setting"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index afce96e..0b99606 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Nelerin engellendiğini kontrol etmek için dokunun."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ayarlar"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 8e996bd..9b6539f 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1948,4 +1948,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Торкніться, щоб перевірити, що заблоковано."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Система"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Налаштування"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 4e4645d..c871c9a 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -1691,8 +1691,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"آپ کے منتظم کے ذریعے انسٹال کیا گیا"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"آپ کے منتظم کے ذریعے اپ ڈیٹ کیا گیا"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"آپ کے منتظم کے ذریعے حذف کیا گیا"</string>
- <!-- no translation found for battery_saver_description (769989536172631582) -->
- <skip />
+ <string name="battery_saver_description" msgid="769989536172631582">"آپ کی بیٹری لائف کو بڑھانے کیلئے، بیٹری سیور آلہ کی کچھ خصوصیات کو آف اور ایپس کو محدود کرتا ہے۔"</string>
<string name="data_saver_description" msgid="6015391409098303235">"ڈیٹا کے استعمال کو کم کرنے میں مدد کیلئے، ڈیٹا سیور پس منظر میں کچھ ایپس کو ڈیٹا بھیجنے یا موصول کرنے سے روکتا ہے۔ آپ جو ایپ فی الحال استعمال کر رہے ہیں وہ ڈیٹا پر رسائی کر سکتی ہے مگر ہو سکتا ہے ایسا زیادہ نہ ہو۔ اس کا مطلب مثال کے طور پر یہ ہو سکتا ہے کہ تصاویر تھپتھپانے تک ظاہر نہ ہوں۔"</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"ڈیٹا سیور آن کریں؟"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"آن کریں"</string>
@@ -1874,12 +1873,12 @@
<string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"کالز اور اطلاعات کی آواز خاموش کر دی جائے گی"</string>
<string name="notification_channel_system_changes" msgid="5072715579030948646">"سسٹم کی تبدیلیاں"</string>
<string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"ڈسٹرب نہ کریں"</string>
- <!-- no translation found for zen_upgrade_notification_visd_title (3288313883409759733) -->
- <skip />
- <!-- no translation found for zen_upgrade_notification_visd_content (5533674060311631165) -->
- <skip />
+ <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"نئی: \'ڈسٹرب نہ کریں\' اطلاعات کو چھپا رہی ہے"</string>
+ <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"مزید جاننے اور تبدیل کرنے کیلئے تھپتھپائیں۔"</string>
<string name="zen_upgrade_notification_title" msgid="3799603322910377294">"\'ڈسٹرب نہ کریں\' تبدیل ہو گيا ہے"</string>
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"مسدود کی گئی چیزوں کو چیک کرنے کے لیے تھپتھپائیں۔"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"سسٹم"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ترتیبات"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index bb1453e..dc7cc26 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -1778,12 +1778,9 @@
<string name="language_picker_section_all" msgid="3097279199511617537">"Barcha tillar"</string>
<string name="region_picker_section_all" msgid="8966316787153001779">"Barcha hududlar"</string>
<string name="locale_search_menu" msgid="2560710726687249178">"Qidiruv"</string>
- <!-- no translation found for app_suspended_title (1919029799438164552) -->
- <skip />
- <!-- no translation found for app_suspended_default_message (7875306315686531621) -->
- <skip />
- <!-- no translation found for app_suspended_more_details (1131804827776778187) -->
- <skip />
+ <string name="app_suspended_title" msgid="1919029799438164552">"Ilovani ochish imkonsiz"</string>
+ <string name="app_suspended_default_message" msgid="7875306315686531621">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ilovasi hozir mavjud emas. U <xliff:g id="APP_NAME_1">%2$s</xliff:g> tomonidan boshqariladi."</string>
+ <string name="app_suspended_more_details" msgid="1131804827776778187">"Batafsil"</string>
<string name="work_mode_off_title" msgid="1118691887588435530">"Ishchi profil yoqilsinmi?"</string>
<string name="work_mode_off_message" msgid="5130856710614337649">"Ishchi ilovalar, bildirishnomalar, ma’lumotlar va boshqa ishchi profil imkoniyatlari yoqiladi"</string>
<string name="work_mode_turn_on" msgid="2062544985670564875">"Yoqish"</string>
@@ -1879,4 +1876,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Nimalar bloklanganini tekshirish uchun bosing"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Tizim"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Sozlamalar"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 78adf72..61e3ee8 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -301,7 +301,7 @@
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Kiểm tra nội dung của cửa sổ bạn đang tương tác."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Bật Khám phá bằng cách chạm"</string>
<string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"Đọc to các mục được nhấn và cho phép khám phá màn hình bằng cử chỉ."</string>
- <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Xem nội dung bạn nhập"</string>
+ <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Quan sát nội dung bạn nhập"</string>
<string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Bao gồm dữ liệu cá nhân chẳng hạn như số thẻ tín dụng và mật khẩu."</string>
<string name="capability_title_canControlMagnification" msgid="3593493281059424855">"Kiểm soát thu phóng màn hình"</string>
<string name="capability_desc_canControlMagnification" msgid="4791858203568383773">"Kiểm soát vị trí và mức thu phóng của màn hình."</string>
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Nhấn để xem những thông báo bị chặn."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Hệ thống"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Cài đặt"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index e639158..d51cd94 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"点按即可查看屏蔽内容。"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"系统"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"设置"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 47c7c0f..88462b7 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"輕按即可查看封鎖內容。"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"系統"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"設定"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 0f487de..a26d2ef 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"輕觸即可查看遭封鎖的項目。"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"系統"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"設定"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index e939422..6d76992 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1878,4 +1878,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Thepha ukuze uhlole ukuthi yini evinjelwe."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Isistimu"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Izilungiselelo"</string>
+ <!-- no translation found for car_loading_profile (3545132581795684027) -->
+ <skip />
</resources>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 9215f3f..da9fed0 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -178,7 +178,7 @@
<color name="profile_badge_3">#ff22f033</color><!-- Green -->
<!-- Default instant app badge color -->
- <color name="instant_app_badge">#FFFFFFFF</color><!-- White -->
+ <color name="instant_app_badge">#ff757575</color><!-- Grey -->
<!-- Multi-sim sim colors -->
<color name="Teal_700">#ff00796b</color>
diff --git a/core/tests/benchmarks/src/android/util/StreamsBenchmark.java b/core/tests/benchmarks/src/android/util/StreamsBenchmark.java
new file mode 100644
index 0000000..a4f8abb
--- /dev/null
+++ b/core/tests/benchmarks/src/android/util/StreamsBenchmark.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.util;
+
+import com.android.internal.util.FastPrintWriter;
+
+import com.google.caliper.AfterExperiment;
+import com.google.caliper.BeforeExperiment;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Random;
+import java.util.stream.Collectors;
+
+public class StreamsBenchmark {
+ private OutputStream dummy = new OutputStream() {
+ @Override
+ public void write(int b) throws IOException {
+ }
+
+ @Override
+ public void write(byte b[], int off, int len) throws IOException {
+ }
+ };
+
+ private SparseIntArray calls;
+
+ @BeforeExperiment
+ protected void setUp() {
+ calls = new SparseIntArray();
+ final Random r = new Random(1);
+ for (int i = 0; i < 100; i++) {
+ calls.put(i, r.nextInt(Integer.MAX_VALUE));
+ }
+ }
+
+ @AfterExperiment
+ protected void tearDown() {
+ calls = null;
+ }
+
+ public void timeDirect(int reps) {
+ for (int i = 0; i < reps; i++) {
+ final int N = calls.size();
+ final long[] values = new long[N];
+ for (int j = 0; j < N; j++) {
+ values[j] = ((long) calls.valueAt(j) << 32) | calls.keyAt(j);
+ }
+ Arrays.sort(values);
+
+ final FastPrintWriter pw = new FastPrintWriter(dummy);
+ pw.println("Top openSession callers (uid=count):");
+ final int end = Math.max(0, N - 20);
+ for (int j = N - 1; j >= end; j--) {
+ final int uid = (int) (values[j] & 0xffffffff);
+ final int count = (int) (values[j] >> 32);
+ pw.print(uid);
+ pw.print("=");
+ pw.println(count);
+ }
+ pw.println();
+ pw.flush();
+ }
+ }
+
+ public void timeStreams(int reps) {
+ for (int i = 0; i < reps; i++) {
+ List<Pair<Integer, Integer>> callsList =
+ getOpenSessionCallsList(calls).stream().sorted(
+ Comparator.comparing(
+ (Pair<Integer, Integer> pair) -> pair.second).reversed())
+ .limit(20)
+ .collect(Collectors.toList());
+
+ final FastPrintWriter pw = new FastPrintWriter(dummy);
+ pw.println("Top openSession callers (uid=count):");
+ for (Pair<Integer, Integer> uidCalls : callsList) {
+ pw.print(uidCalls.first);
+ pw.print("=");
+ pw.println(uidCalls.second);
+ }
+ pw.println();
+ pw.flush();
+ }
+ }
+
+ private static List<Pair<Integer, Integer>> getOpenSessionCallsList(
+ SparseIntArray openSessionCalls) {
+ ArrayList<Pair<Integer, Integer>> list = new ArrayList<>(openSessionCalls.size());
+ for (int i=0; i<openSessionCalls.size(); i++) {
+ final int uid = openSessionCalls.keyAt(i);
+ list.add(new Pair<>(uid, openSessionCalls.get(uid)));
+ }
+
+ return list;
+ }
+}
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index ed29028..bde4943 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -175,6 +175,7 @@
<assign-permission name="android.permission.DUMP" uid="statsd" />
<assign-permission name="android.permission.PACKAGE_USAGE_STATS" uid="statsd" />
<assign-permission name="android.permission.STATSCOMPANION" uid="statsd" />
+ <assign-permission name="android.permission.UPDATE_APP_OPS_STATS" uid="statsd" />
<!-- This is a list of all the libraries available for application
code to link against. -->
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index c6a6113..82b6a22 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -65,6 +65,8 @@
</privapp-permissions>
<privapp-permissions package="com.android.emergency">
+ <!-- Required to place emergency calls from emergency info screen. -->
+ <permission name="android.permission.CALL_PRIVILEGED"/>
<permission name="android.permission.MANAGE_USERS"/>
</privapp-permissions>
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
index 07052cd..9e73046 100644
--- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
@@ -53,6 +53,7 @@
}
void SkiaPipeline::onDestroyHardwareResources() {
+ unpinImages();
mRenderThread.cacheManager().trimStaleResources();
}
diff --git a/libs/hwui/renderthread/CacheManager.cpp b/libs/hwui/renderthread/CacheManager.cpp
index 3ca9295..f510a20 100644
--- a/libs/hwui/renderthread/CacheManager.cpp
+++ b/libs/hwui/renderthread/CacheManager.cpp
@@ -166,10 +166,7 @@
return;
}
mGrContext->flush();
- // Here we purge all the unlocked scratch resources (leaving those resources w/ persistent data)
- // and then purge those w/ persistent data based on age.
- mGrContext->purgeUnlockedResources(true);
- mGrContext->purgeResourcesNotUsedInMs(std::chrono::seconds(10));
+ mGrContext->purgeResourcesNotUsedInMs(std::chrono::seconds(30));
}
sp<skiapipeline::VectorDrawableAtlas> CacheManager::acquireVectorDrawableAtlas() {
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
index 8ab5ec4..f9a47a6 100644
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ b/media/java/android/media/MediaMetadataRetriever.java
@@ -567,6 +567,25 @@
}
/**
+ * @hide
+ *
+ * This method retrieves the thumbnail image for a still image if it's available.
+ * It should only be called after {@link #setDataSource}.
+ *
+ * @param imageIndex 0-based index of the image, negative value indicates primary image.
+ * @param params BitmapParams that controls the returned bitmap config (such as pixel formats).
+ * @param targetSize intended size of one edge (wdith or height) of the thumbnail,
+ * this is a heuristic for the framework to decide whether the embedded
+ * thumbnail should be used.
+ * @param maxPixels maximum pixels of thumbnail, this is a heuristic for the frameowrk to
+ * decide whehther the embedded thumnbail (or a downscaled version of it)
+ * should be used.
+ * @return the retrieved thumbnail, or null if no suitable thumbnail is available.
+ */
+ public native @Nullable Bitmap getThumbnailImageAtIndex(
+ int imageIndex, @NonNull BitmapParams params, int targetSize, int maxPixels);
+
+ /**
* This method is similar to {@link #getImageAtIndex(int, BitmapParams)} except that
* the default for {@link BitmapParams} will be used.
*
diff --git a/media/java/android/media/ThumbnailUtils.java b/media/java/android/media/ThumbnailUtils.java
index abd6f4a..429ef29 100644
--- a/media/java/android/media/ThumbnailUtils.java
+++ b/media/java/android/media/ThumbnailUtils.java
@@ -92,10 +92,14 @@
SizedThumbnailBitmap sizedThumbnailBitmap = new SizedThumbnailBitmap();
Bitmap bitmap = null;
MediaFileType fileType = MediaFile.getFileType(filePath);
- if (fileType != null && (fileType.fileType == MediaFile.FILE_TYPE_JPEG
- || MediaFile.isRawImageFileType(fileType.fileType))) {
- createThumbnailFromEXIF(filePath, targetSize, maxPixels, sizedThumbnailBitmap);
- bitmap = sizedThumbnailBitmap.mBitmap;
+ if (fileType != null) {
+ if (fileType.fileType == MediaFile.FILE_TYPE_JPEG
+ || MediaFile.isRawImageFileType(fileType.fileType)) {
+ createThumbnailFromEXIF(filePath, targetSize, maxPixels, sizedThumbnailBitmap);
+ bitmap = sizedThumbnailBitmap.mBitmap;
+ } else if (fileType.fileType == MediaFile.FILE_TYPE_HEIF) {
+ bitmap = createThumbnailFromMetadataRetriever(filePath, targetSize, maxPixels);
+ }
}
if (bitmap == null) {
@@ -519,4 +523,26 @@
sizedThumbBitmap.mBitmap = BitmapFactory.decodeFile(filePath, fullOptions);
}
}
+
+ private static Bitmap createThumbnailFromMetadataRetriever(
+ String filePath, int targetSize, int maxPixels) {
+ if (filePath == null) {
+ return null;
+ }
+ Bitmap thumbnail = null;
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ try {
+ retriever.setDataSource(filePath);
+ MediaMetadataRetriever.BitmapParams params = new MediaMetadataRetriever.BitmapParams();
+ params.setPreferredConfig(Bitmap.Config.ARGB_8888);
+ thumbnail = retriever.getThumbnailImageAtIndex(-1, params, targetSize, maxPixels);
+ } catch (RuntimeException ex) {
+ // Assume this is a corrupt video file.
+ } finally {
+ if (retriever != null) {
+ retriever.release();
+ }
+ }
+ return thumbnail;
+ }
}
diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp
index 4f6763e..c1226fa 100644
--- a/media/jni/android_media_MediaMetadataRetriever.cpp
+++ b/media/jni/android_media_MediaMetadataRetriever.cpp
@@ -263,7 +263,9 @@
static jobject getBitmapFromVideoFrame(
JNIEnv *env, VideoFrame *videoFrame, jint dst_width, jint dst_height,
SkColorType outColorType) {
- ALOGV("getBitmapFromVideoFrame: dimension = %dx%d and bytes = %d",
+ ALOGV("getBitmapFromVideoFrame: dimension = %dx%d, displaySize = %dx%d, bytes = %d",
+ videoFrame->mWidth,
+ videoFrame->mHeight,
videoFrame->mDisplayWidth,
videoFrame->mDisplayHeight,
videoFrame->mSize);
@@ -330,8 +332,7 @@
dst_height = std::round(displayHeight * factor);
}
- if ((uint32_t)dst_width != videoFrame->mWidth ||
- (uint32_t)dst_height != videoFrame->mHeight) {
+ if ((uint32_t)dst_width != width || (uint32_t)dst_height != height) {
ALOGV("Bitmap dimension is scaled from %dx%d to %dx%d",
width, height, dst_width, dst_height);
jobject scaledBitmap = env->CallStaticObjectMethod(fields.bitmapClazz,
@@ -433,6 +434,61 @@
return getBitmapFromVideoFrame(env, videoFrame, -1, -1, outColorType);
}
+static jobject android_media_MediaMetadataRetriever_getThumbnailImageAtIndex(
+ JNIEnv *env, jobject thiz, jint index, jobject params, jint targetSize, jint maxPixels)
+{
+ ALOGV("getThumbnailImageAtIndex: index %d", index);
+
+ sp<MediaMetadataRetriever> retriever = getRetriever(env, thiz);
+ if (retriever == 0) {
+ jniThrowException(env, "java/lang/IllegalStateException", "No retriever available");
+ return NULL;
+ }
+
+ int colorFormat = getColorFormat(env, params);
+ jint dst_width = -1, dst_height = -1;
+
+ // Call native method to retrieve an image
+ VideoFrame *videoFrame = NULL;
+ sp<IMemory> frameMemory = retriever->getImageAtIndex(
+ index, colorFormat, true /*metaOnly*/, true /*thumbnail*/);
+ if (frameMemory != 0) {
+ videoFrame = static_cast<VideoFrame *>(frameMemory->pointer());
+ int32_t thumbWidth = videoFrame->mWidth;
+ int32_t thumbHeight = videoFrame->mHeight;
+ videoFrame = NULL;
+ int64_t thumbPixels = thumbWidth * thumbHeight;
+
+ // Here we try to use the included thumbnail if it's not too shabby.
+ // If this fails ThumbnailUtils would have to decode the full image and
+ // downscale which could take long.
+ if (thumbWidth >= targetSize || thumbHeight >= targetSize
+ || thumbPixels * 6 >= maxPixels) {
+ frameMemory = retriever->getImageAtIndex(
+ index, colorFormat, false /*metaOnly*/, true /*thumbnail*/);
+ videoFrame = static_cast<VideoFrame *>(frameMemory->pointer());
+
+ if (thumbPixels > maxPixels) {
+ int downscale = ceil(sqrt(thumbPixels / (float)maxPixels));
+ dst_width = thumbWidth / downscale;
+ dst_height = thumbHeight /downscale;
+ }
+ }
+ }
+ if (videoFrame == NULL) {
+ ALOGV("getThumbnailImageAtIndex: no suitable thumbnails available");
+ return NULL;
+ }
+
+ // Ignore rotation for thumbnail extraction to be consistent with
+ // thumbnails extracted by BitmapFactory APIs.
+ videoFrame->mRotationAngle = 0;
+
+ SkColorType outColorType = setOutColorType(env, colorFormat, params);
+
+ return getBitmapFromVideoFrame(env, videoFrame, dst_width, dst_height, outColorType);
+}
+
static jobject android_media_MediaMetadataRetriever_getFrameAtIndex(
JNIEnv *env, jobject thiz, jint frameIndex, jint numFrames, jobject params)
{
@@ -664,6 +720,12 @@
},
{
+ "getThumbnailImageAtIndex",
+ "(ILandroid/media/MediaMetadataRetriever$BitmapParams;II)Landroid/graphics/Bitmap;",
+ (void *)android_media_MediaMetadataRetriever_getThumbnailImageAtIndex
+ },
+
+ {
"_getFrameAtIndex",
"(IILandroid/media/MediaMetadataRetriever$BitmapParams;)Ljava/util/List;",
(void *)android_media_MediaMetadataRetriever_getFrameAtIndex
diff --git a/packages/CaptivePortalLogin/AndroidManifest.xml b/packages/CaptivePortalLogin/AndroidManifest.xml
index 91bc505c..5fc9627 100644
--- a/packages/CaptivePortalLogin/AndroidManifest.xml
+++ b/packages/CaptivePortalLogin/AndroidManifest.xml
@@ -22,7 +22,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
- <uses-permission android:name="android.permission.NETWORK_STACK" />
+ <uses-permission android:name="android.permission.NETWORK_SETTINGS" />
<application android:label="@string/app_name"
android:usesCleartextTraffic="true">
diff --git a/packages/PrintSpooler/res/values-kn/strings.xml b/packages/PrintSpooler/res/values-kn/strings.xml
index 2f8e6e0..868320d 100644
--- a/packages/PrintSpooler/res/values-kn/strings.xml
+++ b/packages/PrintSpooler/res/values-kn/strings.xml
@@ -87,7 +87,7 @@
<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>
+ <string name="print_service_security_warning_title" msgid="2160752291246775320">"<xliff:g id="SERVICE">%1$s</xliff:g> ಅನ್ನು ಬಳಸುವುದೇ?"</string>
<string name="print_service_security_warning_summary" msgid="1427434625361692006">"ನಿಮ್ಮ ಡಾಕ್ಯುಮೆಂಟ್ ಪ್ರಿಂಟರ್ಗೆ ಹೋಗುವ ಸಂದರ್ಭದಲ್ಲಿ ಒಂದು ಅಥವಾ ಅದಕ್ಕಿಂತ ಹೆಚ್ಚು ಸರ್ವರ್ಗಳ ಮೂಲಕ ಹಾದು ಹೋಗಬಹುದು."</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"ಕಪ್ಪು & ಬಿಳುಪು"</item>
diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml
index 741560a..4975051 100644
--- a/packages/SettingsLib/res/values-ar/arrays.xml
+++ b/packages/SettingsLib/res/values-ar/arrays.xml
@@ -71,7 +71,7 @@
<item msgid="3422726142222090896">"avrcp16"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"استخدام اختيار النظام (افتراضي)"</item>
+ <item msgid="7065842274271279580">"استخدام اختيار النظام (تلقائي)"</item>
<item msgid="7539690996561263909">"SBC"</item>
<item msgid="686685526567131661">"AAC"</item>
<item msgid="5254942598247222737">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
@@ -81,7 +81,7 @@
<item msgid="3304843301758635896">"تعطيل برامج الترميز الاختيارية"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"استخدام اختيار النظام (افتراضي)"</item>
+ <item msgid="5062108632402595000">"استخدام اختيار النظام (تلقائي)"</item>
<item msgid="6898329690939802290">"SBC"</item>
<item msgid="6839647709301342559">"AAC"</item>
<item msgid="7848030269621918608">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
@@ -91,38 +91,38 @@
<item msgid="741805482892725657">"تعطيل برامج الترميز الاختيارية"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="3093023430402746802">"استخدام اختيار النظام (افتراضي)"</item>
+ <item msgid="3093023430402746802">"استخدام اختيار النظام (تلقائي)"</item>
<item msgid="8895532488906185219">"44.1 كيلو هرتز"</item>
<item msgid="2909915718994807056">"48.0 كيلو هرتز"</item>
<item msgid="3347287377354164611">"88.2 كيلو هرتز"</item>
<item msgid="1234212100239985373">"96.0 كيلو هرتز"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="3214516120190965356">"استخدام اختيار النظام (افتراضي)"</item>
+ <item msgid="3214516120190965356">"استخدام اختيار النظام (تلقائي)"</item>
<item msgid="4482862757811638365">"44.1 كيلو هرتز"</item>
<item msgid="354495328188724404">"48.0 كيلو هرتز"</item>
<item msgid="7329816882213695083">"88.2 كيلو هرتز"</item>
<item msgid="6967397666254430476">"96.0 كيلو هرتز"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="2684127272582591429">"استخدام اختيار النظام (افتراضي)"</item>
+ <item msgid="2684127272582591429">"استخدام اختيار النظام (تلقائي)"</item>
<item msgid="5618929009984956469">"16 بت لكل عيّنة"</item>
<item msgid="3412640499234627248">"24 بت لكل عيّنة"</item>
<item msgid="121583001492929387">"32 بت لكل عيّنة"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="1081159789834584363">"استخدام اختيار النظام (افتراضي)"</item>
+ <item msgid="1081159789834584363">"استخدام اختيار النظام (تلقائي)"</item>
<item msgid="4726688794884191540">"16 بت لكل عيّنة"</item>
<item msgid="305344756485516870">"24 بت لكل عيّنة"</item>
<item msgid="244568657919675099">"32 بت لكل عيّنة"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="5226878858503393706">"استخدام اختيار النظام (افتراضي)"</item>
+ <item msgid="5226878858503393706">"استخدام اختيار النظام (تلقائي)"</item>
<item msgid="4106832974775067314">"أحادي"</item>
<item msgid="5571632958424639155">"استريو"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="4118561796005528173">"استخدام اختيار النظام (افتراضي)"</item>
+ <item msgid="4118561796005528173">"استخدام اختيار النظام (تلقائي)"</item>
<item msgid="8900559293912978337">"أحادي"</item>
<item msgid="8883739882299884241">"استريو"</item>
</string-array>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index ddaa0b6..4c2de7e 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -164,7 +164,7 @@
<string name="tts_status_checking" msgid="5339150797940483592">"جارٍ التحقق…"</string>
<string name="tts_engine_settings_title" msgid="3499112142425680334">"إعدادات <xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>"</string>
<string name="tts_engine_settings_button" msgid="1030512042040722285">"تشغيل إعدادات المحرك"</string>
- <string name="tts_engine_preference_section_title" msgid="448294500990971413">"المحرك المفضل"</string>
+ <string name="tts_engine_preference_section_title" msgid="448294500990971413">"المحرّك المفضّل"</string>
<string name="tts_general_section_title" msgid="4402572014604490502">"عامة"</string>
<string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"إعادة ضبط طبقة صوت الكلام"</string>
<string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"إعادة ضبط طبقة الصوت التي يتم نطق النص بها على الإعداد الافتراضي."</string>
@@ -196,7 +196,7 @@
<string name="bugreport_in_power_summary" msgid="1778455732762984579">"عرض زر في قائمة خيارات التشغيل لإعداد تقرير بالأخطاء"</string>
<string name="keep_screen_on" msgid="1146389631208760344">"البقاء في الوضع النشط"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"لا يتم مطلقًا دخول الشاشة في وضع السكون أثناء الشحن"</string>
- <string name="bt_hci_snoop_log" msgid="3340699311158865670">"تمكين سجل تطفل بواجهة وحدة تحكم المضيف عبر بلوتوث"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"تفعيل سجلّ تطفّل بواجهة وحدة تحكّم المضيف عبر بلوتوث"</string>
<string name="bt_hci_snoop_log_summary" msgid="366083475849911315">"التقاط جميع حزم واجهة وحدة تحكم المضيف (HCI) في أحد الملفات عبر البلوتوث (تبديل البلوتوث بعد تغيير هذا الإعداد)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"إلغاء قفل المصنّع الأصلي للجهاز"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"السماح بإلغاء قفل برنامج bootloader"</string>
@@ -212,7 +212,7 @@
<string name="mobile_data_always_on" msgid="8774857027458200434">"بيانات الجوّال نشطة دائمًا"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"تسريع الأجهزة للتوصيل"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"عرض أجهزة البلوتوث بدون أسماء"</string>
- <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"تعطيل مستوى الصوت المطلق"</string>
+ <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"إيقاف مستوى الصوت المطلق"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"إصدار Bluetooth AVRCP"</string>
<string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"اختيار إصدار Bluetooth AVRCP"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ترميز صوت بلوتوث"</string>
@@ -248,7 +248,7 @@
<string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"حدد تهيئة USB"</string>
<string name="allow_mock_location" msgid="2787962564578664888">"السماح بمواقع وهمية"</string>
<string name="allow_mock_location_summary" msgid="317615105156345626">"السماح بمواقع وهمية"</string>
- <string name="debug_view_attributes" msgid="6485448367803310384">"تمكين فحص سمة العرض"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"تفعيل فحص سمة العرض"</string>
<string name="mobile_data_always_on_summary" msgid="8149773901431697910">"اجعل بيانات الجوّال نشطة دائمًا، حتى عندما يكون اتصال Wi‑Fi نشطًا (لتبديل الشبكة بسرعة)."</string>
<string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"استخدام إعداد تسريع الأجهزة للتوصيل إن كان متاحًا"</string>
<string name="adb_warning_title" msgid="6234463310896563253">"هل تريد السماح بتصحيح أخطاء USB؟"</string>
@@ -259,7 +259,7 @@
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"التحقق من التطبيقات عبر USB"</string>
<string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"التحقق من التطبيقات المثبتة عبر ADB/ADT لكشف السلوك الضار"</string>
<string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"سيتم عرض أجهزة البلوتوث بدون أسماء (عناوين MAC فقط)"</string>
- <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"لتعطيل ميزة مستوى الصوت المطلق للبلوتوث في حالة حدوث مشكلات متعلقة بمستوى الصوت مع الأجهزة البعيدة مثل مستوى صوت عالٍ بشكل غير مقبول أو نقص إمكانية التحكم في الصوت."</string>
+ <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"لإيقاف ميزة مستوى الصوت المطلق للبلوتوث في حال حدوث مشاكل متعلقة بمستوى الصوت في الأجهزة البعيدة، مثل مستوى صوت عالٍ بشكل غير مقبول أو عدم إمكانية التحكّم في الصوت"</string>
<string name="enable_terminal_title" msgid="95572094356054120">"تطبيق طرفي محلي"</string>
<string name="enable_terminal_summary" msgid="67667852659359206">"تمكين تطبيق طرفي يوفر إمكانية الدخول إلى واجهة النظام المحلية"</string>
<string name="hdcp_checking_title" msgid="8605478913544273282">"التحقق من HDCP"</string>
@@ -277,7 +277,7 @@
<string name="debug_hw_drawing_category" msgid="6220174216912308658">"عرض تسارع الأجهزة"</string>
<string name="media_category" msgid="4388305075496848353">"الوسائط"</string>
<string name="debug_monitoring_category" msgid="7640508148375798343">"المراقبة"</string>
- <string name="strict_mode" msgid="1938795874357830695">"تم تمكين الوضع المتشدد"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"تفعيل الوضع المتشدد"</string>
<string name="strict_mode_summary" msgid="142834318897332338">"وميض الشاشة عند إجراء التطبيقات عمليات طويلة في سلسلة المحادثات الرئيسية"</string>
<string name="pointer_location" msgid="6084434787496938001">"موقع المؤشر"</string>
<string name="pointer_location_summary" msgid="840819275172753713">"عرض تراكب الشاشة لبيانات اللمس الحالية"</string>
@@ -290,12 +290,12 @@
<string name="show_hw_layers_updates" msgid="5645728765605699821">"عرض تحديثات طبقات الأجهزة"</string>
<string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"تشغيل وميض بالأخضر لطبقات الأجهزة عند تحديثها"</string>
<string name="debug_hw_overdraw" msgid="2968692419951565417">"تصحيح تجاوز حد وحدة معالجة الرسومات"</string>
- <string name="disable_overlays" msgid="2074488440505934665">"تعطيل تراكبات الأجهزة"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"إيقاف تراكبات الأجهزة"</string>
<string name="disable_overlays_summary" msgid="3578941133710758592">"استخدام وحدة معالجة الرسومات دائمًا لتركيب الشاشة"</string>
<string name="simulate_color_space" msgid="6745847141353345872">"محاكاة مسافة اللون"</string>
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"تمكين عمليات تتبع OpenGL"</string>
- <string name="usb_audio_disable_routing" msgid="8114498436003102671">"تعطيل توجيه الصوت عبر USB"</string>
- <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"تعطيل التوجيه التلقائي إلى أجهزة الصوت الطرفية عبر USB"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"إيقاف توجيه الصوت عبر USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"إيقاف التوجيه التلقائي إلى أجهزة الصوت الطرفية عبر USB"</string>
<string name="debug_layout" msgid="5981361776594526155">"عرض حدود المخطط"</string>
<string name="debug_layout_summary" msgid="2001775315258637682">"عرض حدود وهوامش المقطع وما إلى ذلك."</string>
<string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"فرض اتجاه التنسيق ليكون من اليمين إلى اليسار"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 93b7644..f2f2dd9 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -182,8 +182,8 @@
<string name="choose_profile" msgid="6921016979430278661">"Izaberite profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Lično"</string>
<string name="category_work" msgid="8699184680584175622">"Posao"</string>
- <string name="development_settings_title" msgid="215179176067683667">"Opcije za programera"</string>
- <string name="development_settings_enable" msgid="542530994778109538">"Omogući opcije za programera"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opcije za programere"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Omogući opcije za programere"</string>
<string name="development_settings_summary" msgid="1815795401632854041">"Podešavanje opcija za programiranje aplikacije"</string>
<string name="development_settings_not_available" msgid="4308569041701535607">"Opcije za programere nisu dostupne za ovog korisnika"</string>
<string name="vpn_settings_not_available" msgid="956841430176985598">"Podešavanja VPN-a nisu dostupna za ovog korisnika"</string>
@@ -290,12 +290,12 @@
<string name="show_hw_layers_updates" msgid="5645728765605699821">"Prikaži ažuriranja hardverskih slojeva"</string>
<string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Hardverski slojevi trepere zeleno kada se ažuriraju"</string>
<string name="debug_hw_overdraw" msgid="2968692419951565417">"Otkloni greške GPU preklapanja"</string>
- <string name="disable_overlays" msgid="2074488440505934665">"Onemog. HW post. elemente"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Onemogući HW postavljene elemente"</string>
<string name="disable_overlays_summary" msgid="3578941133710758592">"Uvek koristi GPU za komponovanje ekrana"</string>
<string name="simulate_color_space" msgid="6745847141353345872">"Simuliraj prostor boje"</string>
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"Omogući OpenGL tragove"</string>
<string name="usb_audio_disable_routing" msgid="8114498436003102671">"Onemogući USB preusm. zvuka"</string>
- <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Onemogući automat. preusmer. na USB audio periferne uređaje"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Onemogući aut. preusm. na USB audio periferne uređaje"</string>
<string name="debug_layout" msgid="5981361776594526155">"Prikaži granice rasporeda"</string>
<string name="debug_layout_summary" msgid="2001775315258637682">"Prikaži granice klipa, margine itd."</string>
<string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Nametni smer rasporeda zdesna nalevo"</string>
@@ -307,7 +307,7 @@
<string name="show_non_rect_clip" msgid="505954950474595172">"Otkloni greške u vezi sa radnjama za isecanje oblasti koje nisu pravougaonog oblika"</string>
<string name="track_frame_time" msgid="6146354853663863443">"Prikaži profil pomoću GPU"</string>
<string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Omogući slojeve za otklanjanje grešaka GPU-a"</string>
- <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Omogući učitavanje sloj. za otk. greš. GPU-a u apl. za otk. greš."</string>
+ <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Omogući učitavanje otk. greš. GPU-a u apl. za otk. greš."</string>
<string name="window_animation_scale_title" msgid="6162587588166114700">"Razmera animacije prozora"</string>
<string name="transition_animation_scale_title" msgid="387527540523595875">"Razmera animacije prelaza"</string>
<string name="animator_duration_scale_title" msgid="3406722410819934083">"Animatorova razmera trajanja"</string>
@@ -316,7 +316,7 @@
<string name="immediately_destroy_activities" msgid="1579659389568133959">"Ne čuvaj aktivnosti"</string>
<string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Uništi svaku aktivnost čim je korisnik napusti"</string>
<string name="app_process_limit_title" msgid="4280600650253107163">"Ograničenje pozadinskih procesa"</string>
- <string name="show_all_anrs" msgid="4924885492787069007">"Prikaži ANR-ove u pozad."</string>
+ <string name="show_all_anrs" msgid="4924885492787069007">"Prikaži ANR-ove u pozadini"</string>
<string name="show_all_anrs_summary" msgid="6636514318275139826">"Prikaži dijalog Aplikacija ne reaguje za aplikacije u pozadini"</string>
<string name="show_notification_channel_warnings" msgid="1399948193466922683">"Prikazuj upozorenja zbog kanala za obaveštenja"</string>
<string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Prikazuje upozorenje na ekranu kada aplikacija postavi obaveštenje bez važećeg kanala"</string>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index 3c5471b..dcdfeed 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -320,13 +320,13 @@
<string name="show_all_anrs_summary" msgid="6636514318275139826">"Показване на диалоговия прозорец за грешки от типа ANR за приложенията на заден план"</string>
<string name="show_notification_channel_warnings" msgid="1399948193466922683">"Предупрежд. за канала за известия"</string>
<string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Показва се предупреждение, когато приложение публикува известие без валиден канал"</string>
- <string name="force_allow_on_external" msgid="3215759785081916381">"Външно хран.: Принуд. разрешаване на приложенията"</string>
- <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Прави всички приложения да отговарят на условията да бъдат записвани във външното хранилище независимо от стойностите в манифеста"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Външно хран.: принуд. разрешаване на приложенията"</string>
+ <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Всички приложения ще отговарят на условията да бъдат записвани във външното хранилище независимо от стойностите в манифеста"</string>
<string name="force_resizable_activities" msgid="8615764378147824985">"Възможност за преоразмеряване на активностите"</string>
<string name="force_resizable_activities_summary" msgid="6667493494706124459">"Дава възможност за преоразмеряване на всички активности в режима за няколко прозореца независимо от стойностите в манифеста."</string>
<string name="enable_freeform_support" msgid="1461893351278940416">"Активиране на прозорците в свободна форма"</string>
<string name="enable_freeform_support_summary" msgid="8247310463288834487">"Активиране на поддръжката за експерименталните прозорци в свободна форма."</string>
- <string name="local_backup_password_title" msgid="3860471654439418822">"Наст. комп.: Парола"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Парола за резервни копия"</string>
<string name="local_backup_password_summary_none" msgid="6951095485537767956">"Понастоящем пълните резервни копия за настолен компютър не са защитени"</string>
<string name="local_backup_password_summary_change" msgid="5376206246809190364">"Докоснете, за да промените или премахнете паролата за пълни резервни копия на настолния компютър"</string>
<string name="local_backup_password_toast_success" msgid="582016086228434290">"Зададена е нова парола за резервно копие"</string>
diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml
index 3f6d3b8..c207772 100644
--- a/packages/SettingsLib/res/values-ca/arrays.xml
+++ b/packages/SettingsLib/res/values-ca/arrays.xml
@@ -29,7 +29,7 @@
<item msgid="4221763391123233270">"Connectat"</item>
<item msgid="624838831631122137">"Suspesa"</item>
<item msgid="7979680559596111948">"S\'està desconnectant..."</item>
- <item msgid="1634960474403853625">"Desconnectada"</item>
+ <item msgid="1634960474403853625">"Desconnectat"</item>
<item msgid="746097431216080650">"Incorrecte"</item>
<item msgid="6367044185730295334">"Bloquejada"</item>
<item msgid="503942654197908005">"S\'està evitant temporalment una connexió feble"</item>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 19fc6a8..5b373d0 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -34,7 +34,7 @@
<string name="wifi_not_in_range" msgid="1136191511238508967">"Fora de l\'abast"</string>
<string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"No es connectarà automàticament"</string>
<string name="wifi_no_internet" msgid="4663834955626848401">"No hi ha accés a Internet"</string>
- <string name="saved_network" msgid="4352716707126620811">"Desat per <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="saved_network" msgid="4352716707126620811">"Desada per <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Connectada automàticament a través de: %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Connectada automàticament a través d\'un proveïdor de valoració de xarxes"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connectada mitjançant %1$s"</string>
@@ -191,26 +191,26 @@
<string name="apn_settings_not_available" msgid="7873729032165324000">"La configuració del nom del punt d\'accés no està disponible per a aquest usuari."</string>
<string name="enable_adb" msgid="7982306934419797485">"Depuració USB"</string>
<string name="enable_adb_summary" msgid="4881186971746056635">"Activa el mode de depuració quan el dispositiu estigui connectat per USB"</string>
- <string name="clear_adb_keys" msgid="4038889221503122743">"Revoca autoritzacions depuració USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revoca autoritzacions de depuració USB"</string>
<string name="bugreport_in_power" msgid="7923901846375587241">"Drecera per a informe d\'errors"</string>
<string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostra un botó al menú d\'engegada per crear un informe d\'errors"</string>
<string name="keep_screen_on" msgid="1146389631208760344">"Pantalla activa"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla no entra mai en mode de repòs si el dispositiu està carregant-se"</string>
- <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activa registre cerca HCI Bluetooth"</string>
- <string name="bt_hci_snoop_log_summary" msgid="366083475849911315">"Captura tots els paquets HCI de Bluetooth en un fitxer (activa el Bluetooth un cop hagis canviat aquesta opció)"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activa registre de Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="366083475849911315">"Captura tots els paquets de Bluetooth HCI en un fitxer (activa el Bluetooth un cop hagis canviat aquesta opció)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueig d\'OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permet desbloquejar el bootloader"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permetre el desbloqueig d\'OEM?"</string>
<string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ADVERTIMENT: les funcions de protecció del dispositiu no funcionaran mentre aquesta opció estigui activada."</string>
<string name="mock_location_app" msgid="7966220972812881854">"Selecciona aplicació per simular ubicació"</string>
- <string name="mock_location_app_not_set" msgid="809543285495344223">"Cap aplicació per simular ubicació seleccionada"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"No s\'ha establert cap aplicació per simular ubicació"</string>
<string name="mock_location_app_set" msgid="8966420655295102685">"Aplicació per simular ubicació: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="debug_networking_category" msgid="7044075693643009662">"Xarxes"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificació de pantalla sense fil"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Activa el registre Wi‑Fi detallat"</string>
<string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Aleatorització de MAC amb connexió"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Dades mòbils sempre actives"</string>
- <string name="tethering_hardware_offload" msgid="7470077827090325814">"Acceleració per maquinari per compartir la xarxa"</string>
+ <string name="tethering_hardware_offload" msgid="7470077827090325814">"Acceleració per maquinari per a compartició de xarxa"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostra els dispositius Bluetooth sense el nom"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desactiva el volum absolut"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versió AVRCP de Bluetooth"</string>
@@ -242,7 +242,7 @@
<string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Mida Logger per memòria intermèdia"</string>
<string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Vols esborrar l\'emmagatzematge persistent del registrador?"</string>
<string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Quan deixem de supervisar amb el registrador persistent, hem d\'esborrar les dades del registrador que hi ha al teu dispositiu."</string>
- <string name="select_logpersist_title" msgid="7530031344550073166">"Emm. dades reg. persist. a disp."</string>
+ <string name="select_logpersist_title" msgid="7530031344550073166">"Desa dades reg. de manera permanent"</string>
<string name="select_logpersist_dialog_title" msgid="4003400579973269060">"Selecciona memòries interm. de registre per emmag. de manera persistent al disp."</string>
<string name="select_usb_configuration_title" msgid="2649938511506971843">"Selecciona configuració d\'USB"</string>
<string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Selecciona configuració d\'USB"</string>
@@ -278,19 +278,19 @@
<string name="media_category" msgid="4388305075496848353">"Multimèdia"</string>
<string name="debug_monitoring_category" msgid="7640508148375798343">"Supervisió"</string>
<string name="strict_mode" msgid="1938795874357830695">"Mode estricte"</string>
- <string name="strict_mode_summary" msgid="142834318897332338">"Centelleja si les aplicacions triguen molt al procés principal"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Centelleja si les aplicacions tarden molt al procés principal"</string>
<string name="pointer_location" msgid="6084434787496938001">"Ubicació del punter"</string>
<string name="pointer_location_summary" msgid="840819275172753713">"Superposa les dades dels tocs a la pantalla"</string>
<string name="show_touches" msgid="2642976305235070316">"Mostra els tocs"</string>
<string name="show_touches_summary" msgid="6101183132903926324">"Mostra la ubicació visual dels tocs"</string>
<string name="show_screen_updates" msgid="5470814345876056420">"Canvis de superfície"</string>
<string name="show_screen_updates_summary" msgid="2569622766672785529">"Actualitza superfícies de finestres en actualitzar-se"</string>
- <string name="show_hw_screen_updates" msgid="5036904558145941590">"Actualitzacions GPU"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Mostra actualitzacions GPU"</string>
<string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Actualitza visualitzacions de finestres creades amb GPU"</string>
- <string name="show_hw_layers_updates" msgid="5645728765605699821">"Mostra actualitzacions capes"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Mostra actualitzacions capes maquinari"</string>
<string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Il·lumina capes de maquinari en verd en actualitzar-se"</string>
<string name="debug_hw_overdraw" msgid="2968692419951565417">"Depura sobredibuix de GPU"</string>
- <string name="disable_overlays" msgid="2074488440505934665">"Desactiva superposicions HW"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Desactiva superposicions maquinari"</string>
<string name="disable_overlays_summary" msgid="3578941133710758592">"Utilitza sempre GPU per combinar pantalles"</string>
<string name="simulate_color_space" msgid="6745847141353345872">"Simula l\'espai de color"</string>
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"Activa traces d\'OpenGL"</string>
@@ -300,7 +300,7 @@
<string name="debug_layout_summary" msgid="2001775315258637682">"Mostra els límits de clips, els marges, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Força direcció dreta-esquerra"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Força direcció de pantalla dreta-esquerra en totes les llengües"</string>
- <string name="force_hw_ui" msgid="6426383462520888732">"Força acceleració GPU"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Força renderització GPU"</string>
<string name="force_hw_ui_summary" msgid="5535991166074861515">"Força l\'ús de GPU per a dibuixos en 2D"</string>
<string name="force_msaa" msgid="7920323238677284387">"Força MSAA 4x"</string>
<string name="force_msaa_summary" msgid="9123553203895817537">"Activa MSAA 4x en aplicacions d\'OpenGL ES 2.0"</string>
@@ -327,7 +327,7 @@
<string name="enable_freeform_support" msgid="1461893351278940416">"Activa les finestres de format lliure"</string>
<string name="enable_freeform_support_summary" msgid="8247310463288834487">"Activa la compatibilitat amb finestres de format lliure experimentals."</string>
<string name="local_backup_password_title" msgid="3860471654439418822">"Contrasenya per a còpies d\'ordinador"</string>
- <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Les còpies de seguretat d\'ordinador completes no estan protegides"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Les còpies de seguretat completes d\'ordinador no estan protegides"</string>
<string name="local_backup_password_summary_change" msgid="5376206246809190364">"Toca per canviar o suprimir la contrasenya per a les còpies de seguretat completes de l\'ordinador"</string>
<string name="local_backup_password_toast_success" msgid="582016086228434290">"S\'ha definit una contrasenya de seguretat nova"</string>
<string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"La contrasenya nova i la confirmació no coincideixen"</string>
@@ -342,14 +342,14 @@
<item msgid="8280754435979370728">"Colors naturals tal com els veu l\'ull humà"</item>
<item msgid="5363960654009010371">"Colors optimitzats per al contingut digital"</item>
</string-array>
- <string name="inactive_apps_title" msgid="9042996804461901648">"Aplicacions inactives"</string>
+ <string name="inactive_apps_title" msgid="9042996804461901648">"Aplicacions en espera"</string>
<string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Aplicació inactiva. Toca per activar-la."</string>
<string name="inactive_app_active_summary" msgid="4174921824958516106">"Aplicació activa. Toca per desactivar-la."</string>
<string name="standby_bucket_summary" msgid="6567835350910684727">"Estat de les aplicacions inactives: <xliff:g id="BUCKET"> %s</xliff:g>"</string>
<string name="runningservices_settings_title" msgid="8097287939865165213">"Serveis en execució"</string>
<string name="runningservices_settings_summary" msgid="854608995821032748">"Visualitza i controla els serveis en execució"</string>
<string name="select_webview_provider_title" msgid="4628592979751918907">"Implementació de WebView"</string>
- <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Configura la implementació de WebView"</string>
+ <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Estableix implementació de WebView"</string>
<string name="select_webview_provider_toast_text" msgid="5466970498308266359">"Aquesta opció ja no és vàlida. Torna-ho a provar."</string>
<string name="convert_to_file_encryption" msgid="3060156730651061223">"Converteix en encriptació de fitxers"</string>
<string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Converteix…"</string>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index e25dfcc..9b2b5f5 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -140,7 +140,7 @@
<string name="running_process_item_user_label" msgid="3129887865552025943">"Usuario: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="launch_defaults_some" msgid="313159469856372621">"Se han establecido algunos valores predeterminados"</string>
<string name="launch_defaults_none" msgid="4241129108140034876">"No se han establecido valores predeterminados"</string>
- <string name="tts_settings" msgid="8186971894801348327">"Configuración síntesis voz"</string>
+ <string name="tts_settings" msgid="8186971894801348327">"Ajustes de síntesis de voz"</string>
<string name="tts_settings_title" msgid="1237820681016639683">"Síntesis de voz"</string>
<string name="tts_default_rate_title" msgid="6030550998379310088">"Velocidad de la voz"</string>
<string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidad a la que se lee el texto"</string>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 936165c..848b16e 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -206,7 +206,7 @@
<string name="mock_location_app_not_set" msgid="809543285495344223">"Ez da ezarri kokapen faltsuen aplikaziorik"</string>
<string name="mock_location_app_set" msgid="8966420655295102685">"Kokapen faltsuen aplikazioa: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="debug_networking_category" msgid="7044075693643009662">"Sareak"</string>
- <string name="wifi_display_certification" msgid="8611569543791307533">"Hari gabeko bistaratze-egiaztatzea"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Hari gabeko bistaratze-egiaztapena"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Gaitu Wi-Fi sareetan saioa hasteko modu xehatua"</string>
<string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Konektatutako MAC helbideak ausaz aukeratzea"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Datu-konexioa beti aktibo"</string>
@@ -249,17 +249,17 @@
<string name="allow_mock_location" msgid="2787962564578664888">"Onartu kokapen faltsuak"</string>
<string name="allow_mock_location_summary" msgid="317615105156345626">"Onartu kokapen faltsuak"</string>
<string name="debug_view_attributes" msgid="6485448367803310384">"Gaitu ikuspegiaren atributuak ikuskatzeko aukera"</string>
- <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantendu mugikorreko datuak beti aktibo, baita Wi-Fi konexioa aktibo dagoenean ere (sarez bizkor aldatu ahal izateko)."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantendu mugikorreko datuak beti aktibo, baita Wi-Fi konexioa aktibo dagoenean ere (sarez bizkor aldatu ahal izateko)"</string>
<string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Erabilgarri badago, erabili konexioa partekatzeko hardwarearen azelerazioa"</string>
<string name="adb_warning_title" msgid="6234463310896563253">"USB arazketa onartu?"</string>
<string name="adb_warning_message" msgid="7316799925425402244">"USB arazketa garapen-xedeetarako soilik dago diseinatuta. Erabil ezazu ordenagailuaren eta gailuaren artean datuak kopiatzeko, aplikazioak gailuan jakinarazi gabe instalatzeko eta erregistro-datuak irakurtzeko."</string>
<string name="adb_keys_warning_message" msgid="5659849457135841625">"Aurretik baimendutako ordenagailu guztiei USB arazketarako sarbidea baliogabetu nahi diezu?"</string>
<string name="dev_settings_warning_title" msgid="7244607768088540165">"Baimendu garapenerako ezarpenak?"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"Ezarpen hauek garapen-xedeetarako pentsatu dira soilik. Baliteke ezarpenen eraginez gailua matxuratzea edo funtzionamendu okerra izatea."</string>
- <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Egiaztatu USBko aplikazioak."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Egiaztatu USBko aplikazioak"</string>
<string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Egiaztatu ADB/ADT bidez instalatutako aplikazioak portaera kaltegarriak antzemateko."</string>
<string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth gailuak izenik gabe (MAC helbideak soilik) erakutsiko dira"</string>
- <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desgaitu egiten du Bluetooth bidezko bolumen absolutuaren eginbidea urruneko gailuetan arazoak hautematen badira; esaterako, bolumena ozenegia bada edo ezin bada kontrolatu."</string>
+ <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Bluetooth bidezko bolumen absolutuaren eginbidea desgaitu egiten du urruneko gailuetan arazoak hautematen badira; esaterako, bolumena ozenegia bada edo ezin bada kontrolatu."</string>
<string name="enable_terminal_title" msgid="95572094356054120">"Tokiko terminala"</string>
<string name="enable_terminal_summary" msgid="67667852659359206">"Gaitu tokiko shell-sarbidea duen terminal-aplikazioa"</string>
<string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP egiaztapena"</string>
@@ -273,7 +273,7 @@
<string name="wait_for_debugger" msgid="1202370874528893091">"Itxaron araztaileari"</string>
<string name="wait_for_debugger_summary" msgid="1766918303462746804">"Araztutako aplikazioa araztailea erantsi arte itxaroten ari da exekutatu aurretik"</string>
<string name="debug_input_category" msgid="1811069939601180246">"Sarrera"</string>
- <string name="debug_drawing_category" msgid="6755716469267367852">"Marrazkia"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Marrazketa"</string>
<string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardware bidez bizkortutako errendatzea"</string>
<string name="media_category" msgid="4388305075496848353">"Multimedia-edukia"</string>
<string name="debug_monitoring_category" msgid="7640508148375798343">"Kontrola"</string>
@@ -283,7 +283,7 @@
<string name="pointer_location_summary" msgid="840819275172753713">"Ukipen-datuak erakusteko pantaila-gainjartzea"</string>
<string name="show_touches" msgid="2642976305235070316">"Erakutsi sakatutakoa"</string>
<string name="show_touches_summary" msgid="6101183132903926324">"Erakutsi sakatutako elementuak"</string>
- <string name="show_screen_updates" msgid="5470814345876056420">"Erakutsi azaleko egunera."</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Erakutsi azaleko aldaketak"</string>
<string name="show_screen_updates_summary" msgid="2569622766672785529">"Distiratu leiho osoen azalak eguneratzen direnean"</string>
<string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU ikuspegi-eguneratzeak"</string>
<string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Ikuspegi-distira leiho barrutik GPUz marraztean"</string>
@@ -298,20 +298,20 @@
<string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desgaitu USB audio-gailuetara automatikoki bideratzea"</string>
<string name="debug_layout" msgid="5981361776594526155">"Erakutsi diseinu-mugak"</string>
<string name="debug_layout_summary" msgid="2001775315258637682">"Erakutsi kliparen mugak, marjinak, etab."</string>
- <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Behartu eskuin-ezker norabidea."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Behartu eskuin-ezker norabidea"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Behartu pantaila-diseinuaren norabidea eskuin-ezker izatera eskualdeko ezarpen guztiekin."</string>
<string name="force_hw_ui" msgid="6426383462520888732">"Behartu GPU errendatzea"</string>
- <string name="force_hw_ui_summary" msgid="5535991166074861515">"Behartu GPUa erabiltzera 2 dimentsioko marrazkietan."</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Behartu GPUa erabiltzera 2 dimentsioko marrazkietan"</string>
<string name="force_msaa" msgid="7920323238677284387">"Behartu 4x MSAA"</string>
- <string name="force_msaa_summary" msgid="9123553203895817537">"Gaitu 4x MSAA, OpenGL ES 2.0 aplikazioetan."</string>
- <string name="show_non_rect_clip" msgid="505954950474595172">"Araztu angeluzuzenak ez diren klip-eragiketak."</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Gaitu 4x MSAA, OpenGL ES 2.0 aplikazioetan"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Araztu angeluzuzenak ez diren klip-eragiketak"</string>
<string name="track_frame_time" msgid="6146354853663863443">"GPU errendatze-profila"</string>
<string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Gaitu GPUaren arazte-geruzak"</string>
<string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Onartu GPUaren arazte-geruzak kargatzea arazte-aplikazioetarako"</string>
<string name="window_animation_scale_title" msgid="6162587588166114700">"Leihoen animazio-eskala"</string>
- <string name="transition_animation_scale_title" msgid="387527540523595875">"Trantsizio-animazio eskala"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Trantsizioen animazio-eskala"</string>
<string name="animator_duration_scale_title" msgid="3406722410819934083">"Animatzailearen iraupena"</string>
- <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulatu bigarren mailako bistaratzeak"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulatu bigarren mailako pantailak"</string>
<string name="debug_applications_category" msgid="4206913653849771549">"Aplikazioak"</string>
<string name="immediately_destroy_activities" msgid="1579659389568133959">"Ez mantendu jarduerak"</string>
<string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Ezabatu jarduerak erabiltzailea haietatik irtetean"</string>
@@ -320,14 +320,14 @@
<string name="show_all_anrs_summary" msgid="6636514318275139826">"Erakutsi aplikazioak ez erantzutearen (ANR) leihoa atzeko planoan dabiltzan aplikazioen kasuan"</string>
<string name="show_notification_channel_warnings" msgid="1399948193466922683">"Erakutsi jakinarazpenen kanalen abisuak"</string>
<string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Bistaratu abisuak aplikazioek baliozko kanalik gabeko jakinarazpenak argitaratzean"</string>
- <string name="force_allow_on_external" msgid="3215759785081916381">"Behartu aplikazioak onartzea kanpoko biltegian"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Behartu aplikazioak onartzea kanpoko memorian"</string>
<string name="force_allow_on_external_summary" msgid="3640752408258034689">"Aplikazioek kanpoko memorian idatz dezakete, manifestuaren balioak kontuan izan gabe"</string>
<string name="force_resizable_activities" msgid="8615764378147824985">"Behartu jardueren tamaina doitu ahal izatea"</string>
<string name="force_resizable_activities_summary" msgid="6667493494706124459">"Eman aukera jarduera guztien tamaina doitzeko, hainbat leihotan erabili ahal izan daitezen, manifestuan jartzen duena jartzen duela ere."</string>
<string name="enable_freeform_support" msgid="1461893351278940416">"Gaitu estilo libreko leihoak"</string>
<string name="enable_freeform_support_summary" msgid="8247310463288834487">"Onartu estilo libreko leiho esperimentalak."</string>
<string name="local_backup_password_title" msgid="3860471654439418822">"Tokiko babeskop. pasahitza"</string>
- <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Une honetan, ordenagailuko babeskopia osoak ez daude babestuta."</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Une honetan, ordenagailuko babeskopia osoak ez daude babestuta"</string>
<string name="local_backup_password_summary_change" msgid="5376206246809190364">"Ordenagailuko eduki guztiaren babeskopia egiteko erabiltzen den pasahitza aldatzeko edo kentzeko, sakatu hau"</string>
<string name="local_backup_password_toast_success" msgid="582016086228434290">"Babeskopiaren pasahitz berria ezarri da"</string>
<string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Pasahitz berria eta berrespena ez datoz bat"</string>
@@ -348,8 +348,8 @@
<string name="standby_bucket_summary" msgid="6567835350910684727">"Egonean moduko aplikazioaren egoera: <xliff:g id="BUCKET"> %s</xliff:g>"</string>
<string name="runningservices_settings_title" msgid="8097287939865165213">"Abian diren zerbitzuak"</string>
<string name="runningservices_settings_summary" msgid="854608995821032748">"Ikusi eta kontrolatu unean abian diren zerbitzuak"</string>
- <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView implementation"</string>
- <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Set WebView implementation"</string>
+ <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView inplementazioa"</string>
+ <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Ezarri WebView inplementazioa"</string>
<string name="select_webview_provider_toast_text" msgid="5466970498308266359">"Jada ez dago erabilgarri aukera hori. Saiatu berriro."</string>
<string name="convert_to_file_encryption" msgid="3060156730651061223">"Eman fitxategietan oinarritutako enkriptatzea"</string>
<string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Enkriptatu…"</string>
diff --git a/packages/SettingsLib/res/values-gl/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml
index bc35303..1d186f9 100644
--- a/packages/SettingsLib/res/values-gl/arrays.xml
+++ b/packages/SettingsLib/res/values-gl/arrays.xml
@@ -71,7 +71,7 @@
<item msgid="3422726142222090896">"avrcp16"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Usar selección sistema (predeterminado)"</item>
+ <item msgid="7065842274271279580">"Usar selección do sistema (predeterminado)"</item>
<item msgid="7539690996561263909">"SBC"</item>
<item msgid="686685526567131661">"AAC"</item>
<item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
@@ -81,7 +81,7 @@
<item msgid="3304843301758635896">"Desactivar códecs opcionais"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Usa selección sistema (predeterminado)"</item>
+ <item msgid="5062108632402595000">"Usar selección do sistema (predeterminado)"</item>
<item msgid="6898329690939802290">"SBC"</item>
<item msgid="6839647709301342559">"AAC"</item>
<item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
@@ -91,38 +91,38 @@
<item msgid="741805482892725657">"Desactiva os códecs opcionais"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="3093023430402746802">"Usar selección sistema (predeterminado)"</item>
+ <item msgid="3093023430402746802">"Usar selección do sistema (predeterminado)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
<item msgid="2909915718994807056">"48,0 kHz"</item>
<item msgid="3347287377354164611">"88,2 kHz"</item>
<item msgid="1234212100239985373">"96,0 kHz"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="3214516120190965356">"Usa selección sistema (predeterminado)"</item>
+ <item msgid="3214516120190965356">"Usar selección do sistema (predeterminado)"</item>
<item msgid="4482862757811638365">"44,1 kHz"</item>
<item msgid="354495328188724404">"48,0 kHz"</item>
<item msgid="7329816882213695083">"88,2 kHz"</item>
<item msgid="6967397666254430476">"96,0 kHz"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="2684127272582591429">"Usar selección sistema (predeterminado)"</item>
+ <item msgid="2684127272582591429">"Usar selección do sistema (predeterminado)"</item>
<item msgid="5618929009984956469">"16 bits/mostra"</item>
<item msgid="3412640499234627248">"24 bits/mostra"</item>
<item msgid="121583001492929387">"32 bits/mostra"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="1081159789834584363">"Usa selección sistema (predeterminado)"</item>
+ <item msgid="1081159789834584363">"Usar selección do sistema (predeterminado)"</item>
<item msgid="4726688794884191540">"16 bits/mostra"</item>
<item msgid="305344756485516870">"24 bits/mostra"</item>
<item msgid="244568657919675099">"32 bits/mostra"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="5226878858503393706">"Usar selección sistema (predeterminado)"</item>
+ <item msgid="5226878858503393706">"Usar selección do sistema (predeterminado)"</item>
<item msgid="4106832974775067314">"Mono"</item>
<item msgid="5571632958424639155">"Estéreo"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="4118561796005528173">"Usa selección sistema (predeterminado)"</item>
+ <item msgid="4118561796005528173">"Usar selección do sistema (predeterminado)"</item>
<item msgid="8900559293912978337">"Mono"</item>
<item msgid="8883739882299884241">"Estéreo"</item>
</string-array>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 86dcc97..4f129cf 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -193,7 +193,7 @@
<string name="enable_adb_summary" msgid="4881186971746056635">"Modo de depuración de erros cando o USB está conectado"</string>
<string name="clear_adb_keys" msgid="4038889221503122743">"Revogar as autorizacións de depuración por USB"</string>
<string name="bugreport_in_power" msgid="7923901846375587241">"Atallo do informe de erros"</string>
- <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostrar un botón no menú de acendido para crear un informe de erros"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostra un botón no menú de acendido para crear un informe de erros"</string>
<string name="keep_screen_on" msgid="1146389631208760344">"Pantalla activa"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"A pantalla nunca estará en modo de suspensión durante a carga"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activar rexistro de busca HCI Bluetooth"</string>
@@ -234,7 +234,7 @@
<string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Introduce o nome de host de provedor de DNS"</string>
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Non se puido conectar"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra opcións para o certificado de visualización sen fíos"</string>
- <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nivel de rexistro da wifi, mostrar por SSID RSSI no selector de wifi"</string>
+ <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumenta o nivel de rexistro da wifi, móstrao por SSID RSSI no selector de wifi"</string>
<string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Selecciona aleatoriamente o enderezo MAC cando te conectes a redes wifi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"De pago por consumo"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Sen pago por consumo"</string>
@@ -294,7 +294,7 @@
<string name="disable_overlays_summary" msgid="3578941133710758592">"Utilizar sempre GPU para a composición da pantalla"</string>
<string name="simulate_color_space" msgid="6745847141353345872">"Simular o espazo da cor"</string>
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"Activar rastros OpenGL"</string>
- <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desactivar enr. audio USB"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desactivar enrutamento audio USB"</string>
<string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desactivar enrutamento aut. a periférico audio USB"</string>
<string name="debug_layout" msgid="5981361776594526155">"Mostrar límites de deseño"</string>
<string name="debug_layout_summary" msgid="2001775315258637682">"Mostra os límites dos clips, as marxes, etc."</string>
diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml
index 5027116..1cc1b55 100644
--- a/packages/SettingsLib/res/values-hi/arrays.xml
+++ b/packages/SettingsLib/res/values-hi/arrays.xml
@@ -29,7 +29,7 @@
<item msgid="4221763391123233270">"कनेक्ट किया गया"</item>
<item msgid="624838831631122137">"निलंबित"</item>
<item msgid="7979680559596111948">"डिस्कनेक्ट हो रहा है..."</item>
- <item msgid="1634960474403853625">"डिस्कनेक्ट किया गया"</item>
+ <item msgid="1634960474403853625">"डिसकनेक्ट किया गया"</item>
<item msgid="746097431216080650">"असफल"</item>
<item msgid="6367044185730295334">"अवरोधित"</item>
<item msgid="503942654197908005">"खराब कनेक्शन को अस्थायी रूप से अनदेखा कर रहा है"</item>
@@ -43,7 +43,7 @@
<item msgid="8937994881315223448">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> से कनेक्ट किया गया"</item>
<item msgid="1330262655415760617">"निलंबित"</item>
<item msgid="7698638434317271902">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> से डिस्कनेक्ट कर रहा है…"</item>
- <item msgid="197508606402264311">"डिस्कनेक्ट किया गया"</item>
+ <item msgid="197508606402264311">"डिसकनेक्ट किया गया"</item>
<item msgid="8578370891960825148">"असफल"</item>
<item msgid="5660739516542454527">"अवरोधित"</item>
<item msgid="1805837518286731242">"खराब कनेक्शन को अस्थायी रूप से अनदेखा कर रहा है"</item>
@@ -59,7 +59,7 @@
<item msgid="45075631231212732">"हमेशा HDCP जाँच का उपयोग करें"</item>
</string-array>
<string-array name="bluetooth_avrcp_versions">
- <item msgid="5347678900838034763">"AVRCP 1.4 (डिफ़ॉल्ट)"</item>
+ <item msgid="5347678900838034763">"एवीआरसीपी 1.4 (डिफ़ॉल्ट)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
<item msgid="6199178154704729352">"AVRCP 1.5"</item>
<item msgid="5172170854953034852">"AVRCP 1.6"</item>
@@ -156,7 +156,7 @@
<item msgid="6921048829791179331">"बंद"</item>
<item msgid="2969458029344750262">"64K प्रति लॉग बफ़र"</item>
<item msgid="1342285115665698168">"256K प्रति लॉग बफ़र"</item>
- <item msgid="1314234299552254621">"1M प्रति लॉग बफ़र"</item>
+ <item msgid="1314234299552254621">"1 एमबी प्रति लॉग बफ़र"</item>
<item msgid="3606047780792894151">"4M प्रति लॉग बफ़र"</item>
<item msgid="5431354956856655120">"16M प्रति लॉग बफ़र"</item>
</string-array>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index e7b0690..451112a 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -52,7 +52,7 @@
<string name="speed_label_fast" msgid="7715732164050975057">"तेज़"</string>
<string name="speed_label_very_fast" msgid="2265363430784523409">"अत्यधिक तेज़"</string>
<string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
- <string name="bluetooth_disconnected" msgid="6557104142667339895">"डिस्कनेक्ट किया गया"</string>
+ <string name="bluetooth_disconnected" msgid="6557104142667339895">"डिसकनेक्ट किया गया"</string>
<string name="bluetooth_disconnecting" msgid="8913264760027764974">"डिस्कनेक्ट हो रहा है..."</string>
<string name="bluetooth_connecting" msgid="8555009514614320497">"कनेक्ट हो रहा है..."</string>
<string name="bluetooth_connected" msgid="5427152882755735944">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> से जुड़ गया"</string>
@@ -129,13 +129,13 @@
<string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
<string name="data_usage_uninstalled_apps" msgid="614263770923231598">"निकाले गए ऐप्स"</string>
<string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ऐप्स और उपयोगकर्ताओं को निकालें"</string>
- <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB से इंटरनेट पर शेयर करें"</string>
+ <string name="tether_settings_title_usb" msgid="6688416425801386511">"यूएसबी से टेदरिंग"</string>
<string name="tether_settings_title_wifi" msgid="3277144155960302049">"पोर्टेबल हॉटस्पॉट"</string>
- <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"ब्लूटूथ से इंटरनेट पर शेयर करें."</string>
+ <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"ब्लूटूथ टेदरिंग"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"टेदरिंग"</string>
<string name="tether_settings_title_all" msgid="8356136101061143841">"टेदरिंग और पोर्टेबल हॉटस्पॉट"</string>
<string name="managed_user_title" msgid="8109605045406748842">"सभी कार्यस्थल ऐप्लिकेशन"</string>
- <string name="user_guest" msgid="8475274842845401871">"अतिथि"</string>
+ <string name="user_guest" msgid="8475274842845401871">"मेहमान"</string>
<string name="unknown" msgid="1592123443519355854">"अज्ञात"</string>
<string name="running_process_item_user_label" msgid="3129887865552025943">"उपयोगकर्ता: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="launch_defaults_some" msgid="313159469856372621">"कुछ डिफ़ॉल्ट सेट हैं"</string>
@@ -152,7 +152,7 @@
<string name="tts_default_lang_summary" msgid="5219362163902707785">"बोले गए लेख के लिए भाषा-विशिष्ट ध्वनि सेट करता है"</string>
<string name="tts_play_example_title" msgid="7094780383253097230">"एक उदाहरण सुनें"</string>
<string name="tts_play_example_summary" msgid="8029071615047894486">"लिखे हुए को बोली में बदलने की सुविधा की एक छोटी सी झलक चलाएं"</string>
- <string name="tts_install_data_title" msgid="4264378440508149986">"ध्वनि डेटा इंस्टॉल करें"</string>
+ <string name="tts_install_data_title" msgid="4264378440508149986">"आवाज़ का डेटा इंस्टॉल करें"</string>
<string name="tts_install_data_summary" msgid="5742135732511822589">"बोली-संश्लेषण के लिए आवश्यक ध्वनि डेटा इंस्टॉल करें"</string>
<string name="tts_engine_security_warning" msgid="8786238102020223650">"यह स्पीच सिंथेसिस (लिखे हुए को मशीन द्वारा बोली में बदलना) इंजन, पासवर्ड और क्रेडिट कार्ड नंबर जैसे निजी डेटा सहित आपके द्वारा बोले जाने वाले सभी लेख इकट्ठा कर सकता है. यह <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> इंजन से आता है. स्पीच सिंथेसिस इंजन के इस्तेमाल को चालू करें?"</string>
<string name="tts_engine_network_required" msgid="1190837151485314743">"लेख-से-बोली आउटपुट के लिए इस भाषा को क्रियाशील नेटवर्क कनेक्शन की आवश्यकता है."</string>
@@ -206,14 +206,14 @@
<string name="mock_location_app_not_set" msgid="809543285495344223">"जगह की नकली जानकारी देने के लिए ऐप सेट नहीं है"</string>
<string name="mock_location_app_set" msgid="8966420655295102685">"जगह की नकली जानकारी देने वाला ऐप: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किंग"</string>
- <string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस दिखाई देने के लिए प्रमाणन"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस डिसप्ले सर्टिफ़िकेशन"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"वाई-फ़ाई वर्बोस लॉगिंग चालू करें"</string>
<string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"जुड़े हुए एमएसी (मैक) रैंडमाइज़ेशन (वाई-फ़ाई नेटवर्क से जुड़ते समय एमएसी पता बदले जाने की सुविधा)"</string>
- <string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा हमेशा सक्रिय"</string>
+ <string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा हमेशा चालू"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"हार्डवेयर से तेज़ी लाने के लिए टेदर करें"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"बिना नाम वाले ब्लूटूथ डिवाइस दिखाएं"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ब्लूटूथ से आवाज़ के नियंत्रण की सुविधा रोकें"</string>
- <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ब्लूटूथ AVRCP वर्शन"</string>
+ <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ब्लूटूथ एवीआरसीपी वर्शन"</string>
<string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"ब्लूटूथ AVRCP वर्शन चुनें"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ब्लूटूथ ऑडियो कोडेक"</string>
<string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="8436224899475822557">"ब्लूटूथ ऑडियो कोडेक का\nविकल्प चालू करें"</string>
@@ -226,15 +226,15 @@
<string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ब्लूटूथ ऑडियो LDAC कोडेक: प्लेबैक क्वालिटी"</string>
<string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="7595776220458732825">"ब्लूटूथ ऑडियो एलडीएसी कोडेक का\nयह विकल्प चालू करें: प्लेबैक क्वालिटी"</string>
<string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"चलाया जा रहा है: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
- <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"निजी DNS"</string>
- <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"निजी DNS मोड चुनें"</string>
+ <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"निजी डीएनएस"</string>
+ <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"निजी डीएनएस मोड चुनें"</string>
<string name="private_dns_mode_off" msgid="8236575187318721684">"बंद"</string>
<string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"अपने आप"</string>
- <string name="private_dns_mode_provider" msgid="8354935160639360804">"निजी DNS सेवा देने वाले का होस्टनाम"</string>
- <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"DNS सेवा देने वाले का होस्टनाम डालें"</string>
+ <string name="private_dns_mode_provider" msgid="8354935160639360804">"निजी डीएनएस सेवा देने वाले का होस्टनाम"</string>
+ <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"डीएनएस सेवा देने वाले का होस्टनाम डालें"</string>
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"कनेक्ट नहीं हो सका"</string>
- <string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस दिखाई देने के लिए प्रमाणन विकल्प दिखाएं"</string>
- <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाई-फ़ाई प्रवेश स्तर बढ़ाएं, वाई-फ़ाई पिकर में प्रति SSID RSSI दिखाएं"</string>
+ <string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस डिसप्ले सर्टिफ़िकेशन के विकल्प दिखाएं"</string>
+ <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाई-फ़ाई लॉगिंग का स्तर बढ़ाएं, वाई-फ़ाई पिकर में प्रति SSID RSSI दिखाएं"</string>
<string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"वाई-फ़ाई से जुड़ते समय अलग-अलग एमएसी पते इस्तेमाल करें"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"डेटा इस्तेमाल करने की सीमा तय की गई है"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"डेटा इस्तेमाल करने की सीमा तय नहीं की गई है"</string>
@@ -242,21 +242,21 @@
<string name="select_logd_size_dialog_title" msgid="1206769310236476760">"प्रति लॉग बफ़र लॉगर आकार चुनें"</string>
<string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"लॉगर सतत मेमोरी साफ़ करें?"</string>
<string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"जब हम सतत लॉगर के साथ निगरानी करना बंद कर देते हैं, तो हमें आपके डिवाइस पर मौजूद लॉगर डेटा को मिटाने की आवश्यकता होती है."</string>
- <string name="select_logpersist_title" msgid="7530031344550073166">"डिवाइस पर लॉगर डेटा सतत संग्रहित करें"</string>
+ <string name="select_logpersist_title" msgid="7530031344550073166">"डिवाइस पर लॉगर डेटा लगातार इकट्ठा करें"</string>
<string name="select_logpersist_dialog_title" msgid="4003400579973269060">"डिवाइस पर सतत रूप से संग्रहित करने के लिए लॉग बफ़र चुनें"</string>
<string name="select_usb_configuration_title" msgid="2649938511506971843">"USB कॉन्फ़िगरेशन चुनें"</string>
<string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB कॉन्फ़िगरेशन चुनें"</string>
<string name="allow_mock_location" msgid="2787962564578664888">"कृत्रिम स्थानों को अनुमति दें"</string>
<string name="allow_mock_location_summary" msgid="317615105156345626">"कृत्रिम स्थानों को अनुमति दें"</string>
- <string name="debug_view_attributes" msgid="6485448367803310384">"देखने वाले से जुड़े खास डेटा को रखना चालू करें"</string>
- <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"वाई-फ़ाई के सक्रिय रहने पर भी, हमेशा मोबाइल डेटा सक्रिय रखें (तेज़ी से नेटवर्क स्विच करने के लिए)."</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"व्यू एट्रिब्यूट देखने की सुविधा चालू करें"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"वाई-फ़ाई चालू रहने पर भी मोबाइल डेटा हमेशा चालू रखें (तेज़ी से नेटवर्क स्विच करने के लिए)."</string>
<string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"हार्डवेयर से तेज़ी लाने के लिए टेदर करने की सुविधा मौजूद होने पर उसका इस्तेमाल करें"</string>
<string name="adb_warning_title" msgid="6234463310896563253">"USB डीबग करने की अनुमति दें?"</string>
<string name="adb_warning_message" msgid="7316799925425402244">"USB डीबग करने का मकसद केवल डेवेलप करना है. इसका इस्तेमाल आपके कंप्यूटर और आपके डिवाइस के बीच डेटा को कॉपी करने, बिना सूचना के आपके डिवाइस पर ऐप इंस्टॉल करने और लॉग डेटा पढ़ने के लिए करें."</string>
<string name="adb_keys_warning_message" msgid="5659849457135841625">"उन सभी कंप्यूटरों से USB डीबग करने की पहुंचर रद्द करें, जिन्हें आपने पहले इसकी मंज़ूरी दी थी?"</string>
<string name="dev_settings_warning_title" msgid="7244607768088540165">"विकास सेटिंग की अनुमति दें?"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"ये सेटिंग केवल विकास संबंधी उपयोग के प्रयोजन से हैं. वे आपके डिवाइस और उस पर स्थित ऐप्स को खराब कर सकती हैं या उनके दुर्व्यवहार का कारण हो सकती हैं."</string>
- <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB पर ऐप की पुष्टि करें"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"यूएसबी पर ऐप्लिकेशन की पुष्टि करें"</string>
<string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"नुकसानदेह व्यवहार के लिए ADB/ADT के द्वारा इंस्टॉल किए गए ऐप्स जाँचें."</string>
<string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"बिना नाम वाले ब्लूटूथ डिवाइस (केवल MAC पते वाले) दिखाए जाएंगे"</string>
<string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"दूर के डिवाइस पर आवाज़ बहुत बढ़ जाने या उससे नियंत्रण हटने जैसी समस्याएं होने पर, यह ब्लूटूथ के ज़रिए आवाज़ के नियंत्रण की सुविधा रोक देता है."</string>
@@ -265,54 +265,54 @@
<string name="hdcp_checking_title" msgid="8605478913544273282">"एचडीसीपी जाँच"</string>
<string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP जाँच व्यवहार सेट करें"</string>
<string name="debug_debugging_category" msgid="6781250159513471316">"डीबग करना"</string>
- <string name="debug_app" msgid="8349591734751384446">"डीबग ऐप्स को चुनें"</string>
- <string name="debug_app_not_set" msgid="718752499586403499">"कोई डीबग ऐप्स सेट नहीं है"</string>
+ <string name="debug_app" msgid="8349591734751384446">"डीबग करने के लिए ऐप्लिकेशन चुनें"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"डीबग करने के लिए कोई ऐप्लिकेशन सेट नहीं है"</string>
<string name="debug_app_set" msgid="2063077997870280017">"डीबग करने वाला ऐप्स : <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="select_application" msgid="5156029161289091703">"ऐप्स को चुनें"</string>
<string name="no_application" msgid="2813387563129153880">"कुछ भी नहीं"</string>
- <string name="wait_for_debugger" msgid="1202370874528893091">"डीबगर की प्रतीक्षा करें"</string>
- <string name="wait_for_debugger_summary" msgid="1766918303462746804">"डीबग किया गया ऐप्स निष्पादन के पहले अनुलग्न करने के लिए डीबगर की प्रतीक्षा करता है"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"डीबगर का इंतज़ार करें"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"डीबग किया गया ऐप्लिकेशन प्रोसेस के पहले डीबगर के अटैच होने का इंतज़ार करता है"</string>
<string name="debug_input_category" msgid="1811069939601180246">"हिंदी में लिखें"</string>
<string name="debug_drawing_category" msgid="6755716469267367852">"ड्रॉइंग"</string>
- <string name="debug_hw_drawing_category" msgid="6220174216912308658">"हार्डवेयर त्वरित रेंडरिंग"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"हार्डवेयर ऐक्सेलरेटेड रेंडरिंग"</string>
<string name="media_category" msgid="4388305075496848353">"मीडिया"</string>
<string name="debug_monitoring_category" msgid="7640508148375798343">"निगरानी"</string>
- <string name="strict_mode" msgid="1938795874357830695">"सख्त मोड सक्षम किया गया"</string>
- <string name="strict_mode_summary" msgid="142834318897332338">"जब ऐप्स मुख्य थ्रेड पर लंबी कार्यवाही करते हैं तो स्क्रीन फ़्लैश करें"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"सख्त मोड चालू किया गया"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"थ्रेड पर लंबा प्रोसेस होने पर स्क्रीन फ़्लैश करें"</string>
<string name="pointer_location" msgid="6084434787496938001">"पॉइंटर की जगह"</string>
<string name="pointer_location_summary" msgid="840819275172753713">"मौजूदा स्पर्श डेटा दिखाने वाला स्क्रीन ओवरले"</string>
<string name="show_touches" msgid="2642976305235070316">"टैप दिखाएं"</string>
<string name="show_touches_summary" msgid="6101183132903926324">"टैप के लिए विज़ुअल फ़ीडबैक दिखाएं"</string>
<string name="show_screen_updates" msgid="5470814345876056420">"सर्फ़ेस अपडेट दिखाएं"</string>
<string name="show_screen_updates_summary" msgid="2569622766672785529">"अपडेट होने पर पूरे विंडो सर्फ़ेस को फ़्लैश करें"</string>
- <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU व्यू अपडेट दिखाएं"</string>
- <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU के साथ आरेखित करने पर विंडो में दृश्यों को फ़्लैश करें"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"जीपीयू व्यू अपडेट दिखाएं"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"जीपीयू रेंडर हो जाने पर विंडो में व्यू फ़्लैश करें"</string>
<string name="show_hw_layers_updates" msgid="5645728765605699821">"हार्डवेयर लेयर अपडेट दिखाएं"</string>
<string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"हार्डवेयर लेयर अपडेट होने पर उनमें हरी रोशनी डालें"</string>
- <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ओवरड्रॉ डीबग करें"</string>
- <string name="disable_overlays" msgid="2074488440505934665">"HW ओवरले बंद करें"</string>
- <string name="disable_overlays_summary" msgid="3578941133710758592">"स्क्रीन संयोजन के लिए हमेशा GPU का उपयोग करें"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"जीपीयू ओवरड्रॉ डीबग करें"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"एचडब्ल्यू ओवरले बंद करें"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"स्क्रीन संयोजन के लिए हमेशा जीपीयू का उपयोग करें"</string>
<string name="simulate_color_space" msgid="6745847141353345872">"रंग स्पेस सिम्युलेट करें"</string>
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ट्रेस चालू करें"</string>
- <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ऑडियो रूटिंग अक्षम करें"</string>
- <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ऑडियो पेरिफ़ेरल पर स्वत: रूटिंग अक्षम करें"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"यूएसबी ऑडियो रूटिंग बंद करें"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"यूएसबी ऑडियो पेरिफ़ेरल पर अपने आप रूटिंग बंद करें"</string>
<string name="debug_layout" msgid="5981361776594526155">"लेआउट सीमाएं दिखाएं"</string>
- <string name="debug_layout_summary" msgid="2001775315258637682">"क्लिप सीमाएं, मार्जिन, आदि दिखाएं."</string>
- <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL लेआउट दिशा लागू करें"</string>
- <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"सभी भाषाओं के लिए स्क्रीन लेआउट दिशा को RTL रखें"</string>
- <string name="force_hw_ui" msgid="6426383462520888732">"बलपूर्वक GPU रेंडर करें"</string>
- <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d ड्रॉइंग के लिए GPU का बलपूर्वक उपयोग करें"</string>
- <string name="force_msaa" msgid="7920323238677284387">"4x MSAA को बाध्य करें"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"क्लिप सीमाएं, मार्जिन आदि दिखाएं."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"लेआउट की दिशा दाएं से बाएं करें"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"सभी भाषाओं के लिए स्क्रीन लेआउट की दिशा दाएं से बाएं रखें"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"हर हाल में जीपीयू रेंडर करें"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2डी ड्रॉइंग के लिए जीपीयू का हर हाल में उपयोग करें"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA को हर हाल में चालू करें"</string>
<string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ऐप में 4x MSAA को चालू करें"</string>
- <string name="show_non_rect_clip" msgid="505954950474595172">"गैर-आयताकार क्लिप परिचालनों को डीबग करें"</string>
- <string name="track_frame_time" msgid="6146354853663863443">"प्रोफ़ाइल GPU रेंडरिंग"</string>
- <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"GPU डीबग लेयर चालू करें"</string>
- <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"डीबग ऐप के लिए GPU डीबग लेयर लोड करने की अनुमति दें"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"उन क्लिप ऑपरेशन को डीबग करें, जो आयताकार नहीं हैं"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"प्रोफ़ाइल जीपीयू रेंडरिंग"</string>
+ <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"जीपीयू डीबग लेयर चालू करें"</string>
+ <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"डीबग ऐप के लिए जीपीयू डीबग लेयर लोड करने दें"</string>
<string name="window_animation_scale_title" msgid="6162587588166114700">"विंडो एनिमेशन स्केल"</string>
- <string name="transition_animation_scale_title" msgid="387527540523595875">"संक्रमण एनिमेशन स्केल"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"ट्रांज़िशन एनिमेशन स्केल"</string>
<string name="animator_duration_scale_title" msgid="3406722410819934083">"एनिमेटर अवधि स्केल"</string>
- <string name="overlay_display_devices_title" msgid="5364176287998398539">"द्वितीयक डिस्प्ले अनुरूपित करें"</string>
- <string name="debug_applications_category" msgid="4206913653849771549">"ऐप"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"कई आकार के डिसप्ले बनाएं"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"ऐप्लिकेशन"</string>
<string name="immediately_destroy_activities" msgid="1579659389568133959">"गतिविधियों को न रखें"</string>
<string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"उपयोगकर्ता के छोड़ते ही हर गतिविधि को खत्म करें"</string>
<string name="app_process_limit_title" msgid="4280600650253107163">"बैकग्राउंड प्रोसेस सीमित करें"</string>
@@ -359,11 +359,11 @@
<string name="button_convert_fbe" msgid="5152671181309826405">"वाइप करें और रूपांतरित करें…"</string>
<string name="picture_color_mode" msgid="4560755008730283695">"चित्र रंग मोड"</string>
<string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB का उपयोग करें"</string>
- <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"अक्षम"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"बंद"</string>
<string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"पूर्ण वर्णांधता"</string>
- <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"आंशिक हरित वर्णांधता (लाल-हरित)"</string>
- <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"आंशिक लाल वर्णांधता (लाल-हरित)"</string>
- <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"आंशिक नील वर्णांधता (नील-पीत)"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"लाल-हरे रंग की पहचान न कर पाना (लाल-हरा)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"लाल रंग पहचान न पाना (लाल-हरा)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"नीला रंग पहचान न पाना (नीला-पीला)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"रंग सुधार"</string>
<string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"यह सुविधा प्रायोगिक है और निष्पादन को प्रभावित कर सकती है."</string>
<string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> के द्वारा ओवरराइड किया गया"</string>
diff --git a/packages/SettingsLib/res/values-hy/arrays.xml b/packages/SettingsLib/res/values-hy/arrays.xml
index e72bd77..e632cdb 100644
--- a/packages/SettingsLib/res/values-hy/arrays.xml
+++ b/packages/SettingsLib/res/values-hy/arrays.xml
@@ -154,11 +154,11 @@
</string-array>
<string-array name="select_logd_size_summaries">
<item msgid="6921048829791179331">"Անջատված է"</item>
- <item msgid="2969458029344750262">"Պահնակ՝ առավ. 64ԿԲ"</item>
- <item msgid="1342285115665698168">"Պահնակ՝ առավ. 256ԿԲ"</item>
- <item msgid="1314234299552254621">"Պահնակ՝ առավ. 1ՄԲ"</item>
- <item msgid="3606047780792894151">"Պահնակ՝ առավ. 4ՄԲ"</item>
- <item msgid="5431354956856655120">"Պահնակ՝ առավ. 16ՄԲ"</item>
+ <item msgid="2969458029344750262">"Բուֆեր՝ առավ. 64ԿԲ"</item>
+ <item msgid="1342285115665698168">"Բուֆեր՝ առավ. 256ԿԲ"</item>
+ <item msgid="1314234299552254621">"Բուֆեր՝ առավ. 1ՄԲ"</item>
+ <item msgid="3606047780792894151">"Բուֆեր՝ առավ. 4ՄԲ"</item>
+ <item msgid="5431354956856655120">"Բուֆեր՝ առավ. 16ՄԲ"</item>
</string-array>
<string-array name="select_logpersist_titles">
<item msgid="1744840221860799971">"Անջատված է"</item>
@@ -235,7 +235,7 @@
<item msgid="2290859360633824369">"Ցույց տալ դալտոնիզմի ոլորտները"</item>
</string-array>
<string-array name="app_process_limit_entries">
- <item msgid="3401625457385943795">"Սովորական սահման"</item>
+ <item msgid="3401625457385943795">"Սովորական"</item>
<item msgid="4071574792028999443">"Հետնաշերտում գործողություններ չկան"</item>
<item msgid="4810006996171705398">"Առավելագույնը 1 գործընթաց"</item>
<item msgid="8586370216857360863">"Առավելագույնը 2 գործընթաց"</item>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 2ad9b2b..248284c 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -190,7 +190,7 @@
<string name="tethering_settings_not_available" msgid="6765770438438291012">"Այս օգտատերը չի կարող փոխել մոդեմի ռեժիմի կարգավորումները"</string>
<string name="apn_settings_not_available" msgid="7873729032165324000">"Մատչման կետի անվան կարգավորումները հասանելի չեն այս օգտատիրոջը"</string>
<string name="enable_adb" msgid="7982306934419797485">"USB վրիպազերծում"</string>
- <string name="enable_adb_summary" msgid="4881186971746056635">"Կարգաբերել ռեժիմը, երբ USB-ն միացված է"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Միացնել վրիպազերծման ռեժիմը, երբ USB-ն միացված է"</string>
<string name="clear_adb_keys" msgid="4038889221503122743">"Չեղարկել USB վրիպազերծման լիազորումները"</string>
<string name="bugreport_in_power" msgid="7923901846375587241">"Սխալի հաղորդման դյուրանցում"</string>
<string name="bugreport_in_power_summary" msgid="1778455732762984579">"Գործարկման ցանկում ցույց տալ կոճակը՝ վրիպակների հաղորդման համար"</string>
@@ -206,7 +206,7 @@
<string name="mock_location_app_not_set" msgid="809543285495344223">"Տեղադրությունը կեղծող հավելված տեղակայված չէ"</string>
<string name="mock_location_app_set" msgid="8966420655295102685">"Տեղադրությունը կեղծող հավելված՝ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="debug_networking_category" msgid="7044075693643009662">"Ցանց"</string>
- <string name="wifi_display_certification" msgid="8611569543791307533">"Անլար էկրանի վկայագրում"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Անլար էկրանների հավաստագրում"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Միացնել Wi‑Fi մանրամասն գրանցամատյանները"</string>
<string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"MAC հասցեների պատահական ընտրություն Wi-Fi-ին միանալիս"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Բջջային ինտերնետը միշտ ակտիվ է"</string>
@@ -238,7 +238,7 @@
<string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Պատահականորեն ընտրել MAC հասցեն Wi-Fi ցանցերին միանալիս"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Վճարովի թրաֆիկ"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Անսահմանափակ թրաֆիկ"</string>
- <string name="select_logd_size_title" msgid="7433137108348553508">"Տեղեկամատյանի պահնակի չափերը"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Մատյանի բուֆերի չափը չափերը"</string>
<string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Ընտրեք տեղեկամատյանի չափը մեկ պահնակի համար"</string>
<string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Ջնջե՞լ մատյանի մշտական հիշողությունը:"</string>
<string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Մշտական տվյալների գրանցման մատյանի միջոցով վերահսկողությունը դադարեցնելու դեպքում մենք պարտավոր ենք ջնջել մատյանի տվյալները, որոնք պահվում են ձեր սարքում:"</string>
@@ -257,7 +257,7 @@
<string name="dev_settings_warning_title" msgid="7244607768088540165">"Ընդունե՞լ ծրագրավորման կարգավորումներ:"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"Այս կարգավորումները միայն ծրագրավորման նպատակների համար են նախատեսված: Դրանք կարող են խանգարել ձեր սարքի կամ ծրագրի աշխատանքին:"</string>
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Ստուգել հավելվածները USB-ի նկատմամբ"</string>
- <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Ստուգեք տեղադրված հավելվածը ADB/ADT-ի միջոցով կասկածելի աշխատանքի պատճառով:"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Ստուգել հավելվածների անվտանգությունը ADB/ADT-ի միջոցով տեղադրված լինելու դեպքում։"</string>
<string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth սարքերը կցուցադրվեն առանց անունների (միայն MAC հասցեները)"</string>
<string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Կասեցնում է Bluetooth-ի ձայնի բացարձակ ուժգնության գործառույթը՝ հեռավոր սարքերի հետ ձայնի ուժգնությանը վերաբերող խնդիրներ ունենալու դեպքում (օրինակ՝ երբ ձայնի ուժգնությունն անընդունելի է կամ դրա կառավարումը հնարավոր չէ):"</string>
<string name="enable_terminal_title" msgid="95572094356054120">"Տեղային տերմինալ"</string>
@@ -266,12 +266,12 @@
<string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP-ի ստուգման կարգը"</string>
<string name="debug_debugging_category" msgid="6781250159513471316">"Վրիպազերծում"</string>
<string name="debug_app" msgid="8349591734751384446">"Ընտրել վրիպազերծման հավելվածը"</string>
- <string name="debug_app_not_set" msgid="718752499586403499">"Վրիպազերծման ծրագիրը կարգավորված չէ"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Վրիպազերծման հավելվածը կարգավորված չէ"</string>
<string name="debug_app_set" msgid="2063077997870280017">"Վրիպազերծող հավելվածը` <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="select_application" msgid="5156029161289091703">"Ընտրել հավելվածը"</string>
<string name="no_application" msgid="2813387563129153880">"Ոչինչ"</string>
<string name="wait_for_debugger" msgid="1202370874528893091">"Սպասել վրիպազերծիչին"</string>
- <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Վրիպազերծված ծրագրիը սպասում է վրիպազերծիչի կցմանը մինչ կատարումը"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Հավելվածը սպասում է վրիպազերծիչի կցման"</string>
<string name="debug_input_category" msgid="1811069939601180246">"Մուտքագրում"</string>
<string name="debug_drawing_category" msgid="6755716469267367852">"Պատկերում"</string>
<string name="debug_hw_drawing_category" msgid="6220174216912308658">"Սարքաշարի արագացված նյութավորում"</string>
@@ -290,12 +290,12 @@
<string name="show_hw_layers_updates" msgid="5645728765605699821">"Ցույց տալ սարքաշարի ծածկույթի թարմացումները"</string>
<string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Թող սարքաշարի ծածկույթները կանաչ գույնով առկայծեն, երբ թարմացվեն"</string>
<string name="debug_hw_overdraw" msgid="2968692419951565417">"Վրիպազերծել GPU գերազանցումները"</string>
- <string name="disable_overlays" msgid="2074488440505934665">"Կասեցնել HW վերադրումները"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Կասեցնել HW վրադրումները"</string>
<string name="disable_overlays_summary" msgid="3578941133710758592">"Միշտ օգտագործել GPU-ն` էկրանի կազմման համար"</string>
<string name="simulate_color_space" msgid="6745847141353345872">"Նմանակել գունատարածքը"</string>
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"Ակտիվացնել OpenGL հետքերը"</string>
- <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Անջատել USB աուդիո երթուղայնացումը"</string>
- <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Անջատել ավտոմատ երթուղայնացումը դեպի USB աուդիո սարքեր"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Անջատել USB աուդիո երթուղումը"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Անջատել ավտոմատ երթուղումը դեպի USB աուդիո սարքեր"</string>
<string name="debug_layout" msgid="5981361776594526155">"Ցույց տալ տարրերի չափսերը"</string>
<string name="debug_layout_summary" msgid="2001775315258637682">"Ցույց տալ կտրվածքի սահմանները, լուսանցքները և այլն"</string>
<string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Փոխել RTL-ի դասավորության ուղղությունը"</string>
@@ -303,8 +303,8 @@
<string name="force_hw_ui" msgid="6426383462520888732">"Ստիպել GPU-ին մատուցել"</string>
<string name="force_hw_ui_summary" msgid="5535991166074861515">"Ստիպողաբար GPU-ի օգտագործում 2-րդ պատկերի համար"</string>
<string name="force_msaa" msgid="7920323238677284387">"Ստիպել 4x MSAA"</string>
- <string name="force_msaa_summary" msgid="9123553203895817537">"Միացնել 4x MSAA-ը OpenGL ES 2.0 ծրագրերում"</string>
- <string name="show_non_rect_clip" msgid="505954950474595172">"Կարգաբերել ոչ-ուղղանկյուն կտրվածքի գործողությունները"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Միացնել 4x MSAA-ը OpenGL ES 2.0 հավելվածներում"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Վրիպազերծել ոչ ուղղանկյուն կտրումների գործողությունները"</string>
<string name="track_frame_time" msgid="6146354853663863443">"GPU տվյալներ"</string>
<string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Միացնել GPU վրիպազերծման շերտերը"</string>
<string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Թույլատրել GPU վրիպազերծման շերտերի բեռնումը վրիպազերծման հավելվածների համար"</string>
@@ -313,16 +313,16 @@
<string name="animator_duration_scale_title" msgid="3406722410819934083">"Շարժանկարի տևողության սանդղակ"</string>
<string name="overlay_display_devices_title" msgid="5364176287998398539">"Կրկնաստեղծել երկրորդական էկրան"</string>
<string name="debug_applications_category" msgid="4206913653849771549">"Հավելվածներ"</string>
- <string name="immediately_destroy_activities" msgid="1579659389568133959">"Պետք չէ պահել գործողությունները"</string>
- <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Ոչնչացնել ցանացած գործունեություն օգտատիրոջ հեռացումից հետո"</string>
- <string name="app_process_limit_title" msgid="4280600650253107163">"Հետնաշերտի գործընթացի սահմանաչափ"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Չպահել գործողությունները"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Օգտատիրոջ դուրս գալուց հետո հեռացնել բոլոր գործողությունները"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Ֆոնային գործընթացների սահմանափակում"</string>
<string name="show_all_anrs" msgid="4924885492787069007">"ANR-ները ֆոնային ռեժիմում"</string>
<string name="show_all_anrs_summary" msgid="6636514318275139826">"Ցուցադրել «Հավելվածը չի արձագանքում» պատուհանը ֆոնային հավելվածների համար"</string>
<string name="show_notification_channel_warnings" msgid="1399948193466922683">"Ցուցադրել ծանուցումների ալիքի զգուշացումները"</string>
<string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Էկրանին ցուցադրվում է զգուշացում, երբ որևէ հավելված փակցնում է ծանուցում առանց վավեր ալիքի"</string>
- <string name="force_allow_on_external" msgid="3215759785081916381">"Միշտ թույլատրել ծրագրեր արտաքին պահեստում"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Թույլատրել պահումն արտաքին կրիչներում"</string>
<string name="force_allow_on_external_summary" msgid="3640752408258034689">"Թույլ է տալիս ցանկացած հավելված պահել արտաքին սարքում՝ մանիֆեստի արժեքներից անկախ"</string>
- <string name="force_resizable_activities" msgid="8615764378147824985">"Ստիպել, որ ակտիվությունների չափերը լինեն փոփոխելի"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Չափերի փոփոխում բազմապատուհան ռեժիմում"</string>
<string name="force_resizable_activities_summary" msgid="6667493494706124459">"Բոլոր ակտիվությունների չափերը բազմապատուհան ռեժիմի համար դարձնել փոփոխելի՝ մանիֆեստի արժեքներից անկախ:"</string>
<string name="enable_freeform_support" msgid="1461893351278940416">"Ակտիվացնել կամայական ձևի պատուհանները"</string>
<string name="enable_freeform_support_summary" msgid="8247310463288834487">"Միացնել ազատ ձևի փորձնական պատուհանների աջակցումը:"</string>
diff --git a/packages/SettingsLib/res/values-kk/arrays.xml b/packages/SettingsLib/res/values-kk/arrays.xml
index 6d0ac63..e572ba9 100644
--- a/packages/SettingsLib/res/values-kk/arrays.xml
+++ b/packages/SettingsLib/res/values-kk/arrays.xml
@@ -55,7 +55,7 @@
</string-array>
<string-array name="hdcp_checking_summaries">
<item msgid="505558545611516707">"Ешқашан HDCP (жоғары кең жолақты сандық мазмұн қорғаушы) тексерулерін қолданбаңыз"</item>
- <item msgid="3878793616631049349">"HDCP (кең жолақты сандық мазмұн қорғау) тексеруді DRM (авторлық құқықты техникалық қорғау) мазмұны үшін ғана қолданыңыз"</item>
+ <item msgid="3878793616631049349">"HDCP тексерісін DRM мазмұны үшін ғана қолдану"</item>
<item msgid="45075631231212732">"Әрқашан HDCP (жоғары кең жолақты сандық мазмұн қорғаушы) тексерулерін қолданыңыз"</item>
</string-array>
<string-array name="bluetooth_avrcp_versions">
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index a0bf81b..f8de52f 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -129,7 +129,7 @@
<string name="process_kernel_label" msgid="3916858646836739323">"Android операциялық жүйесі"</string>
<string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Алынған қолданбалар"</string>
<string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Алынған қолданбалар және пайдаланушылар"</string>
- <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB модем режимі"</string>
+ <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB тетеринг"</string>
<string name="tether_settings_title_wifi" msgid="3277144155960302049">"Алынбалы хот-спот"</string>
<string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth модем"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Тетеринг"</string>
@@ -140,8 +140,8 @@
<string name="running_process_item_user_label" msgid="3129887865552025943">"Пайдаланушы: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="launch_defaults_some" msgid="313159469856372621">"Кейбір әдепкі параметрлер орнатылған"</string>
<string name="launch_defaults_none" msgid="4241129108140034876">"Әдепкі параметрлер орнатылмаған"</string>
- <string name="tts_settings" msgid="8186971894801348327">"Мәтіннен-сөйлеуге параметрлері"</string>
- <string name="tts_settings_title" msgid="1237820681016639683">"Мәтінді тілге айналдыру"</string>
+ <string name="tts_settings" msgid="8186971894801348327">"Мәтінді дыбыстау параметрлері"</string>
+ <string name="tts_settings_title" msgid="1237820681016639683">"Мәтінді дыбыстау"</string>
<string name="tts_default_rate_title" msgid="6030550998379310088">"Сөйлеу жылдамдығы"</string>
<string name="tts_default_rate_summary" msgid="4061815292287182801">"Мәтіннің оқылу жылдамдығы"</string>
<string name="tts_default_pitch_title" msgid="6135942113172488671">"Дауыс жиілігі"</string>
@@ -164,7 +164,7 @@
<string name="tts_status_checking" msgid="5339150797940483592">"Тексерілуде…"</string>
<string name="tts_engine_settings_title" msgid="3499112142425680334">"<xliff:g id="TTS_ENGINE_NAME">%s</xliff:g> параметрлері"</string>
<string name="tts_engine_settings_button" msgid="1030512042040722285">"Қозғалтқыш параметрлерін қосу"</string>
- <string name="tts_engine_preference_section_title" msgid="448294500990971413">"Қалаулы қозғалтқыш"</string>
+ <string name="tts_engine_preference_section_title" msgid="448294500990971413">"Таңдалған жүйе"</string>
<string name="tts_general_section_title" msgid="4402572014604490502">"Жалпы"</string>
<string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Дауыс тембрін бастапқы мәніне қайтару"</string>
<string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"Мәтінді айту тембрін әдепкі мәніне қайтару."</string>
@@ -257,12 +257,12 @@
<string name="dev_settings_warning_title" msgid="7244607768088540165">"Жетілдіру параметрлеріне рұқсат берілсін бе?"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"Бұл параметрлер жетілдіру мақсатында ғана қолданылады. Олар құрылғыңыз бен қолданбаларыңыздың бұзылуына немесе әдеттен тыс әрекеттерге себеп болуы мүмкін."</string>
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB арқылы орнатылған қолданбаларды растау"</string>
- <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT арқылы орнатылған қолданбалардың залалды болмауын тексеру."</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT арқылы орнатылған қолданбалардың қауіпсіздігін тексеру."</string>
<string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Атаусыз Bluetooth құрылғылары (тек MAC мекенжайымен) көрсетіледі"</string>
<string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Қолайсыз қатты дыбыс деңгейі немесе басқарудың болмауы сияқты қашықтағы құрылғыларда дыбыс деңгейімен мәселелер жағдайында Bluetooth абсолютті дыбыс деңгейі функциясын өшіреді."</string>
<string name="enable_terminal_title" msgid="95572094356054120">"Жергілікті терминал"</string>
<string name="enable_terminal_summary" msgid="67667852659359206">"Жергілікті шелл-код қол жетімділігін ұсынатын терминалды қолданбаны қосу"</string>
- <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP (жоғары кең жолақты сандық мазмұнды қорғау) тексеру"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP тексеру"</string>
<string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP (кең жолақты сандық мазмұн қорғау) тексеру мүмкіндігін орнату"</string>
<string name="debug_debugging_category" msgid="6781250159513471316">"Жөндеу"</string>
<string name="debug_app" msgid="8349591734751384446">"Жөндеу қолданбасын таңдау"</string>
@@ -286,9 +286,9 @@
<string name="show_screen_updates" msgid="5470814345876056420">"Беткейлік жаңартуларды көрсету"</string>
<string name="show_screen_updates_summary" msgid="2569622766672785529">"Жаңартылғанда бүкіл терезе беткейінің жыпылықтауы"</string>
<string name="show_hw_screen_updates" msgid="5036904558145941590">"Графикалық процессор көрінісінің жаңартуларын көрсету"</string>
- <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Графикалық процессор сызғанда терезе ішіндегі көріністердің жыпылықтауы"</string>
- <string name="show_hw_layers_updates" msgid="5645728765605699821">"Компьютерлік жабдықтама қабаттарының жаңартулары"</string>
- <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Жаңартылғанда компьютерлік жабдықтама қабаттарының жасыл шамы жануы"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Графикалық процессор сызғанда, терезе ішіндегі көріністердің жыпылықтауы"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Аппараттық қабат жаңартуларын көрсету"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Жаңартылғанда, аппараттық қабаттарды жасылмен жыпылықтату"</string>
<string name="debug_hw_overdraw" msgid="2968692419951565417">"Үстінен бастырылғанды жөндеу"</string>
<string name="disable_overlays" msgid="2074488440505934665">"Жабдықпен үстінен бастыруды өшіру"</string>
<string name="disable_overlays_summary" msgid="3578941133710758592">"Экранды жасақтау үшін әрқашан графикалық процессор қолдану қажет"</string>
@@ -310,8 +310,8 @@
<string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"GPU түзету қабаттарының жүктелуіне рұқсат ету"</string>
<string name="window_animation_scale_title" msgid="6162587588166114700">"Терезе анимациясының өлшемі"</string>
<string name="transition_animation_scale_title" msgid="387527540523595875">"Ауысу анимациясының өлшемі"</string>
- <string name="animator_duration_scale_title" msgid="3406722410819934083">"Аниматор ұзақтығының межесі"</string>
- <string name="overlay_display_devices_title" msgid="5364176287998398539">"Қосымша дисплейлерге еліктеу"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Аниматор ұзақтығы"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Қосымша дисплей симуляциясы"</string>
<string name="debug_applications_category" msgid="4206913653849771549">"Қолданбалар"</string>
<string name="immediately_destroy_activities" msgid="1579659389568133959">"Әрекеттерді сақтамау"</string>
<string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Әр әрекетті пайдаланушы аяқтай салысымен жою"</string>
@@ -320,14 +320,14 @@
<string name="show_all_anrs_summary" msgid="6636514318275139826">"Фондық қолданбалар үшін \"Қолданба жауап бермейді\" терезесін шығару"</string>
<string name="show_notification_channel_warnings" msgid="1399948193466922683">"Хабарландыру арнасының ескертулерін көрсету"</string>
<string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Қолданба жарамсыз арна арқылы хабарландыру жариялағанда, экрандық ескертуді көрсетеді"</string>
- <string name="force_allow_on_external" msgid="3215759785081916381">"Сыртқыда қолданбаларға мәжбүрлеп рұқсат ету"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Сыртқы жадта қолданбаларға рұқсат ету"</string>
<string name="force_allow_on_external_summary" msgid="3640752408258034689">"Манифест мәндеріне қарамастан кез келген қолданбаны сыртқы жадқа жазуға жарамды етеді"</string>
- <string name="force_resizable_activities" msgid="8615764378147824985">"Әрекеттерді өлшемін өзгертуге болатын етуге мәжбүрлеу"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Әрекеттердің өлшемін өзгертуге рұқсат ету"</string>
<string name="force_resizable_activities_summary" msgid="6667493494706124459">"Манифест мәндеріне қарамастан бірнеше терезе режимінде барлық әрекеттердің өлшемін өзгертуге рұқсат беру."</string>
<string name="enable_freeform_support" msgid="1461893351278940416">"Еркін пішіндегі терезелерді қосу"</string>
<string name="enable_freeform_support_summary" msgid="8247310463288834487">"Еркін пішінді терезелерді құру эксперименттік функиясын қосу."</string>
- <string name="local_backup_password_title" msgid="3860471654439418822">"Компьютер үстелінің сақтық көшірмесі"</string>
- <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Жұмыс үстелінің сақтық көшірмелері қазір қорғалмаған"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Компьютердегі сақтық көшірме құпия сөзі"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Компьютердегі толық сақтық көшірмелер қазір қорғалмаған"</string>
<string name="local_backup_password_summary_change" msgid="5376206246809190364">"Үстелдік компьютердің толық сақтық көшірмелерінің кілтсөзін өзгерту немесе жою үшін түртіңіз"</string>
<string name="local_backup_password_toast_success" msgid="582016086228434290">"Жаңа сақтық кілтсөзі тағайындалды"</string>
<string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Жаңа кілтсөз және растау сәйкес емес"</string>
diff --git a/packages/SettingsLib/res/values-ky/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml
index b167b95..e4af2d5 100644
--- a/packages/SettingsLib/res/values-ky/arrays.xml
+++ b/packages/SettingsLib/res/values-ky/arrays.xml
@@ -130,13 +130,13 @@
<item msgid="7158319962230727476">"Аудионун сапатын оптималдаштыруу (990кб/сек./909кб/сек.)"</item>
<item msgid="2921767058740704969">"Теңделген аудио жана туташуу сапаты (660кб/сек./606кб/сек.)"</item>
<item msgid="8860982705384396512">"Туташуунун сапатын оптималдаштыруу (330кб/сек./303кб/сек.)"</item>
- <item msgid="4414060457677684127">"Эң жакшы сунуш (Ыңгайлуу өткөрүү ылдамдыгы)"</item>
+ <item msgid="4414060457677684127">"Мүмкүн болгон эң мыкты натыйжа (адаптивдүү битрейт)"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
<item msgid="6398189564246596868">"Аудионун сапатын оптималдаштыруу"</item>
<item msgid="4327143584633311908">"Теңделген аудио жана туташуу сапаты"</item>
<item msgid="4681409244565426925">"Туташуунун сапатын оптималдаштыруу"</item>
- <item msgid="364670732877872677">"Эң жакшы сунуш (Ыңгайлуу өткөрүү ылдамдыгы)"</item>
+ <item msgid="364670732877872677">"Мүмкүн болгон эң мыкты натыйжа (адаптивдүү битрейт)"</item>
</string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Өчүк"</item>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index a4ea99a..81252d6 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -36,7 +36,7 @@
<string name="wifi_no_internet" msgid="4663834955626848401">"Интернетке туташпай турат"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> тарабынан сакталды"</string>
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s аркылуу автоматтык түрдө туташты"</string>
- <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Тармактардын рейтингинин автору аркылуу автоматтык түрдө туташты"</string>
+ <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Тармактар рейтингинин автору аркылуу автоматтык түрдө туташты"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s аркылуу жеткиликтүү"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s аркылуу жеткиликтүү"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Туташып турат, Интернет жок"</string>
@@ -190,10 +190,10 @@
<string name="tethering_settings_not_available" msgid="6765770438438291012">"Бул колдонуучу тетеринг жөндөөлөрүн колдоно албайт"</string>
<string name="apn_settings_not_available" msgid="7873729032165324000">"Бул колдонуучу мүмкүндүк алуу түйүнүнүн аталышынын жөндөөлөрүн колдоно албайт"</string>
<string name="enable_adb" msgid="7982306934419797485">"USB аркылуу мүчүлүштүктөрдү оңдоо"</string>
- <string name="enable_adb_summary" msgid="4881186971746056635">"USB туташтырылган учурдагы мүчүлүштүктөрдү оңдоо режими"</string>
- <string name="clear_adb_keys" msgid="4038889221503122743">"USB аркылуу жөндөө уруксатын кайтарып алуу"</string>
- <string name="bugreport_in_power" msgid="7923901846375587241">"Мүчүлүштүктөр жөнүндө кабардын кыска жолу"</string>
- <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Мүчүлүштүктөр жөнүндө кабар алуу үчүн, жандыруу менюсунда баскыч көрсөтүлсүн"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB компьютерге сайылганда мүчүлүштүктөрдү оңдоо режими иштейт"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB аркылуу мүчүлүштүктөрдү оңдоо уруксатын артка кайтаруу"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Ката жөнүндө кабарлоо"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Менюда ката жөнүндө кабарлоо баскычы көрүнүп турат"</string>
<string name="keep_screen_on" msgid="1146389631208760344">"Ойгоо туруу"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Түзмөк кубатталып жатканда экран өчпөйт"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI журналын иштетүү"</string>
@@ -202,15 +202,15 @@
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Кайра жүктөгүчтү бөгөттөн чыгарууга уруксат берүү"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM бөгөттөн чыгарууга уруксатпы?"</string>
<string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ЭСКЕРТҮҮ: Бул жөндөө күйгүзүлүп турганда түзмөктү коргоо өзгөчөлүктөрү иштебейт."</string>
- <string name="mock_location_app" msgid="7966220972812881854">"Жалган жайгашкан жерлер үчүн колдонмо тандоо"</string>
- <string name="mock_location_app_not_set" msgid="809543285495344223">"Жалган жайгашкан жерлер үчүн колдонмо коюлган жок"</string>
- <string name="mock_location_app_set" msgid="8966420655295102685">"Жалган жайгашкан жерлер үчүн колдонмо: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="debug_networking_category" msgid="7044075693643009662">"Тармактык байланыштарды кеңейтүү"</string>
- <string name="wifi_display_certification" msgid="8611569543791307533">"Зымсыз дисплейди аныктоо"</string>
- <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi дайын-даректүү протоколун иштетүү"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Кокустан тандалган MAC дарегине туташты"</string>
- <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилдик Интернет иштей берсин"</string>
- <string name="tethering_hardware_offload" msgid="7470077827090325814">"Тетерингдин иштешин тездетүү"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Жалган жайгашкан жерлерди көрсөткөн колдонмону тандоо"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Жалган жайгашкан жерлерди көрсөткөн колдонмо жок"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Жалган жайгашкан жерлерди көрсөткөн колдонмо: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Тармактар"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Зымсыз мониторлорду тастыктамалоо"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi дайын-даректүү журналы"</string>
+ <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Wi-Fi аркылуу туташканда башаламан MAC даректерди түзүү"</string>
+ <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилдик Интернет иштей берет"</string>
+ <string name="tethering_hardware_offload" msgid="7470077827090325814">"Модем режиминде аппараттын иштешин тездетүү"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Аталышсыз Bluetooth түзмөктөрү көрсөтүлсүн"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Үндүн абсолюттук деңгээли өчүрүлсүн"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP версиясы"</string>
@@ -227,15 +227,15 @@
<string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="7595776220458732825">"Bluetooth Audio кодегин иштетүү\nТандоо: Ойнотуу сапаты"</string>
<string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Трансляция: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
<string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Купуя DNS"</string>
- <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Купуя DNS режимин тандаңыз"</string>
+ <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Жеке DNS режимин тандаңыз"</string>
<string name="private_dns_mode_off" msgid="8236575187318721684">"Өчүк"</string>
<string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"Автоматтык режим"</string>
<string name="private_dns_mode_provider" msgid="8354935160639360804">"Купуя DNS түйүндүн аталышы"</string>
<string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"DNS түйүндүн аталышын киргизиңиз"</string>
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Туташпай койду"</string>
- <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Зымсыз дисплейди сертификатто мүмкүнчүлүктөрүн көргөзүү"</string>
- <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi Кармагычта Wi‑Fi протокол деңгээлин жогорулатуу жана ар бир SSID RSSI үчүн көрсөтүү."</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi тармагына туташууда кокустан тандаган MAC дарегин колдонуу"</string>
+ <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Зымсыз мониторлорду тастыктамалоо параметрлери көрүнүп турат"</string>
+ <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi тандалганда ар бир SSID үчүн RSSI көрүнүп турат"</string>
+ <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi тармактарын туташканда MAC даректери башаламан түзүлүп турат"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Трафик ченелет"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Чектелбеген тармак"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Журнал буферинин өлчөмү"</string>
@@ -249,8 +249,8 @@
<string name="allow_mock_location" msgid="2787962564578664888">"Жасалма жайгашкан жерди көрсөтүүгө уруксат берилсин"</string>
<string name="allow_mock_location_summary" msgid="317615105156345626">"Жасалма жайгашкан жерди көрсөтүүгө уруксат берилсин"</string>
<string name="debug_view_attributes" msgid="6485448367803310384">"Аттрибуттарды текшерүүнү иштетүү"</string>
- <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi-Fi иштеп турганда да дайындар мобилдик тармак аркылуу өткөрүлө берсин (тармактар ортосунда тезирээк которулуу үчүн)."</string>
- <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Эгер мүмкүн болсо, тетерингдин иштеши тездетилсин"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi-Fi иштеп турганда да дайындар мобилдик тармак аркылуу өткөрүлө берет (бир тармактан экинчисине тезирээк которулуу үчүн)."</string>
+ <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Мүмкүнчүлүккө жараша, модем режиминде аппарат тезирээк иштей баштайт"</string>
<string name="adb_warning_title" msgid="6234463310896563253">"USB аркылуу жөндөөгө уруксат берилсинби?"</string>
<string name="adb_warning_message" msgid="7316799925425402244">"USB-жөндөө - өндүрүү максатында гана түзүлгөн. Аны компүтериңиз менен түзмөгүңүздүн ортосунда берилиштерди алмашуу, түзмөгүңүзгө колдонмолорду эскертүүсүз орнотуу жана лог берилиштерин окуу үчүн колдонсоңуз болот."</string>
<string name="adb_keys_warning_message" msgid="5659849457135841625">"Сиз мурун USB жөндөөлөрүнө уруксат берген бардык компүтерлердин жеткиси жокко чыгарылсынбы?"</string>
@@ -264,7 +264,7 @@
<string name="enable_terminal_summary" msgid="67667852659359206">"Жергиликтүү буйрук кабыгын сунуштаган терминалга уруксат берүү"</string>
<string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP текшерүү"</string>
<string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP текшерүү тартиби"</string>
- <string name="debug_debugging_category" msgid="6781250159513471316">"Жөндөө"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Мүчүлүштүктөрдү оңдоо"</string>
<string name="debug_app" msgid="8349591734751384446">"Мүчүлүштүктөрдү оңдоочу колдонмону тандоо"</string>
<string name="debug_app_not_set" msgid="718752499586403499">"Бир дагы колдонмо орнотула элек."</string>
<string name="debug_app_set" msgid="2063077997870280017">"Жөндөөчү колдонмо: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -273,18 +273,18 @@
<string name="wait_for_debugger" msgid="1202370874528893091">"Мүчүлүштүктөрдү оңдогуч күтүлүүдө"</string>
<string name="wait_for_debugger_summary" msgid="1766918303462746804">"Колдонмо мүчүлүштүктөрдү оңдогучтун иштешин күтөт"</string>
<string name="debug_input_category" msgid="1811069939601180246">"Киргизүү"</string>
- <string name="debug_drawing_category" msgid="6755716469267367852">"Тартуу"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Чиймелөө"</string>
<string name="debug_hw_drawing_category" msgid="6220174216912308658">"Визуалдаштырууну аппарат менен ылдамдатуу"</string>
<string name="media_category" msgid="4388305075496848353">"Медиа"</string>
<string name="debug_monitoring_category" msgid="7640508148375798343">"Мониторинг"</string>
<string name="strict_mode" msgid="1938795874357830695">"Катаал режим иштетилди"</string>
<string name="strict_mode_summary" msgid="142834318897332338">"Узак операцияларда экран күйүп-өчүп турат"</string>
<string name="pointer_location" msgid="6084434787496938001">"Көрсөткүчтүн жайгшкн жери"</string>
- <string name="pointer_location_summary" msgid="840819275172753713">"Учурдагы басылган дайндрд көрсөтүүчү экран катмары"</string>
- <string name="show_touches" msgid="2642976305235070316">"Таптоолорду көрсөтүү"</string>
- <string name="show_touches_summary" msgid="6101183132903926324">"Экранда тапталган жерлерди көрсөтүү"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Басылган жерлер жана жаңсоолор экранда көрүнүп турат"</string>
+ <string name="show_touches" msgid="2642976305235070316">"Басылган жерлерди көрсөтүү"</string>
+ <string name="show_touches_summary" msgid="6101183132903926324">"Экранда басылган жерлер көрүнүп турат"</string>
<string name="show_screen_updates" msgid="5470814345876056420">"Экран жаңыруусун көрсөтүү"</string>
- <string name="show_screen_updates_summary" msgid="2569622766672785529">"Экран жаңырганда аны бүт бойдон жарык кылуу"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Экран жаңырганда анын үстү жарык болот"</string>
<string name="show_hw_screen_updates" msgid="5036904558145941590">"Экран жаңыртуусун көрсөтүү"</string>
<string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU менен тартканда экрандын аймактары жарык болот"</string>
<string name="show_hw_layers_updates" msgid="5645728765605699821">"Аппараттык жаңыртууларды көрсөтүү"</string>
@@ -297,9 +297,9 @@
<string name="usb_audio_disable_routing" msgid="8114498436003102671">"Аудиону өткөрүүнү өчүрүү (USB)"</string>
<string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Тышкы USB аудио жабдыктарына авто өткөрүү өчрлт"</string>
<string name="debug_layout" msgid="5981361776594526155">"Элементтрдн чектрин көрст"</string>
- <string name="debug_layout_summary" msgid="2001775315258637682">"Клиптин чектерин, талааларын ж.б. көргөзүү"</string>
- <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Солдон оңго багытына мажбурлоо"</string>
- <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Экрандын жайгашуу багытын бардык тилдер үчүн Оңдон-солго кылуу"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Кесилген нерсенин чектери жана жээктери көрүнөт"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Интерфейсти чагылдыруу"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Интерфейстин элементтери бардык тилдерде оңдон солго карай жайгаштырылат"</string>
<string name="force_hw_ui" msgid="6426383462520888732">"GPU тездетүү"</string>
<string name="force_hw_ui_summary" msgid="5535991166074861515">"Эки өлчөмдүү (2d) сүрөт үчүн ар дайым GPU колдонулат"</string>
<string name="force_msaa" msgid="7920323238677284387">"4x MSAA иштетүү"</string>
diff --git a/packages/SettingsLib/res/values-lo/arrays.xml b/packages/SettingsLib/res/values-lo/arrays.xml
index d38f931..3842cf4 100644
--- a/packages/SettingsLib/res/values-lo/arrays.xml
+++ b/packages/SettingsLib/res/values-lo/arrays.xml
@@ -71,7 +71,7 @@
<item msgid="3422726142222090896">"avrcp16"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Use System Selection (Default)"</item>
+ <item msgid="7065842274271279580">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
<item msgid="7539690996561263909">"SBC"</item>
<item msgid="686685526567131661">"AAC"</item>
<item msgid="5254942598247222737">"ສຽງ <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
@@ -81,7 +81,7 @@
<item msgid="3304843301758635896">"ປິດການໃຊ້ Codecs ແບບເສີມ"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Use System Selection (Default)"</item>
+ <item msgid="5062108632402595000">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
<item msgid="6898329690939802290">"SBC"</item>
<item msgid="6839647709301342559">"AAC"</item>
<item msgid="7848030269621918608">"ສຽງ <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
@@ -91,38 +91,38 @@
<item msgid="741805482892725657">"ປິດການໃຊ້ Codecs ແບບເສີມ"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="3093023430402746802">"Use System Selection (Default)"</item>
+ <item msgid="3093023430402746802">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
<item msgid="2909915718994807056">"48.0 kHz"</item>
<item msgid="3347287377354164611">"88.2 kHz"</item>
<item msgid="1234212100239985373">"96.0 kHz"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="3214516120190965356">"Use System Selection (Default)"</item>
+ <item msgid="3214516120190965356">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
<item msgid="4482862757811638365">"44.1 kHz"</item>
<item msgid="354495328188724404">"48.0 kHz"</item>
<item msgid="7329816882213695083">"88.2 kHz"</item>
<item msgid="6967397666254430476">"96.0 kHz"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="2684127272582591429">"Use System Selection (Default)"</item>
+ <item msgid="2684127272582591429">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
<item msgid="5618929009984956469">"16 bits/sample"</item>
<item msgid="3412640499234627248">"24 bits/sample"</item>
<item msgid="121583001492929387">"32 bits/sample"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="1081159789834584363">"Use System Selection (Default)"</item>
+ <item msgid="1081159789834584363">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
<item msgid="4726688794884191540">"16 bits/sample"</item>
<item msgid="305344756485516870">"24 bits/sample"</item>
<item msgid="244568657919675099">"32 bits/sample"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="5226878858503393706">"Use System Selection (Default)"</item>
+ <item msgid="5226878858503393706">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
<item msgid="4106832974775067314">"ໂທນດຽວ"</item>
<item msgid="5571632958424639155">"ສະເຕຣິໂອ"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="4118561796005528173">"Use System Selection (Default)"</item>
+ <item msgid="4118561796005528173">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
<item msgid="8900559293912978337">"ໂທນດຽວ"</item>
<item msgid="8883739882299884241">"ສະເຕຣິໂອ"</item>
</string-array>
@@ -130,13 +130,13 @@
<item msgid="7158319962230727476">"ປັບແຕ່ງສຳລັບຄຸນນະພາບສຽງ (990kbps/909kbps)"</item>
<item msgid="2921767058740704969">"Balanced Audio And Connection Quality (660kbps/606kbps)"</item>
<item msgid="8860982705384396512">"ປັບແຕ່ງສຳລັບຄຸນນະພາບການເຊື່ອມຕໍ່ (330kbps/303kbps)"</item>
- <item msgid="4414060457677684127">"Best Effort (Adaptive Bit Rate)"</item>
+ <item msgid="4414060457677684127">"ພະຍາຍາມເຕັມທີ່ (ປັບອັດຕາບິດເຣດອັດຕະໂນມັດ)"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
<item msgid="6398189564246596868">"ປັບແຕ່ງສຳລັບຄຸນນະພາບສຽງ"</item>
<item msgid="4327143584633311908">"Balanced Audio And Connection Quality"</item>
<item msgid="4681409244565426925">"ປັບແຕ່ງສຳລັບຄຸນນະພາບການເຊື່ອມຕໍ່"</item>
- <item msgid="364670732877872677">"Best Effort (Adaptive Bit Rate)"</item>
+ <item msgid="364670732877872677">"ພະຍາຍາມເຕັມທີ່ (ປັບອັດຕາບິດເຣດອັດຕະໂນມັດ)"</item>
</string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ປິດ"</item>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 3eb852d..06b9490 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -137,7 +137,7 @@
<string name="managed_user_title" msgid="8109605045406748842">"ແອັບເຮັດວຽກທັງໝົດ"</string>
<string name="user_guest" msgid="8475274842845401871">"ແຂກ"</string>
<string name="unknown" msgid="1592123443519355854">"ບໍ່ຮູ້ຈັກ"</string>
- <string name="running_process_item_user_label" msgid="3129887865552025943">"ຜູ່ໃຊ້: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
+ <string name="running_process_item_user_label" msgid="3129887865552025943">"ຜູ້ໃຊ້: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="launch_defaults_some" msgid="313159469856372621">"ຕັ້ງບາງຄ່າເລີ່ມຕົ້ນແລ້ວ"</string>
<string name="launch_defaults_none" msgid="4241129108140034876">"ບໍ່ໄດ້ຕັ້ງຄ່າເລີ່ມຕົ້ນເທື່ອ"</string>
<string name="tts_settings" msgid="8186971894801348327">"ການຕັ້ງຄ່າການປ່ຽນຂໍ້ຄວາມເປັນສຽງເວົ້າ"</string>
@@ -221,9 +221,9 @@
<string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="8010380028880963535">"ເປີດໃຊ້ Bluetooth Audio Codec\nການເລືອກ: Sample Rate"</string>
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string>
<string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="8063859754619484760">"ເປີດໃຊ້ Bluetooth Audio Codec\nການເລືອກ: Bits Per Sample"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ໂໝດຊ່ອງສຽງ Bluetooth"</string>
<string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"ເປີດໃຊ້ Bluetooth Audio Codec\nການເລືອກ: ໂໝດຊ່ອງ"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC Codec: Playback Quality"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC Codec: ຄຸນນະພາບການຫຼິ້ນ"</string>
<string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="7595776220458732825">"ເປີດໃຊ້ Bluetooth Audio LDAC Codec\nການເລືອກ: ຄຸນນະພາບການຫຼິ້ນ"</string>
<string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
<string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS ສ່ວນຕົວ"</string>
@@ -309,12 +309,12 @@
<string name="enable_gpu_debug_layers" msgid="3848838293793255097">"ເປີດໃຊ້ຊັ້ນຂໍ້ມູນດີບັກ GPU"</string>
<string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"ອະນຸຍາດການໂຫລດຊັ້ນຂໍ້ມູນດີບັກ GPU ສຳລັບແອັບດີບັກ"</string>
<string name="window_animation_scale_title" msgid="6162587588166114700">"ຂະໜາດອະນິເມຊັນ"</string>
- <string name="transition_animation_scale_title" msgid="387527540523595875">"ຂະໜາດສະລັບອະນິເມຊັນ"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"ຂະໜາດອະນິເມຊັນ"</string>
<string name="animator_duration_scale_title" msgid="3406722410819934083">"ໄລຍະເວລາອະນິເມຊັນ"</string>
<string name="overlay_display_devices_title" msgid="5364176287998398539">"ຈຳລອງຈໍສະແດງຜົນທີ່ສອງ"</string>
<string name="debug_applications_category" msgid="4206913653849771549">"ແອັບຯ"</string>
<string name="immediately_destroy_activities" msgid="1579659389568133959">"ບໍ່ຕ້ອງຮັກສາການເຮັດວຽກ"</string>
- <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ລຶບທຸກການເຄື່ອນໄຫວທັນທີທີ່ຜູ່ໃຊ້ອອກຈາກມັນ"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ລຶບທຸກການເຄື່ອນໄຫວທັນທີທີ່ຜູ້ໃຊ້ອອກຈາກມັນ"</string>
<string name="app_process_limit_title" msgid="4280600650253107163">"ການຈຳກັດໂປຣເຊສໃນພື້ນຫຼັງ"</string>
<string name="show_all_anrs" msgid="4924885492787069007">"ສະແດງ ANR ພື້ນຫຼັງ"</string>
<string name="show_all_anrs_summary" msgid="6636514318275139826">"ສະແດງກ່ອງຂໍ້ຄວາມບໍ່ຕອບສະໜອງແອັບສຳລັບແອັບພື້ນຫຼັງ"</string>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 15e315e..cd7c796 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -192,8 +192,8 @@
<string name="enable_adb" msgid="7982306934419797485">"USB дебаг"</string>
<string name="enable_adb_summary" msgid="4881186971746056635">"USB холбодсон үеийн согог засах горим"</string>
<string name="clear_adb_keys" msgid="4038889221503122743">"USB дебагын зөвшөөрлийг хураах"</string>
- <string name="bugreport_in_power" msgid="7923901846375587241">"Согог мэдээлэх товчлол"</string>
- <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Цэсэнд согогийн репорт авахад зориулсан товчийг харуулах"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Алдаа мэдээлэх товчлол"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Цэсэнд алдааны мэдэгдэл авахад зориулсан товчийг харуулах"</string>
<string name="keep_screen_on" msgid="1146389631208760344">"Идэвхтэй байлгах"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Цэнэглэж байх үед дэлгэц хэзээ ч амрахгүй"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI снүүп логыг идэвхжүүлэх"</string>
@@ -264,14 +264,14 @@
<string name="enable_terminal_summary" msgid="67667852659359206">"Локал суурьт хандалт хийх боломж олгодог терминалын апп-г идэвхжүүлэх"</string>
<string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP шалгах"</string>
<string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP шалгах авирыг тохируулах"</string>
- <string name="debug_debugging_category" msgid="6781250159513471316">"Согог хайх"</string>
- <string name="debug_app" msgid="8349591734751384446">"Согог засах апп сонгоно уу"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Дебаг"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Дебаг хийх апп сонгоно уу"</string>
<string name="debug_app_not_set" msgid="718752499586403499">"Дебаг аппликейшн тохируулаагүй"</string>
<string name="debug_app_set" msgid="2063077997870280017">"Согог засах аппликейшн: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="select_application" msgid="5156029161289091703">"Аппликейшн сонгох"</string>
<string name="no_application" msgid="2813387563129153880">"Юуг ч биш"</string>
- <string name="wait_for_debugger" msgid="1202370874528893091">"Согог засагчийг хүлээх"</string>
- <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Согог засагдсан аппликейшн ажиллахын өмнө согог засагчийг хавсаргагдахыг хүлээнэ"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Дебаг-г хүлээх"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Дебаг хийгдсэн апп гүйцэтгэхийнхээ өмнө дебаг хийхийг хавсаргахыг хүлээнэ"</string>
<string name="debug_input_category" msgid="1811069939601180246">"Оруулах"</string>
<string name="debug_drawing_category" msgid="6755716469267367852">"Зураг"</string>
<string name="debug_hw_drawing_category" msgid="6220174216912308658">"Техник хангамжийн хурдатгалтай үзүүлэлт"</string>
@@ -311,7 +311,7 @@
<string name="window_animation_scale_title" msgid="6162587588166114700">"Цонхны дүрс амилуулалтын далайц"</string>
<string name="transition_animation_scale_title" msgid="387527540523595875">"Шилжилтийн дүрс амилуулалтын далайц"</string>
<string name="animator_duration_scale_title" msgid="3406722410819934083">"Дүрс амилуулалт үргэлжлэх далайц"</string>
- <string name="overlay_display_devices_title" msgid="5364176287998398539">"Хоёрдох дэлгэцийн симуляци хийх"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Хоёр дахь дэлгэцийн симуляци хийх"</string>
<string name="debug_applications_category" msgid="4206913653849771549">"Апп"</string>
<string name="immediately_destroy_activities" msgid="1579659389568133959">"Үйлдлүүдийг хадгалахгүй"</string>
<string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Үйлдэл бүрийг хэрэглэгч орхимогц нь устгах"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 441be24..1cb36e8 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -34,7 +34,7 @@
<string name="wifi_not_in_range" msgid="1136191511238508967">"Niet binnen bereik"</string>
<string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"Er wordt niet automatisch verbinding gemaakt"</string>
<string name="wifi_no_internet" msgid="4663834955626848401">"Geen internettoegang"</string>
- <string name="saved_network" msgid="4352716707126620811">"Opgeslagen door <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="saved_network" msgid="4352716707126620811">"Opgeslagen door \'<xliff:g id="NAME">%1$s</xliff:g>\'"</string>
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatisch verbonden via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatisch verbonden via provider van netwerkbeoordelingen"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Verbonden via %1$s"</string>
@@ -249,7 +249,7 @@
<string name="allow_mock_location" msgid="2787962564578664888">"Neplocaties toestaan"</string>
<string name="allow_mock_location_summary" msgid="317615105156345626">"Neplocaties toestaan"</string>
<string name="debug_view_attributes" msgid="6485448367803310384">"Inspectie van weergavekenmerk inschakelen"</string>
- <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"mobiele data altijd actief houden, ook als wifi actief is (voor sneller schakelen tussen netwerken)."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mobiele data altijd actief houden, ook als wifi actief is (voor sneller schakelen tussen netwerken)."</string>
<string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Hardwareversnelling voor tethering gebruiken indien beschikbaar"</string>
<string name="adb_warning_title" msgid="6234463310896563253">"USB-foutopsporing toestaan?"</string>
<string name="adb_warning_message" msgid="7316799925425402244">"USB-foutopsporing is alleen bedoeld voor ontwikkeldoeleinden. Het kan worden gebruikt om gegevens te kopiëren tussen je computer en je apparaat, apps zonder melding op je apparaat te installeren en loggegevens te lezen."</string>
@@ -317,7 +317,7 @@
<string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Activiteit wissen zodra de gebruiker deze verlaat"</string>
<string name="app_process_limit_title" msgid="4280600650253107163">"Achtergrondproceslimiet"</string>
<string name="show_all_anrs" msgid="4924885492787069007">"ANR\'s op de achtergrond"</string>
- <string name="show_all_anrs_summary" msgid="6636514318275139826">"Dialoogvenster \'App reageert niet\' weergeven voor apps op de achtergrond"</string>
+ <string name="show_all_anrs_summary" msgid="6636514318275139826">"Dialoogvenster \'App reageert niet\' weergeven voor achtergrond-apps"</string>
<string name="show_notification_channel_warnings" msgid="1399948193466922683">"Kanaalwaarschuwingen voor meldingen weergeven"</string>
<string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Geeft een waarschuwing op het scherm weer wanneer een app een melding post zonder geldig kanaal"</string>
<string name="force_allow_on_external" msgid="3215759785081916381">"Toestaan van apps op externe opslag afdwingen"</string>
diff --git a/packages/SettingsLib/res/values-pa/arrays.xml b/packages/SettingsLib/res/values-pa/arrays.xml
index 85e6f81..489100a 100644
--- a/packages/SettingsLib/res/values-pa/arrays.xml
+++ b/packages/SettingsLib/res/values-pa/arrays.xml
@@ -55,7 +55,7 @@
</string-array>
<string-array name="hdcp_checking_summaries">
<item msgid="505558545611516707">"ਕਦੇ ਵੀ HDCP ਜਾਂਚ ਨਾ ਵਰਤੋ"</item>
- <item msgid="3878793616631049349">"ਕੇਵਲ DRM ਸਮੱਗਰੀ ਲਈ HDCP ਜਾਂਚ"</item>
+ <item msgid="3878793616631049349">"ਸਿਰਫ਼ DRM ਸਮੱਗਰੀ ਲਈ HDCP ਜਾਂਚ ਦੀ ਵਰਤੋਂ ਕਰੋ"</item>
<item msgid="45075631231212732">"ਹਮੇਸਾਂ HDCP ਜਾਂਚ ਵਰਤੋ"</item>
</string-array>
<string-array name="bluetooth_avrcp_versions">
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 5e2a428..93941d8 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -194,7 +194,7 @@
<string name="clear_adb_keys" msgid="4038889221503122743">"USB ਡੀਬਗਿੰਗ ਅਧਿਕਾਰ ਰੱਦ ਕਰੋ"</string>
<string name="bugreport_in_power" msgid="7923901846375587241">"ਬੱਗ ਰਿਪੋਰਟ ਸ਼ਾਰਟਕੱਟ"</string>
<string name="bugreport_in_power_summary" msgid="1778455732762984579">"ਇੱਕ ਬੱਗ ਰਿਪੋਰਟ ਲੈਣ ਲਈ ਪਾਵਰ ਮੀਨੂ ਵਿੱਚ ਇੱਕ ਬਟਨ ਦਿਖਾਓ"</string>
- <string name="keep_screen_on" msgid="1146389631208760344">"ਸਕਿਰਿਆ ਰੱਖੋ"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"ਸੁਚੇਤ ਰਹੋ"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"ਸਕ੍ਰੀਨ ਚਾਰਜਿੰਗ ਦੇ ਸਮੇਂ ਕਦੇ ਵੀ ਸਲੀਪ ਨਹੀਂ ਹੋਵੇਗੀ"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ਬਲੂਟੁੱਥ HCI ਸਨੂਪ ਲੌਗ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
<string name="bt_hci_snoop_log_summary" msgid="366083475849911315">"ਇੱਕ ਫ਼ਾਈਲ ਵਿੱਚ ਸਾਰੇ ਬਲੂਟੁੱਥ HCI ਪੈਕੇਟਾਂ ਨੂੰ ਕੈਪਚਰ ਕਰੋ (ਇਹ ਸੈਟਿੰਗ ਬਦਲਣ ਤੋਂ ਬਾਅਦ ਬਲੂਟੁੱਥ ਟੌਗਲ ਕਰੋ)"</string>
@@ -212,18 +212,18 @@
<string name="mobile_data_always_on" msgid="8774857027458200434">"ਮੋਬਾਈਲ ਡਾਟਾ ਹਮੇਸ਼ਾਂ ਕਿਰਿਆਸ਼ੀਲ"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ਟੈਦਰਿੰਗ ਹਾਰਡਵੇਅਰ ਐਕਸੈੱਲਰੇਸ਼ਨ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ਅਨਾਮ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਦਿਖਾਓ"</string>
- <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ਪੂਰਨ ਵੌਲਿਊਮ ਨੂੰ ਅਯੋਗ ਬਣਾਓ"</string>
+ <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ਪੂਰਨ ਅਵਾਜ਼ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ਬਲੂਟੁੱਥ AVRCP ਵਰਜਨ"</string>
<string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"ਬਲੂਟੁੱਥ AVRCP ਵਰਜਨ ਚੁਣੋ"</string>
- <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਕੋਡੇਕ"</string>
<string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="8436224899475822557">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਕੋਡੇਕ\nਚੋਣ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰੋ"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਨਮੂਨਾ ਦਰ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਸੈਂਪਲ ਰੇਟ"</string>
<string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="8010380028880963535">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਕੋਡੇਕ\nਚੋਣ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰੋ: ਸੈਂਪਲ ਰੇਟ"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ਪ੍ਰਤੀ ਨਮੂਨਾ ਬਲੂਟੁੱਥ ਆਡੀਓ ਬਿਟਾਂ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ਪ੍ਰਤੀ ਸੈਂਪਲ ਬਲੂਟੁੱਥ ਆਡੀਓ ਬਿਟਾਂ"</string>
<string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="8063859754619484760">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਕੋਡੇਕ\nਚੋਣ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰੋ: ਪ੍ਰਤੀ ਸੈਂਪਲ ਬਿਟਾਂ"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਚੈਨਲ ਮੋਡ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਚੈਨਲ ਮੋਡ"</string>
<string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਕੋਡੇਕ\nਚੋਣ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰੋ: ਚੈਨਲ ਮੋਡ"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ਬਲੂਟੁੱਥ ਔਡੀਓ LDAC ਕੋਡੇਕ: ਪਲੇਬੈਕ ਗੁਣਵੱਤਾ"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ਬਲੂਟੁੱਥ ਆਡੀਓ LDAC ਕੋਡੇਕ: ਪਲੇਬੈਕ ਕੁਆਲਿਟੀ"</string>
<string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="7595776220458732825">"ਬਲੂਟੁੱਥ ਆਡੀਓ LDAC ਕੋਡੇਕ\nਚੋਣ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰੋ: ਪਲੇਬੈਕ ਕੁਆਲਿਟੀ"</string>
<string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ਸਟ੍ਰੀਮਿੰਗ: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
<string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ਨਿੱਜੀ DNS"</string>
@@ -259,7 +259,7 @@
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB ਤੇ ਐਪਾਂ ਦੀ ਜਾਂਚ ਕਰੋ"</string>
<string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ਹਾਨੀਕਾਰਕ ਵਿਵਹਾਰ ਲਈ ADB/ADT ਰਾਹੀਂ ਸਥਾਪਤ ਕੀਤੀਆਂ ਐਪਾਂ ਦੀ ਜਾਂਚ ਕਰੋ।"</string>
<string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"ਅਨਾਮ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਦਿਖਾਈਆਂ ਜਾਣਗੀਆਂ (ਸਿਰਫ਼ MAC ਪਤੇ)"</string>
- <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"ਰਿਮੋਟ ਡੀਵਾਈਸਾਂ ਨਾਲ ਵੌਲਿਊਮ ਸਮੱਸਿਆਵਾਂ ਜਿਵੇਂ ਕਿ ਨਾ ਪਸੰਦ ਕੀਤੀ ਜਾਣ ਵਾਲੀ ਉੱਚੀ ਵੌਲਿਊਮ ਜਾਂ ਕੰਟਰੋਲ ਦੀ ਕਮੀ ਵਰਗੀ ਹਾਲਤ ਵਿੱਚ ਬਲੂਟੁੱਥ ਪੂਰਨ ਵੌਲਿਊਮ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਅਯੋਗ ਬਣਾਉਂਦਾ ਹੈ।"</string>
+ <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"ਰਿਮੋਟ ਡੀਵਾਈਸਾਂ ਨਾਲ ਅਵਾਜ਼ੀ ਸਮੱਸਿਆਵਾਂ ਜਿਵੇਂ ਕਿ ਨਾ ਪਸੰਦ ਕੀਤੀ ਜਾਣ ਵਾਲੀ ਉੱਚੀ ਅਵਾਜ਼ ਜਾਂ ਕੰਟਰੋਲ ਦੀ ਕਮੀ ਵਰਗੀ ਹਾਲਤ ਵਿੱਚ ਬਲੂਟੁੱਥ ਪੂਰਨ ਅਵਾਜ਼ਮ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਬੰਦ ਕਰਦਾ ਹੈ।"</string>
<string name="enable_terminal_title" msgid="95572094356054120">"ਸਥਾਨਕ ਟਰਮੀਨਲ"</string>
<string name="enable_terminal_summary" msgid="67667852659359206">"ਟਰਮੀਨਲ ਐਪ ਨੂੰ ਚਾਲੂ ਕਰੋ ਜੋ ਸਥਾਨਕ ਸ਼ੈਲ ਪਹੁੰਚ ਪੇਸ਼ਕਸ਼ ਕਰਦਾ ਹੈ"</string>
<string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP ਜਾਂਚ"</string>
@@ -272,30 +272,30 @@
<string name="no_application" msgid="2813387563129153880">"ਕੁਝ ਨਹੀਂ"</string>
<string name="wait_for_debugger" msgid="1202370874528893091">"ਡੀਬੱਗਰ ਦੀ ਉਡੀਕ ਕਰੋ"</string>
<string name="wait_for_debugger_summary" msgid="1766918303462746804">"ਡੀਬੱਗ ਕੀਤੇ ਐਪਲੀਕੇਸ਼ਨ ਐਗਜੀਕਿਊਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਅਟੈਚ ਕਰਨ ਲਈ ਡੀਬੱਗਰ ਦੀ ਉਡੀਕ ਕਰਦੇ ਹਨ"</string>
- <string name="debug_input_category" msgid="1811069939601180246">"ਇਨਪੁਟ"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ਇਨਪੁੱਟ"</string>
<string name="debug_drawing_category" msgid="6755716469267367852">"ਡਰਾਇੰਗ"</string>
<string name="debug_hw_drawing_category" msgid="6220174216912308658">"ਹਾਰਡਵੇਅਰ ਐਕਸੇਲਰੇਟਿਡ ਰੈਂਡਰਿੰਗ"</string>
<string name="media_category" msgid="4388305075496848353">"ਮੀਡੀਆ"</string>
- <string name="debug_monitoring_category" msgid="7640508148375798343">"ਨਿਰੀਖਣ ਕਰ ਰਿਹਾ ਹੈ"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"ਨਿਰੀਖਣ ਕਰਨਾ"</string>
<string name="strict_mode" msgid="1938795874357830695">"ਸਟ੍ਰਿਕਟ ਮੋਡ ਸਮਰਥਿਤ"</string>
- <string name="strict_mode_summary" msgid="142834318897332338">"ਜਦੋਂ ਐਪਸ ਮੇਨ ਥ੍ਰੈਡ ਤੇ ਲੰਮੇ ਓਪਰੇਸ਼ਨ ਕਰਨ ਤਾਂ ਸਕ੍ਰੀਨ ਫਲੈਸ਼ ਕਰੋ"</string>
- <string name="pointer_location" msgid="6084434787496938001">"ਪੌਇੰਟਰ ਟਿਕਾਣਾ"</string>
- <string name="pointer_location_summary" msgid="840819275172753713">"ਸਕ੍ਰੀਨ ਓਵਰਲੇ ਮੌਜੂਦਾ ਟਚ ਡਾਟਾ ਦਿਖਾ ਰਿਹਾ ਹੈ"</string>
- <string name="show_touches" msgid="2642976305235070316">"ਟੈਪਾਂ ਦਿਖਾਓ"</string>
- <string name="show_touches_summary" msgid="6101183132903926324">"ਟੈਪਾਂ ਲਈ ਨਜ਼ਰ ਸਬੰਧੀ ਪ੍ਰਤੀਕਰਮ ਦਿਖਾਓ"</string>
- <string name="show_screen_updates" msgid="5470814345876056420">"ਸਰਫਸ ਅਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
- <string name="show_screen_updates_summary" msgid="2569622766672785529">"ਵਿੰਡੋ ਦੇ ਸਮੁੱਚੇ ਤਲਾਂ ਦੇ ਅੱਪਡੇਟ ਹੋਣ \'ਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਰੌਸ਼ਨ ਕਰੋ"</string>
- <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU ਦ੍ਰਿਸ਼ ਅੱਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"ਐਪਾਂ ਵੱਲੋਂ ਮੁੱਖ ਥ੍ਰੈੱਡ \'ਤੇ ਲੰਬੀਆਂ ਕਾਰਵਾਈਆਂ ਕਰਨ \'ਤੇ ਸਕ੍ਰੀਨ ਫਲੈਸ਼ ਕਰੋ"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"ਪੁਆਇੰਟਰ ਟਿਕਾਣਾ"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"ਸਕ੍ਰੀਨ ਓਵਰਲੇ ਮੌਜੂਦਾ ਸਪੱਰਸ਼ ਡਾਟਾ ਦਿਖਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="show_touches" msgid="2642976305235070316">"ਟੈਪਾਂ ਦਿਖਾਓ"</string>
+ <string name="show_touches_summary" msgid="6101183132903926324">"ਟੈਪਾਂ ਲਈ ਨਜ਼ਰ ਸੰਬੰਧੀ ਪ੍ਰਤੀਕਰਮ ਦਿਖਾਓ"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"ਸਰਫ਼ੇਸ ਅੱਪਡੇਟ ਦਿਖਾਓ"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"ਸਮੁੱਚੀ ਵਿੰਡੋ ਸਰਫ਼ੇਸਾਂ ਫਲੈਸ਼ ਕਰੋ ਜਦੋਂ ਉਹ ਅੱਪਡੇਟ ਹੁੰਦੀਆਂ ਹਨ"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU ਦ੍ਰਿਸ਼ ਅੱਪਡੇਟ ਦਿਖਾਓ"</string>
<string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"ਜਦੋਂ GPU ਨਾਲ ਡ੍ਰਾ ਕੀਤਾ ਜਾਏ ਤਾਂ ਵਿੰਡੋਜ਼ ਦੇ ਅੰਦਰ ਦ੍ਰਿਸ਼ ਫਲੈਸ਼ ਕਰੋ"</string>
- <string name="show_hw_layers_updates" msgid="5645728765605699821">"ਹਾਰਡਵੇਅਰ ਲੇਅਰਾਂ ਦੇ ਅੱਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"ਹਾਰਡਵੇਅਰ ਲੇਅਰਾਂ ਦੇ ਅੱਪਡੇਟ ਦਿਖਾਓ"</string>
<string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ਹਾਰਡਵੇਅਰ ਲੇਅਰਾਂ ਅੱਪਡੇਟ ਹੋਣ \'ਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਹਰਾ ਕਰੋ"</string>
<string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ਓਵਰਡ੍ਰਾ ਡੀਬੱਗ ਕਰੋ"</string>
- <string name="disable_overlays" msgid="2074488440505934665">"HW ਓਵਰਲੇਜ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW ਓਵਰਲੇ ਨੂੰ ਬੰਦ ਕਰੋ"</string>
<string name="disable_overlays_summary" msgid="3578941133710758592">"ਸਕ੍ਰੀਨ ਕੰਪੋਜਿਟਿੰਗ ਲਈ ਹਮੇਸ਼ਾਂ GPU ਵਰਤੋ"</string>
<string name="simulate_color_space" msgid="6745847141353345872">"ਰੰਗ ਸਪੇਸ ਦੀ ਨਕਲ ਕਰੋ"</string>
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ਟ੍ਰੇਸਿਜ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
- <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ਆਡੀਓ ਰੂਟਿੰਗ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
- <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ਆਡੀਓ ਪੈਰੀਫਰਲ ਲਈ ਆਟੋਮੈਟਿਕ ਰੂਟਿੰਗ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ਆਡੀਓ ਰੂਟਿੰਗ ਨੂੰ ਬੰਦ ਕਰੋ"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ਆਡੀਓ ਪੈਰੀਫੈਰਲ ਲਈ ਸਵੈਚਲਿਤ ਰੂਟਿੰਗ ਬੰਦ ਕਰੋ"</string>
<string name="debug_layout" msgid="5981361776594526155">"ਲੇਆਉਟ ਬਾਊਂਡਸ ਦਿਖਾਓ"</string>
<string name="debug_layout_summary" msgid="2001775315258637682">"ਕਲਿਪ ਬਾਊਂਡਸ, ਮਾਰਜਿਨ ਆਦਿ ਦਿਖਾਓ"</string>
<string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL ਲੇਆਉਟ ਦਿਸ਼ਾ ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
@@ -314,17 +314,17 @@
<string name="overlay_display_devices_title" msgid="5364176287998398539">"ਸੈਕੰਡਰੀ ਡਿਸਪਲੇ ਦੀ ਨਕਲ ਕਰੋ"</string>
<string name="debug_applications_category" msgid="4206913653849771549">"ਐਪਾਂ"</string>
<string name="immediately_destroy_activities" msgid="1579659389568133959">"ਗਤੀਵਿਧੀਆਂ ਨਾ ਰੱਖੋ"</string>
- <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ਹਰੇਕ ਗਤੀਵਿਧੀ ਨੂੰ ਨਸ਼ਟ ਕਰੋ ਜਿਵੇਂ ਹੀ ਉਪਭੋਗਤਾ ਇਸਨੂੰ ਛੱਡ ਦੇਵੇ"</string>
- <string name="app_process_limit_title" msgid="4280600650253107163">"ਪਿਛੋਕੜ ਪ੍ਰਕਿਰਿਆ ਸੀਮਾ"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ਹਰੇਕ ਸਰਗਰਮੀ ਨਸ਼ਟ ਕਰੋ, ਜਿਵੇਂ ਹੀ ਵਰਤੋਂਕਾਰ ਇਸਨੂੰ ਛੱਡੇ"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"ਬੈਕਗ੍ਰਾਊਂਡ ਪ੍ਰਕਿਰਿਆ ਸੀਮਾ"</string>
<string name="show_all_anrs" msgid="4924885492787069007">"ਬੈਕਗ੍ਰਾਊਂਡ ANRs ਦਿਖਾਓ"</string>
- <string name="show_all_anrs_summary" msgid="6636514318275139826">"ਬੈਕਗ੍ਰਾਊਂਡ ਐਪਾਂ ਲਈ \'ਐਪ ਪ੍ਰਤਿਕਿਰਿਆ ਨਹੀਂ ਦੇ ਰਹੀ ਹੈ\' ਡਾਇਲੌਗ ਦਿਖਾਓ"</string>
+ <string name="show_all_anrs_summary" msgid="6636514318275139826">"ਬੈਕਗ੍ਰਾਊਂਡ ਐਪਾਂ ਲਈ \'ਐਪ ਪ੍ਰਤਿਕਿਰਿਆ ਨਹੀਂ ਦੇ ਰਹੀ ਹੈ\' ਵਿੰਡੋ ਦਿਖਾਓ"</string>
<string name="show_notification_channel_warnings" msgid="1399948193466922683">"ਸੂਚਨਾ ਚੈਨਲ ਚਿਤਾਵਨੀਆਂ ਦਿਖਾਓ"</string>
<string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"ਐਪ ਵੱਲੋਂ ਵੈਧ ਚੈਨਲ ਤੋਂ ਬਿਨਾਂ ਸੂਚਨਾ ਪੋਸਟ ਕਰਨ \'ਤੇ ਸਕ੍ਰੀਨ \'ਤੇ ਚਿਤਾਵਨੀ ਦਿਖਾਉਂਦੀ ਹੈ"</string>
- <string name="force_allow_on_external" msgid="3215759785081916381">"ਐਪਸ ਨੂੰ ਬਾਹਰਲੇ ਤੇ ਜ਼ਬਰਦਸਤੀ ਆਗਿਆ ਦਿਓ"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"ਐਪਾਂ ਨੂੰ ਜ਼ਬਰਦਸਤੀ ਬਾਹਰੀ ਸਟੋਰੇਜ \'ਤੇ ਆਗਿਆ ਦਿਓ"</string>
<string name="force_allow_on_external_summary" msgid="3640752408258034689">"ਮੈਨੀਫੈਸਟ ਮੁੱਲਾਂ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ, ਕਿਸੇ ਵੀ ਐਪ ਨੂੰ ਬਾਹਰੀ ਸਟੋਰੇਜ \'ਤੇ ਲਿਖਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦੀ ਹੈ"</string>
<string name="force_resizable_activities" msgid="8615764378147824985">"ਮੁੜ-ਆਕਾਰ ਬਦਲਣ ਲਈ ਸਰਗਰਮੀਆਂ \'ਤੇ ਜ਼ੋਰ ਦਿਓ"</string>
<string name="force_resizable_activities_summary" msgid="6667493494706124459">"ਮੈਨੀਫ਼ੈਸਟ ਮੁੱਲਾਂ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ, ਮਲਟੀ-ਵਿੰਡੋ ਲਈ ਸਾਰੀਆਂ ਸਰਗਰਮੀਆਂ ਨੂੰ ਆਕਾਰ ਬਦਲਣਯੋਗ ਬਣਾਓ।"</string>
- <string name="enable_freeform_support" msgid="1461893351278940416">"freeform windows ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
+ <string name="enable_freeform_support" msgid="1461893351278940416">"ਫ੍ਰੀਫਾਰਮ ਵਿੰਡੋਜ਼ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
<string name="enable_freeform_support_summary" msgid="8247310463288834487">"ਪ੍ਰਯੋਗਮਈ ਫ੍ਰੀਫਾਰਮ ਵਿੰਡੋਜ਼ ਲਈ ਸਮਰਥਨ ਨੂੰ ਚਾਲੂ ਕਰੋ।"</string>
<string name="local_backup_password_title" msgid="3860471654439418822">"ਡੈਸਕਟਾਪ ਬੈਕਅੱਪ ਪਾਸਵਰਡ"</string>
<string name="local_backup_password_summary_none" msgid="6951095485537767956">"ਡੈਸਕਟਾਪ ਪੂਰੇ ਬੈਕਅੱਪ ਇਸ ਵੇਲੇ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਹਨ"</string>
@@ -359,12 +359,12 @@
<string name="button_convert_fbe" msgid="5152671181309826405">"ਮਿਟਾਓ ਅਤੇ ਰੁਪਾਂਤਰਣ ਕਰੋ..."</string>
<string name="picture_color_mode" msgid="4560755008730283695">"ਤਸਵੀਰ ਰੰਗ ਮੋਡ"</string>
<string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ਵਰਤੋਂ ਕਰੋ"</string>
- <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"ਅਯੋਗ ਬਣਾਇਆ"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"ਬੰਦ ਹੈ"</string>
<string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string>
<string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (ਲਾਲ-ਹਰਾ)"</string>
<string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (ਲਾਲ-ਹਰਾ)"</string>
<string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (ਨੀਲਾ-ਪੀਲਾ)"</string>
- <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"ਰੰਗ ਸੰਸ਼ੋਧਨ"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"ਰੰਗ ਸੁਧਾਈ"</string>
<string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਪ੍ਰਯੋਗਾਤਮਿਕ ਹੈ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ ਤੇ ਅਸਰ ਪਾ ਸਕਦੀ ਹੈ।"</string>
<string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> ਦੁਆਰਾ ਓਵਰਰਾਈਡ ਕੀਤਾ"</string>
<string name="power_remaining_duration_only" msgid="845431008899029842">"ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਬਾਕੀ"</string>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index ba488f5..1b64082 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -197,20 +197,20 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Nevypínať obrazovku"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Obrazovka sa pri nabíjaní neprepne do režimu spánku"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Povoliť denník Bluetooth HCI"</string>
- <string name="bt_hci_snoop_log_summary" msgid="366083475849911315">"Zachytiť všetky pakety Bluetooth HCI do súboru (po zmene tohto nastavenia prepnúť Bluetooth)"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="366083475849911315">"Zachytávať všetky pakety Bluetooth HCI do súboru (po zmene tohto nastavenia prepnúť Bluetooth)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Odblokovať OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Povoliť odblokovanie ponuky bootloader"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Povoliť odblokovanie OEM?"</string>
<string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"UPOZORNENIE: Dokiaľ bude toto nastavenie zapnuté, funkcie ochrany zariadenia nebudú na tomto zariadení fungovať."</string>
- <string name="mock_location_app" msgid="7966220972812881854">"Vybrať aplikáciu so simulovanou polohou"</string>
- <string name="mock_location_app_not_set" msgid="809543285495344223">"Nemáte žiadnu aplikáciu so simulovanou polohou"</string>
- <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikácia so simulovanou polohou: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Vybrať aplikáciu na simuláciu polohy"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Žiadna aplikácia na simuláciu polohy"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikácia na simuláciu polohy: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="debug_networking_category" msgid="7044075693643009662">"Siete"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certifikácia bezdrôtového zobrazenia"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Podrobné denníky Wi‑Fi"</string>
<string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Randomizácia pripojených adries MAC"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilné dáta ponechať vždy aktívne"</string>
- <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardvérovú akcelerácia pre tethering"</string>
+ <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardvérová akcelerácia tetheringu"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Zobrazovať zariadenia Bluetooth bez názvov"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Zakázať absolútnu hlasitosť"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Verzia rozhrania Bluetooth AVRCP"</string>
@@ -250,7 +250,7 @@
<string name="allow_mock_location_summary" msgid="317615105156345626">"Povoliť simulované polohy"</string>
<string name="debug_view_attributes" msgid="6485448367803310384">"Kontrola atribútov zobrazenia"</string>
<string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Vždy ponechávať mobilné dáta aktívne, dokonca aj pri aktívnej sieti Wi‑Fi (na rýchle prepínanie sietí)"</string>
- <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Používať hardvérovú akceleráciu pre tethering (ak je k dispozícii)"</string>
+ <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Ak je k dispozícii hardvérová akcelerácia tetheringu, používať ju"</string>
<string name="adb_warning_title" msgid="6234463310896563253">"Povoliť ladenie cez USB?"</string>
<string name="adb_warning_message" msgid="7316799925425402244">"Ladenie cez USB je určené iba na účely vývoja. Možno ho použiť na kopírovanie dát medzi počítačom a zariadením, inštaláciu aplikácií do zariadenia bez upozornenia a čítanie dát denníka."</string>
<string name="adb_keys_warning_message" msgid="5659849457135841625">"Chcete všetkým v minulosti autorizovaným počítačom odvolať prístup k ladeniu cez USB?"</string>
@@ -283,30 +283,30 @@
<string name="pointer_location_summary" msgid="840819275172753713">"Zobraziť prekryvnú vrstvu s aktuálnymi údajmi o klepnutiach"</string>
<string name="show_touches" msgid="2642976305235070316">"Zobrazovať klepnutia"</string>
<string name="show_touches_summary" msgid="6101183132903926324">"Vizuálne znázorňovať klepnutia"</string>
- <string name="show_screen_updates" msgid="5470814345876056420">"Zobraziť obnovenia obsahu"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Ukazovať obnovenia obsahu"</string>
<string name="show_screen_updates_summary" msgid="2569622766672785529">"Rozblikať obsah okna pri aktualizácii"</string>
- <string name="show_hw_screen_updates" msgid="5036904558145941590">"Zobraziť obnovenia s GPU"</string>
- <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Rozblikať zobrazenia v oknách vykresľované GPU"</string>
- <string name="show_hw_layers_updates" msgid="5645728765605699821">"Obnovenie hardvér. vrstiev"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Ukazovať obnovenia grafickým procesorom"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Rozblikať zobrazenia v oknách vykresľované grafickým procesorom"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Ukazovať obnovenia hardvérových vrstiev"</string>
<string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Rozblikať zelene hardvérové vrstvy pri obnovení"</string>
- <string name="debug_hw_overdraw" msgid="2968692419951565417">"Ladenie prekresľovania GPU"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Ladiť prekresľovanie grafickým procesorom"</string>
<string name="disable_overlays" msgid="2074488440505934665">"Zakázať hardvérové prekrytia"</string>
- <string name="disable_overlays_summary" msgid="3578941133710758592">"Vždy používať GPU na skladanie obrazovky"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Vždy skladať obrazovku grafickým procesorom"</string>
<string name="simulate_color_space" msgid="6745847141353345872">"Simulácia far. priestoru"</string>
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"Trasovanie OpenGL"</string>
<string name="usb_audio_disable_routing" msgid="8114498436003102671">"Vyp. smer. zvuku do USB"</string>
<string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Vypnúť automatické smerovanie do audio periférií USB"</string>
- <string name="debug_layout" msgid="5981361776594526155">"Zobraziť ohraničenia"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Zobrazovať ohraničenia"</string>
<string name="debug_layout_summary" msgid="2001775315258637682">"Zobraziť vo výstrižku ohraničenie, okraje a pod."</string>
<string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Rozloženia sprava doľava"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Vynútiť pre všetky jazyky rozloženie obrazovky sprava doľava"</string>
- <string name="force_hw_ui" msgid="6426383462520888732">"Vykresľovat pomocou GPU"</string>
- <string name="force_hw_ui_summary" msgid="5535991166074861515">"Používať GPU na dvojrozmerné vykresľovanie"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Vykresľovať grafickým procesorom"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Vynútiť použitie grafického procesora na dvojrozmerné vykresľovanie"</string>
<string name="force_msaa" msgid="7920323238677284387">"Vynútiť 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9123553203895817537">"Povoliť 4x MSAA v aplikáciách OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="505954950474595172">"Ladenie operácií s neobdĺžnikovými výstrižkami"</string>
- <string name="track_frame_time" msgid="6146354853663863443">"Profil vykresľovania GPU"</string>
- <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Povoliť vrstvy ladenia GPU"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profil vykresľovania grafickým procesorom"</string>
+ <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Povoliť vrstvy ladenia grafického procesora"</string>
<string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Povoliť načítanie vrstiev ladenia grafického procesora na ladenie aplikácií"</string>
<string name="window_animation_scale_title" msgid="6162587588166114700">"Mierka animácie okna"</string>
<string name="transition_animation_scale_title" msgid="387527540523595875">"Mierka animácie premeny"</string>
@@ -347,7 +347,7 @@
<string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktívne. Prepnite klepnutím."</string>
<string name="standby_bucket_summary" msgid="6567835350910684727">"Stav pohotovostného režimu aplikácie: <xliff:g id="BUCKET"> %s</xliff:g>"</string>
<string name="runningservices_settings_title" msgid="8097287939865165213">"Spustené služby"</string>
- <string name="runningservices_settings_summary" msgid="854608995821032748">"Zobrazenie a ovládanie aktuálne spustených služieb"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Zobrazovať a riadiť aktuálne spustené služby"</string>
<string name="select_webview_provider_title" msgid="4628592979751918907">"Implementácia WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Nastaviť implementáciu WebView"</string>
<string name="select_webview_provider_toast_text" msgid="5466970498308266359">"Táto voľba už nie je platná. Skúste to znova."</string>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 676c8c2..dfa9fa0 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -182,8 +182,8 @@
<string name="choose_profile" msgid="6921016979430278661">"Изаберите профил"</string>
<string name="category_personal" msgid="1299663247844969448">"Лично"</string>
<string name="category_work" msgid="8699184680584175622">"Посао"</string>
- <string name="development_settings_title" msgid="215179176067683667">"Опције за програмера"</string>
- <string name="development_settings_enable" msgid="542530994778109538">"Омогући опције за програмера"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Опције за програмере"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Омогући опције за програмере"</string>
<string name="development_settings_summary" msgid="1815795401632854041">"Подешавање опција за програмирање апликације"</string>
<string name="development_settings_not_available" msgid="4308569041701535607">"Опције за програмере нису доступне за овог корисника"</string>
<string name="vpn_settings_not_available" msgid="956841430176985598">"Подешавања VPN-а нису доступна за овог корисника"</string>
@@ -290,12 +290,12 @@
<string name="show_hw_layers_updates" msgid="5645728765605699821">"Прикажи ажурирања хардверских слојева"</string>
<string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Хардверски слојеви трепере зелено када се ажурирају"</string>
<string name="debug_hw_overdraw" msgid="2968692419951565417">"Отклони грешке GPU преклапања"</string>
- <string name="disable_overlays" msgid="2074488440505934665">"Онемог. HW пост. елементе"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Онемогући HW постављене елементе"</string>
<string name="disable_overlays_summary" msgid="3578941133710758592">"Увек користи GPU за компоновање екрана"</string>
<string name="simulate_color_space" msgid="6745847141353345872">"Симулирај простор боје"</string>
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"Омогући OpenGL трагове"</string>
<string name="usb_audio_disable_routing" msgid="8114498436003102671">"Онемогући USB преусм. звука"</string>
- <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Онемогући аутомат. преусмер. на USB аудио периферне уређаје"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Онемогући аут. преусм. на USB аудио периферне уређаје"</string>
<string name="debug_layout" msgid="5981361776594526155">"Прикажи границе распореда"</string>
<string name="debug_layout_summary" msgid="2001775315258637682">"Прикажи границе клипа, маргине итд."</string>
<string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Наметни смер распореда здесна налево"</string>
@@ -307,7 +307,7 @@
<string name="show_non_rect_clip" msgid="505954950474595172">"Отклони грешке у вези са радњама за исецање области које нису правоугаоног облика"</string>
<string name="track_frame_time" msgid="6146354853663863443">"Прикажи профил помоћу GPU"</string>
<string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Омогући слојеве за отклањање грешака GPU-a"</string>
- <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Омогући учитавање слоj. за отк. греш. GPU-a у апл. за отк. греш."</string>
+ <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Омогући учитавање отк. греш. GPU-a у апл. за отк. греш."</string>
<string name="window_animation_scale_title" msgid="6162587588166114700">"Размера анимације прозора"</string>
<string name="transition_animation_scale_title" msgid="387527540523595875">"Размера анимације прелаза"</string>
<string name="animator_duration_scale_title" msgid="3406722410819934083">"Аниматорова размера трајања"</string>
@@ -316,7 +316,7 @@
<string name="immediately_destroy_activities" msgid="1579659389568133959">"Не чувај активности"</string>
<string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Уништи сваку активност чим је корисник напусти"</string>
<string name="app_process_limit_title" msgid="4280600650253107163">"Ограничење позадинских процеса"</string>
- <string name="show_all_anrs" msgid="4924885492787069007">"Прикажи ANR-ове у позад."</string>
+ <string name="show_all_anrs" msgid="4924885492787069007">"Прикажи ANR-ове у позадини"</string>
<string name="show_all_anrs_summary" msgid="6636514318275139826">"Прикажи дијалог Апликација не реагује за апликације у позадини"</string>
<string name="show_notification_channel_warnings" msgid="1399948193466922683">"Приказуј упозорења због канала за обавештења"</string>
<string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Приказује упозорење на екрану када апликација постави обавештење без важећег канала"</string>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index c320aeb..77de1d7 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -173,21 +173,21 @@
<item msgid="8489661142527693381">"akiba ya kumbukumbu ya keneli pekee"</item>
</string-array>
<string-array name="window_animation_scale_entries">
- <item msgid="8134156599370824081">"Haiwani imezimwa"</item>
- <item msgid="6624864048416710414">"Skeli .5x ya haiwani"</item>
- <item msgid="2219332261255416635">"Skeli 1x ya haiwani"</item>
- <item msgid="3544428804137048509">"Skeli 1.5x ya haiwani"</item>
- <item msgid="3110710404225974514">"Skeli 2x ya haiwani"</item>
- <item msgid="4402738611528318731">"Skeli 5x ya haiwani"</item>
- <item msgid="6189539267968330656">"Skeli 10x ya haiwani"</item>
+ <item msgid="8134156599370824081">"Uhuishaji umezimwa"</item>
+ <item msgid="6624864048416710414">"Skeli .5x ya uhuishaji"</item>
+ <item msgid="2219332261255416635">"Skeli 1x ya uhuishaji"</item>
+ <item msgid="3544428804137048509">"Skeli 1.5x ya uhuishaji"</item>
+ <item msgid="3110710404225974514">"Skeli 2x ya uhuishaji"</item>
+ <item msgid="4402738611528318731">"Skeli 5x ya uhuishaji"</item>
+ <item msgid="6189539267968330656">"Skeli 10x ya uhuishaji"</item>
</string-array>
<string-array name="transition_animation_scale_entries">
- <item msgid="8464255836173039442">"Haiwani imezimwa"</item>
- <item msgid="3375781541913316411">"Skeli .5x ya haiwani"</item>
- <item msgid="1991041427801869945">"Skeli 1x ya haiwani"</item>
- <item msgid="4012689927622382874">"Skeli 1.5x ya haiwani"</item>
- <item msgid="3289156759925947169">"Skeli 2x ya haiwani"</item>
- <item msgid="7705857441213621835">"Skeli 5x ya haiwani"</item>
+ <item msgid="8464255836173039442">"Uhuishaji umezimwa"</item>
+ <item msgid="3375781541913316411">"Skeli .5x ya uhuishaji"</item>
+ <item msgid="1991041427801869945">"Skeli 1x ya uhuishaji"</item>
+ <item msgid="4012689927622382874">"Skeli 1.5x ya uhuishaji"</item>
+ <item msgid="3289156759925947169">"Skeli 2x ya uhuishaji"</item>
+ <item msgid="7705857441213621835">"Skeli 5x ya uhuishaji"</item>
<item msgid="6660750935954853365">"Skeli ya 10x ya uhuishaji"</item>
</string-array>
<string-array name="animator_duration_scale_entries">
@@ -236,7 +236,7 @@
</string-array>
<string-array name="app_process_limit_entries">
<item msgid="3401625457385943795">"Kiwango cha wastani"</item>
- <item msgid="4071574792028999443">"Hakuna mchakato wa mandari nyuma"</item>
+ <item msgid="4071574792028999443">"Hakuna michakato ya mandhari nyuma"</item>
<item msgid="4810006996171705398">"Angalau mchakato 1"</item>
<item msgid="8586370216857360863">"Angalau michakato 2"</item>
<item msgid="836593137872605381">"Angalau michakato 3"</item>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index e821616..e7645ae 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -309,13 +309,13 @@
<string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Ruhusu safu za utatuzi wa GPU"</string>
<string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Ruhusu upakiaji wa safu za utatuzi wa GPU za programu za utatuzi"</string>
<string name="window_animation_scale_title" msgid="6162587588166114700">"Uhuishaji kwenye dirisha"</string>
- <string name="transition_animation_scale_title" msgid="387527540523595875">"Mageuzi ya kipimo cha huiani"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Mageuzi ya kipimo cha uhuishaji"</string>
<string name="animator_duration_scale_title" msgid="3406722410819934083">"Mizani ya muda wa uhuishaji"</string>
- <string name="overlay_display_devices_title" msgid="5364176287998398539">"Iga maonyesho ya upili"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Iga maonyesho ya mbadala"</string>
<string name="debug_applications_category" msgid="4206913653849771549">"Programu"</string>
<string name="immediately_destroy_activities" msgid="1579659389568133959">"Usihifadhi shughuli"</string>
<string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Haribu kila shughuli pindi tu mtumiaji anapoondoka"</string>
- <string name="app_process_limit_title" msgid="4280600650253107163">"Kiwango cha mchakato wa mandari nyuma"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Kikomo cha mchakato wa mandhari nyuma"</string>
<string name="show_all_anrs" msgid="4924885492787069007">"Onyesha historia ya ANR"</string>
<string name="show_all_anrs_summary" msgid="6636514318275139826">"Onyesha kidirisha cha Programu Kutorejesha Majibu kwa programu zinazotumika chinichini"</string>
<string name="show_notification_channel_warnings" msgid="1399948193466922683">"Onyesha arifa za maonyo ya kituo"</string>
@@ -347,7 +347,7 @@
<string name="inactive_app_active_summary" msgid="4174921824958516106">"Inatumika. Gusa ili ugeuze."</string>
<string name="standby_bucket_summary" msgid="6567835350910684727">"Hali ya kisitisha programu:<xliff:g id="BUCKET"> %s</xliff:g>"</string>
<string name="runningservices_settings_title" msgid="8097287939865165213">"Huduma zinazoendeshwa"</string>
- <string name="runningservices_settings_summary" msgid="854608995821032748">"Onyesha na dhibiti huduma zinazoendeshwa kwa sasa"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Onyesha na udhibiti huduma zinazoendeshwa kwa sasa"</string>
<string name="select_webview_provider_title" msgid="4628592979751918907">"Utekelezaji wa WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Weka utekelezaji wa WebView"</string>
<string name="select_webview_provider_toast_text" msgid="5466970498308266359">"Chaguo hili halipo tena. Jaribu tena."</string>
@@ -441,7 +441,7 @@
<string name="okay" msgid="1997666393121016642">"Sawa"</string>
<string name="zen_mode_enable_dialog_turn_on" msgid="8287824809739581837">"Washa"</string>
<string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"Washa kipengele cha Usinisumbue"</string>
- <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"Kamwe"</string>
+ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"Kamwe usiwashe"</string>
<string name="zen_interruption_level_priority" msgid="2078370238113347720">"Kipaumbele tu"</string>
<string name="zen_mode_and_condition" msgid="4927230238450354412">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_alarm_warning_indef" msgid="3007988140196673193">"Hutasikia kengele inayofuata ya saa <xliff:g id="WHEN">%1$s</xliff:g> isipokuwa uzime mipangilio hii kabla ya wakati huo"</string>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index 0f5630f..0b89354 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -361,9 +361,9 @@
<string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGBஐப் பயன்படுத்தும்"</string>
<string name="daltonizer_mode_disabled" msgid="7482661936053801862">"முடக்கப்பட்டது"</string>
<string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"மோனோகுரோமசி"</string>
- <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"நிறக்குருடு (சிவப்பு)"</string>
- <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"நிறக்குருடு (பச்சை)"</string>
- <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"நிறக்குருடு (நீலம்-மஞ்சள்)"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"நிறம் அடையாளங்காண முடியாமை (சிவப்பு-பச்சை)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"நிறம் அடையாளங்காண முடியாமை (சிவப்பு-பச்சை)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"நிறம் அடையாளங்காண முடியாமை (நீலம்-மஞ்சள்)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"வண்ணத்திருத்தம்"</string>
<string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"இது சோதனை முறையிலான அம்சம், இது செயல்திறனைப் பாதிக்கலாம்."</string>
<string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> மூலம் மேலெழுதப்பட்டது"</string>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index fa75df1..7779387 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -141,7 +141,7 @@
<string name="launch_defaults_some" msgid="313159469856372621">"Bazı varsayılan tercihler ayarlandı"</string>
<string name="launch_defaults_none" msgid="4241129108140034876">"Hiçbir varsayılan tercih ayarlanmadı"</string>
<string name="tts_settings" msgid="8186971894801348327">"Metin-konuşma ayarları"</string>
- <string name="tts_settings_title" msgid="1237820681016639683">"Metin-konuşma çıktısı"</string>
+ <string name="tts_settings_title" msgid="1237820681016639683">"Metin okuma çıkışı"</string>
<string name="tts_default_rate_title" msgid="6030550998379310088">"Konuşma hızı"</string>
<string name="tts_default_rate_summary" msgid="4061815292287182801">"Metnin konuşulduğu hız"</string>
<string name="tts_default_pitch_title" msgid="6135942113172488671">"Perde"</string>
@@ -155,7 +155,7 @@
<string name="tts_install_data_title" msgid="4264378440508149986">"Ses verilerini yükle"</string>
<string name="tts_install_data_summary" msgid="5742135732511822589">"Konuşma sentezi için gereken ses verilerini yükle"</string>
<string name="tts_engine_security_warning" msgid="8786238102020223650">"Bu konuşma sentezi motoru, şifreler ve kredi kartı numaraları gibi kişisel veriler de dahil konuşulan tüm metni toplayabilir. <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> motorundan gelmektedir. Bu konuşma sentezi motorunun kullanımı etkinleştirilsin mi?"</string>
- <string name="tts_engine_network_required" msgid="1190837151485314743">"Bu dil, metin-konuşma çıktısı için bir ağ bağlantısı gerektirir."</string>
+ <string name="tts_engine_network_required" msgid="1190837151485314743">"Bu dil, metin okuma çıkışı için bir ağ bağlantısı gerektirir."</string>
<string name="tts_default_sample_string" msgid="4040835213373086322">"Bu bir konuşma sentezi örneğidir"</string>
<string name="tts_status_title" msgid="7268566550242584413">"Varsayılan dil durumu"</string>
<string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> tamamen destekleniyor"</string>
@@ -284,7 +284,7 @@
<string name="show_touches" msgid="2642976305235070316">"Dokunmayı göster"</string>
<string name="show_touches_summary" msgid="6101183132903926324">"Dokunmalarda görsel geri bildirim göster"</string>
<string name="show_screen_updates" msgid="5470814345876056420">"Yüzey güncellemelerini göster"</string>
- <string name="show_screen_updates_summary" msgid="2569622766672785529">"Güncelleme sırasında tüm pencere yüzeylerini çiz"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Güncellenirken tüm pencere yüzeylerini yakıp söndür"</string>
<string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU görünüm güncellemelerini göster"</string>
<string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU ile çizim yapılırken pencerelerdeki görünümleri çiz"</string>
<string name="show_hw_layers_updates" msgid="5645728765605699821">"Donanım katmanı güncellemelerini göster"</string>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index b41b7c3..ffa5c6c 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -326,7 +326,7 @@
<string name="force_resizable_activities_summary" msgid="6667493494706124459">"Масштабувати активність на кілька вікон, незалежно від значень у файлі маніфесту."</string>
<string name="enable_freeform_support" msgid="1461893351278940416">"Увімкнути вікна довільного формату"</string>
<string name="enable_freeform_support_summary" msgid="8247310463288834487">"Увімкнути експериментальні вікна довільного формату."</string>
- <string name="local_backup_password_title" msgid="3860471654439418822">"Пароль резерв.копії на ПК"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Пароль рез. копії на ПК"</string>
<string name="local_backup_password_summary_none" msgid="6951095485537767956">"Повні резервні копії на комп’ютері наразі не захищені"</string>
<string name="local_backup_password_summary_change" msgid="5376206246809190364">"Торкніться, щоб змінити або видалити пароль для повного резервного копіювання на комп’ютер"</string>
<string name="local_backup_password_toast_success" msgid="582016086228434290">"Новий пароль резервної копії встановлено"</string>
diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml
index 34dd4bc..e30bb8d 100644
--- a/packages/SettingsLib/res/values-vi/arrays.xml
+++ b/packages/SettingsLib/res/values-vi/arrays.xml
@@ -71,7 +71,7 @@
<item msgid="3422726142222090896">"avrcp16"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
+ <item msgid="7065842274271279580">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
<item msgid="7539690996561263909">"SBC"</item>
<item msgid="686685526567131661">"AAC"</item>
<item msgid="5254942598247222737">"Âm thanh <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
@@ -81,7 +81,7 @@
<item msgid="3304843301758635896">"Tắt codec tùy chọn"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
+ <item msgid="5062108632402595000">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
<item msgid="6898329690939802290">"SBC"</item>
<item msgid="6839647709301342559">"AAC"</item>
<item msgid="7848030269621918608">"Âm thanh <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
@@ -91,38 +91,38 @@
<item msgid="741805482892725657">"Tắt codec tùy chọn"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="3093023430402746802">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
+ <item msgid="3093023430402746802">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
<item msgid="2909915718994807056">"48,0 kHz"</item>
<item msgid="3347287377354164611">"88,2 kHz"</item>
<item msgid="1234212100239985373">"96,0 kHz"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="3214516120190965356">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
+ <item msgid="3214516120190965356">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
<item msgid="4482862757811638365">"44,1 kHz"</item>
<item msgid="354495328188724404">"48,0 kHz"</item>
<item msgid="7329816882213695083">"88,2 kHz"</item>
<item msgid="6967397666254430476">"96,0 kHz"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="2684127272582591429">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
+ <item msgid="2684127272582591429">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
<item msgid="5618929009984956469">"16 bit/mẫu"</item>
<item msgid="3412640499234627248">"24 bit/mẫu"</item>
<item msgid="121583001492929387">"32 bit/mẫu"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="1081159789834584363">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
+ <item msgid="1081159789834584363">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
<item msgid="4726688794884191540">"16 bit/mẫu"</item>
<item msgid="305344756485516870">"24 bit/mẫu"</item>
<item msgid="244568657919675099">"32 bit/mẫu"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="5226878858503393706">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
+ <item msgid="5226878858503393706">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
<item msgid="4106832974775067314">"Đơn âm"</item>
<item msgid="5571632958424639155">"Âm thanh nổi"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="4118561796005528173">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
+ <item msgid="4118561796005528173">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
<item msgid="8900559293912978337">"Đơn âm"</item>
<item msgid="8883739882299884241">"Âm thanh nổi"</item>
</string-array>
@@ -154,11 +154,11 @@
</string-array>
<string-array name="select_logd_size_summaries">
<item msgid="6921048829791179331">"Tắt"</item>
- <item msgid="2969458029344750262">"64K/lần tải nhật ký"</item>
- <item msgid="1342285115665698168">"256K/lần tải nhật ký"</item>
- <item msgid="1314234299552254621">"1M/lần tải nhật ký"</item>
- <item msgid="3606047780792894151">"4M/lần tải nhật ký"</item>
- <item msgid="5431354956856655120">"16M/lần tải nhật ký"</item>
+ <item msgid="2969458029344750262">"64K mỗi bộ đệm nhật ký"</item>
+ <item msgid="1342285115665698168">"256K mỗi bộ đệm nhật ký"</item>
+ <item msgid="1314234299552254621">"1M mỗi bộ đệm nhật ký"</item>
+ <item msgid="3606047780792894151">"4M mỗi bộ đệm nhật ký"</item>
+ <item msgid="5431354956856655120">"16M mỗi bộ đệm nhật ký"</item>
</string-array>
<string-array name="select_logpersist_titles">
<item msgid="1744840221860799971">"Tắt"</item>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index f4cdc5e..ed0c928 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -213,8 +213,8 @@
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Tăng tốc phần cứng cho chia sẻ kết nối"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Hiển thị các thiết bị Bluetooth không có tên"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Vô hiệu hóa âm lượng tuyệt đối"</string>
- <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth phiên bản AVRCP"</string>
- <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Chọn Bluetooth phiên bản AVRCP"</string>
+ <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Phiên bản Bluetooth AVRCP"</string>
+ <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Chọn phiên bản Bluetooth AVRCP"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec âm thanh Bluetooth"</string>
<string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="8436224899475822557">"Kích hoạt chế độ chọn codec\nâm thanh Bluetooth"</string>
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Tốc độ lấy mẫu âm thanh Bluetooth"</string>
@@ -238,11 +238,11 @@
<string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Lựa chọn ngẫu nhiên địa chỉ MAC khi kết nối với mạng Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Đo lượng dữ liệu"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Không đo lượng dữ liệu"</string>
- <string name="select_logd_size_title" msgid="7433137108348553508">"Kích cỡ tải trình ghi"</string>
- <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Chọn kích thước Trình ghi/lần tải nhật ký"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Kích thước bộ đệm của trình ghi nhật ký"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Chọn kích thước Trình ghi nhật ký trên mỗi bộ đệm nhật ký"</string>
<string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Xóa bộ nhớ ổn định trong trình ghi nhật ký?"</string>
<string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Khi chúng tôi không còn theo dõi bằng trình ghi nhật ký ổn định nữa, chúng tôi sẽ được yêu cầu xóa dữ liệu trong trình ghi nhật ký nằm trên thiết bị của bạn."</string>
- <string name="select_logpersist_title" msgid="7530031344550073166">"Lưu dữ liệu trình ghi nhật ký ổn định"</string>
+ <string name="select_logpersist_title" msgid="7530031344550073166">"Liên tục lưu dữ liệu của trình ghi nhật ký"</string>
<string name="select_logpersist_dialog_title" msgid="4003400579973269060">"Chọn lần tải nhật ký để lưu trữ ổn định trên thiết bị"</string>
<string name="select_usb_configuration_title" msgid="2649938511506971843">"Chọn cấu hình USB"</string>
<string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Chọn cấu hình USB"</string>
@@ -278,7 +278,7 @@
<string name="media_category" msgid="4388305075496848353">"Phương tiện"</string>
<string name="debug_monitoring_category" msgid="7640508148375798343">"Giám sát"</string>
<string name="strict_mode" msgid="1938795874357830695">"Đã bật chế độ nghiêm ngặt"</string>
- <string name="strict_mode_summary" msgid="142834318897332338">"Màn hình flash khi ứng dụng thực hiện các hoạt động dài trên chuỗi chính"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Màn hình nháy khi ứng dụng thực hiện các hoạt động dài trên luồng chính"</string>
<string name="pointer_location" msgid="6084434787496938001">"Vị trí con trỏ"</string>
<string name="pointer_location_summary" msgid="840819275172753713">"Lớp phủ màn hình hiển thị dữ liệu chạm hiện tại"</string>
<string name="show_touches" msgid="2642976305235070316">"Hiển thị số lần nhấn"</string>
@@ -287,10 +287,10 @@
<string name="show_screen_updates_summary" msgid="2569622766672785529">"Chuyển nhanh toàn bộ các giao diện cửa sổ khi các giao diện này cập nhật"</string>
<string name="show_hw_screen_updates" msgid="5036904558145941590">"Hiện cập nhật giao diện GPU"</string>
<string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Chuyển nhanh chế độ xem trong cửa sổ khi được vẽ bằng GPU"</string>
- <string name="show_hw_layers_updates" msgid="5645728765605699821">"Hiện c.nhật lớp phần cứng"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Hiện bản cập nhật lớp phần cứng"</string>
<string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Lớp phần cứng flash có màu xanh khi chúng cập nhật"</string>
- <string name="debug_hw_overdraw" msgid="2968692419951565417">"Hiển thị mức vẽ quá GPU"</string>
- <string name="disable_overlays" msgid="2074488440505934665">"Vô hiệu hóa các lớp phủ HW"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Gỡ lỗi mức vẽ quá GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Tắt các lớp phủ phần cứng"</string>
<string name="disable_overlays_summary" msgid="3578941133710758592">"Luôn sử dụng GPU để tổng hợp màn hình"</string>
<string name="simulate_color_space" msgid="6745847141353345872">"Mô phỏng không gian màu"</string>
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"Bật theo dõi OpenGL"</string>
@@ -304,26 +304,26 @@
<string name="force_hw_ui_summary" msgid="5535991166074861515">"Bắt buộc sử dụng GPU cho bản vẽ 2d"</string>
<string name="force_msaa" msgid="7920323238677284387">"Bắt buộc 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9123553203895817537">"Bật 4x MSAA trong ứng dụng OpenGL ES 2.0"</string>
- <string name="show_non_rect_clip" msgid="505954950474595172">"Gỡ lỗi h.động của clip khác hình chữ nhật"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Gỡ lỗi hoạt động của clip không phải là hình chữ nhật"</string>
<string name="track_frame_time" msgid="6146354853663863443">"Kết xuất GPU cấu hình"</string>
<string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Bật lớp gỡ lỗi GPU"</string>
<string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Cho phép tải lớp gỡ lỗi GPU cho ứng dụng gỡ lỗi"</string>
<string name="window_animation_scale_title" msgid="6162587588166114700">"Tỷ lệ hình động của cửa sổ"</string>
<string name="transition_animation_scale_title" msgid="387527540523595875">"Tỷ lệ hình động chuyển tiếp"</string>
- <string name="animator_duration_scale_title" msgid="3406722410819934083">"Tỷ lệ thời lượng"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Tỷ lệ thời lượng của trình tạo hình động"</string>
<string name="overlay_display_devices_title" msgid="5364176287998398539">"Mô phỏng màn hình phụ"</string>
<string name="debug_applications_category" msgid="4206913653849771549">"Ứng dụng"</string>
<string name="immediately_destroy_activities" msgid="1579659389568133959">"Không lưu hoạt động"</string>
<string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Hủy mọi hoạt động ngay khi người dùng rời khỏi"</string>
<string name="app_process_limit_title" msgid="4280600650253107163">"Giới hạn quá trình nền"</string>
<string name="show_all_anrs" msgid="4924885492787069007">"Hiển thị ANR nền"</string>
- <string name="show_all_anrs_summary" msgid="6636514318275139826">"Hiện hộp thoại Ứng dụng không đáp ứng cho ứng dụng nền"</string>
- <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Hiện cảnh báo kênh th.báo"</string>
- <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Hiện cảnh báo trên m.hình khi ƯD đăng th.báo ko có kênh hợp lệ"</string>
+ <string name="show_all_anrs_summary" msgid="6636514318275139826">"Hiện hộp thoại Ứng dụng không phản hồi cho các ứng dụng nền"</string>
+ <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Hiện cảnh báo kênh thông báo"</string>
+ <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Hiện cảnh báo trên màn hình khi ứng dụng đăng thông báo mà không có kênh hợp lệ"</string>
<string name="force_allow_on_external" msgid="3215759785081916381">"Buộc cho phép các ứng dụng trên bộ nhớ ngoài"</string>
- <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Giúp mọi ứng dụng đủ điều kiện để được ghi vào bộ nhớ ngoài, bất kể giá trị tệp kê khai là gì"</string>
+ <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Cho phép ghi mọi ứng dụng đủ điều kiện vào bộ nhớ ngoài, bất kể giá trị tệp kê khai là gì"</string>
<string name="force_resizable_activities" msgid="8615764378147824985">"Buộc các hoạt động có thể thay đổi kích thước"</string>
- <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Giúp tất cả hoạt động có thể thay đổi kích thước cho nhiều cửa sổ bất kể giá trị tệp kê khai là gì."</string>
+ <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Cho phép thay đổi kích thước của tất cả các hoạt động cho nhiều cửa sổ, bất kể giá trị tệp kê khai là gì."</string>
<string name="enable_freeform_support" msgid="1461893351278940416">"Bật cửa sổ dạng tự do"</string>
<string name="enable_freeform_support_summary" msgid="8247310463288834487">"Bật tính năng hỗ trợ cửa sổ dạng tự do thử nghiệm."</string>
<string name="local_backup_password_title" msgid="3860471654439418822">"Mật khẩu sao lưu của máy tính"</string>
@@ -346,8 +346,8 @@
<string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Không hoạt động. Nhấn để chuyển đổi."</string>
<string name="inactive_app_active_summary" msgid="4174921824958516106">"Hiện hoạt. Nhấn để chuyển đổi."</string>
<string name="standby_bucket_summary" msgid="6567835350910684727">"Trạng thái chờ ứng dụng:<xliff:g id="BUCKET"> %s</xliff:g>"</string>
- <string name="runningservices_settings_title" msgid="8097287939865165213">"Các dịch vụ đang hoạt động"</string>
- <string name="runningservices_settings_summary" msgid="854608995821032748">"Xem và kiểm soát các dịch vụ hiện đang hoạt động"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Các dịch vụ đang chạy"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Xem và kiểm soát các dịch vụ đang chạy"</string>
<string name="select_webview_provider_title" msgid="4628592979751918907">"Triển khai WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Đặt triển khai WebView"</string>
<string name="select_webview_provider_toast_text" msgid="5466970498308266359">"Lựa chọn này không còn hợp lệ nữa. Hãy thử lại."</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 23edaee..df81769 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -363,7 +363,7 @@
<string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"全色盲"</string>
<string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"绿色弱视(红绿不分)"</string>
<string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"红色弱视(红绿不分)"</string>
- <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"蓝色弱视(蓝黄色)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"蓝色弱视(蓝黄不分)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"色彩校正"</string>
<string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"这是实验性功能,性能可能不稳定。"</string>
<string name="daltonizer_type_overridden" msgid="3116947244410245916">"已被“<xliff:g id="TITLE">%1$s</xliff:g>”覆盖"</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
index 06fe4de..fb268ab 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
@@ -272,6 +272,14 @@
}
}
+ void dispatchDeviceRemoved(CachedBluetoothDevice cachedDevice) {
+ synchronized (mCallbacks) {
+ for (BluetoothCallback callback : mCallbacks) {
+ callback.onDeviceDeleted(cachedDevice);
+ }
+ }
+ }
+
private class DeviceDisappearedHandler implements Handler {
public void onReceive(Context context, Intent intent,
BluetoothDevice device) {
@@ -331,6 +339,10 @@
cachedDevice.onBondingStateChanged(bondState);
if (bondState == BluetoothDevice.BOND_NONE) {
+ /* Check if we need to remove other Hearing Aid devices */
+ if (cachedDevice.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID) {
+ mDeviceManager.onDeviceUnpaired(cachedDevice);
+ }
int reason = intent.getIntExtra(BluetoothDevice.EXTRA_REASON,
BluetoothDevice.ERROR);
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
index dc2ecea..62856e4 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
@@ -18,6 +18,7 @@
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothHearingAid;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothUuid;
import android.content.Context;
@@ -53,6 +54,7 @@
private final BluetoothDevice mDevice;
//TODO: consider remove, BluetoothDevice.getName() is already cached
private String mName;
+ private long mHiSyncId;
// Need this since there is no method for getting RSSI
private short mRssi;
//TODO: consider remove, BluetoothDevice.getBluetoothClass() is already cached
@@ -94,6 +96,17 @@
*/
private boolean mIsConnectingErrorPossible;
+ public long getHiSyncId() {
+ return mHiSyncId;
+ }
+
+ public void setHiSyncId(long id) {
+ if (Utils.D) {
+ Log.d(TAG, "setHiSyncId: mDevice " + mDevice + ", id " + id);
+ }
+ mHiSyncId = id;
+ }
+
/**
* Last time a bt profile auto-connect was attempted.
* If an ACTION_UUID intent comes in within
@@ -175,6 +188,7 @@
mDevice = device;
mProfileConnectionState = new HashMap<LocalBluetoothProfile, Integer>();
fillData();
+ mHiSyncId = BluetoothHearingAid.HI_SYNC_ID_INVALID;
}
public void disconnect() {
@@ -336,7 +350,7 @@
}
} else if (Utils.V) {
Log.v(TAG, "Framework rejected command immediately:REMOVE_BOND " +
- describe(null));
+ describe(null));
}
}
}
@@ -1065,4 +1079,20 @@
return getBondState() == BluetoothDevice.BOND_BONDING ?
mContext.getString(R.string.bluetooth_pairing) : null;
}
+
+ /**
+ * @return {@code true} if {@code cachedBluetoothDevice} is a2dp device
+ */
+ public boolean isA2dpDevice() {
+ return mProfileManager.getA2dpProfile().getConnectionStatus(mDevice) ==
+ BluetoothProfile.STATE_CONNECTED;
+ }
+
+ /**
+ * @return {@code true} if {@code cachedBluetoothDevice} is HFP device
+ */
+ public boolean isHfpDevice() {
+ return mProfileManager.getHeadsetProfile().getConnectionStatus(mDevice) ==
+ BluetoothProfile.STATE_CONNECTED;
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java
index a8e0039..50c6aac 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java
@@ -18,12 +18,17 @@
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothHearingAid;
import android.content.Context;
import android.util.Log;
+import com.android.internal.annotations.VisibleForTesting;
+
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
/**
@@ -34,10 +39,20 @@
private static final boolean DEBUG = Utils.D;
private Context mContext;
- private final List<CachedBluetoothDevice> mCachedDevices =
- new ArrayList<CachedBluetoothDevice>();
private final LocalBluetoothManager mBtManager;
+ @VisibleForTesting
+ final List<CachedBluetoothDevice> mCachedDevices =
+ new ArrayList<CachedBluetoothDevice>();
+ // Contains the list of hearing aid devices that should not be shown in the UI.
+ @VisibleForTesting
+ final List<CachedBluetoothDevice> mHearingAidDevicesNotAddedInCache
+ = new ArrayList<CachedBluetoothDevice>();
+ // Maintains a list of devices which are added in mCachedDevices and have hiSyncIds.
+ @VisibleForTesting
+ final Map<Long, CachedBluetoothDevice> mCachedDevicesMapForHearingAids
+ = new HashMap<Long, CachedBluetoothDevice>();
+
CachedBluetoothDeviceManager(Context context, LocalBluetoothManager localBtManager) {
mContext = context;
mBtManager = localBtManager;
@@ -69,12 +84,17 @@
* @return the cached device object for this device, or null if it has
* not been previously seen
*/
- public CachedBluetoothDevice findDevice(BluetoothDevice device) {
+ public synchronized CachedBluetoothDevice findDevice(BluetoothDevice device) {
for (CachedBluetoothDevice cachedDevice : mCachedDevices) {
if (cachedDevice.getDevice().equals(device)) {
return cachedDevice;
}
}
+ for (CachedBluetoothDevice notCachedDevice : mHearingAidDevicesNotAddedInCache) {
+ if (notCachedDevice.getDevice().equals(device)) {
+ return notCachedDevice;
+ }
+ }
return null;
}
@@ -89,14 +109,103 @@
BluetoothDevice device) {
CachedBluetoothDevice newDevice = new CachedBluetoothDevice(mContext, adapter,
profileManager, device);
- synchronized (mCachedDevices) {
- mCachedDevices.add(newDevice);
- mBtManager.getEventManager().dispatchDeviceAdded(newDevice);
+ if (profileManager.getHearingAidProfile() != null
+ && profileManager.getHearingAidProfile().getHiSyncId(newDevice.getDevice())
+ != BluetoothHearingAid.HI_SYNC_ID_INVALID) {
+ newDevice.setHiSyncId(profileManager.getHearingAidProfile()
+ .getHiSyncId(newDevice.getDevice()));
}
+ // Just add one of the hearing aids from a pair in the list that is shown in the UI.
+ if (isPairAddedInCache(newDevice.getHiSyncId())) {
+ synchronized (this) {
+ mHearingAidDevicesNotAddedInCache.add(newDevice);
+ }
+ } else {
+ synchronized (this) {
+ mCachedDevices.add(newDevice);
+ if (newDevice.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID
+ && !mCachedDevicesMapForHearingAids.containsKey(newDevice.getHiSyncId())) {
+ mCachedDevicesMapForHearingAids.put(newDevice.getHiSyncId(), newDevice);
+ }
+ mBtManager.getEventManager().dispatchDeviceAdded(newDevice);
+ }
+ }
+
return newDevice;
}
/**
+ * Returns true if the one of the two hearing aid devices is already cached for UI.
+ *
+ * @param long hiSyncId
+ * @return {@code True} if one of the two hearing aid devices is is already cached for UI.
+ */
+ private synchronized boolean isPairAddedInCache(long hiSyncId) {
+ if (hiSyncId == BluetoothHearingAid.HI_SYNC_ID_INVALID) {
+ return false;
+ }
+ if(mCachedDevicesMapForHearingAids.containsKey(hiSyncId)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Returns device summary of the pair of the hearing aid passed as the parameter.
+ *
+ * @param CachedBluetoothDevice device
+ * @return Device summary, or if the pair does not exist or if its not a hearing aid,
+ * then {@code null}.
+ */
+ public synchronized String getHearingAidPairDeviceSummary(CachedBluetoothDevice device) {
+ String pairDeviceSummary = null;
+ if (device.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID) {
+ for (CachedBluetoothDevice hearingAidDevice : mHearingAidDevicesNotAddedInCache) {
+ if (hearingAidDevice.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID
+ && hearingAidDevice.getHiSyncId() == device.getHiSyncId()) {
+ pairDeviceSummary = hearingAidDevice.getConnectionSummary();
+ }
+ }
+ }
+ return pairDeviceSummary;
+ }
+
+ /**
+ * Adds the 2nd hearing aid in a pair in a list that maintains the hearing aids that are
+ * not dispalyed in the UI.
+ *
+ * @param CachedBluetoothDevice device
+ */
+ public synchronized void addDeviceNotaddedInMap(CachedBluetoothDevice device) {
+ mHearingAidDevicesNotAddedInCache.add(device);
+ }
+
+ /**
+ * Updates the Hearing Aid devices; specifically the HiSyncId's. This routine is called when the
+ * Hearing Aid Service is connected and the HiSyncId's are now available.
+ * @param LocalBluetoothProfileManager profileManager
+ */
+ public synchronized void updateHearingAidsDevices(LocalBluetoothProfileManager profileManager) {
+ HearingAidProfile profileProxy = profileManager.getHearingAidProfile();
+ if (profileProxy == null) {
+ log("updateHearingAidsDevices: getHearingAidProfile() is null");
+ return;
+ }
+ for (CachedBluetoothDevice cachedDevice : mCachedDevices) {
+ if (cachedDevice.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID) {
+ continue;
+ }
+
+ long newHiSyncId = profileProxy.getHiSyncId(cachedDevice.getDevice());
+
+ if (newHiSyncId != BluetoothHearingAid.HI_SYNC_ID_INVALID) {
+ cachedDevice.setHiSyncId(newHiSyncId);
+ onHiSyncIdChanged(newHiSyncId);
+ }
+ }
+ }
+
+ /**
* Attempts to get the name of a remote device, otherwise returns the address.
*
* @param device The remote device.
@@ -117,23 +226,29 @@
}
public synchronized void clearNonBondedDevices() {
- for (int i = mCachedDevices.size() - 1; i >= 0; i--) {
- CachedBluetoothDevice cachedDevice = mCachedDevices.get(i);
- if (cachedDevice.getBondState() == BluetoothDevice.BOND_NONE) {
- mCachedDevices.remove(i);
- }
- }
+
+ mCachedDevicesMapForHearingAids.entrySet().removeIf(entries
+ -> entries.getValue().getBondState() == BluetoothDevice.BOND_NONE);
+
+ mCachedDevices.removeIf(cachedDevice
+ -> cachedDevice.getBondState() == BluetoothDevice.BOND_NONE);
+
+ mHearingAidDevicesNotAddedInCache.removeIf(hearingAidDevice
+ -> hearingAidDevice.getBondState() == BluetoothDevice.BOND_NONE);
}
public synchronized void onScanningStateChanged(boolean started) {
if (!started) return;
-
// If starting a new scan, clear old visibility
// Iterate in reverse order since devices may be removed.
for (int i = mCachedDevices.size() - 1; i >= 0; i--) {
CachedBluetoothDevice cachedDevice = mCachedDevices.get(i);
cachedDevice.setJustDiscovered(false);
}
+ for (int i = mHearingAidDevicesNotAddedInCache.size() - 1; i >= 0; i--) {
+ CachedBluetoothDevice notCachedDevice = mHearingAidDevicesNotAddedInCache.get(i);
+ notCachedDevice.setJustDiscovered(false);
+ }
}
public synchronized void onBtClassChanged(BluetoothDevice device) {
@@ -159,6 +274,11 @@
if (cachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) {
cachedDevice.setJustDiscovered(false);
mCachedDevices.remove(i);
+ if (cachedDevice.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID
+ && mCachedDevicesMapForHearingAids.containsKey(cachedDevice.getHiSyncId()))
+ {
+ mCachedDevicesMapForHearingAids.remove(cachedDevice.getHiSyncId());
+ }
} else {
// For bonded devices, we need to clear the connection status so that
// when BT is enabled next time, device connection status shall be retrieved
@@ -166,6 +286,18 @@
cachedDevice.clearProfileConnectionState();
}
}
+ for (int i = mHearingAidDevicesNotAddedInCache.size() - 1; i >= 0; i--) {
+ CachedBluetoothDevice notCachedDevice = mHearingAidDevicesNotAddedInCache.get(i);
+ if (notCachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) {
+ notCachedDevice.setJustDiscovered(false);
+ mHearingAidDevicesNotAddedInCache.remove(i);
+ } else {
+ // For bonded devices, we need to clear the connection status so that
+ // when BT is enabled next time, device connection status shall be retrieved
+ // by making a binder call.
+ notCachedDevice.clearProfileConnectionState();
+ }
+ }
}
}
@@ -177,6 +309,49 @@
}
}
+ public synchronized void onHiSyncIdChanged(long hiSyncId) {
+ int firstMatchedIndex = -1;
+
+ for (int i = mCachedDevices.size() - 1; i >= 0; i--) {
+ CachedBluetoothDevice cachedDevice = mCachedDevices.get(i);
+ if (cachedDevice.getHiSyncId() == hiSyncId) {
+ if (firstMatchedIndex != -1) {
+ /* Found the second one */
+ mCachedDevices.remove(i);
+ mHearingAidDevicesNotAddedInCache.add(cachedDevice);
+ // Since the hiSyncIds have been updated for a connected pair of hearing aids,
+ // we remove the entry of one the hearing aids from the UI. Unless the
+ // hiSyncId get updated, the system does not know its a hearing aid, so we add
+ // both the hearing aids as separate entries in the UI first, then remove one
+ // of them after the hiSyncId is populated.
+ log("onHiSyncIdChanged: removed device=" + cachedDevice + ", with hiSyncId="
+ + hiSyncId);
+ mBtManager.getEventManager().dispatchDeviceRemoved(cachedDevice);
+ break;
+ } else {
+ mCachedDevicesMapForHearingAids.put(hiSyncId, cachedDevice);
+ firstMatchedIndex = i;
+ }
+ }
+ }
+ }
+
+ public synchronized void onDeviceUnpaired(CachedBluetoothDevice device) {
+ final long hiSyncId = device.getHiSyncId();
+
+ if (hiSyncId == BluetoothHearingAid.HI_SYNC_ID_INVALID) return;
+
+ for (int i = mHearingAidDevicesNotAddedInCache.size() - 1; i >= 0; i--) {
+ CachedBluetoothDevice cachedDevice = mHearingAidDevicesNotAddedInCache.get(i);
+ if (cachedDevice.getHiSyncId() == hiSyncId) {
+ // TODO: Look for more cleanups on unpairing the device.
+ mHearingAidDevicesNotAddedInCache.remove(i);
+ if (device == cachedDevice) continue;
+ cachedDevice.unpair();
+ }
+ }
+ }
+
private void log(String msg) {
if (DEBUG) {
Log.d(TAG, msg);
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java
index f9f80eb..ad81336 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java
@@ -168,6 +168,11 @@
return mService.isAudioOn();
}
+ public int getAudioState(BluetoothDevice device) {
+ if (mService == null) return BluetoothHeadset.STATE_AUDIO_DISCONNECTED;
+ return mService.getAudioState(device);
+ }
+
public boolean isPreferred(BluetoothDevice device) {
if (mService == null) return false;
return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF;
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java
index 6c5ecbf..da2ae7f 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java
@@ -67,12 +67,19 @@
CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice);
// we may add a new device here, but generally this should not happen
if (device == null) {
- Log.w(TAG, "HearingAidProfile found new device: " + nextDevice);
+ if (V) {
+ Log.d(TAG, "HearingAidProfile found new device: " + nextDevice);
+ }
device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice);
}
- device.onProfileStateChanged(HearingAidProfile.this, BluetoothProfile.STATE_CONNECTED);
+ device.onProfileStateChanged(HearingAidProfile.this,
+ BluetoothProfile.STATE_CONNECTED);
device.refresh();
}
+
+ // Check current list of CachedDevices to see if any are Hearing Aid devices.
+ mDeviceManager.updateHearingAidsDevices(mProfileManager);
+
mIsProfileReady=true;
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
index 1e0cce9..11854b1 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
@@ -354,6 +354,22 @@
oldState == BluetoothProfile.STATE_CONNECTING) {
Log.i(TAG, "Failed to connect " + mProfile + " device");
}
+
+ if (getHearingAidProfile() != null &&
+ mProfile instanceof HearingAidProfile &&
+ (newState == BluetoothProfile.STATE_CONNECTED)) {
+ // Check if the HiSyncID has being initialized
+ if (cachedDevice.getHiSyncId() == BluetoothHearingAid.HI_SYNC_ID_INVALID) {
+
+ long newHiSyncId = getHearingAidProfile().getHiSyncId(cachedDevice.getDevice());
+
+ if (newHiSyncId != BluetoothHearingAid.HI_SYNC_ID_INVALID) {
+ cachedDevice.setHiSyncId(newHiSyncId);
+ mDeviceManager.onHiSyncIdChanged(newHiSyncId);
+ }
+ }
+ }
+
cachedDevice.onProfileStateChanged(mProfile, newState);
cachedDevice.refresh();
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java b/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java
index a0b27fd..54a1af4 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java
@@ -25,6 +25,7 @@
// Top level category.
public static final String CATEGORY_NETWORK = "com.android.settings.category.ia.wireless";
+ public static final String CATEGORY_CONNECT = "com.android.settings.category.ia.connect";
public static final String CATEGORY_DEVICE = "com.android.settings.category.ia.device";
public static final String CATEGORY_APPS = "com.android.settings.category.ia.apps";
public static final String CATEGORY_APPS_DEFAULT =
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java
index 2f5eead..c3bd161 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java
@@ -48,10 +48,18 @@
public class CachedBluetoothDeviceManagerTest {
private final static String DEVICE_NAME_1 = "TestName_1";
private final static String DEVICE_NAME_2 = "TestName_2";
+ private final static String DEVICE_NAME_3 = "TestName_3";
private final static String DEVICE_ALIAS_1 = "TestAlias_1";
private final static String DEVICE_ALIAS_2 = "TestAlias_2";
+ private final static String DEVICE_ALIAS_3 = "TestAlias_3";
private final static String DEVICE_ADDRESS_1 = "AA:BB:CC:DD:EE:11";
private final static String DEVICE_ADDRESS_2 = "AA:BB:CC:DD:EE:22";
+ private final static String DEVICE_ADDRESS_3 = "AA:BB:CC:DD:EE:33";
+ private final static String DEVICE_SUMMARY_1 = "summary 1";
+ private final static String DEVICE_SUMMARY_2 = "summary 2";
+ private final static String DEVICE_SUMMARY_3 = "summary 3";
+ private final static long HISYNCID1 = 10;
+ private final static long HISYNCID2 = 11;
private final BluetoothClass DEVICE_CLASS_1 =
new BluetoothClass(BluetoothClass.Device.AUDIO_VIDEO_HEADPHONES);
private final BluetoothClass DEVICE_CLASS_2 =
@@ -76,6 +84,11 @@
private BluetoothDevice mDevice1;
@Mock
private BluetoothDevice mDevice2;
+ @Mock
+ private BluetoothDevice mDevice3;
+ private CachedBluetoothDevice mCachedDevice1;
+ private CachedBluetoothDevice mCachedDevice2;
+ private CachedBluetoothDevice mCachedDevice3;
private CachedBluetoothDeviceManager mCachedDeviceManager;
private Context mContext;
private String[] mActiveDeviceStringsArray;
@@ -90,12 +103,16 @@
mContext = RuntimeEnvironment.application;
when(mDevice1.getAddress()).thenReturn(DEVICE_ADDRESS_1);
when(mDevice2.getAddress()).thenReturn(DEVICE_ADDRESS_2);
+ when(mDevice3.getAddress()).thenReturn(DEVICE_ADDRESS_3);
when(mDevice1.getName()).thenReturn(DEVICE_NAME_1);
when(mDevice2.getName()).thenReturn(DEVICE_NAME_2);
+ when(mDevice3.getName()).thenReturn(DEVICE_NAME_3);
when(mDevice1.getAliasName()).thenReturn(DEVICE_ALIAS_1);
when(mDevice2.getAliasName()).thenReturn(DEVICE_ALIAS_2);
+ when(mDevice3.getAliasName()).thenReturn(DEVICE_ALIAS_3);
when(mDevice1.getBluetoothClass()).thenReturn(DEVICE_CLASS_1);
when(mDevice2.getBluetoothClass()).thenReturn(DEVICE_CLASS_2);
+ when(mDevice3.getBluetoothClass()).thenReturn(DEVICE_CLASS_2);
when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager);
when(mLocalAdapter.getBluetoothState()).thenReturn(BluetoothAdapter.STATE_ON);
@@ -104,6 +121,12 @@
when(mPanProfile.isProfileReady()).thenReturn(true);
when(mHearingAidProfile.isProfileReady()).thenReturn(true);
mCachedDeviceManager = new CachedBluetoothDeviceManager(mContext, mLocalBluetoothManager);
+ mCachedDevice1 = spy(
+ new CachedBluetoothDevice(mContext, mLocalAdapter, mLocalProfileManager, mDevice1));
+ mCachedDevice2 = spy(
+ new CachedBluetoothDevice(mContext, mLocalAdapter, mLocalProfileManager, mDevice2));
+ mCachedDevice3 = spy(
+ new CachedBluetoothDevice(mContext, mLocalAdapter, mLocalProfileManager, mDevice3));
}
/**
@@ -188,6 +211,289 @@
}
/**
+ * Test to verify clearNonBondedDevices() for hearing aids.
+ */
+ @Test
+ public void testClearNonBondedDevices_HearingAids_nonBondedHAsClearedFromCachedDevicesMap() {
+ when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+ when(mDevice2.getBondState()).thenReturn(BluetoothDevice.BOND_NONE);
+
+ mCachedDevice1.setHiSyncId(HISYNCID1);
+ mCachedDevice2.setHiSyncId(HISYNCID2);
+ mCachedDeviceManager.mCachedDevicesMapForHearingAids.put(HISYNCID1, mCachedDevice1);
+ mCachedDeviceManager.mCachedDevicesMapForHearingAids.put(HISYNCID2, mCachedDevice2);
+
+ mCachedDeviceManager.clearNonBondedDevices();
+
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values())
+ .doesNotContain(mCachedDevice2);
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values())
+ .contains(mCachedDevice1);
+ }
+
+ /**
+ * Test to verify onHiSyncIdChanged() for hearing aid devices with same HiSyncId.
+ */
+ @Test
+ public void testOnDeviceAdded_sameHiSyncId_populateInDifferentLists() {
+ CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice1);
+ assertThat(cachedDevice1).isNotNull();
+ CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice2);
+ assertThat(cachedDevice2).isNotNull();
+
+ // Since both devices do not have hiSyncId, they should be added in mCachedDevices.
+ assertThat(mCachedDeviceManager.getCachedDevicesCopy()).hasSize(2);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).isEmpty();
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids).isEmpty();
+
+ cachedDevice1.setHiSyncId(HISYNCID1);
+ cachedDevice2.setHiSyncId(HISYNCID1);
+ mCachedDeviceManager.onHiSyncIdChanged(HISYNCID1);
+
+ // Since both devices have the same hiSyncId, one should remain in mCachedDevices
+ // and the other should be removed from mCachedDevices and get added in
+ // mHearingAidDevicesNotAddedInCache. The one that is in mCachedDevices should also be
+ // added in mCachedDevicesMapForHearingAids.
+ assertThat(mCachedDeviceManager.getCachedDevicesCopy()).hasSize(1);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).hasSize(1);
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids).hasSize(1);
+ Collection<CachedBluetoothDevice> devices = mCachedDeviceManager.getCachedDevicesCopy();
+ assertThat(devices).contains(cachedDevice2);
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values())
+ .contains(cachedDevice2);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).contains(cachedDevice1);
+ }
+
+ /**
+ * Test to verify onHiSyncIdChanged() for hearing aid devices with different HiSyncId.
+ */
+ @Test
+ public void testOnDeviceAdded_differentHiSyncId_populateInSameList() {
+ CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice1);
+ assertThat(cachedDevice1).isNotNull();
+ CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice2);
+ assertThat(cachedDevice2).isNotNull();
+
+ // Since both devices do not have hiSyncId, they should be added in mCachedDevices.
+ assertThat(mCachedDeviceManager.getCachedDevicesCopy()).hasSize(2);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).isEmpty();
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids).isEmpty();
+
+ cachedDevice1.setHiSyncId(HISYNCID1);
+ cachedDevice2.setHiSyncId(HISYNCID2);
+ mCachedDeviceManager.onHiSyncIdChanged(HISYNCID1);
+ mCachedDeviceManager.onHiSyncIdChanged(HISYNCID2);
+
+ // Since both devices do not have same hiSyncId, they should remain in mCachedDevices and
+ // also be added in mCachedDevicesMapForHearingAids.
+ assertThat(mCachedDeviceManager.getCachedDevicesCopy()).hasSize(2);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).isEmpty();
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids).hasSize(2);
+ Collection<CachedBluetoothDevice> devices = mCachedDeviceManager.getCachedDevicesCopy();
+ assertThat(devices).contains(cachedDevice2);
+ assertThat(devices).contains(cachedDevice1);
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values())
+ .contains(cachedDevice1);
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values())
+ .contains(cachedDevice2);
+ }
+
+ /**
+ * Test to verify OnDeviceUnpaired() for a paired hearing Aid device pair.
+ */
+ @Test
+ public void testOnDeviceUnpaired_bothHearingAidsPaired_removesItsPairFromList() {
+ CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice1);
+ assertThat(cachedDevice1).isNotNull();
+ CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice2);
+ assertThat(cachedDevice2).isNotNull();
+
+ cachedDevice1.setHiSyncId(HISYNCID1);
+ cachedDevice2.setHiSyncId(HISYNCID1);
+ mCachedDeviceManager.onHiSyncIdChanged(HISYNCID1);
+
+ // Check if one device is in mCachedDevices and one in mHearingAidDevicesNotAddedInCache.
+ Collection<CachedBluetoothDevice> devices = mCachedDeviceManager.getCachedDevicesCopy();
+ assertThat(devices).contains(cachedDevice2);
+ assertThat(devices).doesNotContain(cachedDevice1);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).contains(cachedDevice1);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache)
+ .doesNotContain(cachedDevice2);
+
+ // Call onDeviceUnpaired for the one in mCachedDevices.
+ mCachedDeviceManager.onDeviceUnpaired(cachedDevice2);
+
+ // Check if its pair is removed from mHearingAidDevicesNotAddedInCache.
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache)
+ .doesNotContain(cachedDevice1);
+ }
+
+ /**
+ * Test to verify OnDeviceUnpaired() for paired hearing Aid devices which are not a pair.
+ */
+ @Test
+ public void testOnDeviceUnpaired_bothHearingAidsNotPaired_doesNotRemoveAnyDeviceFromList() {
+ CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice1);
+ assertThat(cachedDevice1).isNotNull();
+ CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice2);
+ assertThat(cachedDevice2).isNotNull();
+ CachedBluetoothDevice cachedDevice3 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice3);
+ assertThat(cachedDevice2).isNotNull();
+
+ cachedDevice1.setHiSyncId(HISYNCID1);
+ cachedDevice2.setHiSyncId(HISYNCID1);
+ cachedDevice3.setHiSyncId(HISYNCID2);
+ mCachedDeviceManager.onHiSyncIdChanged(HISYNCID1);
+ mCachedDeviceManager.onHiSyncIdChanged(HISYNCID2);
+
+ // Check if one device is in mCachedDevices and one in mHearingAidDevicesNotAddedInCache.
+ Collection<CachedBluetoothDevice> devices = mCachedDeviceManager.getCachedDevicesCopy();
+ assertThat(devices).contains(cachedDevice2);
+ assertThat(devices).contains(cachedDevice3);
+ assertThat(devices).doesNotContain(cachedDevice1);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).contains(cachedDevice1);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache)
+ .doesNotContain(cachedDevice2);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache)
+ .doesNotContain(cachedDevice3);
+
+ // Call onDeviceUnpaired for the one in mCachedDevices with no pair.
+ mCachedDeviceManager.onDeviceUnpaired(cachedDevice3);
+
+ // Check if no list is changed.
+ devices = mCachedDeviceManager.getCachedDevicesCopy();
+ assertThat(devices).contains(cachedDevice2);
+ assertThat(devices).contains(cachedDevice3);
+ assertThat(devices).doesNotContain(cachedDevice1);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).contains(cachedDevice1);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache)
+ .doesNotContain(cachedDevice2);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache)
+ .doesNotContain(cachedDevice3);
+ }
+
+ /**
+ * Test to verify addDevice() for hearing aid devices with same HiSyncId.
+ */
+ @Test
+ public void testAddDevice_hearingAidDevicesWithSameHiSyncId_populateInDifferentLists() {
+ doAnswer((invocation) -> mHearingAidProfile).when(mLocalProfileManager)
+ .getHearingAidProfile();
+ doAnswer((invocation) -> HISYNCID1).when(mHearingAidProfile).getHiSyncId(mDevice1);
+ doAnswer((invocation) -> HISYNCID1).when(mHearingAidProfile).getHiSyncId(mDevice2);
+
+ CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice1);
+ assertThat(cachedDevice1).isNotNull();
+ // The first hearing aid device should be populated in mCachedDevice and
+ // mCachedDevicesMapForHearingAids.
+ assertThat(mCachedDeviceManager.getCachedDevicesCopy()).hasSize(1);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).isEmpty();
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids).hasSize(1);
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values())
+ .contains(cachedDevice1);
+
+ CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice2);
+ assertThat(cachedDevice2).isNotNull();
+ // The second hearing aid device should be populated in mHearingAidDevicesNotAddedInCache.
+ assertThat(mCachedDeviceManager.getCachedDevicesCopy()).hasSize(1);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).hasSize(1);
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids).hasSize(1);
+ }
+
+ /**
+ * Test to verify addDevice() for hearing aid devices with different HiSyncId.
+ */
+ @Test
+ public void testAddDevice_hearingAidDevicesWithDifferentHiSyncId_populateInSameList() {
+ doAnswer((invocation) -> mHearingAidProfile).when(mLocalProfileManager)
+ .getHearingAidProfile();
+ doAnswer((invocation) -> HISYNCID1).when(mHearingAidProfile).getHiSyncId(mDevice1);
+ doAnswer((invocation) -> HISYNCID2).when(mHearingAidProfile).getHiSyncId(mDevice2);
+ CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice1);
+ assertThat(cachedDevice1).isNotNull();
+ // The first hearing aid device should be populated in mCachedDevice and
+ // mCachedDevicesMapForHearingAids.
+ assertThat(mCachedDeviceManager.getCachedDevicesCopy()).hasSize(1);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).isEmpty();
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids).hasSize(1);
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values())
+ .contains(cachedDevice1);
+
+ CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter,
+ mLocalProfileManager, mDevice2);
+ assertThat(cachedDevice2).isNotNull();
+ // The second hearing aid device should also be populated in mCachedDevice
+ // and mCachedDevicesMapForHearingAids as its not a pair of the first one.
+ assertThat(mCachedDeviceManager.getCachedDevicesCopy()).hasSize(2);
+ assertThat(mCachedDeviceManager.mHearingAidDevicesNotAddedInCache).isEmpty();
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids).hasSize(2);
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values())
+ .contains(cachedDevice1);
+ assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values())
+ .contains(cachedDevice2);
+ }
+
+ /**
+ * Test to verify getHearingAidPairDeviceSummary() for hearing aid devices with same HiSyncId.
+ */
+ @Test
+ public void testGetHearingAidPairDeviceSummary_bothHearingAidsPaired_returnsSummaryOfPair() {
+ mCachedDevice1.setHiSyncId(HISYNCID1);
+ mCachedDevice2.setHiSyncId(HISYNCID1);
+ mCachedDeviceManager.mCachedDevices.add(mCachedDevice1);
+ mCachedDeviceManager.mHearingAidDevicesNotAddedInCache.add(mCachedDevice2);
+ doAnswer((invocation) -> DEVICE_SUMMARY_1).when(mCachedDevice1).getConnectionSummary();
+ doAnswer((invocation) -> DEVICE_SUMMARY_2).when(mCachedDevice2).getConnectionSummary();
+
+ assertThat(mCachedDeviceManager.getHearingAidPairDeviceSummary(mCachedDevice1))
+ .isEqualTo(DEVICE_SUMMARY_2);
+ }
+
+ /**
+ * Test to verify getHearingAidPairDeviceSummary() for hearing aid devices with different
+ * HiSyncId.
+ */
+ @Test
+ public void testGetHearingAidPairDeviceSummary_bothHearingAidsNotPaired_returnsNull() {
+ mCachedDevice1.setHiSyncId(HISYNCID1);
+ mCachedDevice2.setHiSyncId(HISYNCID2);
+ mCachedDeviceManager.mCachedDevices.add(mCachedDevice1);
+ mCachedDeviceManager.mHearingAidDevicesNotAddedInCache.add(mCachedDevice2);
+ doAnswer((invocation) -> DEVICE_SUMMARY_1).when(mCachedDevice1).getConnectionSummary();
+ doAnswer((invocation) -> DEVICE_SUMMARY_2).when(mCachedDevice2).getConnectionSummary();
+
+ assertThat(mCachedDeviceManager.getHearingAidPairDeviceSummary(mCachedDevice1))
+ .isEqualTo(null);
+ }
+
+ /**
+ * Test to verify updateHearingAidsDevices().
+ */
+ @Test
+ public void testUpdateHearingAidDevices_hiSyncIdAvailable_setsHiSyncId() {
+ doAnswer((invocation) -> mHearingAidProfile).when(mLocalProfileManager)
+ .getHearingAidProfile();
+ doAnswer((invocation) -> HISYNCID1).when(mHearingAidProfile).getHiSyncId(mDevice1);
+ mCachedDeviceManager.mCachedDevices.add(mCachedDevice1);
+ mCachedDeviceManager.updateHearingAidsDevices(mLocalProfileManager);
+
+ // Assert that the mCachedDevice1 has an updated HiSyncId.
+ assertThat(mCachedDevice1.getHiSyncId()).isEqualTo(HISYNCID1);
+ }
+
+ /**
* Test to verify onBtClassChanged().
*/
@Test
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
index 49f58a4..7863fc5 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
@@ -334,4 +334,40 @@
mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
assertThat(mCachedDevice.setActive()).isFalse();
}
+
+ @Test
+ public void testIsA2dpDevice_isA2dpDevice() {
+ when(mProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile);
+ when(mA2dpProfile.getConnectionStatus(mDevice)).
+ thenReturn(BluetoothProfile.STATE_CONNECTED);
+
+ assertThat(mCachedDevice.isA2dpDevice()).isTrue();
+ }
+
+ @Test
+ public void testIsA2dpDevice_isNotA2dpDevice() {
+ when(mProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile);
+ when(mA2dpProfile.getConnectionStatus(mDevice)).
+ thenReturn(BluetoothProfile.STATE_DISCONNECTING);
+
+ assertThat(mCachedDevice.isA2dpDevice()).isFalse();
+ }
+
+ @Test
+ public void testIsHfpDevice_isHfpDevice() {
+ when(mProfileManager.getHeadsetProfile()).thenReturn(mHfpProfile);
+ when(mHfpProfile.getConnectionStatus(mDevice)).
+ thenReturn(BluetoothProfile.STATE_CONNECTED);
+
+ assertThat(mCachedDevice.isHfpDevice()).isTrue();
+ }
+
+ @Test
+ public void testIsHfpDevice_isNotHfpDevice() {
+ when(mProfileManager.getHeadsetProfile()).thenReturn(mHfpProfile);
+ when(mHfpProfile.getConnectionStatus(mDevice)).
+ thenReturn(BluetoothProfile.STATE_DISCONNECTING);
+
+ assertThat(mCachedDevice.isHfpDevice()).isFalse();
+ }
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java
index 117f447..03b023b 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java
@@ -8,6 +8,7 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
+import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHeadset;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
@@ -31,7 +32,10 @@
private LocalBluetoothProfileManager mProfileManager;
@Mock
private BluetoothHeadset mService;
-
+ @Mock
+ private CachedBluetoothDevice mCachedBluetoothDevice;
+ @Mock
+ private BluetoothDevice mBluetoothDevice;
private BluetoothProfile.ServiceListener mServiceListener;
private HeadsetProfile mProfile;
@@ -44,6 +48,7 @@
mServiceListener = (BluetoothProfile.ServiceListener) invocation.getArguments()[1];
return null;
}).when(mAdapter).getProfileProxy(any(Context.class), any(), eq(BluetoothProfile.HEADSET));
+ when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
mProfile = new HeadsetProfile(context, mAdapter, mDeviceManager, mProfileManager);
mServiceListener.onServiceConnected(BluetoothProfile.HEADSET, mService);
@@ -57,4 +62,17 @@
when(mService.isAudioOn()).thenReturn(false);
assertThat(mProfile.isAudioOn()).isFalse();
}
+
+ @Test
+ public void testHeadsetProfile_shouldReturnAudioState() {
+ when(mService.getAudioState(mBluetoothDevice)).
+ thenReturn(BluetoothHeadset.STATE_AUDIO_DISCONNECTED);
+ assertThat(mProfile.getAudioState(mBluetoothDevice)).
+ isEqualTo(BluetoothHeadset.STATE_AUDIO_DISCONNECTED);
+
+ when(mService.getAudioState(mBluetoothDevice)).
+ thenReturn(BluetoothHeadset.STATE_AUDIO_CONNECTED);
+ assertThat(mProfile.getAudioState(mBluetoothDevice)).
+ isEqualTo(BluetoothHeadset.STATE_AUDIO_CONNECTED);
+ }
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java
index b90f37a..d12473e 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java
@@ -42,6 +42,7 @@
// DO NOT REMOVE ANYTHING BELOW
allKeys.add(CategoryKey.CATEGORY_HOMEPAGE);
+ allKeys.add(CategoryKey.CATEGORY_CONNECT);
allKeys.add(CategoryKey.CATEGORY_DEVICE);
allKeys.add(CategoryKey.CATEGORY_APPS);
allKeys.add(CategoryKey.CATEGORY_APPS_DEFAULT);
@@ -58,6 +59,6 @@
allKeys.add(CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
// DO NOT REMOVE ANYTHING ABOVE
- assertThat(allKeys.size()).isEqualTo(15);
+ assertThat(allKeys.size()).isEqualTo(16);
}
}
diff --git a/packages/Shell/res/values-kk/strings.xml b/packages/Shell/res/values-kk/strings.xml
index f75e47b..6ee1cc5 100644
--- a/packages/Shell/res/values-kk/strings.xml
+++ b/packages/Shell/res/values-kk/strings.xml
@@ -28,7 +28,7 @@
<string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"Қате туралы есепті скриншотсыз бөлісу үшін таңдаңыз немесе скриншот түсіріліп болғанша күтіңіз"</string>
<string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"Қате туралы есепті скриншотсыз бөлісу үшін түртіңіз немесе скриншот сақталып болғанша күтіңіз"</string>
<string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"Қате туралы есепті скриншотсыз бөлісу үшін түртіңіз немесе скриншот сақталып болғанша күтіңіз"</string>
- <string name="bugreport_confirm" msgid="5917407234515812495">"Қате туралы есептерде жүйенің әр түрлі журнал файлдарының деректері беріледі. Олар маңызды деректерді қамтуы мүмкін (мысалы, қолданбаны пайдалану және орналасқан жер деректері). Қате туралы есептерді тек сенімді адамдармен және қолданбалармен бөлісіңіз."</string>
+ <string name="bugreport_confirm" msgid="5917407234515812495">"Қате туралы есептерде жүйенің әртүрлі журнал файлдарының деректері беріледі. Олар маңызды деректерді қамтуы мүмкін (мысалы, қолданбаны пайдалану және орналасқан жер деректері). Қате туралы есептерді тек сенімді адамдармен және қолданбалармен бөлісіңіз."</string>
<string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"Қайтадан көрсетілмесін"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Қате туралы баяндамалар"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Қате туралы есеп файлын оқу мүмкін болмады"</string>
diff --git a/packages/SystemUI/res/drawable/smart_reply_button_background.xml b/packages/SystemUI/res/drawable/smart_reply_button_background.xml
index c5ac67b..c464ba6 100644
--- a/packages/SystemUI/res/drawable/smart_reply_button_background.xml
+++ b/packages/SystemUI/res/drawable/smart_reply_button_background.xml
@@ -19,11 +19,16 @@
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/notification_ripple_untinted_color">
<item>
- <shape android:shape="rectangle">
- <!-- Use non-zero corner radius to work around b/73285195. The actual corner radius is
- set dynamically at runtime in SmartReplyView. -->
- <corners android:radius="1dp"/>
- <solid android:color="@color/smart_reply_button_background"/>
- </shape>
+ <inset
+ android:insetLeft="0dp"
+ android:insetTop="7dp"
+ android:insetRight="0dp"
+ android:insetBottom="5dp">
+ <shape android:shape="rectangle">
+ <corners android:radius="8dp" />
+ <stroke android:width="1dp" android:color="@color/smart_reply_button_stroke" />
+ <solid android:color="@color/smart_reply_button_background"/>
+ </shape>
+ </inset>
</item>
</ripple>
diff --git a/packages/SystemUI/res/layout/qs_footer_impl.xml b/packages/SystemUI/res/layout/qs_footer_impl.xml
index f424171..f554150 100644
--- a/packages/SystemUI/res/layout/qs_footer_impl.xml
+++ b/packages/SystemUI/res/layout/qs_footer_impl.xml
@@ -38,35 +38,49 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginStart="16dp"
android:layout_gravity="center_vertical"
android:gravity="end" >
- <include
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|start"
- android:layout_marginEnd="8dp"
- android:visibility="gone"
- layout="@layout/mobile_signal_group" />
-
- <com.android.keyguard.CarrierText
- android:id="@+id/qs_carrier_text"
+ <LinearLayout
android:layout_width="0dp"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:layout_weight="1"
- android:layout_gravity="center_vertical|start"
- android:layout_marginEnd="32dp"
- android:ellipsize="marquee"
- android:textAppearance="@style/TextAppearance.QS.TileLabel"
- android:textColor="?android:attr/textColorPrimary"
- android:textDirection="locale"
- android:singleLine="true" />
+ android:gravity="center_vertical|start"
+ android:paddingStart="16dp">
+
+ <include
+ layout="@layout/mobile_signal_group"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="8dp"
+ android:visibility="gone" />
+
+ <com.android.keyguard.CarrierText
+ android:id="@+id/qs_carrier_text"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_marginEnd="32dp"
+ android:ellipsize="marquee"
+ android:textAppearance="@style/TextAppearance.QS.TileLabel"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textDirection="locale"
+ android:singleLine="true" />
+
+ </LinearLayout>
+
+ <com.android.systemui.qs.PageIndicator
+ android:id="@+id/footer_page_indicator"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_gravity="center_vertical"
+ android:visibility="gone" />
<com.android.keyguard.AlphaOptimizedLinearLayout
android:id="@+id/qs_footer_actions_container"
- android:layout_width="wrap_content"
+ android:layout_width="@integer/qs_footer_actions_width"
android:layout_height="match_parent"
+ android:layout_weight="@integer/qs_footer_actions_weight"
android:gravity="center_vertical|end" >
<com.android.systemui.statusbar.phone.MultiUserSwitch
android:id="@+id/multi_user_switch"
diff --git a/packages/SystemUI/res/layout/qs_paged_page.xml b/packages/SystemUI/res/layout/qs_paged_page.xml
index a246e0d..25b1a2b 100644
--- a/packages/SystemUI/res/layout/qs_paged_page.xml
+++ b/packages/SystemUI/res/layout/qs_paged_page.xml
@@ -20,5 +20,7 @@
android:id="@+id/tile_page"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:paddingLeft="@dimen/notification_side_paddings"
+ android:paddingRight="@dimen/notification_side_paddings"
android:clipChildren="false"
android:clipToPadding="false" />
diff --git a/packages/SystemUI/res/layout/qs_paged_tile_layout.xml b/packages/SystemUI/res/layout/qs_paged_tile_layout.xml
index 00427cb..e96a09b 100644
--- a/packages/SystemUI/res/layout/qs_paged_tile_layout.xml
+++ b/packages/SystemUI/res/layout/qs_paged_tile_layout.xml
@@ -19,9 +19,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingBottom="24dp"
android:clipChildren="false"
- android:clipToPadding="false">
+ android:clipToPadding="false"
+ android:paddingBottom="@dimen/qs_paged_tile_layout_padding_bottom">
<FrameLayout
android:id="@+id/page_decor"
diff --git a/packages/SystemUI/res/layout/smart_reply_button.xml b/packages/SystemUI/res/layout/smart_reply_button.xml
index 3c6edcd..98e6e82 100644
--- a/packages/SystemUI/res/layout/smart_reply_button.xml
+++ b/packages/SystemUI/res/layout/smart_reply_button.xml
@@ -18,7 +18,7 @@
<!-- android:paddingHorizontal is set dynamically in SmartReplyView. -->
<Button xmlns:android="http://schemas.android.com/apk/res/android"
- style="@android:style/Widget.Material.Button.Borderless.Small"
+ style="@android:style/Widget.Material.Button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minWidth="0dp"
@@ -26,9 +26,9 @@
android:paddingVertical="@dimen/smart_reply_button_padding_vertical"
android:background="@drawable/smart_reply_button_background"
android:gravity="center"
- android:fontFamily="sans-serif"
+ android:fontFamily="sans-serif-medium"
android:textSize="@dimen/smart_reply_button_font_size"
android:lineSpacingExtra="@dimen/smart_reply_button_line_spacing_extra"
android:textColor="@color/smart_reply_button_text"
android:textStyle="normal"
- android:ellipsize="none"/>
\ No newline at end of file
+ android:ellipsize="none"/>
diff --git a/packages/SystemUI/res/layout/smart_reply_view.xml b/packages/SystemUI/res/layout/smart_reply_view.xml
index 6f21787..9b2dd95 100644
--- a/packages/SystemUI/res/layout/smart_reply_view.xml
+++ b/packages/SystemUI/res/layout/smart_reply_view.xml
@@ -23,8 +23,9 @@
android:id="@+id/smart_reply_view"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
+ android:layout_marginStart="12dp"
systemui:spacing="@dimen/smart_reply_button_spacing"
systemui:singleLineButtonPaddingHorizontal="@dimen/smart_reply_button_padding_horizontal_single_line"
systemui:doubleLineButtonPaddingHorizontal="@dimen/smart_reply_button_padding_horizontal_double_line">
<!-- smart_reply_button(s) will be added here. -->
-</com.android.systemui.statusbar.policy.SmartReplyView>
\ No newline at end of file
+</com.android.systemui.statusbar.policy.SmartReplyView>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index c17385b..38a638c 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -387,7 +387,7 @@
<string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Minder dringende kennisgewings hieronder"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Tik weer om oop te maak"</string>
- <string name="keyguard_unlock" msgid="8043466894212841998">"Sleep op om te ontsluit"</string>
+ <string name="keyguard_unlock" msgid="8043466894212841998">"Swiep op om te ontsluit"</string>
<string name="do_disclosure_generic" msgid="5615898451805157556">"Jou organisasie bestuur hierdie toestel"</string>
<string name="do_disclosure_with_name" msgid="5640615509915445501">"Hierdie toestel word deur <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> bestuur"</string>
<string name="phone_hint" msgid="4872890986869209950">"Swiep vanaf ikoon vir foon"</string>
@@ -787,7 +787,7 @@
<string name="pip_phone_minimize" msgid="1079119422589131792">"Minimeer"</string>
<string name="pip_phone_close" msgid="8416647892889710330">"Maak toe"</string>
<string name="pip_phone_settings" msgid="8080777499521528521">"Instellings"</string>
- <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Sleep af om toe te maak"</string>
+ <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Swiep af om toe te maak"</string>
<string name="pip_menu_title" msgid="4707292089961887657">"Kieslys"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> is in beeld-in-beeld"</string>
<string name="pip_notification_message" msgid="5619512781514343311">"As jy nie wil hê dat <xliff:g id="NAME">%s</xliff:g> hierdie kenmerk moet gebruik nie, tik om instellings oop te maak en skakel dit af."</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 5f750ed..656ad7a 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -165,10 +165,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"ليست هناك شريحة SIM."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"بيانات الجوّال"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"تشغيل بيانات الجوال"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"إيقاف بيانات الجوّال"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"إيقاف"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ربط البلوتوث."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"وضع الطائرة."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"الشبكة الافتراضية الخاصة (VPN) قيد التشغيل."</string>
@@ -375,8 +373,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"مسح الكل"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"اسحب هنا لاستخدام وضع تقسيم الشاشة"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"مرّر سريعًا لأعلى لتبديل التطبيقات"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"اسحب لليسار للتبديل السريع بين التطبيقات"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسيم أفقي"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"تقسيم رأسي"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"تقسيم مخصص"</string>
@@ -438,7 +435,7 @@
<string name="user_logout_notification_text" msgid="3350262809611876284">"خروج المستخدم الحالي"</string>
<string name="user_logout_notification_action" msgid="1195428991423425062">"خروج المستخدم"</string>
<string name="user_add_user_title" msgid="4553596395824132638">"هل تريد إضافة مستخدم جديد؟"</string>
- <string name="user_add_user_message_short" msgid="2161624834066214559">"عند إضافة مستخدم جديد، يلزمه إعداد مساحته.\n\nعلمًا بأنه يُمكن لأي مستخدم تحديث التطبيقات لجميع المستخدمين الآخرين."</string>
+ <string name="user_add_user_message_short" msgid="2161624834066214559">"عند إضافة مستخدم جديد، عليه إعداد مساحته.\n\nويُمكن لأي مستخدم تحديث التطبيقات لجميع المستخدمين الآخرين."</string>
<string name="user_remove_user_title" msgid="4681256956076895559">"هل تريد إزالة المستخدم؟"</string>
<string name="user_remove_user_message" msgid="1453218013959498039">"سيتم حذف جميع تطبيقات وبيانات هذا المستخدم."</string>
<string name="user_remove_user_remove" msgid="7479275741742178297">"إزالة"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index f2a00f1..cfe4ab4 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -162,10 +162,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Nema SIM kartice."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Prijenos podataka na mobilnoj mreži"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Prijenos podataka na mobilnoj mreži je uključen"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Mobilni su podaci isključeni"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Isključeno"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Dijeljenje Bluetooth veze."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Način rada u avionu."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN uključen."</string>
@@ -366,8 +364,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Obriši sve"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Povucite ovdje za korištenje podijeljenog ekrana"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Prevucite prema gore za promjenu aplikacije"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Povucite udesno da biste brzo promijenili aplikaciju"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podjela po horizontali"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podjela po vertikali"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Prilagođena podjela"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 2e25227..b89d182 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -143,7 +143,7 @@
<string name="accessibility_signal_full" msgid="9122922886519676839">"Senyal complet."</string>
<string name="accessibility_desc_on" msgid="2385254693624345265">"Activat."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Desactivat."</string>
- <string name="accessibility_desc_connected" msgid="8366256693719499665">"Connectat."</string>
+ <string name="accessibility_desc_connected" msgid="8366256693719499665">"Connectat"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"S’està connectant."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 7b62acd..4b90a93 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -161,10 +161,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Sin tarjeta SIM"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Datos móviles"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Activar datos móviles"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Datos móviles desactivados"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Desactivados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conexión mediante Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN activada"</string>
@@ -365,8 +363,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Borrar todo"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Arrastra hasta aquí para usar la pantalla dividida"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Desliza el dedo hacia arriba para cambiar de app"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arrastra a la derecha para cambiar aplicaciones rápidamente"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"División vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"División personalizada"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 81b118a..fc16d99 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -161,10 +161,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Sin tarjeta SIM"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Datos móviles"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Datos móviles activados"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Datos móviles desactivados"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Desactivados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Compartir conexión por Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"La red VPN está activada."</string>
@@ -365,8 +363,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Borrar todo"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Arrastra hasta aquí para utilizar la pantalla dividida"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Desliza el dedo hacia arriba para cambiar de aplicación"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arrastra hacia la derecha para cambiar rápidamente de aplicación"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"División vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"División personalizada"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index a840266..ca8cb17 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -161,10 +161,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Aucune carte SIM"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Données cellulaires"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Données cellulaires activées"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Données cellulaires désactivées"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Désactivé"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Partage de connexion Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode Avion"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"RPV activé."</string>
@@ -365,8 +363,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Effacer tout"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Glissez l\'élément ici pour utiliser l\'écran partagé"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Balayez vers le haut pour changer d\'application"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Balayez l\'écran vers la droite pour changer rapidement d\'application"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Séparation verticale"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Séparation personnalisée"</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 22c53d2..c91547b 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -148,16 +148,13 @@
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
- <!-- no translation found for data_connection_3_5g (3164370985817123144) -->
- <skip />
- <!-- no translation found for data_connection_3_5g_plus (4464630787664529264) -->
- <skip />
+ <string name="data_connection_3_5g" msgid="3164370985817123144">"H"</string>
+ <string name="data_connection_3_5g_plus" msgid="4464630787664529264">"H+"</string>
<string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <!-- no translation found for data_connection_cdma (8176597308239086780) -->
- <skip />
+ <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"रोमिंग"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"वाई-फ़ाई"</string>
@@ -412,7 +409,7 @@
<string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"प्रोफ़ाइल दिखाएं"</string>
<string name="user_add_user" msgid="5110251524486079492">"उपयोगकर्ता जोड़ें"</string>
<string name="user_new_user_name" msgid="426540612051178753">"नया उपयोगकर्ता"</string>
- <string name="guest_nickname" msgid="8059989128963789678">"अतिथि"</string>
+ <string name="guest_nickname" msgid="8059989128963789678">"मेहमान"</string>
<string name="guest_new_guest" msgid="600537543078847803">"अतिथि जोड़ें"</string>
<string name="guest_exit_guest" msgid="7187359342030096885">"अतिथि को निकालें"</string>
<string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"अतिथि को निकालें?"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 4d1295a..b289224 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -162,10 +162,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Nema SIM kartice."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Mobilni podaci"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobilni su podaci uključeni"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Mobilni su podaci isključeni"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Isključeno"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Posredno povezivanje Bluetootha."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Način rada u zrakoplovu"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN uključen."</string>
@@ -366,8 +364,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Izbriši sve"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Povucite ovdje da biste upotrebljavali podijeljeni zaslon"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Prijeđite prstom prema gore da biste promijenili aplikaciju"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Povucite udesno da biste brzo promijenili aplikaciju"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podijeli vodoravno"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podijeli okomito"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Podijeli prilagođeno"</string>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 7360aa4..5414999 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -535,7 +535,7 @@
<string name="stream_accessibility" msgid="301136219144385106">"Հատուկ գործառույթներ"</string>
<string name="ring_toggle_title" msgid="3281244519428819576">"Զանգեր"</string>
<string name="volume_ringer_status_normal" msgid="4273142424125855384">"Սովորական"</string>
- <string name="volume_ringer_status_vibrate" msgid="1825615171021346557">"Թրթռազանգ"</string>
+ <string name="volume_ringer_status_vibrate" msgid="1825615171021346557">"Թրթռոց"</string>
<string name="volume_ringer_status_silent" msgid="6896394161022916369">"Անձայն"</string>
<string name="qs_status_phone_vibrate" msgid="204362991135761679">"Հեռախոսում միացված է թրթռոցը"</string>
<string name="qs_status_phone_muted" msgid="5437668875879171548">"Հեռախոսի ձայնն անջատած է"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 5c566ac..3a1532a 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -161,10 +161,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Nessuna SIM presente."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Dati mobili"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Dati mobili attivati"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Dati mobili disattivati"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Off"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modalità aereo."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN attiva."</string>
@@ -365,8 +363,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Cancella tutto"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Trascina qui per utilizzare la modalità Schermo diviso"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Scorri verso l\'alto per passare ad altre app"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Trascina verso destra per cambiare velocemente app"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisione in orizzontale"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisione in verticale"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisione personalizzata"</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index ee3e886..b1ab2f8 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -321,7 +321,7 @@
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Жарықтығы"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"Авто"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Түстерді инверсиялау"</string>
- <string name="quick_settings_color_space_label" msgid="853443689745584770">"Түсті жөндеу режимі"</string>
+ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Түсті түзету режимі"</string>
<string name="quick_settings_more_settings" msgid="326112621462813682">"Қосымша параметрлер"</string>
<string name="quick_settings_done" msgid="3402999958839153376">"Дайын"</string>
<string name="quick_settings_connected" msgid="1722253542984847487">"Қосылды"</string>
@@ -461,7 +461,7 @@
<string name="monitoring_title_device_owned" msgid="1652495295941959815">"Құрылғыны басқару"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Профильді бақылау"</string>
<string name="monitoring_title" msgid="169206259253048106">"Желіні бақылау"</string>
- <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN (Виртуалды жеке желі)"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
<string name="monitoring_subtitle_network_logging" msgid="3341264304793193386">"Желі журналын жүргізу"</string>
<string name="monitoring_subtitle_ca_certificate" msgid="3874151893894355988">"CA сертификаттары"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN функциясын өшіру"</string>
@@ -621,7 +621,7 @@
<item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> пайдалануда</item>
</plurals>
<string name="notification_appops_settings" msgid="1028328314935908050">"Параметрлер"</string>
- <string name="notification_appops_ok" msgid="602562195588819631">"ОК"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"Жарайды"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> хабарландыруларын басқару элементтері ашылды"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> хабарландыруларын басқару элементтері жабылды"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Осы арнадан келетін хабарландыруларға рұқсат беру"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 242b478..388e074 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -29,9 +29,9 @@
<item quantity="other">%d экран Көз жүгүртүүдө</item>
<item quantity="one">1 экран Көз жүгүртүүдө</item>
</plurals>
- <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Эскертмелер жок"</string>
+ <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Билдирме жок"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Учурдагы"</string>
- <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Эскертмелер"</string>
+ <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Билдирмелер"</string>
<string name="battery_low_title" msgid="6456385927409742437">"Батареянын кубаты аз"</string>
<string name="battery_low_percent_format" msgid="2900940511201380775">"<xliff:g id="PERCENTAGE">%s</xliff:g> калды"</string>
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> калды, колдонушуңузга караганда болжол менен дагы <xliff:g id="TIME">%s</xliff:g> бар"</string>
@@ -49,7 +49,7 @@
<string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Экрандын авто-айлануусу"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ҮНСҮЗ"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"АВТО"</string>
- <string name="status_bar_settings_notifications" msgid="397146176280905137">"Эскертмелер"</string>
+ <string name="status_bar_settings_notifications" msgid="397146176280905137">"Билдирмелер"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth жалгашты"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Киргизүү ыкмасын тууралоо"</string>
<string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Аппараттык тергич"</string>
@@ -174,7 +174,7 @@
<string name="accessibility_battery_level" msgid="7451474187113371965">"Батарея <xliff:g id="NUMBER">%d</xliff:g> пайыз."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Батарея кубатталууда, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> пайыз."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Система тууралоолору."</string>
- <string name="accessibility_notifications_button" msgid="4498000369779421892">"Эскертмелер."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Билдирмелер"</string>
<string name="accessibility_overflow_action" msgid="5681882033274783311">"Бардык эскертмелерди көрүү"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Эскертмелерди тазалоо."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS жандырылган."</string>
@@ -192,7 +192,7 @@
<string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> колдонмосу жөнүндө маалыматты ачыңыз."</string>
<string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> иштеп баштоодо."</string>
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Эскертме жок кылынды."</string>
- <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Эскертмелер көшөгөсү."</string>
+ <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Билдирмелер тактасы."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Тез тууралоолор."</string>
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Кулпуланган экран."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Жөндөөлөр"</string>
@@ -335,7 +335,7 @@
<item quantity="other">%d түзмөк</item>
<item quantity="one">%d түзмөк</item>
</plurals>
- <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Эскертмелер"</string>
+ <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Билдирмелер"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Кол чырак"</string>
<string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Мобилдик Интернет"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Дайындардын өткөрүлүшү"</string>
@@ -439,7 +439,7 @@
<string name="manage_notifications_text" msgid="8035284146227267681">"Эскертмелерди башкаруу"</string>
<string name="dnd_suppressing_shade_text" msgid="5179021215370153526">"\"Тынчымды алба\" режими эскертмелерди жашырууда"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Азыр баштоо"</string>
- <string name="empty_shade_text" msgid="708135716272867002">"Эскертмелер жок"</string>
+ <string name="empty_shade_text" msgid="708135716272867002">"Билдирме жок"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профилди көзөмөлдөсө болот"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Тармак көзөмөлдөнүшү мүмкүн"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Тармак көзөмөлдөнүшү мүмкүн"</string>
@@ -591,15 +591,15 @@
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth күйгүзүлсүнбү?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Баскычтобуңузду планшетиңизге туташтыруу үчүн, адегенде Bluetooth\'ту күйгүзүшүңүз керек."</string>
<string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"Күйгүзүү"</string>
- <string name="show_silently" msgid="6841966539811264192">"Эскертмелер үнсүз көрсөтүлсүн"</string>
+ <string name="show_silently" msgid="6841966539811264192">"Үнсүз көрүнөт"</string>
<string name="block" msgid="2734508760962682611">"Бардык эскертмелерди бөгөттөө"</string>
<string name="do_not_silence" msgid="6878060322594892441">"Үнү менен көрсөтүлсүн"</string>
<string name="do_not_silence_block" msgid="4070647971382232311">"Үнү менен көрсөтүлүп бөгөттөлбөсүн"</string>
<string name="tuner_full_importance_settings" msgid="3207312268609236827">"Эскертмелерди башкаруу каражаттары"</string>
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Күйүк"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Өчүк"</string>
- <string name="power_notification_controls_description" msgid="4372459941671353358">"Бул функциянын жардамы менен ар бир колдонмо үчүн эскертменин маанилүүлүк деңгээлин 0дон 5ке чейин койсоңуз болот. \n\n"<b>"5-деңгээл"</b>" \n- Эскертмелер тизмесинин башында көрсөтүлсүн \n- Эскертмелер толук экранда көрсөтүлсүн \n- Калкып чыгуучу эскертмелерге уруксат берилсин \n\n"<b>"4-деңгээл"</b>" \n- Эскертмелер толук экранда көрсөтүлбөсүн \n- Калкып чыгуучу эскертмелерге уруксат берилсин \n\n"<b>"3-деңгээл"</b>" \n- Эскертмелер толук экранда көрсөтүлбөсүн \n- Калкып чыгуучу эскертмелерге тыюу салынсын \n\n"<b>"2-деңгээл"</b>" \n- Эскертмелер толук экранда көрсөтүлбөсүн \n- Калкып чыгуучу эскертмелерге тыюу салынсын \n- Эч качан добуш чыгып же дирилдебесин \n\n"<b>"1-деңгээл"</b>" \n- Эскертмелер толук экранда көрсөтүлбөсүн \n- Калкып чыгуучу эскертмелерге тыюу салынсын \n- Эч качан добуш чыгып же дирилдебесин \n- Кулпуланган экрандан жана абал тилкесинен жашырылсын \n- Эскертмелер тизмесинин аягында көрсөтүлсүн \n\n"<b>"0-деңгээл"</b>" \n- Колдонмодон алынган бардык эскертмелер бөгөттөлсүн"</string>
- <string name="notification_header_default_channel" msgid="7506845022070889909">"Эскертмелер"</string>
+ <string name="power_notification_controls_description" msgid="4372459941671353358">"Бул функциянын жардамы менен ар бир колдонмо үчүн билдирменин маанилүүлүгүн 0дон 5ке чейин бааласаңыз болот. \n\n"<b>"5-деңгээл"</b>" \n- Билдирмелер тизмесинин өйдө жагында көрсөтүлөт \n- Билдирмелер толук экранда көрсөтүлөт \n- Калкып чыгуучу билдирмелерге уруксат берилет \n\n"<b>"4-деңгээл"</b>" \n- Билдирмелер толук экранда көрсөтүлбөйт \n- Калкып чыгуучу билдирмелерге уруксат берилет \n\n"<b>"3-деңгээл"</b>" \n- Билдирмелер толук экранда көрсөтүлбөйт \n- Калкып чыгуучу билдирмелерге тыюу салынат \n\n"<b>"2-деңгээл"</b>" \n- Билдирмелер толук экранда көрсөтүлбөйт \n- Калкып чыгуучу билдирмелерге тыюу салынат \n- Эч качан үн чыкпайт же дирилдебейт \n\n"<b>"1-деңгээл"</b>" \n- Билдирмелер толук экранда көрсөтүлбөйт \n- Калкып чыгуучу билдирмелерге тыюу салынат \n- Эч качан үн чыкпайт же дирилдебейт \n- Кулпуланган экрандан жана абал тилкесинен жашырылат \n- Билдирмелер тизмесинин ылдый жагында көрсөтүлөт \n\n"<b>"0-деңгээл"</b>" \n- Колдонмодон алынган бардык билдирмелер бөгөттөлөт"</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"Билдирмелер"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Мындан ары бул эскертмелер сизге көрсөтүлбөйт"</string>
<string name="notification_channel_minimized" msgid="1664411570378910931">"Бул эскертмелер кичирейтилет"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Адатта мындай эскертмелерди өткөрүп жибересиз. \nАлар көрсөтүлө берсинби?"</string>
@@ -677,7 +677,7 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Башкы бет"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Акыркылар"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Артка"</string>
- <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"Эскертмелер"</string>
+ <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"Билдирмелер"</string>
<string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"Ыкчам баскычтар"</string>
<string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"Киргизүү ыкмасын которуштуруу"</string>
<string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"Колдонмолор"</string>
diff --git a/packages/SystemUI/res/values-land/dimens.xml b/packages/SystemUI/res/values-land/dimens.xml
index c59492f..b81d363 100644
--- a/packages/SystemUI/res/values-land/dimens.xml
+++ b/packages/SystemUI/res/values-land/dimens.xml
@@ -35,4 +35,5 @@
<integer name="quick_settings_num_columns">4</integer>
<bool name="quick_settings_wide">true</bool>
<dimen name="qs_detail_margin_top">0dp</dimen>
+ <dimen name="qs_paged_tile_layout_padding_bottom">0dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values-land/integers.xml b/packages/SystemUI/res/values-land/integers.xml
new file mode 100644
index 0000000..fb22665
--- /dev/null
+++ b/packages/SystemUI/res/values-land/integers.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<resources>
+ <!-- Action footer width is set to 0 to allow it to stretch (through a weight of 1) and center
+ the page indicator in between the footer and the carrier text.-->
+ <integer name="qs_footer_actions_width">0</integer>
+ <integer name="qs_footer_actions_weight">1</integer>
+</resources>
\ No newline at end of file
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 40c5ff7..2d24354 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -242,8 +242,8 @@
<string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Ажлын горимыг асаасан."</string>
<string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"Ажлын горимыг унтраасан."</string>
<string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"Ажлын горимыг асаасан."</string>
- <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"Өгөгдөл хамгаалагчийг унтраасан."</string>
- <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"Өгөгдөл хамгаалагчийг асаасан."</string>
+ <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"Дата хэмнэгчийг унтраасан."</string>
+ <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"Дата хэмнэгчийг асаасан."</string>
<string name="accessibility_brightness" msgid="8003681285547803095">"Дэлгэцийн гэрэлтэлт"</string>
<string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Цэнэглэж байна"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G дата-г түр зогсоосон байна"</string>
@@ -328,7 +328,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Модем болгох"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Сүлжээний цэг"</string>
<string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Асааж байна…"</string>
- <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Өгөгдөл хамгаалагчийг асаасан"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Дата хэмнэгчийг асаасан"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d төхөөрөмж</item>
<item quantity="one">%d төхөөрөмж</item>
@@ -424,7 +424,7 @@
<string name="user_logout_notification_text" msgid="3350262809611876284">"Одоогийн хэрэглэгчийг гаргах"</string>
<string name="user_logout_notification_action" msgid="1195428991423425062">"ХЭРЭГЛЭГЧЭЭС ГАРАХ"</string>
<string name="user_add_user_title" msgid="4553596395824132638">"Шинэ хэрэглэгч нэмэх үү?"</string>
- <string name="user_add_user_message_short" msgid="2161624834066214559">"Та шинэ хэрэглэгч нэмбэл, тухайн хүн өөрийн профайлыг тохируулах шаардлагатай.\n\nАль ч хэрэглэгч бүх хэрэглэгчийн апп-уудыг шинэчлэх боломжтой."</string>
+ <string name="user_add_user_message_short" msgid="2161624834066214559">"Та шинэ хэрэглэгч нэмбэл тухайн хүн өөрийн профайлыг тохируулах шаардлагатай.\n\nАль ч хэрэглэгч бүх хэрэглэгчийн апп-уудыг шинэчлэх боломжтой."</string>
<string name="user_remove_user_title" msgid="4681256956076895559">"Хэрэглэгчийг устгах уу?"</string>
<string name="user_remove_user_message" msgid="1453218013959498039">"Энэ хэрэглэгчийн бүх апп болон мэдээлэл устах болно."</string>
<string name="user_remove_user_remove" msgid="7479275741742178297">"Арилгах"</string>
@@ -697,9 +697,9 @@
<string name="accessibility_long_click_tile" msgid="6687350750091842525">"Тохиргоог нээх"</string>
<string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Чихэвч холбогдсон"</string>
<string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Чихэвч холбогдсон"</string>
- <string name="data_saver" msgid="5037565123367048522">"Өгөгдөл хамгаалагч"</string>
- <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Өгөгдөл хамгаалагчийг асаасан байна"</string>
- <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Өгөгдөл хамгаалагчийг унтраасан байна"</string>
+ <string name="data_saver" msgid="5037565123367048522">"Дата хэмнэгч"</string>
+ <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Дата хэмнэгчийг асаасан байна"</string>
+ <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Дата хэмнэгчийг унтраасан байна"</string>
<string name="switch_bar_on" msgid="1142437840752794229">"Идэвхтэй"</string>
<string name="switch_bar_off" msgid="8803270596930432874">"Идэвхгүй"</string>
<string name="nav_bar" msgid="1993221402773877607">"Навигацийн самбар"</string>
@@ -771,7 +771,7 @@
<string name="forced_resizable_secondary_display" msgid="4230857851756391925">"Апп хоёрдогч дэлгэцэд ажиллахгүй."</string>
<string name="activity_launch_on_secondary_display_failed_text" msgid="7793821742158306742">"Аппыг хоёрдогч дэлгэцэд эхлүүлэх боломжгүй."</string>
<string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Тохиргоог нээнэ үү."</string>
- <string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Хурдан тохиргоог нээнэ үү."</string>
+ <string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Шуурхай тохиргоог нээнэ үү."</string>
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Хурдан тохиргоог хаана уу."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Сэрүүлэг тавьсан."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g>-р нэвтэрсэн"</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 1646429..ba0039a 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -161,10 +161,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"ဆင်းကဒ်မရှိပါ။"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"မိုဘိုင်းဒေတာ"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"မိုဘိုင်းဒေတာကို ဖွင့်ထားပါသည်"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"မိုဘိုင်းဒေတာ ပိတ်ထားသည်"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"ပိတ်ရန်"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ဘလူးတုသ်သုံး၍ ချိတ်ဆက်ခြင်း"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"လေယာဥ်ပျံပေါ်အသုံးပြုသောစနစ်။"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ကို ဖွင့်ထားသည်။"</string>
@@ -363,8 +361,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"အားလုံး ဖယ်ရှားပါ"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"မျက်နှာပြင် ခွဲခြမ်းပြသခြင်းကို အသုံးပြုရန် ဤနေရာသို့ ပွတ်၍ဆွဲထည့်ပါ"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"အက်ပ်များကို ဖွင့်ရန် အပေါ်သို့ ပွတ်ဆွဲပါ"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"အက်ပ်များကို ပြောင်းရန် ညာဘက်သို့ ဖိဆွဲပါ"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ရေပြင်ညီ ပိုင်းမည်"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ဒေါင်လိုက်ပိုင်းမည်"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"စိတ်ကြိုက် ပိုင်းမည်"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 91f7bdb..e5e22ef 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -161,10 +161,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Sem SIM."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Dados móveis"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Dados móveis ativados"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Dados móveis desativados"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Desativados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avião."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ativada."</string>
@@ -365,8 +363,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Limpar tudo"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Arraste aqui para usar a tela dividida"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Deslize para cima para alternar entre os apps"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arraste para a direita para alternar rapidamente entre os apps"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 91f7bdb..e5e22ef 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -161,10 +161,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Sem SIM."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Dados móveis"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Dados móveis ativados"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Dados móveis desativados"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Desativados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avião."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ativada."</string>
@@ -365,8 +363,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Limpar tudo"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Arraste aqui para usar a tela dividida"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Deslize para cima para alternar entre os apps"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Arraste para a direita para alternar rapidamente entre os apps"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 7e03fbb..124e8bf 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -162,10 +162,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Niciun card SIM."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Date mobile"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Date mobile activate"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Date mobile dezactivate"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Dezactivate"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conectarea ca modem prin Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mod Avion."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"Rețea VPN activată"</string>
@@ -368,8 +366,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Ștergeți tot"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Trageți aici pentru a folosi ecranul împărțit"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Glisați în sus pentru a comuta între aplicații"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Glisați la dreapta pentru a comuta rapid între aplicații"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divizare pe orizontală"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divizare pe verticală"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divizare personalizată"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index d72593a..0622e0f 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -143,7 +143,7 @@
<string name="accessibility_two_bars" msgid="6437363648385206679">"два деления"</string>
<string name="accessibility_three_bars" msgid="2648241415119396648">"три деления"</string>
<string name="accessibility_signal_full" msgid="9122922886519676839">"надежный сигнал"</string>
- <string name="accessibility_desc_on" msgid="2385254693624345265">"Вкл."</string>
+ <string name="accessibility_desc_on" msgid="2385254693624345265">"Включено"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Отключено"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Подключено"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Соединение."</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 7f8fd67..f5181f8 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -163,10 +163,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Žiadna SIM karta."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Mobilné dáta"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobilné dáta sú zapnuté"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Mobilné dáta sú vypnuté"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Vypnuté"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Pripojenie cez Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Režim v lietadle."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN je zapnuté."</string>
@@ -371,8 +369,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Vymazať všetko"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Presuňte okno sem a použite tak rozdelenú obrazovku"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Potiahnutím nahor prepnete aplikácie"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Presunutím doprava rýchlo prepnete aplikácie"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Rozdeliť vodorovné"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Rozdeliť zvislé"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Rozdeliť vlastné"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index c577f80..830e5f4 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -161,10 +161,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Inget SIM-kort."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Mobildata"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobildata har aktiverats"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Mobildata har inaktiverats"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Av"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internetdelning via Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flygplansläge"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN har aktiverats."</string>
@@ -363,8 +361,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Rensa alla"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Dra hit för att dela upp skärmen"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Byt appar genom att svepa uppåt"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Tryck och dra åt höger för att snabbt byta mellan appar"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dela horisontellt"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dela vertikalt"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Dela anpassad"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index fceb3c5..7a7900d 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -161,10 +161,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Hakuna SIM."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Data ya Simu"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Data ya Simu Imewashwa"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Umezima data ya mtandao wa simu"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Zima"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Shiriki intaneti kwa Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Hali ya ndegeni."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN imewashwa."</string>
@@ -363,8 +361,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Futa zote"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Buruta hapa ili utumie skrini iliyogawanywa"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Telezesha kidole juu ili ubadilishe programu"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Buruta kulia ili ubadilishe programu haraka"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gawanya Mlalo"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Gawanya Wima"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Maalum Iliyogawanywa"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 8cc3d6c..f8cbf8f 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -678,9 +678,9 @@
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ఇటీవలివి"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"వెనుకకు"</string>
<string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"నోటిఫికేషన్లు"</string>
- <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"కీబోర్డ్ సత్వరమార్గాలు"</string>
+ <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"కీబోర్డ్ షార్ట్కట్లు"</string>
<string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"ఇన్పుట్ పద్ధతిని మార్చండి"</string>
- <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"అనువర్తనాలు"</string>
+ <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"అప్లికేషన్లు"</string>
<string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"సహాయకం"</string>
<string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"బ్రౌజర్"</string>
<string name="keyboard_shortcut_group_applications_contacts" msgid="2064197111278436375">"పరిచయాలు"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 138646a..f9d46d7 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -161,10 +161,8 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM kart yok."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Mobil Veri"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobil Veri Açık"</string>
- <!-- no translation found for cell_data_off_content_description (4356113230238585072) -->
- <skip />
- <!-- no translation found for cell_data_off (1051264981229902873) -->
- <skip />
+ <string name="cell_data_off_content_description" msgid="4356113230238585072">"Mobil veri kapalı"</string>
+ <string name="cell_data_off" msgid="1051264981229902873">"Kapalı"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Uçak modu."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN açık."</string>
@@ -363,8 +361,7 @@
<string name="recents_stack_action_button_label" msgid="6593727103310426253">"Tümünü temizle"</string>
<string name="recents_drag_hint_message" msgid="2649739267073203985">"Ekranı bölünmüş olarak kullanmak için burayı sürükleyin"</string>
<string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Uygulamalar arasında geçiş yapmak için yukarı kaydırın"</string>
- <!-- no translation found for recents_quick_scrub_onboarding (2778062804333285789) -->
- <skip />
+ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Uygulamaları hızlıca değiştirmek için sağa kaydırın"</string>
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Yatay Ayırma"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dikey Ayırma"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Özel Ayırma"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index b4e013f..c49a543 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -48,7 +48,7 @@
<string name="battery_saver_start_action" msgid="8187820911065797519">"Увімкнути режим економії заряду акумулятора"</string>
<string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Налаштування"</string>
<string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
- <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Повертати екран автоматично"</string>
+ <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Автообертання екрана"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ІГНОР."</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"АВТОМ."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Сповіщення"</string>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 3c1f995..fd25c40 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -150,8 +150,9 @@
<color name="zen_introduction">#ffffffff</color>
- <color name="smart_reply_button_text">#de000000</color> <!-- 87% black -->
- <color name="smart_reply_button_background">#fff2f2f2</color>
+ <color name="smart_reply_button_text">#5F6368</color>
+ <color name="smart_reply_button_background">#feffffff</color>
+ <color name="smart_reply_button_stroke">#ffdadce0</color>
<!-- Fingerprint dialog colors -->
<color name="fingerprint_dialog_bg_color">#ffffffff</color> <!-- 100% white -->
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index e6694e9..b220091 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -382,6 +382,7 @@
<dimen name="qs_footer_padding_start">16dp</dimen>
<dimen name="qs_footer_padding_end">16dp</dimen>
<dimen name="qs_footer_icon_size">16dp</dimen>
+ <dimen name="qs_paged_tile_layout_padding_bottom">24dp</dimen>
<dimen name="qs_notif_collapsed_space">64dp</dimen>
@@ -932,9 +933,9 @@
<!-- Smart reply button -->
<dimen name="smart_reply_button_spacing">8dp</dimen>
<dimen name="smart_reply_button_padding_vertical">10dp</dimen>
- <dimen name="smart_reply_button_padding_horizontal_single_line">12dp</dimen>
+ <dimen name="smart_reply_button_padding_horizontal_single_line">16dp</dimen>
<dimen name="smart_reply_button_padding_horizontal_double_line">16dp</dimen>
- <dimen name="smart_reply_button_min_height">40dp</dimen>
+ <dimen name="smart_reply_button_min_height">32dp</dimen>
<dimen name="smart_reply_button_font_size">14sp</dimen>
<dimen name="smart_reply_button_line_spacing_extra">6sp</dimen> <!-- Total line height 20sp. -->
diff --git a/packages/SystemUI/res/values/integers.xml b/packages/SystemUI/res/values/integers.xml
index 8f23283..87c4bbb 100644
--- a/packages/SystemUI/res/values/integers.xml
+++ b/packages/SystemUI/res/values/integers.xml
@@ -16,4 +16,9 @@
-->
<resources>
<integer name="fingerprint_dialog_text_gravity">8388611</integer> <!-- gravity start -->
+
+ <!-- Action footer width used for layout_width to indicate WRAP_CONTENT (along with a weight of
+ 0) as we can allow the carrier text to stretch as far as needed in the QS footer. -->
+ <integer name="qs_footer_actions_width">-2</integer>
+ <integer name="qs_footer_actions_weight">0</integer>
</resources>
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
index 7042d22..72f6cdc 100644
--- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
+++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
@@ -421,7 +421,7 @@
int dw = flipped ? lh : lw;
int dh = flipped ? lw : lh;
- mBoundingPath.set(DisplayCutout.pathFromResources(getResources(), lw, lh));
+ mBoundingPath.set(DisplayCutout.pathFromResources(getResources(), dw, dh));
Matrix m = new Matrix();
transformPhysicalToLogicalCoordinates(mInfo.rotation, dw, dh, m);
mBoundingPath.transform(m);
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
index 52d458c..ac4da73 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
@@ -24,6 +24,7 @@
import android.view.ViewGroup;
import com.android.internal.logging.MetricsLogger;
+import com.android.internal.util.function.TriConsumer;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.colorextraction.ColorExtractor.GradientColors;
import com.android.keyguard.ViewMediatorCallback;
@@ -53,6 +54,7 @@
import com.android.systemui.statusbar.phone.NotificationGroupManager;
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.ScrimController;
+import com.android.systemui.statusbar.phone.ScrimState;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
@@ -97,19 +99,20 @@
}
public KeyguardBouncer createKeyguardBouncer(Context context, ViewMediatorCallback callback,
- LockPatternUtils lockPatternUtils,
- ViewGroup container, DismissCallbackRegistry dismissCallbackRegistry) {
+ LockPatternUtils lockPatternUtils, ViewGroup container,
+ DismissCallbackRegistry dismissCallbackRegistry,
+ KeyguardBouncer.BouncerExpansionCallback expansionCallback) {
return new KeyguardBouncer(context, callback, lockPatternUtils, container,
- dismissCallbackRegistry, FalsingManager.getInstance(context));
+ dismissCallbackRegistry, FalsingManager.getInstance(context), expansionCallback);
}
public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
- LockscreenWallpaper lockscreenWallpaper, Consumer<Float> scrimBehindAlphaListener,
- Consumer<GradientColors> scrimInFrontColorListener,
+ LockscreenWallpaper lockscreenWallpaper,
+ TriConsumer<ScrimState, Float, GradientColors> scrimStateListener,
Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters,
AlarmManager alarmManager) {
- return new ScrimController(scrimBehind, scrimInFront, scrimBehindAlphaListener,
- scrimInFrontColorListener, scrimVisibleListener, dozeParameters, alarmManager);
+ return new ScrimController(scrimBehind, scrimInFront, scrimStateListener,
+ scrimVisibleListener, dozeParameters, alarmManager);
}
public NotificationIconAreaController createNotificationIconAreaController(Context context,
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
index 40ce69b..d860fc5 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
@@ -533,6 +533,7 @@
filter.addAction(ACTION_SHOW_AUTO_SAVER_SUGGESTION);
filter.addAction(ACTION_ENABLE_AUTO_SAVER);
filter.addAction(ACTION_AUTO_SAVER_NO_THANKS);
+ filter.addAction(ACTION_DISMISS_AUTO_SAVER_SUGGESTION);
mContext.registerReceiverAsUser(this, UserHandle.ALL, filter,
android.Manifest.permission.DEVICE_POWER, mHandler);
}
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
index c409f73..6801e69 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
@@ -66,7 +66,8 @@
private static final long SIX_HOURS_MILLIS = Duration.ofHours(6).toMillis();
private final Handler mHandler = new Handler();
- private final Receiver mReceiver = new Receiver();
+ @VisibleForTesting
+ final Receiver mReceiver = new Receiver();
private PowerManager mPowerManager;
private HardwarePropertiesManager mHardwarePropertiesManager;
@@ -180,11 +181,13 @@
throw new RuntimeException("not possible!");
}
- private final class Receiver extends BroadcastReceiver {
+ @VisibleForTesting
+ final class Receiver extends BroadcastReceiver {
public void init() {
// Register for Intent broadcasts for...
IntentFilter filter = new IntentFilter();
+ filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
@@ -195,7 +198,13 @@
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
- if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
+ if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) {
+ ThreadUtils.postOnBackgroundThread(() -> {
+ if (mPowerManager.isPowerSaveMode()) {
+ mWarnings.dismissLowBatteryWarning();
+ }
+ });
+ } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
final int oldBatteryLevel = mBatteryLevel;
mBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 100);
final int oldBatteryStatus = mBatteryStatus;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java b/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java
index 2629f30..aa2f8d1 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java
@@ -45,7 +45,7 @@
}
public void setNumPages(int numPages) {
- setVisibility(numPages > 1 ? View.VISIBLE : View.INVISIBLE);
+ setVisibility(numPages > 1 ? View.VISIBLE : View.GONE);
if (mAnimating) {
Log.w(TAG, "setNumPages during animation");
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
index c548cf6..d8d07c0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
@@ -46,6 +46,7 @@
private final ArrayList<TilePage> mPages = new ArrayList<>();
private PageIndicator mPageIndicator;
+ private float mPageIndicatorPosition;
private int mNumPages;
private PageListener mPageListener;
@@ -145,6 +146,8 @@
public void setPageIndicator(PageIndicator indicator) {
mPageIndicator = indicator;
+ mPageIndicator.setNumPages(mNumPages);
+ mPageIndicator.setLocation(mPageIndicatorPosition);
}
@Override
@@ -212,7 +215,6 @@
}
if (DEBUG) Log.d(TAG, "Size: " + mNumPages);
mPageIndicator.setNumPages(mNumPages);
- mPageIndicator.setVisibility(mNumPages > 1 ? View.VISIBLE : View.GONE);
setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
setCurrentItem(0, false);
@@ -221,6 +223,12 @@
@Override
public boolean updateResources() {
+ // Update bottom padding, useful for removing extra space once the panel page indicator is
+ // hidden.
+ setPadding(0, 0, 0,
+ getContext().getResources().getDimensionPixelSize(
+ R.dimen.qs_paged_tile_layout_padding_bottom));
+
boolean changed = false;
for (int i = 0; i < mPages.size(); i++) {
changed |= mPages.get(i).updateResources();
@@ -326,7 +334,8 @@
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
if (mPageIndicator == null) return;
- mPageIndicator.setLocation(position + positionOffset);
+ mPageIndicatorPosition = position + positionOffset;
+ mPageIndicator.setLocation(mPageIndicatorPosition);
if (mPageListener != null) {
mPageListener.onPageChanged(positionOffsetPixels == 0 &&
(isLayoutRtl() ? position == mPages.size() - 1 : position == 0));
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
index a9455f2..1c98ef0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
@@ -38,10 +38,10 @@
private final Point mSizePoint = new Point();
private int mHeightOverride = -1;
- protected View mQSPanel;
+ private QSPanel mQSPanel;
private View mQSDetail;
- protected View mHeader;
- protected float mQsExpansion;
+ private View mHeader;
+ private float mQsExpansion;
private QSCustomizer mQSCustomizer;
private View mQSFooter;
@@ -188,7 +188,7 @@
setMargins(mQSDetail);
setMargins(mBackground);
setMargins(mQSFooter);
- setMargins(mQSPanel);
+ mQSPanel.setMargins(mSideMargins);
setMargins(mHeader);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java
index 28dd26f..abe819b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java
@@ -17,6 +17,7 @@
package com.android.systemui.qs;
import static android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS;
+import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import android.content.Context;
import android.content.Intent;
@@ -35,6 +36,7 @@
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.Toast;
import com.android.internal.logging.MetricsLogger;
@@ -66,6 +68,7 @@
private UserInfoController mUserInfoController;
private SettingsButton mSettingsButton;
protected View mSettingsContainer;
+ private PageIndicator mPageIndicator;
private CarrierText mCarrierText;
private boolean mQsDisabled;
@@ -108,6 +111,8 @@
Dependency.get(ActivityStarter.class).postQSRunnableDismissingKeyguard(() ->
mQsPanel.showEdit(view)));
+ mPageIndicator = findViewById(R.id.footer_page_indicator);
+
mSettingsButton = findViewById(R.id.settings_button);
mSettingsContainer = findViewById(R.id.settings_button_container);
mSettingsButton.setOnClickListener(this);
@@ -167,6 +172,14 @@
private void updateResources() {
updateFooterAnimator();
+
+ // Update the width and weight of the actions container as the page indicator can sometimes
+ // show and the layout needs to center it between the carrier text and actions container.
+ LinearLayout.LayoutParams params =
+ (LinearLayout.LayoutParams) mActionsContainer.getLayoutParams();
+ params.width = mContext.getResources().getInteger(R.integer.qs_footer_actions_width);
+ params.weight = mContext.getResources().getInteger(R.integer.qs_footer_actions_weight);
+ mActionsContainer.setLayoutParams(params);
}
private void updateFooterAnimator() {
@@ -181,6 +194,7 @@
.addFloat(mMobileGroup, "alpha", 0, 1)
.addFloat(mActionsContainer, "alpha", 0, 1)
.addFloat(mDragHandle, "alpha", 1, 0, 0)
+ .addFloat(mPageIndicator, "alpha", 0, 1)
.setStartDelay(0.15f)
.build();
}
@@ -291,6 +305,7 @@
mQsPanel = qsPanel;
if (mQsPanel != null) {
mMultiUserSwitch.setQsPanel(qsPanel);
+ mQsPanel.setFooterPageIndicator(mPageIndicator);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index 6368a6b..0876a5d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -16,6 +16,7 @@
package com.android.systemui.qs;
+import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static com.android.systemui.qs.tileimpl.QSTileImpl.getColorForState;
import android.annotation.Nullable;
@@ -63,7 +64,6 @@
protected final ArrayList<TileRecord> mRecords = new ArrayList<>();
protected final View mBrightnessView;
private final H mHandler = new H();
- private final View mPageIndicator;
private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);
private final QSTileRevealController mQsTileRevealController;
@@ -75,6 +75,8 @@
protected QSTileHost mHost;
protected QSSecurityFooter mFooter;
+ private PageIndicator mPanelPageIndicator;
+ private PageIndicator mFooterPageIndicator;
private boolean mGridContentVisible = true;
protected QSTileLayout mTileLayout;
@@ -104,13 +106,13 @@
mTileLayout.setListening(mListening);
addView((View) mTileLayout);
- mPageIndicator = LayoutInflater.from(context).inflate(
+ mPanelPageIndicator = (PageIndicator) LayoutInflater.from(context).inflate(
R.layout.qs_page_indicator, this, false);
- addView(mPageIndicator);
+ addView(mPanelPageIndicator);
- ((PagedTileLayout) mTileLayout).setPageIndicator((PageIndicator) mPageIndicator);
+ ((PagedTileLayout) mTileLayout).setPageIndicator(mPanelPageIndicator);
mQsTileRevealController = new QSTileRevealController(mContext, this,
- ((PagedTileLayout) mTileLayout));
+ (PagedTileLayout) mTileLayout);
addDivider();
@@ -136,7 +138,7 @@
}
public View getPageIndicator() {
- return mPageIndicator;
+ return mPanelPageIndicator;
}
public QSTileRevealController getQsTileRevealController() {
@@ -241,6 +243,38 @@
}
}
+ /**
+ * Links the footer's page indicator, which is used in landscape orientation to save space.
+ *
+ * @param pageIndicator indicator to use for page scrolling
+ */
+ public void setFooterPageIndicator(PageIndicator pageIndicator) {
+ if (mTileLayout instanceof PagedTileLayout) {
+ mFooterPageIndicator = pageIndicator;
+ updatePageIndicator();
+ }
+ }
+
+ private void updatePageIndicator() {
+ if (mTileLayout instanceof PagedTileLayout) {
+ // If we're in landscape, and we have the footer page indicator (which we should if the
+ // footer has been initialized & linked), then we'll show the footer page indicator to
+ // save space in the main QS tile area. Otherwise, we'll use the default one under the
+ // tiles/above the footer.
+ boolean shouldUseFooterPageIndicator =
+ getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE
+ && mFooterPageIndicator != null;
+
+ mPanelPageIndicator.setVisibility(View.GONE);
+ if (mFooterPageIndicator != null) {
+ mFooterPageIndicator.setVisibility(View.GONE);
+ }
+
+ ((PagedTileLayout) mTileLayout).setPageIndicator(
+ shouldUseFooterPageIndicator ? mFooterPageIndicator : mPanelPageIndicator);
+ }
+ }
+
public QSTileHost getHost() {
return mHost;
}
@@ -248,6 +282,9 @@
public void updateResources() {
final Resources res = mContext.getResources();
setPadding(0, res.getDimensionPixelSize(R.dimen.qs_panel_padding_top), 0, res.getDimensionPixelSize(R.dimen.qs_panel_padding_bottom));
+
+ updatePageIndicator();
+
for (TileRecord r : mRecords) {
r.tile.clearState();
}
@@ -578,6 +615,17 @@
mFooter.showDeviceMonitoringDialog();
}
+ public void setMargins(int sideMargins) {
+ for (int i = 0; i < getChildCount(); i++) {
+ View view = getChildAt(i);
+ if (view != mTileLayout) {
+ LayoutParams lp = (LayoutParams) view.getLayoutParams();
+ lp.leftMargin = sideMargins;
+ lp.rightMargin = sideMargins;
+ }
+ }
+ }
+
private class H extends Handler {
private static final int SHOW_DETAIL = 1;
private static final int SET_TILE_VISIBILITY = 2;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
index 64e7a63..6d46e85 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
@@ -93,7 +93,7 @@
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int numTiles = mRecords.size();
- final int width = MeasureSpec.getSize(widthMeasureSpec);
+ final int width = MeasureSpec.getSize(widthMeasureSpec) - mPaddingLeft - mPaddingRight;
final int numRows = (numTiles + mColumns - 1) / mColumns;
mCellWidth = (width - mSidePadding * 2 - (mCellMarginHorizontal * mColumns)) / mColumns;
@@ -159,6 +159,6 @@
}
private int getColumnStart(int column) {
- return column * (mCellWidth + mCellMarginHorizontal) + mCellMarginHorizontal;
+ return column * (mCellWidth + mCellMarginHorizontal) + mCellMarginHorizontal + mPaddingLeft;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
index f2a7adf..1736f38 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
@@ -36,6 +36,7 @@
import android.service.vr.IVrManager;
import android.service.vr.IVrStateCallbacks;
import android.util.Log;
+import android.util.MathUtils;
import android.widget.ImageView;
import com.android.internal.logging.MetricsLogger;
@@ -49,8 +50,15 @@
private static final String TAG = "StatusBar.BrightnessController";
private static final boolean SHOW_AUTOMATIC_ICON = false;
+ private static final int SLIDER_MAX = 1023;
private static final int SLIDER_ANIMATION_DURATION = 3000;
+ // Hybrid Log Gamma constant values
+ private static final float R = 0.5f;
+ private static final float A = 0.17883277f;
+ private static final float B = 0.28466892f;
+ private static final float C = 0.55991073f;
+
private static final int MSG_UPDATE_ICON = 0;
private static final int MSG_UPDATE_SLIDER = 1;
private static final int MSG_SET_CHECKED = 2;
@@ -60,8 +68,10 @@
private final int mMinimumBacklight;
private final int mMaximumBacklight;
+ private final int mDefaultBacklight;
private final int mMinimumBacklightForVr;
private final int mMaximumBacklightForVr;
+ private final int mDefaultBacklightForVr;
private final Context mContext;
private final ImageView mIcon;
@@ -203,21 +213,18 @@
private final Runnable mUpdateSliderRunnable = new Runnable() {
@Override
public void run() {
- if (mIsVrModeEnabled) {
- int value = Settings.System.getIntForUser(mContext.getContentResolver(),
- Settings.System.SCREEN_BRIGHTNESS_FOR_VR, mMaximumBacklight,
+ final int val;
+ final boolean inVrMode = mIsVrModeEnabled;
+ if (inVrMode) {
+ val = Settings.System.getIntForUser(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS_FOR_VR, mDefaultBacklightForVr,
UserHandle.USER_CURRENT);
- mHandler.obtainMessage(MSG_UPDATE_SLIDER,
- mMaximumBacklightForVr - mMinimumBacklightForVr,
- value - mMinimumBacklightForVr).sendToTarget();
} else {
- int value;
- value = Settings.System.getIntForUser(mContext.getContentResolver(),
- Settings.System.SCREEN_BRIGHTNESS, mMaximumBacklight,
+ val = Settings.System.getIntForUser(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS, mDefaultBacklight,
UserHandle.USER_CURRENT);
- mHandler.obtainMessage(MSG_UPDATE_SLIDER, mMaximumBacklight - mMinimumBacklight,
- value - mMinimumBacklight).sendToTarget();
}
+ mHandler.obtainMessage(MSG_UPDATE_SLIDER, val, inVrMode ? 1 : 0).sendToTarget();
}
};
@@ -239,8 +246,7 @@
updateIcon(msg.arg1 != 0);
break;
case MSG_UPDATE_SLIDER:
- mControl.setMax(msg.arg1);
- animateSliderTo(msg.arg2);
+ updateSlider(msg.arg1, msg.arg2 != 0);
break;
case MSG_SET_CHECKED:
mControl.setChecked(msg.arg1 != 0);
@@ -267,6 +273,7 @@
mContext = context;
mIcon = icon;
mControl = control;
+ mControl.setMax(SLIDER_MAX);
mBackgroundHandler = new Handler((Looper) Dependency.get(Dependency.BG_LOOPER));
mUserTracker = new CurrentUserTracker(mContext) {
@Override
@@ -277,11 +284,13 @@
};
mBrightnessObserver = new BrightnessObserver(mHandler);
- PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
+ PowerManager pm = context.getSystemService(PowerManager.class);
mMinimumBacklight = pm.getMinimumScreenBrightnessSetting();
mMaximumBacklight = pm.getMaximumScreenBrightnessSetting();
+ mDefaultBacklight = pm.getDefaultScreenBrightnessSetting();
mMinimumBacklightForVr = pm.getMinimumScreenBrightnessForVrSetting();
mMaximumBacklightForVr = pm.getMaximumScreenBrightnessForVrSetting();
+ mDefaultBacklightForVr = pm.getDefaultScreenBrightnessForVrSetting();
mAutomaticAvailable = context.getResources().getBoolean(
com.android.internal.R.bool.config_automatic_brightness_available);
@@ -350,38 +359,39 @@
mSliderAnimator.cancel();
}
+ final int min;
+ final int max;
+ final int metric;
+ final String setting;
+
if (mIsVrModeEnabled) {
- final int val = value + mMinimumBacklightForVr;
- if (stopTracking) {
- MetricsLogger.action(mContext, MetricsEvent.ACTION_BRIGHTNESS_FOR_VR, val);
- }
- setBrightness(val);
- if (!tracking) {
- AsyncTask.execute(new Runnable() {
- public void run() {
- Settings.System.putIntForUser(mContext.getContentResolver(),
- Settings.System.SCREEN_BRIGHTNESS_FOR_VR, val,
- UserHandle.USER_CURRENT);
- }
- });
- }
+ metric = MetricsEvent.ACTION_BRIGHTNESS_FOR_VR;
+ min = mMinimumBacklightForVr;
+ max = mMaximumBacklightForVr;
+ setting = Settings.System.SCREEN_BRIGHTNESS_FOR_VR;
} else {
- final int val = value + mMinimumBacklight;
- if (stopTracking) {
- final int metric = mAutomatic ?
- MetricsEvent.ACTION_BRIGHTNESS_AUTO : MetricsEvent.ACTION_BRIGHTNESS;
- MetricsLogger.action(mContext, metric, val);
- }
- setBrightness(val);
- if (!tracking) {
- AsyncTask.execute(new Runnable() {
- public void run() {
- Settings.System.putIntForUser(mContext.getContentResolver(),
- Settings.System.SCREEN_BRIGHTNESS, val,
- UserHandle.USER_CURRENT);
- }
- });
- }
+ metric = mAutomatic
+ ? MetricsEvent.ACTION_BRIGHTNESS_AUTO
+ : MetricsEvent.ACTION_BRIGHTNESS;
+ min = mMinimumBacklight;
+ max = mMaximumBacklight;
+ setting = Settings.System.SCREEN_BRIGHTNESS;
+ }
+
+ final int val = convertGammaToLinear(value, min, max);
+
+ if (stopTracking) {
+ MetricsLogger.action(mContext, metric, val);
+ }
+
+ setBrightness(val);
+ if (!tracking) {
+ AsyncTask.execute(new Runnable() {
+ public void run() {
+ Settings.System.putIntForUser(mContext.getContentResolver(),
+ setting, val, UserHandle.USER_CURRENT);
+ }
+ });
}
for (BrightnessStateChangeCallback cb : mChangeCallbacks) {
@@ -430,6 +440,28 @@
}
}
+ private void updateSlider(int val, boolean inVrMode) {
+ final int min;
+ final int max;
+ if (inVrMode) {
+ min = mMinimumBacklightForVr;
+ max = mMaximumBacklightForVr;
+ } else {
+ min = mMinimumBacklight;
+ max = mMaximumBacklight;
+ }
+ if (val == convertGammaToLinear(mControl.getValue(), min, max)) {
+ // If we have more resolution on the slider than we do in the actual setting, then
+ // multiple slider positions will map to the same setting value. Thus, if we see a
+ // setting value here that maps to the current slider position, we don't bother to
+ // calculate the new slider position since it may differ and look like a brightness
+ // change to the user even though it isn't one.
+ return;
+ }
+ final int sliderVal = convertLinearToGamma(val, min, max);
+ animateSliderTo(sliderVal);
+ }
+
private void animateSliderTo(int target) {
if (!mControlValueInitialized) {
// Don't animate the first value since it's default state isn't meaningful to users.
@@ -448,4 +480,77 @@
mSliderAnimator.setDuration(SLIDER_ANIMATION_DURATION);
mSliderAnimator.start();
}
+
+ /**
+ * A function for converting from the linear space that the setting works in to the
+ * gamma space that the slider works in.
+ *
+ * The gamma space effectively provides us a way to make linear changes to the slider that
+ * result in linear changes in perception. If we made changes to the slider in the linear space
+ * then we'd see an approximately logarithmic change in perception (c.f. Fechner's Law).
+ *
+ * Internally, this implements the Hybrid Log Gamma opto-electronic transfer function, which is
+ * a slight improvement to the typical gamma transfer function for displays whose max
+ * brightness exceeds the 120 nit reference point, but doesn't set a specific reference
+ * brightness like the PQ function does.
+ *
+ * Note that this transfer function is only valid if the display's backlight value is a linear
+ * control. If it's calibrated to be something non-linear, then a different transfer function
+ * should be used.
+ *
+ * @param val The brightness setting value.
+ * @param min The minimum acceptable value for the setting.
+ * @param max The maximum acceptable value for the setting.
+ *
+ * @return The corresponding slider value
+ */
+ private static final int convertLinearToGamma(int val, int min, int max) {
+ // For some reason, HLG normalizes to the range [0, 12] rather than [0, 1]
+ final float normalizedVal = MathUtils.norm(min, max, val) * 12;
+ final float ret;
+ if (normalizedVal <= 1f) {
+ ret = MathUtils.sqrt(normalizedVal) * R;
+ } else {
+ ret = A * MathUtils.log(normalizedVal - B) + C;
+ }
+
+ return Math.round(MathUtils.lerp(0, SLIDER_MAX, ret));
+ }
+
+ /**
+ * A function for converting from the gamma space that the slider works in to the
+ * linear space that the setting works in.
+ *
+ * The gamma space effectively provides us a way to make linear changes to the slider that
+ * result in linear changes in perception. If we made changes to the slider in the linear space
+ * then we'd see an approximately logarithmic change in perception (c.f. Fechner's Law).
+ *
+ * Internally, this implements the Hybrid Log Gamma electro-optical transfer function, which is
+ * a slight improvement to the typical gamma transfer function for displays whose max
+ * brightness exceeds the 120 nit reference point, but doesn't set a specific reference
+ * brightness like the PQ function does.
+ *
+ * Note that this transfer function is only valid if the display's backlight value is a linear
+ * control. If it's calibrated to be something non-linear, then a different transfer function
+ * should be used.
+ *
+ * @param val The slider value.
+ * @param min The minimum acceptable value for the setting.
+ * @param max The maximum acceptable value for the setting.
+ *
+ * @return The corresponding setting value.
+ */
+ private static final int convertGammaToLinear(int val, int min, int max) {
+ final float normalizedVal = MathUtils.norm(0, SLIDER_MAX, val);
+ final float ret;
+ if (normalizedVal <= R) {
+ ret = MathUtils.sq(normalizedVal/R);
+ } else {
+ ret = MathUtils.exp((normalizedVal - C) / A) + B;
+ }
+
+ // HLG is normalized to the range [0, 12], so we need to re-normalize to the range [0, 1]
+ // in order to derive the correct setting value.
+ return Math.round(MathUtils.lerp(min, max, ret / 12));
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java
index 2d30ce1..e7c8c94 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java
@@ -6,7 +6,7 @@
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.util.Log;
+import android.view.Display;
import java.util.HashMap;
import java.util.List;
@@ -49,6 +49,9 @@
for (int i = 0; i < componentNames.length; i++) {
mButtonsByComponentName.put(componentNames[i], facetButton);
}
+ // Using the following as a default button for display id info it's not
+ // attached to a screen at this point so it can't be extracted here.
+ mSelectedFacetButton = facetButton;
}
public void removeAll() {
@@ -61,38 +64,56 @@
/**
* This will unselect the currently selected CarFacetButton and determine which one should be
* selected next. It does this by reading the properties on the CarFacetButton and seeing if
- * they are a match with the supplied taskInfo.
- * Order of selection detection ComponentName, PackageName, Category
+ * they are a match with the supplied StackInfo list.
+ * The order of selection detection is ComponentName, PackageName then Category
+ * They will then be compared with the supplied StackInfo list.
+ * The StackInfo is expected to be supplied in order of recency and StackInfo will only be used
+ * for consideration if it has the same displayId as the CarFacetButtons.
* @param taskInfo of the currently running application
*/
- public void taskChanged(ActivityManager.RunningTaskInfo taskInfo) {
- if (taskInfo == null || taskInfo.baseActivity == null) {
- return;
- }
- String packageName = taskInfo.baseActivity.getPackageName();
+ public void taskChanged(List<ActivityManager.StackInfo> stackInfoList) {
+ int displayId = getDisplayId();
+ for (ActivityManager.StackInfo stackInfo :stackInfoList) {
+ // if the display id is known and does not match the stack we skip
+ if (displayId != -1 && displayId != stackInfo.displayId) {
+ continue;
+ }
- // If the package name belongs to a filter, then highlight appropriate button in
- // the navigation bar.
- if (mSelectedFacetButton != null) {
- mSelectedFacetButton.setSelected(false);
- }
- CarFacetButton facetButton = findFacetButtongByComponentName(taskInfo.topActivity);
- if (facetButton == null) {
- facetButton = mButtonsByPackage.get(packageName);
- }
- if (facetButton != null) {
- facetButton.setSelected(true);
- mSelectedFacetButton = facetButton;
- } else {
- String category = getPackageCategory(packageName);
- if (category != null) {
- facetButton = mButtonsByCategory.get(category);
+ if (mSelectedFacetButton != null) {
+ mSelectedFacetButton.setSelected(false);
+ }
+
+ String packageName = stackInfo.topActivity.getPackageName();
+ CarFacetButton facetButton = findFacetButtongByComponentName(stackInfo.topActivity);
+ if (facetButton == null) {
+ facetButton = mButtonsByPackage.get(packageName);
+ }
+
+ if (facetButton == null) {
+ String category = getPackageCategory(packageName);
+ if (category != null) {
+ facetButton = mButtonsByCategory.get(category);
+ }
+ }
+
+ if (facetButton != null) {
facetButton.setSelected(true);
mSelectedFacetButton = facetButton;
+ return;
}
}
}
+ private int getDisplayId() {
+ if (mSelectedFacetButton != null) {
+ Display display = mSelectedFacetButton.getDisplay();
+ if (display != null) {
+ return display.getDisplayId();
+ }
+ }
+ return -1;
+ }
+
private CarFacetButton findFacetButtongByComponentName(ComponentName componentName) {
CarFacetButton button = mButtonsByComponentName.get(componentName.flattenToShortString());
return (button != null) ? button :
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
index 008794c..9c60f5c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
@@ -25,9 +25,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
-import android.view.ViewStub;
import android.view.WindowManager;
-import android.widget.LinearLayout;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.BatteryMeterView;
@@ -406,9 +404,12 @@
private class TaskStackListenerImpl extends SysUiTaskStackChangeListener {
@Override
public void onTaskStackChanged() {
- ActivityManager.RunningTaskInfo runningTaskInfo =
- ActivityManagerWrapper.getInstance().getRunningTask();
- mCarFacetButtonController.taskChanged(runningTaskInfo);
+ try {
+ mCarFacetButtonController.taskChanged(
+ ActivityManager.getService().getAllStackInfos());
+ } catch (Exception e) {
+ Log.e(TAG, "Getting StackInfo from activity manager failed", e);
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
index 60a3474..3e01aec 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -45,6 +45,8 @@
import com.android.systemui.classifier.FalsingManager;
import com.android.systemui.keyguard.DismissCallbackRegistry;
+import java.io.PrintWriter;
+
/**
* A class which manages the bouncer on the lockscreen.
*/
@@ -60,6 +62,7 @@
private final FalsingManager mFalsingManager;
private final DismissCallbackRegistry mDismissCallbackRegistry;
private final Handler mHandler;
+ private final BouncerExpansionCallback mExpansionCallback;
private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
new KeyguardUpdateMonitorCallback() {
@Override
@@ -79,7 +82,8 @@
public KeyguardBouncer(Context context, ViewMediatorCallback callback,
LockPatternUtils lockPatternUtils, ViewGroup container,
- DismissCallbackRegistry dismissCallbackRegistry, FalsingManager falsingManager) {
+ DismissCallbackRegistry dismissCallbackRegistry, FalsingManager falsingManager,
+ BouncerExpansionCallback expansionCallback) {
mContext = context;
mCallback = callback;
mLockPatternUtils = lockPatternUtils;
@@ -87,6 +91,7 @@
KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateMonitorCallback);
mFalsingManager = falsingManager;
mDismissCallbackRegistry = dismissCallbackRegistry;
+ mExpansionCallback = expansionCallback;
mHandler = new Handler();
}
@@ -157,7 +162,7 @@
* the translation is performed manually by the user, otherwise FalsingManager
* will never be notified and its internal state will be out of sync.
*/
- public void onFullyShown() {
+ private void onFullyShown() {
mFalsingManager.onBouncerShown();
if (mKeyguardView == null) {
Log.wtf(TAG, "onFullyShown when view was null");
@@ -167,11 +172,9 @@
}
/**
- * This method must be called at the end of the bouncer animation when
- * the translation is performed manually by the user, otherwise FalsingManager
- * will never be notified and its internal state will be out of sync.
+ * @see #onFullyShown()
*/
- public void onFullyHidden() {
+ private void onFullyHidden() {
if (!mShowingSoon) {
cancelShowRunnable();
if (mRoot != null) {
@@ -326,12 +329,21 @@
* @see StatusBarKeyguardViewManager#onPanelExpansionChanged
*/
public void setExpansion(float fraction) {
+ float oldExpansion = mExpansion;
mExpansion = fraction;
if (mKeyguardView != null && !mIsAnimatingAway) {
float alpha = MathUtils.map(ALPHA_EXPANSION_THRESHOLD, 1, 1, 0, fraction);
mKeyguardView.setAlpha(MathUtils.constrain(alpha, 0f, 1f));
mKeyguardView.setTranslationY(fraction * mKeyguardView.getHeight());
}
+
+ if (fraction == 0 && oldExpansion != 0) {
+ onFullyShown();
+ mExpansionCallback.onFullyShown();
+ } else if (fraction == 1 && oldExpansion != 0) {
+ onFullyHidden();
+ mExpansionCallback.onFullyHidden();
+ }
}
public boolean willDismissWithAction() {
@@ -437,4 +449,20 @@
ensureView();
mKeyguardView.finish(strongAuth, KeyguardUpdateMonitor.getCurrentUser());
}
+
+ public void dump(PrintWriter pw) {
+ pw.println("KeyguardBouncer");
+ pw.println(" isShowing(): " + isShowing());
+ pw.println(" mStatusBarHeight: " + mStatusBarHeight);
+ pw.println(" mExpansion: " + mExpansion);
+ pw.println(" mKeyguardView; " + mKeyguardView);
+ pw.println(" mShowingSoon: " + mKeyguardView);
+ pw.println(" mBouncerPromptReason: " + mBouncerPromptReason);
+ pw.println(" mIsAnimatingAway: " + mIsAnimatingAway);
+ }
+
+ public interface BouncerExpansionCallback {
+ void onFullyShown();
+ void onFullyHidden();
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
index 1fb1ddd..d9a55c5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
@@ -232,8 +232,7 @@
if (mCurrentlySecure) {
alphaKeyguard = 1;
} else {
- alphaKeyguard = Math.max(0, Math.min(1, (y - mMinTopMargin)
- / Math.max(1f, getExpandedClockPosition() - mMinTopMargin)));
+ alphaKeyguard = Math.max(0, y / Math.max(1f, getExpandedClockPosition()));
alphaKeyguard = Interpolators.ACCELERATE.getInterpolation(alphaKeyguard);
}
return MathUtils.lerp(alphaKeyguard, 1f, mDarkAmount);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
index d61d6e2..8b8cbfe 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
@@ -66,9 +66,12 @@
* scrim alpha yet.
*/
private boolean mHasLightNavigationBar;
- private boolean mScrimAlphaBelowThreshold;
- private boolean mInvertLightNavBarWithScrim;
- private float mScrimAlpha;
+
+ /**
+ * {@code true} if {@link #mHasLightNavigationBar} should be ignored and forcefully make
+ * {@link #mNavigationLight} {@code false}.
+ */
+ private boolean mForceDarkForScrim;
private final Rect mLastFullscreenBounds = new Rect();
private final Rect mLastDockedBounds = new Rect();
@@ -129,9 +132,7 @@
boolean last = mNavigationLight;
mHasLightNavigationBar = isLight(vis, navigationBarMode,
View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
- mNavigationLight = mHasLightNavigationBar
- && (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim)
- && !mQsCustomizing;
+ mNavigationLight = mHasLightNavigationBar && !mForceDarkForScrim && !mQsCustomizing;
if (mNavigationLight != last) {
updateNavigation();
}
@@ -154,20 +155,17 @@
reevaluate();
}
- public void setScrimAlpha(float alpha) {
- mScrimAlpha = alpha;
- boolean belowThresholdBefore = mScrimAlphaBelowThreshold;
- mScrimAlphaBelowThreshold = mScrimAlpha < NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD;
- if (mHasLightNavigationBar && belowThresholdBefore != mScrimAlphaBelowThreshold) {
- reevaluate();
- }
- }
-
- public void setScrimColor(GradientColors colors) {
- boolean invertLightNavBarWithScrimBefore = mInvertLightNavBarWithScrim;
- mInvertLightNavBarWithScrim = !colors.supportsDarkText();
- if (mHasLightNavigationBar
- && invertLightNavBarWithScrimBefore != mInvertLightNavBarWithScrim) {
+ public void setScrimState(ScrimState scrimState, float scrimBehindAlpha,
+ GradientColors scrimInFrontColor) {
+ boolean forceDarkForScrimLast = mForceDarkForScrim;
+ // For BOUNCER/BOUNCER_SCRIMMED cases, we assume that alpha is always below threshold.
+ // This enables IMEs to control the navigation bar color.
+ // For other cases, scrim should be able to veto the light navigation bar.
+ mForceDarkForScrim = scrimState != ScrimState.BOUNCER
+ && scrimState != ScrimState.BOUNCER_SCRIMMED
+ && scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD
+ && !scrimInFrontColor.supportsDarkText();
+ if (mHasLightNavigationBar && (mForceDarkForScrim != forceDarkForScrimLast)) {
reevaluate();
}
}
@@ -257,8 +255,9 @@
pw.print(" mLastStatusBarMode="); pw.print(mLastStatusBarMode);
pw.print(" mLastNavigationBarMode="); pw.println(mLastNavigationBarMode);
- pw.print(" mScrimAlpha="); pw.print(mScrimAlpha);
- pw.print(" mScrimAlphaBelowThreshold="); pw.println(mScrimAlphaBelowThreshold);
+ pw.print(" mForceDarkForScrim="); pw.print(mForceDarkForScrim);
+ pw.print(" mQsCustomizing="); pw.println(mQsCustomizing);
+
pw.println();
LightBarTransitionsController transitionsController =
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
index cc143bb..4e8003e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -41,6 +41,7 @@
import com.android.internal.colorextraction.ColorExtractor.GradientColors;
import com.android.internal.colorextraction.ColorExtractor.OnColorsChangedListener;
import com.android.internal.graphics.ColorUtils;
+import com.android.internal.util.function.TriConsumer;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
@@ -144,8 +145,7 @@
private int mCurrentBehindTint;
private boolean mWallpaperVisibilityTimedOut;
private int mScrimsVisibility;
- private final Consumer<GradientColors> mScrimInFrontColorListener;
- private final Consumer<Float> mScrimBehindAlphaListener;
+ private final TriConsumer<ScrimState, Float, GradientColors> mScrimStateListener;
private final Consumer<Integer> mScrimVisibleListener;
private boolean mBlankScreen;
private boolean mScreenBlankingCallbackCalled;
@@ -163,14 +163,12 @@
private boolean mKeyguardOccluded;
public ScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
- Consumer<Float> scrimBehindAlphaListener,
- Consumer<GradientColors> scrimInFrontColorListener,
+ TriConsumer<ScrimState, Float, GradientColors> scrimStateListener,
Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters,
AlarmManager alarmManager) {
mScrimBehind = scrimBehind;
mScrimInFront = scrimInFront;
- mScrimBehindAlphaListener = scrimBehindAlphaListener;
- mScrimInFrontColorListener = scrimInFrontColorListener;
+ mScrimStateListener = scrimStateListener;
mScrimVisibleListener = scrimVisibleListener;
mContext = scrimBehind.getContext();
mUnlockMethodCache = UnlockMethodCache.getInstance(mContext);
@@ -300,6 +298,8 @@
} else {
scheduleUpdate();
}
+
+ dispatchScrimState(mScrimBehind.getViewAlpha());
}
public ScrimState getState() {
@@ -375,7 +375,7 @@
setOrAdaptCurrentAnimation(mScrimBehind);
setOrAdaptCurrentAnimation(mScrimInFront);
- mScrimBehindAlphaListener.accept(mScrimBehind.getViewAlpha());
+ dispatchScrimState(mScrimBehind.getViewAlpha());
}
}
@@ -484,7 +484,7 @@
float minOpacity = ColorUtils.calculateMinimumBackgroundAlpha(textColor, mainColor,
4.5f /* minimumContrast */) / 255f;
mScrimBehindAlpha = Math.max(mScrimBehindAlphaResValue, minOpacity);
- mScrimInFrontColorListener.accept(mScrimInFront.getColors());
+ dispatchScrimState(mScrimBehind.getViewAlpha());
}
// We want to override the back scrim opacity for the AOD state
@@ -503,6 +503,10 @@
dispatchScrimsVisible();
}
+ private void dispatchScrimState(float alpha) {
+ mScrimStateListener.accept(mState, alpha, mScrimInFront.getColors());
+ }
+
private void dispatchScrimsVisible() {
final int currentScrimVisibility;
if (mScrimInFront.getViewAlpha() == 1 || mScrimBehind.getViewAlpha() == 1) {
@@ -712,7 +716,7 @@
}
if (scrim == mScrimBehind) {
- mScrimBehindAlphaListener.accept(alpha);
+ dispatchScrimState(alpha);
}
final boolean wantsAlphaUpdate = alpha != currentAlpha;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index a3da807..e7d5c4e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -918,12 +918,7 @@
ScrimView scrimInFront = mStatusBarWindow.findViewById(R.id.scrim_in_front);
mScrimController = SystemUIFactory.getInstance().createScrimController(
scrimBehind, scrimInFront, mLockscreenWallpaper,
- scrimBehindAlpha -> {
- mLightBarController.setScrimAlpha(scrimBehindAlpha);
- },
- scrimInFrontColor -> {
- mLightBarController.setScrimColor(scrimInFrontColor);
- },
+ (state, alpha, color) -> mLightBarController.setScrimState(state, alpha, color),
scrimsVisible -> {
if (mStatusBarWindowManager != null) {
mStatusBarWindowManager.setScrimsVisibility(scrimsVisible);
@@ -2768,6 +2763,10 @@
mScrimController.dump(fd, pw, args);
}
+ if (mStatusBarKeyguardViewManager != null) {
+ mStatusBarKeyguardViewManager.dump(pw);
+ }
+
if (DUMPTRUCK) {
synchronized (mEntryManager.getNotificationData()) {
mEntryManager.getNotificationData().dump(pw, " ");
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index 670c68f..e207eb0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -42,7 +42,9 @@
import com.android.systemui.keyguard.DismissCallbackRegistry;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.RemoteInputController;
+import com.android.systemui.statusbar.phone.KeyguardBouncer.BouncerExpansionCallback;
+import java.io.PrintWriter;
import java.util.ArrayList;
/**
@@ -71,6 +73,17 @@
protected final Context mContext;
private final StatusBarWindowManager mStatusBarWindowManager;
+ private final BouncerExpansionCallback mExpansionCallback = new BouncerExpansionCallback() {
+ @Override
+ public void onFullyShown() {
+ updateStates();
+ }
+
+ @Override
+ public void onFullyHidden() {
+ updateStates();
+ }
+ };
protected LockPatternUtils mLockPatternUtils;
protected ViewMediatorCallback mViewMediatorCallback;
@@ -133,7 +146,8 @@
mContainer = container;
mFingerprintUnlockController = fingerprintUnlockController;
mBouncer = SystemUIFactory.getInstance().createKeyguardBouncer(mContext,
- mViewMediatorCallback, mLockPatternUtils, container, dismissCallbackRegistry);
+ mViewMediatorCallback, mLockPatternUtils, container, dismissCallbackRegistry,
+ mExpansionCallback);
mContainer.addOnLayoutChangeListener(this::onContainerLayout);
mNotificationPanelView = notificationPanelView;
notificationPanelView.setExpansionListener(this::onPanelExpansionChanged);
@@ -160,8 +174,6 @@
if (expansion != 1 && tracking && !mBouncer.isShowing()
&& !mBouncer.isAnimatingAway()) {
mBouncer.show(false /* resetSecuritySelection */, false /* animated */);
- } else if (expansion == 0 || expansion == 1) {
- updateStates();
}
}
}
@@ -588,11 +600,6 @@
if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) {
mStatusBarWindowManager.setBouncerShowing(bouncerShowing);
mStatusBar.setBouncerShowing(bouncerShowing);
- if (bouncerShowing) {
- mBouncer.onFullyShown();
- } else {
- mBouncer.onFullyHidden();
- }
}
KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
@@ -709,6 +716,22 @@
return mBouncer.willDismissWithAction();
}
+ public void dump(PrintWriter pw) {
+ pw.println("StatusBarKeyguardViewManager:");
+ pw.println(" mShowing: " + mShowing);
+ pw.println(" mOccluded: " + mOccluded);
+ pw.println(" mRemoteInputActive: " + mRemoteInputActive);
+ pw.println(" mDozing: " + mDozing);
+ pw.println(" mGoingToSleepVisibleNotOccluded: " + mGoingToSleepVisibleNotOccluded);
+ pw.println(" mAfterKeyguardGoneAction: " + mAfterKeyguardGoneAction);
+ pw.println(" mAfterKeyguardGoneRunnables: " + mAfterKeyguardGoneRunnables);
+ pw.println(" mPendingWakeupAction: " + mPendingWakeupAction);
+
+ if (mBouncer != null) {
+ mBouncer.dump(pw);
+ }
+ }
+
private static class DismissWithActionRequest {
final OnDismissAction dismissAction;
final Runnable cancelAction;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java
index 6d2f5ce..4d86ae9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java
@@ -299,8 +299,8 @@
// We're done squeezing buttons, so we can clear the priority queue.
mCandidateButtonQueueForSqueezing.clear();
- // Finally, we need to update corner radius and re-measure some buttons.
- updateCornerRadiusAndRemeasureButtonsIfNecessary(buttonPaddingHorizontal, maxChildHeight);
+ // Finally, we need to re-measure some buttons.
+ remeasureButtonsIfNecessary(buttonPaddingHorizontal, maxChildHeight);
setMeasuredDimension(
resolveSize(Math.max(getSuggestedMinimumWidth(), measuredWidth), widthMeasureSpec),
@@ -412,9 +412,8 @@
}
}
- private void updateCornerRadiusAndRemeasureButtonsIfNecessary(
+ private void remeasureButtonsIfNecessary(
int buttonPaddingHorizontal, int maxChildHeight) {
- final float cornerRadius = ((float) maxChildHeight) / 2;
final int maxChildHeightMeasure =
MeasureSpec.makeMeasureSpec(maxChildHeight, MeasureSpec.EXACTLY);
@@ -426,11 +425,6 @@
continue;
}
- // Update corner radius.
- GradientDrawable backgroundDrawable =
- (GradientDrawable) ((RippleDrawable) child.getBackground()).getDrawable(0);
- backgroundDrawable.setCornerRadius(cornerRadius);
-
boolean requiresNewMeasure = false;
int newWidth = child.getMeasuredWidth();
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
index e801607..d78a6cb 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
@@ -518,7 +518,6 @@
mHandler.removeMessages(H.SHOW);
mHandler.removeMessages(H.DISMISS);
rescheduleTimeoutH();
- if (mShowing) return;
mShowing = true;
initSettingsH();
@@ -546,7 +545,6 @@
protected void dismissH(int reason) {
mHandler.removeMessages(H.DISMISS);
mHandler.removeMessages(H.SHOW);
- if (!mShowing) return;
mDialogView.animate().cancel();
mShowing = false;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java
index 149f2de..d19715d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java
@@ -21,30 +21,37 @@
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
+
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.Intent;
import android.os.BatteryManager;
import android.os.HardwarePropertiesManager;
+import android.os.PowerManager;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.testing.TestableResources;
import android.test.suitebuilder.annotation.SmallTest;
+import com.android.settingslib.utils.ThreadUtils;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.power.PowerUI.WarningsUI;
import com.android.systemui.statusbar.phone.StatusBar;
import java.time.Duration;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
@@ -63,15 +70,18 @@
private WarningsUI mMockWarnings;
private PowerUI mPowerUI;
private EnhancedEstimates mEnhancedEstimates;
+ @Mock private PowerManager mPowerManager;
@Before
public void setup() {
+ MockitoAnnotations.initMocks(this);
mMockWarnings = mDependency.injectMockDependency(WarningsUI.class);
mEnhancedEstimates = mDependency.injectMockDependency(EnhancedEstimates.class);
mHardProps = mock(HardwarePropertiesManager.class);
mContext.putComponent(StatusBar.class, mock(StatusBar.class));
mContext.addMockSystemService(Context.HARDWARE_PROPERTIES_SERVICE, mHardProps);
+ mContext.addMockSystemService(Context.POWER_SERVICE, mPowerManager);
createPowerUi();
}
@@ -407,6 +417,38 @@
assertTrue(shouldDismiss);
}
+ @Test
+ public void testShouldDismissLowBatteryWarning_powerSaverModeEnabled()
+ throws InterruptedException {
+ when(mPowerManager.isPowerSaveMode()).thenReturn(true);
+
+ mPowerUI.start();
+ mPowerUI.mReceiver.onReceive(mContext,
+ new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
+
+ CountDownLatch latch = new CountDownLatch(1);
+ ThreadUtils.postOnBackgroundThread(() -> latch.countDown());
+ latch.await(5, TimeUnit.SECONDS);
+
+ verify(mMockWarnings).dismissLowBatteryWarning();
+ }
+
+ @Test
+ public void testShouldNotDismissLowBatteryWarning_powerSaverModeDisabled()
+ throws InterruptedException {
+ when(mPowerManager.isPowerSaveMode()).thenReturn(false);
+
+ mPowerUI.start();
+ mPowerUI.mReceiver.onReceive(mContext,
+ new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
+
+ CountDownLatch latch = new CountDownLatch(1);
+ ThreadUtils.postOnBackgroundThread(() -> latch.countDown());
+ latch.await(5, TimeUnit.SECONDS);
+
+ verify(mMockWarnings, never()).dismissLowBatteryWarning();
+ }
+
private void setCurrentTemp(float temp) {
when(mHardProps.getDeviceTemperatures(DEVICE_TEMPERATURE_SKIN, TEMPERATURE_CURRENT))
.thenReturn(new float[] { temp });
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
index c6b6546..73f05c4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
@@ -16,16 +16,11 @@
package com.android.systemui.statusbar.phone;
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
-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.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
@@ -33,7 +28,6 @@
import android.graphics.Color;
import android.support.test.filters.SmallTest;
-import android.test.UiThreadTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.ViewGroup;
@@ -73,6 +67,8 @@
private KeyguardHostView mKeyguardHostView;
@Mock
private ViewTreeObserver mViewTreeObserver;
+ @Mock
+ private KeyguardBouncer.BouncerExpansionCallback mExpansionCallback;
private KeyguardBouncer mBouncer;
@@ -84,7 +80,8 @@
when(mKeyguardHostView.getViewTreeObserver()).thenReturn(mViewTreeObserver);
when(mKeyguardHostView.getHeight()).thenReturn(500);
mBouncer = new KeyguardBouncer(getContext(), mViewMediatorCallback,
- mLockPatternUtils, container, mDismissCallbackRegistry, mFalsingManager) {
+ mLockPatternUtils, container, mDismissCallbackRegistry, mFalsingManager,
+ mExpansionCallback) {
@Override
protected void inflateView() {
super.inflateView();
@@ -166,23 +163,26 @@
}
@Test
- public void testOnFullyShown_notifiesFalsingManager() {
+ public void testSetExpansion_notifiesFalsingManager() {
mBouncer.ensureView();
- mBouncer.onFullyShown();
- verify(mFalsingManager).onBouncerShown();
- }
+ mBouncer.setExpansion(0.5f);
- @Test
- public void testOnFullyShown_notifiesKeyguardView() {
- mBouncer.ensureView();
- mBouncer.onFullyShown();
- verify(mKeyguardHostView).onResume();
- }
-
- @Test
- public void testOnFullyHidden_notifiesFalsingManager() {
- mBouncer.onFullyHidden();
+ mBouncer.setExpansion(1);
verify(mFalsingManager).onBouncerHidden();
+ verify(mExpansionCallback).onFullyHidden();
+
+ mBouncer.setExpansion(0);
+ verify(mFalsingManager).onBouncerShown();
+ verify(mExpansionCallback).onFullyShown();
+ }
+
+ @Test
+ public void testSetExpansion_notifiesKeyguardView() {
+ mBouncer.ensureView();
+ mBouncer.setExpansion(0.1f);
+
+ mBouncer.setExpansion(0);
+ verify(mKeyguardHostView).onResume();
}
@Test
@@ -207,6 +207,14 @@
}
@Test
+ public void testHide_notShowingAnymore() {
+ mBouncer.ensureView();
+ mBouncer.show(false /* resetSecuritySelection */);
+ mBouncer.hide(false /* destroyViews */);
+ Assert.assertFalse("Not showing", mBouncer.isShowing());
+ }
+
+ @Test
public void testShowPromptReason_propagates() {
mBouncer.ensureView();
mBouncer.showPromptReason(1);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
index 0416232..69508ac 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
@@ -43,6 +43,7 @@
import android.view.View;
import com.android.internal.colorextraction.ColorExtractor.GradientColors;
+import com.android.internal.util.function.TriConsumer;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.ScrimView;
@@ -66,9 +67,7 @@
private SynchronousScrimController mScrimController;
private ScrimView mScrimBehind;
private ScrimView mScrimInFront;
- private Consumer<Float> mScrimBehindAlphaCallback;
- private Consumer<GradientColors> mScrimInFrontColorCallback;
- private Consumer<Integer> mScrimVisibilityCallback;
+ private ScrimState mScrimState;
private float mScrimBehindAlpha;
private GradientColors mScrimInFrontColor;
private int mScrimVisibility;
@@ -77,6 +76,7 @@
private boolean mAlwaysOnEnabled;
private AlarmManager mAlarmManager;
+
@Before
public void setup() {
mScrimBehind = spy(new ScrimView(getContext()));
@@ -84,15 +84,16 @@
mWakeLock = mock(WakeLock.class);
mAlarmManager = mock(AlarmManager.class);
mAlwaysOnEnabled = true;
- mScrimBehindAlphaCallback = (Float alpha) -> mScrimBehindAlpha = alpha;
- mScrimInFrontColorCallback = (GradientColors color) -> mScrimInFrontColor = color;
- mScrimVisibilityCallback = (Integer visible) -> mScrimVisibility = visible;
mDozeParamenters = mock(DozeParameters.class);
when(mDozeParamenters.getAlwaysOn()).thenAnswer(invocation -> mAlwaysOnEnabled);
when(mDozeParamenters.getDisplayNeedsBlanking()).thenReturn(true);
mScrimController = new SynchronousScrimController(mScrimBehind, mScrimInFront,
- mScrimBehindAlphaCallback, mScrimInFrontColorCallback, mScrimVisibilityCallback,
- mDozeParamenters, mAlarmManager);
+ (scrimState, scrimBehindAlpha, scrimInFrontColor) -> {
+ mScrimState = scrimState;
+ mScrimBehindAlpha = scrimBehindAlpha;
+ mScrimInFrontColor = scrimInFrontColor;
+ },
+ visible -> mScrimVisibility = visible, mDozeParamenters, mAlarmManager);
}
@Test
@@ -211,6 +212,21 @@
}
@Test
+ public void scrimStateCallback() {
+ mScrimController.transitionTo(ScrimState.UNLOCKED);
+ mScrimController.finishAnimationsImmediately();
+ Assert.assertEquals(mScrimState, ScrimState.UNLOCKED);
+
+ mScrimController.transitionTo(ScrimState.BOUNCER);
+ mScrimController.finishAnimationsImmediately();
+ Assert.assertEquals(mScrimState, ScrimState.BOUNCER);
+
+ mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED);
+ mScrimController.finishAnimationsImmediately();
+ Assert.assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED);
+ }
+
+ @Test
public void panelExpansion() {
mScrimController.setPanelExpansion(0f);
mScrimController.setPanelExpansion(0.5f);
@@ -559,12 +575,11 @@
boolean mOnPreDrawCalled;
SynchronousScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
- Consumer<Float> scrimBehindAlphaListener,
- Consumer<GradientColors> scrimInFrontColorListener,
+ TriConsumer<ScrimState, Float, GradientColors> scrimStateListener,
Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters,
AlarmManager alarmManager) {
- super(scrimBehind, scrimInFront, scrimBehindAlphaListener, scrimInFrontColorListener,
- scrimVisibleListener, dozeParameters, alarmManager);
+ super(scrimBehind, scrimInFront, scrimStateListener, scrimVisibleListener,
+ dozeParameters, alarmManager);
mHandler = new FakeHandler(Looper.myLooper());
}
diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto
index 72496d2..93de08c 100644
--- a/proto/src/metrics_constants.proto
+++ b/proto/src/metrics_constants.proto
@@ -5659,6 +5659,11 @@
// OS: P
FIELD_APP_VERSION_CODE = 1389;
+ // OPEN: Settings > Connected Devices > Bluetooth
+ // CATEGORY: SETTINGS
+ // OS: P
+ BLUETOOTH_FRAGMENT = 1390;
+
// ---- End P Constants, all P constants go above this line ----
// Add new aosp constants above this line.
// END OF AOSP CONSTANTS
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index 6f4ae15..5c5f0f8 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -141,6 +141,13 @@
static final int ALARM_EVENT = 1;
static final String TIMEZONE_PROPERTY = "persist.sys.timezone";
+ // Indices into the APP_STANDBY_MIN_DELAYS and KEYS_APP_STANDBY_DELAY arrays
+ static final int ACTIVE_INDEX = 0;
+ static final int WORKING_INDEX = 1;
+ static final int FREQUENT_INDEX = 2;
+ static final int RARE_INDEX = 3;
+ static final int NEVER_INDEX = 4;
+
private final Intent mBackgroundIntent
= new Intent().addFlags(Intent.FLAG_FROM_BACKGROUND);
static final IncreasingTimeOrder sIncreasingTimeOrder = new IncreasingTimeOrder();
@@ -381,9 +388,10 @@
DEFAULT_ALLOW_WHILE_IDLE_WHITELIST_DURATION);
LISTENER_TIMEOUT = mParser.getLong(KEY_LISTENER_TIMEOUT,
DEFAULT_LISTENER_TIMEOUT);
- APP_STANDBY_MIN_DELAYS[0] = mParser.getDurationMillis(KEYS_APP_STANDBY_DELAY[0],
- DEFAULT_APP_STANDBY_DELAYS[0]);
- for (int i = 1; i < KEYS_APP_STANDBY_DELAY.length; i++) {
+ APP_STANDBY_MIN_DELAYS[ACTIVE_INDEX] = mParser.getDurationMillis(
+ KEYS_APP_STANDBY_DELAY[ACTIVE_INDEX],
+ DEFAULT_APP_STANDBY_DELAYS[ACTIVE_INDEX]);
+ for (int i = WORKING_INDEX; i < KEYS_APP_STANDBY_DELAY.length; i++) {
APP_STANDBY_MIN_DELAYS[i] = mParser.getDurationMillis(KEYS_APP_STANDBY_DELAY[i],
Math.max(APP_STANDBY_MIN_DELAYS[i-1], DEFAULT_APP_STANDBY_DELAYS[i]));
}
@@ -1526,22 +1534,24 @@
setImplLocked(a, false, doValidate);
}
+ /**
+ * Return the minimum time that should elapse before an app in the specified bucket
+ * can receive alarms again
+ */
private long getMinDelayForBucketLocked(int bucket) {
- // Return the minimum time that should elapse before an app in the specified bucket
- // can receive alarms again
- if (bucket == UsageStatsManager.STANDBY_BUCKET_NEVER) {
- return mConstants.APP_STANDBY_MIN_DELAYS[4];
- }
- else if (bucket >= UsageStatsManager.STANDBY_BUCKET_RARE) {
- return mConstants.APP_STANDBY_MIN_DELAYS[3];
- }
- else if (bucket >= UsageStatsManager.STANDBY_BUCKET_FREQUENT) {
- return mConstants.APP_STANDBY_MIN_DELAYS[2];
- }
- else if (bucket >= UsageStatsManager.STANDBY_BUCKET_WORKING_SET) {
- return mConstants.APP_STANDBY_MIN_DELAYS[1];
- }
- else return mConstants.APP_STANDBY_MIN_DELAYS[0];
+ // UsageStats bucket values are treated as floors of their behavioral range.
+ // In other words, a bucket value between WORKING and ACTIVE is treated as
+ // WORKING, not as ACTIVE. The ACTIVE and NEVER bucket apply only at specific
+ // values.
+ final int index;
+
+ if (bucket == UsageStatsManager.STANDBY_BUCKET_NEVER) index = NEVER_INDEX;
+ else if (bucket > UsageStatsManager.STANDBY_BUCKET_FREQUENT) index = RARE_INDEX;
+ else if (bucket > UsageStatsManager.STANDBY_BUCKET_WORKING_SET) index = FREQUENT_INDEX;
+ else if (bucket > UsageStatsManager.STANDBY_BUCKET_ACTIVE) index = WORKING_INDEX;
+ else index = ACTIVE_INDEX;
+
+ return mConstants.APP_STANDBY_MIN_DELAYS[index];
}
/**
@@ -3077,10 +3087,10 @@
if ((alarm.flags&AlarmManager.FLAG_ALLOW_WHILE_IDLE) != 0) {
// If this is an ALLOW_WHILE_IDLE alarm, we constrain how frequently the app can
- // schedule such alarms.
- final long lastTime = mLastAllowWhileIdleDispatch.get(alarm.creatorUid, 0);
+ // schedule such alarms. The first such alarm from an app is always delivered.
+ final long lastTime = mLastAllowWhileIdleDispatch.get(alarm.creatorUid, -1);
final long minTime = lastTime + getWhileIdleMinIntervalLocked(alarm.creatorUid);
- if (nowELAPSED < minTime) {
+ if (lastTime >= 0 && nowELAPSED < minTime) {
// Whoops, it hasn't been long enough since the last ALLOW_WHILE_IDLE
// alarm went off for this app. Reschedule the alarm to be in the
// correct time period.
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 079d815..5afb0a6 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -1402,7 +1402,7 @@
NetworkCapabilities nc, int callerPid, int callerUid) {
final NetworkCapabilities newNc = new NetworkCapabilities(nc);
if (!checkSettingsPermission(callerPid, callerUid)) newNc.setUids(null);
- if (!checkNetworkStackPermission(callerPid, callerUid)) newNc.setSSID(null);
+ if (!checkSettingsPermission(callerPid, callerUid)) newNc.setSSID(null);
return newNc;
}
@@ -1662,11 +1662,6 @@
android.Manifest.permission.NETWORK_SETTINGS, pid, uid);
}
- private boolean checkNetworkStackPermission(int pid, int uid) {
- return PERMISSION_GRANTED == mContext.checkPermission(
- android.Manifest.permission.NETWORK_STACK, pid, uid);
- }
-
private void enforceTetherAccessPermission() {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.ACCESS_NETWORK_STATE,
@@ -4247,7 +4242,7 @@
// calling app has permission to do so.
private void ensureSufficientPermissionsForRequest(NetworkCapabilities nc,
int callerPid, int callerUid) {
- if (null != nc.getSSID() && !checkNetworkStackPermission(callerPid, callerUid)) {
+ if (null != nc.getSSID() && !checkSettingsPermission(callerPid, callerUid)) {
throw new SecurityException("Insufficient permissions to request a specific SSID");
}
}
diff --git a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
index 4901192..0a7d3fd 100644
--- a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
+++ b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
@@ -81,7 +81,7 @@
static final boolean DEBUG_FOREGROUND_SERVICE = DEBUG_ALL || false;
static final boolean DEBUG_SERVICE_EXECUTING = DEBUG_ALL || false;
static final boolean DEBUG_STACK = DEBUG_ALL || false;
- static final boolean DEBUG_STATES = DEBUG_ALL_ACTIVITIES || true;
+ static final boolean DEBUG_STATES = DEBUG_ALL_ACTIVITIES || false;
static final boolean DEBUG_SWITCH = DEBUG_ALL || false;
static final boolean DEBUG_TASKS = DEBUG_ALL || false;
static final boolean DEBUG_TRANSITION = DEBUG_ALL || false;
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index f620c77..a18e7fa 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -4718,7 +4718,7 @@
}
private boolean hasUsageStatsPermission(String callingPackage) {
- final int mode = mAppOpsService.checkOperation(AppOpsManager.OP_GET_USAGE_STATS,
+ final int mode = mAppOpsService.noteOperation(AppOpsManager.OP_GET_USAGE_STATS,
Binder.getCallingUid(), callingPackage);
if (mode == AppOpsManager.MODE_DEFAULT) {
return checkCallingPermission(Manifest.permission.PACKAGE_USAGE_STATS)
@@ -8694,7 +8694,7 @@
}
@Override
- public boolean isAppForeground(int uid) throws RemoteException {
+ public boolean isAppForeground(int uid) {
synchronized (this) {
UidRecord uidRec = mActiveUids.get(uid);
if (uidRec == null || uidRec.idle) {
@@ -8987,6 +8987,12 @@
}
@Override
+ public int noteOp(String op, int uid, String packageName) {
+ return mActivityManagerService.mAppOpsService
+ .noteOperation(AppOpsManager.strOpToOp(op), uid, packageName);
+ }
+
+ @Override
public String[] getPackagesForUid(int uid) {
return mActivityManagerService.mContext.getPackageManager()
.getPackagesForUid(uid);
@@ -14162,14 +14168,18 @@
public boolean isUidActive(int uid, String callingPackage) {
if (!hasUsageStatsPermission(callingPackage)) {
enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
- "getPackageProcessState");
+ "isUidActive");
}
synchronized (this) {
- final UidRecord uidRecord = mActiveUids.get(uid);
- return uidRecord != null && !uidRecord.setIdle;
+ return isUidActiveLocked(uid);
}
}
+ boolean isUidActiveLocked(int uid) {
+ final UidRecord uidRecord = mActiveUids.get(uid);
+ return uidRecord != null && !uidRecord.setIdle;
+ }
+
@Override
public boolean convertFromTranslucent(IBinder token) {
final long origId = Binder.clearCallingIdentity();
@@ -21153,6 +21163,7 @@
}
}
if (brOptions.isDontSendToRestrictedApps()
+ && !isUidActiveLocked(callingUid)
&& isBackgroundRestrictedNoCheck(callingUid, callerPackage)) {
Slog.i(TAG, "Not sending broadcast " + action + " - app " + callerPackage
+ " has background restrictions");
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index f32717a..16c5969 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -229,8 +229,6 @@
private static final String ATTR_COMPONENTSPECIFIED = "component_specified";
static final String ACTIVITY_ICON_SUFFIX = "_activity_icon_";
- private static final int MAX_STORED_STATE_TRANSITIONS = 5;
-
final ActivityManagerService service; // owner
final IApplicationToken.Stub appToken; // window manager token
AppWindowContainerController mWindowContainerController;
@@ -368,28 +366,6 @@
private final Configuration mTmpConfig = new Configuration();
private final Rect mTmpBounds = new Rect();
- private final ArrayList<StateTransition> mRecentTransitions = new ArrayList<>();
-
- // TODO(b/71506345): Remove once issue has been resolved.
- private static class StateTransition {
- final long time;
- final ActivityState prev;
- final ActivityState state;
- final String reason;
-
- StateTransition(ActivityState prev, ActivityState state, String reason) {
- time = System.currentTimeMillis();
- this.prev = prev;
- this.state = state;
- this.reason = reason;
- }
-
- @Override
- public String toString() {
- return "[" + prev + "->" + state + ":" + reason + "@" + time + "]";
- }
- }
-
private static String startingWindowStateToString(int state) {
switch (state) {
case STARTING_WINDOW_NOT_SHOWN:
@@ -403,21 +379,6 @@
}
}
- String getLifecycleDescription(String reason) {
- StringBuilder transitionBuilder = new StringBuilder();
-
- for (int i = 0, size = mRecentTransitions.size(); i < size; ++i) {
- transitionBuilder.append(mRecentTransitions.get(i));
- if (i + 1 < size) {
- transitionBuilder.append(",");
- }
- }
-
- return "name= " + this + ", component=" + intent.getComponent().flattenToShortString()
- + ", package=" + packageName + ", state=" + mState + ", reason=" + reason
- + ", time=" + System.currentTimeMillis() + " transitions=" + transitionBuilder;
- }
-
void dump(PrintWriter pw, String prefix) {
final long now = SystemClock.uptimeMillis();
pw.print(prefix); pw.print("packageName="); pw.print(packageName);
@@ -1658,15 +1619,8 @@
return;
}
- final ActivityState prev = mState;
mState = state;
- if (mRecentTransitions.size() == MAX_STORED_STATE_TRANSITIONS) {
- mRecentTransitions.remove(0);
- }
-
- mRecentTransitions.add(new StateTransition(prev, state, reason));
-
final TaskRecord parent = getTask();
if (parent != null) {
@@ -1770,15 +1724,13 @@
if (isState(STOPPED, STOPPING) && stack.mTranslucentActivityWaiting == null
&& mStackSupervisor.getResumedActivityLocked() != this) {
// Capture reason before state change
- final String reason = getLifecycleDescription("makeVisibleIfNeeded");
// An activity must be in the {@link PAUSING} state for the system to validate
// the move to {@link PAUSED}.
setState(PAUSING, "makeVisibleIfNeeded");
service.getLifecycleManager().scheduleTransaction(app.thread, appToken,
PauseActivityItem.obtain(finishing, false /* userLeaving */,
- configChangeFlags, false /* dontReport */)
- .setDescription(reason));
+ configChangeFlags, false /* dontReport */));
}
} catch (Exception e) {
// Just skip on any failure; we'll make it visible when it next restarts.
@@ -2737,8 +2689,7 @@
if (andResume) {
lifecycleItem = ResumeActivityItem.obtain(service.isNextTransitionForward());
} else {
- lifecycleItem = PauseActivityItem.obtain()
- .setDescription(getLifecycleDescription("relaunchActivityLocked"));
+ lifecycleItem = PauseActivityItem.obtain();
}
final ClientTransaction transaction = ClientTransaction.obtain(app.thread, appToken);
transaction.addCallback(callbackItem);
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index eb482c1..e54e645 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -1487,8 +1487,7 @@
mService.getLifecycleManager().scheduleTransaction(prev.app.thread, prev.appToken,
PauseActivityItem.obtain(prev.finishing, userLeaving,
- prev.configChangeFlags, pauseImmediately).setDescription(
- prev.getLifecycleDescription("startPausingLocked")));
+ prev.configChangeFlags, pauseImmediately));
} catch (Exception e) {
// Ignore exception, if process died other code will cleanup.
Slog.w(TAG, "Exception thrown during pause", e);
@@ -2694,9 +2693,7 @@
next.clearOptionsLocked();
transaction.setLifecycleStateRequest(
ResumeActivityItem.obtain(next.app.repProcState,
- mService.isNextTransitionForward())
- .setDescription(next.getLifecycleDescription(
- "resumeTopActivityInnerLocked")));
+ mService.isNextTransitionForward()));
mService.getLifecycleManager().scheduleTransaction(transaction);
if (DEBUG_STATES) Slog.d(TAG_STATES, "resumeTopActivityLocked: Resumed "
@@ -3480,8 +3477,7 @@
EventLogTags.writeAmStopActivity(
r.userId, System.identityHashCode(r), r.shortComponentName);
mService.getLifecycleManager().scheduleTransaction(r.app.thread, r.appToken,
- StopActivityItem.obtain(r.visible, r.configChangeFlags)
- .setDescription(r.getLifecycleDescription("stopActivityLocked")));
+ StopActivityItem.obtain(r.visible, r.configChangeFlags));
if (shouldSleepOrShutDownActivities()) {
r.setSleeping(true);
}
@@ -4308,9 +4304,7 @@
try {
if (DEBUG_SWITCH) Slog.i(TAG_SWITCH, "Destroying: " + r);
mService.getLifecycleManager().scheduleTransaction(r.app.thread, r.appToken,
- DestroyActivityItem.obtain(r.finishing, r.configChangeFlags)
- .setDescription(
- r.getLifecycleDescription("destroyActivityLocked:" + reason)));
+ DestroyActivityItem.obtain(r.finishing, r.configChangeFlags));
} catch (Exception e) {
// We can just ignore exceptions here... if the process
// has crashed, our death notification will clean things
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index cbf30bd..6a3587c 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -1466,11 +1466,9 @@
// Set desired final state.
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
- lifecycleItem = ResumeActivityItem.obtain(mService.isNextTransitionForward())
- .setDescription(r.getLifecycleDescription("realStartActivityLocked"));
+ lifecycleItem = ResumeActivityItem.obtain(mService.isNextTransitionForward());
} else {
- lifecycleItem = PauseActivityItem.obtain()
- .setDescription(r.getLifecycleDescription("realStartActivityLocked"));
+ lifecycleItem = PauseActivityItem.obtain();
}
clientTransaction.setLifecycleStateRequest(lifecycleItem);
@@ -4666,7 +4664,8 @@
userId = task.userId;
return mService.getActivityStartController().startActivityInPackage(
task.mCallingUid, callingPid, callingUid, callingPackage, intent, null, null,
- null, 0, 0, options, userId, task, "startActivityFromRecents");
+ null, 0, 0, options, userId, task, "startActivityFromRecents",
+ false /* validateIncomingUser */);
} finally {
if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY && task != null) {
// If we are launching the task in the docked stack, put it into resizing mode so
diff --git a/services/core/java/com/android/server/am/ActivityStartController.java b/services/core/java/com/android/server/am/ActivityStartController.java
index 86a3fce..6c45546 100644
--- a/services/core/java/com/android/server/am/ActivityStartController.java
+++ b/services/core/java/com/android/server/am/ActivityStartController.java
@@ -224,13 +224,33 @@
}
}
+ /**
+ * If {@code validateIncomingUser} is true, check {@code targetUserId} against the real calling
+ * user ID inferred from {@code realCallingUid}, then return the resolved user-id, taking into
+ * account "current user", etc.
+ *
+ * If {@code validateIncomingUser} is false, it skips the above check, but instead
+ * ensures {@code targetUserId} is a real user ID and not a special user ID such as
+ * {@link android.os.UserHandle#USER_ALL}, etc.
+ */
+ private int checkTargetUser(int targetUserId, boolean validateIncomingUser,
+ int realCallingPid, int realCallingUid, String reason) {
+ if (validateIncomingUser) {
+ return mService.mUserController.handleIncomingUser(realCallingPid, realCallingUid,
+ targetUserId, false, ALLOW_FULL_ONLY, reason, null);
+ } else {
+ mService.mUserController.ensureNotSpecialUser(targetUserId);
+ return targetUserId;
+ }
+ }
+
final int startActivityInPackage(int uid, int realCallingPid, int realCallingUid,
String callingPackage, Intent intent, String resolvedType, IBinder resultTo,
String resultWho, int requestCode, int startFlags, SafeActivityOptions options,
- int userId, TaskRecord inTask, String reason) {
+ int userId, TaskRecord inTask, String reason, boolean validateIncomingUser) {
- userId = mService.mUserController.handleIncomingUser(realCallingPid, realCallingUid, userId,
- false, ALLOW_FULL_ONLY, "startActivityInPackage", null);
+ userId = checkTargetUser(userId, validateIncomingUser, realCallingPid, realCallingUid,
+ reason);
// TODO: Switch to user app stacks here.
return obtainStarter(intent, reason)
@@ -261,13 +281,12 @@
final int startActivitiesInPackage(int uid, String callingPackage, Intent[] intents,
String[] resolvedTypes, IBinder resultTo, SafeActivityOptions options, int userId,
boolean validateIncomingUser) {
+
final String reason = "startActivityInPackage";
- if (validateIncomingUser) {
- userId = mService.mUserController.handleIncomingUser(Binder.getCallingPid(),
- Binder.getCallingUid(), userId, false, ALLOW_FULL_ONLY, reason, null);
- } else {
- mService.mUserController.ensureNotSpecialUser(userId);
- }
+
+ userId = checkTargetUser(userId, validateIncomingUser, Binder.getCallingPid(),
+ Binder.getCallingUid(), reason);
+
// TODO: Switch to user app stacks here.
return startActivities(null, uid, callingPackage, intents, resolvedTypes, resultTo, options,
userId, reason);
diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java
index bd1000ac..35b7f2b 100644
--- a/services/core/java/com/android/server/am/AppErrors.java
+++ b/services/core/java/com/android/server/am/AppErrors.java
@@ -483,7 +483,7 @@
task.intent, null, null, null, 0, 0,
new SafeActivityOptions(ActivityOptions.makeBasic()),
task.userId, null,
- "AppErrors");
+ "AppErrors", false /*validateIncomingUser*/);
}
}
}
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index 264609f..550c37a 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -322,6 +322,11 @@
} else {
mergedOptions.setCallerOptions(ActivityOptions.fromBundle(options));
}
+
+ // Note when someone has a pending intent, even from different
+ // users, then there's no need to ensure the calling user matches
+ // the target user, so validateIncomingUser is always false below.
+
if (key.allIntents != null && key.allIntents.length > 1) {
Intent[] allIntents = new Intent[key.allIntents.length];
String[] allResolvedTypes = new String[key.allIntents.length];
@@ -333,15 +338,17 @@
}
allIntents[allIntents.length-1] = finalIntent;
allResolvedTypes[allResolvedTypes.length-1] = resolvedType;
+
res = owner.getActivityStartController().startActivitiesInPackage(
uid, key.packageName, allIntents, allResolvedTypes,
resultTo, mergedOptions, userId,
- true /* validateIncomingUser */);
+ false /* validateIncomingUser */);
} else {
res = owner.getActivityStartController().startActivityInPackage(uid,
callingPid, callingUid, key.packageName, finalIntent,
resolvedType, resultTo, resultWho, requestCode, 0,
- mergedOptions, userId, null, "PendingIntentRecord");
+ mergedOptions, userId, null, "PendingIntentRecord",
+ false /* validateIncomingUser */);
}
} catch (RuntimeException e) {
Slog.w(TAG, "Unable to send startActivity intent", e);
diff --git a/services/core/java/com/android/server/broadcastradio/hal1/Tuner.java b/services/core/java/com/android/server/broadcastradio/hal1/Tuner.java
index ff1e29b..f2e44ee 100644
--- a/services/core/java/com/android/server/broadcastradio/hal1/Tuner.java
+++ b/services/core/java/com/android/server/broadcastradio/hal1/Tuner.java
@@ -80,8 +80,6 @@
@NonNull RadioManager.BandConfig config);
private native RadioManager.BandConfig nativeGetConfiguration(long nativeContext, int region);
- private native void nativeSetMuted(long nativeContext, boolean mute);
-
private native void nativeStep(long nativeContext, boolean directionDown, boolean skipSubChannel);
private native void nativeScan(long nativeContext, boolean directionDown, boolean skipSubChannel);
private native void nativeTune(long nativeContext, @NonNull ProgramSelector selector);
@@ -155,8 +153,7 @@
checkNotClosedLocked();
if (mIsMuted == mute) return;
mIsMuted = mute;
-
- nativeSetMuted(mNativeContext, mute);
+ Slog.w(TAG, "Mute via RadioService is not implemented - please handle it via app");
}
}
diff --git a/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java b/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java
index 8f3f099..9833507 100644
--- a/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java
+++ b/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java
@@ -25,7 +25,6 @@
import android.hardware.radio.ProgramList;
import android.hardware.radio.ProgramSelector;
import android.hardware.radio.RadioManager;
-import android.media.AudioSystem;
import android.os.RemoteException;
import android.util.MutableBoolean;
import android.util.MutableInt;
@@ -45,7 +44,6 @@
private final ITunerSession mHwSession;
private final TunerCallback mCallback;
private boolean mIsClosed = false;
- private boolean mIsAudioConnected = false;
private boolean mIsMuted = false;
// necessary only for older APIs compatibility
@@ -56,7 +54,6 @@
mModule = Objects.requireNonNull(module);
mHwSession = Objects.requireNonNull(hwSession);
mCallback = Objects.requireNonNull(callback);
- notifyAudioServiceLocked(true);
}
@Override
@@ -64,7 +61,6 @@
synchronized (mLock) {
if (mIsClosed) return;
mIsClosed = true;
- notifyAudioServiceLocked(false);
}
}
@@ -79,22 +75,6 @@
}
}
- private void notifyAudioServiceLocked(boolean connected) {
- if (mIsAudioConnected == connected) return;
-
- Slog.d(TAG, "Notifying AudioService about new state: " + connected);
- int ret = AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_IN_FM_TUNER,
- connected ? AudioSystem.DEVICE_STATE_AVAILABLE : AudioSystem.DEVICE_STATE_UNAVAILABLE,
- null, kAudioDeviceName);
-
- if (ret == AudioSystem.AUDIO_STATUS_OK) {
- mIsAudioConnected = connected;
- } else {
- Slog.e(TAG, "Failed to notify AudioService about new state: "
- + connected + ", response was: " + ret);
- }
- }
-
@Override
public void setConfiguration(RadioManager.BandConfig config) {
synchronized (mLock) {
@@ -119,7 +99,7 @@
checkNotClosedLocked();
if (mIsMuted == mute) return;
mIsMuted = mute;
- notifyAudioServiceLocked(!mute);
+ Slog.w(TAG, "Mute via RadioService is not implemented - please handle it via app");
}
}
diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java
index e3d0bdd..e840a29 100644
--- a/services/core/java/com/android/server/content/ContentService.java
+++ b/services/core/java/com/android/server/content/ContentService.java
@@ -51,6 +51,8 @@
import android.os.Parcel;
import android.os.Process;
import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.os.ShellCallback;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -1577,4 +1579,32 @@
}
}
}
+
+ private void enforceShell(String method) {
+ final int callingUid = Binder.getCallingUid();
+ if (callingUid != Process.SHELL_UID && callingUid != Process.ROOT_UID) {
+ throw new SecurityException("Non-shell user attempted to call " + method);
+ }
+ }
+
+ @Override
+ public void resetTodayStats() {
+ enforceShell("resetTodayStats");
+
+ if (mSyncManager != null) {
+ final long token = Binder.clearCallingIdentity();
+ try {
+ mSyncManager.resetTodayStats();
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+ }
+
+ @Override
+ public void onShellCommand(FileDescriptor in, FileDescriptor out,
+ FileDescriptor err, String[] args, ShellCallback callback,
+ ResultReceiver resultReceiver) {
+ (new ContentShellCommand(this)).exec(this, in, out, err, args, callback, resultReceiver);
+ }
}
diff --git a/services/core/java/com/android/server/content/ContentShellCommand.java b/services/core/java/com/android/server/content/ContentShellCommand.java
new file mode 100644
index 0000000..6c2991f
--- /dev/null
+++ b/services/core/java/com/android/server/content/ContentShellCommand.java
@@ -0,0 +1,68 @@
+/*
+ * 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.content;
+
+import android.content.IContentService;
+import android.content.Intent;
+import android.os.RemoteException;
+import android.os.ShellCommand;
+
+import java.io.PrintWriter;
+
+public class ContentShellCommand extends ShellCommand {
+ final IContentService mInterface;
+
+ ContentShellCommand(IContentService service) {
+ mInterface = service;
+ }
+
+ @Override
+ public int onCommand(String cmd) {
+ if (cmd == null) {
+ return handleDefaultCommands(cmd);
+ }
+
+ final PrintWriter pw = getOutPrintWriter();
+ try {
+ switch(cmd) {
+ case "reset-today-stats":
+ return runResetTodayStats();
+ default:
+ return handleDefaultCommands(cmd);
+ }
+ } catch (RemoteException e) {
+ pw.println("Remote exception: " + e);
+ }
+ return -1;
+ }
+
+ private int runResetTodayStats() throws RemoteException {
+ mInterface.resetTodayStats();
+ return 0;
+ }
+
+ @Override
+ public void onHelp() {
+ final PrintWriter pw = getOutPrintWriter();
+ pw.println("Content service commands:");
+ pw.println(" help");
+ pw.println(" Print this help text.");
+ pw.println("");
+ pw.println(" reset-today-stats");
+ pw.println(" Reset 1-day sync stats.");
+ pw.println();
+ }
+}
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index a312fe1..decae18 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -48,6 +48,7 @@
import android.content.SyncInfo;
import android.content.SyncResult;
import android.content.SyncStatusInfo;
+import android.content.SyncStatusInfo.Stats;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -95,6 +96,7 @@
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.IndentingPrintWriter;
+import com.android.internal.util.function.QuadConsumer;
import com.android.server.DeviceIdleController;
import com.android.server.LocalServices;
import com.android.server.SystemService;
@@ -122,6 +124,7 @@
import java.util.Objects;
import java.util.Random;
import java.util.Set;
+import java.util.function.Function;
import java.util.function.Predicate;
/**
@@ -242,7 +245,7 @@
/** Track whether the device has already been provisioned. */
private volatile boolean mProvisioned;
- protected SyncAdaptersCache mSyncAdapters;
+ protected final SyncAdaptersCache mSyncAdapters;
private final Random mRand;
@@ -423,6 +426,17 @@
}
};
+ private final BroadcastReceiver mOtherIntentsReceiver =
+ new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
+ mSyncStorageEngine.setClockValid();
+ return;
+ }
+ }
+ };
+
private BroadcastReceiver mUserIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -631,6 +645,9 @@
mContext.registerReceiverAsUser(
mUserIntentReceiver, UserHandle.ALL, intentFilter, null, null);
+ intentFilter = new IntentFilter(Intent.ACTION_TIME_CHANGED);
+ context.registerReceiver(mOtherIntentsReceiver, intentFilter);
+
if (!factoryTest) {
mNotificationMgr = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
@@ -947,9 +964,13 @@
} else if (requestedAuthority == null) {
source = SyncStorageEngine.SOURCE_POLL;
} else {
- // This isn't strictly server, since arbitrary callers can (and do) request
- // a non-forced two-way sync on a specific url.
- source = SyncStorageEngine.SOURCE_SERVER;
+ if (extras.containsKey("feed")) {
+ source = SyncStorageEngine.SOURCE_FEED;
+ } else{
+ // This isn't strictly server, since arbitrary callers can (and do) request
+ // a non-forced two-way sync on a specific url.
+ source = SyncStorageEngine.SOURCE_OTHER;
+ }
}
for (AccountAndUser account : accounts) {
@@ -2134,6 +2155,7 @@
pw.print("Memory low: "); pw.println(mStorageIsLow);
pw.print("Device idle: "); pw.println(mDeviceIsIdle);
pw.print("Reported active: "); pw.println(mReportedSyncActive);
+ pw.print("Clock valid: "); pw.println(mSyncStorageEngine.isClockValid());
final AccountAndUser[] accounts = AccountManagerService.getSingleton().getAllAccounts();
@@ -2181,26 +2203,35 @@
final ArrayList<Pair<EndPoint, SyncStatusInfo>> statuses = new ArrayList<>();
+ mSyncStorageEngine.resetTodayStats(/* force=*/ false);
+
for (AccountAndUser account : accounts) {
pw.printf("Account %s u%d %s\n",
account.account.name, account.userId, account.account.type);
pw.println("=======================================================================");
- final PrintTable table = new PrintTable(13);
+ final PrintTable table = new PrintTable(16);
table.set(0, 0,
"Authority", // 0
"Syncable", // 1
"Enabled", // 2
- "Delay", // 3
- "Loc", // 4
- "Poll", // 5
- "Per", // 6
- "Serv", // 7
- "User", // 8
- "Tot", // 9
- "Time", // 10
- "Last Sync", // 11
- "Backoff" // 12
+
+ "Stats", // 3 "Total", "Today" or "Yesterday".
+
+ "Loc", // 4 # of syncs with local sources. (including failures/cancels. )
+ "Poll", // 5 "poll" syncs.
+ "Per", // 6 Periodic syncs.
+ "Feed", // 7 Syncs with a "feed" extra. (subscribedfeeds?)
+ "User", // 8 User-initiated
+ "Othr", // 9 Other sources.
+
+ "Tot", // 10 Total syncs (including failures / cancels)
+ "Fail", // 11 (Failure)
+ "Can", // 12 (Cancel)
+
+ "Time", // 13 Total time
+ "Last Sync", // 14
+ "Backoff" // 15
);
final List<RegisteredServicesCache.ServiceInfo<SyncAdapterType>> sorted =
@@ -2234,37 +2265,50 @@
}
table.set(row, 0, authority, settings.syncable, settings.enabled);
- sb.setLength(0);
- table.set(row, 4,
- status.numSourceLocal,
- status.numSourcePoll,
- status.numSourcePeriodic,
- status.numSourceServer,
- status.numSourceUser,
- status.numSyncs,
- formatDurationHMS(sb, status.totalElapsedTime));
+ QuadConsumer<String, Stats, Function<Integer, String>, Integer> c =
+ (label, stats, filter, r) -> {
+ sb.setLength(0);
+ table.set(r, 3,
+ label,
+ filter.apply(stats.numSourceLocal),
+ filter.apply(stats.numSourcePoll),
+ filter.apply(stats.numSourcePeriodic),
+ filter.apply(stats.numSourceFeed),
+ filter.apply(stats.numSourceUser),
+ filter.apply(stats.numSourceOther),
+ filter.apply(stats.numSyncs),
+ filter.apply(stats.numFailures),
+ filter.apply(stats.numCancels),
+ formatDurationHMS(sb, stats.totalElapsedTime));
+ };
+ c.accept("Total", status.totalStats, (i) -> Integer.toString(i), row);
+ c.accept("Today", status.todayStats, this::zeroToEmpty, row + 1);
+ c.accept("Yestr", status.yesterdayStats, this::zeroToEmpty, row + 2);
+
+ final int LAST_SYNC = 14;
+ final int BACKOFF = LAST_SYNC + 1;
int row1 = row;
if (settings.delayUntil > now) {
- table.set(row1++, 12, "D: " + (settings.delayUntil - now) / 1000);
+ table.set(row1++, BACKOFF, "D: " + (settings.delayUntil - now) / 1000);
if (settings.backoffTime > now) {
- table.set(row1++, 12, "B: " + (settings.backoffTime - now) / 1000);
- table.set(row1++, 12, settings.backoffDelay / 1000);
+ table.set(row1++, BACKOFF, "B: " + (settings.backoffTime - now) / 1000);
+ table.set(row1++, BACKOFF, settings.backoffDelay / 1000);
}
}
row1 = row;
if (status.lastSuccessTime != 0) {
- table.set(row1++, 11, SyncStorageEngine.SOURCES[status.lastSuccessSource]
+ table.set(row1++, LAST_SYNC, SyncStorageEngine.SOURCES[status.lastSuccessSource]
+ " " + "SUCCESS");
- table.set(row1++, 11, formatTime(status.lastSuccessTime));
+ table.set(row1++, LAST_SYNC, formatTime(status.lastSuccessTime));
}
if (status.lastFailureTime != 0) {
- table.set(row1++, 11, SyncStorageEngine.SOURCES[status.lastFailureSource]
+ table.set(row1++, LAST_SYNC, SyncStorageEngine.SOURCES[status.lastFailureSource]
+ " " + "FAILURE");
- table.set(row1++, 11, formatTime(status.lastFailureTime));
+ table.set(row1++, LAST_SYNC, formatTime(status.lastFailureTime));
//noinspection UnusedAssignment
- table.set(row1++, 11, status.lastFailureMesg);
+ table.set(row1++, LAST_SYNC, status.lastFailureMesg);
}
}
table.writeTo(pw);
@@ -2274,6 +2318,7 @@
pw.println();
pw.println("Per Adapter History");
+ pw.println("(SERVER is now split up to FEED and OTHER)");
for (int i = 0; i < statuses.size(); i++) {
final Pair<EndPoint, SyncStatusInfo> event = statuses.get(i);
@@ -2299,6 +2344,10 @@
}
}
+ private String zeroToEmpty(int value) {
+ return (value != 0) ? Integer.toString(value) : "";
+ }
+
private void dumpTimeSec(PrintWriter pw, long time) {
pw.print(time/1000); pw.print('.'); pw.print((time/100)%10);
pw.print('s');
@@ -2459,6 +2508,7 @@
pw.println();
pw.println("Recent Sync History");
+ pw.println("(SERVER is now split up to FEED and OTHER)");
final String format = " %-" + maxAccount + "s %-" + maxAuthority + "s %s\n";
final Map<String, Long> lastTimeMap = Maps.newHashMap();
final PackageManager pm = mContext.getPackageManager();
@@ -2525,6 +2575,7 @@
}
pw.println();
pw.println("Recent Sync History Extras");
+ pw.println("(SERVER is now split up to FEED and OTHER)");
for (int i = 0; i < N; i++) {
final SyncStorageEngine.SyncHistoryItem item = items.get(i);
final Bundle extras = item.extras;
@@ -3104,6 +3155,10 @@
final boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
if (isLoggable) Slog.v(TAG, op.toString());
+ // At this point, we know the device has been connected to the server, so
+ // assume the clock is correct.
+ mSyncStorageEngine.setClockValid();
+
mSyncJobService.markSyncStarted(op.jobId);
if (mStorageIsLow) {
@@ -4015,4 +4070,8 @@
Slog.wtf(TAG, message);
mLogger.log("WTF: ", message);
}
+
+ public void resetTodayStats() {
+ mSyncStorageEngine.resetTodayStats(/*force=*/ true);
+ }
}
diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java
index 8dd229c..f54a9a0 100644
--- a/services/core/java/com/android/server/content/SyncStorageEngine.java
+++ b/services/core/java/com/android/server/content/SyncStorageEngine.java
@@ -108,11 +108,12 @@
/** Enum value for a sync stop event. */
public static final int EVENT_STOP = 1;
- /** Enum value for a server-initiated sync. */
- public static final int SOURCE_SERVER = 0;
+ /** Enum value for a sync with other sources. */
+ public static final int SOURCE_OTHER = 0;
/** Enum value for a local-initiated sync. */
public static final int SOURCE_LOCAL = 1;
+
/** Enum value for a poll-based sync (e.g., upon connection to network) */
public static final int SOURCE_POLL = 2;
@@ -122,16 +123,18 @@
/** Enum value for a periodic sync. */
public static final int SOURCE_PERIODIC = 4;
+ /** Enum a sync with a "feed" extra */
+ public static final int SOURCE_FEED = 5;
+
public static final long NOT_IN_BACKOFF_MODE = -1;
- // TODO: i18n -- grab these out of resources.
/** String names for the sync source types. */
- public static final String[] SOURCES = { "SERVER",
+ public static final String[] SOURCES = { "OTHER",
"LOCAL",
"POLL",
"USER",
"PERIODIC",
- "SERVICE"};
+ "FEED"};
// The MESG column will contain one of these or one of the Error types.
public static final String MESG_SUCCESS = "success";
@@ -153,6 +156,8 @@
private static HashMap<String, String> sAuthorityRenames;
private static PeriodicSyncAddedListener mPeriodicSyncAddedListener;
+ private volatile boolean mIsClockValid;
+
static {
sAuthorityRenames = new HashMap<String, String>();
sAuthorityRenames.put("contacts", "com.android.contacts");
@@ -1174,23 +1179,36 @@
SyncStatusInfo status = getOrCreateSyncStatusLocked(item.authorityId);
- status.numSyncs++;
- status.totalElapsedTime += elapsedTime;
+ status.maybeResetTodayStats(isClockValid(), /*force=*/ false);
+
+ status.totalStats.numSyncs++;
+ status.todayStats.numSyncs++;
+ status.totalStats.totalElapsedTime += elapsedTime;
+ status.todayStats.totalElapsedTime += elapsedTime;
switch (item.source) {
case SOURCE_LOCAL:
- status.numSourceLocal++;
+ status.totalStats.numSourceLocal++;
+ status.todayStats.numSourceLocal++;
break;
case SOURCE_POLL:
- status.numSourcePoll++;
+ status.totalStats.numSourcePoll++;
+ status.todayStats.numSourcePoll++;
break;
case SOURCE_USER:
- status.numSourceUser++;
+ status.totalStats.numSourceUser++;
+ status.todayStats.numSourceUser++;
break;
- case SOURCE_SERVER:
- status.numSourceServer++;
+ case SOURCE_OTHER:
+ status.totalStats.numSourceOther++;
+ status.todayStats.numSourceOther++;
break;
case SOURCE_PERIODIC:
- status.numSourcePeriodic++;
+ status.totalStats.numSourcePeriodic++;
+ status.todayStats.numSourcePeriodic++;
+ break;
+ case SOURCE_FEED:
+ status.totalStats.numSourceFeed++;
+ status.todayStats.numSourceFeed++;
break;
}
@@ -1225,6 +1243,9 @@
if (status.lastFailureTime == 0) {
writeStatusNow = true;
}
+ status.totalStats.numFailures++;
+ status.todayStats.numFailures++;
+
status.lastFailureTime = lastSyncTime;
status.lastFailureSource = item.source;
status.lastFailureMesg = resultMessage;
@@ -1233,6 +1254,11 @@
}
ds.failureCount++;
ds.failureTime += elapsedTime;
+ } else {
+ // Cancel
+ status.totalStats.numCancels++;
+ status.todayStats.numCancels++;
+ writeStatusNow = true;
}
final StringBuilder event = new StringBuilder();
event.append("" + resultMessage + " Source=" + SyncStorageEngine.SOURCES[item.source]
@@ -1969,9 +1995,8 @@
}
/**
- * Load sync engine state from the old syncmanager database, and then
- * erase it. Note that we don't deal with pending operations, active
- * sync, or history.
+ * TODO Remove it. It's super old code that was used to migrate the information from a sqlite
+ * database that we used a long time ago, and is no longer relevant.
*/
private void readAndDeleteLegacyAccountInfoLocked() {
// Look for old database to initialize from.
@@ -2049,13 +2074,13 @@
st = new SyncStatusInfo(authority.ident);
mSyncStatus.put(authority.ident, st);
}
- st.totalElapsedTime = getLongColumn(c, "totalElapsedTime");
- st.numSyncs = getIntColumn(c, "numSyncs");
- st.numSourceLocal = getIntColumn(c, "numSourceLocal");
- st.numSourcePoll = getIntColumn(c, "numSourcePoll");
- st.numSourceServer = getIntColumn(c, "numSourceServer");
- st.numSourceUser = getIntColumn(c, "numSourceUser");
- st.numSourcePeriodic = 0;
+ st.totalStats.totalElapsedTime = getLongColumn(c, "totalElapsedTime");
+ st.totalStats.numSyncs = getIntColumn(c, "numSyncs");
+ st.totalStats.numSourceLocal = getIntColumn(c, "numSourceLocal");
+ st.totalStats.numSourcePoll = getIntColumn(c, "numSourcePoll");
+ st.totalStats.numSourceOther = getIntColumn(c, "numSourceServer");
+ st.totalStats.numSourceUser = getIntColumn(c, "numSourceUser");
+ st.totalStats.numSourcePeriodic = 0;
st.lastSuccessSource = getIntColumn(c, "lastSuccessSource");
st.lastSuccessTime = getLongColumn(c, "lastSuccessTime");
st.lastFailureSource = getIntColumn(c, "lastFailureSource");
@@ -2296,4 +2321,29 @@
public void queueBackup() {
BackupManager.dataChanged("android");
}
+
+ public void setClockValid() {
+ if (!mIsClockValid) {
+ mIsClockValid = true;
+ Slog.w(TAG, "Clock is valid now.");
+ }
+ }
+
+ public boolean isClockValid() {
+ return mIsClockValid;
+ }
+
+ public void resetTodayStats(boolean force) {
+ if (force) {
+ Log.w(TAG, "Force resetting today stats.");
+ }
+ synchronized (mAuthorities) {
+ final int N = mSyncStatus.size();
+ for (int i = 0; i < N; i++) {
+ SyncStatusInfo cur = mSyncStatus.valueAt(i);
+ cur.maybeResetTodayStats(isClockValid(), force);
+ }
+ writeStatusLocked();
+ }
+ }
}
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 0f531a8..ddd8855 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -1904,7 +1904,7 @@
final int callingUid = Binder.getCallingUid();
AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class);
- final int mode = appOpsManager.checkOp(AppOpsManager.OP_GET_USAGE_STATS,
+ final int mode = appOpsManager.noteOp(AppOpsManager.OP_GET_USAGE_STATS,
callingUid, callingPackage);
final boolean hasUsageStats;
if (mode == AppOpsManager.MODE_DEFAULT) {
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 5f4c8ef..cfec114 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -760,8 +760,14 @@
brightness = mScreenBrightnessForVr;
}
+ boolean setBrightnessToOverride = false;
if (brightness < 0 && mPowerRequest.screenBrightnessOverride > 0) {
brightness = mPowerRequest.screenBrightnessOverride;
+ // If there's a screen brightness override, we want to reset the brightness to it
+ // whenever the user changes it, to communicate that these changes aren't taking
+ // effect. However, for a nicer user experience, we don't do it here, but rather after
+ // the temporary brightness has been taken into account.
+ setBrightnessToOverride = true;
}
final boolean autoBrightnessEnabledInDoze =
@@ -784,6 +790,12 @@
brightnessIsTemporary = true;
}
+ // Reset the brightness to the screen brightness override to communicate to the user that
+ // her changes aren't taking effect.
+ if (setBrightnessToOverride && !brightnessIsTemporary) {
+ putScreenBrightnessSetting(brightness);
+ }
+
final boolean autoBrightnessAdjustmentChanged = updateAutoBrightnessAdjustment();
if (autoBrightnessAdjustmentChanged) {
mTemporaryAutoBrightnessAdjustment = Float.NaN;
@@ -867,7 +879,6 @@
brightness = clampScreenBrightness(mCurrentScreenBrightnessSetting);
}
-
// Apply dimming by at least some minimum amount when user activity
// timeout is about to expire.
if (mPowerRequest.policy == DisplayPowerRequest.POLICY_DIM) {
diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java
index 736aa46..0135085 100644
--- a/services/core/java/com/android/server/job/JobSchedulerService.java
+++ b/services/core/java/com/android/server/job/JobSchedulerService.java
@@ -248,6 +248,7 @@
static final int WORKING_INDEX = 1;
static final int FREQUENT_INDEX = 2;
static final int RARE_INDEX = 3;
+ static final int NEVER_INDEX = 4;
/**
* Bookkeeping about when jobs last run. We keep our own record in heartbeat time,
@@ -2432,11 +2433,11 @@
public static int standbyBucketToBucketIndex(int bucket) {
// Normalize AppStandby constants to indices into our bookkeeping
- if (bucket == UsageStatsManager.STANDBY_BUCKET_NEVER) return 4;
- else if (bucket >= UsageStatsManager.STANDBY_BUCKET_RARE) return 3;
- else if (bucket >= UsageStatsManager.STANDBY_BUCKET_FREQUENT) return 2;
- else if (bucket >= UsageStatsManager.STANDBY_BUCKET_WORKING_SET) return 1;
- else return 0;
+ if (bucket == UsageStatsManager.STANDBY_BUCKET_NEVER) return NEVER_INDEX;
+ else if (bucket > UsageStatsManager.STANDBY_BUCKET_FREQUENT) return RARE_INDEX;
+ else if (bucket > UsageStatsManager.STANDBY_BUCKET_WORKING_SET) return FREQUENT_INDEX;
+ else if (bucket > UsageStatsManager.STANDBY_BUCKET_ACTIVE) return WORKING_INDEX;
+ else return ACTIVE_INDEX;
}
// Static to support external callers
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java
index 4b58d53..fb1874c 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsService.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java
@@ -1980,13 +1980,6 @@
}
@Override
- public void initRecoveryService(@NonNull String rootCertificateAlias,
- @NonNull byte[] signedPublicKeyList) throws RemoteException {
- mRecoverableKeyStoreManager.initRecoveryService(rootCertificateAlias,
- signedPublicKeyList);
- }
-
- @Override
public void initRecoveryServiceWithSigFile(@NonNull String rootCertificateAlias,
@NonNull byte[] recoveryServiceCertFile, @NonNull byte[] recoveryServiceSigFile)
throws RemoteException {
@@ -2033,15 +2026,6 @@
}
@Override
- public byte[] startRecoverySession(@NonNull String sessionId,
- @NonNull byte[] verifierPublicKey, @NonNull byte[] vaultParams,
- @NonNull byte[] vaultChallenge, @NonNull List<KeyChainProtectionParams> secrets)
- throws RemoteException {
- return mRecoverableKeyStoreManager.startRecoverySession(sessionId, verifierPublicKey,
- vaultParams, vaultChallenge, secrets);
- }
-
- @Override
public @NonNull byte[] startRecoverySessionWithCertPath(@NonNull String sessionId,
@NonNull String rootCertificateAlias, @NonNull RecoveryCertPath verifierCertPath,
@NonNull byte[] vaultParams, @NonNull byte[] vaultChallenge,
@@ -2053,11 +2037,6 @@
}
@Override
- public void closeSession(@NonNull String sessionId) throws RemoteException {
- mRecoverableKeyStoreManager.closeSession(sessionId);
- }
-
- @Override
public Map<String, String> recoverKeyChainSnapshot(
@NonNull String sessionId,
@NonNull byte[] recoveryKeyBlob,
@@ -2067,10 +2046,8 @@
}
@Override
- public @NonNull Map<String, byte[]> recoverKeys(@NonNull String sessionId,
- @NonNull byte[] recoveryKeyBlob, @NonNull List<WrappedApplicationKey> applicationKeys)
- throws RemoteException {
- return mRecoverableKeyStoreManager.recoverKeys(sessionId, recoveryKeyBlob, applicationKeys);
+ public void closeSession(@NonNull String sessionId) throws RemoteException {
+ mRecoverableKeyStoreManager.closeSession(sessionId);
}
@Override
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java
index 8b3a1a6..98f1740 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java
@@ -484,6 +484,7 @@
}
public void writeSyntheticPasswordState(int userId, long handle, String name, byte[] data) {
+ ensureSyntheticPasswordDirectoryForUser(userId);
writeFile(getSynthenticPasswordStateFilePathForUser(userId, handle, name), data);
}
@@ -541,14 +542,19 @@
return new File(Environment.getDataSystemDeDirectory(userId) ,SYNTHETIC_PASSWORD_DIRECTORY);
}
- @VisibleForTesting
- protected String getSynthenticPasswordStateFilePathForUser(int userId, long handle,
- String name) {
+ /** Ensure per-user directory for synthetic password state exists */
+ private void ensureSyntheticPasswordDirectoryForUser(int userId) {
File baseDir = getSyntheticPasswordDirectoryForUser(userId);
- String baseName = String.format("%016x.%s", handle, name);
if (!baseDir.exists()) {
baseDir.mkdir();
}
+ }
+
+ @VisibleForTesting
+ protected String getSynthenticPasswordStateFilePathForUser(int userId, long handle,
+ String name) {
+ final File baseDir = getSyntheticPasswordDirectoryForUser(userId);
+ final String baseName = String.format("%016x.%s", handle, name);
return new File(baseDir, baseName).getAbsolutePath();
}
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
index c484251..09906e4 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
@@ -167,9 +167,10 @@
}
/**
- * @deprecated Use {@link #initRecoveryServiceWithSigFile(String, byte[], byte[])} instead.
+ * Used by {@link #initRecoveryServiceWithSigFile(String, byte[], byte[])}.
*/
- public void initRecoveryService(
+ @VisibleForTesting
+ void initRecoveryService(
@NonNull String rootCertificateAlias, @NonNull byte[] recoveryServiceCertFile)
throws RemoteException {
checkRecoverKeyStorePermission();
@@ -232,9 +233,6 @@
throw new ServiceSpecificException(ERROR_INVALID_CERTIFICATE, e.getMessage());
}
- boolean wasInitialized = mDatabase.getRecoveryServiceCertPath(userId, uid,
- rootCertificateAlias) != null;
-
// Save the chosen and validated certificate into database
try {
Log.d(TAG, "Saving the randomly chosen endpoint certificate to database");
@@ -242,9 +240,11 @@
certPath) > 0) {
mDatabase.setRecoveryServiceCertSerial(userId, uid, rootCertificateAlias,
newSerial);
- if (wasInitialized) {
- Log.i(TAG, "This is a certificate change. Snapshot pending.");
+ if (mDatabase.getSnapshotVersion(userId, uid) != null) {
mDatabase.setShouldCreateSnapshot(userId, uid, true);
+ Log.i(TAG, "This is a certificate change. Snapshot must be updated");
+ } else {
+ Log.i(TAG, "This is a certificate change. Snapshot didn't exist");
}
mDatabase.setCounterId(userId, uid, new SecureRandom().nextLong());
}
@@ -350,8 +350,12 @@
return;
}
- Log.i(TAG, "Updated server params. Snapshot pending.");
- mDatabase.setShouldCreateSnapshot(userId, uid, true);
+ if (mDatabase.getSnapshotVersion(userId, uid) != null) {
+ mDatabase.setShouldCreateSnapshot(userId, uid, true);
+ Log.i(TAG, "Updated server params. Snapshot must be updated");
+ } else {
+ Log.i(TAG, "Updated server params. Snapshot didn't exist");
+ }
}
/**
@@ -407,7 +411,12 @@
}
Log.i(TAG, "Updated secret types. Snapshot pending.");
- mDatabase.setShouldCreateSnapshot(userId, uid, true);
+ if (mDatabase.getSnapshotVersion(userId, uid) != null) {
+ mDatabase.setShouldCreateSnapshot(userId, uid, true);
+ Log.i(TAG, "Updated secret types. Snapshot must be updated");
+ } else {
+ Log.i(TAG, "Updated secret types. Snapshot didn't exist");
+ }
}
/**
@@ -436,7 +445,8 @@
*
* @hide
*/
- public @NonNull byte[] startRecoverySession(
+ @VisibleForTesting
+ @NonNull byte[] startRecoverySession(
@NonNull String sessionId,
@NonNull byte[] verifierPublicKey,
@NonNull byte[] vaultParams,
@@ -552,45 +562,6 @@
* service.
* @param applicationKeys The encrypted key blobs returned by the remote vault service. These
* were wrapped with the recovery key.
- * @return Map from alias to raw key material.
- * @throws RemoteException if an error occurred recovering the keys.
- */
- public @NonNull Map<String, byte[]> recoverKeys(
- @NonNull String sessionId,
- @NonNull byte[] encryptedRecoveryKey,
- @NonNull List<WrappedApplicationKey> applicationKeys)
- throws RemoteException {
- checkRecoverKeyStorePermission();
- Preconditions.checkNotNull(sessionId, "invalid session");
- Preconditions.checkNotNull(encryptedRecoveryKey, "encryptedRecoveryKey is null");
- Preconditions.checkNotNull(applicationKeys, "encryptedRecoveryKey is null");
- int uid = Binder.getCallingUid();
- RecoverySessionStorage.Entry sessionEntry = mRecoverySessionStorage.get(uid, sessionId);
- if (sessionEntry == null) {
- throw new ServiceSpecificException(ERROR_SESSION_EXPIRED,
- String.format(Locale.US,
- "Application uid=%d does not have pending session '%s'", uid, sessionId));
- }
-
- try {
- byte[] recoveryKey = decryptRecoveryKey(sessionEntry, encryptedRecoveryKey);
- return recoverApplicationKeys(recoveryKey, applicationKeys);
- } finally {
- sessionEntry.destroy();
- mRecoverySessionStorage.remove(uid);
- }
- }
-
- /**
- * Invoked by a recovery agent after a successful recovery claim is sent to the remote vault
- * service.
- *
- * @param sessionId The session ID used to generate the claim. See
- * {@link #startRecoverySession(String, byte[], byte[], byte[], List)}.
- * @param encryptedRecoveryKey The encrypted recovery key blob returned by the remote vault
- * service.
- * @param applicationKeys The encrypted key blobs returned by the remote vault service. These
- * were wrapped with the recovery key.
* @throws RemoteException if an error occurred recovering the keys.
*/
public @NonNull Map<String, String> recoverKeyChainSnapshot(
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb.java
index 7c4360e..e69f73d 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb.java
@@ -789,11 +789,20 @@
}
/**
- * Updates the snapshot version.
+ * Updates a flag indicating that a new snapshot should be created.
+ * It will be {@code false} until the first application key is added.
+ * After that, the flag will be set to true, if one of the following values is updated:
+ * <ul>
+ * <li> List of application keys
+ * <li> Server params.
+ * <li> Lock-screen secret.
+ * <li> Lock-screen secret type.
+ * <li> Trusted hardware certificate.
+ * </ul>
*
* @param userId The userId of the profile the application is running under.
* @param uid The uid of the application.
- * @param pending The server parameters.
+ * @param pending Should create snapshot flag.
* @return The primary key of the inserted row, or -1 if failed.
*
* @hide
@@ -809,7 +818,7 @@
*
* @param userId The userId of the profile the application is running under.
* @param uid The uid of the application who initialized the local recovery components.
- * @return snapshot outdated flag.
+ * @return should create snapshot flag
*
* @hide
*/
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index a85960a..5b8e8c0 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -71,6 +71,7 @@
import static android.net.NetworkTemplate.MATCH_WIFI;
import static android.net.NetworkTemplate.buildTemplateMobileAll;
import static android.net.TrafficStats.MB_IN_BYTES;
+import static android.os.Trace.TRACE_TAG_NETWORK;
import static android.provider.Settings.Global.NETPOLICY_OVERRIDE_ENABLED;
import static android.provider.Settings.Global.NETPOLICY_QUOTA_ENABLED;
import static android.provider.Settings.Global.NETPOLICY_QUOTA_FRAC_JOBS;
@@ -414,6 +415,7 @@
final Object mNetworkPoliciesSecondLock = new Object();
@GuardedBy("allLocks") volatile boolean mSystemReady;
+ volatile boolean mSystemReallyReady;
@GuardedBy("mUidRulesFirstLock") volatile boolean mRestrictBackground;
@GuardedBy("mUidRulesFirstLock") volatile boolean mRestrictPower;
@@ -866,6 +868,7 @@
Thread.currentThread().interrupt();
throw new IllegalStateException("Service " + TAG + " init interrupted", e);
}
+ mSystemReallyReady = true;
}
final private IUidObserver mUidObserver = new IUidObserver.Stub() {
@@ -1098,6 +1101,7 @@
*/
void updateNotificationsNL() {
if (LOGV) Slog.v(TAG, "updateNotificationsNL()");
+ Trace.traceBegin(TRACE_TAG_NETWORK, "updateNotificationsNL");
// keep track of previously active notifications
final ArraySet<NotificationId> beforeNotifs = new ArraySet<NotificationId>(mActiveNotifs);
@@ -1189,6 +1193,8 @@
cancelNotification(notificationId);
}
}
+
+ Trace.traceEnd(TRACE_TAG_NETWORK);
}
/**
@@ -1402,6 +1408,7 @@
// on background handler thread, and verified CONNECTIVITY_INTERNAL
// permission above.
+ if (!mSystemReallyReady) return;
synchronized (mUidRulesFirstLock) {
synchronized (mNetworkPoliciesSecondLock) {
ensureActiveMobilePolicyAL();
@@ -1601,6 +1608,7 @@
*/
void updateNetworkEnabledNL() {
if (LOGV) Slog.v(TAG, "updateNetworkEnabledNL()");
+ Trace.traceBegin(TRACE_TAG_NETWORK, "updateNetworkEnabledNL");
// TODO: reset any policy-disabled networks when any policy is removed
// completely, which is currently rare case.
@@ -1630,6 +1638,7 @@
}
mStatLogger.logDurationStat(Stats.UPDATE_NETWORK_ENABLED, startTime);
+ Trace.traceEnd(TRACE_TAG_NETWORK);
}
/**
@@ -1690,6 +1699,7 @@
*/
void updateNetworkRulesNL() {
if (LOGV) Slog.v(TAG, "updateNetworkRulesNL()");
+ Trace.traceBegin(TRACE_TAG_NETWORK, "updateNetworkRulesNL");
final NetworkState[] states;
try {
@@ -1863,6 +1873,8 @@
mHandler.obtainMessage(MSG_METERED_IFACES_CHANGED, meteredIfaces).sendToTarget();
mHandler.obtainMessage(MSG_ADVISE_PERSIST_THRESHOLD, lowestRule).sendToTarget();
+
+ Trace.traceEnd(TRACE_TAG_NETWORK);
}
/**
diff --git a/services/core/java/com/android/server/net/NetworkStatsAccess.java b/services/core/java/com/android/server/net/NetworkStatsAccess.java
index 98fe770..cebc472 100644
--- a/services/core/java/com/android/server/net/NetworkStatsAccess.java
+++ b/services/core/java/com/android/server/net/NetworkStatsAccess.java
@@ -174,7 +174,7 @@
AppOpsManager appOps = (AppOpsManager) context.getSystemService(
Context.APP_OPS_SERVICE);
- final int mode = appOps.checkOp(AppOpsManager.OP_GET_USAGE_STATS,
+ final int mode = appOps.noteOp(AppOpsManager.OP_GET_USAGE_STATS,
callingUid, callingPackage);
if (mode == AppOpsManager.MODE_DEFAULT) {
// The default behavior here is to check if PackageManager has given the app
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index e3ff72b..7ee17bc 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -43,6 +43,7 @@
import static android.net.NetworkTemplate.buildTemplateWifiWildcard;
import static android.net.TrafficStats.KB_IN_BYTES;
import static android.net.TrafficStats.MB_IN_BYTES;
+import static android.os.Trace.TRACE_TAG_NETWORK;
import static android.provider.Settings.Global.NETSTATS_AUGMENT_ENABLED;
import static android.provider.Settings.Global.NETSTATS_DEV_BUCKET_DURATION;
import static android.provider.Settings.Global.NETSTATS_DEV_DELETE_AGE;
@@ -109,6 +110,7 @@
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
+import android.os.Trace;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.Global;
@@ -282,7 +284,7 @@
private Handler mHandler;
private Handler.Callback mHandlerCallback;
- private boolean mSystemReady;
+ private volatile boolean mSystemReady;
private long mPersistThreshold = 2 * MB_IN_BYTES;
private long mGlobalAlertBytes;
@@ -1190,27 +1192,43 @@
private void recordSnapshotLocked(long currentTime) throws RemoteException {
// snapshot and record current counters; read UID stats first to
// avoid over counting dev stats.
+ Trace.traceBegin(TRACE_TAG_NETWORK, "snapshotUid");
final NetworkStats uidSnapshot = getNetworkStatsUidDetail(INTERFACES_ALL);
+ Trace.traceEnd(TRACE_TAG_NETWORK);
+ Trace.traceBegin(TRACE_TAG_NETWORK, "snapshotXt");
final NetworkStats xtSnapshot = getNetworkStatsXt();
+ Trace.traceEnd(TRACE_TAG_NETWORK);
+ Trace.traceBegin(TRACE_TAG_NETWORK, "snapshotDev");
final NetworkStats devSnapshot = mNetworkManager.getNetworkStatsSummaryDev();
+ Trace.traceEnd(TRACE_TAG_NETWORK);
// Tethering snapshot for dev and xt stats. Counts per-interface data from tethering stats
// providers that isn't already counted by dev and XT stats.
+ Trace.traceBegin(TRACE_TAG_NETWORK, "snapshotTether");
final NetworkStats tetherSnapshot = getNetworkStatsTethering(STATS_PER_IFACE);
+ Trace.traceEnd(TRACE_TAG_NETWORK);
xtSnapshot.combineAllValues(tetherSnapshot);
devSnapshot.combineAllValues(tetherSnapshot);
// For xt/dev, we pass a null VPN array because usage is aggregated by UID, so VPN traffic
// can't be reattributed to responsible apps.
+ Trace.traceBegin(TRACE_TAG_NETWORK, "recordDev");
mDevRecorder.recordSnapshotLocked(
devSnapshot, mActiveIfaces, null /* vpnArray */, currentTime);
+ Trace.traceEnd(TRACE_TAG_NETWORK);
+ Trace.traceBegin(TRACE_TAG_NETWORK, "recordXt");
mXtRecorder.recordSnapshotLocked(
xtSnapshot, mActiveIfaces, null /* vpnArray */, currentTime);
+ Trace.traceEnd(TRACE_TAG_NETWORK);
// For per-UID stats, pass the VPN info so VPN traffic is reattributed to responsible apps.
VpnInfo[] vpnArray = mConnManager.getAllVpnInfo();
+ Trace.traceBegin(TRACE_TAG_NETWORK, "recordUid");
mUidRecorder.recordSnapshotLocked(uidSnapshot, mActiveUidIfaces, vpnArray, currentTime);
+ Trace.traceEnd(TRACE_TAG_NETWORK);
+ Trace.traceBegin(TRACE_TAG_NETWORK, "recordUidTag");
mUidTagRecorder.recordSnapshotLocked(uidSnapshot, mActiveUidIfaces, vpnArray, currentTime);
+ Trace.traceEnd(TRACE_TAG_NETWORK);
// We need to make copies of member fields that are sent to the observer to avoid
// a race condition between the service handler thread and the observer's
@@ -1255,8 +1273,7 @@
private void performPollLocked(int flags) {
if (!mSystemReady) return;
if (LOGV) Slog.v(TAG, "performPollLocked(flags=0x" + Integer.toHexString(flags) + ")");
-
- final long startRealtime = SystemClock.elapsedRealtime();
+ Trace.traceBegin(TRACE_TAG_NETWORK, "performPollLocked");
final boolean persistNetwork = (flags & FLAG_PERSIST_NETWORK) != 0;
final boolean persistUid = (flags & FLAG_PERSIST_UID) != 0;
@@ -1276,6 +1293,7 @@
}
// persist any pending data depending on requested flags
+ Trace.traceBegin(TRACE_TAG_NETWORK, "[persisting]");
if (persistForce) {
mDevRecorder.forcePersistLocked(currentTime);
mXtRecorder.forcePersistLocked(currentTime);
@@ -1291,11 +1309,7 @@
mUidTagRecorder.maybePersistLocked(currentTime);
}
}
-
- if (LOGV) {
- final long duration = SystemClock.elapsedRealtime() - startRealtime;
- Slog.v(TAG, "performPollLocked() took " + duration + "ms");
- }
+ Trace.traceEnd(TRACE_TAG_NETWORK);
if (mSettings.getSampleEnabled()) {
// sample stats after each full poll
@@ -1307,6 +1321,8 @@
updatedIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
mContext.sendBroadcastAsUser(updatedIntent, UserHandle.ALL,
READ_NETWORK_USAGE_HISTORY);
+
+ Trace.traceEnd(TRACE_TAG_NETWORK);
}
/**
@@ -1389,12 +1405,22 @@
private class NetworkStatsManagerInternalImpl extends NetworkStatsManagerInternal {
@Override
public long getNetworkTotalBytes(NetworkTemplate template, long start, long end) {
- return NetworkStatsService.this.getNetworkTotalBytes(template, start, end);
+ Trace.traceBegin(TRACE_TAG_NETWORK, "getNetworkTotalBytes");
+ try {
+ return NetworkStatsService.this.getNetworkTotalBytes(template, start, end);
+ } finally {
+ Trace.traceEnd(TRACE_TAG_NETWORK);
+ }
}
@Override
public NetworkStats getNetworkUidBytes(NetworkTemplate template, long start, long end) {
- return NetworkStatsService.this.getNetworkUidBytes(template, start, end);
+ Trace.traceBegin(TRACE_TAG_NETWORK, "getNetworkUidBytes");
+ try {
+ return NetworkStatsService.this.getNetworkUidBytes(template, start, end);
+ } finally {
+ Trace.traceEnd(TRACE_TAG_NETWORK);
+ }
}
@Override
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index c98f6a2..4c8b91b 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -467,8 +467,12 @@
mApproved.getOrDefault(userId, new ArrayMap<>());
for (int i = 0; i < allowedByType.size(); i++) {
final ArraySet<String> allowed = allowedByType.valueAt(i);
- allowedComponents.addAll(allowed.stream().map(ComponentName::unflattenFromString)
- .filter(out -> out != null).collect(Collectors.toList()));
+ for (int j = 0; j < allowed.size(); j++) {
+ ComponentName cn = ComponentName.unflattenFromString(allowed.valueAt(j));
+ if (cn != null) {
+ allowedComponents.add(cn);
+ }
+ }
}
return allowedComponents;
}
@@ -479,10 +483,12 @@
mApproved.getOrDefault(userId, new ArrayMap<>());
for (int i = 0; i < allowedByType.size(); i++) {
final ArraySet<String> allowed = allowedByType.valueAt(i);
- allowedPackages.addAll(
- allowed.stream().map(this::getPackageName).
- filter(value -> !TextUtils.isEmpty(value))
- .collect(Collectors.toList()));
+ for (int j = 0; j < allowed.size(); j++) {
+ String pkgName = getPackageName(allowed.valueAt(j));
+ if (!TextUtils.isEmpty(pkgName)) {
+ allowedPackages.add(pkgName);
+ }
+ }
}
return allowedPackages;
}
diff --git a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
index ba7fe78..961d3db 100644
--- a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
+++ b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
@@ -185,6 +185,8 @@
@GuardedBy("mSubscriptions")
Condition evaluateSubscriptionLocked(Uri conditionId, ScheduleCalendar cal,
long now, long nextUserAlarmTime) {
+ if (DEBUG) Slog.d(TAG, String.format("evaluateSubscriptionLocked cal=%s, now=%s, "
+ + "nextUserAlarmTime=%s", cal, ts(now), ts(nextUserAlarmTime)));
Condition condition;
if (cal == null) {
condition = createCondition(conditionId, Condition.STATE_ERROR, "!invalidId");
diff --git a/services/core/java/com/android/server/pm/InstantAppRegistry.java b/services/core/java/com/android/server/pm/InstantAppRegistry.java
index fb81ebf..fde13ac 100644
--- a/services/core/java/com/android/server/pm/InstantAppRegistry.java
+++ b/services/core/java/com/android/server/pm/InstantAppRegistry.java
@@ -312,12 +312,14 @@
return;
}
- // For backwards compatibility we accept match based on first signature only in the case
- // of multiply-signed packagse
+ // For backwards compatibility we accept match based on any signature, since we may have
+ // recorded only the first for multiply-signed packages
final String[] signaturesSha256Digests =
PackageUtils.computeSignaturesSha256Digests(pkg.mSigningDetails.signatures);
- if (signaturesSha256Digests[0].equals(currentCookieSha256)) {
- return;
+ for (String s : signaturesSha256Digests) {
+ if (s.equals(currentCookieSha256)) {
+ return;
+ }
}
// Sorry, you are out of luck - different signatures - nuke data
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 57c2b75..8aa59e8 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -202,6 +202,7 @@
import android.graphics.Bitmap;
import android.hardware.display.DisplayManager;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
@@ -8696,7 +8697,7 @@
}
}
// we're updating the disabled package, so, scan it as the package setting
- final ScanRequest request = new ScanRequest(pkg, sharedUserSetting,
+ final ScanRequest request = new ScanRequest(pkg, sharedUserSetting, null,
disabledPkgSetting /* pkgSetting */, null /* disabledPkgSetting */,
null /* originalPkgSetting */, null, parseFlags, scanFlags,
(pkg == mPlatformPackage), user);
@@ -9874,6 +9875,8 @@
private static class ScanRequest {
/** The parsed package */
@NonNull public final PackageParser.Package pkg;
+ /** The package this package replaces */
+ @Nullable public final PackageParser.Package oldPkg;
/** Shared user settings, if the package has a shared user */
@Nullable public final SharedUserSetting sharedUserSetting;
/**
@@ -9899,6 +9902,7 @@
public ScanRequest(
@NonNull PackageParser.Package pkg,
@Nullable SharedUserSetting sharedUserSetting,
+ @Nullable PackageParser.Package oldPkg,
@Nullable PackageSetting pkgSetting,
@Nullable PackageSetting disabledPkgSetting,
@Nullable PackageSetting originalPkgSetting,
@@ -9908,6 +9912,7 @@
boolean isPlatformPackage,
@Nullable UserHandle user) {
this.pkg = pkg;
+ this.oldPkg = oldPkg;
this.pkgSetting = pkgSetting;
this.sharedUserSetting = sharedUserSetting;
this.oldPkgSetting = pkgSetting == null ? null : new PackageSetting(pkgSetting);
@@ -10037,8 +10042,9 @@
boolean scanSucceeded = false;
try {
- final ScanRequest request = new ScanRequest(pkg, sharedUserSetting, pkgSetting,
- disabledPkgSetting, originalPkgSetting, realPkgName, parseFlags, scanFlags,
+ final ScanRequest request = new ScanRequest(pkg, sharedUserSetting,
+ pkgSetting == null ? null : pkgSetting.pkg, pkgSetting, disabledPkgSetting,
+ originalPkgSetting, realPkgName, parseFlags, scanFlags,
(pkg == mPlatformPackage), user);
final ScanResult result = scanPackageOnlyLI(request, mFactoryTest, currentTime);
if (result.success) {
@@ -10068,6 +10074,7 @@
private void commitScanResultsLocked(@NonNull ScanRequest request, @NonNull ScanResult result)
throws PackageManagerException {
final PackageParser.Package pkg = request.pkg;
+ final PackageParser.Package oldPkg = request.oldPkg;
final @ParseFlags int parseFlags = request.parseFlags;
final @ScanFlags int scanFlags = request.scanFlags;
final PackageSetting oldPkgSetting = request.oldPkgSetting;
@@ -10237,7 +10244,7 @@
} else {
final int userId = user == null ? 0 : user.getIdentifier();
// Modify state for the given package setting
- commitPackageSettings(pkg, pkgSetting, user, scanFlags,
+ commitPackageSettings(pkg, oldPkg, pkgSetting, user, scanFlags,
(parseFlags & PackageParser.PARSE_CHATTY) != 0 /*chatty*/);
if (pkgSetting.getInstantApp(userId)) {
mInstantAppRegistry.addInstantAppLPw(userId, pkgSetting.appId);
@@ -11163,8 +11170,9 @@
* Adds a scanned package to the system. When this method is finished, the package will
* be available for query, resolution, etc...
*/
- private void commitPackageSettings(PackageParser.Package pkg, PackageSetting pkgSetting,
- UserHandle user, final @ScanFlags int scanFlags, boolean chatty) {
+ private void commitPackageSettings(PackageParser.Package pkg,
+ @Nullable PackageParser.Package oldPkg, PackageSetting pkgSetting, UserHandle user,
+ final @ScanFlags int scanFlags, boolean chatty) {
final String pkgName = pkg.packageName;
if (mCustomResolverComponentName != null &&
mCustomResolverComponentName.getPackageName().equals(pkg.packageName)) {
@@ -11504,6 +11512,22 @@
}
}
}
+
+ if (oldPkg != null) {
+ // We need to call revokeRuntimePermissionsIfGroupChanged async as permission
+ // revoke callbacks from this method might need to kill apps which need the
+ // mPackages lock on a different thread. This would dead lock.
+ //
+ // Hence create a copy of all package names and pass it into
+ // revokeRuntimePermissionsIfGroupChanged. Only for those permissions might get
+ // revoked. If a new package is added before the async code runs the permission
+ // won't be granted yet, hence new packages are no problem.
+ final ArrayList<String> allPackageNames = new ArrayList<>(mPackages.keySet());
+
+ AsyncTask.execute(() ->
+ mPermissionManager.revokeRuntimePermissionsIfGroupChanged(pkg, oldPkg,
+ allPackageNames, mPermissionCallback));
+ }
}
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerInternal.java b/services/core/java/com/android/server/pm/permission/PermissionManagerInternal.java
index 859bbe3..2bd5b67 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerInternal.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerInternal.java
@@ -28,6 +28,7 @@
import com.android.server.pm.SharedUserSetting;
import com.android.server.pm.permission.PermissionManagerInternal.PermissionCallback;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
@@ -91,6 +92,22 @@
@NonNull Collection<PackageParser.Package> allPacakges, PermissionCallback callback);
/**
+ * We might auto-grant permissions if any permission of the group is already granted. Hence if
+ * the group of a granted permission changes we need to revoke it to avoid having permissions of
+ * the new group auto-granted.
+ *
+ * @param newPackage The new package that was installed
+ * @param oldPackage The old package that was updated
+ * @param allPackageNames All packages
+ * @param permissionCallback Callback for permission changed
+ */
+ public abstract void revokeRuntimePermissionsIfGroupChanged(
+ @NonNull PackageParser.Package newPackage,
+ @NonNull PackageParser.Package oldPackage,
+ @NonNull ArrayList<String> allPackageNames,
+ @NonNull PermissionCallback permissionCallback);
+
+ /**
* Add all permissions in the given package.
* <p>
* NOTE: argument {@code groupTEMP} is temporary until mPermissionGroups is moved to
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index f5b52fc..f659225 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -51,6 +51,7 @@
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
+import android.util.EventLog;
import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;
@@ -391,6 +392,82 @@
return protectionLevel;
}
+ /**
+ * We might auto-grant permissions if any permission of the group is already granted. Hence if
+ * the group of a granted permission changes we need to revoke it to avoid having permissions of
+ * the new group auto-granted.
+ *
+ * @param newPackage The new package that was installed
+ * @param oldPackage The old package that was updated
+ * @param allPackageNames All package names
+ * @param permissionCallback Callback for permission changed
+ */
+ private void revokeRuntimePermissionsIfGroupChanged(
+ @NonNull PackageParser.Package newPackage,
+ @NonNull PackageParser.Package oldPackage,
+ @NonNull ArrayList<String> allPackageNames,
+ @NonNull PermissionCallback permissionCallback) {
+ final int numOldPackagePermissions = oldPackage.permissions.size();
+ final ArrayMap<String, String> oldPermissionNameToGroupName
+ = new ArrayMap<>(numOldPackagePermissions);
+
+ for (int i = 0; i < numOldPackagePermissions; i++) {
+ final PackageParser.Permission permission = oldPackage.permissions.get(i);
+
+ if (permission.group != null) {
+ oldPermissionNameToGroupName.put(permission.info.name,
+ permission.group.info.name);
+ }
+ }
+
+ final int numNewPackagePermissions = newPackage.permissions.size();
+ for (int newPermissionNum = 0; newPermissionNum < numNewPackagePermissions;
+ newPermissionNum++) {
+ final PackageParser.Permission newPermission =
+ newPackage.permissions.get(newPermissionNum);
+ final int newProtection = newPermission.info.getProtection();
+
+ if ((newProtection & PermissionInfo.PROTECTION_DANGEROUS) != 0) {
+ final String permissionName = newPermission.info.name;
+ final String newPermissionGroupName =
+ newPermission.group == null ? null : newPermission.group.info.name;
+ final String oldPermissionGroupName = oldPermissionNameToGroupName.get(
+ permissionName);
+
+ if (newPermissionGroupName != null
+ && !newPermissionGroupName.equals(oldPermissionGroupName)) {
+ final int[] userIds = mUserManagerInt.getUserIds();
+ final int numUserIds = userIds.length;
+ for (int userIdNum = 0; userIdNum < numUserIds; userIdNum++) {
+ final int userId = userIds[userIdNum];
+
+ final int numPackages = allPackageNames.size();
+ for (int packageNum = 0; packageNum < numPackages; packageNum++) {
+ final String packageName = allPackageNames.get(packageNum);
+
+ if (checkPermission(permissionName, packageName, UserHandle.USER_SYSTEM,
+ userId) == PackageManager.PERMISSION_GRANTED) {
+ EventLog.writeEvent(0x534e4554, "72710897",
+ newPackage.applicationInfo.uid,
+ "Revoking permission", permissionName, "from package",
+ packageName, "as the group changed from",
+ oldPermissionGroupName, "to", newPermissionGroupName);
+
+ try {
+ revokeRuntimePermission(permissionName, packageName, false,
+ Process.SYSTEM_UID, userId, permissionCallback);
+ } catch (IllegalArgumentException e) {
+ Slog.e(TAG, "Could not revoke " + permissionName + " from "
+ + packageName, e);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
private void addAllPermissions(PackageParser.Package pkg, boolean chatty) {
final int N = pkg.permissions.size();
for (int i=0; i<N; i++) {
@@ -1968,6 +2045,15 @@
return PermissionManagerService.this.isPermissionsReviewRequired(pkg, userId);
}
@Override
+ public void revokeRuntimePermissionsIfGroupChanged(
+ @NonNull PackageParser.Package newPackage,
+ @NonNull PackageParser.Package oldPackage,
+ @NonNull ArrayList<String> allPackageNames,
+ @NonNull PermissionCallback permissionCallback) {
+ PermissionManagerService.this.revokeRuntimePermissionsIfGroupChanged(newPackage,
+ oldPackage, allPackageNames, permissionCallback);
+ }
+ @Override
public void addAllPermissions(Package pkg, boolean chatty) {
PermissionManagerService.this.addAllPermissions(pkg, chatty);
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index fce4b20..920e77f 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -4809,6 +4809,9 @@
// For layout, the status bar is always at the top with our fixed height.
displayFrames.mStable.top = displayFrames.mUnrestricted.top
+ mStatusBarHeightForRotation[displayFrames.mRotation];
+ // Make sure the status bar covers the entire cutout height
+ displayFrames.mStable.top = Math.max(displayFrames.mStable.top,
+ displayFrames.mDisplayCutoutSafe.top);
// Tell the bar controller where the collapsed status bar content is
mTmpRect.set(mStatusBar.getContentFrameLw());
diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java
index 5f2ac4f..401f74c 100644
--- a/services/core/java/com/android/server/stats/StatsCompanionService.java
+++ b/services/core/java/com/android/server/stats/StatsCompanionService.java
@@ -107,6 +107,15 @@
public static final int CODE_DATA_BROADCAST = 1;
public static final int CODE_SUBSCRIBER_BROADCAST = 1;
+ /**
+ * The last report time is provided with each intent registered to
+ * StatsManager#setFetchReportsOperation. This allows easy de-duping in the receiver if
+ * statsd is requesting the client to retrieve the same statsd data. The last report time
+ * corresponds to the last_report_elapsed_nanos that will provided in the current
+ * ConfigMetricsReport, and this timestamp also corresponds to the
+ * current_report_elapsed_nanos of the most recently obtained ConfigMetricsReport.
+ */
+ public static final String EXTRA_LAST_REPORT_TIME = "android.app.extra.LAST_REPORT_TIME";
public static final int DEATH_THRESHOLD = 10;
private final Context mContext;
@@ -197,10 +206,11 @@
}
@Override
- public void sendDataBroadcast(IBinder intentSenderBinder) {
+ public void sendDataBroadcast(IBinder intentSenderBinder, long lastReportTimeNs) {
enforceCallingPermission();
IntentSender intentSender = new IntentSender(intentSenderBinder);
Intent intent = new Intent();
+ intent.putExtra(EXTRA_LAST_REPORT_TIME, lastReportTimeNs);
try {
intentSender.sendIntent(mContext, CODE_DATA_BROADCAST, intent, null, null);
} catch (IntentSender.SendIntentException e) {
@@ -274,7 +284,7 @@
// Add in all the apps for every user/profile.
for (UserInfo profile : users) {
List<PackageInfo> pi =
- pm.getInstalledPackagesAsUser(PackageManager.MATCH_DISABLED_COMPONENTS, profile.id);
+ pm.getInstalledPackagesAsUser(PackageManager.MATCH_KNOWN_PACKAGES, profile.id);
for (int j = 0; j < pi.size(); j++) {
if (pi.get(j).applicationInfo != null) {
uids.add(pi.get(j).applicationInfo.uid);
diff --git a/services/core/jni/BroadcastRadio/Tuner.cpp b/services/core/jni/BroadcastRadio/Tuner.cpp
index a04697f..9c2e1e5 100644
--- a/services/core/jni/BroadcastRadio/Tuner.cpp
+++ b/services/core/jni/BroadcastRadio/Tuner.cpp
@@ -26,7 +26,6 @@
#include <binder/IPCThreadState.h>
#include <broadcastradio-utils-1x/Utils.h>
#include <core_jni_helpers.h>
-#include <media/AudioSystem.h>
#include <nativehelper/JNIHelp.h>
#include <utils/Log.h>
@@ -70,8 +69,6 @@
} Tuner;
} gjni;
-static const char* const kAudioDeviceName = "Radio tuner source";
-
class HalDeathRecipient : public hidl_death_recipient {
wp<V1_1::ITunerCallback> mTunerCallback;
@@ -154,20 +151,6 @@
return V1_1::IBroadcastRadio::castFrom(halModule).withDefault(nullptr);
}
-// TODO(b/62713378): implement support for multiple tuners open at the same time
-static void notifyAudioService(TunerContext& ctx, bool connected) {
- if (!ctx.mWithAudio) return;
- if (ctx.mIsAudioConnected == connected) return;
- ctx.mIsAudioConnected = connected;
-
- ALOGD("Notifying AudioService about new state: %d", connected);
- auto token = IPCThreadState::self()->clearCallingIdentity();
- AudioSystem::setDeviceConnectionState(AUDIO_DEVICE_IN_FM_TUNER,
- connected ? AUDIO_POLICY_DEVICE_STATE_AVAILABLE : AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE,
- nullptr, kAudioDeviceName);
- IPCThreadState::self()->restoreCallingIdentity(token);
-}
-
void assignHalInterfaces(JNIEnv *env, JavaRef<jobject> const &jTuner,
sp<V1_0::IBroadcastRadio> halModule, sp<V1_0::ITuner> halTuner) {
ALOGV("%s(%p)", __func__, halTuner.get());
@@ -193,8 +176,6 @@
ctx.mHalDeathRecipient = new HalDeathRecipient(getNativeCallback(env, jTuner));
halTuner->linkToDeath(ctx.mHalDeathRecipient, 0);
-
- notifyAudioService(ctx, true);
}
static sp<V1_0::ITuner> getHalTuner(const TunerContext& ctx) {
@@ -236,8 +217,6 @@
ALOGI("Closing tuner %p", ctx.mHalTuner.get());
- notifyAudioService(ctx, false);
-
ctx.mHalTuner->unlinkToDeath(ctx.mHalDeathRecipient);
ctx.mHalDeathRecipient = nullptr;
@@ -280,14 +259,6 @@
return convert::BandConfigFromHal(env, halConfig, region).release();
}
-static void nativeSetMuted(JNIEnv *env, jobject obj, jlong nativeContext, bool mute) {
- ALOGV("%s(%d)", __func__, mute);
- lock_guard<mutex> lk(gContextMutex);
- auto& ctx = getNativeContext(nativeContext);
-
- notifyAudioService(ctx, !mute);
-}
-
static void nativeStep(JNIEnv *env, jobject obj, jlong nativeContext,
bool directionDown, bool skipSubChannel) {
ALOGV("%s", __func__);
@@ -467,7 +438,6 @@
(void*)nativeSetConfiguration },
{ "nativeGetConfiguration", "(JI)Landroid/hardware/radio/RadioManager$BandConfig;",
(void*)nativeGetConfiguration },
- { "nativeSetMuted", "(JZ)V", (void*)nativeSetMuted },
{ "nativeStep", "(JZZ)V", (void*)nativeStep },
{ "nativeScan", "(JZZ)V", (void*)nativeScan },
{ "nativeTune", "(JLandroid/hardware/radio/ProgramSelector;)V", (void*)nativeTune },
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java
index 25d2875..c70d1e1 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java
@@ -360,7 +360,7 @@
*/
@Test
public void testDispatchUids_dispatchNeededChanges() throws RemoteException {
- when(mAppOpsService.checkOperation(AppOpsManager.OP_GET_USAGE_STATS, Process.myUid(), null))
+ when(mAppOpsService.noteOperation(AppOpsManager.OP_GET_USAGE_STATS, Process.myUid(), null))
.thenReturn(AppOpsManager.MODE_ALLOWED);
final int[] changesToObserve = {
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
index db910f2..e82478f 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
@@ -302,6 +302,33 @@
}
@Test
+ public void initRecoveryService_updatesShouldCreatesnapshotOnCertUpdate() throws Exception {
+ int uid = Binder.getCallingUid();
+ int userId = UserHandle.getCallingUserId();
+ long certSerial = 1000L;
+ mRecoverableKeyStoreDb.setShouldCreateSnapshot(userId, uid, false);
+
+ mRecoverableKeyStoreManager.initRecoveryService(ROOT_CERTIFICATE_ALIAS,
+ TestData.getCertXmlWithSerial(certSerial));
+
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
+
+ mRecoverableKeyStoreManager.initRecoveryService(ROOT_CERTIFICATE_ALIAS,
+ TestData.getCertXmlWithSerial(certSerial + 1));
+
+ // Since there were no recoverable keys, new snapshot will not be created.
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
+
+ generateKeyAndSimulateSync(userId, uid, 10);
+
+ mRecoverableKeyStoreManager.initRecoveryService(ROOT_CERTIFICATE_ALIAS,
+ TestData.getCertXmlWithSerial(certSerial + 2));
+
+ // Since there were a recoverable key, new serial number triggers snapshot creation
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isTrue();
+ }
+
+ @Test
public void initRecoveryService_triesToFilterRootAlias() throws Exception {
int uid = Binder.getCallingUid();
int userId = UserHandle.getCallingUserId();
@@ -405,7 +432,8 @@
assertThat(mRecoverableKeyStoreDb.getRecoveryServiceCertSerial(userId, uid,
DEFAULT_ROOT_CERT_ALIAS)).isEqualTo(certSerial + 1);
- assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isTrue();
+ // There were no keys.
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
}
@Test
@@ -479,10 +507,12 @@
mRecoverableKeyStoreManager.initRecoveryService(ROOT_CERTIFICATE_ALIAS,
TestData.getCertXmlWithSerial(certSerial));
+
+ generateKeyAndSimulateSync(userId, uid, 10);
+
mRecoverableKeyStoreManager.initRecoveryService(ROOT_CERTIFICATE_ALIAS,
TestData.getCertXmlWithSerial(certSerial));
- // If the second update succeeds, getShouldCreateSnapshot() will return true.
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
}
@@ -935,7 +965,6 @@
assertThat(recoveredKeys).hasSize(1);
assertThat(recoveredKeys).containsKey(TEST_ALIAS);
- // TODO(76083050) Test the grant mechanism for the keys.
}
@Test
@@ -974,7 +1003,6 @@
assertThat(recoveredKeys).hasSize(1);
assertThat(recoveredKeys).containsKey(TEST_ALIAS2);
- // TODO(76083050) Test the grant mechanism for the keys.
}
@Test
@@ -1016,6 +1044,9 @@
byte[] serverParams = new byte[] { 1 };
mRecoverableKeyStoreManager.setServerParams(serverParams);
+
+ generateKeyAndSimulateSync(userId, uid, 10);
+
mRecoverableKeyStoreManager.setServerParams(serverParams);
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
@@ -1027,6 +1058,9 @@
int userId = UserHandle.getCallingUserId();
mRecoverableKeyStoreManager.setServerParams(new byte[] { 1 });
+
+ generateKeyAndSimulateSync(userId, uid, 10);
+
mRecoverableKeyStoreManager.setServerParams(new byte[] { 2 });
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isTrue();
@@ -1059,6 +1093,7 @@
mRecoverableKeyStoreManager.setRecoverySecretTypes(secretTypes);
+ // There were no keys.
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
}
@@ -1070,6 +1105,9 @@
int[] secretTypes = new int[] { 101 };
mRecoverableKeyStoreManager.setRecoverySecretTypes(secretTypes);
+
+ generateKeyAndSimulateSync(userId, uid, 10);
+
mRecoverableKeyStoreManager.setRecoverySecretTypes(secretTypes);
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
@@ -1081,6 +1119,11 @@
int userId = UserHandle.getCallingUserId();
mRecoverableKeyStoreManager.setRecoverySecretTypes(new int[] { 101 });
+
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
+
+ generateKeyAndSimulateSync(userId, uid, 10);
+
mRecoverableKeyStoreManager.setRecoverySecretTypes(new int[] { 102 });
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isTrue();
@@ -1102,9 +1145,8 @@
int userId = UserHandle.getCallingUserId();
mRecoverableKeyStoreManager.setRecoverySecretTypes(new int[] { 1 });
- mRecoverableKeyStoreManager.generateKey(TEST_ALIAS);
- // Pretend that key was synced
- mRecoverableKeyStoreDb.setShouldCreateSnapshot(userId, uid, false);
+ generateKeyAndSimulateSync(userId, uid, 10);
+
mRecoverableKeyStoreManager.setRecoverySecretTypes(new int[] { 2 });
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isTrue();
@@ -1175,6 +1217,14 @@
return bytes;
}
+ private void generateKeyAndSimulateSync(int userId, int uid, int snapshotVersion)
+ throws Exception{
+ mRecoverableKeyStoreManager.generateKey(TEST_ALIAS);
+ // Simulate key sync.
+ mRecoverableKeyStoreDb.setSnapshotVersion(userId, uid, snapshotVersion);
+ mRecoverableKeyStoreDb.setShouldCreateSnapshot(userId, uid, false);
+ }
+
private AndroidKeyStoreSecretKey generateAndroidKeyStoreKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance(
KEY_ALGORITHM,
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializerTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializerTest.java
index 07c6203..a23ac0f 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializerTest.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializerTest.java
@@ -164,9 +164,9 @@
}
@Test
- public void serialize_doesNotThrowForNullPublicKey() throws Exception {
+ public void serialize_doesNotThrowForTestSnapshot() throws Exception {
KeyChainSnapshotSerializer.serialize(
- createTestKeyChainSnapshotNoPublicKey(), new ByteArrayOutputStream());
+ createTestKeyChainSnapshot(), new ByteArrayOutputStream());
}
private static List<WrappedApplicationKey> roundTripKeys() throws Exception {
@@ -198,19 +198,6 @@
.build();
}
- private static KeyChainSnapshot createTestKeyChainSnapshotNoPublicKey() throws Exception {
- return new KeyChainSnapshot.Builder()
- .setCounterId(COUNTER_ID)
- .setSnapshotVersion(SNAPSHOT_VERSION)
- .setServerParams(SERVER_PARAMS)
- .setMaxAttempts(MAX_ATTEMPTS)
- .setEncryptedRecoveryKeyBlob(KEY_BLOB)
- .setKeyChainProtectionParams(createKeyChainProtectionParamsList())
- .setWrappedApplicationKeys(createKeys())
- .setTrustedHardwareCertPath(CERT_PATH)
- .build();
- }
-
private static List<WrappedApplicationKey> createKeys() {
ArrayList<WrappedApplicationKey> keyList = new ArrayList<>();
keyList.add(createKey(TEST_KEY_1_ALIAS, TEST_KEY_1_BYTES));
diff --git a/services/usage/java/com/android/server/usage/StorageStatsService.java b/services/usage/java/com/android/server/usage/StorageStatsService.java
index 2fec20a..61d6b7d 100644
--- a/services/usage/java/com/android/server/usage/StorageStatsService.java
+++ b/services/usage/java/com/android/server/usage/StorageStatsService.java
@@ -17,6 +17,7 @@
package com.android.server.usage;
import static com.android.internal.util.ArrayUtils.defeatNullable;
+import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;
import android.app.AppOpsManager;
import android.app.usage.ExternalStorageStats;
@@ -30,7 +31,6 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PackageStats;
import android.content.pm.UserInfo;
-import android.net.TrafficStats;
import android.net.Uri;
import android.os.Binder;
import android.os.Environment;
@@ -138,7 +138,7 @@
}
private void enforcePermission(int callingUid, String callingPackage) {
- final int mode = mAppOps.checkOp(AppOpsManager.OP_GET_USAGE_STATS,
+ final int mode = mAppOps.noteOp(AppOpsManager.OP_GET_USAGE_STATS,
callingUid, callingPackage);
switch (mode) {
case AppOpsManager.MODE_ALLOWED:
@@ -207,8 +207,8 @@
// Free space is usable bytes plus any cached data that we're
// willing to automatically clear. To avoid user confusion, this
// logic should be kept in sync with getAllocatableBytes().
- if (isQuotaSupported(volumeUuid, callingPackage)) {
- final long cacheTotal = getCacheBytes(volumeUuid, callingPackage);
+ if (isQuotaSupported(volumeUuid, PLATFORM_PACKAGE_NAME)) {
+ final long cacheTotal = getCacheBytes(volumeUuid, PLATFORM_PACKAGE_NAME);
final long cacheReserved = mStorage.getStorageCacheBytes(path, 0);
final long cacheClearable = Math.max(0, cacheTotal - cacheReserved);
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index 1fbc27b..f9fa336 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -660,7 +660,7 @@
if (callingUid == Process.SYSTEM_UID) {
return true;
}
- final int mode = mAppOps.checkOp(AppOpsManager.OP_GET_USAGE_STATS,
+ final int mode = mAppOps.noteOp(AppOpsManager.OP_GET_USAGE_STATS,
callingUid, callingPackage);
if (mode == AppOpsManager.MODE_DEFAULT) {
// The default behavior here is to check if PackageManager has given the app
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index e098de9..ca8c6d6 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -2758,8 +2758,8 @@
* physical slot index 0, to the logical slot 1. The index of the array means the index of the
* logical slots.
*
- * @param physicalSlots Index i in the array representing physical slot for phone i. The array
- * size should be same as {@link #getPhoneCount()}.
+ * @param physicalSlots The content of the array represents the physical slot index. The array
+ * size should be same as {@link #getUiccSlotsInfo()}.
* @return boolean Return true if the switch succeeds, false if the switch fails.
* @hide
*/
diff --git a/telephony/java/android/telephony/UiccSlotInfo.java b/telephony/java/android/telephony/UiccSlotInfo.java
index 125161d..a39992b 100644
--- a/telephony/java/android/telephony/UiccSlotInfo.java
+++ b/telephony/java/android/telephony/UiccSlotInfo.java
@@ -148,7 +148,7 @@
UiccSlotInfo that = (UiccSlotInfo) obj;
return (mIsActive == that.mIsActive)
&& (mIsEuicc == that.mIsEuicc)
- && (mCardId == that.mCardId)
+ && (Objects.equals(mCardId, that.mCardId))
&& (mCardStateInfo == that.mCardStateInfo)
&& (mLogicalSlotIdx == that.mLogicalSlotIdx)
&& (mIsExtendedApduSupported == that.mIsExtendedApduSupported);
diff --git a/telephony/java/android/telephony/euicc/EuiccCardManager.java b/telephony/java/android/telephony/euicc/EuiccCardManager.java
index 38f9745..1141177 100644
--- a/telephony/java/android/telephony/euicc/EuiccCardManager.java
+++ b/telephony/java/android/telephony/euicc/EuiccCardManager.java
@@ -623,7 +623,7 @@
}
/**
- * Lists all notifications of the given {@code notificationEvents}.
+ * Lists all notifications of the given {@code events}.
*
* @param cardId The Id of the eUICC.
* @param events bits of the event types ({@link EuiccNotification.Event}) to list.
diff --git a/telephony/java/android/telephony/ims/ImsSsData.java b/telephony/java/android/telephony/ims/ImsSsData.java
index 49ead77..b68055e 100644
--- a/telephony/java/android/telephony/ims/ImsSsData.java
+++ b/telephony/java/android/telephony/ims/ImsSsData.java
@@ -296,6 +296,7 @@
result = in.readInt();
mSsInfo = in.createIntArray();
mCfInfo = (ImsCallForwardInfo[])in.readParcelableArray(this.getClass().getClassLoader());
+ mImsSsInfo = (ImsSsInfo[])in.readParcelableArray(this.getClass().getClassLoader());
}
public static final Creator<ImsSsData> CREATOR = new Creator<ImsSsData>() {
@@ -319,6 +320,7 @@
out.writeInt(result);
out.writeIntArray(mSsInfo);
out.writeParcelableArray(mCfInfo, 0);
+ out.writeParcelableArray(mImsSsInfo, 0);
}
@Override
diff --git a/telephony/java/android/telephony/ims/feature/MmTelFeature.java b/telephony/java/android/telephony/ims/feature/MmTelFeature.java
index aaf1a1cf8..dda8cd1 100644
--- a/telephony/java/android/telephony/ims/feature/MmTelFeature.java
+++ b/telephony/java/android/telephony/ims/feature/MmTelFeature.java
@@ -18,7 +18,6 @@
import android.annotation.IntDef;
import android.annotation.SystemApi;
-import android.net.Uri;
import android.os.Bundle;
import android.os.Message;
import android.os.RemoteException;
@@ -613,7 +612,19 @@
* {@link TelecomManager#TTY_MODE_FULL},
* {@link TelecomManager#TTY_MODE_HCO},
* {@link TelecomManager#TTY_MODE_VCO}
- * @param onCompleteMessage A {@link Message} to be used when the mode has been set.
+ * @param onCompleteMessage If non-null, this MmTelFeature should call this {@link Message} when
+ * the operation is complete by using the associated {@link android.os.Messenger} in
+ * {@link Message#replyTo}. For example:
+ * {@code
+ * // Set UI TTY Mode and other operations...
+ * try {
+ * // Notify framework that the mode was changed.
+ * Messenger uiMessenger = onCompleteMessage.replyTo;
+ * uiMessenger.send(onCompleteMessage);
+ * } catch (RemoteException e) {
+ * // Remote side is dead
+ * }
+ * }
*/
public void setUiTtyMode(int mode, Message onCompleteMessage) {
// Base Implementation - Should be overridden
diff --git a/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java b/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java
index 7b9fe2b..da6a7a6 100644
--- a/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java
@@ -30,8 +30,6 @@
import com.android.ims.internal.IImsVideoCallProvider;
import android.telephony.ims.ImsVideoCallProvider;
-import dalvik.system.CloseGuard;
-
/**
* Base implementation of IImsCallSession, which implements stub versions of the methods available.
*
@@ -510,6 +508,21 @@
* and event flash to 16. Currently, event flash is not supported.
*
* @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs.
+ * @param result If non-null, the {@link Message} to send when the operation is complete. This
+ * is done by using the associated {@link android.os.Messenger} in
+ * {@link Message#replyTo}. For example:
+ * {@code
+ * // Send DTMF and other operations...
+ * try {
+ * // Notify framework that the DTMF was sent.
+ * Messenger dtmfMessenger = result.replyTo;
+ * if (dtmfMessenger != null) {
+ * dtmfMessenger.send(result);
+ * }
+ * } catch (RemoteException e) {
+ * // Remote side is dead
+ * }
+ * }
*/
public void sendDtmf(char c, Message result) {
}
diff --git a/tests/net/java/com/android/server/net/NetworkStatsAccessTest.java b/tests/net/java/com/android/server/net/NetworkStatsAccessTest.java
index 23318c2..b870bbd 100644
--- a/tests/net/java/com/android/server/net/NetworkStatsAccessTest.java
+++ b/tests/net/java/com/android/server/net/NetworkStatsAccessTest.java
@@ -176,7 +176,7 @@
}
private void setHasAppOpsPermission(int appOpsMode, boolean hasPermission) {
- when(mAppOps.checkOp(AppOpsManager.OP_GET_USAGE_STATS, TEST_UID, TEST_PKG))
+ when(mAppOps.noteOp(AppOpsManager.OP_GET_USAGE_STATS, TEST_UID, TEST_PKG))
.thenReturn(appOpsMode);
when(mContext.checkCallingPermission(Manifest.permission.PACKAGE_USAGE_STATS)).thenReturn(
hasPermission ? PackageManager.PERMISSION_GRANTED
diff --git a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
index 0504c79..dcbbdbb 100644
--- a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
@@ -18,6 +18,7 @@
import com.android.internal.os.BinderInternal;
+import android.app.AppOpsManager;
import android.os.Binder;
import android.os.IPermissionController;
import android.os.RemoteException;
@@ -49,11 +50,17 @@
public void testSetPermissionController() {
try {
IPermissionController pc = new IPermissionController.Stub() {
+ @Override
public boolean checkPermission(java.lang.String permission, int pid, int uid) {
return true;
}
@Override
+ public int noteOp(String op, int uid, String packageName) {
+ return AppOpsManager.MODE_ALLOWED;
+ }
+
+ @Override
public String[] getPackagesForUid(int uid) {
return new String[0];
}