diff options
343 files changed, 4530 insertions, 2966 deletions
diff --git a/api/current.txt b/api/current.txt index 317f4afabc01..ccfc0f5fd57f 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5483,7 +5483,8 @@ package android.app { method @DimenRes public int getDesiredHeightResId(); method @NonNull public android.graphics.drawable.Icon getIcon(); method @NonNull public android.app.PendingIntent getIntent(); - method public boolean getSuppressInitialNotification(); + method @Deprecated public boolean getSuppressInitialNotification(); + method public boolean getSuppressNotification(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification.BubbleMetadata> CREATOR; } @@ -5497,7 +5498,8 @@ package android.app { method @NonNull public android.app.Notification.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int); method @NonNull public android.app.Notification.BubbleMetadata.Builder setIcon(@NonNull android.graphics.drawable.Icon); method @NonNull public android.app.Notification.BubbleMetadata.Builder setIntent(@NonNull android.app.PendingIntent); - method @NonNull public android.app.Notification.BubbleMetadata.Builder setSuppressInitialNotification(boolean); + method @Deprecated @NonNull public android.app.Notification.BubbleMetadata.Builder setSuppressInitialNotification(boolean); + method @NonNull public android.app.Notification.BubbleMetadata.Builder setSuppressNotification(boolean); } public static class Notification.Builder { diff --git a/api/system-current.txt b/api/system-current.txt index c0da879241ab..10517a8549a5 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3499,9 +3499,9 @@ package android.media { method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int dispatchAudioFocusChange(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy); method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.audiopolicy.AudioProductStrategies getAudioProductStrategies(); method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.audiopolicy.AudioVolumeGroups getAudioVolumeGroups(); - method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes); - method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes); - method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getVolumeIndexForAttributes(@NonNull android.media.AudioAttributes); + method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes); + method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes); + method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getVolumeIndexForAttributes(@NonNull android.media.AudioAttributes); method public boolean isAudioServerRunning(); method public boolean isHdmiSystemAudioSupported(); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int registerAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy); @@ -9479,22 +9479,6 @@ package android.telephony.mbms.vendor { package android.util { - public class DocumentsStatsLog { - method public static void logActivityLaunch(int, boolean, int, int); - method public static void logFileOperation(int, int); - method public static void logFileOperationCanceled(int); - method public static void logFileOperationCopyMoveMode(int, int); - method public static void logFileOperationFailure(int, int); - method public static void logFilePick(int, long, int, boolean, int, int, int); - method public static void logInvalidScopedAccessRequest(int); - method public static void logPickerLaunchedFrom(@Nullable String); - method public static void logRootVisited(int, int); - method public static void logSearchMode(int); - method public static void logSearchType(int); - method public static void logStartupMs(int); - method public static void logUserAction(int); - } - public class EventLog { method public static void readEventsOnWrapping(int[], long, java.util.Collection<android.util.EventLog.Event>) throws java.io.IOException; } diff --git a/api/test-current.txt b/api/test-current.txt index c3215a6867ae..fcad996a67fa 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -1365,6 +1365,7 @@ package android.net { } public class TestNetworkManager { + method public android.net.TestNetworkInterface createTapInterface(); method public android.net.TestNetworkInterface createTunInterface(@NonNull android.net.LinkAddress[]); method public void setupTestNetwork(@NonNull String, @NonNull android.os.IBinder); method public void teardownTestNetwork(@NonNull android.net.Network); diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp index df84b6a4dc34..a9f5208ef812 100644 --- a/cmds/statsd/src/StatsLogProcessor.cpp +++ b/cmds/statsd/src/StatsLogProcessor.cpp @@ -77,7 +77,6 @@ const int FIELD_ID_TIME_TO_LIVE_NANOS = 2; #define NS_PER_HOUR 3600 * NS_PER_SEC -#define STATS_DATA_DIR "/data/misc/stats-data" #define STATS_ACTIVE_METRIC_DIR "/data/misc/stats-active-metric" // Cool down period for writing data to disk to avoid overwriting files. @@ -106,6 +105,19 @@ StatsLogProcessor::StatsLogProcessor(const sp<UidMap>& uidMap, StatsLogProcessor::~StatsLogProcessor() { } +static void flushProtoToBuffer(ProtoOutputStream& proto, vector<uint8_t>* outData) { + outData->clear(); + outData->resize(proto.size()); + size_t pos = 0; + sp<android::util::ProtoReader> reader = proto.data(); + while (reader->readBuffer() != NULL) { + size_t toRead = reader->currentToRead(); + std::memcpy(&((*outData)[pos]), reader->readBuffer(), toRead); + pos += toRead; + reader->move(toRead); + } +} + void StatsLogProcessor::onAnomalyAlarmFired( const int64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet) { @@ -366,25 +378,29 @@ void StatsLogProcessor::onDumpReport(const ConfigKey& key, const int64_t dumpTim proto->end(configKeyToken); // End of ConfigKey. + bool keepFile = false; + auto it = mMetricsManagers.find(key); + if (it != mMetricsManagers.end() && it->second->shouldPersistLocalHistory()) { + keepFile = true; + } + // Then, check stats-data directory to see there's any file containing // ConfigMetricsReport from previous shutdowns to concatenate to reports. - StorageManager::appendConfigMetricsReport(key, proto, erase_data); + StorageManager::appendConfigMetricsReport( + key, proto, erase_data && !keepFile /* should remove file after appending it */, + dumpReportReason == ADB_DUMP /*if caller is adb*/); - auto it = mMetricsManagers.find(key); if (it != mMetricsManagers.end()) { // This allows another broadcast to be sent within the rate-limit period if we get close to // filling the buffer again soon. mLastBroadcastTimes.erase(key); - // Start of ConfigMetricsReport (reports). - uint64_t reportsToken = - proto->start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_REPORTS); - onConfigMetricsReportLocked(key, dumpTimeStampNs, - include_current_partial_bucket, - erase_data, dumpReportReason, - dumpLatency, proto); - proto->end(reportsToken); - // End of ConfigMetricsReport (reports). + vector<uint8_t> buffer; + onConfigMetricsReportLocked(key, dumpTimeStampNs, include_current_partial_bucket, + erase_data, dumpReportReason, dumpLatency, + false /* is this data going to be saved on disk */, &buffer); + proto->write(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_REPORTS, + reinterpret_cast<char*>(buffer.data()), buffer.size()); } else { ALOGW("Config source %s does not exist", key.ToString().c_str()); } @@ -404,16 +420,8 @@ void StatsLogProcessor::onDumpReport(const ConfigKey& key, const int64_t dumpTim dumpReportReason, dumpLatency, &proto); if (outData != nullptr) { - outData->clear(); - outData->resize(proto.size()); - size_t pos = 0; - sp<android::util::ProtoReader> reader = proto.data(); - while (reader->readBuffer() != NULL) { - size_t toRead = reader->currentToRead(); - std::memcpy(&((*outData)[pos]), reader->readBuffer(), toRead); - pos += toRead; - reader->move(toRead); - } + flushProtoToBuffer(proto, outData); + VLOG("output data size %zu", outData->size()); } StatsdStats::getInstance().noteMetricsReportSent(key, proto.size()); @@ -422,13 +430,11 @@ void StatsLogProcessor::onDumpReport(const ConfigKey& key, const int64_t dumpTim /* * onConfigMetricsReportLocked dumps serialized ConfigMetricsReport into outData. */ -void StatsLogProcessor::onConfigMetricsReportLocked(const ConfigKey& key, - const int64_t dumpTimeStampNs, - const bool include_current_partial_bucket, - const bool erase_data, - const DumpReportReason dumpReportReason, - const DumpLatency dumpLatency, - ProtoOutputStream* proto) { +void StatsLogProcessor::onConfigMetricsReportLocked( + const ConfigKey& key, const int64_t dumpTimeStampNs, + const bool include_current_partial_bucket, const bool erase_data, + const DumpReportReason dumpReportReason, const DumpLatency dumpLatency, + const bool dataSavedOnDisk, vector<uint8_t>* buffer) { // We already checked whether key exists in mMetricsManagers in // WriteDataToDisk. auto it = mMetricsManagers.find(key); @@ -440,35 +446,46 @@ void StatsLogProcessor::onConfigMetricsReportLocked(const ConfigKey& key, std::set<string> str_set; + ProtoOutputStream tempProto; // First, fill in ConfigMetricsReport using current data on memory, which // starts from filling in StatsLogReport's. - it->second->onDumpReport(dumpTimeStampNs, include_current_partial_bucket, - erase_data, dumpLatency, &str_set, proto); + it->second->onDumpReport(dumpTimeStampNs, include_current_partial_bucket, erase_data, + dumpLatency, &str_set, &tempProto); // Fill in UidMap if there is at least one metric to report. // This skips the uid map if it's an empty config. if (it->second->getNumMetrics() > 0) { - uint64_t uidMapToken = proto->start(FIELD_TYPE_MESSAGE | FIELD_ID_UID_MAP); + uint64_t uidMapToken = tempProto.start(FIELD_TYPE_MESSAGE | FIELD_ID_UID_MAP); mUidMap->appendUidMap( dumpTimeStampNs, key, it->second->hashStringInReport() ? &str_set : nullptr, - it->second->versionStringsInReport(), it->second->installerInReport(), proto); - proto->end(uidMapToken); + it->second->versionStringsInReport(), it->second->installerInReport(), &tempProto); + tempProto.end(uidMapToken); } // Fill in the timestamps. - proto->write(FIELD_TYPE_INT64 | FIELD_ID_LAST_REPORT_ELAPSED_NANOS, - (long long)lastReportTimeNs); - proto->write(FIELD_TYPE_INT64 | FIELD_ID_CURRENT_REPORT_ELAPSED_NANOS, - (long long)dumpTimeStampNs); - proto->write(FIELD_TYPE_INT64 | FIELD_ID_LAST_REPORT_WALL_CLOCK_NANOS, - (long long)lastReportWallClockNs); - proto->write(FIELD_TYPE_INT64 | FIELD_ID_CURRENT_REPORT_WALL_CLOCK_NANOS, - (long long)getWallClockNs()); + tempProto.write(FIELD_TYPE_INT64 | FIELD_ID_LAST_REPORT_ELAPSED_NANOS, + (long long)lastReportTimeNs); + tempProto.write(FIELD_TYPE_INT64 | FIELD_ID_CURRENT_REPORT_ELAPSED_NANOS, + (long long)dumpTimeStampNs); + tempProto.write(FIELD_TYPE_INT64 | FIELD_ID_LAST_REPORT_WALL_CLOCK_NANOS, + (long long)lastReportWallClockNs); + tempProto.write(FIELD_TYPE_INT64 | FIELD_ID_CURRENT_REPORT_WALL_CLOCK_NANOS, + (long long)getWallClockNs()); // Dump report reason - proto->write(FIELD_TYPE_INT32 | FIELD_ID_DUMP_REPORT_REASON, dumpReportReason); + tempProto.write(FIELD_TYPE_INT32 | FIELD_ID_DUMP_REPORT_REASON, dumpReportReason); for (const auto& str : str_set) { - proto->write(FIELD_TYPE_STRING | FIELD_COUNT_REPEATED | FIELD_ID_STRINGS, str); + tempProto.write(FIELD_TYPE_STRING | FIELD_COUNT_REPEATED | FIELD_ID_STRINGS, str); + } + + flushProtoToBuffer(tempProto, buffer); + + // save buffer to disk if needed + if (erase_data && !dataSavedOnDisk && it->second->shouldPersistLocalHistory()) { + VLOG("save history to disk"); + string file_name = StorageManager::getDataHistoryFileName((long)getWallClockSec(), + key.GetUid(), key.GetId()); + StorageManager::writeFile(file_name.c_str(), buffer->data(), buffer->size()); } } @@ -584,18 +601,14 @@ void StatsLogProcessor::WriteDataToDiskLocked(const ConfigKey& key, !mMetricsManagers.find(key)->second->shouldWriteToDisk()) { return; } - ProtoOutputStream proto; + vector<uint8_t> buffer; onConfigMetricsReportLocked(key, timestampNs, true /* include_current_partial_bucket*/, - true /* erase_data */, dumpReportReason, dumpLatency, &proto); - string file_name = StringPrintf("%s/%ld_%d_%lld", STATS_DATA_DIR, - (long)getWallClockSec(), key.GetUid(), (long long)key.GetId()); - android::base::unique_fd fd(open(file_name.c_str(), - O_WRONLY | O_CREAT | O_CLOEXEC, S_IRUSR | S_IWUSR)); - if (fd == -1) { - ALOGE("Attempt to write %s but failed", file_name.c_str()); - return; - } - proto.flush(fd.get()); + true /* erase_data */, dumpReportReason, dumpLatency, true, + &buffer); + string file_name = + StorageManager::getDataFileName((long)getWallClockSec(), key.GetUid(), key.GetId()); + StorageManager::writeFile(file_name.c_str(), buffer.data(), buffer.size()); + // We were able to write the ConfigMetricsReport to disk, so we should trigger collection ASAP. mOnDiskDataConfigs.insert(key); } diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h index 305a4ce24b49..f4db0af29cef 100644 --- a/cmds/statsd/src/StatsLogProcessor.h +++ b/cmds/statsd/src/StatsLogProcessor.h @@ -164,12 +164,13 @@ private: const DumpReportReason dumpReportReason, const DumpLatency dumpLatency); - void onConfigMetricsReportLocked(const ConfigKey& key, const int64_t dumpTimeStampNs, - const bool include_current_partial_bucket, - const bool erase_data, - const DumpReportReason dumpReportReason, - const DumpLatency dumpLatency, - util::ProtoOutputStream* proto); + void onConfigMetricsReportLocked( + const ConfigKey& key, const int64_t dumpTimeStampNs, + const bool include_current_partial_bucket, const bool erase_data, + const DumpReportReason dumpReportReason, const DumpLatency dumpLatency, + /*if dataSavedToDisk is true, it indicates the caller will write the data to disk + (e.g., before reboot). So no need to further persist local history.*/ + const bool dataSavedToDisk, vector<uint8_t>* proto); /* Check if we should send a broadcast if approaching memory limits and if we're over, we * actually delete the data. */ diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 90ba7ce0c812..e577b6dda06d 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -208,7 +208,7 @@ message Atom { 119 [(log_from_module) = "docsui"]; DocsUISearchTypeReported docs_ui_search_type_reported = 120 [(log_from_module) = "docsui"]; - DataStallEvent data_stall_event = 121; + DataStallEvent data_stall_event = 121 [(log_from_module) = "network_stack"]; RescuePartyResetReported rescue_party_reset_reported = 122; SignedConfigReported signed_config_reported = 123; GnssNiEventReported gnss_ni_event_reported = 124; @@ -269,7 +269,7 @@ message Atom { StyleUIChanged style_ui_changed = 179; PrivacyIndicatorsInteracted privacy_indicators_interacted = 180; AppInstallOnExternalStorageReported app_install_on_external_storage_reported = 181; - NetworkStackReported network_stack_reported = 182; + NetworkStackReported network_stack_reported = 182 [(log_from_module) = "network_stack"]; AppMovedStorageReported app_moved_storage_reported = 183; BiometricEnrolled biometric_enrolled = 184; SystemServerWatchdogOccurred system_server_watchdog_occurred = 185; @@ -3122,6 +3122,8 @@ message BiometricAcquired { optional int32 acquire_info = 6; // Vendor-specific acquire info. Valid only if acquire_info == ACQUIRED_VENDOR. optional int32 acquire_info_vendor = 7; + // Dictates if this message should trigger additional debugging. + optional bool debug = 8; } /** @@ -3158,6 +3160,8 @@ message BiometricAuthenticated { // AUTHENTICATED. for setRequireConfirmation(true), this is from PENDING_CONFIRMATION to // CONFIRMED. optional int64 latency_millis = 7; + // Dictates if this message should trigger additional debugging. + optional bool debug = 8; } /** @@ -3183,6 +3187,8 @@ message BiometricErrorOccurred { // Vendor-specific error info. Valid only if acquire_info == ACQUIRED_VENDOR. These are defined // by the vendor and not specified by the HIDL interface. optional int32 error_info_vendor = 7; + // Dictates if this message should trigger additional debugging. + optional bool debug = 8; } /** @@ -3195,6 +3201,8 @@ message BiometricSystemHealthIssueDetected { optional android.hardware.biometrics.ModalityEnum modality = 1; // Type of issue detected. optional android.hardware.biometrics.IssueEnum issue = 2; + // Dictates if this message should trigger additional debugging. + optional bool debug = 3; } /** @@ -5584,6 +5592,12 @@ message BubbleUIChanged { // Whether the bubble is unread. If it is unread, a dot is shown in the bubble stack icon. optional bool is_unread = 9; + + // Whether the bubble is an on-going one. + optional bool is_ongoing = 10; + + // Whether the bubble is produced by an app running in foreground. + optional bool is_foreground = 11; } /** diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h index 53f12acd3b84..4d21a29c1d82 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.h +++ b/cmds/statsd/src/guardrail/StatsdStats.h @@ -145,6 +145,9 @@ public: // Maximum age (30 days) that files on disk can exist in seconds. static const int kMaxAgeSecond = 60 * 60 * 24 * 30; + // Maximum age (2 days) that local history files on disk can exist in seconds. + static const int kMaxLocalHistoryAgeSecond = 60 * 60 * 24 * 2; + // Maximum number of files (1000) that can be in stats directory on disk. static const int kMaxFileNumber = 1000; diff --git a/cmds/statsd/src/metrics/MetricsManager.cpp b/cmds/statsd/src/metrics/MetricsManager.cpp index 095f9dde6129..6a55289bc8a2 100644 --- a/cmds/statsd/src/metrics/MetricsManager.cpp +++ b/cmds/statsd/src/metrics/MetricsManager.cpp @@ -65,7 +65,8 @@ MetricsManager::MetricsManager(const ConfigKey& key, const StatsdConfig& config, mTtlNs(config.has_ttl_in_seconds() ? config.ttl_in_seconds() * NS_PER_SEC : -1), mTtlEndNs(-1), mLastReportTimeNs(currentTimeNs), - mLastReportWallClockNs(getWallClockNs()) { + mLastReportWallClockNs(getWallClockNs()), + mShouldPersistHistory(config.persist_locally()) { // Init the ttl end timestamp. refreshTtl(timeBaseNs); diff --git a/cmds/statsd/src/metrics/MetricsManager.h b/cmds/statsd/src/metrics/MetricsManager.h index d317f8e00d82..00ae3b7028d9 100644 --- a/cmds/statsd/src/metrics/MetricsManager.h +++ b/cmds/statsd/src/metrics/MetricsManager.h @@ -78,6 +78,10 @@ public: return mNoReportMetricIds.size() != mAllMetricProducers.size(); } + bool shouldPersistLocalHistory() const { + return mShouldPersistHistory; + } + void dumpStates(FILE* out, bool verbose); inline bool isInTtl(const int64_t timestampNs) const { @@ -184,6 +188,8 @@ private: // Contains the annotations passed in with StatsdConfig. std::list<std::pair<const int64_t, const int32_t>> mAnnotations; + const bool mShouldPersistHistory; + // To guard access to mAllowedLogSources mutable std::mutex mAllowedLogSourcesMutex; diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp index 90a4e8b90051..c44ea8aa8ed0 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp +++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp @@ -633,10 +633,17 @@ void ValueMetricProducer::onMatchedLogEventInternalLocked(const size_t matcherIn flushIfNeededLocked(eventTimeNs); } - // For pulled data, we already check condition when we decide to pull or - // in onDataPulled. So take all of them. - // For pushed data, just check condition. - if (!(mIsPulled || condition)) { + // We should not accumulate the data for pushed metrics when the condition is false. + bool shouldSkipForPushMetric = !mIsPulled && !condition; + // For pulled metrics, there are two cases: + // - to compute diffs, we need to process all the state changes + // - for non-diffs metrics, we should ignore the data if the condition wasn't true. If we have a + // state change from + // + True -> True: we should process the data, it might be a bucket boundary + // + True -> False: we als need to process the data. + bool shouldSkipForPulledMetric = mIsPulled && !mUseDiff + && mCondition != ConditionState::kTrue; + if (shouldSkipForPushMetric || shouldSkipForPulledMetric) { VLOG("ValueMetric skip event because condition is false"); return; } diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.h b/cmds/statsd/src/metrics/ValueMetricProducer.h index 0f5633732db9..8c1999518ea6 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.h +++ b/cmds/statsd/src/metrics/ValueMetricProducer.h @@ -259,6 +259,11 @@ private: FRIEND_TEST(ValueMetricProducerTest, TestLateOnDataPulledWithoutDiff); FRIEND_TEST(ValueMetricProducerTest, TestPartialBucketCreated); FRIEND_TEST(ValueMetricProducerTest, TestPartialResetOnBucketBoundaries); + FRIEND_TEST(ValueMetricProducerTest, TestPulledData_noDiff_bucketBoundaryFalse); + FRIEND_TEST(ValueMetricProducerTest, TestPulledData_noDiff_bucketBoundaryTrue); + FRIEND_TEST(ValueMetricProducerTest, TestPulledData_noDiff_withFailure); + FRIEND_TEST(ValueMetricProducerTest, TestPulledData_noDiff_withMultipleConditionChanges); + FRIEND_TEST(ValueMetricProducerTest, TestPulledData_noDiff_withoutCondition); FRIEND_TEST(ValueMetricProducerTest, TestPulledEventsNoCondition); FRIEND_TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset); FRIEND_TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset); diff --git a/cmds/statsd/src/statsd_config.proto b/cmds/statsd/src/statsd_config.proto index 257e65ee423d..2260b9b56d0b 100644 --- a/cmds/statsd/src/statsd_config.proto +++ b/cmds/statsd/src/statsd_config.proto @@ -439,6 +439,8 @@ message StatsdConfig { optional bool installer_in_metric_report = 19; + optional bool persist_locally = 20 [default = false]; + // Field number 1000 is reserved for later use. reserved 1000; } diff --git a/cmds/statsd/src/storage/StorageManager.cpp b/cmds/statsd/src/storage/StorageManager.cpp index cf8b97494a06..0a9161d51cfe 100644 --- a/cmds/statsd/src/storage/StorageManager.cpp +++ b/cmds/statsd/src/storage/StorageManager.cpp @@ -56,9 +56,31 @@ std::mutex StorageManager::sTrainInfoMutex; using android::base::StringPrintf; using std::unique_ptr; -// Returns array of int64_t which contains timestamp in seconds, uid, and -// configID. -static void parseFileName(char* name, int64_t* result) { +struct FileName { + int64_t mTimestampSec; + int mUid; + int64_t mConfigId; + bool mIsHistory; + string getFullFileName(const char* path) { + return StringPrintf("%s/%lld_%d_%lld%s", path, (long long)mTimestampSec, (int)mUid, + (long long)mConfigId, (mIsHistory ? "_history" : "")); + }; +}; + +string StorageManager::getDataFileName(long wallClockSec, int uid, int64_t id) { + return StringPrintf("%s/%ld_%d_%lld", STATS_DATA_DIR, wallClockSec, uid, + (long long)id); +} + +string StorageManager::getDataHistoryFileName(long wallClockSec, int uid, int64_t id) { + return StringPrintf("%s/%ld_%d_%lld_history", STATS_DATA_DIR, wallClockSec, uid, + (long long)id); +} + +// Returns array of int64_t which contains timestamp in seconds, uid, +// configID and whether the file is a local history file. +static void parseFileName(char* name, FileName* output) { + int64_t result[3]; int index = 0; char* substr = strtok(name, "_"); while (substr != nullptr && index < 3) { @@ -72,11 +94,12 @@ static void parseFileName(char* name, int64_t* result) { if (index < 3) { result[0] = -1; } -} -static string getFilePath(const char* path, int64_t timestamp, int64_t uid, int64_t configID) { - return StringPrintf("%s/%lld_%d_%lld", path, (long long)timestamp, (int)uid, - (long long)configID); + output->mTimestampSec = result[0]; + output->mUid = result[1]; + output->mConfigId = result[2]; + // check if the file is a local history. + output->mIsHistory = (substr != nullptr && strcmp("history", substr) == 0); } void StorageManager::writeFile(const char* file, const void* buffer, int numBytes) { @@ -88,14 +111,13 @@ void StorageManager::writeFile(const char* file, const void* buffer, int numByte trimToFit(STATS_SERVICE_DIR); trimToFit(STATS_DATA_DIR); - int result = write(fd, buffer, numBytes); - if (result == numBytes) { + if (android::base::WriteFully(fd, buffer, numBytes)) { VLOG("Successfully wrote %s", file); } else { - VLOG("Failed to write %s", file); + ALOGE("Failed to write %s", file); } - result = fchown(fd, AID_STATSD, AID_STATSD); + int result = fchown(fd, AID_STATSD, AID_STATSD); if (result) { VLOG("Failed to chown %s to statsd", file); } @@ -349,13 +371,10 @@ void StorageManager::sendBroadcast(const char* path, if (name[0] == '.') continue; VLOG("file %s", name); - int64_t result[3]; - parseFileName(name, result); - if (result[0] == -1) continue; - int64_t uid = result[1]; - int64_t configID = result[2]; - - sendBroadcast(ConfigKey((int)uid, configID)); + FileName output; + parseFileName(name, &output); + if (output.mTimestampSec == -1 || output.mIsHistory) continue; + sendBroadcast(ConfigKey((int)output.mUid, output.mConfigId)); } } @@ -378,55 +397,58 @@ bool StorageManager::hasConfigMetricsReport(const ConfigKey& key) { if (suffixLen <= nameLen && strncmp(name + nameLen - suffixLen, suffix.c_str(), suffixLen) == 0) { // Check again that the file name is parseable. - int64_t result[3]; - parseFileName(name, result); - if (result[0] == -1) continue; + FileName output; + parseFileName(name, &output); + if (output.mTimestampSec == -1 || output.mIsHistory) continue; return true; } } return false; } -void StorageManager::appendConfigMetricsReport(const ConfigKey& key, - ProtoOutputStream* proto, - bool erasa_data) { +void StorageManager::appendConfigMetricsReport(const ConfigKey& key, ProtoOutputStream* proto, + bool erase_data, bool isAdb) { unique_ptr<DIR, decltype(&closedir)> dir(opendir(STATS_DATA_DIR), closedir); if (dir == NULL) { VLOG("Path %s does not exist", STATS_DATA_DIR); return; } - string suffix = StringPrintf("%d_%lld", key.GetUid(), (long long)key.GetId()); - dirent* de; while ((de = readdir(dir.get()))) { char* name = de->d_name; + string fileName(name); if (name[0] == '.') continue; + FileName output; + parseFileName(name, &output); - size_t nameLen = strlen(name); - size_t suffixLen = suffix.length(); - if (suffixLen <= nameLen && - strncmp(name + nameLen - suffixLen, suffix.c_str(), suffixLen) == 0) { - int64_t result[3]; - parseFileName(name, result); - if (result[0] == -1) continue; - int64_t timestamp = result[0]; - int64_t uid = result[1]; - int64_t configID = result[2]; - - string file_name = getFilePath(STATS_DATA_DIR, timestamp, uid, configID); - int fd = open(file_name.c_str(), O_RDONLY | O_CLOEXEC); - if (fd != -1) { - string content; - if (android::base::ReadFdToString(fd, &content)) { - proto->write(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_REPORTS, - content.c_str(), content.size()); - } - close(fd); + if (output.mTimestampSec == -1 || (output.mIsHistory && !isAdb) || + output.mUid != key.GetUid() || output.mConfigId != key.GetId()) { + continue; + } + + auto fullPathName = StringPrintf("%s/%s", STATS_DATA_DIR, fileName.c_str()); + int fd = open(fullPathName.c_str(), O_RDONLY | O_CLOEXEC); + if (fd != -1) { + string content; + if (android::base::ReadFdToString(fd, &content)) { + proto->write(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_REPORTS, + content.c_str(), content.size()); } + close(fd); + } else { + ALOGE("file cannot be opened"); + } - if (erasa_data) { - remove(file_name.c_str()); + if (erase_data) { + remove(fullPathName.c_str()); + } else if (output.mIsHistory && !isAdb) { + // This means a real data owner has called to get this data. But the config says it + // wants to keep a local history. So now this file must be renamed as a history file. + // So that next time, when owner calls getData() again, this data won't be uploaded + // again. rename returns 0 on success + if (rename(fullPathName.c_str(), (fullPathName + "_history").c_str())) { + ALOGE("Failed to rename file %s", fullPathName.c_str()); } } } @@ -458,23 +480,20 @@ void StorageManager::readConfigFromDisk(map<ConfigKey, StatsdConfig>& configsMap while ((de = readdir(dir.get()))) { char* name = de->d_name; if (name[0] == '.') continue; - VLOG("file %s", name); - int64_t result[3]; - parseFileName(name, result); - if (result[0] == -1) continue; - int64_t timestamp = result[0]; - int64_t uid = result[1]; - int64_t configID = result[2]; - string file_name = getFilePath(STATS_SERVICE_DIR, timestamp, uid, configID); + FileName output; + parseFileName(name, &output); + if (output.mTimestampSec == -1) continue; + string file_name = output.getFullFileName(STATS_SERVICE_DIR); int fd = open(file_name.c_str(), O_RDONLY | O_CLOEXEC); if (fd != -1) { string content; if (android::base::ReadFdToString(fd, &content)) { StatsdConfig config; if (config.ParseFromString(content)) { - configsMap[ConfigKey(uid, configID)] = config; - VLOG("map key uid=%lld|configID=%lld", (long long)uid, (long long)configID); + configsMap[ConfigKey(output.mUid, output.mConfigId)] = config; + VLOG("map key uid=%lld|configID=%lld", (long long)output.mUid, + (long long)output.mConfigId); } } close(fd); @@ -533,6 +552,30 @@ bool StorageManager::hasIdenticalConfig(const ConfigKey& key, return false; } +void StorageManager::sortFiles(vector<FileInfo>* fileNames) { + // Reverse sort to effectively remove from the back (oldest entries). + // This will sort files in reverse-chronological order. Local history files have lower + // priority than regular data files. + sort(fileNames->begin(), fileNames->end(), [](FileInfo& lhs, FileInfo& rhs) { + // first consider if the file is a local history + if (lhs.mIsHistory && !rhs.mIsHistory) { + return false; + } else if (rhs.mIsHistory && !lhs.mIsHistory) { + return true; + } + + // then consider the age. + if (lhs.mFileAgeSec < rhs.mFileAgeSec) { + return true; + } else if (lhs.mFileAgeSec > rhs.mFileAgeSec) { + return false; + } + + // then good luck.... use string::compare + return lhs.mFileName.compare(rhs.mFileName) > 0; + }); +} + void StorageManager::trimToFit(const char* path) { unique_ptr<DIR, decltype(&closedir)> dir(opendir(path), closedir); if (dir == NULL) { @@ -541,55 +584,46 @@ void StorageManager::trimToFit(const char* path) { } dirent* de; int totalFileSize = 0; - vector<string> fileNames; + vector<FileInfo> fileNames; + auto nowSec = getWallClockSec(); while ((de = readdir(dir.get()))) { char* name = de->d_name; if (name[0] == '.') continue; - int64_t result[3]; - parseFileName(name, result); - if (result[0] == -1) continue; - int64_t timestamp = result[0]; - int64_t uid = result[1]; - int64_t configID = result[2]; - string file_name = getFilePath(path, timestamp, uid, configID); + FileName output; + parseFileName(name, &output); + if (output.mTimestampSec == -1) continue; + string file_name = output.getFullFileName(path); // Check for timestamp and delete if it's too old. - long fileAge = getWallClockSec() - timestamp; - if (fileAge > StatsdStats::kMaxAgeSecond) { + long fileAge = nowSec - output.mTimestampSec; + if (fileAge > StatsdStats::kMaxAgeSecond || + (output.mIsHistory && fileAge > StatsdStats::kMaxLocalHistoryAgeSecond)) { deleteFile(file_name.c_str()); + continue; } - fileNames.push_back(file_name); ifstream file(file_name.c_str(), ifstream::in | ifstream::binary); + int fileSize = 0; if (file.is_open()) { file.seekg(0, ios::end); - int fileSize = file.tellg(); + fileSize = file.tellg(); file.close(); totalFileSize += fileSize; } + fileNames.emplace_back(file_name, output.mIsHistory, fileSize, fileAge); } if (fileNames.size() > StatsdStats::kMaxFileNumber || totalFileSize > StatsdStats::kMaxFileSize) { - // Reverse sort to effectively remove from the back (oldest entries). - // This will sort files in reverse-chronological order. - sort(fileNames.begin(), fileNames.end(), std::greater<std::string>()); + sortFiles(&fileNames); } // Start removing files from oldest to be under the limit. while (fileNames.size() > 0 && (fileNames.size() > StatsdStats::kMaxFileNumber || totalFileSize > StatsdStats::kMaxFileSize)) { - string file_name = fileNames.at(fileNames.size() - 1); - ifstream file(file_name.c_str(), ifstream::in | ifstream::binary); - if (file.is_open()) { - file.seekg(0, ios::end); - int fileSize = file.tellg(); - file.close(); - totalFileSize -= fileSize; - } - - deleteFile(file_name.c_str()); + totalFileSize -= fileNames.at(fileNames.size() - 1).mFileSizeBytes; + deleteFile(fileNames.at(fileNames.size() - 1).mFileName.c_str()); fileNames.pop_back(); } } @@ -614,15 +648,13 @@ void StorageManager::printDirStats(int outFd, const char* path) { if (name[0] == '.') { continue; } - int64_t result[3]; - parseFileName(name, result); - if (result[0] == -1) continue; - int64_t timestamp = result[0]; - int64_t uid = result[1]; - int64_t configID = result[2]; - dprintf(outFd, "\t #%d, Last updated: %lld, UID: %d, Config ID: %lld", fileCount + 1, - (long long)timestamp, (int)uid, (long long)configID); - string file_name = getFilePath(path, timestamp, uid, configID); + FileName output; + parseFileName(name, &output); + if (output.mTimestampSec == -1) continue; + dprintf(outFd, "\t #%d, Last updated: %lld, UID: %d, Config ID: %lld, %s", fileCount + 1, + (long long)output.mTimestampSec, output.mUid, (long long)output.mConfigId, + (output.mIsHistory ? "local history" : "")); + string file_name = output.getFullFileName(path); ifstream file(file_name.c_str(), ifstream::in | ifstream::binary); if (file.is_open()) { file.seekg(0, ios::end); diff --git a/cmds/statsd/src/storage/StorageManager.h b/cmds/statsd/src/storage/StorageManager.h index dfcea65b0872..69b41c2cb974 100644 --- a/cmds/statsd/src/storage/StorageManager.h +++ b/cmds/statsd/src/storage/StorageManager.h @@ -31,6 +31,19 @@ using android::util::ProtoOutputStream; class StorageManager : public virtual RefBase { public: + struct FileInfo { + FileInfo(std::string name, bool isHistory, int fileSize, long fileAge) + : mFileName(name), + mIsHistory(isHistory), + mFileSizeBytes(fileSize), + mFileAgeSec(fileAge) { + } + std::string mFileName; + bool mIsHistory; + int mFileSizeBytes; + long mFileAgeSec; + }; + /** * Writes a given byte array as a file to the specified file path. */ @@ -81,10 +94,19 @@ public: /** * Appends the ConfigMetricsReport found on disk to the specifid proto * and, if erase_data, deletes it from disk. + * + * [isAdb]: if the caller is adb dump. This includes local adb dump or dumpsys by + * bugreport or incidentd. When true, we will append any local history data too. + * + * When + * erase_data=true, isAdb=true: append history data to output, remove all data after read + * erase_data=false, isAdb=true: append history data to output, keep data after read + * erase_data=true, isAdb=false: do not append history data, and remove data after read + * erase_data=false, isAdb=false: do not append history data and *rename* all data files to + * history files. */ - static void appendConfigMetricsReport(const ConfigKey& key, - ProtoOutputStream* proto, - bool erase_data); + static void appendConfigMetricsReport(const ConfigKey& key, ProtoOutputStream* proto, + bool erase_data, bool isAdb); /** * Call to load the saved configs from disk. @@ -115,6 +137,12 @@ public: */ static void printStats(int out); + static string getDataFileName(long wallClockSec, int uid, int64_t id); + + static string getDataHistoryFileName(long wallClockSec, int uid, int64_t id); + + static void sortFiles(vector<FileInfo>* fileNames); + private: /** * Prints disk usage statistics about a directory related to statsd. diff --git a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp index c12a59003bab..43a3c7b0b2ea 100644 --- a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp +++ b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp @@ -2964,6 +2964,146 @@ TEST(ValueMetricProducerTest, TestPullNeededNoTimeConstraints) { EXPECT_EQ(10, report.value_metrics().data(0).bucket_info(0).condition_true_nanos()); } +TEST(ValueMetricProducerTest, TestPulledData_noDiff_withoutCondition) { + ValueMetric metric = ValueMetricProducerTestHelper::createMetric(); + metric.set_use_diff(false); + + sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>(); + sp<ValueMetricProducer> valueProducer = + ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric); + + vector<shared_ptr<LogEvent>> allData; + allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 10)); + valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs + 30); + + // Bucket should have been completed. + assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {10}, {bucketSizeNs}); +} + +TEST(ValueMetricProducerTest, TestPulledData_noDiff_withMultipleConditionChanges) { + ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition(); + metric.set_use_diff(false); + + sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>(); + EXPECT_CALL(*pullerManager, Pull(tagId, _)) + // condition becomes true + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + data->push_back(ValueMetricProducerTestHelper::createEvent( + bucketStartTimeNs + 30, 10)); + return true; + })) + // condition becomes false + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + data->push_back(ValueMetricProducerTestHelper::createEvent( + bucketStartTimeNs + 50, 20)); + return true; + })); + sp<ValueMetricProducer> valueProducer = + ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric); + valueProducer->mCondition = ConditionState::kFalse; + + valueProducer->onConditionChanged(true, bucketStartTimeNs + 8); + valueProducer->onConditionChanged(false, bucketStartTimeNs + 50); + // has one slice + EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval curInterval = + valueProducer->mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(false, curInterval.hasBase); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(20, curInterval.value.long_value); + + + // Now the alarm is delivered. Condition is off though. + vector<shared_ptr<LogEvent>> allData; + allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 110)); + valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs); + + assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {50 - 8}); + curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(false, curInterval.hasBase); + EXPECT_EQ(false, curInterval.hasValue); +} + +TEST(ValueMetricProducerTest, TestPulledData_noDiff_bucketBoundaryTrue) { + ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition(); + metric.set_use_diff(false); + + sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>(); + EXPECT_CALL(*pullerManager, Pull(tagId, _)) + // condition becomes true + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + data->push_back(ValueMetricProducerTestHelper::createEvent( + bucketStartTimeNs + 30, 10)); + return true; + })); + sp<ValueMetricProducer> valueProducer = + ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric); + valueProducer->mCondition = ConditionState::kFalse; + + valueProducer->onConditionChanged(true, bucketStartTimeNs + 8); + + // Now the alarm is delivered. Condition is off though. + vector<shared_ptr<LogEvent>> allData; + allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 30)); + valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs); + + assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {30}, {bucketSizeNs - 8}); + ValueMetricProducer::Interval curInterval = + valueProducer->mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(false, curInterval.hasBase); + EXPECT_EQ(false, curInterval.hasValue); +} + +TEST(ValueMetricProducerTest, TestPulledData_noDiff_bucketBoundaryFalse) { + ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition(); + metric.set_use_diff(false); + + sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>(); + sp<ValueMetricProducer> valueProducer = + ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric); + valueProducer->mCondition = ConditionState::kFalse; + + // Now the alarm is delivered. Condition is off though. + vector<shared_ptr<LogEvent>> allData; + allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 30)); + valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs); + + // Condition was always false. + assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {}, {}); +} + +TEST(ValueMetricProducerTest, TestPulledData_noDiff_withFailure) { + ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition(); + metric.set_use_diff(false); + + sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>(); + EXPECT_CALL(*pullerManager, Pull(tagId, _)) + // condition becomes true + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + data->push_back(ValueMetricProducerTestHelper::createEvent( + bucketStartTimeNs + 30, 10)); + return true; + })) + .WillOnce(Return(false)); + sp<ValueMetricProducer> valueProducer = + ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric); + valueProducer->mCondition = ConditionState::kFalse; + + valueProducer->onConditionChanged(true, bucketStartTimeNs + 8); + valueProducer->onConditionChanged(false, bucketStartTimeNs + 50); + + // Now the alarm is delivered. Condition is off though. + vector<shared_ptr<LogEvent>> allData; + allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 30)); + valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs); + + // No buckets, we had a failure. + assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {}, {}); +} } // namespace statsd } // namespace os diff --git a/cmds/statsd/tests/storage/StorageManager_test.cpp b/cmds/statsd/tests/storage/StorageManager_test.cpp index 4564a5d058a3..cae2f3069855 100644 --- a/cmds/statsd/tests/storage/StorageManager_test.cpp +++ b/cmds/statsd/tests/storage/StorageManager_test.cpp @@ -110,6 +110,21 @@ TEST(StorageManagerTest, TrainInfoReadWriteTrainNameSizeOneTest) { EXPECT_EQ(trainInfo.experimentIds, trainInfoResult.experimentIds); } +TEST(StorageManagerTest, SortFileTest) { + vector<StorageManager::FileInfo> list; + // assume now sec is 500 + list.emplace_back("200_5000_123454", false, 20, 300); + list.emplace_back("300_2000_123454_history", true, 30, 200); + list.emplace_back("400_100009_123454_history", true, 40, 100); + list.emplace_back("100_2000_123454", false, 50, 400); + + StorageManager::sortFiles(&list); + EXPECT_EQ("200_5000_123454", list[0].mFileName); + EXPECT_EQ("100_2000_123454", list[1].mFileName); + EXPECT_EQ("400_100009_123454_history", list[2].mFileName); + EXPECT_EQ("300_2000_123454_history", list[3].mFileName); +} + } // namespace statsd } // namespace os } // namespace android diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index b80f7813640c..4f388a441aab 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -2052,7 +2052,10 @@ public class ActivityManager { @RequiresPermission(android.Manifest.permission.REORDER_TASKS) public void moveTaskToFront(int taskId, @MoveTaskFlags int flags, Bundle options) { try { - getTaskService().moveTaskToFront(taskId, flags, options); + ActivityThread thread = ActivityThread.currentActivityThread(); + IApplicationThread appThread = thread.getApplicationThread(); + String packageName = mContext.getPackageName(); + getTaskService().moveTaskToFront(appThread, packageName, taskId, flags, options); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -4263,7 +4266,10 @@ public class ActivityManager { */ public void moveToFront() { try { - mAppTaskImpl.moveToFront(); + ActivityThread thread = ActivityThread.currentActivityThread(); + IApplicationThread appThread = thread.getApplicationThread(); + String packageName = ActivityThread.currentPackageName(); + mAppTaskImpl.moveToFront(appThread, packageName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index da9ea8359854..926044bffdd0 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -33,7 +33,6 @@ import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.GraphicBuffer; import android.graphics.Rect; -import android.hardware.HardwareBuffer; import android.os.Bundle; import android.os.Handler; import android.os.IRemoteCallback; @@ -925,8 +924,7 @@ public class ActivityOptions { // Unpackage the GraphicBuffer from the parceled thumbnail final GraphicBuffer buffer = opts.getParcelable(KEY_ANIM_THUMBNAIL); if (buffer != null) { - mThumbnail = Bitmap.wrapHardwareBuffer( - HardwareBuffer.createFromGraphicBuffer(buffer), null); + mThumbnail = Bitmap.wrapHardwareBuffer(buffer, null); } mStartX = opts.getInt(KEY_ANIM_START_X, 0); mStartY = opts.getInt(KEY_ANIM_START_Y, 0); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index b37d117238af..b6e5754aa65f 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -2121,7 +2121,11 @@ public final class ActivityThread extends ClientTransactionHandler { } LoadedApk packageInfo = ref != null ? ref.get() : null; - if (ai != null && packageInfo != null && isLoadedApkUpToDate(packageInfo, ai)) { + if (ai != null && packageInfo != null) { + if (!isLoadedApkResourceDirsUpToDate(packageInfo, ai)) { + packageInfo.updateApplicationInfo(ai, null); + } + if (packageInfo.isSecurityViolation() && (flags&Context.CONTEXT_IGNORE_SECURITY) == 0) { throw new SecurityException( @@ -2205,9 +2209,11 @@ public final class ActivityThread extends ClientTransactionHandler { LoadedApk packageInfo = ref != null ? ref.get() : null; - boolean isUpToDate = packageInfo != null && isLoadedApkUpToDate(packageInfo, aInfo); + if (packageInfo != null) { + if (!isLoadedApkResourceDirsUpToDate(packageInfo, aInfo)) { + packageInfo.updateApplicationInfo(aInfo, null); + } - if (isUpToDate) { return packageInfo; } @@ -2243,11 +2249,8 @@ public final class ActivityThread extends ClientTransactionHandler { } } - /** - * Compares overlay/resource directories for a LoadedApk to determine if it's up to date - * with the given ApplicationInfo. - */ - private boolean isLoadedApkUpToDate(LoadedApk loadedApk, ApplicationInfo appInfo) { + private static boolean isLoadedApkResourceDirsUpToDate(LoadedApk loadedApk, + ApplicationInfo appInfo) { Resources packageResources = loadedApk.mResources; String[] overlayDirs = ArrayUtils.defeatNullable(loadedApk.getOverlayDirs()); String[] resourceDirs = ArrayUtils.defeatNullable(appInfo.resourceDirs); diff --git a/core/java/android/app/AppComponentFactory.java b/core/java/android/app/AppComponentFactory.java index 2cec7f0fc323..5b02817b7bfb 100644 --- a/core/java/android/app/AppComponentFactory.java +++ b/core/java/android/app/AppComponentFactory.java @@ -35,11 +35,22 @@ import android.content.pm.ApplicationInfo; public class AppComponentFactory { /** - * Allows application to override the creation of the default class loader. - * This can be used to perform things such as dependency injection or setting up - * a custom class loader hierarchy. + * Selects the class loader which will be used by the platform to instantiate app components. + * <p> + * The default implementation of this method returns the {@code cl} parameter unchanged. + * Applications can override this method to set up a custom class loader or a custom class + * loader hierarchy and return it to the platform. + * <p> + * The method is a hook invoked before any application components are instantiated or the + * application Context is initialized. It is intended to allow the application's classes to + * be loaded from a different source than the base/split APK(s). + * <p> + * The default class loader {@code cl} is created by the platform and used to load the + * application's base or split APK(s). Its parent is typically the boot class loader, unless + * running under instrumentation. Its classname is configurable using the + * {@link android.R.attr#classLoader} manifest attribute. * - * @param cl The default classloader instantiated by platform. + * @param cl The default class loader created by the platform. * @param aInfo Information about the application being loaded. */ public @NonNull ClassLoader instantiateClassLoader(@NonNull ClassLoader cl, diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index 65f10808534f..1785d2a0843b 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -130,7 +130,8 @@ interface IActivityManager { List<ActivityManager.RunningTaskInfo> getFilteredTasks(int maxNum, int ignoreActivityType, int ignoreWindowingMode); @UnsupportedAppUsage - void moveTaskToFront(int task, int flags, in Bundle options); + void moveTaskToFront(in IApplicationThread caller, in String callingPackage, int task, + int flags, in Bundle options); @UnsupportedAppUsage int getTaskForActivity(in IBinder token, in boolean onlyRoot); ContentProviderHolder getContentProvider(in IApplicationThread caller, in String callingPackage, diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl index a6b76cb0db60..7953d42514fc 100644 --- a/core/java/android/app/IActivityTaskManager.aidl +++ b/core/java/android/app/IActivityTaskManager.aidl @@ -149,7 +149,8 @@ interface IActivityTaskManager { boolean shouldUpRecreateTask(in IBinder token, in String destAffinity); boolean navigateUpTo(in IBinder token, in Intent target, int resultCode, in Intent resultData); - void moveTaskToFront(int task, int flags, in Bundle options); + void moveTaskToFront(in IApplicationThread app, in String callingPackage, int task, + int flags, in Bundle options); int getTaskForActivity(in IBinder token, in boolean onlyRoot); void finishSubActivity(in IBinder token, in String resultWho, int requestCode); ParceledListSlice getRecentTasks(int maxNum, int flags, int userId); diff --git a/core/java/android/app/IAppTask.aidl b/core/java/android/app/IAppTask.aidl index 61f6264408f8..3ce71908bbfd 100644 --- a/core/java/android/app/IAppTask.aidl +++ b/core/java/android/app/IAppTask.aidl @@ -17,6 +17,7 @@ package android.app; import android.app.ActivityManager; +import android.app.IApplicationThread; import android.content.Intent; import android.os.Bundle; @@ -25,7 +26,7 @@ interface IAppTask { void finishAndRemoveTask(); @UnsupportedAppUsage ActivityManager.RecentTaskInfo getTaskInfo(); - void moveToFront(); + void moveToFront(in IApplicationThread appThread, in String callingPackage); int startActivity(IBinder whoThread, String callingPackage, in Intent intent, String resolvedType, in Bundle options); void setExcludeFromRecents(boolean exclude); diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index e16ce24cbb2c..310cce41fa41 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -781,16 +781,6 @@ public final class LoadedApk { isBundledApp = false; } - // Similar to vendor apks, we should add /product/lib for apks from product partition - // and not having /product/lib in the default search path - final boolean treatProductApkAsUnbundled = !defaultSearchPaths.contains("/product/lib"); - if (mApplicationInfo.getCodePath() != null - && mApplicationInfo.isProduct() && treatProductApkAsUnbundled - // TODO(b/128557860): Change target SDK version when version code R is available. - && getTargetSdkVersion() == Build.VERSION_CODES.CUR_DEVELOPMENT) { - isBundledApp = false; - } - makePaths(mActivityThread, isBundledApp, mApplicationInfo, zipPaths, libPaths); String libraryPermittedPath = mDataDir; diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index a90185cf1468..524832971864 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -8557,16 +8557,16 @@ public class Notification implements Parcelable private static final int FLAG_AUTO_EXPAND_BUBBLE = 0x00000001; /** - * If set and the app creating the bubble is in the foreground, the bubble will be posted - * <b>without</b> the associated notification in the notification shade. Subsequent update - * notifications to this bubble will post a notification in the shade. + * If set and the app posting the bubble is in the foreground, the bubble will + * be posted <b>without</b> the associated notification in the notification shade. * - * <p>If the app creating the bubble is not in the foreground this flag has no effect.</p> + * <p>If the app posting the bubble is not in the foreground this flag has no effect.</p> * * <p>Generally this flag should only be set if the user has performed an action to request - * or create a bubble.</p> + * or create a bubble, or if the user has seen the content in the notification and the + * notification is no longer relevant.</p> */ - private static final int FLAG_SUPPRESS_INITIAL_NOTIFICATION = 0x00000002; + private static final int FLAG_SUPPRESS_NOTIFICATION = 0x00000002; private BubbleMetadata(PendingIntent expandIntent, PendingIntent deleteIntent, Icon icon, int height, @DimenRes int heightResId) { @@ -8645,9 +8645,20 @@ public class Notification implements Parcelable * @return whether this bubble should suppress the initial notification when it is posted. * * @see BubbleMetadata.Builder#setSuppressInitialNotification(boolean) + * @deprecated TO BE REMOVED, use {@link #getSuppressNotification()} instead. */ + @Deprecated public boolean getSuppressInitialNotification() { - return (mFlags & FLAG_SUPPRESS_INITIAL_NOTIFICATION) != 0; + return (mFlags & FLAG_SUPPRESS_NOTIFICATION) != 0; + } + + /** + * @return whether this bubble should suppress the notification when it is posted. + * + * @see BubbleMetadata.Builder#setSuppressInitialNotification(boolean) + */ + public boolean getSuppressNotification() { + return (mFlags & FLAG_SUPPRESS_NOTIFICATION) != 0; } public static final @android.annotation.NonNull Parcelable.Creator<BubbleMetadata> CREATOR = @@ -8806,11 +8817,31 @@ public class Notification implements Parcelable * * <p>Generally this flag should only be set if the user has performed an action to * request or create a bubble.</p> + * + * @deprecated TO BE REMOVED, use {@link #setSuppressNotification(boolean)} instead. */ + @Deprecated @NonNull public BubbleMetadata.Builder setSuppressInitialNotification( boolean shouldSupressNotif) { - setFlag(FLAG_SUPPRESS_INITIAL_NOTIFICATION, shouldSupressNotif); + setFlag(FLAG_SUPPRESS_NOTIFICATION, shouldSupressNotif); + return this; + } + + /** + * If set and the app posting the bubble is in the foreground, the bubble will be + * posted <b>without</b> the associated notification in the notification shade. + * + * <p>If the app posting the bubble is not in the foreground this flag has no effect. + * </p> + * + * <p>Generally this flag should only be set if the user has performed an action to + * request or create a bubble, or if the user has seen the content in the notification + * and the notification is no longer relevant.</p> + */ + @NonNull + public BubbleMetadata.Builder setSuppressNotification(boolean shouldSupressNotif) { + setFlag(FLAG_SUPPRESS_NOTIFICATION, shouldSupressNotif); return this; } diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 8749b108c168..98b658d3ad25 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -367,7 +367,7 @@ final class SystemServiceRegistry { throw new ServiceNotFoundException(Context.TEST_NETWORK_SERVICE); } ITestNetworkManager tnMgr = ITestNetworkManager.Stub.asInterface(tnBinder); - return new TestNetworkManager(context, tnMgr); + return new TestNetworkManager(tnMgr); } }); diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index af738da20621..b97ea5f2a475 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -3820,10 +3820,7 @@ public abstract class Context { /** * Use with {@link #getSystemService(String)} to retrieve a {@link - * android.net.wifi.rtt.WifiRttManager} for ranging devices with wifi - * - * Note: this is a replacement for WIFI_RTT_SERVICE above. It will - * be renamed once final implementation in place. + * android.net.wifi.rtt.WifiRttManager} for ranging devices with wifi. * * @see #getSystemService(String) * @see android.net.wifi.rtt.WifiRttManager diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index a71f7d2c6455..6c72a9a1c0c2 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -1222,7 +1222,7 @@ public class PackageInstaller { try { mSession.addChildSessionId(sessionId); } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + e.rethrowFromSystemServer(); } } @@ -1236,7 +1236,7 @@ public class PackageInstaller { try { mSession.removeChildSessionId(sessionId); } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + e.rethrowFromSystemServer(); } } } diff --git a/core/java/android/hardware/biometrics/CryptoObject.java b/core/java/android/hardware/biometrics/CryptoObject.java index 496d9c57f252..787dc6696cd3 100644 --- a/core/java/android/hardware/biometrics/CryptoObject.java +++ b/core/java/android/hardware/biometrics/CryptoObject.java @@ -25,8 +25,8 @@ import javax.crypto.Cipher; import javax.crypto.Mac; /** - * A wrapper class for the crypto objects supported by FingerprintManager. Currently the - * framework supports {@link Signature}, {@link Cipher} and {@link Mac} objects. + * A wrapper class for the crypto objects supported by BiometricPrompt and FingerprintManager. + * Currently the framework supports {@link Signature}, {@link Cipher} and {@link Mac} objects. * @hide */ public class CryptoObject { diff --git a/core/java/android/net/ITestNetworkManager.aidl b/core/java/android/net/ITestNetworkManager.aidl index 119a30cb2ddb..bab6ae8e7409 100644 --- a/core/java/android/net/ITestNetworkManager.aidl +++ b/core/java/android/net/ITestNetworkManager.aidl @@ -29,6 +29,7 @@ import android.os.ParcelFileDescriptor; interface ITestNetworkManager { TestNetworkInterface createTunInterface(in LinkAddress[] linkAddrs); + TestNetworkInterface createTapInterface(); void setupTestNetwork(in String iface, in IBinder binder); diff --git a/core/java/android/net/TestNetworkInterface.java b/core/java/android/net/TestNetworkInterface.java index 30e68f5b9854..84550834be07 100644 --- a/core/java/android/net/TestNetworkInterface.java +++ b/core/java/android/net/TestNetworkInterface.java @@ -27,8 +27,6 @@ import android.os.Parcelable; */ @TestApi public final class TestNetworkInterface implements Parcelable { - private static final String TAG = "TestNetworkInterface"; - private final ParcelFileDescriptor mFileDescriptor; private final String mInterfaceName; diff --git a/core/java/android/net/TestNetworkManager.java b/core/java/android/net/TestNetworkManager.java index cd58e6641e51..e274005eb9d1 100644 --- a/core/java/android/net/TestNetworkManager.java +++ b/core/java/android/net/TestNetworkManager.java @@ -17,7 +17,6 @@ package android.net; import android.annotation.NonNull; import android.annotation.TestApi; -import android.content.Context; import android.os.IBinder; import android.os.RemoteException; @@ -33,11 +32,9 @@ public class TestNetworkManager { @NonNull private static final String TAG = TestNetworkManager.class.getSimpleName(); @NonNull private final ITestNetworkManager mService; - @NonNull private final Context mContext; /** @hide */ - public TestNetworkManager(@NonNull Context context, @NonNull ITestNetworkManager service) { - mContext = Preconditions.checkNotNull(context, "missing Context"); + public TestNetworkManager(@NonNull ITestNetworkManager service) { mService = Preconditions.checkNotNull(service, "missing ITestNetworkManager"); } @@ -88,4 +85,21 @@ public class TestNetworkManager { throw e.rethrowFromSystemServer(); } } + + /** + * Create a tap interface for testing purposes + * + * @return A ParcelFileDescriptor of the underlying TAP interface. Close this to tear down the + * TAP interface. + * @hide + */ + @TestApi + public TestNetworkInterface createTapInterface() { + try { + return mService.createTapInterface(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + } diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java index e56b6e0a33b8..779790c09dc8 100644 --- a/core/java/android/os/GraphicsEnvironment.java +++ b/core/java/android/os/GraphicsEnvironment.java @@ -72,6 +72,14 @@ public class GraphicsEnvironment { private static final String INTENT_KEY_A4A_TOAST_MESSAGE = "A4A Toast Message"; private static final String GAME_DRIVER_WHITELIST_ALL = "*"; + // GAME_DRIVER_ALL_APPS + // 0: Default (Invalid values fallback to default as well) + // 1: All apps use Game Driver + // 2: All apps use system graphics driver + private static final int GAME_DRIVER_GLOBAL_OPT_IN_DEFAULT = 0; + private static final int GAME_DRIVER_GLOBAL_OPT_IN_ALL = 1; + private static final int GAME_DRIVER_GLOBAL_OPT_IN_NONE = 2; + private ClassLoader mClassLoader; private String mLayerPath; private String mDebugLayerPath; @@ -97,6 +105,65 @@ public class GraphicsEnvironment { } /** + * Allow to query whether an application will use Game Driver. + */ + public static boolean shouldUseGameDriver(Context context, Bundle coreSettings, + ApplicationInfo applicationInfo) { + final String driverPackageName = SystemProperties.get(PROPERTY_GFX_DRIVER); + if (driverPackageName == null || driverPackageName.isEmpty()) { + return false; + } + + // To minimize risk of driver updates crippling the device beyond user repair, never use an + // updated driver for privileged or non-updated system apps. Presumably pre-installed apps + // were tested thoroughly with the pre-installed driver. + if (applicationInfo.isPrivilegedApp() || (applicationInfo.isSystemApp() + && !applicationInfo.isUpdatedSystemApp())) { + if (DEBUG) Log.v(TAG, "ignoring driver package for privileged/non-updated system app"); + return false; + } + final ContentResolver contentResolver = context.getContentResolver(); + final String packageName = applicationInfo.packageName; + final int globalOptIn; + if (coreSettings != null) { + globalOptIn = coreSettings.getInt(Settings.Global.GAME_DRIVER_ALL_APPS, 0); + } else { + globalOptIn = Settings.Global.getInt(contentResolver, + Settings.Global.GAME_DRIVER_ALL_APPS, 0); + } + if (globalOptIn == GAME_DRIVER_GLOBAL_OPT_IN_ALL) { + return true; + } + if (globalOptIn == GAME_DRIVER_GLOBAL_OPT_IN_NONE) { + return false; + } + + // GAME_DRIVER_OPT_OUT_APPS has higher priority than GAME_DRIVER_OPT_IN_APPS + if (getGlobalSettingsString(contentResolver, coreSettings, + Settings.Global.GAME_DRIVER_OPT_OUT_APPS).contains(packageName)) { + return false; + } + final boolean isOptIn = getGlobalSettingsString(contentResolver, coreSettings, + Settings.Global.GAME_DRIVER_OPT_IN_APPS).contains(packageName); + final List<String> whitelist = getGlobalSettingsString(contentResolver, coreSettings, + Settings.Global.GAME_DRIVER_WHITELIST); + if (!isOptIn && whitelist.indexOf(GAME_DRIVER_WHITELIST_ALL) != 0 + && !whitelist.contains(packageName)) { + return false; + } + + // If the application is not opted-in, then check whether it's on the blacklist, + // terminate early if it's on the blacklist and fallback to system driver. + if (!isOptIn + && getGlobalSettingsString(contentResolver, coreSettings, + Settings.Global.GAME_DRIVER_BLACKLIST) + .contains(packageName)) { + return false; + } + return true; + } + + /** * Check whether application is debuggable */ private static boolean isDebuggable(Context context) { @@ -657,59 +724,10 @@ public class GraphicsEnvironment { return false; } - // To minimize risk of driver updates crippling the device beyond user repair, never use an - // updated driver for privileged or non-updated system apps. Presumably pre-installed apps - // were tested thoroughly with the pre-installed driver. - final ApplicationInfo ai = context.getApplicationInfo(); - if (ai.isPrivilegedApp() || (ai.isSystemApp() && !ai.isUpdatedSystemApp())) { - if (DEBUG) Log.v(TAG, "ignoring driver package for privileged/non-updated system app"); - return false; - } - - // GAME_DRIVER_ALL_APPS - // 0: Default (Invalid values fallback to default as well) - // 1: All apps use Game Driver - // 2: All apps use system graphics driver - final int gameDriverAllApps = coreSettings.getInt(Settings.Global.GAME_DRIVER_ALL_APPS, 0); - if (gameDriverAllApps == 2) { - if (DEBUG) { - Log.w(TAG, "Game Driver is turned off on this device"); - } + if (!shouldUseGameDriver(context, coreSettings, context.getApplicationInfo())) { return false; } - if (gameDriverAllApps != 1) { - // GAME_DRIVER_OPT_OUT_APPS has higher priority than GAME_DRIVER_OPT_IN_APPS - if (getGlobalSettingsString(null, coreSettings, - Settings.Global.GAME_DRIVER_OPT_OUT_APPS).contains(packageName)) { - if (DEBUG) { - Log.w(TAG, packageName + " opts out from Game Driver."); - } - return false; - } - final boolean isOptIn = - getGlobalSettingsString(null, coreSettings, - Settings.Global.GAME_DRIVER_OPT_IN_APPS).contains(packageName); - final List<String> whitelist = getGlobalSettingsString(null, coreSettings, - Settings.Global.GAME_DRIVER_WHITELIST); - if (!isOptIn && whitelist.indexOf(GAME_DRIVER_WHITELIST_ALL) != 0 - && !whitelist.contains(packageName)) { - if (DEBUG) { - Log.w(TAG, packageName + " is not on the whitelist."); - } - return false; - } - - // If the application is not opted-in and check whether it's on the blacklist, - // terminate early if it's on the blacklist and fallback to system driver. - if (!isOptIn - && getGlobalSettingsString(null, coreSettings, - Settings.Global.GAME_DRIVER_BLACKLIST) - .contains(ai.packageName)) { - return false; - } - } - final String abi = chooseAbi(driverAppInfo); if (abi == null) { if (DEBUG) { diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index a7ac7a1fd689..fb35db11027b 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -513,6 +513,7 @@ public class Process { * @param packageName null-ok the name of the package this process belongs to. * @param packagesForUid null-ok all the packages with the same uid as this process. * @param zygoteArgs Additional arguments to supply to the zygote process. + * @param useSystemGraphicsDriver whether the process uses system graphics driver. * * @return An object that describes the result of the attempt to start the process. * @throws RuntimeException on fatal start failure @@ -532,12 +533,13 @@ public class Process { @Nullable String packageName, @Nullable String[] packagesForUid, @Nullable String sandboxId, - @Nullable String[] zygoteArgs) { + @Nullable String[] zygoteArgs, + boolean useSystemGraphicsDriver) { return ZYGOTE_PROCESS.start(processClass, niceName, uid, gid, gids, runtimeFlags, mountExternal, targetSdkVersion, seInfo, abi, instructionSet, appDataDir, invokeWith, packageName, packagesForUid, sandboxId, /*useUnspecializedAppProcessPool=*/ true, - zygoteArgs); + zygoteArgs, useSystemGraphicsDriver); } /** @hide */ @@ -554,12 +556,13 @@ public class Process { @Nullable String packageName, @Nullable String[] packagesForUid, @Nullable String sandboxId, - @Nullable String[] zygoteArgs) { + @Nullable String[] zygoteArgs, + boolean useSystemGraphicsDriver) { return WebViewZygote.getProcess().start(processClass, niceName, uid, gid, gids, runtimeFlags, mountExternal, targetSdkVersion, seInfo, abi, instructionSet, appDataDir, invokeWith, packageName, packagesForUid, sandboxId, /*useUnspecializedAppProcessPool=*/ false, - zygoteArgs); + zygoteArgs, useSystemGraphicsDriver); } /** diff --git a/core/java/android/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java index ab19fd6e8ca1..b7789c0c2857 100644 --- a/core/java/android/os/ZygoteProcess.java +++ b/core/java/android/os/ZygoteProcess.java @@ -308,6 +308,7 @@ public class ZygoteProcess { * @param packageName null-ok the name of the package this process belongs to. * @param packagesForUid null-ok all the packages with the same uid as this process. * @param zygoteArgs Additional arguments to supply to the zygote process. + * @param useSystemGraphicsDriver whether the process uses system graphics driver. * * @return An object that describes the result of the attempt to start the process. * @throws RuntimeException on fatal start failure @@ -326,7 +327,8 @@ public class ZygoteProcess { @Nullable String[] packagesForUid, @Nullable String sandboxId, boolean useUsapPool, - @Nullable String[] zygoteArgs) { + @Nullable String[] zygoteArgs, + boolean useSystemGraphicsDriver) { // TODO (chriswailes): Is there a better place to check this value? if (fetchUsapPoolEnabledPropWithMinInterval()) { informZygotesOfUsapPoolStatus(); diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index e3b2d898f9b6..0491c732db81 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1075,6 +1075,22 @@ public final class Settings { "android.settings.ADD_ACCOUNT_SETTINGS"; /** + * Activity Action: Show settings for enabling or disabling data saver + * <p></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_DATA_SAVER_SETTINGS = + "android.settings.DATA_SAVER_SETTINGS"; + + /** * Activity Action: Show settings for selecting the network operator. * <p> * In some cases, a matching Activity may not exist, so ensure you @@ -8148,6 +8164,13 @@ public final class Settings { BOOLEAN_VALIDATOR; /** + * Whether or not debugging is enabled. + * @hide + */ + public static final String BIOMETRIC_DEBUG_ENABLED = + "biometric_debug_enabled"; + + /** * Whether the assist gesture should be enabled. * * @hide diff --git a/core/java/android/service/contentsuggestions/ContentSuggestionsService.java b/core/java/android/service/contentsuggestions/ContentSuggestionsService.java index 45a8466bfca1..55e61410b9e2 100644 --- a/core/java/android/service/contentsuggestions/ContentSuggestionsService.java +++ b/core/java/android/service/contentsuggestions/ContentSuggestionsService.java @@ -31,7 +31,6 @@ import android.app.contentsuggestions.SelectionsRequest; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.GraphicBuffer; -import android.hardware.HardwareBuffer; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -67,8 +66,7 @@ public abstract class ContentSuggestionsService extends Service { Bitmap wrappedBuffer = null; if (contextImage != null) { - wrappedBuffer = Bitmap.wrapHardwareBuffer( - HardwareBuffer.createFromGraphicBuffer(contextImage), null); + wrappedBuffer = Bitmap.wrapHardwareBuffer(contextImage, null); } mHandler.sendMessage( diff --git a/core/java/android/util/DocumentsStatsLog.java b/core/java/android/util/DocumentsStatsLog.java deleted file mode 100644 index a67bbde8b30b..000000000000 --- a/core/java/android/util/DocumentsStatsLog.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.util; - -import android.annotation.Nullable; -import android.annotation.SystemApi; -import android.provider.DocumentsContract; -import android.provider.DocumentsProvider; - -/** - * DocumentsStatsLog provides APIs to send DocumentsUI related events to statsd. - * @hide - */ -@SystemApi -public class DocumentsStatsLog { - - private DocumentsStatsLog() {} - - /** - * Logs when DocumentsUI is started, and how. Call this when DocumentsUI first starts up. - * - * @param action action that launches DocumentsUI. - * @param hasInitialUri is DocumentsUI launched with - * {@link DocumentsContract#EXTRA_INITIAL_URI}. - * @param mimeType the requested mime type. - * @param rootUri the resolved rootUri, or {@code null} if the provider doesn't - * support {@link DocumentsProvider#findDocumentPath(String, String)} - */ - public static void logActivityLaunch( - int action, boolean hasInitialUri, int mimeType, int rootUri) { - StatsLog.write(StatsLog.DOCS_UI_LAUNCH_REPORTED, action, hasInitialUri, mimeType, rootUri); - } - - /** - * Logs root visited event. - * - * @param scope whether it's in FILES or PICKER mode. - * @param root the root that user visited - */ - public static void logRootVisited(int scope, int root) { - StatsLog.write(StatsLog.DOCS_UI_ROOT_VISITED, scope, root); - } - - /** - * Logs file operation stats. Call this when a file operation has completed. - * - * @param provider whether it's system or external provider - * @param fileOp the file operation - */ - public static void logFileOperation(int provider, int fileOp) { - StatsLog.write(StatsLog.DOCS_UI_PROVIDER_FILE_OP, provider, fileOp); - } - - /** - * Logs file operation stats. Call this when a copy/move operation has completed with a specific - * mode. - * - * @param fileOp copy or move file operation - * @param mode the mode for copy and move operation - */ - public static void logFileOperationCopyMoveMode(int fileOp, int mode) { - StatsLog.write(StatsLog.DOCS_UI_FILE_OP_COPY_MOVE_MODE_REPORTED, fileOp, mode); - } - - /** - * Logs file sub operation stats. Call this when a file operation has failed. - * - * @param authority the authority of the source document - * @param subOp the sub-file operation - */ - public static void logFileOperationFailure(int authority, int subOp) { - StatsLog.write(StatsLog.DOCS_UI_FILE_OP_FAILURE, authority, subOp); - } - - /** - * Logs the cancellation of a file operation. Call this when a job is canceled - * - * @param fileOp the file operation. - */ - public static void logFileOperationCanceled(int fileOp) { - StatsLog.write(StatsLog.DOCS_UI_FILE_OP_CANCELED, fileOp); - } - - /** - * Logs startup time in milliseconds. - * - * @param startupMs - */ - public static void logStartupMs(int startupMs) { - StatsLog.write(StatsLog.DOCS_UI_STARTUP_MS, startupMs); - } - - /** - * Logs the action that was started by user. - * - * @param userAction - */ - public static void logUserAction(int userAction) { - StatsLog.write(StatsLog.DOCS_UI_USER_ACTION_REPORTED, userAction); - } - - /** - * Logs the invalid type when invalid scoped access is requested. - * - * @param type the type of invalid scoped access request. - */ - public static void logInvalidScopedAccessRequest(int type) { - StatsLog.write(StatsLog.DOCS_UI_INVALID_SCOPED_ACCESS_REQUEST, type); - } - - /** - * Logs the package name that launches docsui picker mode. - * - * @param packageName - */ - public static void logPickerLaunchedFrom(@Nullable String packageName) { - StatsLog.write(StatsLog.DOCS_UI_PICKER_LAUNCHED_FROM_REPORTED, packageName); - } - - /** - * Logs the search type. - * - * @param searchType - */ - public static void logSearchType(int searchType) { - StatsLog.write(StatsLog.DOCS_UI_SEARCH_TYPE_REPORTED, searchType); - } - - /** - * Logs the search mode. - * - * @param searchMode - */ - public static void logSearchMode(int searchMode) { - StatsLog.write(StatsLog.DOCS_UI_SEARCH_MODE_REPORTED, searchMode); - } - - /** - * Logs the pick result information. - * - * @param actionCount total user action count during pick process. - * @param duration total time spent on pick process. - * @param fileCount number of picked files. - * @param isSearching are the picked files found by search. - * @param root the root where the picked files located. - * @param mimeType the mime type of the picked file. Only for single-select case. - * @param repeatedlyPickTimes number of times that the file has been picked before. Only for - * single-select case. - */ - public static void logFilePick(int actionCount, long duration, int fileCount, - boolean isSearching, int root, int mimeType, int repeatedlyPickTimes) { - StatsLog.write(StatsLog.DOCS_UI_PICK_RESULT_REPORTED, actionCount, duration, fileCount, - isSearching, root, mimeType, repeatedlyPickTimes); - } -} diff --git a/core/java/android/util/StatsLog.java b/core/java/android/util/StatsLog.java index dd22a26d61af..9da29c0c334e 100644 --- a/core/java/android/util/StatsLog.java +++ b/core/java/android/util/StatsLog.java @@ -198,11 +198,6 @@ public final class StatsLog extends StatsLogInternal { write(id, (long) params[0], (int) params[1], (String) params[2], (String) params[3], (boolean) params[4], (int) params[5]); break; - case DATA_STALL_EVENT: - // Refer to the defintion in frameworks/base/cmds/statsd/src/atoms.proto. - write(id, (int) params[0], (int) params[1], (int) params[2], (byte[]) params[3], - (byte[]) params[4], (byte[]) params[5]); - break; } } diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 79363edb0955..b5ad908e5ea5 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -41,7 +41,6 @@ import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; -import android.hardware.HardwareBuffer; import android.hardware.display.DisplayedContentSample; import android.hardware.display.DisplayedContentSamplingAttributes; import android.os.Build; @@ -1917,9 +1916,7 @@ public final class SurfaceControl implements Parcelable { Log.w(TAG, "Failed to take screenshot"); return null; } - return Bitmap.wrapHardwareBuffer( - HardwareBuffer.createFromGraphicBuffer(buffer.getGraphicBuffer()), - buffer.getColorSpace()); + return Bitmap.wrapHardwareBuffer(buffer.getGraphicBuffer(), buffer.getColorSpace()); } /** diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index 81e9c1372aed..9e914d4e7d41 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -87,6 +87,12 @@ public class ViewConfiguration { /** * Defines the duration in milliseconds a user needs to hold down the + * appropriate buttons (power + volume down) to trigger the screenshot chord. + */ + private static final int SCREENSHOT_CHORD_KEY_TIMEOUT = 500; + + /** + * Defines the duration in milliseconds a user needs to hold down the * appropriate button to bring up the accessibility shortcut for the first time */ private static final int A11Y_SHORTCUT_KEY_TIMEOUT = 3000; @@ -316,6 +322,7 @@ public class ViewConfiguration { private final float mVerticalScrollFactor; private final float mHorizontalScrollFactor; private final boolean mShowMenuShortcutsWhenKeyboardPresent; + private final long mScreenshotChordKeyTimeout; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123768915) private boolean sHasPermanentMenuKey; @@ -353,6 +360,7 @@ public class ViewConfiguration { mHorizontalScrollFactor = HORIZONTAL_SCROLL_FACTOR; mVerticalScrollFactor = VERTICAL_SCROLL_FACTOR; mShowMenuShortcutsWhenKeyboardPresent = false; + mScreenshotChordKeyTimeout = SCREENSHOT_CHORD_KEY_TIMEOUT; // Getter throws if mConstructedWithContext is false so doesn't matter what // this value is. @@ -457,6 +465,9 @@ public class ViewConfiguration { mMinScalingSpan = res.getDimensionPixelSize( com.android.internal.R.dimen.config_minScalingSpan); + + mScreenshotChordKeyTimeout = res.getInteger( + com.android.internal.R.integer.config_screenshotChordKeyTimeout); } /** @@ -890,6 +901,18 @@ public class ViewConfiguration { } /** + * The amount of time a user needs to press the relevant keys to trigger + * the screenshot chord. + * + * @return how long a user needs to press the relevant keys to trigger + * the screenshot chord. + * @hide + */ + public long getScreenshotChordKeyTimeout() { + return mScreenshotChordKeyTimeout; + } + + /** * The amount of time a user needs to press the relevant keys to activate the accessibility * shortcut. * diff --git a/core/java/android/view/textclassifier/ConversationAction.java b/core/java/android/view/textclassifier/ConversationAction.java index b8cb7bed8712..6070b5341cf9 100644 --- a/core/java/android/view/textclassifier/ConversationAction.java +++ b/core/java/android/view/textclassifier/ConversationAction.java @@ -266,7 +266,7 @@ public final class ConversationAction implements Parcelable { mAction, mTextReply, mScore, - mExtras == null ? Bundle.EMPTY : mExtras.deepCopy()); + mExtras == null ? Bundle.EMPTY : mExtras); } } } diff --git a/core/java/android/view/textclassifier/ConversationActions.java b/core/java/android/view/textclassifier/ConversationActions.java index eddc672dc87f..b408129231e7 100644 --- a/core/java/android/view/textclassifier/ConversationActions.java +++ b/core/java/android/view/textclassifier/ConversationActions.java @@ -275,7 +275,7 @@ public final class ConversationActions implements Parcelable { mAuthor, mReferenceTime, mText == null ? null : new SpannedString(mText), - mExtras == null ? new Bundle() : mExtras.deepCopy()); + mExtras == null ? Bundle.EMPTY : mExtras); } } } diff --git a/core/java/android/view/textclassifier/TextClassification.java b/core/java/android/view/textclassifier/TextClassification.java index 4c4cb55cd3a0..63210516b3e1 100644 --- a/core/java/android/view/textclassifier/TextClassification.java +++ b/core/java/android/view/textclassifier/TextClassification.java @@ -521,7 +521,7 @@ public final class TextClassification implements Parcelable { } private Bundle buildExtras(EntityConfidence entityConfidence) { - final Bundle extras = mExtras == null ? new Bundle() : mExtras.deepCopy(); + final Bundle extras = mExtras == null ? new Bundle() : mExtras; if (mActionIntents.stream().anyMatch(Objects::nonNull)) { ExtrasUtils.putActionsIntents(extras, mActionIntents); } @@ -713,7 +713,7 @@ public final class TextClassification implements Parcelable { public Request build() { return new Request(new SpannedString(mText), mStartIndex, mEndIndex, mDefaultLocales, mReferenceTime, - mExtras == null ? Bundle.EMPTY : mExtras.deepCopy()); + mExtras == null ? Bundle.EMPTY : mExtras); } } diff --git a/core/java/android/view/textclassifier/TextLanguage.java b/core/java/android/view/textclassifier/TextLanguage.java index eaf4d7f5d5d1..6c75ffbea0cd 100644 --- a/core/java/android/view/textclassifier/TextLanguage.java +++ b/core/java/android/view/textclassifier/TextLanguage.java @@ -113,12 +113,11 @@ public final class TextLanguage implements Parcelable { * Returns a bundle containing non-structured extra information about this result. What is * returned in the extras is specific to the {@link TextClassifier} implementation. * - * <p><b>NOTE: </b>Each call to this method returns a new bundle copy so clients should prefer - * to hold a reference to the returned bundle rather than frequently calling this method. + * <p><b>NOTE: </b>Do not modify this bundle. */ @NonNull public Bundle getExtras() { - return mBundle.deepCopy(); + return mBundle; } @Override @@ -199,7 +198,7 @@ public final class TextLanguage implements Parcelable { */ @NonNull public TextLanguage build() { - mBundle = mBundle == null ? new Bundle() : mBundle.deepCopy(); + mBundle = mBundle == null ? Bundle.EMPTY : mBundle; return new TextLanguage( mId, new EntityConfidence(mEntityConfidenceMap), @@ -263,13 +262,11 @@ public final class TextLanguage implements Parcelable { /** * Returns a bundle containing non-structured extra information about this request. * - * <p><b>NOTE: </b>Each call to this method returns a new bundle copy so clients should - * prefer to hold a reference to the returned bundle rather than frequently calling this - * method. + * <p><b>NOTE: </b>Do not modify this bundle. */ @NonNull public Bundle getExtras() { - return mExtra.deepCopy(); + return mExtra; } @Override @@ -327,8 +324,7 @@ public final class TextLanguage implements Parcelable { */ @NonNull public Request build() { - mBundle = mBundle == null ? new Bundle() : mBundle.deepCopy(); - return new Request(mText.toString(), mBundle); + return new Request(mText.toString(), mBundle == null ? Bundle.EMPTY : mBundle); } } } diff --git a/core/java/android/view/textclassifier/TextLinks.java b/core/java/android/view/textclassifier/TextLinks.java index c815f63b1708..66a72f9b2e9e 100644 --- a/core/java/android/view/textclassifier/TextLinks.java +++ b/core/java/android/view/textclassifier/TextLinks.java @@ -493,7 +493,7 @@ public final class TextLinks implements Parcelable { return new Request( mText, mDefaultLocales, mEntityConfig, mLegacyFallback, - mExtras == null ? Bundle.EMPTY : mExtras.deepCopy()); + mExtras == null ? Bundle.EMPTY : mExtras); } } @@ -702,7 +702,7 @@ public final class TextLinks implements Parcelable { @NonNull public TextLinks build() { return new TextLinks(mFullText, mLinks, - mExtras == null ? Bundle.EMPTY : mExtras.deepCopy()); + mExtras == null ? Bundle.EMPTY : mExtras); } } } diff --git a/core/java/android/view/textclassifier/TextSelection.java b/core/java/android/view/textclassifier/TextSelection.java index e378e65aa29e..75c27bdbc1d5 100644 --- a/core/java/android/view/textclassifier/TextSelection.java +++ b/core/java/android/view/textclassifier/TextSelection.java @@ -195,7 +195,7 @@ public final class TextSelection implements Parcelable { public TextSelection build() { return new TextSelection( mStartIndex, mEndIndex, mEntityConfidence, mId, - mExtras == null ? Bundle.EMPTY : mExtras.deepCopy()); + mExtras == null ? Bundle.EMPTY : mExtras); } } @@ -378,7 +378,7 @@ public final class TextSelection implements Parcelable { public Request build() { return new Request(new SpannedString(mText), mStartIndex, mEndIndex, mDefaultLocales, mDarkLaunchAllowed, - mExtras == null ? Bundle.EMPTY : mExtras.deepCopy()); + mExtras == null ? Bundle.EMPTY : mExtras); } } diff --git a/core/java/android/webkit/WebViewZygote.java b/core/java/android/webkit/WebViewZygote.java index 62f54b943e11..2bfbe4bdfba7 100644 --- a/core/java/android/webkit/WebViewZygote.java +++ b/core/java/android/webkit/WebViewZygote.java @@ -17,7 +17,6 @@ package android.webkit; import android.content.pm.PackageInfo; -import android.os.AsyncTask; import android.os.Build; import android.os.ChildZygoteProcess; import android.os.Process; @@ -81,17 +80,9 @@ public class WebViewZygote { synchronized (sLock) { sMultiprocessEnabled = enabled; - // When toggling between multi-process being on/off, start or stop the - // zygote. If it is enabled and the zygote is not yet started, launch it. - // Otherwise, kill it. The name may be null if the package information has - // not yet been resolved. - if (enabled) { - // Run on a background thread as this waits for the zygote to start and we don't - // want to block the caller on this. It's okay if this is delayed as anyone trying - // to use the zygote will call it first anyway. - AsyncTask.THREAD_POOL_EXECUTOR.execute(WebViewZygote::getProcess); - } else { - // No need to run this in the background, it's very brief. + // When multi-process is disabled, kill the zygote. When it is enabled, + // the zygote will be started when it is first needed in getProcess(). + if (!enabled) { stopZygoteLocked(); } } diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index eeca73234c30..b51f8080569f 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -1047,6 +1047,12 @@ public class ChooserActivity extends ResolverActivity { value -= mChooserListAdapter.getCallerTargetCount() + mChooserListAdapter.getSelectableServiceTargetCount(); break; + case ChooserListAdapter.TARGET_STANDARD_AZ: + // A-Z targets are unranked standard targets; we use -1 to mark that they + // are from the alphabetical pool. + value = -1; + cat = MetricsEvent.ACTION_ACTIVITY_CHOOSER_PICKED_STANDARD_TARGET; + break; } if (cat != 0) { @@ -1842,7 +1848,7 @@ public class ChooserActivity extends ResolverActivity { int offset = 0; int rowsToShow = mChooserRowAdapter.getContentPreviewRowCount() + mChooserRowAdapter.getServiceTargetRowCount() - + mChooserRowAdapter.getCallerTargetRowCount(); + + mChooserRowAdapter.getCallerAndRankedTargetRowCount(); // then this is most likely not a SEND_* action, so check // the app target count @@ -1886,6 +1892,7 @@ public class ChooserActivity extends ResolverActivity { public static final int TARGET_CALLER = 0; public static final int TARGET_SERVICE = 1; public static final int TARGET_STANDARD = 2; + public static final int TARGET_STANDARD_AZ = 3; private static final int MAX_SUGGESTED_APP_TARGETS = 4; private static final int MAX_TARGETS_PER_SERVICE = 2; @@ -1896,8 +1903,6 @@ public class ChooserActivity extends ResolverActivity { private ChooserTargetInfo mPlaceHolderTargetInfo = new PlaceHolderTargetInfo(); private final List<ChooserTargetInfo> mServiceTargets = new ArrayList<>(); private final List<TargetInfo> mCallerTargets = new ArrayList<>(); - private boolean mShowServiceTargets; - private boolean mTargetsNeedPruning = false; private final BaseChooserTargetComparator mBaseTargetComparator @@ -2037,7 +2042,7 @@ public class ChooserActivity extends ResolverActivity { @Override public int getCount() { - return getStandardTargetCount() + getAlphaTargetCount() + return getRankedTargetCount() + getAlphaTargetCount() + getSelectableServiceTargetCount() + getCallerTargetCount(); } @@ -2075,16 +2080,17 @@ public class ChooserActivity extends ResolverActivity { return 0; } - public int getStandardTargetCount() { - int standardCount = super.getCount(); - return standardCount > MAX_RANKED_TARGETS ? MAX_RANKED_TARGETS : standardCount; - } - int getAlphaTargetCount() { int standardCount = super.getCount(); return standardCount > MAX_RANKED_TARGETS ? standardCount : 0; } + int getRankedTargetCount() { + int spacesAvailable = MAX_RANKED_TARGETS - getCallerTargetCount(); + return Math.min(spacesAvailable, super.getCount()); + } + + public int getPositionTargetType(int position) { int offset = 0; @@ -2100,10 +2106,16 @@ public class ChooserActivity extends ResolverActivity { } offset += callerTargetCount; - final int standardTargetCount = getStandardTargetCount(); - if (position - offset < standardTargetCount) { + final int rankedTargetCount = getRankedTargetCount(); + if (position - offset < rankedTargetCount) { return TARGET_STANDARD; } + offset += rankedTargetCount; + + final int standardTargetCount = getAlphaTargetCount(); + if (position - offset < standardTargetCount) { + return TARGET_STANDARD_AZ; + } return TARGET_BAD; } @@ -2138,25 +2150,23 @@ public class ChooserActivity extends ResolverActivity { } offset += callerTargetCount; - // Ranked app targets - if (position - offset < MAX_RANKED_TARGETS) { + // Ranked standard app targets + final int rankedTargetCount = getRankedTargetCount(); + if (position - offset < rankedTargetCount) { return filtered ? super.getItem(position - offset) : getDisplayResolveInfo(position - offset); } - offset += MAX_RANKED_TARGETS; + offset += rankedTargetCount; // Alphabetical complete app target list. - Log.e(TAG, mSortedList.toString()); - if (position - offset < mSortedList.size()) { + if (position - offset < getAlphaTargetCount() && !mSortedList.isEmpty()) { return mSortedList.get(position - offset); } return null; - } - /** * Evaluate targets for inclusion in the direct share area. May not be included * if score is too low. @@ -2383,13 +2393,11 @@ public class ChooserActivity extends ResolverActivity { @Override public int getCount() { + return (int) ( getContentPreviewRowCount() - + getCallerTargetRowCount() + getServiceTargetRowCount() - + Math.ceil( - (float) mChooserListAdapter.getStandardTargetCount() - / getMaxTargetsPerRow()) + + getCallerAndRankedTargetRowCount() + Math.ceil( (float) mChooserListAdapter.getAlphaTargetCount() / getMaxTargetsPerRow()) @@ -2408,9 +2416,10 @@ public class ChooserActivity extends ResolverActivity { return 1; } - public int getCallerTargetRowCount() { + public int getCallerAndRankedTargetRowCount() { return (int) Math.ceil( - (float) mChooserListAdapter.getCallerTargetCount() / getMaxTargetsPerRow()); + ((float) mChooserListAdapter.getCallerTargetCount() + + mChooserListAdapter.getRankedTargetCount()) / getMaxTargetsPerRow()); } // There can be at most one row in the listview, that is internally @@ -2536,8 +2545,8 @@ public class ChooserActivity extends ResolverActivity { if (isDirectShare) { DirectShareViewHolder dsvh = (DirectShareViewHolder) holder; - setViewHeight(dsvh.getRow(0), holder.getMeasuredRowHeight()); - setViewHeight(dsvh.getRow(1), holder.getMeasuredRowHeight()); + setViewHeight(dsvh.getRow(0), dsvh.getMinRowHeight()); + setViewHeight(dsvh.getRow(1), dsvh.getMinRowHeight()); } viewGroup.setTag(holder); @@ -2819,6 +2828,10 @@ public class ChooserActivity extends ResolverActivity { return mDirectShareCurrHeight; } + public int getMinRowHeight() { + return mDirectShareMinHeight; + } + public void setViewVisibility(int i, int visibility) { final View v = getView(i); if (visibility == View.VISIBLE) { @@ -2841,15 +2854,20 @@ public class ChooserActivity extends ResolverActivity { } public void handleScroll(AbsListView view, int y, int oldy, int maxTargetsPerRow) { - if (mHideDirectShareExpansion) { - return; - } + // only exit early if fully collapsed, otherwise onListRebuilt() with shifting + // targets can lock us into an expanded mode + boolean notExpanded = mDirectShareCurrHeight == mDirectShareMinHeight; + if (notExpanded) { + if (mHideDirectShareExpansion) { + return; + } - // only expand if we have more than maxTargetsPerRow, and delay that decision - // until they start to scroll - if (mChooserListAdapter.getSelectableServiceTargetCount() <= maxTargetsPerRow) { - mHideDirectShareExpansion = true; - return; + // only expand if we have more than maxTargetsPerRow, and delay that decision + // until they start to scroll + if (mChooserListAdapter.getSelectableServiceTargetCount() <= maxTargetsPerRow) { + mHideDirectShareExpansion = true; + return; + } } int yDiff = (int) ((oldy - y) * DIRECT_SHARE_EXPANSION_RATE); diff --git a/core/java/com/android/internal/app/HeavyWeightSwitcherActivity.java b/core/java/com/android/internal/app/HeavyWeightSwitcherActivity.java index 7735d84ab751..015238788191 100644 --- a/core/java/com/android/internal/app/HeavyWeightSwitcherActivity.java +++ b/core/java/com/android/internal/app/HeavyWeightSwitcherActivity.java @@ -16,11 +16,11 @@ package com.android.internal.app; -import com.android.internal.R; - import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityTaskManager; +import android.app.ActivityThread; +import android.app.IApplicationThread; import android.content.Intent; import android.content.IntentSender; import android.content.pm.ApplicationInfo; @@ -29,13 +29,14 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.RemoteException; import android.util.Log; -import android.util.TypedValue; import android.view.View; -import android.view.Window; import android.view.View.OnClickListener; +import android.view.Window; import android.widget.ImageView; import android.widget.TextView; +import com.android.internal.R; + /** * This activity is displayed when the system attempts to start an Intent for * which there is more than one matching activity, allowing the user to decide @@ -127,7 +128,10 @@ public class HeavyWeightSwitcherActivity extends Activity { private OnClickListener mSwitchOldListener = new OnClickListener() { public void onClick(View v) { try { - ActivityTaskManager.getService().moveTaskToFront(mCurTask, 0, null); + ActivityThread thread = ActivityThread.currentActivityThread(); + IApplicationThread appThread = thread.getApplicationThread(); + ActivityTaskManager.getService().moveTaskToFront(appThread, getPackageName(), + mCurTask, 0, null); } catch (RemoteException e) { } finish(); diff --git a/core/java/com/android/internal/infra/AbstractRemoteService.java b/core/java/com/android/internal/infra/AbstractRemoteService.java index ef5178aca40a..65a63a05f666 100644 --- a/core/java/com/android/internal/infra/AbstractRemoteService.java +++ b/core/java/com/android/internal/infra/AbstractRemoteService.java @@ -344,13 +344,21 @@ public abstract class AbstractRemoteService<S extends AbstractRemoteService<S, I * {@link #getTimeoutIdleBindMillis() idle timeout} expires. */ protected void scheduleUnbind() { - final long unbindDelay = getTimeoutIdleBindMillis(); + scheduleUnbind(true); + } + + private void scheduleUnbind(boolean delay) { + long unbindDelay = getTimeoutIdleBindMillis(); - if (unbindDelay <= 0) { + if (unbindDelay <= PERMANENT_BOUND_TIMEOUT_MS) { if (mVerbose) Slog.v(mTag, "not scheduling unbind when value is " + unbindDelay); return; } + if (!delay) { + unbindDelay = 0; + } + cancelScheduledUnbind(); // TODO(b/117779333): make sure it's unbound if the service settings changing (right now // it's not) @@ -462,9 +470,16 @@ public abstract class AbstractRemoteService<S extends AbstractRemoteService<S, I @Override public void onServiceDisconnected(ComponentName name) { + if (mVerbose) Slog.v(mTag, "onServiceDisconnected()"); mBinding = true; mService = null; } + + @Override + public void onBindingDied(ComponentName name) { + if (mVerbose) Slog.v(mTag, "onBindingDied()"); + scheduleUnbind(false); + } } private boolean checkIfDestroyed() { diff --git a/core/java/com/android/internal/os/RoSystemProperties.java b/core/java/com/android/internal/os/RoSystemProperties.java index 1aef573f5189..b0855f494ffd 100644 --- a/core/java/com/android/internal/os/RoSystemProperties.java +++ b/core/java/com/android/internal/os/RoSystemProperties.java @@ -60,7 +60,7 @@ public class RoSystemProperties { public static final boolean FW_SYSTEM_USER_SPLIT = SystemProperties.getBoolean("ro.fw.system_user_split", false); public static final boolean MULTIUSER_HEADLESS_SYSTEM_USER = - SystemProperties.getBoolean("ro.fw.multiuser.headless_system_user", true); + SystemProperties.getBoolean("ro.fw.multiuser.headless_system_user", false); // ------ ro.crypto.* -------- // public static final CryptoProperties.state_values CRYPTO_STATE = diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 967abce60cd3..b6ee0fe782a6 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -174,7 +174,6 @@ extern int register_android_database_CursorWindow(JNIEnv* env); extern int register_android_database_SQLiteConnection(JNIEnv* env); extern int register_android_database_SQLiteGlobal(JNIEnv* env); extern int register_android_database_SQLiteDebug(JNIEnv* env); -extern int register_android_nio_utils(JNIEnv* env); extern int register_android_os_Debug(JNIEnv* env); extern int register_android_os_GraphicsEnvironment(JNIEnv* env); extern int register_android_os_HidlSupport(JNIEnv* env); @@ -1422,7 +1421,6 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_os_NativeHandle), REG_JNI(register_android_os_VintfObject), REG_JNI(register_android_os_VintfRuntimeInfo), - REG_JNI(register_android_nio_utils), REG_JNI(register_android_graphics_Canvas), // This needs to be before register_android_graphics_Graphics, or the latter // will not be able to find the jmethodID for ColorSpace.get(). diff --git a/core/jni/android/opengl/util.cpp b/core/jni/android/opengl/util.cpp index 09f0e8e232bf..55abc932cff2 100644 --- a/core/jni/android/opengl/util.cpp +++ b/core/jni/android/opengl/util.cpp @@ -773,54 +773,18 @@ static jint util_texSubImage2D(JNIEnv *env, jclass clazz, * ETC1 methods. */ -static jclass nioAccessClass; -static jclass bufferClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - -/* Cache method IDs each time the class is loaded. */ - -static void -nativeClassInitBuffer(JNIEnv *env) -{ - jclass nioAccessClassLocal = FindClassOrDie(env, "java/nio/NIOAccess"); - nioAccessClass = MakeGlobalRefOrDie(env, nioAccessClassLocal); - getBasePointerID = GetStaticMethodIDOrDie(env, nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = GetStaticMethodIDOrDie(env, nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = GetStaticMethodIDOrDie(env, nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - jclass bufferClassLocal = FindClassOrDie(env, "java/nio/Buffer"); - bufferClass = MakeGlobalRefOrDie(env, bufferClassLocal); - positionID = GetFieldIDOrDie(env, bufferClass, "position", "I"); - limitID = GetFieldIDOrDie(env, bufferClass, "limit", "I"); - elementSizeShiftID = GetFieldIDOrDie(env, bufferClass, "_elementSizeShift", "I"); -} - static void * getPointer(JNIEnv *_env, jobject buffer, jint *remaining) { jint position; jint limit; jint elementSizeShift; - jlong pointer; - - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); + jlong pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); if (pointer != 0L) { - return reinterpret_cast<void *>(pointer); + pointer += position << elementSizeShift; } - return NULL; + *remaining = (limit - position) << elementSizeShift; + return reinterpret_cast<void*>(pointer); } class BufferHelper { @@ -1101,7 +1065,6 @@ static const ClassRegistrationInfo gClasses[] = { int register_android_opengl_classes(JNIEnv* env) { - nativeClassInitBuffer(env); int result = 0; for (int i = 0; i < NELEM(gClasses); i++) { const ClassRegistrationInfo* cri = &gClasses[i]; diff --git a/core/jni/android_nio_utils.cpp b/core/jni/android_nio_utils.cpp index ed8c6038f69d..19a1c7212fae 100644 --- a/core/jni/android_nio_utils.cpp +++ b/core/jni/android_nio_utils.cpp @@ -18,37 +18,22 @@ #include "core_jni_helpers.h" -struct NioJNIData { - jclass nioAccessClass; - - jmethodID getBasePointerID; - jmethodID getBaseArrayID; - jmethodID getBaseArrayOffsetID; -}; - -static NioJNIData gNioJNI; - void* android::nio_getPointer(JNIEnv *_env, jobject buffer, jarray *array) { assert(array); - jlong pointer; - jint offset; - void *data; - - pointer = _env->CallStaticLongMethod(gNioJNI.nioAccessClass, - gNioJNI.getBasePointerID, buffer); + jint position; + jint limit; + jint elementSizeShift; + jlong pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); if (pointer != 0L) { - *array = NULL; - return reinterpret_cast<void *>(pointer); + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(gNioJNI.nioAccessClass, - gNioJNI.getBaseArrayID, buffer); - offset = _env->CallStaticIntMethod(gNioJNI.nioAccessClass, - gNioJNI.getBaseArrayOffsetID, buffer); - data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0); - - return (void *) ((char *) data + offset); + jint offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + *array = jniGetNioBufferBaseArray(_env, buffer); + void * data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0); + return reinterpret_cast<void*>(reinterpret_cast<char*>(data) + offset); } @@ -72,24 +57,3 @@ android::AutoBufferPointer::~AutoBufferPointer() { android::nio_releasePointer(fEnv, fArray, fPointer, fCommit); } } - -/////////////////////////////////////////////////////////////////////////////// - -namespace android { - -int register_android_nio_utils(JNIEnv* env) { - jclass localClass = FindClassOrDie(env, "java/nio/NIOAccess"); - gNioJNI.getBasePointerID = GetStaticMethodIDOrDie(env, localClass, "getBasePointer", - "(Ljava/nio/Buffer;)J"); - gNioJNI.getBaseArrayID = GetStaticMethodIDOrDie(env, localClass, "getBaseArray", - "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - gNioJNI.getBaseArrayOffsetID = GetStaticMethodIDOrDie(env, localClass, "getBaseArrayOffset", - "(Ljava/nio/Buffer;)I"); - - // now record a permanent version of the class ID - gNioJNI.nioAccessClass = MakeGlobalRefOrDie(env, localClass); - - return 0; -} - -} diff --git a/core/jni/android_opengl_EGL15.cpp b/core/jni/android_opengl_EGL15.cpp index 717b50579325..4aeed8765165 100644 --- a/core/jni/android_opengl_EGL15.cpp +++ b/core/jni/android_opengl_EGL15.cpp @@ -35,16 +35,6 @@ static jclass egldisplayClass; static jclass eglsurfaceClass; static jclass eglconfigClass; static jclass eglcontextClass; -static jclass bufferClass; -static jclass nioAccessClass; - -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; static jmethodID egldisplayGetHandleID; static jmethodID eglconfigGetHandleID; @@ -116,24 +106,6 @@ nativeClassInit(JNIEnv *_env, jclass glImplClass) _env->SetStaticObjectField(eglClass, noSurfaceFieldID, eglNoSurfaceObject); // EGL 1.5 init - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); - jclass eglimageClassLocal = _env->FindClass("android/opengl/EGLImage"); eglimageClass = (jclass) _env->NewGlobalRef(eglimageClassLocal); jclass eglsyncClassLocal = _env->FindClass("android/opengl/EGLSync"); @@ -160,23 +132,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *array = NULL; + *array = nullptr; + pointer += position << elementSizeShift; return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } static void diff --git a/core/jni/android_opengl_GLES10.cpp b/core/jni/android_opengl_GLES10.cpp index a4ab5db8c8d7..3d9a3b6687b1 100644 --- a/core/jni/android_opengl_GLES10.cpp +++ b/core/jni/android_opengl_GLES10.cpp @@ -29,15 +29,6 @@ #include <utils/misc.h> #include <assert.h> -static jclass nioAccessClass; -static jclass bufferClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - /* special calls implemented in Android's GLES wrapper used to more * efficiently bound-check passed arrays */ @@ -72,28 +63,9 @@ static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type, #endif } -/* Cache method IDs each time the class is loaded. */ - static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); } static void * @@ -104,23 +76,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *array = NULL; + *array = nullptr; + pointer += position << elementSizeShift; return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } class ByteArrayGetter { @@ -242,16 +208,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) static void * getDirectBufferPointer(JNIEnv *_env, jobject buffer) { - char* buf = (char*) _env->GetDirectBufferAddress(buffer); - if (buf) { - jint position = _env->GetIntField(buffer, positionID); - jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - buf += position << elementSizeShift; - } else { + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); + if (pointer == 0) { jniThrowException(_env, "java/lang/IllegalArgumentException", "Must use a native order direct Buffer"); + return nullptr; } - return (void*) buf; + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } // -------------------------------------------------------------------------- diff --git a/core/jni/android_opengl_GLES10Ext.cpp b/core/jni/android_opengl_GLES10Ext.cpp index a5dcbf765b60..6d7f41e5b3b2 100644 --- a/core/jni/android_opengl_GLES10Ext.cpp +++ b/core/jni/android_opengl_GLES10Ext.cpp @@ -29,15 +29,6 @@ #include <utils/misc.h> #include <assert.h> -static jclass nioAccessClass; -static jclass bufferClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - /* special calls implemented in Android's GLES wrapper used to more * efficiently bound-check passed arrays */ @@ -72,28 +63,9 @@ static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type, #endif } -/* Cache method IDs each time the class is loaded. */ - static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); } static void * @@ -104,23 +76,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *array = NULL; + *array = nullptr; + pointer += position << elementSizeShift; return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } class ByteArrayGetter { @@ -242,16 +208,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) static void * getDirectBufferPointer(JNIEnv *_env, jobject buffer) { - char* buf = (char*) _env->GetDirectBufferAddress(buffer); - if (buf) { - jint position = _env->GetIntField(buffer, positionID); - jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - buf += position << elementSizeShift; - } else { + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); + if (pointer == 0) { jniThrowException(_env, "java/lang/IllegalArgumentException", "Must use a native order direct Buffer"); + return nullptr; } - return (void*) buf; + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } // -------------------------------------------------------------------------- diff --git a/core/jni/android_opengl_GLES11.cpp b/core/jni/android_opengl_GLES11.cpp index be86a037bfbd..39ef41a0e19e 100644 --- a/core/jni/android_opengl_GLES11.cpp +++ b/core/jni/android_opengl_GLES11.cpp @@ -29,15 +29,6 @@ #include <utils/misc.h> #include <assert.h> -static jclass nioAccessClass; -static jclass bufferClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - /* special calls implemented in Android's GLES wrapper used to more * efficiently bound-check passed arrays */ @@ -72,28 +63,9 @@ static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type, #endif } -/* Cache method IDs each time the class is loaded. */ - static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); } static void * @@ -104,23 +76,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *array = NULL; + *array = nullptr; + pointer += position << elementSizeShift; return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } class ByteArrayGetter { @@ -242,16 +208,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) static void * getDirectBufferPointer(JNIEnv *_env, jobject buffer) { - char* buf = (char*) _env->GetDirectBufferAddress(buffer); - if (buf) { - jint position = _env->GetIntField(buffer, positionID); - jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - buf += position << elementSizeShift; - } else { + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); + if (pointer == 0) { jniThrowException(_env, "java/lang/IllegalArgumentException", "Must use a native order direct Buffer"); + return nullptr; } - return (void*) buf; + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } // -------------------------------------------------------------------------- diff --git a/core/jni/android_opengl_GLES11Ext.cpp b/core/jni/android_opengl_GLES11Ext.cpp index d28d9a387b5e..1144d5bfb4e6 100644 --- a/core/jni/android_opengl_GLES11Ext.cpp +++ b/core/jni/android_opengl_GLES11Ext.cpp @@ -29,15 +29,6 @@ #include <utils/misc.h> #include <assert.h> -static jclass nioAccessClass; -static jclass bufferClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - /* special calls implemented in Android's GLES wrapper used to more * efficiently bound-check passed arrays */ @@ -72,28 +63,9 @@ static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type, #endif } -/* Cache method IDs each time the class is loaded. */ - static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); } static void * @@ -104,23 +76,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *array = NULL; + *array = nullptr; + pointer += position << elementSizeShift; return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } class ByteArrayGetter { @@ -242,16 +208,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) static void * getDirectBufferPointer(JNIEnv *_env, jobject buffer) { - char* buf = (char*) _env->GetDirectBufferAddress(buffer); - if (buf) { - jint position = _env->GetIntField(buffer, positionID); - jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - buf += position << elementSizeShift; - } else { + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); + if (pointer == 0) { jniThrowException(_env, "java/lang/IllegalArgumentException", "Must use a native order direct Buffer"); + return nullptr; } - return (void*) buf; + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } // -------------------------------------------------------------------------- diff --git a/core/jni/android_opengl_GLES20.cpp b/core/jni/android_opengl_GLES20.cpp index 0e20d474e275..2add72d14c7b 100644 --- a/core/jni/android_opengl_GLES20.cpp +++ b/core/jni/android_opengl_GLES20.cpp @@ -29,15 +29,6 @@ #include <utils/misc.h> #include <assert.h> -static jclass nioAccessClass; -static jclass bufferClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - /* special calls implemented in Android's GLES wrapper used to more * efficiently bound-check passed arrays */ @@ -72,28 +63,9 @@ static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type, #endif } -/* Cache method IDs each time the class is loaded. */ - static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); } static void * @@ -104,23 +76,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *array = NULL; + *array = nullptr; + pointer += position << elementSizeShift; return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } class ByteArrayGetter { @@ -242,16 +208,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) static void * getDirectBufferPointer(JNIEnv *_env, jobject buffer) { - char* buf = (char*) _env->GetDirectBufferAddress(buffer); - if (buf) { - jint position = _env->GetIntField(buffer, positionID); - jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - buf += position << elementSizeShift; - } else { + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); + if (pointer == 0) { jniThrowException(_env, "java/lang/IllegalArgumentException", "Must use a native order direct Buffer"); + return nullptr; } - return (void*) buf; + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } // -------------------------------------------------------------------------- diff --git a/core/jni/android_opengl_GLES30.cpp b/core/jni/android_opengl_GLES30.cpp index 992239865db7..a9c021951758 100644 --- a/core/jni/android_opengl_GLES30.cpp +++ b/core/jni/android_opengl_GLES30.cpp @@ -29,15 +29,6 @@ #include <utils/misc.h> #include <assert.h> -static jclass nioAccessClass; -static jclass bufferClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - /* special calls implemented in Android's GLES wrapper used to more * efficiently bound-check passed arrays */ @@ -72,28 +63,9 @@ static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type, #endif } -/* Cache method IDs each time the class is loaded. */ - static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); } static void * @@ -104,23 +76,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *array = NULL; + *array = nullptr; + pointer += position << elementSizeShift; return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } class ByteArrayGetter { @@ -242,16 +208,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) static void * getDirectBufferPointer(JNIEnv *_env, jobject buffer) { - char* buf = (char*) _env->GetDirectBufferAddress(buffer); - if (buf) { - jint position = _env->GetIntField(buffer, positionID); - jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - buf += position << elementSizeShift; - } else { + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); + if (pointer == 0) { jniThrowException(_env, "java/lang/IllegalArgumentException", "Must use a native order direct Buffer"); + return nullptr; } - return (void*) buf; + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } // -------------------------------------------------------------------------- diff --git a/core/jni/android_opengl_GLES31.cpp b/core/jni/android_opengl_GLES31.cpp index 27dbd399d77c..456da93784d5 100644 --- a/core/jni/android_opengl_GLES31.cpp +++ b/core/jni/android_opengl_GLES31.cpp @@ -27,15 +27,6 @@ #include <utils/misc.h> #include <assert.h> -static jclass nioAccessClass; -static jclass bufferClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - /* special calls implemented in Android's GLES wrapper used to more * efficiently bound-check passed arrays */ @@ -70,28 +61,9 @@ static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type, #endif } -/* Cache method IDs each time the class is loaded. */ - static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); } static void * @@ -102,23 +74,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *array = NULL; + *array = nullptr; + pointer += position << elementSizeShift; return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } class ByteArrayGetter { @@ -240,16 +206,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) static void * getDirectBufferPointer(JNIEnv *_env, jobject buffer) { - char* buf = (char*) _env->GetDirectBufferAddress(buffer); - if (buf) { - jint position = _env->GetIntField(buffer, positionID); - jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - buf += position << elementSizeShift; - } else { + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); + if (pointer == 0) { jniThrowException(_env, "java/lang/IllegalArgumentException", "Must use a native order direct Buffer"); + return nullptr; } - return (void*) buf; + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } // -------------------------------------------------------------------------- diff --git a/core/jni/android_opengl_GLES31Ext.cpp b/core/jni/android_opengl_GLES31Ext.cpp index 5b671c8e55fb..dcaf4a58cd53 100644 --- a/core/jni/android_opengl_GLES31Ext.cpp +++ b/core/jni/android_opengl_GLES31Ext.cpp @@ -28,15 +28,6 @@ #include <utils/misc.h> #include <assert.h> -static jclass nioAccessClass; -static jclass bufferClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - /* special calls implemented in Android's GLES wrapper used to more * efficiently bound-check passed arrays */ @@ -71,28 +62,9 @@ static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type, #endif } -/* Cache method IDs each time the class is loaded. */ - static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); } static void * @@ -103,23 +75,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *array = NULL; + *array = nullptr; + pointer += position << elementSizeShift; return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } class ByteArrayGetter { @@ -241,16 +207,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) static void * getDirectBufferPointer(JNIEnv *_env, jobject buffer) { - char* buf = (char*) _env->GetDirectBufferAddress(buffer); - if (buf) { - jint position = _env->GetIntField(buffer, positionID); - jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - buf += position << elementSizeShift; - } else { + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); + if (pointer == 0) { jniThrowException(_env, "java/lang/IllegalArgumentException", "Must use a native order direct Buffer"); + return nullptr; } - return (void*) buf; + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } // -------------------------------------------------------------------------- diff --git a/core/jni/android_opengl_GLES32.cpp b/core/jni/android_opengl_GLES32.cpp index d59d25c2c483..6bdc711d64a2 100644 --- a/core/jni/android_opengl_GLES32.cpp +++ b/core/jni/android_opengl_GLES32.cpp @@ -27,15 +27,6 @@ #include <utils/misc.h> #include <assert.h> -static jclass nioAccessClass; -static jclass bufferClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; - /* special calls implemented in Android's GLES wrapper used to more * efficiently bound-check passed arrays */ @@ -70,28 +61,9 @@ static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type, #endif } -/* Cache method IDs each time the class is loaded. */ - static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); } static void * @@ -102,23 +74,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *array = NULL; + *array = nullptr; + pointer += position << elementSizeShift; return reinterpret_cast<void*>(pointer); } - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } class ByteArrayGetter { @@ -240,16 +206,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) static void * getDirectBufferPointer(JNIEnv *_env, jobject buffer) { - char* buf = (char*) _env->GetDirectBufferAddress(buffer); - if (buf) { - jint position = _env->GetIntField(buffer, positionID); - jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - buf += position << elementSizeShift; - } else { + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); + if (pointer == 0) { jniThrowException(_env, "java/lang/IllegalArgumentException", "Must use a native order direct Buffer"); + return nullptr; } - return (void*) buf; + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } // -------------------------------------------------------------------------- diff --git a/core/jni/com_google_android_gles_jni_GLImpl.cpp b/core/jni/com_google_android_gles_jni_GLImpl.cpp index c806162c2534..6b893cb94444 100644 --- a/core/jni/com_google_android_gles_jni_GLImpl.cpp +++ b/core/jni/com_google_android_gles_jni_GLImpl.cpp @@ -65,16 +65,7 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer, GLsizei count); } -static jclass nioAccessClass; -static jclass bufferClass; static jclass G11ImplClass; -static jmethodID getBasePointerID; -static jmethodID getBaseArrayID; -static jmethodID getBaseArrayOffsetID; -static jmethodID allowIndirectBuffersID; -static jfieldID positionID; -static jfieldID limitID; -static jfieldID elementSizeShiftID; static jfieldID haveCheckedExtensionsID; static jfieldID have_OES_blend_equation_separateID; static jfieldID have_OES_blend_subtractID; @@ -86,12 +77,6 @@ static jfieldID have_OES_texture_cube_mapID; static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - jclass g11impClassLocal = _env->FindClass("com/google/android/gles_jni/GLImpl"); G11ImplClass = (jclass) _env->NewGlobalRef(g11impClassLocal); haveCheckedExtensionsID = _env->GetFieldID(G11ImplClass, "haveCheckedExtensions", "Z"); @@ -99,19 +84,6 @@ nativeClassInit(JNIEnv *_env, jclass glImplClass) have_OES_blend_subtractID = _env->GetFieldID(G11ImplClass, "have_OES_blend_subtract", "Z"); have_OES_framebuffer_objectID = _env->GetFieldID(G11ImplClass, "have_OES_framebuffer_object", "Z"); have_OES_texture_cube_mapID = _env->GetFieldID(G11ImplClass, "have_OES_texture_cube_map", "Z"); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - allowIndirectBuffersID = _env->GetStaticMethodID(g11impClassLocal, - "allowIndirectBuffers", "(Ljava/lang/String;)Z"); - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); } static void * @@ -122,28 +94,17 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o jint elementSizeShift; jlong pointer; - position = _env->GetIntField(buffer, positionID); - limit = _env->GetIntField(buffer, limitID); - elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); *remaining = (limit - position) << elementSizeShift; - pointer = _env->CallStaticLongMethod(nioAccessClass, - getBasePointerID, buffer); if (pointer != 0L) { - *offset = 0; - *array = NULL; - return reinterpret_cast<void *>(pointer); - } - - *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, - getBaseArrayID, buffer); - if (*array == NULL) { - *offset = 0; - return (void*) NULL; + *array = nullptr; + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } - *offset = _env->CallStaticIntMethod(nioAccessClass, - getBaseArrayOffsetID, buffer); - return NULL; + *array = jniGetNioBufferBaseArray(_env, buffer); + *offset = jniGetNioBufferBaseArrayOffset(_env, buffer); + return nullptr; } static void @@ -157,42 +118,24 @@ extern "C" { extern char* __progname; } -static bool -allowIndirectBuffers(JNIEnv *_env) { - static jint sIndirectBufferCompatability; - if (sIndirectBufferCompatability == 0) { - jobject appName = _env->NewStringUTF(::__progname); - sIndirectBufferCompatability = _env->CallStaticBooleanMethod(G11ImplClass, allowIndirectBuffersID, appName) ? 2 : 1; - } - return sIndirectBufferCompatability == 2; -} - static void * getDirectBufferPointer(JNIEnv *_env, jobject buffer) { - if (!buffer) { - return NULL; - } - void* buf = _env->GetDirectBufferAddress(buffer); - if (buf) { - jint position = _env->GetIntField(buffer, positionID); - jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); - buf = ((char*) buf) + (position << elementSizeShift); - } else { - if (allowIndirectBuffers(_env)) { - jarray array = 0; - jint remaining; - jint offset; - buf = getPointer(_env, buffer, &array, &remaining, &offset); - if (array) { - releasePointer(_env, array, buf, 0); - } - buf = (char*)buf + offset; - } else { - jniThrowException(_env, "java/lang/IllegalArgumentException", - "Must use a native order direct Buffer"); - } + if (buffer == nullptr) { + return nullptr; } - return buf; + + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + pointer = jniGetNioBufferFields(_env, buffer, &position, &limit, &elementSizeShift); + if (pointer == 0) { + jniThrowException(_env, "java/lang/IllegalArgumentException", + "Must use a native order direct Buffer"); + return nullptr; + } + pointer += position << elementSizeShift; + return reinterpret_cast<void*>(pointer); } static int diff --git a/core/res/res/drawable/ic_qs_ui_mode_night.xml b/core/res/res/drawable/ic_qs_ui_mode_night.xml new file mode 100644 index 000000000000..72278272e330 --- /dev/null +++ b/core/res/res/drawable/ic_qs_ui_mode_night.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2019 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License + --> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48dp" + android:height="48dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M12,22C17.52,22 22,17.52 22,12 22,6.48 17.52,2 12,2 6.48,2 2,6.48 2,12 2,17.52 6.48,22 12,22ZM12,3.915c3.889,0 8,4.005 8,8.085 0,4.08 -3.927,7.992 -7.928,7.992z"/> +</vector>
\ No newline at end of file diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 132e51525ec5..c7c293b4e5ac 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -309,8 +309,8 @@ <string name="permgroupdesc_microphone" msgid="4988812113943554584">"تسجيل الصوت"</string> <string name="permgrouprequest_microphone" msgid="9167492350681916038">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بتسجيل الصوت؟"</string> <string name="permgrouplab_activityRecognition" msgid="1565108047054378642">"النشاط البدني"</string> - <string name="permgroupdesc_activityRecognition" msgid="6949472038320473478">"الوصول إلى نشاطك البدني"</string> - <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"هل تريد السماح للتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالوصول إلى نشاطك البدني؟"</string> + <string name="permgroupdesc_activityRecognition" msgid="6949472038320473478">"الوصول إلى بيانات نشاطك البدني"</string> + <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"هل تريد السماح للتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالوصول إلى بيانات نشاطك البدني؟"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"الكاميرا"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"التقاط صور وتسجيل فيديو"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالتقاط صور وتسجيل فيديو؟"</string> @@ -1897,7 +1897,7 @@ <string name="package_deleted_device_owner" msgid="2307122077550236438">"تم الحذف بواسطة المشرف"</string> <string name="confirm_battery_saver" msgid="639106420541753635">"موافق"</string> <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"لإطالة عمر البطارية، تساعد ميزة \"توفير شحن البطارية\" على إيقاف أو تقييد نشاط الخلفية وبعض التأثيرات المرئية وغيرها من الميزات التي تستنفد طاقة البطارية. "<annotation id="url">"مزيد من المعلومات"</annotation></string> - <string name="battery_saver_description" msgid="6413346684861241431">"لإطالة عمر البطارية، تساعد ميزة \"توفير شحن البطارية\" على إيقاف أو تقييد نشاط الخلفية وبعض التأثيرات المرئية وغيرها من الميزات التي تستنفد طاقة البطارية."</string> + <string name="battery_saver_description" msgid="6413346684861241431">"لإطالة عمر البطارية، تساعد ميزة \"توفير شحن البطارية\" على إيقاف أو تقييد النشاط في الخلفية وبعض التأثيرات المرئية وغيرها من الميزات التي تستنفد طاقة البطارية."</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> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 63437e398e25..778442bff128 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -519,8 +519,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"এপক আপোনাৰ ফট’ সংগ্ৰহ সালসলনি কৰিবলৈ দিয়ে।"</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"আপোনাৰ মিডিয়া সংগ্ৰহৰ অৱস্থান পঢ়িবলৈ"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"এপক আপোনাৰ মিডিয়া সংগ্ৰহৰ অৱস্থান পঢ়িবলৈ দিয়ে।"</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"এইজন আপুনিয়েই বুলি সত্যাপন কৰক"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"বায়োমেট্ৰিক হাৰ্ডৱেৰ উপলব্ধ নহয়"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"বিশ্বাসযোগ্যতাৰ প্ৰমাণীকৰণ বাতিল কৰা হৈছে"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"চিনাক্ত কৰিব পৰা নাই"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 1d0ae2d2706c..144d99c06005 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -1988,7 +1988,7 @@ <string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"Сховішча на прыладзе"</string> <string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"Адладка USB"</string> <string name="time_picker_hour_label" msgid="2979075098868106450">"гадз"</string> - <string name="time_picker_minute_label" msgid="5168864173796598399">"хвіліна"</string> + <string name="time_picker_minute_label" msgid="5168864173796598399">"хв"</string> <string name="time_picker_header_text" msgid="143536825321922567">"Задаць час"</string> <string name="time_picker_input_error" msgid="7574999942502513765">"Увядзіце дапушчальны час"</string> <string name="time_picker_prompt_label" msgid="7588093983899966783">"Увядзіце час"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 47da68abdb81..21a11950fcbb 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -1920,7 +1920,7 @@ <string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"Хранилище на устройството"</string> <string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"Отстраняване на грешки през USB"</string> <string name="time_picker_hour_label" msgid="2979075098868106450">"час"</string> - <string name="time_picker_minute_label" msgid="5168864173796598399">"минута"</string> + <string name="time_picker_minute_label" msgid="5168864173796598399">"минути"</string> <string name="time_picker_header_text" msgid="143536825321922567">"Задаване на час"</string> <string name="time_picker_input_error" msgid="7574999942502513765">"Въведете валиден час"</string> <string name="time_picker_prompt_label" msgid="7588093983899966783">"Въведете часа"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 8198ee4d873b..dddd0fc4c760 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -283,7 +283,7 @@ <string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-কে এই ডিভাইসের লোকেশন অ্যাক্সেস করতে দেবেন?"</string> <string name="permgrouprequestdetail_location" msgid="1347189607421252902">"আপনি এই অ্যাপ ব্যবহার করার সময়েই শুধু সেটি আপনার লোকেশন অ্যাক্সেস করতে পারবে"</string> <string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> অ্যাপকে এই ডিভাইসের লোকেশন <b>সব সময়</b> অ্যাক্সেস করার অনুমতি দিতে চান?"</string> - <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"এই অ্যাপ ব্যবহার করার সময় বর্তমানে সেটি আপনার লোকেশন অ্যাক্সেস করতে পারে"</string> + <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"আপনি যখন অ্যাপটি ব্যবহার করবেন শুধুমাত্র তখনই অ্যাপটি বর্তমান লোকেশন অ্যাক্সেস করতে পারবে।"</string> <string name="permgrouplab_calendar" msgid="5863508437783683902">"ক্যালেন্ডার"</string> <string name="permgroupdesc_calendar" msgid="3889615280211184106">"আপনার ক্যালেন্ডারে অ্যাক্সেস"</string> <string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-কে আপনার ক্যালেন্ডারে অ্যাক্সেস দেবেন?"</string> @@ -504,7 +504,7 @@ <string name="permlab_disableKeyguard" msgid="3598496301486439258">"আপনার স্ক্রিন লক অক্ষম করুন"</string> <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"কী-লক এবং যেকোনো সংশ্লিষ্ট পাসওয়ার্ড সুরক্ষা অক্ষম করতে অ্যাপ্লিকেশানটিকে মঞ্জুর করে৷ উদাহরণস্বরূপ, একটি ইনকামিং ফোন কল গ্রহণ করার সময়ে ফোনটি কী-লক অক্ষম করে, তারপরে কল শেষ হয়ে গেলে কী-লকটিকে আবার সক্ষম করে৷"</string> <string name="permlab_requestPasswordComplexity" msgid="202650535669249674">"স্ক্রিন লকের জটিলতা জানার অনুরোধ করুন"</string> - <string name="permdesc_requestPasswordComplexity" msgid="4730994229754212347">"এটি অ্যাপটিকে স্ক্রিন লকের জটিলতার লেভেল বুঝতে সাহায্য করে (খুব বেশি, মাঝারি, অল্প জটিল বা কোনও জটিলতা নেই), যা স্ক্রিন লকটি সম্ভত কত দীর্ঘ ও সেটির ধরন কীরকম, তার ইঙ্গিত দেয়। এই অ্যাপটি একটি নির্দিষ্ট লেভেল পর্যন্ত স্ক্রিন লক আপডেট করার সাজেশনও দিতে পারে, তবে ব্যবহারকারী তা উপেক্ষা করে অন্য কোথাও চলে যেতে পারেন। মনে রাখবেন যে স্ক্রিন লক প্লেন টেক্সট হিসেবে সংরক্ষণ করা হয় না, তাই অ্যাপ কখনও আসল পাসওয়ার্ড জানতে পারে না।"</string> + <string name="permdesc_requestPasswordComplexity" msgid="4730994229754212347">"এটি অ্যাপটিকে স্ক্রিন লকের জটিলতার লেভেল বুঝতে সাহায্য করে (খুব বেশি, মাঝারি, অল্প জটিল বা কোনও জটিলতা নেই), যা স্ক্রিন লকটি সম্ভবত কত দীর্ঘ ও সেটির ধরন কীরকম, তার ইঙ্গিত দেয়। এই অ্যাপটি একটি নির্দিষ্ট লেভেল পর্যন্ত স্ক্রিন লক আপডেট করার সাজেশনও দিতে পারে, তবে ব্যবহারকারী তা উপেক্ষা করে অন্য কোথাও চলে যেতে পারেন। মনে রাখবেন যে স্ক্রিন লক প্লেন টেক্সট হিসেবে সংরক্ষণ করা হয় না, তাই অ্যাপ কখনও আসল পাসওয়ার্ড জানতে পারে না।"</string> <string name="permlab_useBiometric" msgid="8837753668509919318">"বায়োমেট্রিক হার্ডওয়্যার ব্যবহার করুন"</string> <string name="permdesc_useBiometric" msgid="8389855232721612926">"অ্যাপটিকে যাচাইকরণের জন্য বায়োমেট্রিক হার্ডওয়্যার ব্যবহার করার অনুমতি দেয়"</string> <string name="permlab_manageFingerprint" msgid="5640858826254575638">"আঙ্গুলের ছাপ নেওয়ার হার্ডওয়্যার পরিচালনা করুন"</string> @@ -519,8 +519,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"অ্যাপকে আপনার ফটো সংগ্রহ পরিবর্তন করার অনুমতি দিন।"</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"ডিয়া সংগ্রহ থেকে লোকেশন দেখতে দিন"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"আপনার মিডিয়া সংগ্রহ থেকে লোকেশন দেখতে অ্যাপকে অনুমতি দিন।"</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"আপনার পরিচয় যাচাই করুন"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"বায়োমেট্রিক হার্ডওয়্যার পাওয়া যাবে না"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"যাচাইকরণ বাতিল হয়েছে"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"স্বীকৃত নয়"</string> @@ -1798,8 +1797,8 @@ <string name="package_updated_device_owner" msgid="1847154566357862089">"আপনার প্রশাসক আপডেট করেছেন"</string> <string name="package_deleted_device_owner" msgid="2307122077550236438">"আপনার প্রশাসক মুছে দিয়েছেন"</string> <string name="confirm_battery_saver" msgid="639106420541753635">"ঠিক আছে"</string> - <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"ব্যাটারি আরও বেশিক্ষণ চালাতে ব্যাটারি সেভার ব্যাকগ্রাউন্ড অ্যাক্টিভিটি, কিছু ভিজ্যুয়াল এফেক্ট ও অতিরিক্ত শক্তি খরচ হয় এমন অন্যান্য ফিচার বন্ধ বা সীমাবদ্ধ করে। "<annotation id="url">"আরও জানুন"</annotation></string> - <string name="battery_saver_description" msgid="6413346684861241431">"ব্যাটারি আরও বেশিক্ষণ চালাতে ব্যাটারি সেভার ব্যাকগ্রাউন্ড অ্যাক্টিভিটি, কিছু ভিজ্যুয়াল এফেক্ট ও অতিরিক্ত শক্তি খরচ হয় এমন অন্যান্য ফিচার বন্ধ বা সীমাবদ্ধ করে।"</string> + <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"ব্যাটারি আরও বেশিক্ষণ চালাতে ব্যাটারি সেভার ব্যাকগ্রাউন্ড অ্যাক্টিভিটি, কিছু ভিজুয়াল এফেক্ট ও অতিরিক্ত শক্তি খরচ হয় এমন অন্যান্য ফিচার বন্ধ বা সীমাবদ্ধ করে। "<annotation id="url">"আরও জানুন"</annotation></string> + <string name="battery_saver_description" msgid="6413346684861241431">"ব্যাটারি আরও বেশিক্ষণ চালাতে ব্যাটারি সেভার ব্যাকগ্রাউন্ড অ্যাক্টিভিটি, কিছু ভিজুয়াল এফেক্ট ও অতিরিক্ত শক্তি খরচ হয় এমন অন্যান্য ফিচার বন্ধ বা সীমাবদ্ধ করে।"</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> @@ -1995,8 +1994,8 @@ <string name="dynamic_mode_notification_title" msgid="508815255807182035">"সাধারণত যখন চার্জ দেন, তার আগে চার্জ শেষ হয়ে যেতে পারে"</string> <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"ডিভাইস বেশিক্ষণ চালু রাখতে ব্যাটারি সেভার চালু করা হয়েছে"</string> <string name="battery_saver_notification_channel_name" msgid="2083316159716201806">"ব্যাটারি সেভার"</string> - <string name="battery_saver_sticky_disabled_notification_title" msgid="6376147579378764641">"চার্জ আবার কম না হওয়া পর্যন্ত ব্যাটারি সেভার আবার চালু হবে না"</string> - <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"ব্যাটারি পর্যাপ্ত পরিমাণ চার্জ করা হয়েছে। চার্জ আবার কম না হওয়া পর্যন্ত ব্যাটারি সেভার আবার চালু হবে না।"</string> + <string name="battery_saver_sticky_disabled_notification_title" msgid="6376147579378764641">"চার্জ কম না হওয়া পর্যন্ত ব্যাটারি সেভার আবার চালু হবে না"</string> + <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"ব্যাটারি পর্যাপ্ত পরিমাণ চার্জ করা হয়েছে। চার্জ কম না হওয়া পর্যন্ত ব্যাটারি সেভার আবার চালু হবে না।"</string> <string name="battery_saver_charged_notification_title" product="default" msgid="2960978289873161288">"ফোনে <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> চার্জ আছে"</string> <string name="battery_saver_charged_notification_title" product="tablet" msgid="7555713825806482451">"ট্যাবলেটে <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> চার্জ আছে"</string> <string name="battery_saver_charged_notification_title" product="device" msgid="5954873381559605660">"ডিভাইসে <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> চার্জ আছে"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index a7248273307c..93705a298b68 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -283,7 +283,7 @@ <string name="permgrouprequest_contacts" msgid="6032805601881764300">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristup vašim kontaktima?"</string> <string name="permgrouplab_location" msgid="7275582855722310164">"Lokacija"</string> <string name="permgroupdesc_location" msgid="1346617465127855033">"pristupa lokaciji ovog uređaja"</string> - <string name="permgrouprequest_location" msgid="3788275734953323491">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristup lokaciji ovog uređaja?"</string> + <string name="permgrouprequest_location" msgid="3788275734953323491">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> da pristupi lokaciji ovog uređaja?"</string> <string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplikacija će imati pristup lokaciji isključivo dok je koristite"</string> <string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristup lokaciji uređaja <b>sve vrijeme</b>?"</string> <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplikacija trenutno može pristupati lokaciji isključivo dok je koristite"</string> @@ -1462,7 +1462,7 @@ <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Želite li dozvoliti taj zahtjev?"</string> <string name="grant_permissions_header_text" msgid="6874497408201826708">"Zahtjev za pristup"</string> <string name="allow" msgid="7225948811296386551">"Dozvoli"</string> - <string name="deny" msgid="2081879885755434506">"Odbijte"</string> + <string name="deny" msgid="2081879885755434506">"Odbij"</string> <string name="permission_request_notification_title" msgid="6486759795926237907">"Upućen zahtjev za odobrenje"</string> <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"Upućen zahtjev za dozvolu\nza račun <xliff:g id="ACCOUNT">%s</xliff:g>."</string> <string name="forward_intent_to_owner" msgid="1207197447013960896">"Aplikaciju koristite van poslovnog profila"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index b76d4089be36..b3e1ac68cd6c 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -94,7 +94,7 @@ <string name="notification_channel_sms" msgid="3441746047346135073">"Missatges SMS"</string> <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Missatges de veu"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Trucades per Wi-Fi"</string> - <string name="notification_channel_sim" msgid="4052095493875188564">"Estat de la targeta SIM"</string> + <string name="notification_channel_sim" msgid="4052095493875188564">"Estat de la SIM"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"L\'altre dispositiu ha sol·licitat el mode TTY COMPLET."</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"L\'altre dispositiu ha sol·licitat el mode TTY HCO."</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"L\'altre dispositiu ha sol·licitat el mode TTY VCO."</string> @@ -300,8 +300,8 @@ <string name="permgroupdesc_activityRecognition" msgid="6949472038320473478">"accedir a la teva activitat física"</string> <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> accedeixi a la teva activitat física?"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"Càmera"</string> - <string name="permgroupdesc_camera" msgid="3250611594678347720">"fer fotos i vídeos"</string> - <string name="permgrouprequest_camera" msgid="1299833592069671756">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> faci fotos i vídeos?"</string> + <string name="permgroupdesc_camera" msgid="3250611594678347720">"fer fotos i gravar vídeos"</string> + <string name="permgrouprequest_camera" msgid="1299833592069671756">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> faci fotos i gravi vídeos?"</string> <string name="permgrouplab_calllog" msgid="8798646184930388160">"Registres de trucades"</string> <string name="permgroupdesc_calllog" msgid="3006237336748283775">"llegir i editar el registre de trucades del telèfon"</string> <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> accedeixi als registres de trucades del telèfon?"</string> @@ -655,7 +655,7 @@ <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Fa un seguiment del nombre de contrasenyes incorrectes que s\'han escrit en intentar desbloquejar la pantalla i bloqueja el televisor o n\'esborra totes les dades de l\'usuari si s\'escriuen massa contrasenyes incorrectes."</string> <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Fa un seguiment del nombre de contrasenyes incorrectes que s\'han escrit en intentar desbloquejar la pantalla i bloqueja el telèfon o n\'esborra totes les dades de l\'usuari si s\'escriuen massa contrasenyes incorrectes."</string> <string name="policylab_resetPassword" msgid="4934707632423915395">"Canviar el bloqueig de pantalla"</string> - <string name="policydesc_resetPassword" msgid="1278323891710619128">"Canvia el bloqueig de pantalla"</string> + <string name="policydesc_resetPassword" msgid="1278323891710619128">"Canvia el bloqueig de pantalla."</string> <string name="policylab_forceLock" msgid="2274085384704248431">"Bloquejar la pantalla"</string> <string name="policydesc_forceLock" msgid="1141797588403827138">"Controla com i quan es bloqueja la pantalla."</string> <string name="policylab_wipeData" msgid="3910545446758639713">"Esborrar totes les dades"</string> @@ -1796,8 +1796,8 @@ <string name="package_updated_device_owner" msgid="1847154566357862089">"Actualitzat per l\'administrador"</string> <string name="package_deleted_device_owner" msgid="2307122077550236438">"Suprimit per l\'administrador"</string> <string name="confirm_battery_saver" msgid="639106420541753635">"D\'acord"</string> - <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"Per tal d\'allargar la durada de la bateria, l\'estalvi de bateria desactiva o restringeix les activitats en segon pla, alguns efectes visuals i altres funcions que consumeixen molta energia. "<annotation id="url">"Més informació"</annotation></string> - <string name="battery_saver_description" msgid="6413346684861241431">"Per tal d\'allargar la durada de la bateria, l\'estalvi de bateria desactiva o restringeix les activitats en segon pla, alguns efectes visuals i altres funcions que consumeixen molta energia."</string> + <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"Per tal de prolongar la durada de la bateria, el mode Estalvi de bateria desactiva o restringeix les activitats en segon pla, alguns efectes visuals i altres funcions que consumeixen molta energia. "<annotation id="url">"Més informació"</annotation></string> + <string name="battery_saver_description" msgid="6413346684861241431">"Per tal de prolongar la durada de la bateria, el mode Estalvi de bateria desactiva o restringeix les activitats en segon pla, alguns efectes visuals i altres funcions que consumeixen molta energia."</string> <string name="data_saver_description" msgid="6015391409098303235">"Per reduir l\'ús de dades, la funció Economitzador de dades evita que determinades aplicacions enviïn o rebin dades en segon pla. L\'aplicació que estiguis fent servir podrà accedir a dades, però potser ho farà menys sovint. Això vol dir, per exemple, que les imatges no es mostraran fins que no les toquis."</string> <string name="data_saver_enable_title" msgid="4674073932722787417">"Activar Economitzador de dades?"</string> <string name="data_saver_enable_button" msgid="7147735965247211818">"Activa"</string> @@ -1991,7 +1991,7 @@ <string name="notification_appops_overlay_active" msgid="633813008357934729">"es mostra sobre altres aplicacions a la pantalla"</string> <string name="dynamic_mode_notification_channel_name" msgid="2348803891571320452">"Notificació d\'informació del mode de rutina"</string> <string name="dynamic_mode_notification_title" msgid="508815255807182035">"És possible que la bateria s\'esgoti abans de la càrrega habitual"</string> - <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"S\'ha activat l\'estalvi de bateria per allargar-ne la durada"</string> + <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"S\'ha activat l\'estalvi de bateria per prolongar-ne la durada"</string> <string name="battery_saver_notification_channel_name" msgid="2083316159716201806">"Estalvi de bateria"</string> <string name="battery_saver_sticky_disabled_notification_title" msgid="6376147579378764641">"L\'estalvi de bateria no es tornarà a activar fins que no tornis a tenir poca bateria"</string> <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"La bateria ja està suficientment carregada. L\'estalvi de bateria no es tornarà a activar fins que no tornis a tenir poca bateria."</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 6a17d708c9f3..6322a4ab5453 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -577,7 +577,7 @@ </string-array> <string name="face_error_hw_not_available" msgid="396883585636963908">"Gesicht nicht erkannt. Hardware nicht verfügbar."</string> <string name="face_error_timeout" msgid="2605673935810019129">"Erkennungszeit überschritten. Noch mal versuchen."</string> - <string name="face_error_no_space" msgid="2712120617457553825">"Kein Speicherplatz frei. Bitte alte Gesichtsdaten löschen."</string> + <string name="face_error_no_space" msgid="2712120617457553825">"Kein Speicherplatz frei. Bitte erst ein Gesicht löschen."</string> <string name="face_error_canceled" msgid="2768146728600802422">"Gesichtserkennung abgebrochen"</string> <string name="face_error_user_canceled" msgid="9003022830076496163">"Gesichtserkennung vom Nutzer abgebrochen"</string> <string name="face_error_lockout" msgid="3407426963155388504">"Zu viele Versuche, bitte später noch einmal versuchen"</string> @@ -1206,8 +1206,8 @@ <string name="dump_heap_notification_detail" msgid="3993078784053054141">"Heap-Dump wurde erfasst. Tippe, um ihn zu teilen."</string> <string name="dump_heap_title" msgid="5864292264307651673">"Heap-Dump teilen?"</string> <string name="dump_heap_text" msgid="8546022920319781701">"Für den Prozess \"<xliff:g id="PROC">%1$s</xliff:g>\" wurde das Speicherlimit von <xliff:g id="SIZE">%2$s</xliff:g> überschritten. Es steht ein Heap-Dump zur Verfügung, den du mit dem Entwickler teilen kannst. Beachte jedoch unbedingt, dass der Heap-Dump personenbezogene Daten von dir enthalten kann, auf die die App zugreifen kann."</string> - <string name="dump_heap_system_text" msgid="3236094872980706024">"Für den Prozess \"<xliff:g id="PROC">%1$s</xliff:g>\" wurde das Prozessspeicherlimit von <xliff:g id="SIZE">%2$s</xliff:g> überschritten. Es steht ein Heap-Dump zur Verfügung, den du teilen kannst. Beachte jedoch unbedingt, dass der Heap-Dump vertrauliche personenbezogene Daten von dir enthalten kann, auf die der Prozess Zugriff hat, einschließlich der von dir eingegebenen Informationen."</string> - <string name="dump_heap_ready_text" msgid="1778041771455343067">"Es steht ein Heap-Dump des Prozesses \"<xliff:g id="PROC">%1$s</xliff:g>\" zur Verfügung, den du teilen kannst. Beachte jedoch unbedingt, dass der Heap-Dump vertrauliche personenbezogene Daten von dir enthalten kann, auf die der Prozess Zugriff hat, einschließlich der von dir eingegebenen Informationen."</string> + <string name="dump_heap_system_text" msgid="3236094872980706024">"Für den Prozess \"<xliff:g id="PROC">%1$s</xliff:g>\" wurde das Prozessspeicherlimit von <xliff:g id="SIZE">%2$s</xliff:g> überschritten. Es gibt einen Heap-Dump, den du teilen kannst. Beachte jedoch unbedingt, dass der Heap-Dump vertrauliche personenbezogene Daten von dir enthalten kann, auf die der Prozess Zugriff hat, einschließlich der von dir eingegebenen Informationen."</string> + <string name="dump_heap_ready_text" msgid="1778041771455343067">"Es gibt einen Heap-Dump des Prozesses \"<xliff:g id="PROC">%1$s</xliff:g>\", den du teilen kannst. Beachte jedoch unbedingt, dass der Heap-Dump vertrauliche personenbezogene Daten von dir enthalten kann, auf die der Prozess Zugriff hat, einschließlich der von dir eingegebenen Informationen."</string> <string name="sendText" msgid="5209874571959469142">"Aktion für Text auswählen"</string> <string name="volume_ringtone" msgid="6885421406845734650">"Klingeltonlautstärke"</string> <string name="volume_music" msgid="5421651157138628171">"Medienlautstärke"</string> @@ -1844,7 +1844,7 @@ <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Abends unter der Woche"</string> <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Wochenende"</string> <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Termin"</string> - <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"Beim Schlafen"</string> + <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"Schlafen"</string> <string name="muted_by" msgid="5942954724562097128">"Einige Töne werden von <xliff:g id="THIRD_PARTY">%1$s</xliff:g> stummgeschaltet"</string> <string name="system_error_wipe_data" msgid="6608165524785354962">"Es liegt ein internes Problem mit deinem Gerät vor. Möglicherweise verhält es sich instabil, bis du es auf die Werkseinstellungen zurücksetzt."</string> <string name="system_error_manufacturer" msgid="8086872414744210668">"Es liegt ein internes Problem mit deinem Gerät vor. Bitte wende dich diesbezüglich an den Hersteller."</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index c6557c154bd6..7964e646a5d3 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -1797,7 +1797,7 @@ <string name="package_deleted_device_owner" msgid="2307122077550236438">"Tu administrador borró este paquete"</string> <string name="confirm_battery_saver" msgid="639106420541753635">"Aceptar"</string> <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"El Ahorro de batería desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones que consumen mucha energía a fin de extender la duración de batería. "<annotation id="url">"Más información"</annotation></string> - <string name="battery_saver_description" msgid="6413346684861241431">"El Ahorro de batería desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones que consumen mucha energía a fin de extender la duración de batería."</string> + <string name="battery_saver_description" msgid="6413346684861241431">"El Ahorro de batería desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones que consumen mucha energía para extender la duración de la batería."</string> <string name="data_saver_description" msgid="6015391409098303235">"Para reducir el uso de datos, Ahorro de datos evita que algunas apps envíen y reciban datos en segundo plano. La app que estés usando podrá acceder a los datos, pero con menor frecuencia. De esta forma, por ejemplo, las imágenes no se mostrarán hasta que las presiones."</string> <string name="data_saver_enable_title" msgid="4674073932722787417">"¿Activar Ahorro de datos?"</string> <string name="data_saver_enable_button" msgid="7147735965247211818">"Activar"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index d15ba97cfd71..5e79620a2cf8 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -133,7 +133,7 @@ <string name="wfcSpnFormat_spn_wifi_calling" msgid="136001023263502280">"<xliff:g id="SPN">%s</xliff:g> Wi-Fi bidezko deiak"</string> <string name="wfcSpnFormat_wlan_call" msgid="2533371081782489793">"WLAN bidezko deia"</string> <string name="wfcSpnFormat_spn_wlan_call" msgid="2315240198303197168">"<xliff:g id="SPN">%s</xliff:g> WLAN bidezko deia"</string> - <string name="wfcSpnFormat_spn_wifi" msgid="6546481665561961938">"<xliff:g id="SPN">%s</xliff:g> Wi-Fi"</string> + <string name="wfcSpnFormat_spn_wifi" msgid="6546481665561961938">"<xliff:g id="SPN">%s</xliff:g> wifia"</string> <string name="wfcSpnFormat_wifi_calling_bar_spn" msgid="1726178784338466265">"Wi-Fi bidezko deiak | <xliff:g id="SPN">%s</xliff:g>"</string> <string name="wfcSpnFormat_spn_vowifi" msgid="4444638298656953681">"<xliff:g id="SPN">%s</xliff:g> VoWifi"</string> <string name="wfcSpnFormat_wifi_calling" msgid="4990486735013125329">"Wi-Fi bidezko deiak"</string> @@ -277,22 +277,22 @@ <string name="managed_profile_label" msgid="8947929265267690522">"Aldatu laneko profilera"</string> <string name="permgrouplab_contacts" msgid="3657758145679177612">"Kontaktuak"</string> <string name="permgroupdesc_contacts" msgid="6951499528303668046">"atzitu kontaktuak"</string> - <string name="permgrouprequest_contacts" msgid="6032805601881764300">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari kontaktuak atzitzea baimendu nahi diozu?"</string> + <string name="permgrouprequest_contacts" msgid="6032805601881764300">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari kontaktuak atzitzeko baimena eman nahi diozu?"</string> <string name="permgrouplab_location" msgid="7275582855722310164">"Kokapena"</string> <string name="permgroupdesc_location" msgid="1346617465127855033">"atzitu gailuaren kokapena"</string> - <string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari gailuaren kokapena atzitzea baimendu nahi diozu?"</string> + <string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari gailuaren kokapena atzitzeko baimena eman nahi diozu?"</string> <string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Hura erabiltzen ari zarenean soilik atzituko du aplikazioak kokapena"</string> - <string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari gailu honen kokapena <b>beti</b> atzitzeko baimena eman nahi diozu?"</string> + <string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari gailuaren kokapena <b>beti</b> atzitzeko baimena eman nahi diozu?"</string> <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplikazioak hura darabilzunean atzi dezake kokapena"</string> <string name="permgrouplab_calendar" msgid="5863508437783683902">"Egutegia"</string> <string name="permgroupdesc_calendar" msgid="3889615280211184106">"atzitu egutegia"</string> - <string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari egutegia atzitzea baimendu nahi diozu?"</string> + <string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari egutegia atzitzeko baimena eman nahi diozu?"</string> <string name="permgrouplab_sms" msgid="228308803364967808">"SMS mezuak"</string> <string name="permgroupdesc_sms" msgid="4656988620100940350">"bidali eta ikusi SMS mezuak"</string> <string name="permgrouprequest_sms" msgid="7168124215838204719">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari SMS mezuak bidaltzea eta ikustea baimendu nahi diozu?"</string> <string name="permgrouplab_storage" msgid="1971118770546336966">"Memoria"</string> <string name="permgroupdesc_storage" msgid="637758554581589203">"atzitu gailuko argazkiak, multimedia-edukia eta fitxategiak"</string> - <string name="permgrouprequest_storage" msgid="7885942926944299560">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari gailuko argazkiak, multimedia-edukia eta fitxategiak atzitzea baimendu nahi diozu?"</string> + <string name="permgrouprequest_storage" msgid="7885942926944299560">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari gailuko argazkiak, multimedia-edukia eta fitxategiak atzitzeko baimena eman nahi diozu?"</string> <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofonoa"</string> <string name="permgroupdesc_microphone" msgid="4988812113943554584">"grabatu audioa"</string> <string name="permgrouprequest_microphone" msgid="9167492350681916038">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari audioa grabatzea baimendu nahi diozu?"</string> @@ -304,13 +304,13 @@ <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari argazkiak ateratzea eta bideoak grabatzea baimendu nahi diozu?"</string> <string name="permgrouplab_calllog" msgid="8798646184930388160">"Deien erregistroa"</string> <string name="permgroupdesc_calllog" msgid="3006237336748283775">"irakurri telefonoko deien erregistroa eta idatzi bertan"</string> - <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari telefonoko deien erregistroa atzitzea baimendu nahi diozu?"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari telefonoko deien erregistroa atzitzeko baimena eman nahi diozu?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefonoa"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"egin eta kudeatu telefono-deiak"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari telefono-deiak egitea eta kudeatzea baimendu nahi diozu?"</string> <string name="permgrouplab_sensors" msgid="4838614103153567532">"Gorputz-sentsoreak"</string> <string name="permgroupdesc_sensors" msgid="7147968539346634043">"atzitu bizi-konstanteei buruzko sentsorearen datuak"</string> - <string name="permgrouprequest_sensors" msgid="6349806962814556786">"Bizi-konstanteei buruzko sentsorearen datuak atzitzea baimendu nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_sensors" msgid="6349806962814556786">"Bizi-konstanteei buruzko sentsorearen datuak atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Eskuratu leihoko edukia"</string> <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Arakatu irekita daukazun leihoko edukia."</string> <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Aktibatu \"Arakatu ukituta\""</string> @@ -485,7 +485,7 @@ <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Wi-Fi sarearen bidez gailu guztiei bidalitako paketeak jasotzeko baimena ematen die aplikazioei multidifusio-helbideak erabilita, ez tableta soilik. Multidifusiokoa ez den moduak baino bateria gehiago erabiltzen du."</string> <string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"Wi-Fi sareko gailu guztiei bidalitako paketeak jasotzea baimentzen die aplikazioei multidifusio-helbideak erabilita, ez telebista soilik. Multidifusiokoa ez den moduak baino bateria gehiago erabiltzen du."</string> <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Wi-Fi sarearen bidez gailu guztiei bidalitako paketeak jasotzeko baimena ematen die aplikazioei multidifusio-helbideak erabilita, ez telefonoa soilik. Multidifusiokoa ez den moduak baino bateria gehiago erabiltzen du."</string> - <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"atzitu Bluetooth-ezarpenak"</string> + <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"atzitu Bluetooth ezarpenak"</string> <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Tokiko Bluetooth tableta konfiguratzea eta urruneko gailuak detektatzea eta haiekin parekatzea baimentzen die aplikazioei."</string> <string name="permdesc_bluetoothAdmin" product="tv" msgid="3373125682645601429">"Tokiko Bluetooth telebista konfiguratzea eta urruneko gailuak hautematea eta haiekin parekatzea baimentzen die aplikazioei."</string> <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Tokiko Bluetooth telefonoa konfiguratzea eta urruneko gailuak detektatzea eta haiekin parekatzea baimentzen die aplikazioei."</string> @@ -1206,8 +1206,8 @@ <string name="dump_heap_notification_detail" msgid="3993078784053054141">"Sortu da uneko memoria-prozesuaren txostena. Sakatu partekatzeko."</string> <string name="dump_heap_title" msgid="5864292264307651673">"Uneko memoria-prozesuaren txostena partekatu nahi duzu?"</string> <string name="dump_heap_text" msgid="8546022920319781701">"<xliff:g id="PROC">%1$s</xliff:g> prozesuak memoria-muga (<xliff:g id="SIZE">%2$s</xliff:g>) gainditu du. Uneko memoria-prozesuaren txostena sortu da, garatzailearekin parteka dezazun. Kontuz: aplikazioak atzi dezakeen informazio pertsonala izan dezake txosten horrek."</string> - <string name="dump_heap_system_text" msgid="3236094872980706024">"<xliff:g id="PROC">%1$s</xliff:g> prozesuak bere memoria-muga (<xliff:g id="SIZE">%2$s</xliff:g>) gainditu du. Memoria-prozesuaren txosten bat duzu erabilgarri, hura partekatu nahi baduzu ere. Kontuz: baliteke txosten horrek prozesuak atzi dezakeen kontuzko informazio pertsonala izatea, eta datu horien barnean zuk idatzitakoak egon daitezke, besteak beste."</string> - <string name="dump_heap_ready_text" msgid="1778041771455343067">"<xliff:g id="PROC">%1$s</xliff:g> prozesuaren memoria-prozesuaren txosten bat duzu erabilgarri, hura partekatu nahi baduzu ere. Kontuz: baliteke txosten horrek prozesuak atzi dezakeen kontuzko informazio pertsonala izatea, eta datu horien barnean zuk idatzitakoak egon daitezke, besteak beste."</string> + <string name="dump_heap_system_text" msgid="3236094872980706024">"<xliff:g id="PROC">%1$s</xliff:g> prozesuak bere memoria-muga (<xliff:g id="SIZE">%2$s</xliff:g>) gainditu du. Memoria-iraulketaren txosten bat duzu erabilgarri, hura partekatu nahi baduzu ere. Kontuz: baliteke txosten horrek prozesuak atzi dezakeen kontuzko informazio pertsonala izatea eta datu horien barnean zuk idatzitakoak egotea, besteak beste."</string> + <string name="dump_heap_ready_text" msgid="1778041771455343067">"<xliff:g id="PROC">%1$s</xliff:g> prozesuaren memoria-iraulketaren txosten bat duzu erabilgarri, hura partekatu nahi baduzu ere. Kontuz: baliteke txosten horrek prozesuak atzi dezakeen kontuzko informazio pertsonala izatea eta datu horien barnean zuk idatzitakoak egotea, besteak beste."</string> <string name="sendText" msgid="5209874571959469142">"Aukeratu testurako ekintza"</string> <string name="volume_ringtone" msgid="6885421406845734650">"Tonu-jotzailearen bolumena"</string> <string name="volume_music" msgid="5421651157138628171">"Multimedia-edukiaren bolumena"</string> @@ -1272,7 +1272,7 @@ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> erabiltzen ari zinen, baina <xliff:g id="NEW_NETWORK">%2$s</xliff:g> erabiltzen ari zara orain"</string> <string-array name="network_switch_type_name"> <item msgid="3979506840912951943">"datu-konexioa"</item> - <item msgid="75483255295529161">"Wi-Fi"</item> + <item msgid="75483255295529161">"Wifia"</item> <item msgid="6862614801537202646">"Bluetooth-a"</item> <item msgid="5447331121797802871">"Ethernet"</item> <item msgid="8257233890381651999">"VPN"</item> @@ -1845,7 +1845,7 @@ <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Lanegunetako gaua"</string> <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Asteburua"</string> <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Gertaera"</string> - <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"Lo egitean"</string> + <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"Lo egiteko"</string> <string name="muted_by" msgid="5942954724562097128">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> soinu batzuk isilarazten ari da"</string> <string name="system_error_wipe_data" msgid="6608165524785354962">"Barneko arazo bat dago zure gailuan eta agian ezegonkor egongo da jatorrizko datuak berrezartzen dituzun arte."</string> <string name="system_error_manufacturer" msgid="8086872414744210668">"Barneko arazo bat dago zure gailuan. Xehetasunak jakiteko, jarri fabrikatzailearekin harremanetan."</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 11cf22a8dc16..50c71851ad74 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -301,7 +301,7 @@ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"Autoriser « <xliff:g id="APP_NAME">%1$s</xliff:g> » à accéder à vos activités physiques?"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"Appareil photo"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"prendre des photos et filmer des vidéos"</string> - <string name="permgrouprequest_camera" msgid="1299833592069671756">"Autoriser « <xliff:g id="APP_NAME">%1$s</xliff:g> » à prendre des photos et à filmer des vidéos?"</string> + <string name="permgrouprequest_camera" msgid="1299833592069671756">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à prendre des photos et à filmer des vidéos?"</string> <string name="permgrouplab_calllog" msgid="8798646184930388160">"Journaux d\'appels"</string> <string name="permgroupdesc_calllog" msgid="3006237336748283775">"lire et écrire le journal des appels téléphoniques"</string> <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à accéder à vos journaux d\'appels?"</string> @@ -1844,7 +1844,7 @@ <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Soirs de semaine"</string> <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Fin de semaine"</string> <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Événement"</string> - <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"Dormir"</string> + <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"Sommeil"</string> <string name="muted_by" msgid="5942954724562097128">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> désactive certains sons"</string> <string name="system_error_wipe_data" msgid="6608165524785354962">"Un problème interne est survenu avec votre appareil. Il se peut qu\'il soit instable jusqu\'à ce que vous le réinitialisiez à sa configuration d\'usine."</string> <string name="system_error_manufacturer" msgid="8086872414744210668">"Un problème interne est survenu avec votre appareil. Communiquez avec le fabricant pour obtenir plus de détails."</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 12660fb6b7c5..23e424e93d56 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -280,7 +280,7 @@ <string name="permgrouprequest_contacts" msgid="6032805601881764300">"Permettre à <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> d\'accéder à vos contacts ?"</string> <string name="permgrouplab_location" msgid="7275582855722310164">"Localisation"</string> <string name="permgroupdesc_location" msgid="1346617465127855033">"accéder à la position de l\'appareil"</string> - <string name="permgrouprequest_location" msgid="3788275734953323491">"Permettre à <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> d\'accéder à la position de cet appareil ?"</string> + <string name="permgrouprequest_location" msgid="3788275734953323491">"Permettre à l\'application <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> d\'accéder à la position de cet appareil ?"</string> <string name="permgrouprequestdetail_location" msgid="1347189607421252902">"L\'application n\'a accès à la position de l\'appareil que lorsqu\'elle est ouverte"</string> <string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à accéder <b>en permanence</b> à la position de cet appareil ?"</string> <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"L\'application peut actuellement accéder à la position uniquement pendant que vous l\'utilisez"</string> @@ -301,7 +301,7 @@ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"Autoriser <xliff:g id="APP_NAME">%1$s</xliff:g> à accéder à votre activité physique ?"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"Appareil photo"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"prendre des photos et enregistrer des vidéos"</string> - <string name="permgrouprequest_camera" msgid="1299833592069671756">"Permettre à <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> de prendre des photos et de filmer des vidéos ?"</string> + <string name="permgrouprequest_camera" msgid="1299833592069671756">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à prendre des photos et enregistrer des vidéos ?"</string> <string name="permgrouplab_calllog" msgid="8798646184930388160">"Journaux d\'appels"</string> <string name="permgroupdesc_calllog" msgid="3006237336748283775">"Lire et écrire les journaux d\'appels du téléphone"</string> <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Permettre à <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> d\'accéder aux journaux d\'appels de votre téléphone ?"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index d7a241ace193..393fcbe0fd62 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -1202,12 +1202,12 @@ <string name="new_app_action" msgid="6694851182870774403">"Abrir a aplicación <xliff:g id="NEW_APP">%1$s</xliff:g>"</string> <string name="new_app_description" msgid="5894852887817332322">"A aplicación <xliff:g id="OLD_APP">%1$s</xliff:g> pecharase sen gardar o contido"</string> <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> superou o límite de memoria"</string> - <string name="dump_heap_ready_notification" msgid="1162196579925048701">"O baleirado de montóns de <xliff:g id="PROC">%1$s</xliff:g> está listo"</string> - <string name="dump_heap_notification_detail" msgid="3993078784053054141">"Recompilouse un baleirado de montóns. Toca para compartilo."</string> - <string name="dump_heap_title" msgid="5864292264307651673">"Queres compartir o baleirado de montóns?"</string> - <string name="dump_heap_text" msgid="8546022920319781701">"O proceso <xliff:g id="PROC">%1$s</xliff:g> superou o seu límite de memoria de <xliff:g id="SIZE">%2$s</xliff:g>. Tes dispoñible un baleirado de montóns para compartir co seu programador. Ten coidado, xa que pode conter información persoal á que pode acceder a aplicación."</string> - <string name="dump_heap_system_text" msgid="3236094872980706024">"O proceso <xliff:g id="PROC">%1$s</xliff:g> superou o seu límite de memoria, <xliff:g id="SIZE">%2$s</xliff:g>. Tes dispoñible un baleirado de montóns para compartilo. Ten coidado, xa que quizais conteña información persoal confidencial á que se pode acceder durante o proceso e que pode incluír os datos que escribiches."</string> - <string name="dump_heap_ready_text" msgid="1778041771455343067">"Tes dispoñible un baleirado de montóns do proceso <xliff:g id="PROC">%1$s</xliff:g> para compartilo. Ten coidado, xa que é posible que conteña información persoal confidencial á que se pode acceder durante o proceso e que pode incluír os datos que escribiches."</string> + <string name="dump_heap_ready_notification" msgid="1162196579925048701">"O baleirado da zona de memoria dinámica de <xliff:g id="PROC">%1$s</xliff:g> está listo"</string> + <string name="dump_heap_notification_detail" msgid="3993078784053054141">"Recompilouse un baleirado da zona de memoria dinámica. Toca para compartilo."</string> + <string name="dump_heap_title" msgid="5864292264307651673">"Queres compartir o baleirado da zona de memoria dinámica?"</string> + <string name="dump_heap_text" msgid="8546022920319781701">"O proceso <xliff:g id="PROC">%1$s</xliff:g> superou o seu límite de memoria de <xliff:g id="SIZE">%2$s</xliff:g>. Tes dispoñible un baleirado da zona de memoria dinámica para compartir co seu programador. Ten coidado, xa que pode conter información persoal á que pode acceder a aplicación."</string> + <string name="dump_heap_system_text" msgid="3236094872980706024">"O proceso <xliff:g id="PROC">%1$s</xliff:g> superou o seu límite de memoria, <xliff:g id="SIZE">%2$s</xliff:g>. Tes dispoñible un baleirado da zona de memoria dinámica para compartilo. Ten coidado, xa que quizais conteña información persoal confidencial á que se pode acceder durante o proceso e que pode incluír os datos que escribiches."</string> + <string name="dump_heap_ready_text" msgid="1778041771455343067">"Tes dispoñible un baleirado da zona de memoria dinámica do proceso <xliff:g id="PROC">%1$s</xliff:g> para compartilo. Ten coidado, xa que é posible que conteña información persoal confidencial á que se pode acceder durante o proceso e que pode incluír os datos que escribiches."</string> <string name="sendText" msgid="5209874571959469142">"Seleccionar unha acción para o texto"</string> <string name="volume_ringtone" msgid="6885421406845734650">"Volume do timbre"</string> <string name="volume_music" msgid="5421651157138628171">"Volume dos elementos multimedia"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index d2b6fc9816c5..80206a3d95e0 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -519,8 +519,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"એપને તમારો ફોટો સંગ્રહ સંશોધિત કરવાની મંજૂરી આપે છે."</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"આપના મીડિયા સંગ્રહમાંથી સ્થાનો વાંચવા"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"એપને તમારા મીડિયા સંગ્રહમાંથી સ્થાનો વાંચવાની મંજૂરી આપે છે."</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"આ તમે જ છો તેનો પુરાવો આપો"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"બાયોમેટ્રિક હાર્ડવેર ઉપલબ્ધ નથી"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"પ્રમાણીકરણ રદ કર્યું"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"ઓળખાયેલ નથી"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 5933297a4b18..0e5123beb9bf 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -160,15 +160,15 @@ <string name="httpErrorAuth" msgid="1435065629438044534">"प्रमाणीकृत नहीं किया जा सका."</string> <string name="httpErrorProxyAuth" msgid="1788207010559081331">"प्रॉक्सी सर्वर द्वारा प्रमाणीकरण असफल था."</string> <string name="httpErrorConnect" msgid="8714273236364640549">"सर्वर से कनेक्ट नहीं किया जा सका."</string> - <string name="httpErrorIO" msgid="2340558197489302188">"सर्वर से संचार नहीं किया जा सका. बाद में पुन: प्रयास करें."</string> - <string name="httpErrorTimeout" msgid="4743403703762883954">"सर्वर से कनेक्शन का समय समाप्त हुआ."</string> + <string name="httpErrorIO" msgid="2340558197489302188">"सर्वर से संचार नहीं किया जा सका. बाद में फिर से प्रयास करें."</string> + <string name="httpErrorTimeout" msgid="4743403703762883954">"सर्वर से कनेक्शन का समय खत्म हुआ."</string> <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"पेज में कई ऐसे कई वेबलिंक हैं जो दूसरे सर्वर पर ले जाते हैं."</string> <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"प्रोटोकॉल समर्थित नहीं है."</string> <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"सुरक्षित कनेक्शन स्थापित नहीं किया जा सका."</string> <string name="httpErrorBadUrl" msgid="3636929722728881972">"यूआरएल गलत होने की वजह से पेज नहीं खोला जा सका."</string> <string name="httpErrorFile" msgid="2170788515052558676">"फ़ाइल पर नहीं पहुंचा जा सका."</string> <string name="httpErrorFileNotFound" msgid="6203856612042655084">"अनुरोधित फ़ाइल नहीं मिल सकी."</string> - <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"बहुत सारे अनुरोधों का संसाधन हो रहा है. बाद में पुन: प्रयास करें."</string> + <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"बहुत सारे अनुरोधों का संसाधन हो रहा है. बाद में फिर से प्रयास करें."</string> <string name="notification_title" msgid="8967710025036163822">"<xliff:g id="ACCOUNT">%1$s</xliff:g> के लिए प्रवेश गड़बड़ी"</string> <string name="contentServiceSync" msgid="8353523060269335667">"समन्वयन"</string> <string name="contentServiceSyncNotificationTitle" msgid="7036196943673524858">"सिंक नहीं किया जा सकता"</string> @@ -234,7 +234,7 @@ <skip /> <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> + <string name="bugreport_option_interactive_summary" msgid="229299488536107968">"ज़्यादातर परिस्थितियों में इसका उपयोग करें. यह आपको रिपोर्ट की प्रगति ट्रैक करने देता है, समस्या के बारे में अधिक विवरण डालने देता है और स्क्रीनशॉट लेने देता है. यह आपको ऐसे कम उपयोग किए गए अनुभाग मिटाने दे सकता है जिनकी रिपोर्ट करने में अधिक समय लगता है."</string> <string name="bugreport_option_full_title" msgid="6354382025840076439">"पूर्ण रिपोर्ट"</string> <string name="bugreport_option_full_summary" msgid="7210859858969115745">"जब आपका डिवाइस ठीक से काम नहीं कर रहा हो या बहुत धीमा हो या जब आपको रिपोर्ट के सभी भागों की ज़रूरत हो, तो सिस्टम से कम से कम रोक-टोक के लिए इस विकल्प का इस्तेमाल करें. यह आपको ज़्यादा जानकारी डालने या अतिरिक्त स्क्रीनशॉट लेने नहीं देता."</string> <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368"> @@ -283,7 +283,7 @@ <string name="permgrouprequest_contacts" msgid="6032805601881764300">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को अपने संपर्क देखने की अनुमति देना चाहते हैं?"</string> <string name="permgrouplab_location" msgid="7275582855722310164">"जगह"</string> <string name="permgroupdesc_location" msgid="1346617465127855033">"इस डिवाइस की जगह तक पहुंचने दें"</string> - <string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को इस डिवाइस की \'जगह की जानकारी\' ऐक्सेस करने की अनुमति देना चाहते हैं?"</string> + <string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को इस डिवाइस की \'जगह की जानकारी\' एक्सेस करने की अनुमति देना चाहते हैं?"</string> <!-- no translation found for permgrouprequestdetail_location (1347189607421252902) --> <skip /> <!-- no translation found for permgroupbackgroundrequest_location (5039063878675613235) --> @@ -366,12 +366,12 @@ <string name="permdesc_getTasks" msgid="7454215995847658102">"ऐप को माजूदा समय में और हाल ही में चल रही कार्रवाइयों के बारे में जानकारी निकालने देता है. इससे ऐप डिवाइस पर इस्तेमाल किए गए ऐप के बारे में जानकारी खोज सकता है."</string> <string name="permlab_manageProfileAndDeviceOwners" msgid="7918181259098220004">"प्रोफ़ाइल और डिवाइस स्वामियों को प्रबंधित करें"</string> <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"ऐप्स को प्रोफ़ाइल स्वामी और डिवाइस स्वामी सेट करने दें."</string> - <string name="permlab_reorderTasks" msgid="2018575526934422779">"चल रहे ऐप्स पुन: क्रमित करें"</string> + <string name="permlab_reorderTasks" msgid="2018575526934422779">"चल रहे ऐप्स फिर से क्रमित करें"</string> <string name="permdesc_reorderTasks" msgid="7734217754877439351">"ऐप्स को कार्यों को अग्रभूमि और पृष्ठभूमि पर ले जाने देता है. ऐप्स आपके इनपुट के बिना यह कर सकता है."</string> <string name="permlab_enableCarMode" msgid="5684504058192921098">"कार मोड चालू करें"</string> <string name="permdesc_enableCarMode" msgid="4853187425751419467">"ऐप्स को कार मोड सक्षम करने देता है."</string> <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"अन्य ऐप्स बंद करें"</string> - <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"ऐप्स को अन्य ऐप्स की पृष्ठभूमि प्रक्रियाओं को समाप्त करने देता है. यह अन्य ऐप्स का चलना रोक सकता है."</string> + <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"ऐप्स को अन्य ऐप्स की पृष्ठभूमि प्रक्रियाओं को खत्म करने देता है. यह अन्य ऐप्स का चलना रोक सकता है."</string> <string name="permlab_systemAlertWindow" msgid="7238805243128138690">"यह ऐप्लिकेशन दूसरे ऐप्लिकेशन के ऊपर दिखाई दे सकता है"</string> <string name="permdesc_systemAlertWindow" msgid="2393776099672266188">"यह ऐप्लिकेशन, दूसरे ऐप्लिकेशन के ऊपर या स्क्रीन के अन्य भागों पर दिखाई दे सकता है. इससे ऐप्लिकेशन के सामान्य उपयोग में बाधा आ सकती है और दूसरे ऐप्लिकेशन के दिखाई देने के तरीकों में बदलाव हो सकता है."</string> <string name="permlab_runInBackground" msgid="7365290743781858803">"बैकग्राउंड में चलता है"</string> @@ -389,13 +389,13 @@ <string name="permlab_writeSettings" msgid="2226195290955224730">"सिस्टम सेटिंग बदलें"</string> <string name="permdesc_writeSettings" msgid="7775723441558907181">"ऐप्स को सिस्टम सेटिंग डेटा संशोधित करने देता है. दुर्भावनापूर्ण ऐप्स आपके सिस्टम के कॉन्फ़िगरेशन को दूषित कर सकते हैं."</string> <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"प्रारंभ होने पर चलाएं"</string> - <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"ऐप्स को सिस्टम द्वारा बूटिंग पूर्ण करते ही स्वतः आरंभ करने देता है. इससे टैबलेट को आरंभ होने में अधिक समय लग सकता है और ऐप्स को निरंतर चलाकर संपूर्ण टैबलेट को धीमा करने देता है."</string> + <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"ऐप्स को सिस्टम द्वारा बूटिंग पूर्ण करते ही अपने आप आरंभ करने देता है. इससे टैबलेट को आरंभ होने में अधिक समय लग सकता है और ऐप्स को निरंतर चलाकर संपूर्ण टैबलेट को धीमा करने देता है."</string> <string name="permdesc_receiveBootCompleted" product="tv" msgid="4525890122209673621">"सिस्टम के चालू होते ही ऐप को अपने आप शुरू होने देती है. इससे टीवी को चालू होने में ज़्यादा समय लग सकता है और ऐप के लगातार चलते रहने से पूरा टैबलेट धीमा हो सकता है."</string> <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"सिस्टम के चालू होते ही ऐप को अपने आप शुरू होने देती है. इससे फ़ोन को चालू होने में ज़्यादा समय लग सकता है और ऐप के लगातार चलते रहने से पूरा फ़ोन धीमा हो सकता है."</string> <string name="permlab_broadcastSticky" msgid="7919126372606881614">"स्टिकी प्रसारण भेजें"</string> - <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"ऐप्स को स्टिकी प्रसारण भेजने देता है, जो प्रसारण समाप्त होने के बाद भी बने रहते हैं. अत्यधिक उपयोग, टैबलेट की बहुत अधिक मेमोरी का उपयोग करके उसे धीमा या अस्थिर कर सकता है."</string> + <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"ऐप्स को स्टिकी प्रसारण भेजने देता है, जो प्रसारण खत्म होने के बाद भी बने रहते हैं. अत्यधिक उपयोग, टैबलेट की बहुत अधिक मेमोरी का उपयोग करके उसे धीमा या अस्थिर कर सकता है."</string> <string name="permdesc_broadcastSticky" product="tv" msgid="6839285697565389467">"ऐप को स्िटकी प्रसारण भेजने देती है, जो प्रसारण बंद होने के बाद भी बने रहते हैं. अत्यधिक उपयोग से टीवी धीमा या अस्थिर हो सकता है जिससे वह बहुत सारी मेमोरी का उपयोग कर सकता है."</string> - <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"ऐप्स को स्टिकी प्रसारण भेजने देता है, जो प्रसारण समाप्त होने के बाद भी बने रहते हैं. अत्यधिक उपयोग, फ़ोन की बहुत अधिक मेमोरी का उपयोग करके उसे धीमा या अस्थिर कर सकता है."</string> + <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"ऐप्स को स्टिकी प्रसारण भेजने देता है, जो प्रसारण खत्म होने के बाद भी बने रहते हैं. अत्यधिक उपयोग, फ़ोन की बहुत अधिक मेमोरी का उपयोग करके उसे धीमा या अस्थिर कर सकता है."</string> <string name="permlab_readContacts" msgid="8348481131899886131">"अपने संपर्क पढ़ें"</string> <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"ऐप को आपके टैबलेट पर मौजूद आपके संपर्कों का डेटा पढ़ने देती है, जिसमें ये भी शामिल है कि आपने कुछ ख़ास लोगों से कितनी बार कॉल, ईमेल, या कुछ और तरीकों से बातचीत की. यह अनुमति ऐप को आपका संपर्क डेटा सेव करने देती है और धोखा देने वाले ऐप संपर्क डेटा को आपकी जानकारी के बिना शेयर कर सकते हैं."</string> <string name="permdesc_readContacts" product="tv" msgid="1839238344654834087">"ऐप को आपके टीवी पर मौजूद आपके संपर्कों का डेटा पढ़ने देती है, जिसमें ये भी शामिल है कि आपने कुछ ख़ास लोगों से कितनी बार कॉल, ईमेल, या कुछ और तरीकों से बातचीत की. यह अनुमति ऐप को आपका संपर्क डेटा सेव करने देती है और धोखा देने वाले ऐप संपर्क डेटा को आपकी जानकारी के बिना शेयर कर सकते हैं."</string> @@ -511,7 +511,7 @@ <string name="permlab_nfc" msgid="4423351274757876953">"नियर फ़ील्ड कम्यूनिकेशन नियंत्रित करें"</string> <string name="permdesc_nfc" msgid="7120611819401789907">"ऐप्स को नियर फ़ील्ड कम्यूनिकेशन (NFC) टैग, कार्ड, और रीडर के साथ संचार करने देता है."</string> <string name="permlab_disableKeyguard" msgid="3598496301486439258">"अपना स्क्रीन लॉक अक्षम करें"</string> - <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"ऐप्स को कीलॉक और कोई भी संबद्ध पासवर्ड सुरक्षा अक्षम करने देता है. उदाहरण के लिए, इनकमिंग फ़ोन कॉल प्राप्त करते समय फ़ोन, कीलॉक को अक्षम कर देता है, फिर कॉल समाप्त होने पर कीलॉक को पुन: सक्षम कर देता है."</string> + <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"ऐप्स को कीलॉक और कोई भी संबद्ध पासवर्ड सुरक्षा अक्षम करने देता है. उदाहरण के लिए, इनकमिंग फ़ोन कॉल प्राप्त करते समय फ़ोन, कीलॉक को अक्षम कर देता है, फिर कॉल खत्म होने पर कीलॉक को फिर से सक्षम कर देता है."</string> <!-- no translation found for permlab_requestPasswordComplexity (202650535669249674) --> <skip /> <!-- no translation found for permdesc_requestPasswordComplexity (4730994229754212347) --> @@ -530,15 +530,14 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"इससे ऐप्लिकेशन को आपके फ़ोटो संग्रह में बदलाव करने की मंज़ूरी दी जाती है."</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"अपने मीडिया संग्रह से जगह की जानकारी एक्सेस करने की अनुमति दें"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"इससे ऐप्लिकेशन को आपके मीडिया संग्रह से जगह की जानकारी एक्सेस करने की अनुमति दी जाती है."</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"अपनी पहचान की पुष्टि करें"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"बायोमेट्रिक हार्डवेयर उपलब्ध नहीं है"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"प्रमाणीकरण रद्द किया गया"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"पहचान नहीं हो पाई"</string> <string name="biometric_error_canceled" msgid="349665227864885880">"प्रमाणीकरण रद्द किया गया"</string> <string name="biometric_error_device_not_secured" msgid="6583143098363528349">"पिन, पैटर्न या पासवर्ड सेट नहीं है"</string> <string name="fingerprint_acquired_partial" msgid="735082772341716043">"आंशिक फ़िंगरप्रिंट की पहचान की गई. कृपया पुनः प्रयास करें."</string> - <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"फ़िंगरप्रिंट संसाधित नहीं हो सका. कृपया पुन: प्रयास करें."</string> + <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"फ़िंगरप्रिंट संसाधित नहीं हो सका. कृपया फिर से प्रयास करें."</string> <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"फ़िंगरप्रिंट सेंसर गंदा है. कृपया साफ़ करें और फिर कोशिश करें."</string> <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"उंगली बहुत तेज़ी से चलाई गई है. कृपया फिर से कोशिश करें."</string> <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"उंगली बहुत धीरे चलाई गई. कृपया फिर से कोशिश करें."</string> @@ -549,12 +548,12 @@ <string name="face_authenticated_confirmation_required" msgid="8778347003507633610">"चेहरे की पहचान की गई, कृपया पुष्टि बटन दबाएं"</string> <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"फ़िंगरप्रिंट हार्डवेयर उपलब्ध नहीं है."</string> <string name="fingerprint_error_no_space" msgid="1055819001126053318">"फ़िंगरप्रिंट को संग्रहित नहीं किया जा सका. कृपया कोई मौजूदा फ़िंगरप्रिंट निकालें."</string> - <string name="fingerprint_error_timeout" msgid="3927186043737732875">"फ़िंगरप्रिंट का समय समाप्त हो गया. पुनः प्रयास करें."</string> + <string name="fingerprint_error_timeout" msgid="3927186043737732875">"फ़िंगरप्रिंट का समय खत्म हो गया. पुनः प्रयास करें."</string> <string name="fingerprint_error_canceled" msgid="4402024612660774395">"फ़िंगरप्रिंट क्रियान्वयन रोक दिया गया."</string> <string name="fingerprint_error_user_canceled" msgid="7999639584615291494">"उपयोगकर्ता ने फिंगरप्रिंट की पुष्टि की कार्रवाई रद्द कर दी है."</string> - <string name="fingerprint_error_lockout" msgid="5536934748136933450">"बहुत अधिक प्रयास कर लिए गए हैं. बाद में पुन: प्रयास करें."</string> + <string name="fingerprint_error_lockout" msgid="5536934748136933450">"बहुत अधिक प्रयास कर लिए गए हैं. बाद में फिर से प्रयास करें."</string> <string name="fingerprint_error_lockout_permanent" msgid="5033251797919508137">"बहुत अधिक कोशिशें. फ़िंगरप्रिंट सेंसर अक्षम है."</string> - <string name="fingerprint_error_unable_to_process" msgid="6107816084103552441">"पुन: प्रयास करें."</string> + <string name="fingerprint_error_unable_to_process" msgid="6107816084103552441">"फिर से प्रयास करें."</string> <string name="fingerprint_error_no_fingerprints" msgid="7654382120628334248">"कोई फ़िंगरप्रिंट रजिस्टर नहीं किया गया है."</string> <string name="fingerprint_error_hw_not_present" msgid="409523969613176352">"इस डिवाइस में फ़िंगरप्रिंट सेंसर नहीं है."</string> <string name="fingerprint_name_template" msgid="5870957565512716938">"फ़िंगरप्रिंट <xliff:g id="FINGERID">%d</xliff:g>"</string> @@ -604,25 +603,18 @@ <skip /> <string-array name="face_acquired_vendor"> </string-array> - <!-- no translation found for face_error_hw_not_available (396883585636963908) --> - <skip /> + <string name="face_error_hw_not_available" msgid="396883585636963908">"चेहरा नहीं पहचान पा रहे. हार्डवेयर उपलब्ध नहीं है."</string> <!-- no translation found for face_error_timeout (2605673935810019129) --> <skip /> - <!-- no translation found for face_error_no_space (2712120617457553825) --> - <skip /> - <!-- no translation found for face_error_canceled (2768146728600802422) --> - <skip /> - <!-- no translation found for face_error_user_canceled (9003022830076496163) --> - <skip /> + <string name="face_error_no_space" msgid="2712120617457553825">"चेहरे का नया डेटा सेव नहीं हो सकता. कोई पुराना डेटा मिटाएं."</string> + <string name="face_error_canceled" msgid="2768146728600802422">"चेहरा पहचानने की कार्रवाई रद्द की गई"</string> + <string name="face_error_user_canceled" msgid="9003022830076496163">"उपयोगकर्ता ने \'चेहरे की पहचान\' रद्द कर दी."</string> <string name="face_error_lockout" msgid="3407426963155388504">"कई बार कोशिश की गई. बाद में कोशिश करें."</string> - <!-- no translation found for face_error_lockout_permanent (3485837851962070925) --> - <skip /> + <string name="face_error_lockout_permanent" msgid="3485837851962070925">"कई बार कोशिश की जा चुकी है. \'चेहरे की पहचान\' बंद कर दी गई."</string> <!-- no translation found for face_error_unable_to_process (4940944939691171539) --> <skip /> - <!-- no translation found for face_error_not_enrolled (2600952202843125796) --> - <skip /> - <!-- no translation found for face_error_hw_not_present (1317845121210260372) --> - <skip /> + <string name="face_error_not_enrolled" msgid="2600952202843125796">"आपने डिवाइस पर \'चेहरे की पहचान\' सेट नहीं की है."</string> + <string name="face_error_hw_not_present" msgid="1317845121210260372">"इस डिवाइस पर \'चेहरे की पहचान\' सुविधा काम नहीं करती."</string> <string name="face_name_template" msgid="7004562145809595384">"चेहरा <xliff:g id="FACEID">%d</xliff:g>"</string> <string-array name="face_error_vendor"> </string-array> @@ -687,7 +679,7 @@ <string name="policydesc_limitPassword" msgid="2502021457917874968">"स्क्रीन लॉक पासवर्ड और पिन की लंबाई और उनमें स्वीकृत वर्णों को नियंत्रित करना."</string> <string name="policylab_watchLogin" msgid="5091404125971980158">"स्क्रीन अनलॉक करने के की कोशिशों पर नज़र रखना"</string> <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"स्क्रीन को अनलॉक करते समय गलत लिखे गए पासवर्ड की संख्या पर निगरानी करें, और बहुत अधिक बार गलत पासवर्ड लिखे जाने पर टैबलेट लॉक करें या टैबलेट का संपूर्ण डेटा मिटाएं."</string> - <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"स्क्रीन को अनलॉक करते समय गलत तरीके से लिखे गए पासवर्ड पर नज़र रखें और यदि बहुत अधिक गलत पासवर्ड लिखे जाते हैं तो टीवी को लॉक करें या टीवी का सभी डेटा मिटा दें."</string> + <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"स्क्रीन को अनलॉक करते समय गलत तरीके से लिखे गए पासवर्ड पर नज़र रखें और अगर बहुत अधिक गलत पासवर्ड लिखे जाते हैं तो टीवी को लॉक करें या टीवी का सभी डेटा मिटा दें."</string> <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"स्क्रीन को अनलॉक करते समय जितनी बार गलत पासवर्ड लिखा गया है, उसकी संख्या पर नज़र रखना और अगर बहुत बार गलत पासवर्ड डाले गए हैं, तो फ़ोन को लॉक कर देना या फ़ोन का सारा डेटा मिटा देना."</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"स्क्रीन का लॉक खोलते समय गलत तरीके से लिखे गए पासवर्ड पर नज़र रखें, और अगर बार-बार अधिक पासवर्ड लिखे जाते हैं तो टैबलेट को लॉक करें या इस उपयोगकर्ता का सभी डेटा मिटा दें."</string> <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"स्क्रीन का लॉक खोलते समय गलत तरीके से लिखे गए पासवर्ड पर नज़र रखें, और अगर बार-बार गलत पासवर्ड लिखा जाता है तो टीवी को लॉक करें या इस उपयोगकर्ता का सभी डेटा मिटा दें."</string> @@ -765,7 +757,7 @@ <string name="phoneTypeFaxHome" msgid="2067265972322971467">"घर का फ़ैक्स"</string> <string name="phoneTypePager" msgid="7582359955394921732">"पेजर"</string> <string name="phoneTypeOther" msgid="1544425847868765990">"अन्य"</string> - <string name="phoneTypeCallback" msgid="2712175203065678206">"पुन: कॉल करें"</string> + <string name="phoneTypeCallback" msgid="2712175203065678206">"फिर से कॉल करें"</string> <string name="phoneTypeCar" msgid="8738360689616716982">"कार"</string> <string name="phoneTypeCompanyMain" msgid="540434356461478916">"कंपनी का मुख्य"</string> <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string> @@ -871,19 +863,19 @@ <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"कृपया उपयोग के लिए गाइड देखें या ग्राहक सहायता से संपर्क करें."</string> <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"सिम कार्ड लॉक किया गया है."</string> <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"सिम कार्ड अनलॉक कर रहा है…"</string> - <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"आपने अपना अनलॉक आकार <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत बनाया है. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में पुन: प्रयास करें."</string> - <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"आपने अपना पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से लिखा है. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"आपने अपना अनलॉक आकार <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत बनाया है. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> + <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"आपने अपना पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से लिखा है. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"आपने अपना पिन <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से लिखा है. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> - <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"आपने अपना अनलॉक आकार <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत बनाया है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने Google साइन-इन का उपयोग करके आपके टैबलेट को अनलॉक करने को कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में पुन: प्रयास करें."</string> - <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"आपने अपना अनलॉक पैटन <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से बनाया है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने टीवी को अपने Google साइन-इन का उपयोग करके अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में पुन: प्रयास करें."</string> - <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"आपने अपना अनलॉक आकार <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत बनाया है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने Google साइन-इन का उपयोग करके आपके फ़ोन को अनलॉक करने को कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"आपने अपना अनलॉक आकार <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत बनाया है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने Google साइन-इन का उपयोग करके आपके टैबलेट को अनलॉक करने को कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> + <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"आपने अपना अनलॉक पैटन <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से बनाया है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने टीवी को अपने Google साइन-इन का उपयोग करके अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> + <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"आपने अपना अनलॉक आकार <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत बनाया है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने Google साइन-इन का उपयोग करके आपके फ़ोन को अनलॉक करने को कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"आप टैबलेट का लॉक खोलने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश कर चुके हैं. <xliff:g id="NUMBER_1">%2$d</xliff:g> बार और गलत कोशिश करने पर, टैबलेट फ़ैक्ट्री डिफ़ॉल्ट पर रीसेट हो जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string> <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="950408382418270260">"आपने टीवी का लॉक खोलने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश की है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और बार गलत कोशिश करने पर, टीवी को फ़ैक्ट्री डिफ़ॉल्ट पर रीसेट कर दिया जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string> <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"आप फ़ोन का लॉक खोलने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश कर चुके हैं. <xliff:g id="NUMBER_1">%2$d</xliff:g> बार और गलत कोशिश करने पर, फ़ोन फ़ैक्ट्री डिफ़ॉल्ट पर रीसेट हो जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string> <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"आप टैबलेट को गलत तरीके से <xliff:g id="NUMBER">%d</xliff:g> बार अनलॉक करने का प्रयास कर चुके हैं. टैबलेट अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string> <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="3195755534096192191">"आपने टीवी को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से प्रयास किया है. अब टीवी को फ़ैक्टरी डिफ़ॉल्ट पर रीसेट कर दिया जाएगा."</string> <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"आप फ़ोन को गलत तरीके से <xliff:g id="NUMBER">%d</xliff:g> बार अनलॉक करने का प्रयास कर चुके हैं. फ़ोन अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string> - <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> सेकंड में फिर से प्रयास करें."</string> <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"आकार भूल गए?"</string> <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"खाता अनलॉक"</string> <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"बहुत अधिक आकार प्रयास"</string> @@ -914,7 +906,7 @@ <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"कैमरा"</string> <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"मीडिया नियंत्रण"</string> <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"विजेट फिर से क्रमित करना प्रारंभ."</string> - <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"विजेट फिर से क्रमित करना समाप्त."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"विजेट फिर से क्रमित करना खत्म."</string> <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"विजेट <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> को हटा दिया गया."</string> <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"अनलॉक क्षेत्र का विस्तार करें."</string> <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"स्लाइड अनलॉक."</string> @@ -1193,7 +1185,7 @@ <string name="aerr_restart" msgid="7581308074153624475">"ऐप्लिकेशन फिर से खोलें"</string> <string name="aerr_report" msgid="5371800241488400617">"फ़ीडबैक भेजें"</string> <string name="aerr_close" msgid="2991640326563991340">"बंद करें"</string> - <string name="aerr_mute" msgid="1974781923723235953">"डिवाइस पुन: प्रारंभ होने तक म्यूट करें"</string> + <string name="aerr_mute" msgid="1974781923723235953">"डिवाइस फिर से प्रारंभ होने तक म्यूट करें"</string> <string name="aerr_wait" msgid="3199956902437040261">"प्रतीक्षा करें"</string> <string name="aerr_close_app" msgid="3269334853724920302">"ऐप बंद करें"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1246,10 +1238,8 @@ <string name="dump_heap_title" msgid="5864292264307651673">"हीप डंप शेयर करें?"</string> <!-- no translation found for dump_heap_text (8546022920319781701) --> <skip /> - <!-- no translation found for dump_heap_system_text (3236094872980706024) --> - <skip /> - <!-- no translation found for dump_heap_ready_text (1778041771455343067) --> - <skip /> + <string name="dump_heap_system_text" msgid="3236094872980706024">"<xliff:g id="PROC">%1$s</xliff:g> प्रक्रिया अपनी <xliff:g id="SIZE">%2$s</xliff:g> की मेमोरी सीमा पार कर चुकी है. एक हीप डंप शेयर किए जाने के लिए तैयार है. सावधान रहें: इस हीप डंप में कोई ऐसी संवेदनशील निजी जानकारी भी शामिल हो सकती है जिसका एक्सेस प्रोसेस के पास हो. इसमें आपके टाइप किए गए शब्दों का डेटा भी शामिल है."</string> + <string name="dump_heap_ready_text" msgid="1778041771455343067">"<xliff:g id="PROC">%1$s</xliff:g> प्रक्रिया का हीप डंप शेयर किए जाने के लिए तैयार है. सावधान रहें: इस हीप डंप में कोई ऐसी संवेदनशील निजी जानकारी शामिल हो सकती है जिसका एक्सेस प्रोसेस के पास हो. इसमें आपके टाइप किए गए शब्दों का डेटा भी शामिल है."</string> <string name="sendText" msgid="5209874571959469142">"मैसेज करने के लिए कोई कार्रवाई चुनें"</string> <string name="volume_ringtone" msgid="6885421406845734650">"रिंगर वॉल्यूम"</string> <string name="volume_music" msgid="5421651157138628171">"मीडिया वॉल्यूम"</string> @@ -1361,7 +1351,7 @@ <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"हमेशा अनुमति दें"</string> <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"कभी भी अनुमति न दें"</string> <string name="sim_removed_title" msgid="6227712319223226185">"सिमकार्ड निकाला गया"</string> - <string name="sim_removed_message" msgid="2333164559970958645">"मान्य सिम कार्ड डालकर पुन: प्रारंभ करने तक मोबाइल नेटवर्क अनुपलब्ध रहेगा."</string> + <string name="sim_removed_message" msgid="2333164559970958645">"मान्य सिम कार्ड डालकर फिर से प्रारंभ करने तक मोबाइल नेटवर्क अनुपलब्ध रहेगा."</string> <string name="sim_done_button" msgid="827949989369963775">"हो गया"</string> <string name="sim_added_title" msgid="3719670512889674693">"सिम कार्ड जोड़ा गया"</string> <string name="sim_added_message" msgid="6599945301141050216">"मोबाइल नेटवर्क की पहुंच पाने लिए अपना डिवाइस फिर से चालू करें."</string> @@ -1411,7 +1401,7 @@ <string name="decline_remote_bugreport_action" msgid="6230987241608770062">"अस्वीकार करें"</string> <string name="select_input_method" msgid="4653387336791222978">"इनपुट पद्धति चुनें"</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> @@ -1655,10 +1645,8 @@ <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"ओवरले #<xliff:g id="ID">%1$d</xliff:g>"</string> <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string> <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", सुरक्षित"</string> - <!-- no translation found for activity_starter_block_bg_activity_starts_permissive (6995473033438879646) --> - <skip /> - <!-- no translation found for activity_starter_block_bg_activity_starts_enforcing (3317816771072146229) --> - <skip /> + <string name="activity_starter_block_bg_activity_starts_permissive" msgid="6995473033438879646">"आने वाले Q बिल्ड में <xliff:g id="PACKAGENAME">%1$s</xliff:g> के बैकग्राउंड में गतिविधि शुरू करने पर रोक लगा दी जाएगी. इस बारे में जानने के लिए g.co/dev/bgblock पर जाएं."</string> + <string name="activity_starter_block_bg_activity_starts_enforcing" msgid="3317816771072146229">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> के बैकग्राउंड में गतिविधि शुरू करने पर रोक लगा दी गई है. इस बारे में जानने के लिए g.co/dev/bgblock पर जाएं."</string> <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"आकार भूल गए"</string> <string name="kg_wrong_pattern" msgid="1850806070801358830">"गलत पैटर्न डाला गया है"</string> <string name="kg_wrong_password" msgid="2333281762128113157">"गलत पासवर्ड"</string> @@ -1678,7 +1666,7 @@ <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"गलत PIN कोड."</string> <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ऐसा PIN लिखें, जो 4 से 8 अंकों का हो."</string> <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK कोड 8 अंकों का होना चाहिए."</string> - <string name="kg_invalid_puk" msgid="3638289409676051243">"सही PUK कोड पुन: डालें. बार-बार प्रयास करने से सिम स्थायी रूप से अक्षम हो जाएगी."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"सही PUK कोड फिर से डालें. बार-बार प्रयास करने से सिम स्थायी रूप से अक्षम हो जाएगी."</string> <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"पिन कोड का मिलान नहीं होता"</string> <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"बहुत अधिक आकार प्रयास"</string> <string name="kg_login_instructions" msgid="1100551261265506448">"अनलॉक करने के लिए, अपने Google खाते से साइन इन करें."</string> @@ -1688,18 +1676,18 @@ <string name="kg_login_invalid_input" msgid="5754664119319872197">"उपयोगकर्ता नाम या पासवर्ड गलत है"</string> <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"अपना उपयोगकर्ता नाम या पासवर्ड भूल गए?\n "<b>"google.com/accounts/recovery"</b>" पर जाएं."</string> <string name="kg_login_checking_password" msgid="1052685197710252395">"खाते की जाँच की जा रही है…"</string> - <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"आप अपना PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से लिख चुके हैं. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में पुन: प्रयास करें."</string> - <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"आप अपना पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से लिख चुके हैं. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में पुन: प्रयास करें."</string> - <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"आपने अपना अनलॉक आकार <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से आरेखित किया है. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"आप अपना PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से लिख चुके हैं. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"आप अपना पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से लिख चुके हैं. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"आपने अपना अनलॉक आकार <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से आरेखित किया है. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"आप टैबलेट का लॉक खोलने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश कर चुके हैं. <xliff:g id="NUMBER_1">%2$d</xliff:g> बार और गलत कोशिश करने पर, टैबलेट फ़ैक्ट्री डिफ़ॉल्ट पर रीसेट हो जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string> <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="5621231220154419413">"आप टीवी का लॉक खोलने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश कर चुके हैं. <xliff:g id="NUMBER_1">%2$d</xliff:g> बार और गलत कोशिश करने पर टीवी को फ़ैक्ट्री डिफ़ॉल्ट पर रीसेट कर दिया जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string> <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"आप फ़ोन का लॉक खोलने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश कर चुके हैं. <xliff:g id="NUMBER_1">%2$d</xliff:g> बार और गलत कोशिश करने पर फ़ोन फ़ैक्ट्री डिफ़ॉल्ट पर रीसेट हो जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string> <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"आप टैबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. टैबलेट अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string> <string name="kg_failed_attempts_now_wiping" product="tv" msgid="4987878286750741463">"आपने टीवी को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से प्रयास किया है. अब टीवी को फ़ैक्टरी डिफ़ॉल्ट पर रीसेट कर दिया जाएगा."</string> <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"आप फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. फ़ोन अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string> - <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"आपने अपने अनलॉक आकार को <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने टैबलेट को किसी ईमेल खाते के उपयोग से अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"आपने अपने अनलॉक आकार को <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने टैबलेट को किसी ईमेल खाते के उपयोग से अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4224651132862313471">"आपने अपने लॉक खोलने के पैटर्न को <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से ड्रॉ किया है. अगर आपने <xliff:g id="NUMBER_1">%2$d</xliff:g> बार और गलत ड्रॉ किया, तो आपको किसी ईमेल खाते के ज़रिये अपने टीवी को अनलॉक करने को कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में फिर से कोशिश करें."</string> - <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"आपने अपने अनलॉक आकार को <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने फ़ोन को किसी ईमेल खाते का उपयोग करके अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"आपने अपने अनलॉक आकार को <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने फ़ोन को किसी ईमेल खाते का उपयोग करके अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में फिर से प्रयास करें."</string> <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"निकालें"</string> <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"वॉल्यूम को सुझाए गए स्तर से ऊपर बढ़ाएं?\n\nअत्यधिक वॉल्यूम पर अधिक समय तक सुनने से आपकी सुनने की क्षमता को नुकसान हो सकता है."</string> @@ -1822,8 +1810,8 @@ <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN मेल नहीं खाते हैं. फिर से कोशिश करें."</string> <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN बहुत छोटा है. कम से कम 4 अंकों का होना चाहिए."</string> <plurals name="restr_pin_countdown" formatted="false" msgid="9061246974881224688"> - <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> सेकंड में पुन: प्रयास करें</item> - <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> सेकंड में पुन: प्रयास करें</item> + <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> सेकंड में फिर से प्रयास करें</item> + <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> सेकंड में फिर से प्रयास करें</item> </plurals> <string name="restr_pin_try_later" msgid="973144472490532377">"बाद में फिर से प्रयास करें"</string> <string name="immersive_cling_title" msgid="8394201622932303336">"आप पूरे स्क्रीन पर देख रहे हैं"</string> @@ -1958,7 +1946,7 @@ <string name="app_info" msgid="6856026610594615344">"ऐप्लिकेशन की जानकारी"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="demo_starting_message" msgid="5268556852031489931">"डेमो प्रारंभ हो रहा है…"</string> - <string name="demo_restarting_message" msgid="952118052531642451">"डिवाइस पुन: रीसेट कर रहा है…"</string> + <string name="demo_restarting_message" msgid="952118052531642451">"डिवाइस फिर से रीसेट कर रहा है…"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"अक्षम <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"कॉन्फ़्रेंस कॉल"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"टूलटिप"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 4edf36e08973..296278577a3c 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -140,7 +140,7 @@ <string name="wfcSpnFormat_wifi" msgid="1892673884655959773">"Wi-Fi"</string> <string name="wfcSpnFormat_wifi_calling_wo_hyphen" msgid="1336669776254502831">"Chiamate Wi-Fi"</string> <string name="wfcSpnFormat_vowifi" msgid="1765176406171272629">"VoWifi"</string> - <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Non attiva"</string> + <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Off"</string> <string name="wfc_mode_wifi_preferred_summary" msgid="7335489823608689868">"Chiamata tramite Wi-Fi"</string> <string name="wfc_mode_cellular_preferred_summary" msgid="7081742743152286290">"Chiamata su rete mobile"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Solo Wi-Fi"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index c0fa639c30f7..1f1df8f453ad 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -307,7 +307,7 @@ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"האם לאפשר לאפליקציה <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> גישה לפעילות הגופנית שלך?"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"מצלמה"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"צילום תמונות והקלטת וידאו"</string> - <string name="permgrouprequest_camera" msgid="1299833592069671756">"לתת לאפליקציה <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> הרשאה לצלם תמונות וסרטונים?"</string> + <string name="permgrouprequest_camera" msgid="1299833592069671756">"לאשר לאפליקציה של <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> לצלם תמונות וסרטונים?"</string> <string name="permgrouplab_calllog" msgid="8798646184930388160">"יומני שיחות"</string> <string name="permgroupdesc_calllog" msgid="3006237336748283775">"קריאה וכתיבה של יומן השיחות של הטלפון"</string> <string name="permgrouprequest_calllog" msgid="8487355309583773267">"לתת לאפליקציה <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> הרשאת גישה ליומני השיחות של הטלפון?"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 17169e19fcd1..50bbca4fdd4b 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -301,7 +301,7 @@ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"運動データへのアクセスを <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可しますか?"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"カメラ"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"写真と動画の撮影"</string> - <string name="permgrouprequest_camera" msgid="1299833592069671756">"写真と動画の撮影を <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可しますか?"</string> + <string name="permgrouprequest_camera" msgid="1299833592069671756">"写真と動画の撮影を「<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>」に許可しますか?"</string> <string name="permgrouplab_calllog" msgid="8798646184930388160">"通話履歴"</string> <string name="permgroupdesc_calllog" msgid="3006237336748283775">"通話履歴の読み取りと書き込み"</string> <string name="permgrouprequest_calllog" msgid="8487355309583773267">"通話履歴へのアクセスを <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可しますか?"</string> @@ -545,7 +545,7 @@ <string name="fingerprint_error_unable_to_process" msgid="6107816084103552441">"もう一度お試しください。"</string> <string name="fingerprint_error_no_fingerprints" msgid="7654382120628334248">"指紋が登録されていません。"</string> <string name="fingerprint_error_hw_not_present" msgid="409523969613176352">"このデバイスには指紋認証センサーがありません。"</string> - <string name="fingerprint_name_template" msgid="5870957565512716938">"指紋<xliff:g id="FINGERID">%d</xliff:g>"</string> + <string name="fingerprint_name_template" msgid="5870957565512716938">"指紋 <xliff:g id="FINGERID">%d</xliff:g>"</string> <string-array name="fingerprint_error_vendor"> </string-array> <string name="fingerprint_icon_content_description" msgid="2340202869968465936">"指紋アイコン"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index ac8a6dfddf69..d465a52792f0 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -1843,7 +1843,7 @@ <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ავარიული პაუზა"</string> <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_events_name" msgid="8158334939013085363">"მოვლენისას"</string> <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"ძილისას"</string> <string name="muted_by" msgid="5942954724562097128">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ზოგიერთ ხმას ადუმებს"</string> <string name="system_error_wipe_data" msgid="6608165524785354962">"ფიქსირდება თქვენი მ ოწყობილობის შიდა პრობლემა და შეიძლება არასტაბილური იყოს, სანამ ქარხნულ მონაცემების არ განაახლებთ."</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 74488b5fbfc9..aa3c1a880c8c 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -283,7 +283,7 @@ <string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасына құрылғының орналасқан жері туралы мәліметтерді пайдалануға рұқсат берілсін бе?"</string> <string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Қолданбаны пайдалану кезінде ғана оған геодеректеріңізді көруге рұқсат етіледі."</string> <string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасына құрылғының геодеректері <b>үнемі</b> көрсетіліп тұрсын ба?"</string> - <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Қолданба геодеректерді тек жұмыс кезінде ғана пайдалана алады"</string> + <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Қолданба геодеректерді тек жұмыс кезінде ғана пайдалана алады."</string> <string name="permgrouplab_calendar" msgid="5863508437783683902">"Күнтізбе"</string> <string name="permgroupdesc_calendar" msgid="3889615280211184106">"күнтізбеге кіру"</string> <string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасына күнтізбеге кіруге рұқсат берілсін бе?"</string> @@ -553,7 +553,7 @@ <string name="permdesc_manageFace" msgid="8919637120670185330">"Қолданбаға пайдаланатын бет үлгілерін енгізу және жою әдістерін шақыруға мүмкіндік береді."</string> <string name="permlab_useFaceAuthentication" msgid="8996134460546804535">"бетті тану жабдығын пайдалану"</string> <string name="permdesc_useFaceAuthentication" msgid="5011118722951833089">"Қолданбаға бетті тану жабдығын қолдануға рұқсат етеді"</string> - <string name="face_acquired_insufficient" msgid="2767330364802375742">"Дәл бет деректері алынбады. Әрекетті қайталаңыз."</string> + <string name="face_acquired_insufficient" msgid="2767330364802375742">"Бет деректері дұрыс алынбады. Әрекетті қайталаңыз."</string> <string name="face_acquired_too_bright" msgid="5005650874582450967">"Тым ашық. Күңгірттеу жарық керек."</string> <string name="face_acquired_too_dark" msgid="1966194696381394616">"Тым қараңғы. Молырақ жарық керек."</string> <string name="face_acquired_too_close" msgid="1401011882624272753">"Телефонды алшақ ұстаңыз."</string> @@ -576,7 +576,7 @@ <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="396883585636963908">"Бетті тану мүмкін емес. Жабдық қолжетімді емес."</string> - <string name="face_error_timeout" msgid="2605673935810019129">"Бет тануды күту уақыты бітті. Әрекетті қайталаңыз."</string> + <string name="face_error_timeout" msgid="2605673935810019129">"Бетті тану уақыты бітті. Әрекетті қайталаңыз."</string> <string name="face_error_no_space" msgid="2712120617457553825">"Жаңа бетті сақтау мүмкін емес. Алдымен ескісін жойыңыз."</string> <string name="face_error_canceled" msgid="2768146728600802422">"Бетті танудан бас тартылды."</string> <string name="face_error_user_canceled" msgid="9003022830076496163">"Пайдаланушы бетті тану әрекетінен бас тартты."</string> @@ -1210,7 +1210,7 @@ <string name="dump_heap_ready_text" msgid="1778041771455343067">"<xliff:g id="PROC">%1$s</xliff:g> процесінің дамп файлы бөлісуге дайын. Бұл дамп файлында процесс кезінде пайдаланылған кез келген құпия жеке ақпарат (соның ішінде сіз енгізген деректер) болуы мүмкін екенін ескеріңіз."</string> <string name="sendText" msgid="5209874571959469142">"Мәтін үшін әрекет таңдау"</string> <string name="volume_ringtone" msgid="6885421406845734650">"Қоңырау шырылының қаттылығы"</string> - <string name="volume_music" msgid="5421651157138628171">"Meдиа дыбысының қаттылығы"</string> + <string name="volume_music" msgid="5421651157138628171">"Mультимeдиа дыбыс деңгейі"</string> <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Bluetooth арқылы ойнату"</string> <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Үнсіз қоңырау әуенін орнату"</string> <string name="volume_call" msgid="3941680041282788711">"Келетін қоңырау дыбысының қаттылығы"</string> @@ -1220,8 +1220,8 @@ <string name="volume_unknown" msgid="1400219669770445902">"Дыбыс қаттылығы"</string> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth дыбысының қаттылығы"</string> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Қоңырау әуенінің дыбыс қаттылығы"</string> - <string name="volume_icon_description_incall" msgid="8890073218154543397">"Қоңырау дыбысының қаттылығы"</string> - <string name="volume_icon_description_media" msgid="4217311719665194215">"Meдиа дыбысының қаттылығы"</string> + <string name="volume_icon_description_incall" msgid="8890073218154543397">"Қоңыраудағы дыбыс деңгейі"</string> + <string name="volume_icon_description_media" msgid="4217311719665194215">"Mультимeдиа дыбыс деңгейі"</string> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Хабар дыбысының қаттылығы"</string> <string name="ringtone_default" msgid="3789758980357696936">"Әдепкі рингтон"</string> <string name="ringtone_default_with_actual" msgid="1767304850491060581">"Әдепкі (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 9e2f718fe4d6..8c4981148045 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -578,7 +578,7 @@ <string name="face_error_hw_not_available" msgid="396883585636963908">"មិនអាចផ្ទៀងផ្ទាត់មុខបានទេ។ មិនមានហាតវែរទេ។"</string> <string name="face_error_timeout" msgid="2605673935810019129">"ការសម្គាល់មុខបានអស់ម៉ោង។ សូមព្យាយាមម្ដងទៀត។"</string> <string name="face_error_no_space" msgid="2712120617457553825">"មិនអាចផ្ទុកទិន្នន័យទម្រង់មុខថ្មីបានទេ។ សូមលុបទិន្នន័យទម្រង់មុខចាស់ជាមុនសិន។"</string> - <string name="face_error_canceled" msgid="2768146728600802422">"បានបោះបង់ប្រតិបត្តិការចាប់ទម្រង់មុខ។"</string> + <string name="face_error_canceled" msgid="2768146728600802422">"បានបោះបង់ប្រតិបត្តិការចាប់ទម្រង់មុខ"</string> <string name="face_error_user_canceled" msgid="9003022830076496163">"ការផ្ទៀងផ្ទាត់មុខត្រូវបានបោះបង់ដោយអ្នកប្រើប្រាស់"</string> <string name="face_error_lockout" msgid="3407426963155388504">"ព្យាយាមចូលច្រើនពេកហើយ។ សូមព្យាយាមម្តងទៀតពេលក្រោយ។"</string> <string name="face_error_lockout_permanent" msgid="3485837851962070925">"ព្យាយាមចូលច្រើនពេក។ បានបិទការផ្ទៀងផ្ទាត់មុខ។"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index 52e8bc700bd1..c0f0f44c415b 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -519,8 +519,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"ನಿಮ್ಮ ಫೋಟೋ ಸಂಗ್ರಹಣೆಯನ್ನು ಮಾರ್ಪಡಿಸಲು ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"ನಿಮ್ಮ ಮೀಡಿಯಾ ಸಂಗ್ರಹಣೆಯಿಂದ ಸ್ಥಳಗಳನ್ನು ಓದಿ"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"ನಿಮ್ಮ ಮೀಡಿಯಾ ಸಂಗ್ರಹಣೆಯಿಂದ ಸ್ಥಳಗಳನ್ನು ಓದಲು ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"ಇದು ನೀವೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"ಬಯೋಮೆಟ್ರಿಕ್ ಹಾರ್ಡ್ವೇರ್ ಲಭ್ಯವಿಲ್ಲ"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"ಪ್ರಮಾಣೀಕರಣವನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string> @@ -528,7 +527,7 @@ <string name="biometric_error_device_not_secured" msgid="6583143098363528349">"ಪಿನ್, ಪ್ಯಾಟರ್ನ್ ಅಥವಾ ಪಾಸ್ವರ್ಡ್ ಸೆಟ್ ಮಾಡಿಲ್ಲ"</string> <string name="fingerprint_acquired_partial" msgid="735082772341716043">"ಭಾಗಶಃ ಬೆರಳಚ್ಚು ಪತ್ತೆಯಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string> <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ಬೆರಳಚ್ಚು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string> - <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ಬೆರಳಚ್ಚು ಸೆನ್ಸಾರ್ ಕೊಳೆಯಾಗಿದೆ. ದಯವಿಟ್ಟು ಅದನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string> + <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ಬೆರಳಚ್ಚು ಸೆನ್ಸರ್ ಮಲಿನಗೊಂಡಿದೆ. ದಯವಿಟ್ಟು ಅದನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string> <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"ಬೆರಳನ್ನು ಅತಿ ವೇಗವಾಗಿ ಸರಿಸಲಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string> <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"ಬೆರಳನ್ನು ತುಂಬಾ ನಿಧಾನವಾಗಿ ಸರಿಸಲಾಗಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string> <string-array name="fingerprint_acquired_vendor"> @@ -1206,7 +1205,7 @@ <string name="dump_heap_ready_notification" msgid="1162196579925048701">"<xliff:g id="PROC">%1$s</xliff:g> ಹೀಪ್ ಡಂಪ್ ಸಿದ್ಧವಾಗಿದೆ"</string> <string name="dump_heap_notification_detail" msgid="3993078784053054141">"ಹೀಪ್ ಡಂಪ್ ಅನ್ನು ಸಂಗ್ರಹಿಸಲಾಗಿದೆ; ಹಂಚಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="dump_heap_title" msgid="5864292264307651673">"ಹೀಪ್ ಡಂಪ್ ಹಂಚಿಕೊಳ್ಳುವುದೇ?"</string> - <string name="dump_heap_text" msgid="8546022920319781701">"<xliff:g id="PROC">%1$s</xliff:g> ಪ್ರಕ್ರಿಯೆಯು ತನ್ನ <xliff:g id="SIZE">%2$s</xliff:g> ಮೆಮೊರಿ ಮಿತಿಯನ್ನು ಮೀರಿದೆ. ಅದರ ಡೆವಲಪರ್ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲು ಹಂಚಿಕೊಳ್ಳಲು ನಿಮಗಾಗಿ ಹೀಪ್ ಡಂಪ್ ಲಭ್ಯವಿದೆ. ಎಚ್ಚರಿಕೆ: ಈ ಹೀಪ್ ಡಂಪ್, ಪ್ರಕ್ರಿಯೆಯು ಪ್ರವೇಶ ಹೊಂದಿರುವ ಯಾವುದೇ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿರಬಹುದು."</string> + <string name="dump_heap_text" msgid="8546022920319781701">"<xliff:g id="PROC">%1$s</xliff:g> ಪ್ರಕ್ರಿಯೆಯು ತನ್ನ <xliff:g id="SIZE">%2$s</xliff:g> ಮೆಮೊರಿ ಮಿತಿಯನ್ನು ಮೀರಿದೆ. ಅದರ ಡೆವಲಪರ್ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲು ನಿಮಗಾಗಿ ಹೀಪ್ ಡಂಪ್ ಲಭ್ಯವಿದೆ. ಎಚ್ಚರಿಕೆ: ಈ ಹೀಪ್ ಡಂಪ್, ಅಪ್ಲಿಕೇಶನ್ ಪ್ರವೇಶ ಹೊಂದಿರುವ ನಿಮ್ಮ ಯಾವುದೇ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿರಬಹುದು."</string> <string name="dump_heap_system_text" msgid="3236094872980706024">"<xliff:g id="PROC">%1$s</xliff:g> ಪ್ರಕ್ರಿಯೆಯು ತನ್ನ <xliff:g id="SIZE">%2$s</xliff:g> ಮೆಮೊರಿ ಮಿತಿಯನ್ನು ಮೀರಿದೆ. ಹಂಚಿಕೊಳ್ಳಲು ನಿಮಗಾಗಿ ಹೀಪ್ ಡಂಪ್ ಲಭ್ಯವಿದೆ. ಎಚ್ಚರಿಕೆ: ಈ ಹೀಪ್ ಡಂಪ್, ಪ್ರಕ್ರಿಯೆಯು ಯಾವುದೇ ಸೂಕ್ಷ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರಬಹುದು, ಇದು ನೀವು ಟೈಪ್ ಮಾಡಿದ ವಿಷಯಗಳನ್ನು ಸಹ ಒಳಗೊಂಡಿರಬಹುದು."</string> <string name="dump_heap_ready_text" msgid="1778041771455343067">"<xliff:g id="PROC">%1$s</xliff:g> ನ ಪ್ರಕ್ರಿಯೆಯ ಹೀಪ್ ಡಂಪ್ ನಿಮಗಾಗಿ ಹಂಚಿಕೊಳ್ಳಲು ಲಭ್ಯವಿದೆ. ಎಚ್ಚರಿಕೆ: ಈ ಹೀಪ್ ಡಂಪ್, ಪ್ರಕ್ರಿಯೆಯು ಯಾವುದೇ ಸೂಕ್ಷ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರಬಹುದು, ಇದು ನೀವು ಟೈಪ್ ಮಾಡಿದ ವಿಷಯಗಳನ್ನು ಸಹ ಒಳಗೊಂಡಿರಬಹುದು."</string> <string name="sendText" msgid="5209874571959469142">"ಪಠ್ಯಕ್ಕೆ ಕ್ರಿಯೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string> @@ -1350,8 +1349,8 @@ <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ಡೀಬಗಿಂಗ್ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string> <string name="adb_active_notification_message" msgid="7463062450474107752">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಆಯ್ಕೆ ಮಾಡಿ."</string> - <string name="test_harness_mode_notification_title" msgid="2216359742631914387">"ಸ್ವಯಂ ಪರೀಕ್ಷೆಯಾಗುವುದು ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string> - <string name="test_harness_mode_notification_message" msgid="1343197173054407119">"ಸ್ವಯಂ ಪರೀಕ್ಷೆಯಾಗುವುದು ಮೋಡ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಫ್ಯಾಕ್ಟರಿ ರಿಸೆಟ್ ಮಾಡಬೇಕು."</string> + <string name="test_harness_mode_notification_title" msgid="2216359742631914387">"ಸ್ವಯಂ ಪರೀಕ್ಷೆಯಾಗುವಿಕೆ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string> + <string name="test_harness_mode_notification_message" msgid="1343197173054407119">"ಸ್ವಯಂ ಪರೀಕ್ಷೆಯಾಗುವಿಕೆ ಮೋಡ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಫ್ಯಾಕ್ಟರಿ ರಿಸೆಟ್ ಮಾಡಬೇಕು."</string> <string name="usb_contaminant_detected_title" msgid="7136400633704058349">"USB ಪೋರ್ಟ್ನಲ್ಲಿ ದ್ರವ ಅಥವಾ ಧೂಳಿನ ಕಣಗಳಿವೆ"</string> <string name="usb_contaminant_detected_message" msgid="832337061059487250">"USB ಪೋರ್ಟ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದೆ. ಇನ್ನಷ್ಟು ತಿಳಿಯಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="usb_contaminant_not_detected_title" msgid="4202417484434906086">"USB ಪೋರ್ಟ್ ಬಳಸಲು ಸುರಕ್ಷಿತವಾಗಿದೆ"</string> @@ -1996,7 +1995,7 @@ <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"ಬ್ಯಾಟರಿ ಅವಧಿ ಹೆಚ್ಚಿಸಲು ಬ್ಯಾಟರಿ ಸೇವರ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string> <string name="battery_saver_notification_channel_name" msgid="2083316159716201806">"ಬ್ಯಾಟರಿ ಸೇವರ್"</string> <string name="battery_saver_sticky_disabled_notification_title" msgid="6376147579378764641">"ಇನ್ನೊಮ್ಮೆ ಬ್ಯಾಟರಿ ಕಡಿಮೆಯಾಗುವವರೆಗೂ ಬ್ಯಾಟರಿ ಸೇವರ್ ಮರುಸಕ್ರಿಯವಾಗುವುದಿಲ್ಲ"</string> - <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"ಸಾಕಾಗುವಷ್ಟು ಬ್ಯಾಟರಿಯನ್ನು ಚಾರ್ಜ್ ಮಾಡಲಾಗಿದೆ. ಇನ್ನೊಮ್ಮೆ ಬ್ಯಾಟರಿ ಕಡಿಮೆಯಾಗುವವರೆಗೂ ಬ್ಯಾಟರಿ ಸೇವರ್ ಮರುಸಕ್ರಿಯವಾಗುವುದಿಲ್ಲ."</string> + <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"ಬ್ಯಾಟರಿಯನ್ನು ಬೇಕಾಗಿರುವಷ್ಟು ಮಟ್ಟಕ್ಕೆ ಚಾರ್ಜ್ ಮಾಡಲಾಗಿದೆ. ಇನ್ನೊಮ್ಮೆ ಬ್ಯಾಟರಿ ಕಡಿಮೆಯಾಗುವವರೆಗೂ ಬ್ಯಾಟರಿ ಸೇವರ್ ಮರುಸಕ್ರಿಯವಾಗುವುದಿಲ್ಲ."</string> <string name="battery_saver_charged_notification_title" product="default" msgid="2960978289873161288">"ಫೋನ್ <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> ಚಾರ್ಜ್ ಆಗಿದೆ"</string> <string name="battery_saver_charged_notification_title" product="tablet" msgid="7555713825806482451">"ಟ್ಯಾಬ್ಲೆಟ್ <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> ಚಾರ್ಜ್ ಆಗಿದೆ"</string> <string name="battery_saver_charged_notification_title" product="device" msgid="5954873381559605660">"ಸಾಧನ <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> ಚಾರ್ಜ್ ಆಗಿದೆ"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 5422aedea5b4..bc278e2f965c 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -1843,7 +1843,7 @@ <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"다운타임"</string> <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_events_name" msgid="8158334939013085363">"캘린더 일정"</string> <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"수면 중"</string> <string name="muted_by" msgid="5942954724562097128">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>(이)가 일부 소리를 음소거함"</string> <string name="system_error_wipe_data" msgid="6608165524785354962">"사용 중인 기기 내부에 문제가 발생했습니다. 초기화할 때까지 불안정할 수 있습니다."</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index 60031270ffcd..8810aeb1b7e7 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -655,7 +655,7 @@ <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Экрандын кулпусун ачуу учурунда туура эмес терилген сырсөздөрдү тескөө жана сырсөз өтө көп жолу туура эмес терилген болсо, сыналгыны кулпулап же бул колдонуучунун бардык дайындарын тазалап салуу."</string> <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Экрандын кулпусун ачуу учурунда туура эмес терилген сырсөздөрдү тескөө жана сырсөз өтө көп жолу туура эмес терилген болсо, телефонду кулпулап же бул колдонуучунун бардык дайындарын тазалап салуу."</string> <string name="policylab_resetPassword" msgid="4934707632423915395">"Экран кулпусун өзгөртүү"</string> - <string name="policydesc_resetPassword" msgid="1278323891710619128">"Экран кулпусун өзгөртүү."</string> + <string name="policydesc_resetPassword" msgid="1278323891710619128">"Экран кулпусун өзгөртөт."</string> <string name="policylab_forceLock" msgid="2274085384704248431">"Экранды кулпулоо"</string> <string name="policydesc_forceLock" msgid="1141797588403827138">"Экран качан жана кантип кулпулана турганын башкарат."</string> <string name="policylab_wipeData" msgid="3910545446758639713">"Бардык маалыматты өчүрүү"</string> @@ -675,7 +675,7 @@ <string name="policylab_disableCamera" msgid="6395301023152297826">"Камераларды өчүрүү"</string> <string name="policydesc_disableCamera" msgid="2306349042834754597">"Түзмөктүн бардык камераларын колдонууга тыюу салуу."</string> <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Функцияларды өчүрүү"</string> - <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Экранды кулпулоо функцияларынын айрымдарын колдонууга тыюу салуу"</string> + <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Экранды кулпулаган функциялардын айрымдарын колдонууга тыюу салат."</string> <string-array name="phoneTypes"> <item msgid="8901098336658710359">"Үй"</item> <item msgid="869923650527136615">"Мобилдик"</item> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index a529258abe65..7f347c8d0dd0 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -528,7 +528,7 @@ <string name="fingerprint_acquired_partial" msgid="735082772341716043">"Откриен е делумен отпечаток. Обидете се повторно."</string> <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Отпечатокот не можеше да се обработи. Обидете се повторно."</string> <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Сензорот за отпечатоци е валкан. Исчистете го и обидете се повторно."</string> - <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Прстот се дрижеше пребрзо. Обидете се повторно."</string> + <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Прстот се движеше пребрзо. Обидете се повторно."</string> <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Прстот се движеше премногу бавно. Обидете се повторно."</string> <string-array name="fingerprint_acquired_vendor"> </string-array> @@ -1362,7 +1362,7 @@ <string name="share_remote_bugreport_action" msgid="6249476773913384948">"СПОДЕЛИ"</string> <string name="decline_remote_bugreport_action" msgid="6230987241608770062">"ОДБИЈ"</string> <string name="select_input_method" msgid="4653387336791222978">"Одбери метод на внес"</string> - <string name="show_ime" msgid="2506087537466597099">"Прикажувај го на екранот додека е активна физичката тастатура"</string> + <string name="show_ime" msgid="2506087537466597099">"Прикажувај ја на екранот додека е активна физичката тастатура"</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> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index af69c6535097..4962885a9c67 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -141,10 +141,8 @@ <string name="wfcSpnFormat_wifi_calling_wo_hyphen" msgid="1336669776254502831">"വൈഫൈ കോളിംഗ്"</string> <string name="wfcSpnFormat_vowifi" msgid="1765176406171272629">"Voവൈഫൈ"</string> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"ഓഫ്"</string> - <!-- no translation found for wfc_mode_wifi_preferred_summary (7335489823608689868) --> - <skip /> - <!-- no translation found for wfc_mode_cellular_preferred_summary (7081742743152286290) --> - <skip /> + <string name="wfc_mode_wifi_preferred_summary" msgid="7335489823608689868">"വൈഫൈ മുഖേനയുള്ള കോൾ"</string> + <string name="wfc_mode_cellular_preferred_summary" msgid="7081742743152286290">"മൊബൈൽ നെറ്റ്വർക്ക് മുഖേനയുള്ള കോൾ"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"വൈഫൈ മാത്രം"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: കൈമാറിയില്ല"</string> <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string> @@ -230,8 +228,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> - <!-- no translation found for bugreport_title (5981047024855257269) --> - <skip /> + <string name="bugreport_title" msgid="5981047024855257269">"ബഗ് റിപ്പോർട്ട്"</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> @@ -284,12 +281,9 @@ <string name="permgrouplab_location" msgid="7275582855722310164">"ലൊക്കേഷൻ"</string> <string name="permgroupdesc_location" msgid="1346617465127855033">"ഈ ഉപകരണത്തിന്റെ ലൊക്കേഷൻ ആക്സസ് ചെയ്യാൻ"</string> <string name="permgrouprequest_location" msgid="3788275734953323491">"ഈ ഉപകരണത്തിന്റെ ലൊക്കേഷൻ ആക്സസ് ചെയ്യാൻ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ആപ്പിനെ അനുവദിക്കണോ?"</string> - <!-- no translation found for permgrouprequestdetail_location (1347189607421252902) --> - <skip /> - <!-- no translation found for permgroupbackgroundrequest_location (5039063878675613235) --> - <skip /> - <!-- no translation found for permgroupbackgroundrequestdetail_location (4597006851453417387) --> - <skip /> + <string name="permgrouprequestdetail_location" msgid="1347189607421252902">"നിങ്ങൾ ആപ്പ് ഉപയോഗിക്കുമ്പോൾ മാത്രമേ അതിന് ലൊക്കേഷൻ ആക്സസ് ലഭിക്കൂ."</string> + <string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനെ ഈ ഉപകരണത്തിന്റെ ലൊക്കേഷൻ ആക്സസ് ചെയ്യാൻ എപ്പോഴും അനുവദിക്കണോ?"</string> + <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"നിലവിൽ, ഉപയോഗിക്കുമ്പോൾ മാത്രം ആപ്പിന് ലൊക്കേഷൻ ആക്സസ് ചെയ്യാം"</string> <string name="permgrouplab_calendar" msgid="5863508437783683902">"കലണ്ടർ"</string> <string name="permgroupdesc_calendar" msgid="3889615280211184106">"നിങ്ങളുടെ കലണ്ടർ ആക്സസ്സ് ചെയ്യുക"</string> <string name="permgrouprequest_calendar" msgid="289900767793189421">"നിങ്ങളുടെ കലണ്ടർ ആക്സസ് ചെയ്യാൻ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ആപ്പിനെ അനുവദിക്കണോ?"</string> @@ -509,10 +503,8 @@ <string name="permdesc_nfc" msgid="7120611819401789907">"നിയർ ഫീൽഡ് കമ്മ്യൂണിക്കേഷൻ (NFC) ടാഗുകളുമായും കാർഡുകളുമായും റീഡറുകളുമായുള്ള ആശയവിനിമയത്തിന് അപ്ലിക്കേഷനുകളെ അനുവദിക്കുന്നു."</string> <string name="permlab_disableKeyguard" msgid="3598496301486439258">"നിങ്ങളുടെ സ്ക്രീൻ ലോക്ക് പ്രവർത്തനരഹിതമാക്കുക"</string> <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"കീലോക്കും ഏതെങ്കിലും അനുബന്ധ പാസ്വേഡ് സുരക്ഷയും പ്രവർത്തനരഹിതമാക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു ഇൻകമിംഗ് കോൾ സ്വീകരിക്കുമ്പോൾ ഫോൺ കീലോക്ക് പ്രവർത്തനരഹിതമാക്കുന്നു, കോൾ അവസാനിക്കുമ്പോൾ കീലോക്ക് വീണ്ടും പ്രവർത്തനക്ഷമമാകുന്നു."</string> - <!-- no translation found for permlab_requestPasswordComplexity (202650535669249674) --> - <skip /> - <!-- no translation found for permdesc_requestPasswordComplexity (4730994229754212347) --> - <skip /> + <string name="permlab_requestPasswordComplexity" msgid="202650535669249674">"സ്ക്രീൻ ലോക്ക് സങ്കീർണ്ണത അഭ്യർത്ഥിക്കുക"</string> + <string name="permdesc_requestPasswordComplexity" msgid="4730994229754212347">"സ്ക്രീൻ ലോക്കിന്റെ സാധ്യമായ നീളവും തരവും സൂചിപ്പിക്കുന്ന, അതിന്റെ സങ്കീർണ്ണത നില (ഉയർന്നത്, ഇടത്തരം, കുറഞ്ഞത് അല്ലെങ്കിൽ ഒന്നുമില്ല) മനസ്സിലാക്കാൻ ആപ്പിനെ അനുവദിക്കുന്നു. സ്ക്രീൻ ലോക്ക് ഒരു പ്രത്യേക തലത്തിലേക്ക് അപ്ഡേറ്റ് ചെയ്യാൻ ഉപയോക്താക്കളെ നിർദ്ദേശിക്കാനും ആപ്പിനാവും, പക്ഷെ ഉപയോക്താക്കൾക്ക് എളുപ്പത്തിൽ അവഗണിക്കാനും മറ്റൊന്നിലേക്ക് നാവിഗേറ്റ് ചെയ്യാനുമാവും. പ്ലെയിൻടെക്സ്റ്റിൽ സ്ക്രീൻ ലോക്ക് സംഭരിക്കപ്പെട്ടിട്ടില്ലെന്ന കാര്യം ശ്രദ്ധിക്കുക, അതിനാൽ ആപ്പിന് കൃത്യമായ പാസ്വേഡ് അറിയില്ല."</string> <string name="permlab_useBiometric" msgid="8837753668509919318">"ബയോമെട്രിക് ഹാർഡ്വെയർ ഉപയോഗിക്കുക"</string> <string name="permdesc_useBiometric" msgid="8389855232721612926">"പരിശോധിച്ചുറപ്പിക്കുന്നതിനായി, ബയോമെട്രിക് ഹാർഡ്വെയർ ഉപയോഗിക്കാൻ ആപ്പിനെ അനുവദിക്കുക"</string> <string name="permlab_manageFingerprint" msgid="5640858826254575638">"ഫിംഗർപ്രിന്റ് ഹാർഡ്വെയർ നിയന്ത്രിക്കുക"</string> @@ -527,8 +519,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"നിങ്ങളുടെ ഫോട്ടോ ശേഖരം പരിഷ്ക്കരിക്കുന്നതിന് ആപ്പിനെ അനുവദിക്കുന്നു."</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"നിങ്ങളുടെ മീഡിയ ശേഖരത്തിൽ നിന്നും ലൊക്കേഷനുകൾ റീഡ് ചെയ്യുക"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"നിങ്ങളുടെ മീഡിയ ശേഖരത്തിൽ നിന്നും ലൊക്കേഷനുകൾ റീഡ് ചെയ്യുന്നതിന് ആപ്പിനെ അനുവദിക്കുന്നു."</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"ഇത് നിങ്ങളാണെന്ന് പരിശോധിച്ചുറപ്പിക്കുക"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"ബയോമെട്രിക് ഹാർഡ്വെയർ ലഭ്യമല്ല"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"പരിശോധിച്ചുറപ്പിക്കൽ റദ്ദാക്കി"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"തിരിച്ചറിഞ്ഞില്ല"</string> @@ -536,7 +527,7 @@ <string name="biometric_error_device_not_secured" msgid="6583143098363528349">"പിന്നോ പാറ്റേണോ പാസ്വേഡോ സജ്ജീകരിച്ചിട്ടില്ല"</string> <string name="fingerprint_acquired_partial" msgid="735082772341716043">"വിരലടയാളം ഭാഗികമായി തിരിച്ചറിഞ്ഞു. വീണ്ടും ശ്രമിക്കുക."</string> <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"വിരലടയാളം പ്രോസസ്സ് ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക."</string> - <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"വിരലടയാള സെൻസറിന് വൃത്തിയില്ല. അത് ശുചിയാക്കി വീണ്ടും ശ്രമിക്കുക."</string> + <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"വിരലടയാള സെൻസറിൽ ചെളിയുണ്ട്. അത് വൃത്തിയാക്കി വീണ്ടും ശ്രമിക്കുക."</string> <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"വിരൽ വളരെ വേഗത്തിൽ നീക്കി. വീണ്ടും ശ്രമിക്കുക."</string> <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"വിരൽ വളരെ പതുക്കെ നീക്കി. വീണ്ടും ശ്രമിക്കുക."</string> <string-array name="fingerprint_acquired_vendor"> @@ -562,55 +553,36 @@ <string name="permdesc_manageFace" msgid="8919637120670185330">"ഉപയോഗിക്കാനായി, മുഖത്തിന്റെ ടെംപ്ലേറ്റുകൾ ചേർക്കാനും ഇല്ലാതാക്കാനുമുള്ള രീതികൾ അഭ്യർത്ഥിക്കാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string> <string name="permlab_useFaceAuthentication" msgid="8996134460546804535">"മുഖം തിരിച്ചറിയൽ ഹാർഡ്വെയർ ഉപയോഗിക്കുക"</string> <string name="permdesc_useFaceAuthentication" msgid="5011118722951833089">"പരിശോധിച്ചുറപ്പിക്കലിനായി മുഖം തിരിച്ചറിയൽ ഹാർഡ്വെയർ ഉപയോഗിക്കാൻ ആപ്പിനെ അനുവദിക്കുന്നു"</string> - <!-- no translation found for face_acquired_insufficient (2767330364802375742) --> - <skip /> - <!-- no translation found for face_acquired_too_bright (5005650874582450967) --> - <skip /> - <!-- no translation found for face_acquired_too_dark (1966194696381394616) --> - <skip /> - <!-- no translation found for face_acquired_too_close (1401011882624272753) --> - <skip /> - <!-- no translation found for face_acquired_too_far (1210969240069012510) --> - <skip /> - <!-- no translation found for face_acquired_too_high (3362395713403348013) --> - <skip /> - <!-- no translation found for face_acquired_too_low (488983581737550912) --> - <skip /> - <!-- no translation found for face_acquired_too_right (941726879175375970) --> - <skip /> - <!-- no translation found for face_acquired_too_left (5873592047381190672) --> - <skip /> - <!-- no translation found for face_acquired_poor_gaze (8471716624377228327) --> - <skip /> - <!-- no translation found for face_acquired_not_detected (4885504661626728809) --> - <skip /> - <!-- no translation found for face_acquired_too_much_motion (3149332171102108851) --> - <skip /> + <string name="face_acquired_insufficient" msgid="2767330364802375742">"കൃത്യ മുഖ ഡാറ്റ എടുക്കാനായില്ല. വീണ്ടും ശ്രമിക്കൂ."</string> + <string name="face_acquired_too_bright" msgid="5005650874582450967">"വളരെയധികം തെളിച്ചം. സൗമ്യതയേറിയ പ്രകാശം ശ്രമിക്കൂ."</string> + <string name="face_acquired_too_dark" msgid="1966194696381394616">"വളരെ ഇരുണ്ടത്. തിളക്കമേറിയ ലൈറ്റിംഗ് പരീക്ഷിക്കുക."</string> + <string name="face_acquired_too_close" msgid="1401011882624272753">"ഫോൺ കൂടുതൽ അകലേയ്ക്ക് നീക്കുക."</string> + <string name="face_acquired_too_far" msgid="1210969240069012510">"ഫോൺ അടുത്തേക്ക് നീക്കുക."</string> + <string name="face_acquired_too_high" msgid="3362395713403348013">"ഫോൺ കൂടുതൽ ഉയരത്തിലേക്ക് നീക്കുക."</string> + <string name="face_acquired_too_low" msgid="488983581737550912">"ഫോൺ കൂടുതൽ താഴേക്ക് നീക്കുക."</string> + <string name="face_acquired_too_right" msgid="941726879175375970">"ഫോൺ വലത്തോട്ട് നീക്കുക."</string> + <string name="face_acquired_too_left" msgid="5873592047381190672">"ഫോൺ ഇടത്തോട്ട് നീക്കുക."</string> + <string name="face_acquired_poor_gaze" msgid="8471716624377228327">"തുറന്ന കണ്ണുകളുമായി സ്ക്രീനിലേക്ക് നോക്കുക."</string> + <string name="face_acquired_not_detected" msgid="4885504661626728809">"നിങ്ങളുടെ മുഖം കാണാനാവുന്നില്ല. ഫോണിലേക്ക് നോക്കൂ."</string> + <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"വളരെയധികം ചലനം. ഫോൺ അനക്കാതെ നേരെ പിടിക്കുക."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"നിങ്ങളുടെ മുഖം വീണ്ടും എൻറോൾ ചെയ്യുക."</string> - <!-- no translation found for face_acquired_too_different (7663983770123789694) --> - <skip /> + <string name="face_acquired_too_different" msgid="7663983770123789694">"ഇനി മുഖം തിരിച്ചറിയാനാവില്ല. വീണ്ടും ശ്രമിക്കൂ."</string> <string name="face_acquired_too_similar" msgid="1508776858407646460">"വളരെയധികം സമാനത, നിങ്ങളുടെ പോസ് മാറ്റുക."</string> - <!-- no translation found for face_acquired_pan_too_extreme (1852495480382773759) --> - <skip /> - <!-- no translation found for face_acquired_tilt_too_extreme (1290820400317982049) --> - <skip /> + <string name="face_acquired_pan_too_extreme" msgid="1852495480382773759">"അൽപ്പം കൂടി സ്ക്രീനിന് നേരെ നോക്കുക."</string> + <string name="face_acquired_tilt_too_extreme" msgid="1290820400317982049">"അൽപ്പം കൂടി സ്ക്രീനിന് നേരെ നോക്കുക."</string> <string name="face_acquired_roll_too_extreme" msgid="1444829237745898619">"നിങ്ങളുടെ തല ലംബമായി നേരെയാക്കുക"</string> - <!-- no translation found for face_acquired_obscured (5747521031647744553) --> - <skip /> - <!-- no translation found for face_acquired_sensor_dirty (364493868630891300) --> - <skip /> + <string name="face_acquired_obscured" msgid="5747521031647744553">"തലയ്ക്കും ഫോണിനുമിടയിലുള്ള തടസ്സം നീക്കുക."</string> + <string name="face_acquired_sensor_dirty" msgid="364493868630891300">"ക്യാമറ വൃത്തിയാക്കുക."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="396883585636963908">"മുഖം പരിശോധിക്കാൻ കഴിയില്ല. ഹാർഡ്വെയർ ലഭ്യമല്ല."</string> - <!-- no translation found for face_error_timeout (2605673935810019129) --> - <skip /> + <string name="face_error_timeout" msgid="2605673935810019129">"മുഖത്തിന്റെ സമയപരിധി കഴിഞ്ഞു. വീണ്ടും ശ്രമിക്കുക."</string> <string name="face_error_no_space" msgid="2712120617457553825">"പുതിയ മുഖ ഡാറ്റ സംഭരിക്കാനാകില്ല. ആദ്യം പഴയത് ഇല്ലാതാക്കുക."</string> <string name="face_error_canceled" msgid="2768146728600802422">"മുഖം തിരിച്ചറിയൽ പ്രവർത്തനം റദ്ദാക്കി"</string> <string name="face_error_user_canceled" msgid="9003022830076496163">"മുഖം പരിശോധിച്ചുറപ്പിക്കൽ ഉപയോക്താവ് റദ്ദാക്കി"</string> <string name="face_error_lockout" msgid="3407426963155388504">"നിരവധി തവണ ശ്രമിച്ചു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."</string> <string name="face_error_lockout_permanent" msgid="3485837851962070925">"വളരെയധികം ശ്രമങ്ങൾ. മുഖം തിരിച്ചറിയൽ പ്രവർത്തനരഹിതമാക്കി."</string> - <!-- no translation found for face_error_unable_to_process (4940944939691171539) --> - <skip /> + <string name="face_error_unable_to_process" msgid="4940944939691171539">"മുഖം പരിശോധിക്കാൻ കഴിയില്ല. വീണ്ടും ശ്രമിക്കൂ."</string> <string name="face_error_not_enrolled" msgid="2600952202843125796">"നിങ്ങൾ മുഖം പരിശോധിച്ചുറപ്പിക്കൽ സജ്ജീകരിച്ചില്ല"</string> <string name="face_error_hw_not_present" msgid="1317845121210260372">"ഈ ഉപകരണം മുഖം പരിശോധിച്ചുറപ്പിക്കൽ പിന്തുണയ്ക്കുന്നില്ല"</string> <string name="face_name_template" msgid="7004562145809595384">"മുഖം <xliff:g id="FACEID">%d</xliff:g>"</string> @@ -1230,13 +1202,11 @@ <string name="new_app_action" msgid="6694851182870774403">"<xliff:g id="NEW_APP">%1$s</xliff:g> തുറക്കുക"</string> <string name="new_app_description" msgid="5894852887817332322">"<xliff:g id="OLD_APP">%1$s</xliff:g> സംരക്ഷിക്കാതെ അവസാനിപ്പിക്കും"</string> <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> മെമ്മറി പരിധി കവിഞ്ഞു"</string> - <!-- no translation found for dump_heap_ready_notification (1162196579925048701) --> - <skip /> + <string name="dump_heap_ready_notification" msgid="1162196579925048701">"<xliff:g id="PROC">%1$s</xliff:g> ഹീപ്പ് ഡംപ് തയ്യാറാണ്"</string> <string name="dump_heap_notification_detail" msgid="3993078784053054141">"ഹീപ്പ് ഡംപ് ശേഖരിച്ചു. പങ്കിടാൻ ടാപ്പ് ചെയ്യുക"</string> <string name="dump_heap_title" msgid="5864292264307651673">"ഹീപ്പ് ഡംപ് പങ്കിടണോ?"</string> - <!-- no translation found for dump_heap_text (8546022920319781701) --> - <skip /> - <string name="dump_heap_system_text" msgid="3236094872980706024">"<xliff:g id="PROC">%1$s</xliff:g> പ്രോസസ്സ് അതിൻ്റെ മെമ്മറി പരിധിയായ <xliff:g id="SIZE">%2$s</xliff:g> കവിഞ്ഞു. നിങ്ങൾക്ക് പങ്കിടാൻ ഒരു ഹീപ്പ് ഡംപ് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: പ്രോസസിന് ആക്സസ് ചെയ്യാനാകുന്ന, സൂക്ഷ്മമായി കൈകാര്യം ചെയ്യേണ്ട ഏതെങ്കിലും വ്യക്തിഗത വിവരം ഈ ഹീപ്പ് ഡംപിൽ അടങ്ങിയിരിക്കാം, നിങ്ങൾ ടൈപ്പ് ചെയ്തിട്ടുള്ള കാര്യങ്ങൾ ഇതിൽ ഉൾപ്പെട്ടിരിക്കാം."</string> + <string name="dump_heap_text" msgid="8546022920319781701">"<xliff:g id="PROC">%1$s</xliff:g> പ്രോസസിന്, മെമ്മറി പരിധിയായ <xliff:g id="SIZE">%2$s</xliff:g> കവിഞ്ഞു. അതിന്റെ ഡവലപ്പറുമായി പങ്കിടാൻ ഒരു ഹീപ്പ് ഡംപ് നിങ്ങൾക്ക് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: ഈ ഹീപ്പ് ഡംപിൽ ആപ്പിന് ആക്സസുള്ള ഏതെങ്കിലും വ്യക്തിഗത വിവരം അടങ്ങിയിരിക്കാം."</string> + <string name="dump_heap_system_text" msgid="3236094872980706024">"<xliff:g id="PROC">%1$s</xliff:g> പ്രോസസ് അതിൻ്റെ മെമ്മറി പരിധിയായ <xliff:g id="SIZE">%2$s</xliff:g> കവിഞ്ഞു. നിങ്ങൾക്ക് പങ്കിടാൻ ഒരു ഹീപ്പ് ഡംപ് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: പ്രോസസിന് ആക്സസ് ചെയ്യാനാകുന്ന, സൂക്ഷ്മമായി കൈകാര്യം ചെയ്യേണ്ട ഏതെങ്കിലും വ്യക്തിഗത വിവരം ഈ ഹീപ്പ് ഡംപിൽ അടങ്ങിയിരിക്കാം, നിങ്ങൾ ടൈപ്പ് ചെയ്തിട്ടുള്ള കാര്യങ്ങൾ ഇതിൽ ഉൾപ്പെട്ടിരിക്കാം."</string> <string name="dump_heap_ready_text" msgid="1778041771455343067">"നിങ്ങൾക്ക് പങ്കിടാൻ <xliff:g id="PROC">%1$s</xliff:g> എന്നതിൻ്റെ പ്രോസസിൻ്റെ ഒരു ഹീപ്പ് ഡംപ് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: പ്രോസസിന് ആക്സസ് ചെയ്യാനാകുന്ന, സൂക്ഷ്മമായി കൈകാര്യം ചെയ്യേണ്ട ഏതെങ്കിലും വ്യക്തിഗത വിവരം ഈ ഹീപ്പ് ഡംപിൽ അടങ്ങിയിരിക്കാം, നിങ്ങൾ ടൈപ്പ് ചെയ്തിട്ടുള്ള കാര്യങ്ങൾ ഇതിൽ ഉൾപ്പെട്ടിരിക്കാം."</string> <string name="sendText" msgid="5209874571959469142">"വാചകസന്ദേശത്തിനായി ഒരു പ്രവർത്തനം തിരഞ്ഞെടുക്കുക"</string> <string name="volume_ringtone" msgid="6885421406845734650">"റിംഗർ വോളിയം"</string> @@ -1276,10 +1246,8 @@ <string name="wifi_available_content_failed_to_connect" msgid="3377406637062802645">"എല്ലാ നെറ്റ്വർക്കുകളും കാണാൻ ടാപ്പുചെയ്യുക"</string> <string name="wifi_available_action_connect" msgid="2635699628459488788">"കണക്റ്റുചെയ്യുക"</string> <string name="wifi_available_action_all_networks" msgid="4368435796357931006">"എല്ലാ നെറ്റ്വർക്കുകളും"</string> - <!-- no translation found for wifi_suggestion_title (9099832833531486167) --> - <skip /> - <!-- no translation found for wifi_suggestion_content (5883181205841582873) --> - <skip /> + <string name="wifi_suggestion_title" msgid="9099832833531486167">"വൈഫൈ നെറ്റ്വർക്കുകളിലേക്ക് കണക്റ്റ് ചെയ്യണോ?"</string> + <string name="wifi_suggestion_content" msgid="5883181205841582873">"<xliff:g id="NAME">%s</xliff:g> നിർദ്ദേശിച്ചത്"</string> <string name="wifi_suggestion_action_allow_app" msgid="3689946344485394085">"ഉവ്വ്"</string> <string name="wifi_suggestion_action_disallow_app" msgid="7977918905605931385">"ഇല്ല"</string> <string name="wifi_wakeup_onboarding_title" msgid="228772560195634292">"വൈഫൈ സ്വമേധയാ ഓണാകും"</string> @@ -1291,14 +1259,11 @@ <string name="network_available_sign_in" msgid="1848877297365446605">"നെറ്റ്വർക്കിലേക്ക് സൈൻ ഇൻ ചെയ്യുക"</string> <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) --> <skip /> - <!-- no translation found for wifi_no_internet (5198100389964214865) --> - <skip /> + <string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> എന്നതിന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string> <string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ഓപ്ഷനുകൾക്ക് ടാപ്പുചെയ്യുക"</string> <string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"കണക്റ്റ് ചെയ്തു"</string> - <!-- no translation found for network_partial_connectivity (7774883385494762741) --> - <skip /> - <!-- no translation found for network_partial_connectivity_detailed (1959697814165325217) --> - <skip /> + <string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> എന്നതിന് പരിമിതമായ കണക്റ്റിവിറ്റി ഉണ്ട്"</string> + <string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"ഏതുവിധേനയും കണക്റ്റ് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string> <string name="wifi_softap_config_change" msgid="8475911871165857607">"നിങ്ങളുടെ ഹോട്ട്സ്പോട്ട് ക്രമീകരണത്തിൽ വരുത്തിയ മാറ്റങ്ങൾ"</string> <string name="wifi_softap_config_change_summary" msgid="7601233252456548891">"നിങ്ങളുടെ ഹോട്ട്സ്പോട്ട് ബാൻഡ് മാറി."</string> <string name="wifi_softap_config_change_detailed" msgid="8022936822860678033">"നിങ്ങളുടെ മുൻഗണനയനുസരിച്ചുള്ള, 5GHz മാത്രം എന്നത് ഈ ഉപകരണം പിന്തുണയ്ക്കുന്നില്ല. പകരം, 5GHz ബാൻഡ് ലഭ്യമാകുമ്പോൾ അത് ഉപയോഗിക്കും."</string> @@ -1384,10 +1349,8 @@ <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ഡീബഗ്ഗിംഗ് കണക്റ്റ് ചെയ്തു"</string> <string name="adb_active_notification_message" msgid="7463062450474107752">"USB ഡീബഗ്ഗിംഗ് ഓഫാക്കാൻ ടാപ്പ് ചെയ്യുക"</string> <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB ഡീബഗ്ഗുചെയ്യൽ പ്രവർത്തനരഹിതമാക്കാൻ തിരഞ്ഞെടുക്കുക."</string> - <!-- no translation found for test_harness_mode_notification_title (2216359742631914387) --> - <skip /> - <!-- no translation found for test_harness_mode_notification_message (1343197173054407119) --> - <skip /> + <string name="test_harness_mode_notification_title" msgid="2216359742631914387">"പരിശോധനാ സംവിധാനങ്ങൾ മോഡ് പ്രവർത്തനക്ഷമമാക്കി"</string> + <string name="test_harness_mode_notification_message" msgid="1343197173054407119">"പരിശോധനാ സംവിധാന മോഡ് പ്രവർത്തനരഹിതമാക്കാൻ ഫാക്ടറി പുനഃക്രമീകരണം നിർവഹിക്കുക."</string> <string name="usb_contaminant_detected_title" msgid="7136400633704058349">"USB പോർട്ടിൽ ദ്രാവകമോ പൊടിയോ കണ്ടെത്തി"</string> <string name="usb_contaminant_detected_message" msgid="832337061059487250">"USB പോർട്ടർ സ്വയമേവ പ്രവർത്തനരഹിതമായി. കൂടുതലറിയാൻ ടാപ്പ് ചെയ്യുക."</string> <string name="usb_contaminant_not_detected_title" msgid="4202417484434906086">"USB പോർട്ട് ഇപ്പോൾ സുരക്ഷിതമായി ഉപയോഗിക്കാം"</string> @@ -1834,10 +1797,8 @@ <string name="package_updated_device_owner" msgid="1847154566357862089">"നിങ്ങളുടെ അഡ്മിൻ അപ്ഡേറ്റ് ചെയ്യുന്നത്"</string> <string name="package_deleted_device_owner" msgid="2307122077550236438">"നിങ്ങളുടെ അഡ്മിൻ ഇല്ലാതാക്കുന്നത്"</string> <string name="confirm_battery_saver" msgid="639106420541753635">"ശരി"</string> - <!-- no translation found for battery_saver_description_with_learn_more (2108984221113106294) --> - <skip /> - <!-- no translation found for battery_saver_description (6413346684861241431) --> - <skip /> + <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"ബാറ്ററി ലൈഫ് വികസിപ്പിക്കാൻ പശ്ചാത്തല ആക്റ്റിവിറ്റി, ചില വിഷ്വൽ ഇഫക്റ്റുകൾ, മറ്റ് ഹൈ പവർ ഫീച്ചറുകൾ എന്നിവയെ ബാറ്ററി ലാഭിക്കൽ ഓഫാക്കുകയോ നിയന്ത്രിക്കുകയോ ചെയ്യും. "<annotation id="url">"കൂടുതലറിയുക"</annotation></string> + <string name="battery_saver_description" msgid="6413346684861241431">"ബാറ്ററി ലൈഫ് വികസിപ്പിക്കാൻ പശ്ചാത്തല ആക്റ്റിവിറ്റി, ചില വിഷ്വൽ ഇഫക്റ്റുകൾ, മറ്റ് ഹൈ പവർ ഫീച്ചറുകൾ എന്നിവയെ ബാറ്ററി ലാഭിക്കൽ ഓഫാക്കുകയോ നിയന്ത്രിക്കുകയോ ചെയ്യും."</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> @@ -2032,22 +1993,14 @@ <string name="dynamic_mode_notification_channel_name" msgid="2348803891571320452">"ദിനചര്യ മോഡ് വിവരത്തെ കുറിച്ചുള്ള അറിയിപ്പ്"</string> <string name="dynamic_mode_notification_title" msgid="508815255807182035">"സാധാരണയുള്ളതിലും നേരത്തെ ബാറ്ററിയുടെ ചാർജ് തീർന്നേക്കാം"</string> <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"ബാറ്ററി ലൈഫ് വര്ദ്ധിപ്പിക്കാൻ, ബാറ്ററി ലാഭിക്കൽ സജീവമാക്കി"</string> - <!-- no translation found for battery_saver_notification_channel_name (2083316159716201806) --> - <skip /> - <!-- no translation found for battery_saver_sticky_disabled_notification_title (6376147579378764641) --> - <skip /> - <!-- no translation found for battery_saver_sticky_disabled_notification_summary (8090192609249817945) --> - <skip /> - <!-- no translation found for battery_saver_charged_notification_title (2960978289873161288) --> - <skip /> - <!-- no translation found for battery_saver_charged_notification_title (7555713825806482451) --> - <skip /> - <!-- no translation found for battery_saver_charged_notification_title (5954873381559605660) --> - <skip /> - <!-- no translation found for battery_saver_off_notification_summary (1374222493681267143) --> - <skip /> - <!-- no translation found for battery_saver_off_alternative_notification_summary (4340727818546508436) --> - <skip /> + <string name="battery_saver_notification_channel_name" msgid="2083316159716201806">"ബാറ്ററി ലാഭിക്കൽ"</string> + <string name="battery_saver_sticky_disabled_notification_title" msgid="6376147579378764641">"ബാറ്ററി ചാർജ് വീണ്ടും കുറയുന്നത് വരെ ബാറ്ററി ലാഭിക്കൽ പിന്നെയും സജീവമാവുകയില്ല"</string> + <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"മതിയായ നില വരെ ബാറ്ററി ചാർജായി. വീണ്ടും ബാറ്ററി ചാർജ് കുറയുന്നത് വരെ ബാറ്ററി ലാഭിക്കൽ പിന്നെയും സജീവമാവുകയില്ല."</string> + <string name="battery_saver_charged_notification_title" product="default" msgid="2960978289873161288">"ഫോൺ <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> ചാർജായി"</string> + <string name="battery_saver_charged_notification_title" product="tablet" msgid="7555713825806482451">"ടാബ്ലെറ്റ് <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> ചാർജായി"</string> + <string name="battery_saver_charged_notification_title" product="device" msgid="5954873381559605660">"ഉപകരണം <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> ചാർജായി"</string> + <string name="battery_saver_off_notification_summary" msgid="1374222493681267143">"ബാറ്ററി ലാഭിക്കൽ ഓഫാണ്. ഫീച്ചറുകൾക്ക് ഇനിമുതൽ നിയന്ത്രണമില്ല."</string> + <string name="battery_saver_off_alternative_notification_summary" msgid="4340727818546508436">"ബാറ്ററി ലാഭിക്കൽ ഓഫാക്കി. ഫീച്ചറുകൾക്ക് ഇനിമുതൽ നിയന്ത്രണമില്ല."</string> <string name="mime_type_folder" msgid="7111951698626315204">"ഫോള്ഡര്"</string> <string name="mime_type_apk" msgid="5518003630972506900">"Android ആപ്പ്"</string> <string name="mime_type_generic" msgid="6833871596845900027">"ഫയൽ"</string> @@ -2071,6 +2024,5 @@ <item quantity="other"><xliff:g id="FILE_NAME_2">%s</xliff:g> + <xliff:g id="COUNT_3">%d</xliff:g> ഫയലുകൾ</item> <item quantity="one"><xliff:g id="FILE_NAME_0">%s</xliff:g> + <xliff:g id="COUNT_1">%d</xliff:g> ഫയൽ</item> </plurals> - <!-- no translation found for chooser_no_direct_share_targets (997970693708458895) --> - <skip /> + <string name="chooser_no_direct_share_targets" msgid="997970693708458895">"നേരിട്ടുള്ള പങ്കിടൽ ലഭ്യമല്ല"</string> </resources> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index c761d97776a7..dfbf57916809 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -519,8 +519,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"अॅपला तुमच्या फोटो संग्रहामध्ये सुधारणा करण्याची अनुमती देते."</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"तुमच्या मीडिया संग्रहातून स्थाने वाचा"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"अॅपला तुमच्या मीडिया संग्रहामध्येील स्थाने वाचण्यासाठी अनुमती देते."</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"हे तुम्हीच आहात याची पडताळणी करा"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"बायोमेट्रिक हार्डवेअर उपलब्ध नाही"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"ऑथेंटिकेशन रद्द केले"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"ओळखले नाही"</string> @@ -675,7 +674,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> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index 67f85a7283f1..77620395f79d 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -519,8 +519,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"यसले अनुप्रयोगलाई तपाईंको तस्बिरको सङ्ग्रह परिमार्जन गर्न दिन्छ।"</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"आफ्नो मिडियाको सङ्ग्रहका स्थानहरू पढ्नुहोस्"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"यसले अनुप्रयोगलाई तपाईंको मिडिया सङ्ग्रहका स्थानहरू पढ्न दिन्छ।"</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"यो तपाईं नै हो भन्ने पुष्टि गर्नुहोस्"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"बायोमेट्रिक हार्डवेयर उपलब्ध छैन"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"प्रमाणीकरण रद्द गरियो"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"पहिचान भएन"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index b13fb8f56324..4a357b55439c 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -1098,7 +1098,7 @@ <string name="view_calendar" msgid="979609872939597838">"Weergeven"</string> <string name="view_calendar_desc" msgid="5828320291870344584">"Geselecteerde tijd weergeven op de kalender"</string> <string name="add_calendar_event" msgid="1953664627192056206">"Plannen"</string> - <string name="add_calendar_event_desc" msgid="4326891793260687388">"Evenement plannen voor geselecteerde tijd"</string> + <string name="add_calendar_event_desc" msgid="4326891793260687388">"Afspraak plannen voor geselecteerde tijd"</string> <string name="view_flight" msgid="7691640491425680214">"Volgen"</string> <string name="view_flight_desc" msgid="3876322502674253506">"Geselecteerde vlucht volgen"</string> <string name="translate" msgid="9218619809342576858">"Vertalen"</string> @@ -1209,7 +1209,7 @@ <string name="dump_heap_system_text" msgid="3236094872980706024">"Het proces <xliff:g id="PROC">%1$s</xliff:g> overschrijdt de geheugenlimiet van <xliff:g id="SIZE">%2$s</xliff:g>. Er is een heap dump beschikbaar die je kunt delen. Let op: Deze heap dump kan gevoelige persoonlijke informatie bevatten waartoe het proces toegang heeft. Dit omvat mogelijk wat je hebt getypt."</string> <string name="dump_heap_ready_text" msgid="1778041771455343067">"Er is een heap dump beschikbaar van het proces van <xliff:g id="PROC">%1$s</xliff:g>. Deze kun je delen. Let op: Deze heap dump bevat mogelijk gevoelige persoonlijke informatie waartoe het proces toegang heeft. Dit omvat mogelijk wat je hebt getypt."</string> <string name="sendText" msgid="5209874571959469142">"Een actie voor tekst selecteren"</string> - <string name="volume_ringtone" msgid="6885421406845734650">"Belvolume"</string> + <string name="volume_ringtone" msgid="6885421406845734650">"Beltoonvolume"</string> <string name="volume_music" msgid="5421651157138628171">"Mediavolume"</string> <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Afspelen via Bluetooth"</string> <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Stille beltoon ingesteld"</string> @@ -1220,7 +1220,7 @@ <string name="volume_unknown" msgid="1400219669770445902">"Volume"</string> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volume"</string> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Beltoonvolume"</string> - <string name="volume_icon_description_incall" msgid="8890073218154543397">"Belvolume"</string> + <string name="volume_icon_description_incall" msgid="8890073218154543397">"Gespreksvolume"</string> <string name="volume_icon_description_media" msgid="4217311719665194215">"Mediavolume"</string> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Meldingsvolume"</string> <string name="ringtone_default" msgid="3789758980357696936">"Standaardbeltoon"</string> @@ -1843,7 +1843,7 @@ <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Downtime"</string> <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Doordeweekse avond"</string> <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Weekend"</string> - <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Evenement"</string> + <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Afspraken"</string> <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"Slapen"</string> <string name="muted_by" msgid="5942954724562097128">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> dempt sommige geluiden"</string> <string name="system_error_wipe_data" msgid="6608165524785354962">"Er is een intern probleem met je apparaat. Het apparaat kan instabiel zijn totdat u het apparaat terugzet naar de fabrieksinstellingen."</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 4611d02f0f3f..bac464bf6ad1 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -519,8 +519,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਫ਼ੋਟੋ ਸੰਗ੍ਰਹਿ ਨੂੰ ਸੋਧਣ ਦਿੰਦੀ ਹੈ।"</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"ਤੁਹਾਡੇ ਮੀਡੀਆ ਸੰਗ੍ਰਹਿ ਦੇ ਟਿਕਾਣਿਆਂ ਨੂੰ ਪੜ੍ਹਨਾ"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਮੀਡੀਆ ਸੰਗ੍ਰਹਿ ਦੇ ਟਿਕਾਣਿਆਂ ਨੂੰ ਪੜ੍ਹਨ ਦਿੰਦੀ ਹੈ।"</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"ਪ੍ਰਮਾਣਿਤ ਕਰੋ ਕਿ ਇਹ ਤੁਸੀਂ ਹੀ ਹੋ"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"ਬਾਇਓਮੈਟ੍ਰਿਕ ਹਾਰਡਵੇਅਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"ਪ੍ਰਮਾਣੀਕਰਨ ਰੱਦ ਕੀਤਾ ਗਿਆ"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string> @@ -1206,7 +1205,7 @@ <string name="dump_heap_ready_notification" msgid="1162196579925048701">"<xliff:g id="PROC">%1$s</xliff:g> ਹੀਪ ਡੰਪ ਤਿਆਰ ਹੈ"</string> <string name="dump_heap_notification_detail" msgid="3993078784053054141">"ਹੀਪ ਡੰਪ ਨੂੰ ਇਕੱਤਰ ਕੀਤਾ ਗਿਆ। ਸਾਂਝਾ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string> <string name="dump_heap_title" msgid="5864292264307651673">"ਕੀ ਹੀਪ ਡੰਪ ਸ਼ੇਅਰ ਕਰਨਾ ਹੈ?"</string> - <string name="dump_heap_text" msgid="8546022920319781701">"<xliff:g id="PROC">%1$s</xliff:g> ਪ੍ਰਕਿਰਿਆ ਇਸਦੀ ਮੈਮਰੀ ਸੀਮਾ <xliff:g id="SIZE">%2$s</xliff:g> ਤੋਂ ਵਧ ਗਈ ਹੈ। ਇਸਦੇ ਵਿਕਾਸਕਾਰ ਨਾਲ ਸਾਂਝਾ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਲਈ ਇੱਕ ਹੀਪ ਡੰਪ ਉਪਲਬਧ ਹੈ। ਸਾਵਧਾਨ ਰਹੋ: ਇਸ ਹੀਪ ਡੰਪ ਵਿੱਚ ਤੁਹਾਡੀ ਕੋਈ ਵੀ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਹੋ ਸਕਦੀ ਹੈ, ਜਿਸ \'ਤੇ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਪਹੁੰਚ ਹੈ।"</string> + <string name="dump_heap_text" msgid="8546022920319781701">"<xliff:g id="PROC">%1$s</xliff:g> ਪ੍ਰਕਿਰਿਆ ਇਸਦੀ ਮੈਮੋਰੀ ਸੀਮਾ <xliff:g id="SIZE">%2$s</xliff:g> ਤੋਂ ਵਧ ਗਈ ਹੈ। ਇਸਦੇ ਵਿਕਾਸਕਾਰ ਨਾਲ ਸਾਂਝਾ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਵਾਸਤੇ ਇੱਕ ਹੀਪ ਡੰਪ ਉਪਲਬਧ ਹੈ। ਸਾਵਧਾਨ ਰਹੋ: ਇਸ ਹੀਪ ਡੰਪ ਵਿੱਚ ਤੁਹਾਡੀ ਕੋਈ ਵੀ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਹੋ ਸਕਦੀ ਹੈ, ਜਿਸ \'ਤੇ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਪਹੁੰਚ ਹੈ।"</string> <string name="dump_heap_system_text" msgid="3236094872980706024">"<xliff:g id="PROC">%1$s</xliff:g> ਪ੍ਰਕਿਰਿਆ, ਇਸ ਦੀ ਮੈਮੋਰੀ ਸੀਮਾ <xliff:g id="SIZE">%2$s</xliff:g> ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਸਾਂਝਾ ਕਰਨ ਲਈ ਹੀਪ ਡੰਪ ਤੁਹਾਡੇ ਲਈ ਉਪਲਬਧ ਹੈ। ਸਾਵਧਾਨ ਰਹੋ: ਇਸ ਹੀਪ ਡੰਪ ਵਿੱਚ ਕੋਈ ਵੀ ਸੰਵੇਦਨਸ਼ੀਲ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੋ ਸਕਦੀ ਹੈ, ਜਿਸ \'ਤੇ ਪ੍ਰਕਿਰਿਆ ਦੀ ਪਹੁੰਚ ਹੈ, ਜਿਸ ਵਿੱਚ ਸ਼ਾਇਦ ਤੁਹਾਡੇ ਵੱਲੋਂ ਟਾਈਪ ਕੀਤੀਆਂ ਚੀਜ਼ਾਂ ਸ਼ਾਮਲ ਹੋਣ।"</string> <string name="dump_heap_ready_text" msgid="1778041771455343067">"ਸਾਂਝਾ ਕਰਨ ਲਈ <xliff:g id="PROC">%1$s</xliff:g> ਦੀ ਪ੍ਰਕਿਰਿਆ ਦਾ ਹੀਪ ਡੰਪ ਤੁਹਾਡੇ ਲਈ ਉਪਲਬਧ ਹੈ। ਸਾਵਧਾਨ ਰਹੋ: ਸ਼ਾਇਦ ਇਸ ਹੀਪ ਡੰਪ ਵਿੱਚ ਕੋਈ ਵੀ ਸੰਵੇਦਨਸ਼ੀਲ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੋਵੇ, ਜਿਸ \'ਤੇ ਪ੍ਰਕਿਰਿਆ ਦੀ ਪਹੁੰਚ ਹੈ, ਜਿਸ ਵਿੱਚ ਸ਼ਾਇਦ ਤੁਹਾਡੇ ਵੱਲੋਂ ਟਾਈਪ ਕੀਤੀਆਂ ਚੀਜ਼ਾਂ ਸ਼ਾਮਲ ਹੋਣ।"</string> <string name="sendText" msgid="5209874571959469142">"ਲਿਖਤ ਲਈ ਕੋਈ ਕਾਰਵਾਈ ਚੁਣੋ"</string> @@ -1350,7 +1349,7 @@ <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ਡੀਬਗਿੰਗ ਕਨੈਕਟ ਕੀਤੀ"</string> <string name="adb_active_notification_message" msgid="7463062450474107752">"USB ਡੀਬੱਗਿੰਗ ਬੰਦ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string> <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB ਡੀਬੱਗਿੰਗ ਅਯੋਗ ਬਣਾਉਣ ਲਈ ਚੁਣੋ।"</string> - <string name="test_harness_mode_notification_title" msgid="2216359742631914387">"ਟੈਸਟ ਹਾਰਨੈੱਸ ਮੋਡ ਚਾਲੂ ਕੀਤਾ ਗਿਆ"</string> + <string name="test_harness_mode_notification_title" msgid="2216359742631914387">"ਟੈਸਟ ਹਾਰਨੈੱਸ ਮੋਡ ਚਾਲੂ ਹੈ"</string> <string name="test_harness_mode_notification_message" msgid="1343197173054407119">"ਟੈਸਟ ਹਾਰਨੈੱਸ ਮੋਡ ਬੰਦ ਕਰਨ ਲਈ ਫੈਕਟਰੀ ਰੀਸੈੱਟ ਕਰੋ।"</string> <string name="usb_contaminant_detected_title" msgid="7136400633704058349">"USB ਪੋਰਟ ਵਿੱਚ ਪਾਣੀ ਜਾਂ ਧੂੜ-ਮਿੱਟੀ"</string> <string name="usb_contaminant_detected_message" msgid="832337061059487250">"USB ਪੋਰਟ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਬੰਦ ਕੀਤਾ ਗਿਆ। ਹੋਰ ਜਾਣਨ ਲਈ ਟੈਪ ਕਰੋ।"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 5bf6017842f9..f090ea6d61a7 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -301,7 +301,7 @@ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse sua atividade física?"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"tire fotos e grave vídeos"</string> - <string name="permgrouprequest_camera" msgid="1299833592069671756">"Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tire fotos e grave vídeos?"</string> + <string name="permgrouprequest_camera" msgid="1299833592069671756">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tire fotos e grave vídeos?"</string> <string name="permgrouplab_calllog" msgid="8798646184930388160">"Registro de chamadas"</string> <string name="permgroupdesc_calllog" msgid="3006237336748283775">"ler e gravar o registro de chamadas telefônicas"</string> <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse seu registro de chamadas telefônicas?"</string> @@ -1213,14 +1213,14 @@ <string name="volume_music" msgid="5421651157138628171">"Volume da mídia"</string> <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Reproduzindo por meio de Bluetooth"</string> <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Toque silencioso definido"</string> - <string name="volume_call" msgid="3941680041282788711">"Volume na chamada"</string> - <string name="volume_bluetooth_call" msgid="2002891926351151534">"Volume de chamada Bluetooth"</string> + <string name="volume_call" msgid="3941680041282788711">"Volume das chamadas"</string> + <string name="volume_bluetooth_call" msgid="2002891926351151534">"Volume das chamadas por Bluetooth"</string> <string name="volume_alarm" msgid="1985191616042689100">"Volume do alarme"</string> <string name="volume_notification" msgid="2422265656744276715">"Volume da notificação"</string> <string name="volume_unknown" msgid="1400219669770445902">"Volume"</string> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume de Bluetooth"</string> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume do toque"</string> - <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume de chamadas"</string> + <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume das chamadas"</string> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume da mídia"</string> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume da notificação"</string> <string name="ringtone_default" msgid="3789758980357696936">"Toque padrão"</string> @@ -1361,7 +1361,7 @@ <string name="share_remote_bugreport_action" msgid="6249476773913384948">"COMPARTILHAR"</string> <string name="decline_remote_bugreport_action" msgid="6230987241608770062">"RECUSAR"</string> <string name="select_input_method" msgid="4653387336791222978">"Selecione o método de entrada"</string> - <string name="show_ime" msgid="2506087537466597099">"Manter na tela enquanto o teclado físico estiver ativo"</string> + <string name="show_ime" msgid="2506087537466597099">"Mantém o teclado virtual na tela enquanto o teclado físico está ativo"</string> <string name="hardware" msgid="194658061510127999">"Mostrar teclado virtual"</string> <string name="select_keyboard_layout_notification_title" msgid="597189518763083494">"Configurar teclado físico"</string> <string name="select_keyboard_layout_notification_message" msgid="8084622969903004900">"Toque para selecionar o idioma e o layout"</string> @@ -1796,8 +1796,8 @@ <string name="package_updated_device_owner" msgid="1847154566357862089">"Atualizado pelo seu administrador"</string> <string name="package_deleted_device_owner" msgid="2307122077550236438">"Excluído pelo seu administrador"</string> <string name="confirm_battery_saver" msgid="639106420541753635">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"A \"Economia de bateria\" desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos que consomem muita energia, a fim de prolongar a duração da bateria. "<annotation id="url">"Saiba mais"</annotation></string> - <string name="battery_saver_description" msgid="6413346684861241431">"A \"Economia de bateria\" desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos que consomem muita energia, a fim de prolongar a duração da bateria."</string> + <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"A Economia de bateria desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos que consomem muita energia, a fim de prolongar a duração da bateria. "<annotation id="url">"Saiba mais"</annotation></string> + <string name="battery_saver_description" msgid="6413346684861241431">"A Economia de bateria desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos que consomem muita energia, a fim de prolongar a duração da bateria."</string> <string name="data_saver_description" msgid="6015391409098303235">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode fazer com que imagens não sejam exibidas até que você toque nelas."</string> <string name="data_saver_enable_title" msgid="4674073932722787417">"Ativar Economia de dados?"</string> <string name="data_saver_enable_button" msgid="7147735965247211818">"Ativar"</string> @@ -1991,15 +1991,15 @@ <string name="notification_appops_overlay_active" msgid="633813008357934729">"exibindo sobre outros apps na sua tela"</string> <string name="dynamic_mode_notification_channel_name" msgid="2348803891571320452">"Notificação de informação do modo rotina"</string> <string name="dynamic_mode_notification_title" msgid="508815255807182035">"A bateria pode acabar antes da recarga normal"</string> - <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"A \"Economia de bateria\" foi ativada para aumentar a duração da carga"</string> + <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"A Economia de bateria foi ativada para aumentar a duração da carga"</string> <string name="battery_saver_notification_channel_name" msgid="2083316159716201806">"Economia de bateria"</string> - <string name="battery_saver_sticky_disabled_notification_title" msgid="6376147579378764641">"A \"Economia de bateria\" só será reativada quando a bateria estiver acabando novamente"</string> - <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"A bateria foi carregada até o nível suficiente. A \"Economia de bateria\" só será reativada quando a bateria estiver acabando novamente."</string> + <string name="battery_saver_sticky_disabled_notification_title" msgid="6376147579378764641">"A Economia de bateria só será reativada quando a bateria estiver acabando novamente"</string> + <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"A bateria foi carregada até o nível suficiente. A Economia de bateria só será reativada quando a bateria estiver acabando novamente."</string> <string name="battery_saver_charged_notification_title" product="default" msgid="2960978289873161288">"Smartphone <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> carregado"</string> <string name="battery_saver_charged_notification_title" product="tablet" msgid="7555713825806482451">"Tablet <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> carregado"</string> <string name="battery_saver_charged_notification_title" product="device" msgid="5954873381559605660">"Dispositivo <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> carregado"</string> - <string name="battery_saver_off_notification_summary" msgid="1374222493681267143">"\"Economia de bateria\" desativada. Os recursos não estão mais restritos."</string> - <string name="battery_saver_off_alternative_notification_summary" msgid="4340727818546508436">"\"Economia de bateria\" desativada. Os recursos não estão mais restritos."</string> + <string name="battery_saver_off_notification_summary" msgid="1374222493681267143">"Economia de bateria desativada. Os recursos não estão mais restritos."</string> + <string name="battery_saver_off_alternative_notification_summary" msgid="4340727818546508436">"Economia de bateria desativada. Os recursos não estão mais restritos."</string> <string name="mime_type_folder" msgid="7111951698626315204">"Pasta"</string> <string name="mime_type_apk" msgid="5518003630972506900">"Aplicativo Android"</string> <string name="mime_type_generic" msgid="6833871596845900027">"Arquivo"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 5bf6017842f9..f090ea6d61a7 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -301,7 +301,7 @@ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse sua atividade física?"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"tire fotos e grave vídeos"</string> - <string name="permgrouprequest_camera" msgid="1299833592069671756">"Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tire fotos e grave vídeos?"</string> + <string name="permgrouprequest_camera" msgid="1299833592069671756">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tire fotos e grave vídeos?"</string> <string name="permgrouplab_calllog" msgid="8798646184930388160">"Registro de chamadas"</string> <string name="permgroupdesc_calllog" msgid="3006237336748283775">"ler e gravar o registro de chamadas telefônicas"</string> <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse seu registro de chamadas telefônicas?"</string> @@ -1213,14 +1213,14 @@ <string name="volume_music" msgid="5421651157138628171">"Volume da mídia"</string> <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Reproduzindo por meio de Bluetooth"</string> <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Toque silencioso definido"</string> - <string name="volume_call" msgid="3941680041282788711">"Volume na chamada"</string> - <string name="volume_bluetooth_call" msgid="2002891926351151534">"Volume de chamada Bluetooth"</string> + <string name="volume_call" msgid="3941680041282788711">"Volume das chamadas"</string> + <string name="volume_bluetooth_call" msgid="2002891926351151534">"Volume das chamadas por Bluetooth"</string> <string name="volume_alarm" msgid="1985191616042689100">"Volume do alarme"</string> <string name="volume_notification" msgid="2422265656744276715">"Volume da notificação"</string> <string name="volume_unknown" msgid="1400219669770445902">"Volume"</string> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume de Bluetooth"</string> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume do toque"</string> - <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume de chamadas"</string> + <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume das chamadas"</string> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume da mídia"</string> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume da notificação"</string> <string name="ringtone_default" msgid="3789758980357696936">"Toque padrão"</string> @@ -1361,7 +1361,7 @@ <string name="share_remote_bugreport_action" msgid="6249476773913384948">"COMPARTILHAR"</string> <string name="decline_remote_bugreport_action" msgid="6230987241608770062">"RECUSAR"</string> <string name="select_input_method" msgid="4653387336791222978">"Selecione o método de entrada"</string> - <string name="show_ime" msgid="2506087537466597099">"Manter na tela enquanto o teclado físico estiver ativo"</string> + <string name="show_ime" msgid="2506087537466597099">"Mantém o teclado virtual na tela enquanto o teclado físico está ativo"</string> <string name="hardware" msgid="194658061510127999">"Mostrar teclado virtual"</string> <string name="select_keyboard_layout_notification_title" msgid="597189518763083494">"Configurar teclado físico"</string> <string name="select_keyboard_layout_notification_message" msgid="8084622969903004900">"Toque para selecionar o idioma e o layout"</string> @@ -1796,8 +1796,8 @@ <string name="package_updated_device_owner" msgid="1847154566357862089">"Atualizado pelo seu administrador"</string> <string name="package_deleted_device_owner" msgid="2307122077550236438">"Excluído pelo seu administrador"</string> <string name="confirm_battery_saver" msgid="639106420541753635">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"A \"Economia de bateria\" desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos que consomem muita energia, a fim de prolongar a duração da bateria. "<annotation id="url">"Saiba mais"</annotation></string> - <string name="battery_saver_description" msgid="6413346684861241431">"A \"Economia de bateria\" desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos que consomem muita energia, a fim de prolongar a duração da bateria."</string> + <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"A Economia de bateria desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos que consomem muita energia, a fim de prolongar a duração da bateria. "<annotation id="url">"Saiba mais"</annotation></string> + <string name="battery_saver_description" msgid="6413346684861241431">"A Economia de bateria desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos que consomem muita energia, a fim de prolongar a duração da bateria."</string> <string name="data_saver_description" msgid="6015391409098303235">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode fazer com que imagens não sejam exibidas até que você toque nelas."</string> <string name="data_saver_enable_title" msgid="4674073932722787417">"Ativar Economia de dados?"</string> <string name="data_saver_enable_button" msgid="7147735965247211818">"Ativar"</string> @@ -1991,15 +1991,15 @@ <string name="notification_appops_overlay_active" msgid="633813008357934729">"exibindo sobre outros apps na sua tela"</string> <string name="dynamic_mode_notification_channel_name" msgid="2348803891571320452">"Notificação de informação do modo rotina"</string> <string name="dynamic_mode_notification_title" msgid="508815255807182035">"A bateria pode acabar antes da recarga normal"</string> - <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"A \"Economia de bateria\" foi ativada para aumentar a duração da carga"</string> + <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"A Economia de bateria foi ativada para aumentar a duração da carga"</string> <string name="battery_saver_notification_channel_name" msgid="2083316159716201806">"Economia de bateria"</string> - <string name="battery_saver_sticky_disabled_notification_title" msgid="6376147579378764641">"A \"Economia de bateria\" só será reativada quando a bateria estiver acabando novamente"</string> - <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"A bateria foi carregada até o nível suficiente. A \"Economia de bateria\" só será reativada quando a bateria estiver acabando novamente."</string> + <string name="battery_saver_sticky_disabled_notification_title" msgid="6376147579378764641">"A Economia de bateria só será reativada quando a bateria estiver acabando novamente"</string> + <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"A bateria foi carregada até o nível suficiente. A Economia de bateria só será reativada quando a bateria estiver acabando novamente."</string> <string name="battery_saver_charged_notification_title" product="default" msgid="2960978289873161288">"Smartphone <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> carregado"</string> <string name="battery_saver_charged_notification_title" product="tablet" msgid="7555713825806482451">"Tablet <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> carregado"</string> <string name="battery_saver_charged_notification_title" product="device" msgid="5954873381559605660">"Dispositivo <xliff:g id="CHARGE_LEVEL">%1$s</xliff:g> carregado"</string> - <string name="battery_saver_off_notification_summary" msgid="1374222493681267143">"\"Economia de bateria\" desativada. Os recursos não estão mais restritos."</string> - <string name="battery_saver_off_alternative_notification_summary" msgid="4340727818546508436">"\"Economia de bateria\" desativada. Os recursos não estão mais restritos."</string> + <string name="battery_saver_off_notification_summary" msgid="1374222493681267143">"Economia de bateria desativada. Os recursos não estão mais restritos."</string> + <string name="battery_saver_off_alternative_notification_summary" msgid="4340727818546508436">"Economia de bateria desativada. Os recursos não estão mais restritos."</string> <string name="mime_type_folder" msgid="7111951698626315204">"Pasta"</string> <string name="mime_type_apk" msgid="5518003630972506900">"Aplicativo Android"</string> <string name="mime_type_generic" msgid="6833871596845900027">"Arquivo"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 2683109bd960..3a942b6d18f8 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -307,7 +307,7 @@ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"Открыть приложению <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ к данным о физической активности?"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"снимать фото и видео"</string> - <string name="permgrouprequest_camera" msgid="1299833592069671756">"Разрешить приложению <b>\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"</b> снимать фото и видео?"</string> + <string name="permgrouprequest_camera" msgid="1299833592069671756">"Разрешить приложению <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> снимать фото и видео?"</string> <string name="permgrouplab_calllog" msgid="8798646184930388160">"Список вызовов"</string> <string name="permgroupdesc_calllog" msgid="3006237336748283775">"чтение и запись телефонных звонков"</string> <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Разрешить приложению <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ к списку вызовов?"</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index 8a91f2409452..08a9fbac5005 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -407,7 +407,7 @@ <string name="permdesc_readCalendar" product="tablet" msgid="4993979255403945892">"Ky aplikacion mund të lexojë të gjitha ngjarjet e kalendarit të ruajtura në tabletin tënd dhe të ndajë ose të ruajë të dhënat e kalendarit."</string> <string name="permdesc_readCalendar" product="tv" msgid="8837931557573064315">"Ky aplikacion mund të lexojë të gjitha ngjarjet e kalendarit të ruajtura në televizorin tënd dhe të ndajë ose të ruajë të dhënat e kalendarit."</string> <string name="permdesc_readCalendar" product="default" msgid="4373978642145196715">"Ky aplikacion mund të lexojë të gjitha ngjarjet e kalendarit të ruajtura në telefonin tënd dhe të ndajë ose të ruajë të dhënat e kalendarit."</string> - <string name="permlab_writeCalendar" msgid="8438874755193825647">"shto ose modifiko ngjarjet e kalendarit dhe dërgoju mail të ftuarve, pa dijeninë e zotëruesve"</string> + <string name="permlab_writeCalendar" msgid="8438874755193825647">"shto ose modifiko ngjarjet e kalendarit dhe dërgoju email të ftuarve pa dijeninë e zotëruesve"</string> <string name="permdesc_writeCalendar" product="tablet" msgid="1675270619903625982">"Ky aplikacion mund të shtojë, të heqë ose të ndryshojë ngjarjet e kalendarit në tabletin tënd. Ky aplikacion mund të dërgojë mesazhe që mund të duket se vijnë nga zotëruesit e kalendarit ose të ndryshojë ngjarjet pa i njoftuar zotëruesit e tyre."</string> <string name="permdesc_writeCalendar" product="tv" msgid="9017809326268135866">"Ky aplikacion mund të shtojë, të heqë ose të ndryshojë ngjarjet e kalendarit në televizorin tënd. Ky aplikacion mund të dërgojë mesazhe që mund të duket se vijnë nga zotëruesit e kalendarit ose të ndryshojë ngjarjet pa i njoftuar zotëruesit e tyre."</string> <string name="permdesc_writeCalendar" product="default" msgid="7592791790516943173">"Ky aplikacion mund të shtojë, të heqë ose të ndryshojë ngjarjet e kalendarit në telefonin tënd. Ky aplikacion mund të dërgojë mesazhe që mund të duket se vijnë nga zotëruesit e kalendarit ose të ndryshojë ngjarjet pa i njoftuar zotëruesit e tyre."</string> @@ -1153,7 +1153,7 @@ <string name="aerr_application_repeated" msgid="3146328699537439573">"<xliff:g id="APPLICATION">%1$s</xliff:g> vazhdon të ndalojë"</string> <string name="aerr_process_repeated" msgid="6235302956890402259">"<xliff:g id="PROCESS">%1$s</xliff:g> vazhdon të ndalojë"</string> <string name="aerr_restart" msgid="7581308074153624475">"Hap përsëri aplikacionin"</string> - <string name="aerr_report" msgid="5371800241488400617">"Dërgo komentin"</string> + <string name="aerr_report" msgid="5371800241488400617">"Dërgo koment"</string> <string name="aerr_close" msgid="2991640326563991340">"Mbyll"</string> <string name="aerr_mute" msgid="1974781923723235953">"Vendose në heshtje deri kur të riniset pajisja"</string> <string name="aerr_wait" msgid="3199956902437040261">"Prit!"</string> @@ -1924,7 +1924,7 @@ <string name="time_picker_minute_label" msgid="5168864173796598399">"minutë"</string> <string name="time_picker_header_text" msgid="143536825321922567">"Vendos orën"</string> <string name="time_picker_input_error" msgid="7574999942502513765">"Fut një kohë të vlefshme"</string> - <string name="time_picker_prompt_label" msgid="7588093983899966783">"Shkruaj kohën"</string> + <string name="time_picker_prompt_label" msgid="7588093983899966783">"Shkruaj orën"</string> <string name="time_picker_text_input_mode_description" msgid="4148166758173708199">"Kalo te modaliteti i hyrjes së tekstit për hyrjen e kohës."</string> <string name="time_picker_radial_mode_description" msgid="4953403779779557198">"Kalo te modaliteti i orës për hyrjen e kohës."</string> <string name="autofill_picker_accessibility_title" msgid="8469043291648711535">"Opsionet e plotësimit automatik"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 8ab8b8ff6b10..006d6ad44bba 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -302,12 +302,9 @@ <string name="permgrouplab_microphone" msgid="171539900250043464">"மைக்ரோஃபோன்"</string> <string name="permgroupdesc_microphone" msgid="4988812113943554584">"ஒலிப் பதிவு செய்யலாம்"</string> <string name="permgrouprequest_microphone" msgid="9167492350681916038">"ஆடியோவைப் பதிவு செய்ய <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> பயன்பாட்டை அனுமதிக்கவா?"</string> - <!-- no translation found for permgrouplab_activityRecognition (1565108047054378642) --> - <skip /> - <!-- no translation found for permgroupdesc_activityRecognition (6949472038320473478) --> - <skip /> - <!-- no translation found for permgrouprequest_activityRecognition (7626438016904799383) --> - <skip /> + <string name="permgrouplab_activityRecognition" msgid="1565108047054378642">"உடல் செயல்பாடுகள்"</string> + <string name="permgroupdesc_activityRecognition" msgid="6949472038320473478">"உடல் செயல்பாட்டைக் கண்காணிக்கும்"</string> + <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"உடல் செயல்பாட்டைக் கண்காணிக்க <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ஆப்ஸை அனுமதிக்கவா?"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"கேமரா"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"படங்கள் மற்றும் வீடியோக்கள் எடுக்கலாம்"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"படங்கள் எடுக்கவும், வீடியோ பதிவு செய்யவும் <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ஆப்ஸை அனுமதிக்கவா?"</string> @@ -530,8 +527,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"உங்களின் படத் தொகுப்பை மாற்ற ஆப்ஸை அனுமதிக்கும்."</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"மீடியா தொகுப்பிலிருந்து இடங்களை அறிதல்"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"உங்களின் மீடியா தொகுப்பிலிருந்து இடங்களை அறிந்துகொள்ள ஆப்ஸை அனுமதிக்கும்."</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"நீங்கள்தான் என உறுதிசெய்க"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"பயோமெட்ரிக் வன்பொருள் இல்லை"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"அங்கீகரிப்பு ரத்தானது"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"அடையாளங்காணபடவில்லை"</string> @@ -604,25 +600,18 @@ <skip /> <string-array name="face_acquired_vendor"> </string-array> - <!-- no translation found for face_error_hw_not_available (396883585636963908) --> - <skip /> + <string name="face_error_hw_not_available" msgid="396883585636963908">"முகத்தைச் சரிபார்க்க இயலவில்லை. வன்பொருள் இல்லை."</string> <!-- no translation found for face_error_timeout (2605673935810019129) --> <skip /> - <!-- no translation found for face_error_no_space (2712120617457553825) --> - <skip /> - <!-- no translation found for face_error_canceled (2768146728600802422) --> - <skip /> - <!-- no translation found for face_error_user_canceled (9003022830076496163) --> - <skip /> + <string name="face_error_no_space" msgid="2712120617457553825">"புதிய முகங்களைச் சேர்க்க இயலவில்லை. பழையது ஒன்றை நீக்கவும்."</string> + <string name="face_error_canceled" msgid="2768146728600802422">"முக அங்கீகாரச் செயல்பாடு ரத்துசெய்யப்பட்டது"</string> + <string name="face_error_user_canceled" msgid="9003022830076496163">"முக அங்கீகாரம் பயனரால் ரத்துசெய்யப்பட்டது"</string> <string name="face_error_lockout" msgid="3407426963155388504">"பலமுறை முயன்றுவிட்டீர்கள். பிறகு முயலவும்."</string> - <!-- no translation found for face_error_lockout_permanent (3485837851962070925) --> - <skip /> + <string name="face_error_lockout_permanent" msgid="3485837851962070925">"பலமுறை முயன்றுவிட்டீர்கள். முக அங்கீகாரம் முடக்கப்பட்டது."</string> <!-- no translation found for face_error_unable_to_process (4940944939691171539) --> <skip /> - <!-- no translation found for face_error_not_enrolled (2600952202843125796) --> - <skip /> - <!-- no translation found for face_error_hw_not_present (1317845121210260372) --> - <skip /> + <string name="face_error_not_enrolled" msgid="2600952202843125796">"முக அங்கீகாரத்தை இன்னும் நீங்கள் அமைக்கவில்லை"</string> + <string name="face_error_hw_not_present" msgid="1317845121210260372">"இந்தச் சாதனத்தில் முக அங்கீகாரம் ஆதரிக்கப்படவில்லை"</string> <string name="face_name_template" msgid="7004562145809595384">"முகம் <xliff:g id="FACEID">%d</xliff:g>"</string> <string-array name="face_error_vendor"> </string-array> @@ -1246,10 +1235,8 @@ <string name="dump_heap_title" msgid="5864292264307651673">"ஹீப் டம்பைப் பகிரவா?"</string> <!-- no translation found for dump_heap_text (8546022920319781701) --> <skip /> - <!-- no translation found for dump_heap_system_text (3236094872980706024) --> - <skip /> - <!-- no translation found for dump_heap_ready_text (1778041771455343067) --> - <skip /> + <string name="dump_heap_system_text" msgid="3236094872980706024">"<xliff:g id="SIZE">%2$s</xliff:g> அளவான தனது நினைவக வரம்பை <xliff:g id="PROC">%1$s</xliff:g> செயலாக்கம் மீறியுள்ளது. உங்களுக்கான ஹீப் டம்ப் பகிர்வதற்குக் கிடைக்கிறது. கவனத்திற்கு: நீங்கள் உள்ளிட்டவை உட்பட செயலாக்கத்திற்கு அணுகலுள்ள தனிப்பட்ட தகவல்கள் இந்த ஹீப் டம்பில் இருக்கக்கூடும்"</string> + <string name="dump_heap_ready_text" msgid="1778041771455343067">"<xliff:g id="PROC">%1$s</xliff:g> செயலாக்கத்திற்கான ஹீப் டம்ப் நீங்கள் பகிர்வதற்குக் கிடைக்கிறது. கவனத்திற்கு: நீங்கள் உள்ளிட்டவை உட்பட செயலாக்கத்திற்கு அணுகலுள்ள தனிப்பட்ட தகவல்கள் இந்த ஹீப் டம்பில் இருக்கக்கூடும்."</string> <string name="sendText" msgid="5209874571959469142">"உரைக்கான செயலைத் தேர்வுசெய்யவும்"</string> <string name="volume_ringtone" msgid="6885421406845734650">"ரிங்கரின் ஒலியளவு"</string> <string name="volume_music" msgid="5421651157138628171">"மீடியாவின் ஒலியளவு"</string> @@ -1656,10 +1643,8 @@ <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"மேலோட்ட #<xliff:g id="ID">%1$d</xliff:g>"</string> <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string> <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", பாதுகாப்பானது"</string> - <!-- no translation found for activity_starter_block_bg_activity_starts_permissive (6995473033438879646) --> - <skip /> - <!-- no translation found for activity_starter_block_bg_activity_starts_enforcing (3317816771072146229) --> - <skip /> + <string name="activity_starter_block_bg_activity_starts_permissive" msgid="6995473033438879646">"<xliff:g id="PACKAGENAME">%1$s</xliff:g>மின் \'பின்னணிச் செயல்பாடுத் தொடக்கம்\' இனிவரும் Q பதிப்புகளில் தடுக்கப்படும். g.co/dev/bgblock என்ற இணைப்பைப் பார்க்கவும்."</string> + <string name="activity_starter_block_bg_activity_starts_enforcing" msgid="3317816771072146229">"<xliff:g id="PACKAGENAME">%1$s</xliff:g>மில் \'பின்னணிச் செயல்பாட்டுத் தொடக்கம்\' தடுக்கப்பட்டுள்ளது. g.co/dev/bgblock என்ற இணைப்பைப் பார்க்கவும்."</string> <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"வடிவத்தை மறந்துவிட்டீர்களா"</string> <string name="kg_wrong_pattern" msgid="1850806070801358830">"தவறான வடிவம்"</string> <string name="kg_wrong_password" msgid="2333281762128113157">"தவறான கடவுச்சொல்"</string> @@ -1965,7 +1950,7 @@ <string name="conference_call" msgid="3751093130790472426">"குழு அழைப்பு"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"உதவிக்குறிப்பு"</string> <string name="app_category_game" msgid="5431836943981492993">"கேம்ஸ்"</string> - <string name="app_category_audio" msgid="1659853108734301647">"இசையும் ஆடியோவும்"</string> + <string name="app_category_audio" msgid="1659853108734301647">"இசை & ஆடியோ"</string> <string name="app_category_video" msgid="2728726078629384196">"திரைப்படங்களும் வீடியோவும்"</string> <string name="app_category_image" msgid="4867854544519846048">"புகைப்படங்களும் படங்களும்"</string> <string name="app_category_social" msgid="5842783057834965912">"சமூகமும் தகவல்தொடர்பும்"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 9904cfa1f586..1662be72e28b 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -519,8 +519,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"మీ ఫోటో సేకరణను సవరించడానికి యాప్ను అనుమతిస్తుంది."</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"మీ మీడియా సేకరణ నుండి స్థానాలను చదవండి"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"మీ మీడియా సేకరణ నుండి స్థానాలను చదవడానికి యాప్ను అనుమతిస్తుంది."</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"ఇది మీరేనని ధృవీకరించండి"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"బయోమెట్రిక్ హార్డ్వేర్ అందుబాటులో లేదు"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"ప్రమాణీకరణ రద్దు చేయబడింది"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"గుర్తించలేదు"</string> @@ -572,7 +571,7 @@ <string name="face_acquired_pan_too_extreme" msgid="1852495480382773759">"దయచేసి స్క్రీన్ వైపు మరింత సూటిగా చూడండి."</string> <string name="face_acquired_tilt_too_extreme" msgid="1290820400317982049">"దయచేసి స్క్రీన్ వైపు మరింత సూటిగా చూడండి."</string> <string name="face_acquired_roll_too_extreme" msgid="1444829237745898619">"దయచేసి మీ తలను నిలువుగా, నిటారుగా ఉంచండి."</string> - <string name="face_acquired_obscured" msgid="5747521031647744553">"మీ తలకు, ఫోన్కు మధ్యన ఖాళీ తగ్గించండి."</string> + <string name="face_acquired_obscured" msgid="5747521031647744553">"మీ తలకు, ఫోన్కు మధ్యన ఏదీ లేదని నిర్దారించుకోండి."</string> <string name="face_acquired_sensor_dirty" msgid="364493868630891300">"దయచేసి కెమెరాను శుభ్రం చేయండి."</string> <string-array name="face_acquired_vendor"> </string-array> @@ -908,7 +907,7 @@ <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nమీరు ఖచ్చితంగా ఈ పేజీ నుండి వెలుపలకు నావిగేట్ చేయాలనుకుంటున్నారా?"</string> <string name="save_password_label" msgid="6860261758665825069">"నిర్ధారించండి"</string> <string name="double_tap_toast" msgid="4595046515400268881">"చిట్కా: దగ్గరకు మరియు దూరానికి జూమ్ చేయడానికి రెండు సార్లు నొక్కండి."</string> - <string name="autofill_this_form" msgid="4616758841157816676">"స్వీయ పూరింపు"</string> + <string name="autofill_this_form" msgid="4616758841157816676">"ఆటోఫిల్"</string> <string name="setup_autofill" msgid="7103495070180590814">"స్వీయ పూరణను సెటప్ చేయండి"</string> <string name="autofill_window_title" msgid="4107745526909284887">"<xliff:g id="SERVICENAME">%1$s</xliff:g> ద్వారా స్వీయ పూరింపు చేయండి"</string> <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string> @@ -1078,7 +1077,7 @@ <string name="selectTextMode" msgid="1018691815143165326">"వచనాన్ని ఎంచుకోండి"</string> <string name="undo" msgid="7905788502491742328">"చర్య రద్దు చేయి"</string> <string name="redo" msgid="7759464876566803888">"చర్యను పునరావృతం చేయి"</string> - <string name="autofill" msgid="3035779615680565188">"స్వీయ పూరింపు"</string> + <string name="autofill" msgid="3035779615680565188">"ఆటోఫిల్"</string> <string name="textSelectionCABTitle" msgid="5236850394370820357">"వచన ఎంపిక"</string> <string name="addToDictionary" msgid="4352161534510057874">"నిఘంటువుకు జోడించు"</string> <string name="deleteText" msgid="6979668428458199034">"తొలగించు"</string> @@ -1118,7 +1117,7 @@ <string name="dialog_alert_title" msgid="2049658708609043103">"గమనిక"</string> <string name="loading" msgid="7933681260296021180">"లోడ్ చేస్తోంది…"</string> <string name="capital_on" msgid="1544682755514494298">"ఆన్లో ఉంది"</string> - <string name="capital_off" msgid="6815870386972805832">"ఆఫ్లో ఉంది"</string> + <string name="capital_off" msgid="6815870386972805832">"ఆఫ్"</string> <string name="whichApplication" msgid="4533185947064773386">"దీన్ని ఉపయోగించి చర్యను పూర్తి చేయండి"</string> <string name="whichApplicationNamed" msgid="8260158865936942783">"%1$sను ఉపయోగించి చర్యను పూర్తి చేయి"</string> <string name="whichApplicationLabel" msgid="7425855495383818784">"చర్యను పూర్తి చేయి"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index a8926324e543..f47c39271b96 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -526,7 +526,7 @@ <string name="biometric_error_canceled" msgid="349665227864885880">"ยกเลิกการตรวจสอบสิทธิ์แล้ว"</string> <string name="biometric_error_device_not_secured" msgid="6583143098363528349">"ไม่ได้ตั้ง PIN, รูปแบบ หรือรหัสผ่าน"</string> <string name="fingerprint_acquired_partial" msgid="735082772341716043">"ตรวจพบลายนิ้วมือเพียงบางส่วน โปรดลองอีกครั้ง"</string> - <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ไม่สามารถประมวลผลลายนิ้วมือได้ โปรดลองอีกครั้ง"</string> + <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ประมวลผลลายนิ้วมือไม่ได้ โปรดลองอีกครั้ง"</string> <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"เซ็นเซอร์ลายนิ้วมือไม่สะอาด โปรดทำความสะอาดและลองอีกครั้ง"</string> <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"เคลื่อนนิ้วเร็วเกินไป โปรดลองอีกครั้ง"</string> <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"นิ้วเคลื่อนที่ช้าเกินไป โปรดลองอีกครั้ง"</string> @@ -661,7 +661,7 @@ <string name="policylab_wipeData" msgid="3910545446758639713">"ลบข้อมูลทั้งหมด"</string> <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"ลบข้อมูลของแท็บเล็ตโดยไม่มีการเตือน ด้วยการดำเนินการรีเซ็ตข้อมูลเป็นค่าเริ่มต้น"</string> <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"ลบข้อมูลของทีวีโดยไม่ต้องมีคำเตือนโดยการรีเซ็ตข้อมูลเป็นค่าเริ่มต้น"</string> - <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"ลบข้อมูลของโทรศัพท์โดยไม่มีการเตือน ด้วยการดำเนินการรีเซ็ตข้อมูลเป็นค่าเริ่มต้น"</string> + <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"ลบข้อมูลโทรศัพท์โดยไม่มีการเตือน ด้วยการรีเซ็ตข้อมูลเป็นค่าเริ่มต้น"</string> <string name="policylab_wipeData_secondaryUser" msgid="8362863289455531813">"ลบข้อมูลผู้ใช้"</string> <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="6336255514635308054">"ลบข้อมูลของผู้ใช้นี้ในแท็บเล็ตเครื่องนี้โดยไม่มีการเตือน"</string> <string name="policydesc_wipeData_secondaryUser" product="tv" msgid="2086473496848351810">"ลบข้อมูลของผู้ใช้นี้ในทีวีเครื่องนี้โดยไม่มีการเตือน"</string> @@ -1616,7 +1616,7 @@ <item quantity="other">ลองอีกครั้งใน <xliff:g id="NUMBER">%d</xliff:g> วินาที</item> <item quantity="one">ลองอีกครั้งใน 1 วินาที</item> </plurals> - <string name="kg_pattern_instructions" msgid="398978611683075868">"วาดรูปแบบของคุณ"</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"ลากรูปแบบของคุณ"</string> <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"ป้อน PIN ของซิม"</string> <string name="kg_pin_instructions" msgid="2377242233495111557">"ป้อน PIN"</string> <string name="kg_password_instructions" msgid="5753646556186936819">"ป้อนรหัสผ่าน"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 3c56b01ef7a9..fa5c47961141 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -301,7 +301,7 @@ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasına fiziksel aktivitenize erişme izni verilsin mi?"</string> <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotoğraf çekme ve video kaydetme"</string> - <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasının resim çekmesine ve video kaydı yapmasına izin verilsin mi?"</string> + <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasının fotoğraf çekmesine ve video kaydı yapmasına izin verilsin mi?"</string> <string name="permgrouplab_calllog" msgid="8798646184930388160">"Arama kayıtları"</string> <string name="permgroupdesc_calllog" msgid="3006237336748283775">"telefon arama kaydını okuma ve yazma"</string> <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Telefon arama kayıtlarınıza erişmek için <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasına izin verilsin mi?"</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index e99eebb1d768..4f42e73d7277 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -527,8 +527,7 @@ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"ایپ کو آپ کی تصویر کے مجموعے میں ترمیم کی اجازت دیتا ہے۔"</string> <string name="permlab_mediaLocation" msgid="8675148183726247864">"اپنی میڈيا کے مجموعے سے مقامات پڑھیں"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"ایپ کو آپ کی میڈيا کے مجموعے سے مقامات پڑھنے کی اجازت دیتا ہے۔"</string> - <!-- no translation found for biometric_dialog_default_title (881952973720613213) --> - <skip /> + <string name="biometric_dialog_default_title" msgid="881952973720613213">"توثیق کریں کہ یہ آپ ہیں"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"بایومیٹرک ہارڈ ویئر دستیاب نہیں ہے"</string> <string name="biometric_error_user_canceled" msgid="2260175018114348727">"تصدیق کا عمل منسوخ ہو گیا"</string> <string name="biometric_not_recognized" msgid="5770511773560736082">"تسلیم شدہ نہیں ہے"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 123552d7ac71..322582dd3e7d 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -140,7 +140,7 @@ <string name="wfcSpnFormat_wifi" msgid="1892673884655959773">"Wi-Fi"</string> <string name="wfcSpnFormat_wifi_calling_wo_hyphen" msgid="1336669776254502831">"Wi-Fi chaqiruv"</string> <string name="wfcSpnFormat_vowifi" msgid="1765176406171272629">"VoWi-Fi"</string> - <string name="wifi_calling_off_summary" msgid="8720659586041656098">"O‘chiq"</string> + <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Yoqilmagan"</string> <string name="wfc_mode_wifi_preferred_summary" msgid="7335489823608689868">"Wi-Fi orqali chaqiruv"</string> <string name="wfc_mode_cellular_preferred_summary" msgid="7081742743152286290">"Mobil tarmoq orqali chaqiruv"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Faqat Wi-Fi"</string> @@ -280,9 +280,9 @@ <string name="permgrouprequest_contacts" msgid="6032805601881764300">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun kontaktlaringizga ruxsat berilsinmi?"</string> <string name="permgrouplab_location" msgid="7275582855722310164">"Joylashuv"</string> <string name="permgroupdesc_location" msgid="1346617465127855033">"shu qurilmaning joylashuvi haqidagi axborotga kirish"</string> - <string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun bu qurilmaning joylashuvi haqidagi axborotdan foydalanishiga ruxsat berilsinmi?"</string> + <string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun bu qurilmaning joylashuvi haqidagi axborotdan foydalanishga ruxsat berilsinmi?"</string> <string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Bu ilovadan foydalanilayotdangina u joylashuv axborotidan foydalana oladi"</string> - <string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ilovasiga bu qurilmaning joylashuv axboroti uchun <b>doimiy</b> ruxsat berilsinmi?"</string> + <string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun bu qurilmaning joylashuvi haqidagi axborotdan <b>doim</b> foydalanish ruxsati berilsinmi?"</string> <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Ilova hozirda joylashuv axborotidan faqat ilova ishlatilayotgandagina foydala oladi"</string> <string name="permgrouplab_calendar" msgid="5863508437783683902">"Taqvim"</string> <string name="permgroupdesc_calendar" msgid="3889615280211184106">"taqvimingizga kirish"</string> @@ -981,8 +981,8 @@ <string name="days" msgid="4774547661021344602">"kun"</string> <string name="hour" msgid="2126771916426189481">"soat"</string> <string name="hours" msgid="894424005266852993">"soat"</string> - <string name="minute" msgid="9148878657703769868">"daq."</string> - <string name="minutes" msgid="5646001005827034509">"daq."</string> + <string name="minute" msgid="9148878657703769868">"daqiqa"</string> + <string name="minutes" msgid="5646001005827034509">"daqiqa"</string> <string name="second" msgid="3184235808021478">"sek"</string> <string name="seconds" msgid="3161515347216589235">"sek"</string> <string name="week" msgid="5617961537173061583">"hafta"</string> @@ -1836,8 +1836,8 @@ </plurals> <string name="zen_mode_until" msgid="7336308492289875088">"<xliff:g id="FORMATTEDTIME">%1$s</xliff:g> gacha"</string> <string name="zen_mode_alarm" msgid="9128205721301330797">"<xliff:g id="FORMATTEDTIME">%1$s</xliff:g> gacha (keyingi signal)"</string> - <string name="zen_mode_forever" msgid="931849471004038757">"O‘chirmaguningizcha"</string> - <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"“Bezovta qilinmasin” rejimi o‘chirilmaguncha"</string> + <string name="zen_mode_forever" msgid="931849471004038757">"Rejimdan chiqilgunicha"</string> + <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"Bezovta qilinmasin rejimidan chiqilgunicha"</string> <string name="zen_mode_rule_name_combination" msgid="191109939968076477">"<xliff:g id="FIRST">%1$s</xliff:g> / <xliff:g id="REST">%2$s</xliff:g>"</string> <string name="toolbar_collapse_description" msgid="2821479483960330739">"Yig‘ish"</string> <string name="zen_mode_feature_name" msgid="5254089399895895004">"Bezovta qilinmasin"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 44a7e0691b1a..9b7b464e49e2 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -280,7 +280,7 @@ <string name="permgrouprequest_contacts" msgid="6032805601881764300">"允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>访问您的通讯录吗?"</string> <string name="permgrouplab_location" msgid="7275582855722310164">"位置信息"</string> <string name="permgroupdesc_location" msgid="1346617465127855033">"获取此设备的位置信息"</string> - <string name="permgrouprequest_location" msgid="3788275734953323491">"要允许“<xliff:g id="APP_NAME">%1$s</xliff:g>”获取此设备的位置信息吗?"</string> + <string name="permgrouprequest_location" msgid="3788275734953323491">"要允许<xliff:g id="APP_NAME">%1$s</xliff:g>获取此设备的位置信息吗?"</string> <string name="permgrouprequestdetail_location" msgid="1347189607421252902">"只有当您使用该应用时,该应用才有权访问位置信息"</string> <string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"要<b>一律允许</b>允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>访问此设备的位置信息吗?"</string> <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"目前只有当您使用该应用时,该应用才能访问位置信息"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 1e15f186c91a..c633449e89b0 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -1797,7 +1797,7 @@ <string name="package_deleted_device_owner" msgid="2307122077550236438">"已由您的管理員刪除"</string> <string name="confirm_battery_saver" msgid="639106420541753635">"好"</string> <string name="battery_saver_description_with_learn_more" msgid="2108984221113106294">"省電模式會關閉或限制背景活動、某些視覺效果以及其他高耗電功能,以延長電池壽命。"<annotation id="url">"瞭解詳情"</annotation></string> - <string name="battery_saver_description" msgid="6413346684861241431">"省電模式會關閉或限制背景活動、某些視覺效果以及其他高耗電功能,以延長電池壽命。"</string> + <string name="battery_saver_description" msgid="6413346684861241431">"「省電模式」會關閉或限制背景活動、某些視覺效果和其他耗電量高的功能,以延長電池壽命。"</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> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index be9972892358..f27f34ae3420 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2398,9 +2398,14 @@ <!-- Maximum velocity to initiate a fling, as measured in dips per second. --> <dimen name="config_viewMaxFlingVelocity">8000dp</dimen> - <!-- Amount of time in ms the user needs to press the relevant key to bring up the global actions dialog --> + <!-- Amount of time in ms the user needs to press the relevant key to bring up the + global actions dialog --> <integer name="config_globalActionsKeyTimeout">500</integer> + <!-- Amount of time in ms the user needs to press the relevant keys to trigger the + screenshot chord --> + <integer name="config_screenshotChordKeyTimeout">500</integer> + <!-- Default width of a vertical scrollbar and height of a horizontal scrollbar. Takes effect only if the scrollbar drawables have no intrinsic size. --> <dimen name="config_scrollbarSize">4dp</dimen> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 0304d8220152..e9ce6ac93973 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1484,6 +1484,7 @@ <java-symbol type="drawable" name="ic_settings_print" /> <java-symbol type="drawable" name="ic_signal_location" /> <java-symbol type="drawable" name="ic_info_outline_24" /> + <java-symbol type="drawable" name="ic_qs_ui_mode_night" /> <java-symbol type="drawable" name="stat_notify_mmcc_indication_icn" /> <java-symbol type="drawable" name="autofilled_highlight"/> @@ -2228,6 +2229,7 @@ <java-symbol type="id" name="button_always" /> <java-symbol type="id" name="button_app_settings" /> <java-symbol type="integer" name="config_globalActionsKeyTimeout" /> + <java-symbol type="integer" name="config_screenshotChordKeyTimeout" /> <java-symbol type="integer" name="config_maxResolverActivityColumns" /> <java-symbol type="array" name="config_notificationSignalExtractors" /> diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml index 78a8db420a67..03fb1fc72b45 100644 --- a/core/res/res/values/themes_device_defaults.xml +++ b/core/res/res/values/themes_device_defaults.xml @@ -1725,5 +1725,7 @@ easier. </style> <!-- @hide DeviceDefault theme for the DocumentsUI app. --> - <style name="Theme.DeviceDefault.DocumentsUI" parent="Theme.DeviceDefault.DayNight" /> + <style name="Theme.DeviceDefault.DocumentsUI" parent="Theme.DeviceDefault.DayNight"> + <item name="actionModeCloseDrawable">@drawable/ic_clear_material</item> + </style> </resources> diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java index 655070722c9a..fafd8333f236 100644 --- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java +++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java @@ -708,7 +708,8 @@ public class SettingsBackupTest { Settings.Secure.FLASHLIGHT_ENABLED, Settings.Secure.CROSS_PROFILE_CALENDAR_ENABLED, Settings.Secure.LOCATION_ACCESS_CHECK_INTERVAL_MILLIS, - Settings.Secure.LOCATION_ACCESS_CHECK_DELAY_MILLIS); + Settings.Secure.LOCATION_ACCESS_CHECK_DELAY_MILLIS, + Settings.Secure.BIOMETRIC_DEBUG_ENABLED); @Test public void systemSettingsBackedUpOrBlacklisted() { diff --git a/data/etc/com.android.systemui.xml b/data/etc/com.android.systemui.xml index 3562a8f81408..a4337cc8ce79 100644 --- a/data/etc/com.android.systemui.xml +++ b/data/etc/com.android.systemui.xml @@ -35,6 +35,7 @@ <permission name="android.permission.MANAGE_USERS"/> <permission name="android.permission.MASTER_CLEAR"/> <permission name="android.permission.MEDIA_CONTENT_CONTROL"/> + <permission name="android.permission.MODIFY_DAY_NIGHT_MODE"/> <permission name="android.permission.MODIFY_PHONE_STATE"/> <permission name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <permission name="android.permission.OVERRIDE_WIFI_CONFIG"/> diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index 170dec26f361..07f81c18e1ca 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -763,6 +763,18 @@ public final class Bitmap implements Parcelable { } /** + * Utility method to create a hardware backed bitmap using the graphics buffer. + * @hide + */ + @Nullable + public static Bitmap wrapHardwareBuffer(@NonNull GraphicBuffer graphicBuffer, + @Nullable ColorSpace colorSpace) { + try (HardwareBuffer hb = HardwareBuffer.createFromGraphicBuffer(graphicBuffer)) { + return wrapHardwareBuffer(hb, colorSpace); + } + } + + /** * Creates a new bitmap, scaled from an existing bitmap, when possible. If the * specified width and height are the same as the current width and height of * the source bitmap, the source bitmap is returned and no new bitmap is diff --git a/keystore/java/android/security/keystore/KeyGenParameterSpec.java b/keystore/java/android/security/keystore/KeyGenParameterSpec.java index c4df2744eed9..bd6ce7ec6a3b 100644 --- a/keystore/java/android/security/keystore/KeyGenParameterSpec.java +++ b/keystore/java/android/security/keystore/KeyGenParameterSpec.java @@ -22,7 +22,8 @@ import android.annotation.Nullable; import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.app.KeyguardManager; -import android.hardware.fingerprint.FingerprintManager; +import android.hardware.biometrics.BiometricManager; +import android.hardware.biometrics.BiometricPrompt; import android.security.GateKeeper; import android.security.KeyStore; import android.text.TextUtils; @@ -670,9 +671,9 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu } /** - * Returns {@code true} if the key is irreversibly invalidated when a new fingerprint is - * enrolled or all enrolled fingerprints are removed. This has effect only for keys that - * require fingerprint user authentication for every use. + * Returns {@code true} if the key is irreversibly invalidated when a new biometric is + * enrolled or all enrolled biometrics are removed. This has effect only for keys that + * require biometric user authentication for every use. * * @see #isUserAuthenticationRequired() * @see #getUserAuthenticationValidityDurationSeconds() @@ -1098,19 +1099,19 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu * <li>The key can only be generated if secure lock screen is set up (see * {@link KeyguardManager#isDeviceSecure()}). Additionally, if the key requires that user * authentication takes place for every use of the key (see - * {@link #setUserAuthenticationValidityDurationSeconds(int)}), at least one fingerprint - * must be enrolled (see {@link FingerprintManager#hasEnrolledFingerprints()}).</li> + * {@link #setUserAuthenticationValidityDurationSeconds(int)}), at least one biometric + * must be enrolled (see {@link BiometricManager#canAuthenticate()}).</li> * <li>The use of the key must be authorized by the user by authenticating to this Android * device using a subset of their secure lock screen credentials such as - * password/PIN/pattern or fingerprint. + * password/PIN/pattern or biometric. * <a href="{@docRoot}training/articles/keystore.html#UserAuthentication">More * information</a>. * <li>The key will become <em>irreversibly invalidated</em> once the secure lock screen is * disabled (reconfigured to None, Swipe or other mode which does not authenticate the user) * or when the secure lock screen is forcibly reset (e.g., by a Device Administrator). * Additionally, if the key requires that user authentication takes place for every use of - * the key, it is also irreversibly invalidated once a new fingerprint is enrolled or once\ - * no more fingerprints are enrolled, unless {@link + * the key, it is also irreversibly invalidated once a new biometric is enrolled or once\ + * no more biometrics are enrolled, unless {@link * #setInvalidatedByBiometricEnrollment(boolean)} is used to allow validity after * enrollment. Attempts to initialize cryptographic operations using such keys will throw * {@link KeyPermanentlyInvalidatedException}.</li> @@ -1121,7 +1122,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu * * @see #setUserAuthenticationValidityDurationSeconds(int) * @see KeyguardManager#isDeviceSecure() - * @see FingerprintManager#hasEnrolledFingerprints() + * @see BiometricManager#canAuthenticate() */ @NonNull public Builder setUserAuthenticationRequired(boolean required) { @@ -1161,10 +1162,10 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu * the key. * * <p>Cryptographic operations involving keys which require user authentication to take - * place for every operation can only use fingerprint authentication. This is achieved by + * place for every operation can only use biometric authentication. This is achieved by * initializing a cryptographic operation ({@link Signature}, {@link Cipher}, {@link Mac}) - * with the key, wrapping it into a {@link FingerprintManager.CryptoObject}, invoking - * {@code FingerprintManager.authenticate} with {@code CryptoObject}, and proceeding with + * with the key, wrapping it into a {@link BiometricPrompt.CryptoObject}, invoking + * {@code BiometricPrompt.authenticate} with {@code CryptoObject}, and proceeding with * the cryptographic operation only if the authentication flow succeeds. * * <p>Cryptographic operations involving keys which are authorized to be used for a duration @@ -1183,8 +1184,8 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu * for every use of the key. * * @see #setUserAuthenticationRequired(boolean) - * @see FingerprintManager - * @see FingerprintManager.CryptoObject + * @see BiometricPrompt + * @see BiometricPrompt.CryptoObject * @see KeyguardManager */ @NonNull @@ -1286,20 +1287,20 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu } /** - * Sets whether this key should be invalidated on fingerprint enrollment. This + * Sets whether this key should be invalidated on biometric enrollment. This * applies only to keys which require user authentication (see {@link * #setUserAuthenticationRequired(boolean)}) and if no positive validity duration has been * set (see {@link #setUserAuthenticationValidityDurationSeconds(int)}, meaning the key is - * valid for fingerprint authentication only. + * valid for biometric authentication only. * * <p>By default, {@code invalidateKey} is {@code true}, so keys that are valid for - * fingerprint authentication only are <em>irreversibly invalidated</em> when a new - * fingerprint is enrolled, or when all existing fingerprints are deleted. That may be + * biometric authentication only are <em>irreversibly invalidated</em> when a new + * biometric is enrolled, or when all existing biometrics are deleted. That may be * changed by calling this method with {@code invalidateKey} set to {@code false}. * - * <p>Invalidating keys on enrollment of a new finger or unenrollment of all fingers + * <p>Invalidating keys on enrollment of a new biometric or unenrollment of all biometrics * improves security by ensuring that an unauthorized person who obtains the password can't - * gain the use of fingerprint-authenticated keys by enrolling their own finger. However, + * gain the use of biometric-authenticated keys by enrolling their own biometric. However, * invalidating keys makes key-dependent operations impossible, requiring some fallback * procedure to authenticate the user and set up a new key. */ @@ -1322,7 +1323,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu * Sets whether the keystore requires the screen to be unlocked before allowing decryption * using this key. If this is set to {@code true}, any attempt to decrypt or sign using this * key while the screen is locked will fail. A locked device requires a PIN, password, - * fingerprint, or other trusted factor to access. While the screen is locked, the key can + * biometric, or other trusted factor to access. While the screen is locked, the key can * still be used for encryption or signature verification. */ @NonNull diff --git a/keystore/java/android/security/keystore/KeyProtection.java b/keystore/java/android/security/keystore/KeyProtection.java index 3357fdf46e20..26181a65dc1d 100644 --- a/keystore/java/android/security/keystore/KeyProtection.java +++ b/keystore/java/android/security/keystore/KeyProtection.java @@ -21,12 +21,13 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; import android.app.KeyguardManager; -import android.hardware.fingerprint.FingerprintManager; +import android.hardware.biometrics.BiometricManager; +import android.hardware.biometrics.BiometricPrompt; import android.security.GateKeeper; import java.security.Key; -import java.security.Signature; import java.security.KeyStore.ProtectionParameter; +import java.security.Signature; import java.security.cert.Certificate; import java.util.Date; @@ -479,9 +480,9 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { } /** - * Returns {@code true} if the key is irreversibly invalidated when a new fingerprint is - * enrolled or all enrolled fingerprints are removed. This has effect only for keys that - * require fingerprint user authentication for every use. + * Returns {@code true} if the key is irreversibly invalidated when a new biometric is + * enrolled or all enrolled biometrics are removed. This has effect only for keys that + * require biometric user authentication for every use. * * @see #isUserAuthenticationRequired() * @see #getUserAuthenticationValidityDurationSeconds() @@ -496,7 +497,7 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { * * Normally an authentication-bound key is tied to the secure user id of the current user * (either the root SID from GateKeeper for auth-bound keys with a timeout, or the authenticator - * id of the current fingerprint set for keys requiring explicit fingerprint authorization). + * id of the current biometric set for keys requiring explicit biometric authorization). * If this parameter is set (this method returning non-zero value), the key should be tied to * the specified secure user id, overriding the logic above. * @@ -762,19 +763,19 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { * <li>The key can only be import if secure lock screen is set up (see * {@link KeyguardManager#isDeviceSecure()}). Additionally, if the key requires that user * authentication takes place for every use of the key (see - * {@link #setUserAuthenticationValidityDurationSeconds(int)}), at least one fingerprint - * must be enrolled (see {@link FingerprintManager#hasEnrolledFingerprints()}).</li> + * {@link #setUserAuthenticationValidityDurationSeconds(int)}), at least one biometric + * must be enrolled (see {@link BiometricManager#canAuthenticate()}).</li> * <li>The use of the key must be authorized by the user by authenticating to this Android * device using a subset of their secure lock screen credentials such as - * password/PIN/pattern or fingerprint. + * password/PIN/pattern or biometric. * <a href="{@docRoot}training/articles/keystore.html#UserAuthentication">More * information</a>. * <li>The key will become <em>irreversibly invalidated</em> once the secure lock screen is * disabled (reconfigured to None, Swipe or other mode which does not authenticate the user) * or when the secure lock screen is forcibly reset (e.g., by a Device Administrator). * Additionally, if the key requires that user authentication takes place for every use of - * the key, it is also irreversibly invalidated once a new fingerprint is enrolled or once\ - * no more fingerprints are enrolled, unless {@link + * the key, it is also irreversibly invalidated once a new biometric is enrolled or once\ + * no more biometrics are enrolled, unless {@link * #setInvalidatedByBiometricEnrollment(boolean)} is used to allow validity after * enrollment. Attempts to initialize cryptographic operations using such keys will throw * {@link KeyPermanentlyInvalidatedException}.</li> </ul> @@ -784,7 +785,7 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { * * @see #setUserAuthenticationValidityDurationSeconds(int) * @see KeyguardManager#isDeviceSecure() - * @see FingerprintManager#hasEnrolledFingerprints() + * @see BiometricManager#canAuthenticate() */ @NonNull public Builder setUserAuthenticationRequired(boolean required) { @@ -824,10 +825,10 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { * the key. * * <p>Cryptographic operations involving keys which require user authentication to take - * place for every operation can only use fingerprint authentication. This is achieved by + * place for every operation can only use biometric authentication. This is achieved by * initializing a cryptographic operation ({@link Signature}, {@link Cipher}, {@link Mac}) - * with the key, wrapping it into a {@link FingerprintManager.CryptoObject}, invoking - * {@code FingerprintManager.authenticate} with {@code CryptoObject}, and proceeding with + * with the key, wrapping it into a {@link BiometricPrompt.CryptoObject}, invoking + * {@code BiometricPrompt.authenticate} with {@code CryptoObject}, and proceeding with * the cryptographic operation only if the authentication flow succeeds. * * <p>Cryptographic operations involving keys which are authorized to be used for a duration @@ -846,8 +847,8 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { * for every use of the key. * * @see #setUserAuthenticationRequired(boolean) - * @see FingerprintManager - * @see FingerprintManager.CryptoObject + * @see BiometricPrompt + * @see BiometricPrompt.CryptoObject * @see KeyguardManager */ @NonNull @@ -902,20 +903,20 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { } /** - * Sets whether this key should be invalidated on fingerprint enrollment. This + * Sets whether this key should be invalidated on biometric enrollment. This * applies only to keys which require user authentication (see {@link * #setUserAuthenticationRequired(boolean)}) and if no positive validity duration has been * set (see {@link #setUserAuthenticationValidityDurationSeconds(int)}, meaning the key is - * valid for fingerprint authentication only. + * valid for biometric authentication only. * * <p>By default, {@code invalidateKey} is {@code true}, so keys that are valid for - * fingerprint authentication only are <em>irreversibly invalidated</em> when a new - * fingerprint is enrolled, or when all existing fingerprints are deleted. That may be + * biometric authentication only are <em>irreversibly invalidated</em> when a new + * biometric is enrolled, or when all existing biometrics are deleted. That may be * changed by calling this method with {@code invalidateKey} set to {@code false}. * - * <p>Invalidating keys on enrollment of a new finger or unenrollment of all fingers + * <p>Invalidating keys on enrollment of a new biometric or unenrollment of all biometrics * improves security by ensuring that an unauthorized person who obtains the password can't - * gain the use of fingerprint-authenticated keys by enrolling their own finger. However, + * gain the use of biometric-authenticated keys by enrolling their own biometric. However, * invalidating keys makes key-dependent operations impossible, requiring some fallback * procedure to authenticate the user and set up a new key. */ @@ -930,7 +931,7 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { * * Normally an authentication-bound key is tied to the secure user id of the current user * (either the root SID from GateKeeper for auth-bound keys with a timeout, or the - * authenticator id of the current fingerprint set for keys requiring explicit fingerprint + * authenticator id of the current biometric set for keys requiring explicit biometric * authorization). If this parameter is set (this method returning non-zero value), the key * should be tied to the specified secure user id, overriding the logic above. * @@ -964,7 +965,7 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { * Sets whether the keystore requires the screen to be unlocked before allowing decryption * using this key. If this is set to {@code true}, any attempt to decrypt or sign using this * key while the screen is locked will fail. A locked device requires a PIN, password, - * fingerprint, or other trusted factor to access. While the screen is locked, the key can + * biometric, or other trusted factor to access. While the screen is locked, the key can * still be used for encryption or signature verification. */ @NonNull diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index dc5c6639375b..a5a409286754 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -17,6 +17,7 @@ package android.media; import android.annotation.IntDef; +import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; @@ -1204,6 +1205,7 @@ public class AudioManager { * @hide */ @SystemApi + @IntRange(from = 0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getVolumeIndexForAttributes(@NonNull AudioAttributes attr) { Preconditions.checkNotNull(attr, "attr must not be null"); @@ -1224,6 +1226,7 @@ public class AudioManager { * @hide */ @SystemApi + @IntRange(from = 0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull AudioAttributes attr) { Preconditions.checkNotNull(attr, "attr must not be null"); @@ -1244,6 +1247,7 @@ public class AudioManager { * @hide */ @SystemApi + @IntRange(from = 0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull AudioAttributes attr) { Preconditions.checkNotNull(attr, "attr must not be null"); diff --git a/packages/NetworkStack/Android.bp b/packages/NetworkStack/Android.bp index 5817118bc861..e0bb862c5362 100644 --- a/packages/NetworkStack/Android.bp +++ b/packages/NetworkStack/Android.bp @@ -37,6 +37,7 @@ android_library { "src/**/*.java", ":framework-networkstack-shared-srcs", ":services-networkstack-shared-srcs", + ":statslog-networkstack-java-gen", ], static_libs: [ "androidx.annotation_annotation", @@ -104,3 +105,11 @@ android_app { certificate: "networkstack", manifest: "AndroidManifest.xml", } + +genrule { + name: "statslog-networkstack-java-gen", + tools: ["stats-log-api-gen"], + cmd: "$(location stats-log-api-gen) --java $(out) --module network_stack" + + " --javaPackage com.android.networkstack.metrics --javaClass NetworkStackStatsLog", + out: ["com/android/networkstack/metrics/NetworkStackStatsLog.java"], +} diff --git a/packages/NetworkStack/src/android/net/util/NetworkStackUtils.java b/packages/NetworkStack/src/android/net/util/NetworkStackUtils.java index e7a607b1f921..822678717092 100644 --- a/packages/NetworkStack/src/android/net/util/NetworkStackUtils.java +++ b/packages/NetworkStack/src/android/net/util/NetworkStackUtils.java @@ -95,8 +95,7 @@ public class NetworkStackUtils { * Look up the value of a property for a particular namespace from {@link DeviceConfig}. * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. - * @param defaultValue The value to return if the property does not exist or has no non-null - * value. + * @param defaultValue The value to return if the property does not exist or has no valid value. * @return the corresponding value, or defaultValue if none exists. */ @Nullable diff --git a/packages/NetworkStack/src/android/net/metrics/DataStallDetectionStats.java b/packages/NetworkStack/src/com/android/networkstack/metrics/DataStallDetectionStats.java index 225dc0f4bfdc..2523ecd4ea20 100644 --- a/packages/NetworkStack/src/android/net/metrics/DataStallDetectionStats.java +++ b/packages/NetworkStack/src/com/android/networkstack/metrics/DataStallDetectionStats.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.net.metrics; +package com.android.networkstack.metrics; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/packages/NetworkStack/src/android/net/metrics/DataStallStatsUtils.java b/packages/NetworkStack/src/com/android/networkstack/metrics/DataStallStatsUtils.java index e23f10f243dc..93089017fd47 100644 --- a/packages/NetworkStack/src/android/net/metrics/DataStallStatsUtils.java +++ b/packages/NetworkStack/src/com/android/networkstack/metrics/DataStallStatsUtils.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package android.net.metrics; +package com.android.networkstack.metrics; import android.annotation.NonNull; import android.annotation.Nullable; import android.net.captiveportal.CaptivePortalProbeResult; import android.util.Log; -import android.util.StatsLog; import com.android.internal.util.HexDump; import com.android.server.connectivity.nano.DataStallEventProto; @@ -37,13 +36,11 @@ import com.android.server.connectivity.nano.DataStallEventProto; */ public class DataStallStatsUtils { private static final String TAG = DataStallStatsUtils.class.getSimpleName(); - private static final int DATA_STALL_EVENT_ID = 121; private static final boolean DBG = false; private static int probeResultToEnum(@Nullable final CaptivePortalProbeResult result) { if (result == null) return DataStallEventProto.INVALID; - // TODO: Add partial connectivity support. if (result.isSuccessful()) { return DataStallEventProto.VALID; } else if (result.isPortal()) { @@ -65,8 +62,7 @@ public class DataStallStatsUtils { Log.d(TAG, "write: " + stats + " with result: " + validationResult + ", dns: " + HexDump.toHexString(stats.mDns)); } - // TODO(b/124613085): Update API once the public StatsLog API is ready. - StatsLog.write(DATA_STALL_EVENT_ID, + NetworkStackStatsLog.write(NetworkStackStatsLog.DATA_STALL_EVENT, stats.mEvaluationType, validationResult, stats.mNetworkType, diff --git a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java index 588dcf2a83f5..2a612503620f 100644 --- a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java +++ b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java @@ -65,8 +65,6 @@ import android.net.TrafficStats; import android.net.Uri; import android.net.captiveportal.CaptivePortalProbeResult; import android.net.captiveportal.CaptivePortalProbeSpec; -import android.net.metrics.DataStallDetectionStats; -import android.net.metrics.DataStallStatsUtils; import android.net.metrics.IpConnectivityLog; import android.net.metrics.NetworkEvent; import android.net.metrics.ValidationProbeEvent; @@ -101,6 +99,8 @@ import com.android.internal.util.RingBufferIndices; import com.android.internal.util.State; import com.android.internal.util.StateMachine; import com.android.networkstack.R; +import com.android.networkstack.metrics.DataStallDetectionStats; +import com.android.networkstack.metrics.DataStallStatsUtils; import java.io.IOException; import java.net.HttpURLConnection; diff --git a/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java b/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java index 48c91bff3fdd..910bdc7e600f 100644 --- a/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java +++ b/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java @@ -47,7 +47,9 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.annotation.NonNull; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.INetworkMonitorCallbacks; @@ -57,8 +59,6 @@ import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.captiveportal.CaptivePortalProbeResult; -import android.net.metrics.DataStallDetectionStats; -import android.net.metrics.DataStallStatsUtils; import android.net.metrics.IpConnectivityLog; import android.net.util.SharedLog; import android.net.wifi.WifiInfo; @@ -76,6 +76,10 @@ import android.util.ArrayMap; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; +import com.android.networkstack.metrics.DataStallDetectionStats; +import com.android.networkstack.metrics.DataStallStatsUtils; + +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -89,6 +93,7 @@ import java.io.IOException; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.URL; +import java.util.HashSet; import java.util.Random; import javax.net.ssl.SSLHandshakeException; @@ -118,6 +123,9 @@ public class NetworkMonitorTest { private @Mock WifiInfo mWifiInfo; private @Captor ArgumentCaptor<String> mNetworkTestedRedirectUrlCaptor; + private HashSet<WrappedNetworkMonitor> mCreatedNetworkMonitors; + private HashSet<BroadcastReceiver> mRegisteredReceivers; + private static final int TEST_NETID = 4242; private static final String TEST_HTTP_URL = "http://www.google.com/gen_204"; private static final String TEST_HTTPS_URL = "https://www.google.com/gen_204"; @@ -197,14 +205,45 @@ public class NetworkMonitorTest { InetAddresses.parseNumericAddress("192.168.0.0") }).when(mNetwork).getAllByName(any()); + when(mContext.registerReceiver(any(BroadcastReceiver.class), any())).then((invocation) -> { + mRegisteredReceivers.add(invocation.getArgument(0)); + return new Intent(); + }); + + doAnswer((invocation) -> { + mRegisteredReceivers.remove(invocation.getArgument(0)); + return null; + }).when(mContext).unregisterReceiver(any()); + setMinDataStallEvaluateInterval(500); setDataStallEvaluationType(DATA_STALL_EVALUATION_TYPE_DNS); setValidDataStallDnsTimeThreshold(500); setConsecutiveDnsTimeoutThreshold(5); + + mCreatedNetworkMonitors = new HashSet<>(); + mRegisteredReceivers = new HashSet<>(); + } + + @After + public void tearDown() { + assertTrue(mCreatedNetworkMonitors.size() > 0); + // Make a local copy of mCreatedNetworkMonitors because during the iteration below, + // WrappedNetworkMonitor#onQuitting will delete elements from it on the handler threads. + WrappedNetworkMonitor[] networkMonitors = mCreatedNetworkMonitors.toArray( + new WrappedNetworkMonitor[0]); + for (WrappedNetworkMonitor nm : networkMonitors) { + nm.notifyNetworkDisconnected(); + nm.awaitQuit(); + } + assertEquals("NetworkMonitor still running after disconnect", + 0, mCreatedNetworkMonitors.size()); + assertEquals("BroadcastReceiver still registered after disconnect", + 0, mRegisteredReceivers.size()); } private class WrappedNetworkMonitor extends NetworkMonitor { private long mProbeTime = 0; + private final ConditionVariable mQuitCv = new ConditionVariable(false); WrappedNetworkMonitor() { super(mContext, mCallbacks, mNetwork, mLogger, mValidationLogger, mDependencies, @@ -224,12 +263,24 @@ public class NetworkMonitorTest { protected void addDnsEvents(@NonNull final DataStallDetectionStats.Builder stats) { generateTimeoutDnsEvent(stats, DEFAULT_DNS_TIMEOUT_THRESHOLD); } + + @Override + protected void onQuitting() { + assertTrue(mCreatedNetworkMonitors.remove(this)); + mQuitCv.open(); + } + + protected void awaitQuit() { + assertTrue("NetworkMonitor did not quit after " + HANDLER_TIMEOUT_MS + "ms", + mQuitCv.block(HANDLER_TIMEOUT_MS)); + } } private WrappedNetworkMonitor makeMonitor() { final WrappedNetworkMonitor nm = new WrappedNetworkMonitor(); nm.start(); waitForIdle(nm.getHandler()); + mCreatedNetworkMonitors.add(nm); return nm; } @@ -482,6 +533,8 @@ public class NetworkMonitorTest { verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) .showProvisioningNotification(any(), any()); + assertEquals(1, mRegisteredReceivers.size()); + // Check that startCaptivePortalApp sends the expected intent. nm.launchCaptivePortalApp(); @@ -504,6 +557,8 @@ public class NetworkMonitorTest { nm.notifyCaptivePortalAppFinished(APP_RETURN_DISMISSED); verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) .notifyNetworkTested(NETWORK_TEST_RESULT_VALID, null); + + assertEquals(0, mRegisteredReceivers.size()); } @Test @@ -644,21 +699,25 @@ public class NetworkMonitorTest { private void runPortalNetworkTest() { runNetworkTest(NETWORK_TEST_RESULT_INVALID); + assertEquals(1, mRegisteredReceivers.size()); assertNotNull(mNetworkTestedRedirectUrlCaptor.getValue()); } private void runNotPortalNetworkTest() { runNetworkTest(NETWORK_TEST_RESULT_VALID); + assertEquals(0, mRegisteredReceivers.size()); assertNull(mNetworkTestedRedirectUrlCaptor.getValue()); } private void runFailedNetworkTest() { runNetworkTest(NETWORK_TEST_RESULT_INVALID); + assertEquals(0, mRegisteredReceivers.size()); assertNull(mNetworkTestedRedirectUrlCaptor.getValue()); } private void runPartialConnectivityNetworkTest() { runNetworkTest(NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY); + assertEquals(0, mRegisteredReceivers.size()); assertNull(mNetworkTestedRedirectUrlCaptor.getValue()); } @@ -675,6 +734,7 @@ public class NetworkMonitorTest { } catch (RemoteException e) { fail("Unexpected exception: " + e); } + waitForIdle(monitor.getHandler()); return monitor; } diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index 19e800b70dab..80904b939cd3 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -293,9 +293,9 @@ <string name="show_touches" msgid="2642976305235070316">"Wys tikke"</string> <string name="show_touches_summary" msgid="6101183132903926324">"Wys visuele terugvoer vir tikke"</string> <string name="show_screen_updates" msgid="5470814345876056420">"Wys oppervlakopdaterings"</string> - <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flits vensteroppervlaktes in geheel wanneer dit opdateer"</string> + <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flits totale vensteroppervlakke wanneer dit opdateer"</string> <string name="show_hw_screen_updates" msgid="4117270979975470789">"Wys aansigopdaterings"</string> - <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Flits aansigte binne vensters wanneer getrek word"</string> + <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Flits aansigte binne vensters wanneer dit getrek word"</string> <string name="show_hw_layers_updates" msgid="5645728765605699821">"Wys hardewarelae se opdaterings"</string> <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Laat hardewarelae groen flits wanneer hulle opgedateer word"</string> <string name="debug_hw_overdraw" msgid="2968692419951565417">"Ontfout GPU-oortrek"</string> @@ -314,7 +314,7 @@ <string name="show_non_rect_clip" msgid="505954950474595172">"Ontfout nie-reghoekige knipbedrywighede"</string> <string name="track_frame_time" msgid="6094365083096851167">"Profiel-HWUI-lewering"</string> <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Aktiveer GPU-ontfoutlae"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Laat laai van GPU-ontfoutlae vir ontfoutapps toe"</string> + <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Laat laai van GPU-ontfoutlae vir ontfoutprogramme toe"</string> <string name="window_animation_scale_title" msgid="6162587588166114700">"Vensteranimasieskaal"</string> <string name="transition_animation_scale_title" msgid="387527540523595875">"Oorganganimasieskaal"</string> <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator-tydsduurskaal"</string> @@ -355,7 +355,7 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktief. Tik om te wissel."</string> <string name="standby_bucket_summary" msgid="6567835350910684727">"Programbystandstatus:<xliff:g id="BUCKET"> %s</xliff:g>"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Lopende dienste"</string> - <string name="runningservices_settings_summary" msgid="854608995821032748">"Sien en beheer dienste wat tans loop"</string> + <string name="runningservices_settings_summary" msgid="854608995821032748">"Sien en beheer dienste wat tans aktief is"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView-implementering"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Stel WebView-implementering"</string> <string name="select_webview_provider_toast_text" msgid="5466970498308266359">"Hierdie keuse is nie meer geldig nie. Probeer weer."</string> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index 2dec063ac444..7e1c6961462f 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -213,7 +213,7 @@ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Dozvoli otključavanje funkcije za pokretanje"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite li da dozvolite otključavanje proizvođača originalne opreme (OEM)?"</string> <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"UPOZORENJE: Funkcije za zaštitu uređaja neće funkcionisati na ovom uređaju dok je ovo podešavanje uključeno."</string> - <string name="mock_location_app" msgid="7966220972812881854">"Izaberi aplikaciju za lažnu lokaciju"</string> + <string name="mock_location_app" msgid="7966220972812881854">"Izaberite aplikaciju za lažnu lokaciju"</string> <string name="mock_location_app_not_set" msgid="809543285495344223">"Aplikacija za lažnu lokaciju nije podešena"</string> <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikacija za lažnu lokaciju: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="debug_networking_category" msgid="7044075693643009662">"Umrežavanje"</string> @@ -289,7 +289,7 @@ <string name="strict_mode" msgid="1938795874357830695">"Omogućen je strogi režim"</string> <string name="strict_mode_summary" msgid="142834318897332338">"Neka ekran treperi kada aplikacije obavljaju duge operacije na glavnoj niti"</string> <string name="pointer_location" msgid="6084434787496938001">"Lokacija pokazivača"</string> - <string name="pointer_location_summary" msgid="840819275172753713">"Postav. element sa trenutnim podacima o dodiru"</string> + <string name="pointer_location_summary" msgid="840819275172753713">"Preklopni element sa trenutnim podacima o dodiru"</string> <string name="show_touches" msgid="2642976305235070316">"Prikazuj dodire"</string> <string name="show_touches_summary" msgid="6101183132903926324">"Prikazuj vizuelne povratne informacije za dodire"</string> <string name="show_screen_updates" msgid="5470814345876056420">"Prikaži ažuriranja površine"</string> @@ -311,8 +311,8 @@ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Nametni smer rasporeda ekrana zdesna nalevo za sve lokalitete"</string> <string name="force_msaa" msgid="7920323238677284387">"Nametni 4x MSAA"</string> <string name="force_msaa_summary" msgid="9123553203895817537">"Omogući 4x MSAA u OpenGL ES 2.0 aplikacijama"</string> - <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="6094365083096851167">"Prik. prof. pomoću HWUI-a"</string> + <string name="show_non_rect_clip" msgid="505954950474595172">"Otkloni greške isecanja oblasti koje nisu pravougaonog oblika"</string> + <string name="track_frame_time" msgid="6094365083096851167">"Penderuj pomoću HWUI-a"</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 otk. greš. GPU-a u apl. za otk. greš."</string> <string name="window_animation_scale_title" msgid="6162587588166114700">"Razmera animacije prozora"</string> diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index fedfbcb28d75..2de397c23850 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -342,7 +342,7 @@ <string name="loading_injected_setting_summary" msgid="4095178591461231376">"Ідзе загрузка…"</string> <string-array name="color_mode_names"> <item msgid="2425514299220523812">"Сочны (па змаўчанні)"</item> - <item msgid="8446070607501413455">"Натуральны"</item> + <item msgid="8446070607501413455">"Натуральныя"</item> <item msgid="6553408765810699025">"Стандартны"</item> </string-array> <string-array name="color_mode_descriptions"> @@ -418,7 +418,7 @@ <item msgid="8934126114226089439">"50 %"</item> <item msgid="1286113608943010849">"100 %"</item> </string-array> - <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> таму назад"</string> + <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> таму"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Засталося <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="screen_zoom_summary_small" msgid="5867245310241621570">"Маленькі"</string> <string name="screen_zoom_summary_default" msgid="2247006805614056507">"Стандартны"</string> diff --git a/packages/SettingsLib/res/values-bn/arrays.xml b/packages/SettingsLib/res/values-bn/arrays.xml index ce3ca16bbe56..a9f13bbab4b1 100644 --- a/packages/SettingsLib/res/values-bn/arrays.xml +++ b/packages/SettingsLib/res/values-bn/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="bt_hci_snoop_log_entries"> diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index 42223bdd3541..9c5f501a4fa4 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -152,7 +152,7 @@ <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_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> @@ -204,10 +204,10 @@ <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_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">"ব্লুটুথ HCI স্নুপ লগ সক্ষম করুন"</string> + <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ব্লুটুথ HCI স্নুপ লগ চালু করুন"</string> <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ব্লুটুথ প্যাকেট ক্যাপচার করুন। (এই সেটিং পরিবর্তন করার পরে ব্লুটুথ চালু অথবা বন্ধ করুন)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM আনলক করা হচ্ছে"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"বুট-লোডার আনলক করার অনুমতি দিন"</string> @@ -257,7 +257,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">"ওয়াই-ফাই সক্রিয় থাকার সময়েও (দ্রুত নেটওয়ার্কে পাল্টানোর জন্য) সর্বদা মোবাইল ডেটা সক্রিয় রাখুন।"</string> <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"টিথারিং হার্ডওয়্যার অ্যাক্সিলারেশন উপলব্ধ থাকলে ব্যবহার করুন"</string> <string name="adb_warning_title" msgid="6234463310896563253">"USB ডিবাগিং মঞ্জুর করবেন?"</string> @@ -313,7 +313,7 @@ <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="6094365083096851167">"প্রোফাইল HWUI রেন্ডারিং"</string> - <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"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="window_animation_scale_title" msgid="6162587588166114700">"উইন্ডো অ্যানিমেশন স্কেল"</string> <string name="transition_animation_scale_title" msgid="387527540523595875">"ট্র্যানজিশন অ্যানিমেশন স্কেল"</string> diff --git a/packages/SettingsLib/res/values-bs/arrays.xml b/packages/SettingsLib/res/values-bs/arrays.xml index 96772b6a139b..4c56ce578dab 100644 --- a/packages/SettingsLib/res/values-bs/arrays.xml +++ b/packages/SettingsLib/res/values-bs/arrays.xml @@ -76,7 +76,7 @@ <item msgid="3422726142222090896">"avrcp16"</item> </string-array> <string-array name="bluetooth_a2dp_codec_titles"> - <item msgid="7065842274271279580">"Koristi odabir sistema (zadano)"</item> + <item msgid="7065842274271279580">"Korištenje odabira sistema (zadano)"</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> audio"</item> @@ -86,7 +86,7 @@ <item msgid="3304843301758635896">"Onemogući opcionalne kodeke"</item> </string-array> <string-array name="bluetooth_a2dp_codec_summaries"> - <item msgid="5062108632402595000">"Koristi odabir sistema (zadano)"</item> + <item msgid="5062108632402595000">"Korištenje odabira sistema (zadano)"</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> audio"</item> @@ -96,38 +96,38 @@ <item msgid="741805482892725657">"Onemogući opcionalne kodeke"</item> </string-array> <string-array name="bluetooth_a2dp_codec_sample_rate_titles"> - <item msgid="3093023430402746802">"Koristi odabir sistema (zadano)"</item> + <item msgid="3093023430402746802">"Korištenje odabira sistema (zadano)"</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">"Koristi odabir sistema (zadano)"</item> + <item msgid="3214516120190965356">"Korištenje odabira sistema (zadano)"</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">"Koristi odabir sistema (zadano)"</item> + <item msgid="2684127272582591429">"Korištenje odabira sistema (zadano)"</item> <item msgid="5618929009984956469">"16 bitova/uzorak"</item> <item msgid="3412640499234627248">"24 bitova/uzorak"</item> <item msgid="121583001492929387">"32 bitova/uzorak"</item> </string-array> <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries"> - <item msgid="1081159789834584363">"Koristi odabir sistema (zadano)"</item> + <item msgid="1081159789834584363">"Korištenje odabira sistema (zadano)"</item> <item msgid="4726688794884191540">"16 bitova/uzorak"</item> <item msgid="305344756485516870">"24 bitova/uzorak"</item> <item msgid="244568657919675099">"32 bitova/uzorak"</item> </string-array> <string-array name="bluetooth_a2dp_codec_channel_mode_titles"> - <item msgid="5226878858503393706">"Koristi odabir sistema (zadano)"</item> + <item msgid="5226878858503393706">"Korištenje odabira sistema (zadano)"</item> <item msgid="4106832974775067314">"Mono"</item> <item msgid="5571632958424639155">"Stereo"</item> </string-array> <string-array name="bluetooth_a2dp_codec_channel_mode_summaries"> - <item msgid="4118561796005528173">"Koristi odabir sistema (zadano)"</item> + <item msgid="4118561796005528173">"Korištenje odabira sistema (zadano)"</item> <item msgid="8900559293912978337">"Mono"</item> <item msgid="8883739882299884241">"Stereo"</item> </string-array> @@ -165,11 +165,11 @@ </string-array> <string-array name="select_logd_size_summaries"> <item msgid="6921048829791179331">"Isključeno"</item> - <item msgid="2969458029344750262">"64K po međumemoriji dnevnika"</item> - <item msgid="1342285115665698168">"256k po međumemoriji dnevnika"</item> - <item msgid="1314234299552254621">"1M po međumemoriji dnevnika"</item> - <item msgid="3606047780792894151">"4M po međumemoriji dnevnika"</item> - <item msgid="5431354956856655120">"16M po međumemoriji dnevnika"</item> + <item msgid="2969458029344750262">"64K po međumemoriji zapisnika"</item> + <item msgid="1342285115665698168">"256k po međumemoriji zapisnika"</item> + <item msgid="1314234299552254621">"1M po međumemoriji zapisnika"</item> + <item msgid="3606047780792894151">"4M po međumemoriji zapisnika"</item> + <item msgid="5431354956856655120">"16M po međumemoriji zapisnika"</item> </string-array> <string-array name="select_logpersist_titles"> <item msgid="1744840221860799971">"Isključeno"</item> diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index cb34f1d45535..9868f1aafa4a 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -204,8 +204,8 @@ <string name="enable_adb_summary" msgid="4881186971746056635">"Način rada za uklanjanje grešaka kada je povezan USB"</string> <string name="clear_adb_keys" msgid="4038889221503122743">"Ukini odobrenja otklanjanja grešaka putem uređaja spojenog na USB"</string> <string name="bugreport_in_power" msgid="7923901846375587241">"Prečica za izvještaj o greškama"</string> - <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Prikaži tipku za prijavu grešaka u izborniku za potrošnju energije"</string> - <string name="keep_screen_on" msgid="1146389631208760344">"Ostani aktivan"</string> + <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Prikaz dugmeta za prijavu grešaka u meniju napajanja"</string> + <string name="keep_screen_on" msgid="1146389631208760344">"Ne zaključavaj ekran"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekran neće prelaziti u stanje mirovanja tokom punjenja"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Omogući Bluetooth HCI snoop zapis"</string> <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Snimite Bluetooth pakete. (Uključite/isključite Bluetooth nakon što promijenite ovu postavku)"</string> @@ -213,13 +213,13 @@ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Dozvoli otključavanje bootloadera"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite li dozvoliti OEM otključavanje?"</string> <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"UPOZORENJE: Funkcije zaštite ovog uređaja neće funkcionirati dok je ova postavka uključena."</string> - <string name="mock_location_app" msgid="7966220972812881854">"Odaberite aplikaciju za lažne lokacije"</string> + <string name="mock_location_app" msgid="7966220972812881854">"Odaberite aplikaciju za lažnu lokaciju"</string> <string name="mock_location_app_not_set" msgid="809543285495344223">"Aplikacija za lažnu lokaciju nije postavljena"</string> - <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikacija za lažne lokacije: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikacija za lažnu lokaciju: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="debug_networking_category" msgid="7044075693643009662">"Umrežavanje"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikacija bežičnog prikaza"</string> - <string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogući detaljniju evidenciju za WiFi"</string> - <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilna mreža za prijenos podataka je uvijek aktivna"</string> + <string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogući detaljni zapisnik za WiFi"</string> + <string name="mobile_data_always_on" msgid="8774857027458200434">"Prijenos podataka na mobilnoj mreži je uvijek aktivan"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardversko ubrzavanje za povezivanje putem mobitela"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži Bluetooth uređaje bez naziva"</string> <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogući apsolutnu jačinu zvuka"</string> @@ -243,12 +243,12 @@ <string name="private_dns_mode_provider" msgid="8354935160639360804">"Naziv hosta pružaoca usluge privatnog DNS-a"</string> <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Unesite naziv hosta pružaoca usluge DNS-a"</string> <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Povezivanje nije uspjelo"</string> - <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaži opcije za certifikaciju bežičnog prikaza"</string> - <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećava nivo evidentiranja za WiFi. Prikaz po SSID RSSI-ju u Biraču WiFi-ja"</string> + <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaz opcija za certifikaciju bežičnog prikaza"</string> + <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećani nivo zapisnika za WiFi. Prikaz po SSID RSSI-ju u Biraču WiFi-ja"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"S naplatom"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Mreža bez ograničenja prometa"</string> - <string name="select_logd_size_title" msgid="7433137108348553508">"Veličine bafera za zapisnik"</string> - <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Odaberite veličine za Logger prema međumemoriji evidencije"</string> + <string name="select_logd_size_title" msgid="7433137108348553508">"Veličine međumemorije zapisnika"</string> + <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Odaberite veličinu međumemorije zapisnika"</string> <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Želite li obrisati trajnu pohranu zapisivača?"</string> <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Kada više ne pratimo trajnog zapisivača, trebamo u potpunosti izbrisati podatke zapisivača na vašem uređaju."</string> <string name="select_logpersist_title" msgid="7530031344550073166">"Pohrani podatke zapisivača na uređaju"</string> @@ -258,23 +258,23 @@ <string name="allow_mock_location" msgid="2787962564578664888">"Dozvoli lažne lokacije"</string> <string name="allow_mock_location_summary" msgid="317615105156345626">"Dozvoli lažne lokacije"</string> <string name="debug_view_attributes" msgid="6485448367803310384">"Omogući pregled atributa prikaza"</string> - <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Uvijek drži prijenos podataka na mobilnoj mreži aktivnim, čak i kada je WiFi aktivan (za brzo prebacivanje između mreža)."</string> - <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Koristi hardversko ubrzavanje dijeljenja veze, ako je dostupno"</string> + <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Prijenos podataka na mobilnoj mreži ostaje aktivan čak i kada je aktiviran WiFi (za brzo prebacivanje između mreža)."</string> + <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Korištenje hardverskog ubrzavanja za povezivanje putem mobitela ako je dostupno"</string> <string name="adb_warning_title" msgid="6234463310896563253">"Omogućiti otklanjanje grešaka putem uređaja spojenog na USB?"</string> <string name="adb_warning_message" msgid="7316799925425402244">"Otklanjanje grešaka putem uređaja spojenog na USB je namijenjeno samo u svrhe razvoja aplikacija. Koristite ga za kopiranje podataka između računara i uređaja, instaliranje aplikacija na uređaj bez obavještenja te čitanje podataka iz zapisnika."</string> <string name="adb_keys_warning_message" msgid="5659849457135841625">"Opozvati pristup otklanjanju grešaka putem uređaja spojenog na USB za sve računare koje ste prethodno ovlastili?"</string> <string name="dev_settings_warning_title" msgid="7244607768088540165">"Dopustiti postavke za razvoj?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ove postavke su namijenjene samo za svrhe razvoja. Mogu izazvati pogrešno ponašanje uređaja i aplikacija na njemu."</string> - <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificiraj aplikacije putem USB-a"</string> + <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Potvrdi aplikacije putem USB-a"</string> <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Provjerava da li se u aplikacijama instaliranim putem ADB-a/ADT-a javlja zlonamjerno ponašanje."</string> <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Prikazat će se Bluetooth uređaji bez naziva (samo MAC adrese)"</string> - <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Onemogućava opciju Bluetooth apsolutne jačine zvuka u slučaju problema s jačinom zvuka na udaljenim uređajima, kao što je neprihvatljivo glasan zvuk ili nedostatak kontrole."</string> + <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Onemogućava funkciju apsolutne jačine zvuka za Bluetooth u slučaju problema s jačinom zvuka na udaljenim uređajima, kao što je neprihvatljivo glasan zvuk ili nedostatak kontrole."</string> <string name="enable_terminal_title" msgid="95572094356054120">"Lokalni terminal"</string> <string name="enable_terminal_summary" msgid="67667852659359206">"Omogući terminalnu aplik. koja nudi pristup lok. kom. okruženju"</string> - <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP provjeravanje"</string> + <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP provjera"</string> <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Postavke HDCP provjere"</string> <string name="debug_debugging_category" msgid="6781250159513471316">"Otklanjanje grešaka"</string> - <string name="debug_app" msgid="8349591734751384446">"Odaberi aplikaciju za otklanjanje grešaka"</string> + <string name="debug_app" msgid="8349591734751384446">"Odabir aplikacije za otklanjanje grešaka"</string> <string name="debug_app_not_set" msgid="718752499586403499">"Nema postavljenih aplikac. za otklanjanje grešaka"</string> <string name="debug_app_set" msgid="2063077997870280017">"Aplikacija za otklanjanje grešaka: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="select_application" msgid="5156029161289091703">"Odaberite aplikaciju"</string> @@ -283,57 +283,57 @@ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Aplikacija u kojoj se otklanjaju greške čeka da se priloži program za otklanjanje grešaka prije izvršavanja"</string> <string name="debug_input_category" msgid="1811069939601180246">"Ulaz"</string> <string name="debug_drawing_category" msgid="6755716469267367852">"Crtanje"</string> - <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Prikaz s hardverskom akceleracijom"</string> + <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardverski ubrzano prikazivanje"</string> <string name="media_category" msgid="4388305075496848353">"Mediji"</string> <string name="debug_monitoring_category" msgid="7640508148375798343">"Praćenje"</string> - <string name="strict_mode" msgid="1938795874357830695">"Omogućen strogi način rada"</string> - <string name="strict_mode_summary" msgid="142834318897332338">"Prikaži ekran uz treptanje kada aplikacije vrše duge operacije u glavnoj niti"</string> + <string name="strict_mode" msgid="1938795874357830695">"Omogući strogi način rada"</string> + <string name="strict_mode_summary" msgid="142834318897332338">"Ekran bljeska kada aplikacije vrše duge operacije u glavnoj niti"</string> <string name="pointer_location" msgid="6084434787496938001">"Lokacija pokazivača"</string> - <string name="pointer_location_summary" msgid="840819275172753713">"Trenutni podaci o dodirivanju prikazuju se u nadsloju preko ekrana"</string> - <string name="show_touches" msgid="2642976305235070316">"Prikaži dodirivanja"</string> - <string name="show_touches_summary" msgid="6101183132903926324">"Prikaži vizuelne povratne informacije za dodirivanja"</string> + <string name="pointer_location_summary" msgid="840819275172753713">"Preklapanje ekrana s trenutnim podacima o dodiru"</string> + <string name="show_touches" msgid="2642976305235070316">"Prikaži dodire"</string> + <string name="show_touches_summary" msgid="6101183132903926324">"Prikaz vizuelnih povratnih informacija za dodire"</string> <string name="show_screen_updates" msgid="5470814345876056420">"Prikaži ažuriranja za površinu"</string> - <string name="show_screen_updates_summary" msgid="2569622766672785529">"Prikaži cijele površine prozora uz treptanje prilikom ažuriranja"</string> + <string name="show_screen_updates_summary" msgid="2569622766672785529">"Osvjetljava sve površine prozora kada se ažuriraju"</string> <string name="show_hw_screen_updates" msgid="4117270979975470789">"Prikaži ažuriranja prikaza"</string> - <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Zatreperi prikaze u prozorima prilikom iscrtavanja"</string> - <string name="show_hw_layers_updates" msgid="5645728765605699821">"Prikaži dodatne informacije za ažuriranja za hardver"</string> - <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Hardverski slojevi trepću zelenom bojom pri ažuriranju"</string> - <string name="debug_hw_overdraw" msgid="2968692419951565417">"Otkl. greške GPU preklap."</string> - <string name="disable_overlays" msgid="2074488440505934665">"Onemog. HW preklapanja"</string> - <string name="disable_overlays_summary" msgid="3578941133710758592">"Uvijek koristi GPU za kompoziciju ekrana"</string> + <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Osvjetljava prikaze u prozorima prilikom iscrtavanja"</string> + <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 pri ažuriranju"</string> + <string name="debug_hw_overdraw" msgid="2968692419951565417">"Otkl. greške GPU preklapanja"</string> + <string name="disable_overlays" msgid="2074488440505934665">"Onemog. hardverska prekl."</string> + <string name="disable_overlays_summary" msgid="3578941133710758592">"Uvijek se koristi GPU za slaganje ekrana"</string> <string name="simulate_color_space" msgid="6745847141353345872">"Simuliraj prostor boje"</string> <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Omogući OpenGL zapise"</string> - <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Isključi USB audio usmjeravanje"</string> - <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Onemogući autom. usmjerav. na USB audio periferije"</string> + <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Onemogući USB preusmjer. zvuka"</string> + <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Onemoguć. autom. preusmj. na USB audio perif. uređ."</string> <string name="debug_layout" msgid="5981361776594526155">"Prikaži granice rasporeda"</string> - <string name="debug_layout_summary" msgid="2001775315258637682">"Prikaži granice isječka, margine itd."</string> + <string name="debug_layout_summary" msgid="2001775315258637682">"Prikaz granica isječka, margina itd."</string> <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Prisilno postavi raspored s desna ulijevo"</string> - <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Prisilno postavi raspored ekrana s desna ulijevo za sve regije"</string> + <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Prisilno postavljanje rasporeda ekrana s desna ulijevo za sve regije"</string> <string name="force_msaa" msgid="7920323238677284387">"Prinudno primijeni 4x MSAA"</string> - <string name="force_msaa_summary" msgid="9123553203895817537">"Omogući 4x MSAA u OpenGL ES 2.0 aplikacijama"</string> - <string name="show_non_rect_clip" msgid="505954950474595172">"Ispravi greške na nepravougaonim operacijama isjecanja"</string> + <string name="force_msaa_summary" msgid="9123553203895817537">"Omogućava 4x MSAA u OpenGL ES 2.0 aplikacijama"</string> + <string name="show_non_rect_clip" msgid="505954950474595172">"Otkl. greške na operac. nepravoug. isjecanja"</string> <string name="track_frame_time" msgid="6094365083096851167">"Profil HWUI iscrtavanja"</string> <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Omogući slojeve za otklanjanje grešaka na GPU-u"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Omogući učitavanje slojeva za otklanjanje grešaka na GPU-u za aplikacije za otklanjanje grešaka"</string> + <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Omoguć. učit. sloj. za otkl. greš. na GPU-u za apl. za otkl. greš."</string> <string name="window_animation_scale_title" msgid="6162587588166114700">"Skala animacije prozora"</string> <string name="transition_animation_scale_title" msgid="387527540523595875">"Skala animacije prijelaza"</string> <string name="animator_duration_scale_title" msgid="3406722410819934083">"Skala trajanja animatora"</string> <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simuliraj sekundarne ekrane"</string> <string name="debug_applications_category" msgid="4206913653849771549">"Aplikacije"</string> <string name="immediately_destroy_activities" msgid="1579659389568133959">"Ne čuvaj aktivnosti"</string> - <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Obustavi svaku aktivnost čim je korisnik napusti"</string> + <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Obustavlja se svaka aktivnost čim je korisnik napusti"</string> <string name="app_process_limit_title" msgid="4280600650253107163">"Ograničenje procesa u pozadini"</string> <string name="show_all_anrs" msgid="4924885492787069007">"Prikaži ANR-e u pozadini"</string> - <string name="show_all_anrs_summary" msgid="6636514318275139826">"Prikaži dijalog \"Aplikacija ne reagira\" za aplikacije pokrenute u pozadini"</string> - <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Prikaz upozorenja na obavještenju o kanalu"</string> - <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Prikaz upozorenja na ekranu kada aplikacija pošalje obavještenje bez važećeg kanala."</string> + <string name="show_all_anrs_summary" msgid="6636514318275139826">"Prikaz dijaloga \"Aplikacija ne reagira\" za aplikacije pokrenute u pozadini"</string> + <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Prikaži upozorenja kanala obavještenja"</string> + <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Prikaz upozorenja na ekranu kada aplikacija pošalje obavještenje bez važećeg kanala"</string> <string name="force_allow_on_external" msgid="3215759785081916381">"Nametni aplikacije na vanjskoj pohrani"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Omogućava upisivanje svih aplikacija u vanjsku pohranu, bez obzira na prikazane vrijednosti"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Nametni aktivnostima mijenjanje veličina"</string> - <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Omogući mijenjanje veličine svih aktivnosti za prikaz s više prozora, bez obzira na prikazane vrijednosti."</string> + <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Omogućava mijenjanje veličine svih aktivnosti za prikaz s više prozora, bez obzira na prikazane vrijednosti."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"Omogući prozore nepravilnih oblika"</string> - <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Omogući podršku za eksperimentalne prozore nepravilnih oblika."</string> - <string name="local_backup_password_title" msgid="3860471654439418822">"Lozinka za sigurnosnu kopiju radne površine"</string> + <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Omogućava podršku za eksperimentalne prozore nepravilnih oblika."</string> + <string name="local_backup_password_title" msgid="3860471654439418822">"Lozinka sigurnosne kopije za računar"</string> <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Potpune sigurnosne kopije za računare trenutno nisu zaštićene"</string> <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Dodirnite da promijenite ili uklonite lozinku za potpune rezervne kopije s radne površine"</string> <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nova lozinka za sigurnosnu kopiju je postavljena"</string> @@ -431,7 +431,7 @@ <string name="retail_demo_reset_next" msgid="8356731459226304963">"Naprijed"</string> <string name="retail_demo_reset_title" msgid="696589204029930100">"Potrebna je lozinka"</string> <string name="active_input_method_subtypes" msgid="3596398805424733238">"Aktivne metode unosa"</string> - <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Koristi jezik sistema"</string> + <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Koristite jezik sistema"</string> <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Otvaranje postavki za <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> nije uspjelo"</string> <string name="ime_security_warning" msgid="4135828934735934248">"Ovaj način unosa može prikupiti sav tekst koji upišete, uključujući lične podatke kao što su lozinke i brojevi kreditnih kartica. Način omogućava aplikacija <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Da li želite koristiti ovaj način unosa?"</string> <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"Napomena: Nakon ponovnog pokretanja, ova aplikacija se neće moći pokrenuti dok ne otključate telefon"</string> diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml index 33385e4e0587..15100bfddd1b 100644 --- a/packages/SettingsLib/res/values-ca/arrays.xml +++ b/packages/SettingsLib/res/values-ca/arrays.xml @@ -165,11 +165,11 @@ </string-array> <string-array name="select_logd_size_summaries"> <item msgid="6921048829791179331">"No"</item> - <item msgid="2969458029344750262">"64 K / memòria intermèdia reg."</item> - <item msgid="1342285115665698168">"256 K / memòria intermèdia reg."</item> + <item msgid="2969458029344750262">"64 K / memòria intermèdia del registre"</item> + <item msgid="1342285115665698168">"256 K / memòria intermèdia del registre"</item> <item msgid="1314234299552254621">"1 M / memòria intermèdia reg."</item> - <item msgid="3606047780792894151">"4 M / memòria intermèdia reg."</item> - <item msgid="5431354956856655120">"16 M / memòria intermèdia reg."</item> + <item msgid="3606047780792894151">"4 M / memòria intermèdia del registre"</item> + <item msgid="5431354956856655120">"16 M / memòria intermèdia del registre"</item> </string-array> <string-array name="select_logpersist_titles"> <item msgid="1744840221860799971">"Desactivat"</item> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 5a9ec706fe9e..1ddd562e1af2 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -151,9 +151,9 @@ <string name="running_process_item_user_label" msgid="3129887865552025943">"Usuari: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string> <string name="launch_defaults_some" msgid="313159469856372621">"S\'han definit alguns valors predeterminats"</string> <string name="launch_defaults_none" msgid="4241129108140034876">"No s\'ha definit cap valor predeterminat"</string> - <string name="tts_settings" msgid="8186971894801348327">"Configuració de text a veu"</string> - <string name="tts_settings_title" msgid="1237820681016639683">"Sortida de text a veu"</string> - <string name="tts_default_rate_title" msgid="6030550998379310088">"Velocitat de veu"</string> + <string name="tts_settings" msgid="8186971894801348327">"Configuració de text a parla"</string> + <string name="tts_settings_title" msgid="1237820681016639683">"Sortida de text a parla"</string> + <string name="tts_default_rate_title" msgid="6030550998379310088">"Velocitat de parla"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocitat de lectura del text"</string> <string name="tts_default_pitch_title" msgid="6135942113172488671">"To"</string> <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Afecta el to de la veu sintetitzada"</string> @@ -165,8 +165,8 @@ <string name="tts_play_example_summary" msgid="8029071615047894486">"Reprodueix una breu demostració de síntesi de veu"</string> <string name="tts_install_data_title" msgid="4264378440508149986">"Instal·la dades de veu"</string> <string name="tts_install_data_summary" msgid="5742135732511822589">"Instal·la les dades de veu necessàries per a la síntesi de veu"</string> - <string name="tts_engine_security_warning" msgid="8786238102020223650">"Pot ser que aquest motor de síntesi de la parla pugui recopilar tot el text que es dirà en veu alta, incloses les dades personals, com ara les contrasenyes i els números de les targetes de crèdit. Ve del motor <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Vols activar l\'ús d\'aquest motor de síntesi de la parla?"</string> - <string name="tts_engine_network_required" msgid="1190837151485314743">"Aquest idioma requereix una connexió de xarxa activa per a la sortida de text a veu."</string> + <string name="tts_engine_security_warning" msgid="8786238102020223650">"Pot ser que aquest motor de síntesi de parla pugui recopilar tot el text que s\'enunciarà, incloses les dades personals, com ara les contrasenyes i els números de les targetes de crèdit. Ve del motor <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Vols activar l\'ús d\'aquest motor de síntesi de parla?"</string> + <string name="tts_engine_network_required" msgid="1190837151485314743">"Aquest idioma requereix una connexió de xarxa activa per a la sortida de text a parla."</string> <string name="tts_default_sample_string" msgid="4040835213373086322">"Això és un exemple de síntesi de veu"</string> <string name="tts_status_title" msgid="7268566550242584413">"Estat de l\'idioma predeterminat"</string> <string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> és totalment compatible"</string> @@ -175,7 +175,7 @@ <string name="tts_status_checking" msgid="5339150797940483592">"S\'està comprovant…"</string> <string name="tts_engine_settings_title" msgid="3499112142425680334">"Configuració de: <xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>"</string> <string name="tts_engine_settings_button" msgid="1030512042040722285">"Obre la configuració del motor"</string> - <string name="tts_engine_preference_section_title" msgid="448294500990971413">"Motor preferit"</string> + <string name="tts_engine_preference_section_title" msgid="448294500990971413">"Motor preferent"</string> <string name="tts_general_section_title" msgid="4402572014604490502">"General"</string> <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Restableix el to de la veu"</string> <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"Restableix el to predeterminat amb què es llegeix el text."</string> @@ -201,21 +201,21 @@ <string name="tethering_settings_not_available" msgid="6765770438438291012">"La configuració de compartició de xarxa no està disponible per a aquest usuari."</string> <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ó per USB"</string> - <string name="enable_adb_summary" msgid="4881186971746056635">"Activa el mode de depuració quan el dispositiu estigui connectat per USB"</string> + <string name="enable_adb_summary" msgid="4881186971746056635">"Mode de depuració quan l\'USB està connectat"</string> <string name="clear_adb_keys" msgid="4038889221503122743">"Revoca autoritzacions de depuració per 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 sempre 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="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla no entra mai en mode de repòs si el dispositiu s\'està carregant"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activa registre de Bluetooth HCI"</string> <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Captura els paquets de Bluetooth. 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">"No s\'ha definit 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="mock_location_app" msgid="7966220972812881854">"Selecciona una aplicació d\'ubicació simulada"</string> + <string name="mock_location_app_not_set" msgid="809543285495344223">"No s\'ha definit cap aplicació d\'ubicació simulada"</string> + <string name="mock_location_app_set" msgid="8966420655295102685">"Aplicació d\'ubicació simulada: <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> @@ -244,37 +244,37 @@ <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Introdueix el nom d\'amfitrió del proveïdor de DNS"</string> <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"No s\'ha pogut connectar"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra les opcions per a la certificació de pantalla sense fil"</string> - <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Augmenta nivell de registre Wi‑Fi i mostra\'l per SSID RSSI al Selector de Wi‑Fi"</string> + <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Augmenta nivell de registre Wi‑Fi, mostra\'l per SSID RSSI al selector de Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Amb límit de dades"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Sense límit de dades"</string> - <string name="select_logd_size_title" msgid="7433137108348553508">"Mides memòria intermèdia registrador"</string> - <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Mida Logger per memòria intermèdia"</string> + <string name="select_logd_size_title" msgid="7433137108348553508">"Mides de la mem. intermèdia del registrador"</string> + <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Selecciona la mida de la memòria intermèdia del registre"</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">"Desa dades reg. de manera permanent"</string> + <string name="select_logpersist_title" msgid="7530031344550073166">"Desa dades del registrador de manera permanent al dispositiu"</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> <string name="allow_mock_location" msgid="2787962564578664888">"Ubicacions simulades"</string> <string name="allow_mock_location_summary" msgid="317615105156345626">"Permet les ubicacions simulades"</string> - <string name="debug_view_attributes" msgid="6485448367803310384">"Inspecció d\'atributs de visualització"</string> + <string name="debug_view_attributes" msgid="6485448367803310384">"Activa la inspecció d\'atributs de visualització"</string> <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantén les dades mòbils sempre actives, fins i tot quan la Wi‑Fi està activada (per canviar de xarxa ràpidament)."</string> - <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Fes servir l\'acceleració per maquinari per compartir la xarxa, si està disponible"</string> + <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Fes servir l\'acceleració per maquinari per a compartició de xarxa, si està disponible"</string> <string name="adb_warning_title" msgid="6234463310896563253">"Voleu permetre la depuració per USB?"</string> <string name="adb_warning_message" msgid="7316799925425402244">"La depuració per USB només està indicada per a activitats de desenvolupament. Fes-la servir intercanviar dades entre l\'ordinador i el dispositiu, per instal·lar aplicacions al dispositiu sense rebre notificacions i per llegir dades de registre."</string> <string name="adb_keys_warning_message" msgid="5659849457135841625">"Vols revocar l\'accés a la depuració per USB dels ordinadors que has autoritzat anteriorment?"</string> <string name="dev_settings_warning_title" msgid="7244607768088540165">"Vols permetre la conf. de desenvolupament?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Aquesta configuració només està prevista per a usos de desenvolupament. Pot fer que el dispositiu i que les aplicacions s\'interrompin o tinguin un comportament inadequat."</string> <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifica aplicacions per USB"</string> - <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprova les aplicacions instal·lades mitjançant ADB/ADT per detectar possibles comportaments perillosos"</string> + <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprova les aplicacions instal·lades mitjançant ADB/ADT per detectar comportaments perillosos"</string> <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Es mostraran els dispositius Bluetooth sense el nom (només l\'adreça MAC)"</string> <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desactiva la funció de volum absolut del Bluetooth en cas que es produeixin problemes de volum amb dispositius remots, com ara un volum massa alt o una manca de control."</string> <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string> <string name="enable_terminal_summary" msgid="67667852659359206">"Activa l\'aplicació de terminal que ofereix accés al shell local"</string> - <string name="hdcp_checking_title" msgid="8605478913544273282">"Comprovació HDCP"</string> + <string name="hdcp_checking_title" msgid="8605478913544273282">"Comprovació d\'HDCP"</string> <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Defineix comprovació HDCP"</string> <string name="debug_debugging_category" msgid="6781250159513471316">"Depuració"</string> - <string name="debug_app" msgid="8349591734751384446">"Aplicació per depurar"</string> + <string name="debug_app" msgid="8349591734751384446">"Selecciona una aplicació de depuració"</string> <string name="debug_app_not_set" msgid="718752499586403499">"No s\'ha definit cap aplicació de depuració"</string> <string name="debug_app_set" msgid="2063077997870280017">"Aplicació per depurar: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="select_application" msgid="5156029161289091703">"Selecciona una aplicació"</string> @@ -305,7 +305,7 @@ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Activa traces d\'OpenGL"</string> <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desactiva l\'encaminament d\'àudio per USB"</string> <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desactiva l\'encaminament automàtic als perifèrics d\'àudio USB"</string> - <string name="debug_layout" msgid="5981361776594526155">"Mostra límits de disseny"</string> + <string name="debug_layout" msgid="5981361776594526155">"Mostra límits de disposició"</string> <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> @@ -314,7 +314,7 @@ <string name="show_non_rect_clip" msgid="505954950474595172">"Depura operacions de retall no rectangulars"</string> <string name="track_frame_time" msgid="6094365083096851167">"Renderització perfil HWUI"</string> <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Activa les capes de depuració de GPU"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Permet carregar capes de depuració de GPU per a apps de depuració"</string> + <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Permet capes de depuració de GPU en apps de depuració"</string> <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala d\'animació finestra"</string> <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala d\'animació transició"</string> <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala de durada d\'animació"</string> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index 2f8a2b228885..71619e67f366 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -202,8 +202,8 @@ <string name="apn_settings_not_available" msgid="7873729032165324000">"Indstillingerne for Adgangspunkt (APN) er ikke tilgængelige for denne bruger"</string> <string name="enable_adb" msgid="7982306934419797485">"USB-fejlretning"</string> <string name="enable_adb_summary" msgid="4881186971746056635">"Fejlretningstilstand, når USB er tilsluttet"</string> - <string name="clear_adb_keys" msgid="4038889221503122743">"Tilbagekald tilladelser for USB-fejlfinding"</string> - <string name="bugreport_in_power" msgid="7923901846375587241">"Genvej til fejlrapporting"</string> + <string name="clear_adb_keys" msgid="4038889221503122743">"Tilbagekald tilladelser for USB-fejlretning"</string> + <string name="bugreport_in_power" msgid="7923901846375587241">"Genvej til fejlrapportering"</string> <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Vis en knap til oprettelse af fejlrapporter i afbrydermenuen"</string> <string name="keep_screen_on" msgid="1146389631208760344">"Lås ikke"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skærmen går ikke i dvale under opladning"</string> @@ -333,8 +333,8 @@ <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Tillad, at alle aktiviteter kan tilpasses flere vinduer uafhængigt af manifestværdier."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"Aktivér vinduer i frit format"</string> <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Aktivér understøttelse af eksperimentelle vinduer i frit format."</string> - <string name="local_backup_password_title" msgid="3860471654439418822">"Kode til lokal sikkerhedskopi"</string> - <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Lokale fuldstændige sikkerhedskopieringer er i øjeblikket ikke beskyttet"</string> + <string name="local_backup_password_title" msgid="3860471654439418822">"Kode til lokal backup"</string> + <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Lokale komplette backups er i øjeblikket ikke beskyttet"</string> <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Tryk for at skifte eller fjerne adgangskoden til fuld lokal backup"</string> <string name="local_backup_password_toast_success" msgid="582016086228434290">"Ny adgangskode til sikkerhedskopi er angivet"</string> <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Ny adgangskode og bekræftelse matcher ikke"</string> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index 869245a50acc..63387ad0cdd8 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -152,7 +152,7 @@ <string name="launch_defaults_some" msgid="313159469856372621">"Einige Standardeinstellungen festgelegt"</string> <string name="launch_defaults_none" msgid="4241129108140034876">"Keine Standardeinstellungen festgelegt"</string> <string name="tts_settings" msgid="8186971894801348327">"Sprachausgabe"</string> - <string name="tts_settings_title" msgid="1237820681016639683">"Sprachausgabe-Ausgabe"</string> + <string name="tts_settings_title" msgid="1237820681016639683">"Sprachausgabe-Einstellungen"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Sprechgeschwindigkeit"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Geschwindigkeit, mit der der Text gesprochen wird"</string> <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tonlage"</string> @@ -166,7 +166,7 @@ <string name="tts_install_data_title" msgid="4264378440508149986">"Sprachdaten installieren"</string> <string name="tts_install_data_summary" msgid="5742135732511822589">"Sprachdaten für Sprachsynthese installieren"</string> <string name="tts_engine_security_warning" msgid="8786238102020223650">"Dieses Sprachsynthesemodul kann den gesamten gesprochenen Text erfassen, einschließlich personenbezogener Daten wie Passwörter und Kreditkartennummern. Es ist Teil der App \"<xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>\". Möchtest du dieses Sprachsynthesemodul aktivieren?"</string> - <string name="tts_engine_network_required" msgid="1190837151485314743">"Für diese Sprache ist zur Sprachausgabe-Ausgabe eine aktive Netzwerkverbindung erforderlich."</string> + <string name="tts_engine_network_required" msgid="1190837151485314743">"Die Sprachausgabe für diese Sprache ist nur bei einer aktiven Netzwerkverbindung möglich."</string> <string name="tts_default_sample_string" msgid="4040835213373086322">"Dies ist ein Beispiel für Sprachsynthese."</string> <string name="tts_status_title" msgid="7268566550242584413">"Status der Standardsprache"</string> <string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> wird vollständig unterstützt."</string> @@ -204,7 +204,7 @@ <string name="enable_adb_summary" msgid="4881186971746056635">"Debugmodus bei Anschluss über USB"</string> <string name="clear_adb_keys" msgid="4038889221503122743">"USB-Debugging-Autorisierungen aufheben"</string> <string name="bugreport_in_power" msgid="7923901846375587241">"Verknüpfung zu Fehlerbericht"</string> - <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Schaltfläche zum Abrufen von Fehlerberichten im Menü \"Ein/Aus\" anzeigen"</string> + <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Im Menü \"Ein/Aus\" wird eine Option zum Erstellen eines Fehlerberichts angezeigt"</string> <string name="keep_screen_on" msgid="1146389631208760344">"Aktiv lassen"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Display wird beim Laden nie in den Ruhezustand versetzt"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI-Snoop-Protokoll aktivieren"</string> @@ -217,12 +217,12 @@ <string name="mock_location_app_not_set" msgid="809543285495344223">"Keine App für simulierte Standorte eingerichtet"</string> <string name="mock_location_app_set" msgid="8966420655295102685">"App für simulierte Standorte: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="debug_networking_category" msgid="7044075693643009662">"Netzwerke"</string> - <string name="wifi_display_certification" msgid="8611569543791307533">"Kabellose Übertragung"</string> - <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ausführliche WLAN-Protokolle aktivieren"</string> + <string name="wifi_display_certification" msgid="8611569543791307533">"Zertifizierung für kabellose Übertragung"</string> + <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ausführliche WLAN-Protokollierung aktivieren"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile Datennutzung immer aktiviert"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwarebeschleunigung für Tethering"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth-Geräte ohne Namen anzeigen"</string> - <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Maximallautstärke deaktivieren"</string> + <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Absolute Lautstärkeregelung deaktivieren"</string> <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP-Version"</string> <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Bluetooth AVRCP-Version auswählen"</string> <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-Audio-Codec"</string> @@ -231,10 +231,10 @@ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="8010380028880963535">"Bluetooth-Audio-Codec auslösen\nAuswahl: Abtastrate"</string> <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth-Audio/Bits pro Sample"</string> <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="8063859754619484760">"Bluetooth-Audio-Codec auslösen\nAuswahl: Bits pro Sample"</string> - <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modus des Bluetooth-Audiokanals"</string> + <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth-Audiokanal-Modus"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth-Audio-Codec auslösen\nAuswahl: Kanalmodus"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth-Audio-LDAC-Codec: Wiedergabequalität"</string> - <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Bluetooth-Audio-LDAC-Codec-\nAuswahl auslösen: Wiedergabequalität"</string> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Bluetooth-Audio-LDAC-Codec auslösen\nAuswahl: Wiedergabequalität"</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">"Privates DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Privaten DNS-Modus auswählen"</string> @@ -251,7 +251,7 @@ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Größe pro Protokollpuffer wählen"</string> <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Speicher der dauerhaften Protokollierung löschen?"</string> <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Wenn keine Überwachung über eine dauerhafte Protokollierung mehr stattfindet, sind wir dazu verpflichtet, die Protokolldaten auf deinem Gerät zu löschen."</string> - <string name="select_logpersist_title" msgid="7530031344550073166">"Protokolldaten dauerhaft speichern"</string> + <string name="select_logpersist_title" msgid="7530031344550073166">"Logger-Daten dauerhaft auf Gerät speichern"</string> <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"Protokollzwischenspeicher zum dauerhaften Speichern auf Gerät auswählen"</string> <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB-Konfiguration auswählen"</string> <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB-Konfiguration auswählen"</string> @@ -265,10 +265,10 @@ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Zugriff auf USB-Debugging für alle zuvor autorisierten Computer aufheben?"</string> <string name="dev_settings_warning_title" msgid="7244607768088540165">"Entwicklungseinstellungen zulassen?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Diese Einstellungen sind ausschließlich für Entwicklungszwecke gedacht. Sie können dein Gerät und die darauf installierten Apps beschädigen oder zu unerwünschtem Verhalten führen."</string> - <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Apps über USB bestätigen"</string> - <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Überprüft installierte Apps über ADB/ADT auf schädliches Verhalten"</string> - <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth-Geräte ohne Namen (nur MAC-Adressen) werden angezeigt"</string> - <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Deaktiviert die Bluetooth-Maximallautstärkefunktion, falls auf Remote-Geräten Probleme mit der Lautstärke auftreten, wie beispielsweise übermäßig laute Wiedergabe oder fehlende Kontrolle bei der Steuerung."</string> + <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Über USB installierte Apps prüfen"</string> + <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Über ADB/ADT installierte Apps werden auf schädliches Verhalten geprüft"</string> + <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth-Geräte werden ohne Namen und nur mit ihren MAC-Adressen angezeigt"</string> + <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Deaktiviert die Funktion \"Absolute Lautstärkeregelung\" für Bluetooth-Geräte, falls auf Remote-Geräten Probleme mit der Lautstärke auftreten, wie beispielsweise übermäßig laute Wiedergabe oder fehlende Steuerungsmöglichkeiten."</string> <string name="enable_terminal_title" msgid="95572094356054120">"Lokales Terminal"</string> <string name="enable_terminal_summary" msgid="67667852659359206">"Terminal-App mit Zugriff auf lokale Shell aktivieren"</string> <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP-Prüfung"</string> @@ -282,59 +282,59 @@ <string name="wait_for_debugger" msgid="1202370874528893091">"Auf Debugger warten"</string> <string name="wait_for_debugger_summary" msgid="1766918303462746804">"App wartet vor der Ausführung auf den Start des Debuggers"</string> <string name="debug_input_category" msgid="1811069939601180246">"Eingabe"</string> - <string name="debug_drawing_category" msgid="6755716469267367852">"Zeichnung"</string> + <string name="debug_drawing_category" msgid="6755716469267367852">"Bildschirmdarstellung"</string> <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardwarebeschleunigtes Rendering"</string> <string name="media_category" msgid="4388305075496848353">"Medien"</string> <string name="debug_monitoring_category" msgid="7640508148375798343">"Überwachung"</string> <string name="strict_mode" msgid="1938795874357830695">"Strikter Modus aktiviert"</string> - <string name="strict_mode_summary" msgid="142834318897332338">"Bei längeren Aktionen im Hauptthread Bildschirm kurz einblenden"</string> + <string name="strict_mode_summary" msgid="142834318897332338">"Bei langen App-Operationen im Hauptthread blinkt Bildschirm"</string> <string name="pointer_location" msgid="6084434787496938001">"Zeigerposition"</string> <string name="pointer_location_summary" msgid="840819275172753713">"Overlay mit aktuellen Daten zu Tippaktionen"</string> <string name="show_touches" msgid="2642976305235070316">"Fingertipps anzeigen"</string> <string name="show_touches_summary" msgid="6101183132903926324">"Visuelles Feedback für Fingertipps anzeigen"</string> - <string name="show_screen_updates" msgid="5470814345876056420">"Oberflächenaktualisierungen"</string> - <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flash für gesamte Fensteroberfläche bei Aktualisierung"</string> + <string name="show_screen_updates" msgid="5470814345876056420">"Oberflächenaktualisierungen anzeigen"</string> + <string name="show_screen_updates_summary" msgid="2569622766672785529">"Gesamte Fensteroberflächen blinken bei Aktualisierung"</string> <string name="show_hw_screen_updates" msgid="4117270979975470789">"Updates anzeigen"</string> - <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Flash-Ansicht im Fenster, wenn dargestellt"</string> - <string name="show_hw_layers_updates" msgid="5645728765605699821">"Hardwareebenen-Updates"</string> + <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Ansichten in Fenstern blinken beim Rendern"</string> + <string name="show_hw_layers_updates" msgid="5645728765605699821">"Hardwareebenen-Updates anzeigen"</string> <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Hardwareebenen blinken beim Aktualisieren grün"</string> - <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debugging – GPU-Überschneidung"</string> + <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU-Overdraw debuggen"</string> <string name="disable_overlays" msgid="2074488440505934665">"HW-Overlays deaktivieren"</string> - <string name="disable_overlays_summary" msgid="3578941133710758592">"GPU immer für Bildschirmaufbau verwenden"</string> + <string name="disable_overlays_summary" msgid="3578941133710758592">"Für Bildschirm-Compositing immer GPU verwenden"</string> <string name="simulate_color_space" msgid="6745847141353345872">"Farbraum simulieren"</string> <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL-Traces aktivieren"</string> <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB-Audiorouting deaktivieren"</string> <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Autom. Routing an externe USB-Audiogeräte deaktivieren"</string> - <string name="debug_layout" msgid="5981361776594526155">"Layoutgrenzen einblenden"</string> + <string name="debug_layout" msgid="5981361776594526155">"Layoutgrenzen anzeigen"</string> <string name="debug_layout_summary" msgid="2001775315258637682">"Clip-Begrenzungen, Ränder usw. anzeigen"</string> <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL-Layout erzwingen"</string> - <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"RTL-Bildschirmlayout für alle Sprachen erzwingen"</string> + <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Für alle Sprachen wird das RTL-Bildschirmlayout (linksläufig) verwendet"</string> <string name="force_msaa" msgid="7920323238677284387">"4x MSAA erzwingen"</string> - <string name="force_msaa_summary" msgid="9123553203895817537">"4x MSAA in OpenGL ES 2.0-Apps aktivieren"</string> + <string name="force_msaa_summary" msgid="9123553203895817537">"In OpenGL ES 2.0-Apps 4x MSAA aktivieren"</string> <string name="show_non_rect_clip" msgid="505954950474595172">"Nicht rechteckige Clip-Operationen debuggen"</string> <string name="track_frame_time" msgid="6094365083096851167">"HWUI-Rendering für Profil"</string> - <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"GPU-Debugging-Ebene aktivieren"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Laden von GPU-Debugging-Ebene für Debugging-Apps erlauben"</string> + <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"GPU-Debug-Ebenen zulassen"</string> + <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Debug-Apps das Laden von GPU-Debug-Ebenen erlauben"</string> <string name="window_animation_scale_title" msgid="6162587588166114700">"Maßstab Fensteranimation"</string> <string name="transition_animation_scale_title" msgid="387527540523595875">"Maßstab Übergangsanimation"</string> <string name="animator_duration_scale_title" msgid="3406722410819934083">"Maßstab für Animatorzeit"</string> <string name="overlay_display_devices_title" msgid="5364176287998398539">"Sekundäre Displays simulieren"</string> <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string> - <string name="immediately_destroy_activities" msgid="1579659389568133959">"Aktionen nicht speichern"</string> + <string name="immediately_destroy_activities" msgid="1579659389568133959">"Aktivitäten nicht speichern"</string> <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Aktivität löschen, sobald der Nutzer diese beendet"</string> - <string name="app_process_limit_title" msgid="4280600650253107163">"Hintergrundprozesslimit"</string> - <string name="show_all_anrs" msgid="4924885492787069007">"Hintergrund-ANRs anzeigen"</string> - <string name="show_all_anrs_summary" msgid="6636514318275139826">"Kleines Fenster \"App reagiert nicht\" für Hintergrund-Apps einblenden"</string> - <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Warnungen für Benachrichtigungskanäle einblenden"</string> - <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Blendet Warnungen auf dem Display ein, wenn eine App eine Benachrichtigung ohne gültigen Kanal sendet"</string> - <string name="force_allow_on_external" msgid="3215759785081916381">"Externe Speichernutzung von Apps erlauben"</string> - <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Ermöglicht es jeder qualifizierten App, Daten auf externen Speicher zu schreiben, unabhängig von den Manifestwerten"</string> - <string name="force_resizable_activities" msgid="8615764378147824985">"Anpassen der Größe von Aktivitäten erzwingen"</string> - <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Größe aller Aktivitäten an den Mehrfenstermodus anpassen, unabhängig von den Manifestwerten."</string> + <string name="app_process_limit_title" msgid="4280600650253107163">"Limit für Hintergrundprozesse"</string> + <string name="show_all_anrs" msgid="4924885492787069007">"Absturzmeldungen für Hintergrund-Apps anzeigen"</string> + <string name="show_all_anrs_summary" msgid="6636514318275139826">"Bei Abstürzen von Hintergrund-Apps \"App reagiert nicht\"-Dialog anzeigen"</string> + <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Benachrichtigungskanal-Warnungen anzeigen"</string> + <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Bei Benachrichtigungen ohne gültigen Kanal wird eine Warnung angezeigt"</string> + <string name="force_allow_on_external" msgid="3215759785081916381">"Sperrung des externen Speichers für alle Apps aufheben"</string> + <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Jede App kann, ungeachtet der Manifestwerte, in den externen Speicher geschrieben werden"</string> + <string name="force_resizable_activities" msgid="8615764378147824985">"Aktivitätengröße darf immer angepasst werden"</string> + <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Die Größe aller Aktivitäten darf, ungeachtet der Manifestwerte, für die Mehrfensterdarstellung angepasst werden"</string> <string name="enable_freeform_support" msgid="1461893351278940416">"Freiform-Fenster zulassen"</string> - <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Experimentelle Freiform-Fenster unterstützen."</string> - <string name="local_backup_password_title" msgid="3860471654439418822">"Desktop-Sicherungspasswort"</string> - <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Vollständige Desktop-Sicherungen sind momentan nicht passwortgeschützt."</string> + <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Unterstützung für experimentelle Freiform-Fenster aktivieren"</string> + <string name="local_backup_password_title" msgid="3860471654439418822">"Passwort für Desktop-Sicherung"</string> + <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Vollständige Desktop-Sicherungen sind momentan nicht passwortgeschützt"</string> <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Zum Ändern oder Entfernen des Passworts für vollständige Desktop-Sicherungen tippen"</string> <string name="local_backup_password_toast_success" msgid="582016086228434290">"Neues Sicherungspasswort festgelegt"</string> <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Das neue Passwort und die Bestätigung stimmen nicht überein."</string> diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index 86bcf717214b..68b52275129e 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -216,7 +216,7 @@ <string name="mock_location_app" msgid="7966220972812881854">"Valige asukohateavet imiteeriv rakendus"</string> <string name="mock_location_app_not_set" msgid="809543285495344223">"Asukohateavet imiteeriv rakendus on määramata"</string> <string name="mock_location_app_set" msgid="8966420655295102685">"Asukohateavet imiteeriv rakendus: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="debug_networking_category" msgid="7044075693643009662">"Võrgustik"</string> + <string name="debug_networking_category" msgid="7044075693643009662">"Võrgundus"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Juhtmeta ekraaniühenduse sertifitseerimine"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Luba WiFi sõnaline logimine"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Hoia mobiilne andmeside alati aktiivne"</string> @@ -294,8 +294,8 @@ <string name="show_touches_summary" msgid="6101183132903926324">"Kuvab puudutuste visuaalse tagasiside"</string> <string name="show_screen_updates" msgid="5470814345876056420">"Näita pinna värskendusi"</string> <string name="show_screen_updates_summary" msgid="2569622766672785529">"Akna pinna värskendamiseks kirjuta kogu akna pind üle"</string> - <string name="show_hw_screen_updates" msgid="4117270979975470789">"Kuva ekraanikuva värsk."</string> - <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Joonistades kirjuta akende kuvad üle"</string> + <string name="show_hw_screen_updates" msgid="4117270979975470789">"Kuva ekraanikuva värskendusi"</string> + <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Joonistades vilguta akende sisekuvasid"</string> <string name="show_hw_layers_updates" msgid="5645728765605699821">"Kuva riistvarakihtide värskendusi"</string> <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Riistvara kihid vilguvad värskendamisel roheliselt"</string> <string name="debug_hw_overdraw" msgid="2968692419951565417">"Silu GPU ülejoonistust"</string> diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index c5a672469dc1..3cc66178cdf3 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -419,7 +419,7 @@ <item msgid="1286113608943010849">"% 100"</item> </string-array> <string name="charge_length_format" msgid="8978516217024434156">"Duela <xliff:g id="ID_1">%1$s</xliff:g>"</string> - <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> guztiz kargatu arte"</string> + <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> geratzen dira"</string> <string name="screen_zoom_summary_small" msgid="5867245310241621570">"Txikia"</string> <string name="screen_zoom_summary_default" msgid="2247006805614056507">"Lehenetsia"</string> <string name="screen_zoom_summary_large" msgid="4835294730065424084">"Handia"</string> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index d036446ddf39..6ea317d7042e 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -293,9 +293,9 @@ <string name="show_touches" msgid="2642976305235070316">"Näytä kosketus"</string> <string name="show_touches_summary" msgid="6101183132903926324">"Anna visuaalista palautetta kosketuksesta."</string> <string name="show_screen_updates" msgid="5470814345876056420">"Näytä pintapäivitykset"</string> - <string name="show_screen_updates_summary" msgid="2569622766672785529">"Väläytä koko ikkunoiden pinnat päivitettäessä"</string> + <string name="show_screen_updates_summary" msgid="2569622766672785529">"Väläytä koko ikkunoiden pinnat päivitettäessä."</string> <string name="show_hw_screen_updates" msgid="4117270979975470789">"Näytä näyttöpäivitykset"</string> - <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Näytä ikkunoiden sisältö piirtämisen yhteydessä"</string> + <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Näytä ikkunoiden sisältö piirtämisen yhteydessä."</string> <string name="show_hw_layers_updates" msgid="5645728765605699821">"Näytä laitteistotason päivitykset"</string> <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Näytä laitteistotasot vihreinä niiden päivittyessä."</string> <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU-objektien päällekkäisyys"</string> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index d964ee4293d4..27d78854a2e0 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -203,10 +203,10 @@ <string name="enable_adb" msgid="7982306934419797485">"Débogage USB"</string> <string name="enable_adb_summary" msgid="4881186971746056635">"Mode débogage lorsqu\'un câble USB est connecté"</string> <string name="clear_adb_keys" msgid="4038889221503122743">"Annuler autorisations pour débog. USB"</string> - <string name="bugreport_in_power" msgid="7923901846375587241">"Raccourci vers rapport d\'erreur"</string> - <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Afficher un bouton dans le menu de démarrage permettant de créer un rapport d\'erreur"</string> - <string name="keep_screen_on" msgid="1146389631208760344">"Rester activé"</string> - <string name="keep_screen_on_summary" msgid="2173114350754293009">"L\'écran ne se met jamais en veille lors du chargement."</string> + <string name="bugreport_in_power" msgid="7923901846375587241">"Raccourci vers rapport de bug"</string> + <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Afficher un bouton dans le menu de démarrage permettant de créer un rapport de bug"</string> + <string name="keep_screen_on" msgid="1146389631208760344">"Écran toujours actif"</string> + <string name="keep_screen_on_summary" msgid="2173114350754293009">"L\'écran ne se met jamais en veille lorsqu\'il est en charge"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activer journaux HCI Bluetooth"</string> <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturer les paquets Bluetooth. (Activer/Désactiver le Bluetooth après avoir modifié ce paramètre)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Déverrouillage OEM"</string> @@ -215,7 +215,7 @@ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"AVERTISSEMENT : Les fonctionnalités de protection de l\'appareil sont désactivées tant que ce paramètre est activé."</string> <string name="mock_location_app" msgid="7966220972812881854">"Sélectionner l\'application de position fictive"</string> <string name="mock_location_app_not_set" msgid="809543285495344223">"Aucune application de position fictive définie"</string> - <string name="mock_location_app_set" msgid="8966420655295102685">"Application de position fictive : \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <string name="mock_location_app_set" msgid="8966420655295102685">"Application de position fictive : <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="debug_networking_category" msgid="7044075693643009662">"Mise en réseau"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certification affichage sans fil"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Autoriser enreg. infos Wi-Fi détaillées"</string> @@ -247,7 +247,7 @@ <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Détailler plus infos Wi-Fi, afficher par RSSI de SSID dans outil sélection Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Facturé à l\'usage"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Non facturé à l\'usage"</string> - <string name="select_logd_size_title" msgid="7433137108348553508">"Tailles mémoires tampons enregistr."</string> + <string name="select_logd_size_title" msgid="7433137108348553508">"Tailles des tampons de l\'enregistreur"</string> <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Tailles enreg. par tampon journal"</string> <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Effacer l\'espace de stockage persistant de l\'enregistreur ?"</string> <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Lorsque nous n\'effectuons plus de suivi avec l\'enregistreur persistant, nous sommes tenus d\'effacer les données associées à ce dernier qui sont stockées sur votre appareil."</string> @@ -257,7 +257,7 @@ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Sélectionner une configuration USB"</string> <string name="allow_mock_location" msgid="2787962564578664888">"Autoriser les positions fictives"</string> <string name="allow_mock_location_summary" msgid="317615105156345626">"Autoriser les positions fictives"</string> - <string name="debug_view_attributes" msgid="6485448367803310384">"Activer inspect. attribut affich."</string> + <string name="debug_view_attributes" msgid="6485448367803310384">"Inspection des attributs d\'affichage"</string> <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Maintenir les données mobiles à l\'état actif, même lorsque le Wi‑Fi est actif (pour changer rapidement de réseau)"</string> <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Utiliser l\'accélération matérielle pour le partage de connexion, si disponible"</string> <string name="adb_warning_title" msgid="6234463310896563253">"Autoriser le débogage USB ?"</string> @@ -266,7 +266,7 @@ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Activer les paramètres de développement ?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ces paramètres sont en cours de développement. Ils peuvent endommager votre appareil et les applications qui s\'y trouvent, ou provoquer leur dysfonctionnement."</string> <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Vérifier les applis via USB"</string> - <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Vérifiez que les applications installées par ADB/ADT ne présentent pas de comportement dangereux."</string> + <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Vérifier que les applications installées par ADB/ADT ne présentent pas de comportement dangereux"</string> <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Les appareils Bluetooth seront affichés sans nom (adresse MAC uniquement)"</string> <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Désactive la fonctionnalité de volume absolu du Bluetooth en cas de problème de volume sur les appareils à distance, par exemple si le volume est trop élevé ou s\'il ne peut pas être contrôlé"</string> <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string> @@ -280,7 +280,7 @@ <string name="select_application" msgid="5156029161289091703">"Sélectionner une appli"</string> <string name="no_application" msgid="2813387563129153880">"Aucune"</string> <string name="wait_for_debugger" msgid="1202370874528893091">"Attendre l\'intervention du débogueur"</string> - <string name="wait_for_debugger_summary" msgid="1766918303462746804">"L\'application déboguée attend d\'être liée au débogueur pour s\'exécuter."</string> + <string name="wait_for_debugger_summary" msgid="1766918303462746804">"L\'application déboguée attend d\'être liée au débogueur pour s\'exécuter"</string> <string name="debug_input_category" msgid="1811069939601180246">"Saisie"</string> <string name="debug_drawing_category" msgid="6755716469267367852">"Tracé"</string> <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Accélération matérielle"</string> @@ -313,8 +313,8 @@ <string name="force_msaa_summary" msgid="9123553203895817537">"Activer MSAA 4x dans les applications OpenGL ES 2.0"</string> <string name="show_non_rect_clip" msgid="505954950474595172">"Déboguer opé. de découpage non rect."</string> <string name="track_frame_time" msgid="6094365083096851167">"Rendu HWUI du profil"</string> - <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Activer couches débogage GPU"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Autoriser charg. couches débogage GPU pour applis débogage"</string> + <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Activer les couches de débogage GPU"</string> + <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Autoriser le chargement de couches de débogage GPU"</string> <string name="window_animation_scale_title" msgid="6162587588166114700">"Échelle animation fenêtres"</string> <string name="transition_animation_scale_title" msgid="387527540523595875">"Échelle anim. transitions"</string> <string name="animator_duration_scale_title" msgid="3406722410819934083">"Échelle durée animation"</string> @@ -333,8 +333,8 @@ <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Permettre de redimensionner toutes les activités pour le mode multifenêtre, indépendamment des valeurs du fichier manifeste"</string> <string name="enable_freeform_support" msgid="1461893351278940416">"Activer les fenêtres de forme libre"</string> <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Activer la compatibilité avec les fenêtres de forme libre expérimentales"</string> - <string name="local_backup_password_title" msgid="3860471654439418822">"Mot de passe sauvegarde PC"</string> - <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Les sauvegardes complètes sur PC ne sont pas protégées actuellement."</string> + <string name="local_backup_password_title" msgid="3860471654439418822">"Mot de passe de sauvegarde PC"</string> + <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Les sauvegardes complètes sur PC ne sont pas protégées actuellement"</string> <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Appuyez pour modifier ou supprimer le mot de passe de sauvegarde complète sur PC."</string> <string name="local_backup_password_toast_success" msgid="582016086228434290">"Le nouveau mot de passe de secours a bien été défini."</string> <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Le nouveau mot de passe et sa confirmation ne correspondent pas."</string> diff --git a/packages/SettingsLib/res/values-gl/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml index a7325c20f0f0..0ead894ebc28 100644 --- a/packages/SettingsLib/res/values-gl/arrays.xml +++ b/packages/SettingsLib/res/values-gl/arrays.xml @@ -59,9 +59,9 @@ <item msgid="45075631231212732">"Utilizar sempre a comprobación HDCP"</item> </string-array> <string-array name="bt_hci_snoop_log_entries"> - <item msgid="3966341281672645384">"Opción desactivada"</item> + <item msgid="3966341281672645384">"Desactivada"</item> <item msgid="1969681323976948639">"Está activado o filtrado"</item> - <item msgid="8719029132154020716">"Opción activada"</item> + <item msgid="8719029132154020716">"Activada"</item> </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (predeterminado)"</item> diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index 19c75131f361..4ffb7c57d945 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -193,10 +193,10 @@ <string name="choose_profile" msgid="6921016979430278661">"Escoller perfil"</string> <string name="category_personal" msgid="1299663247844969448">"Persoal"</string> <string name="category_work" msgid="8699184680584175622">"Traballo"</string> - <string name="development_settings_title" msgid="215179176067683667">"Opcións de programador"</string> - <string name="development_settings_enable" msgid="542530994778109538">"Activar opcións de programador"</string> + <string name="development_settings_title" msgid="215179176067683667">"Opcións para programadores"</string> + <string name="development_settings_enable" msgid="542530994778109538">"Activar opcións para programadores"</string> <string name="development_settings_summary" msgid="1815795401632854041">"Definir as opcións de desenvolvemento de aplicacións"</string> - <string name="development_settings_not_available" msgid="4308569041701535607">"As opcións de programador non están dispoñibles para este usuario"</string> + <string name="development_settings_not_available" msgid="4308569041701535607">"As opcións para programadores non están dispoñibles para este usuario"</string> <string name="vpn_settings_not_available" msgid="956841430176985598">"A configuración da VPN non está dispoñible para este usuario"</string> <string name="tethering_settings_not_available" msgid="6765770438438291012">"A configuración da conexión compartida non está dispoñible para este usuario"</string> <string name="apn_settings_not_available" msgid="7873729032165324000">"A configuración do nome do punto de acceso non está dispoñible para este usuario"</string> @@ -207,7 +207,7 @@ <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> + <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activar rexistro de Bluetooth HCI"</string> <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar paquetes de Bluetooth. (Activa/desactiva o Bluetooth despois de cambiar esta opción)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueo do OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que se desbloqueo o cargador de inicio"</string> @@ -247,18 +247,18 @@ <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_metered_label" msgid="4514924227256839725">"De pago por consumo"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Sen pago por consumo"</string> - <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños de búfer de rexistrador"</string> - <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Seleccionar tamaños por búfer"</string> - <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Queres borrar o almacenamento continuo do rexistrador?"</string> - <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Cando xa non se supervisa a actividade co rexistrador de forma continua, debemos borrar os datos do rexistrador almacenados no dispositivo."</string> - <string name="select_logpersist_title" msgid="7530031344550073166">"Gardar datos de rexistrador de forma continua"</string> + <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños do búfer do rexistrador"</string> + <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Seleccionar tamaño do rexistrador por búfer"</string> + <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Queres borrar o almacenamento persistente do rexistrador?"</string> + <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Cando xa non se supervisa a actividade co rexistrador de forma persistente, debemos borrar os datos do rexistrador almacenados no dispositivo."</string> + <string name="select_logpersist_title" msgid="7530031344550073166">"Gardar datos do rexistrador de forma persistente"</string> <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"Seleccionar búfers de rexistro para gardalos de forma continua no dispositivo"</string> <string name="select_usb_configuration_title" msgid="2649938511506971843">"Seleccionar configuración USB"</string> <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Seleccionar configuración USB"</string> <string name="allow_mock_location" msgid="2787962564578664888">"Permitir localizacións falsas"</string> <string name="allow_mock_location_summary" msgid="317615105156345626">"Permite localizacións falsas"</string> <string name="debug_view_attributes" msgid="6485448367803310384">"Activar a inspección de atributos de visualización"</string> - <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantén sempre os datos móbiles activos, aínda que a wifi estea activada (para un rápido cambio de rede)."</string> + <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantén sempre os datos móbiles activados, aínda que a wifi estea activa (para cambiar de rede rapidamente)"</string> <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Se está dispoñible, úsase a aceleración de hardware para conexión compartida"</string> <string name="adb_warning_title" msgid="6234463310896563253">"Queres permitir a depuración por USB?"</string> <string name="adb_warning_message" msgid="7316799925425402244">"A depuración de erros USB está deseñada unicamente para fins de programación. Utilízaa para copiar datos entre o ordenador e o dispositivo, instalar aplicacións no dispositivo sen enviar notificacións e ler os datos do rexistro."</string> @@ -266,7 +266,7 @@ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Permitir a configuración de programación?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Esta configuración só está destinada á programación. Esta pode provocar que o dispositivo e as aplicacións fallen ou se comporten incorrectamente."</string> <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar aplicacións por USB"</string> - <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprobar as aplicacións instaladas a través de ADB/ADT para detectar comportamento perigoso."</string> + <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comproba as aplicacións instaladas a través de ADB/ADT para detectar comportamento perigoso."</string> <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Mostraranse dispositivos Bluetooth sen nomes (só enderezos MAC)"</string> <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desactiva a función do volume absoluto do Bluetooth en caso de que se produzan problemas de volume cos dispositivos remotos, como volume demasiado alto ou falta de control."</string> <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string> @@ -287,55 +287,55 @@ <string name="media_category" msgid="4388305075496848353">"Multimedia"</string> <string name="debug_monitoring_category" msgid="7640508148375798343">"Supervisión"</string> <string name="strict_mode" msgid="1938795874357830695">"Modo estrito activado"</string> - <string name="strict_mode_summary" msgid="142834318897332338">"Pestanexa se aplicacións tardan moito no proceso principal"</string> + <string name="strict_mode_summary" msgid="142834318897332338">"Ilumínase se aplicacións tardan moito no proceso principal"</string> <string name="pointer_location" msgid="6084434787496938001">"Localización do punteiro"</string> - <string name="pointer_location_summary" msgid="840819275172753713">"Superpoñer datos dos toques na pantalla"</string> + <string name="pointer_location_summary" msgid="840819275172753713">"Superpón os datos dos toques na pantalla"</string> <string name="show_touches" msgid="2642976305235070316">"Mostrar toques"</string> - <string name="show_touches_summary" msgid="6101183132903926324">"Mostra a información visual dos toques"</string> + <string name="show_touches_summary" msgid="6101183132903926324">"Mostra a localización dos toques na pantalla"</string> <string name="show_screen_updates" msgid="5470814345876056420">"Cambios de superficie"</string> - <string name="show_screen_updates_summary" msgid="2569622766672785529">"Iluminar superficies de ventás ao actualizarse"</string> + <string name="show_screen_updates_summary" msgid="2569622766672785529">"Ilumina as superficies de ventás ao actualizarse"</string> <string name="show_hw_screen_updates" msgid="4117270979975470789">"Mostrar actualizacións"</string> - <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Actualiza as vistas das ventás creadas"</string> - <string name="show_hw_layers_updates" msgid="5645728765605699821">"Ver act. capas hardware"</string> - <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Iluminar capas hardware en verde ao actualizarse"</string> + <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Ilumina as vistas das ventás creadas"</string> + <string name="show_hw_layers_updates" msgid="5645728765605699821">"Ver actualizacións de capas de hardware"</string> + <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Ilumina as capas de hardware en verde ao actualizárense"</string> <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depurar superposición GPU"</string> - <string name="disable_overlays" msgid="2074488440505934665">"Desact. superposicións HW"</string> - <string name="disable_overlays_summary" msgid="3578941133710758592">"Utilizar sempre GPU para a composición da pantalla"</string> + <string name="disable_overlays" msgid="2074488440505934665">"Desactivar superposicións de hardware"</string> + <string name="disable_overlays_summary" msgid="3578941133710758592">"Utiliza 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">"Desact. encamiñamento audio USB"</string> - <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desact. encamiñamento aut. a periférico audio USB"</string> + <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desactivar encamiñamento audio USB"</string> + <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desactiva o encamiñamento automático a periféricos de 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> <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forzar dirección do deseño RTL"</string> <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forza a dirección de pantalla a RTL (dereita a esquerda) para todas as configuración rexionais"</string> <string name="force_msaa" msgid="7920323238677284387">"Forzar MSAA 4x"</string> - <string name="force_msaa_summary" msgid="9123553203895817537">"Activar MSAA 4x en aplicacións OpenGL ES 2.0"</string> - <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar operacións recorte non rectangulares"</string> + <string name="force_msaa_summary" msgid="9123553203895817537">"Activa MSAA 4x en aplicacións OpenGL ES 2.0"</string> + <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar accións recorte non rectangulares"</string> <string name="track_frame_time" msgid="6094365083096851167">"Perfil procesamento HWUI"</string> <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Activar depuración da GPU"</string> <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Permite capas da GPU para apps de depuración"</string> - <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala animación da ventá"</string> - <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala anim. transición"</string> + <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de animación da ventá"</string> + <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala animación-transición"</string> <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala duración animador"</string> <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simular pantallas secundarias"</string> <string name="debug_applications_category" msgid="4206913653849771549">"Aplicacións"</string> <string name="immediately_destroy_activities" msgid="1579659389568133959">"Non manter actividades"</string> <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destruír actividades cando o usuario non as use"</string> <string name="app_process_limit_title" msgid="4280600650253107163">"Límite procesos 2º plano"</string> - <string name="show_all_anrs" msgid="4924885492787069007">"Mostrar ANR en segundo plano"</string> + <string name="show_all_anrs" msgid="4924885492787069007">"Erros sen resposta en segundo plano"</string> <string name="show_all_anrs_summary" msgid="6636514318275139826">"Indica que unha aplicación en segundo plano non responde"</string> <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Mostrar avisos de notificacións"</string> <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Mostra avisos cando unha aplicación publica notificacións sen unha canle válida"</string> <string name="force_allow_on_external" msgid="3215759785081916381">"Forzar permiso de aplicacións de forma externa"</string> - <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Permite que calquera aplicación apta se poida escribir nun almacenamento externo, independentemente dos valores expresados"</string> + <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Permite que calquera aplicación compatible se poida escribir nun almacenamento externo, independentemente dos valores do manifesto"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forzar o axuste do tamaño das actividades"</string> - <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Permite axustar o tamaño de todas as actividades para o modo multiventá, independentemente dos valores definidos."</string> + <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Permite axustar o tamaño de todas as actividades para o modo multiventá, independentemente dos valores do manifesto"</string> <string name="enable_freeform_support" msgid="1461893351278940416">"Activar ventás de forma libre"</string> <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Activa a compatibilidade con ventás de forma libre experimentais."</string> <string name="local_backup_password_title" msgid="3860471654439418822">"Contrasinal para copias"</string> <string name="local_backup_password_summary_none" msgid="6951095485537767956">"As copias de seguranza de ordenador completas non están protexidas"</string> - <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Toca para cambiar ou eliminar o contrasinal para as copias de seguranza completas do escritorio"</string> + <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Toca para cambiar ou eliminar o contrasinal para as copias de seguranza completas de ordenador"</string> <string name="local_backup_password_toast_success" msgid="582016086228434290">"Novo contrasinal da copia de seguranza definido"</string> <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"O contrasinal novo e a confirmación non coinciden"</string> <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Erro ao definir un contrasinal da copia de seguranza"</string> @@ -354,8 +354,8 @@ <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Aplicación inactiva. Toca para alternar a configuración."</string> <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aplicación activa. Toca para alternar a configuración."</string> <string name="standby_bucket_summary" msgid="6567835350910684727">"Estado en espera da aplicación: <xliff:g id="BUCKET"> %s</xliff:g>"</string> - <string name="runningservices_settings_title" msgid="8097287939865165213">"En execución"</string> - <string name="runningservices_settings_summary" msgid="854608995821032748">"Comproba e controla os servizos actualmente en execución"</string> + <string name="runningservices_settings_title" msgid="8097287939865165213">"Servizos en uso"</string> + <string name="runningservices_settings_summary" msgid="854608995821032748">"Comproba e controla os servizos actualmente en uso"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementación de WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Definir implementación de WebView"</string> <string name="select_webview_provider_toast_text" msgid="5466970498308266359">"Esta opción xa non é válida. Téntao de novo."</string> diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index e812810547db..da59230ecd42 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -269,7 +269,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">"यूएसबी पर ऐप्लिकेशन की पुष्टि करें"</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">"बिना नाम वाले ब्लूटूथ डिवाइस (केवल MAC पते वाले) दिखाए जाएंगे"</string> <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"दूर के डिवाइस पर आवाज़ बहुत बढ़ जाने या उससे नियंत्रण हटने जैसी समस्याएं होने पर, यह ब्लूटूथ के ज़रिए आवाज़ के नियंत्रण की सुविधा रोक देता है."</string> <string name="enable_terminal_title" msgid="95572094356054120">"स्थानीय टर्मिनल"</string> @@ -309,7 +309,7 @@ <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="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_msaa" msgid="7920323238677284387">"4x MSAA को हर हाल में चालू करें"</string> @@ -340,7 +340,7 @@ <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> + <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"नया पासवर्ड और पुष्टि मेल नही खाते"</string> <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"सुरक्षित पासवर्ड सेट करने में विफल रहा"</string> <string name="loading_injected_setting_summary" msgid="4095178591461231376">"लोड हो रहा है…"</string> <string-array name="color_mode_names"> @@ -379,16 +379,16 @@ <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_settings_home_page" msgid="4845022416859002011">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string> - <string name="power_remaining_duration_only" msgid="6123167166221295462">"बैटरी लगभग <xliff:g id="TIME_REMAINING">%1$s</xliff:g> में खत्म हो जाएगी"</string> - <string name="power_discharging_duration" msgid="8848256785736335185">"बैटरी लगभग <xliff:g id="TIME_REMAINING">%1$s</xliff:g> में खत्म हो जाएगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_remaining_duration_only" msgid="6123167166221295462">"बैटरी करीब <xliff:g id="TIME_REMAINING">%1$s</xliff:g> में खत्म हो जाएगी"</string> + <string name="power_discharging_duration" msgid="8848256785736335185">"बैटरी करीब <xliff:g id="TIME_REMAINING">%1$s</xliff:g> में खत्म हो जाएगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_duration_only_enhanced" msgid="4189311599812296592">"आपके इस्तेमाल के हिसाब से बैटरी करीब <xliff:g id="TIME_REMAINING">%1$s</xliff:g> में खत्म हो जाएगी"</string> <string name="power_discharging_duration_enhanced" msgid="1992003260664804080">"आपके इस्तेमाल के हिसाब से बैटरी करीब <xliff:g id="TIME_REMAINING">%1$s</xliff:g> में खत्म हो जाएगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <!-- no translation found for power_remaining_duration_only_short (9183070574408359726) --> <skip /> <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"आपके इस्तेमाल के हिसाब से बैटरी करीब <xliff:g id="TIME">%1$s</xliff:g> तक चलेगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"आपके इस्तेमाल के हिसाब से बैटरी करीब <xliff:g id="TIME">%1$s</xliff:g> तक चलेगी"</string> - <string name="power_discharge_by" msgid="6453537733650125582">"बैटरी लगभग <xliff:g id="TIME">%1$s</xliff:g> चलेगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_discharge_by_only" msgid="107616694963545745">"बैटरी लगभग <xliff:g id="TIME">%1$s</xliff:g> चलेगी"</string> + <string name="power_discharge_by" msgid="6453537733650125582">"बैटरी करीब <xliff:g id="TIME">%1$s</xliff:g> चलेगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_discharge_by_only" msgid="107616694963545745">"बैटरी करीब <xliff:g id="TIME">%1$s</xliff:g> चलेगी"</string> <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> तक"</string> <!-- no translation found for power_suggestion_extend_battery (4401408879069551485) --> <skip /> diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml index 867f9eaa73a8..06f743ec6d0b 100644 --- a/packages/SettingsLib/res/values-in/arrays.xml +++ b/packages/SettingsLib/res/values-in/arrays.xml @@ -165,11 +165,11 @@ </string-array> <string-array name="select_logd_size_summaries"> <item msgid="6921048829791179331">"Nonaktif"</item> - <item msgid="2969458029344750262">"64 K/penyangga log"</item> - <item msgid="1342285115665698168">"256 K/penyangga log"</item> - <item msgid="1314234299552254621">"1 M/penyangga log"</item> - <item msgid="3606047780792894151">"4 M/penyangga log"</item> - <item msgid="5431354956856655120">"16 M/penyangga log"</item> + <item msgid="2969458029344750262">"64 K/buffer log"</item> + <item msgid="1342285115665698168">"256 K/buffer log"</item> + <item msgid="1314234299552254621">"1 M/buffer log"</item> + <item msgid="3606047780792894151">"4 M/buffer log"</item> + <item msgid="5431354956856655120">"16 M/buffer log"</item> </string-array> <string-array name="select_logpersist_titles"> <item msgid="1744840221860799971">"Nonaktif"</item> @@ -181,7 +181,7 @@ <item msgid="2216470072500521830">"Nonaktif"</item> <item msgid="172978079776521897">"Semua penyangga log"</item> <item msgid="3873873912383879240">"Semua kecuali penyangga log radio"</item> - <item msgid="8489661142527693381">"khusus penyangga log kernel"</item> + <item msgid="8489661142527693381">"khusus buffer log kernel"</item> </string-array> <string-array name="window_animation_scale_entries"> <item msgid="8134156599370824081">"Animasi mati"</item> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index 1a0a4abf5889..50e305ee00d2 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -291,13 +291,13 @@ <string name="pointer_location" msgid="6084434787496938001">"Lokasi penunjuk"</string> <string name="pointer_location_summary" msgid="840819275172753713">"Hamparan layar menampilkan data sentuhan saat ini"</string> <string name="show_touches" msgid="2642976305235070316">"Tampilkan tap"</string> - <string name="show_touches_summary" msgid="6101183132903926324">"Tampilkan masukan visual untuk ketukan"</string> + <string name="show_touches_summary" msgid="6101183132903926324">"Tampilkan masukan visual untuk tap"</string> <string name="show_screen_updates" msgid="5470814345876056420">"Lihat pembaruan permukaan"</string> <string name="show_screen_updates_summary" msgid="2569622766672785529">"Sorot seluruh permukaan jendela saat diperbarui"</string> <string name="show_hw_screen_updates" msgid="4117270979975470789">"Tampilkan update tampilan"</string> <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Tampilan cepat dalam jendela saat digambar"</string> <string name="show_hw_layers_updates" msgid="5645728765605699821">"Tunjukkan update lapisan hardware"</string> - <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Lapisan hardware berkedip hijau saat memperbarui"</string> + <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Lapisan hardware berkedip hijau saat mengupdate"</string> <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debug overdraw oleh GPU"</string> <string name="disable_overlays" msgid="2074488440505934665">"Nonaktifkan lapisan HW"</string> <string name="disable_overlays_summary" msgid="3578941133710758592">"Selalu gunakan GPU untuk pengomposisian layar"</string> @@ -320,8 +320,8 @@ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Skala durasi animator"</string> <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulasikan tampilan sekunder"</string> <string name="debug_applications_category" msgid="4206913653849771549">"Aplikasi"</string> - <string name="immediately_destroy_activities" msgid="1579659389568133959">"Jangan simpan kegiatan"</string> - <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Hancurkan tiap kegiatan setelah ditinggal pengguna"</string> + <string name="immediately_destroy_activities" msgid="1579659389568133959">"Jangan simpan aktivitas"</string> + <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Hancurkan tiap aktivitas setelah ditinggal pengguna"</string> <string name="app_process_limit_title" msgid="4280600650253107163">"Batas proses background"</string> <string name="show_all_anrs" msgid="4924885492787069007">"Tampilkan ANR background"</string> <string name="show_all_anrs_summary" msgid="6636514318275139826">"Tampilkan dialog Aplikasi Tidak Merespons untuk aplikasi yang berjalan di background"</string> @@ -367,7 +367,7 @@ <string name="button_convert_fbe" msgid="5152671181309826405">"Hapus dan konversi…"</string> <string name="picture_color_mode" msgid="4560755008730283695">"Mode warna gambar"</string> <string name="picture_color_mode_desc" msgid="1141891467675548590">"Gunakan sRGB"</string> - <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Nonaktifkan"</string> + <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Dinonaktifkan"</string> <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokromasi"</string> <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteromali (merah-hijau)"</string> <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomali (merah-hijau)"</string> diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml index 7d316ab8433d..eb2c1342ff89 100644 --- a/packages/SettingsLib/res/values-it/arrays.xml +++ b/packages/SettingsLib/res/values-it/arrays.xml @@ -59,7 +59,7 @@ <item msgid="45075631231212732">"Usa sempre la verifica HDCP"</item> </string-array> <string-array name="bt_hci_snoop_log_entries"> - <item msgid="3966341281672645384">"Non attiva"</item> + <item msgid="3966341281672645384">"Non attivo"</item> <item msgid="1969681323976948639">"Filtro attivo"</item> <item msgid="8719029132154020716">"Attiva"</item> </string-array> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index 2169b0cb13c6..fdd1b41d3c1d 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -201,7 +201,7 @@ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Le impostazioni Tethering non sono disponibili per questo utente"</string> <string name="apn_settings_not_available" msgid="7873729032165324000">"Le impostazioni del nome punto di accesso non sono disponibili per questo utente"</string> <string name="enable_adb" msgid="7982306934419797485">"Debug USB"</string> - <string name="enable_adb_summary" msgid="4881186971746056635">"Modalità debug quando è connesso USB"</string> + <string name="enable_adb_summary" msgid="4881186971746056635">"Modalità debug quando è connesso tramite USB"</string> <string name="clear_adb_keys" msgid="4038889221503122743">"Revoca autorizzazioni debug USB"</string> <string name="bugreport_in_power" msgid="7923901846375587241">"Scorciatoria segnalazione bug"</string> <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostra un pulsante per segnalare i bug nel menu di accensione"</string> @@ -227,7 +227,7 @@ <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Seleziona versione Bluetooth AVRCP"</string> <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec audio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="8436224899475822557">"Attiva il codec audio Bluetooth\nSelezione"</string> - <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Frequenza di campionamento audio Bluetooth"</string> + <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Freq. di campionamento audio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="8010380028880963535">"Attiva il codec audio Bluetooth\nSelezione: Frequenza di campionamento"</string> <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit per campione dell\'audio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="8063859754619484760">"Attiva il codec audio Bluetooth\nSelezione: bit per campione"</string> @@ -251,14 +251,14 @@ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Seleziona dimensioni Logger per buffer log"</string> <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Cancellare i dati nello spazio di archiviazione permanente del logger?"</string> <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Quando il monitoraggio tramite logger permanente viene interrotto, siamo obbligati a eliminare i dati del logger memorizzati sul dispositivo."</string> - <string name="select_logpersist_title" msgid="7530031344550073166">"Salva dati del logger sul dispositivo in modo permanente"</string> + <string name="select_logpersist_title" msgid="7530031344550073166">"Salva dati del logger in modo permanente"</string> <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"Seleziona i buffer log da memorizzare in modo permanente sul dispositivo"</string> <string name="select_usb_configuration_title" msgid="2649938511506971843">"Seleziona configurazione USB"</string> <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Seleziona configurazione USB"</string> <string name="allow_mock_location" msgid="2787962564578664888">"Posizioni fittizie"</string> <string name="allow_mock_location_summary" msgid="317615105156345626">"Consenti posizioni fittizie"</string> <string name="debug_view_attributes" msgid="6485448367803310384">"Attiva controllo attributi visualizzazione"</string> - <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantieni sempre i dati mobili attivi, anche se il Wi‑Fi è attivo (per un passaggio fra reti rapido)."</string> + <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantieni sempre i dati mobili attivi, anche se il Wi‑Fi è attivo (per un passaggio fra reti rapido)"</string> <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Utilizza l\'accelerazione hardware per il tethering se disponibile"</string> <string name="adb_warning_title" msgid="6234463310896563253">"Consentire debug USB?"</string> <string name="adb_warning_message" msgid="7316799925425402244">"Il debug USB è solo a scopo di sviluppo. Utilizzalo per copiare dati tra il computer e il dispositivo, per installare applicazioni sul tuo dispositivo senza notifica e per leggere i dati dei log."</string> @@ -266,9 +266,9 @@ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Consentire impostazioni di sviluppo?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Queste impostazioni sono utilizzabili solo a scopo di sviluppo. Possono causare l\'arresto o il comportamento anomalo del dispositivo e delle applicazioni su di esso."</string> <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifica app tramite USB"</string> - <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Controlla che le app installate tramite ADB/ADT non abbiano un comportamento dannoso."</string> + <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Controlla che le app installate tramite ADB/ADT non abbiano un comportamento dannoso"</string> <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Verranno mostrati solo dispositivi Bluetooth senza nome (solo indirizzo MAC)"</string> - <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Disattiva la funzione del volume assoluto Bluetooth in caso di problemi con il volume dei dispositivi remoti, ad esempio un volume troppo alto o la mancanza di controllo."</string> + <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Disattiva la funzione del volume assoluto Bluetooth in caso di problemi con il volume dei dispositivi remoti, ad esempio un volume troppo alto o la mancanza di controllo"</string> <string name="enable_terminal_title" msgid="95572094356054120">"Terminale locale"</string> <string name="enable_terminal_summary" msgid="67667852659359206">"Abilita l\'app Terminale che offre l\'accesso alla shell locale"</string> <string name="hdcp_checking_title" msgid="8605478913544273282">"Verifica HDCP"</string> @@ -294,7 +294,7 @@ <string name="show_touches_summary" msgid="6101183132903926324">"Mostra feedback visivi per i tocchi"</string> <string name="show_screen_updates" msgid="5470814345876056420">"Aggiornamenti superficie"</string> <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flash delle superfici delle finestre all\'aggiornamento"</string> - <string name="show_hw_screen_updates" msgid="4117270979975470789">"Aggiornamenti visualizz."</string> + <string name="show_hw_screen_updates" msgid="4117270979975470789">"Aggiornam. visualizzazione"</string> <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Flash visualizzazioni dentro finestre se disegnate"</string> <string name="show_hw_layers_updates" msgid="5645728765605699821">"Aggiornam. livelli hardware"</string> <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Lampeggia verde se aggiornam. livelli hardware"</string> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index f163ddc7fa8a..26ec1077c095 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -324,7 +324,7 @@ <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_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> diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index 7c52ba38a1d5..034a8f48740b 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -74,9 +74,9 @@ <string name="bluetooth_connected_no_a2dp_battery_level" msgid="3908466636369853652">"Жалғанды (аудиосыз), батарея заряды: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1163440823807659316">"Жалғанды (телефонсыз не аудиосыз), батарея заряды: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> <string name="bluetooth_active_battery_level" msgid="3149689299296462009">"Қосулы, батарея қуаты: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_active_battery_level_untethered" msgid="6662649951391456747">"Қосулы, С: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> батарея, О: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батарея"</string> + <string name="bluetooth_active_battery_level_untethered" msgid="6662649951391456747">"Қосулы, С: батарея заряды – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, О: батарея заряды – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string> <string name="bluetooth_battery_level" msgid="1447164613319663655">"Батарея қуаты: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_battery_level_untethered" msgid="5974406100211667177">"С: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> батарея, О: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батарея"</string> + <string name="bluetooth_battery_level_untethered" msgid="5974406100211667177">"С: батарея заряды – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, О: батарея заряды – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string> <string name="bluetooth_active_no_battery_level" msgid="8380223546730241956">"Қосулы"</string> <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Meдиа аудиосы"</string> <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Телефон қоңыраулары"</string> @@ -207,9 +207,9 @@ <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 snoop тіркелімін қосу"</string> + <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI қадағалау журналын қосу"</string> <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth пакеттерін алу (осы параметрді өзгерткен соң, Bluetooth-ды қосыңыз немесе өшіріңіз)"</string> - <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM бекітпесін ашу"</string> + <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM құлып ашу функциясы"</string> <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> @@ -225,13 +225,13 @@ <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">"Bluetooth аудимазмұн кодегі"</string> + <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth аудиокодегі"</string> <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="8436224899475822557">"Bluetooth аудиокодегін іске қосу\nТаңдау"</string> - <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth аудиомазмұны бойынша іріктеу жиілігі"</string> + <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth арқылы дыбыс іріктеу жиілігі"</string> <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="8010380028880963535">"Bluetooth аудиокодегін іске қосу\nТаңдау: іріктеу жылдамдығы"</string> - <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth аудиомазмұны бойынша разрядтылық мөлшері"</string> + <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth арқылы дыбыстың разрядтылық мөлшері"</string> <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="8063859754619484760">"Bluetooth аудиокодегін іске қосу\nТаңдау: разрядтылық"</string> - <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth аудиомазмұны бойынша арна режимі"</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 аудиокодегін іске қосу\nТаңдау: арна режимі"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth LDAC аудиокодегі: ойнату сапасы"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Bluetooth үшін LDAC аудиокодегін іске қосу\nТаңдау: ойнату сапасы"</string> @@ -258,7 +258,7 @@ <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="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> @@ -280,7 +280,7 @@ <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> @@ -292,8 +292,8 @@ <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" msgid="5470814345876056420">"Бедердің жаңарғанын көрсету"</string> + <string name="show_screen_updates_summary" msgid="2569622766672785529">"Бедері жаңарғанда, терезені түгелдей жыпылықтату"</string> <string name="show_hw_screen_updates" msgid="4117270979975470789">"Көру аумағын жаңартуды көрсету"</string> <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Терезелерде жаңартылған аумақтарды жарықтандыру"</string> <string name="show_hw_layers_updates" msgid="5645728765605699821">"Аппараттық қабат жаңартуларын көрсету"</string> @@ -306,7 +306,7 @@ <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="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_msaa" msgid="7920323238677284387">"4x MSAA қолдану"</string> @@ -314,7 +314,7 @@ <string name="show_non_rect_clip" msgid="505954950474595172">"Тіктөртбұрышты емес қию қимылдарын жөндеу"</string> <string name="track_frame_time" msgid="6094365083096851167">"Профиль бойынша HWUI рендерингі"</string> <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"GPU жөндеу қабаттарын қосу"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"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="animator_duration_scale_title" msgid="3406722410819934083">"Аниматор ұзақтығы"</string> @@ -326,9 +326,9 @@ <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="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_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> diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index b897e1efb372..e799d0c03284 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -295,7 +295,7 @@ <string name="show_screen_updates" msgid="5470814345876056420">"Экран жаңыруусун көрсөтүү"</string> <string name="show_screen_updates_summary" msgid="2569622766672785529">"Экран жаңырганда анын үстү жарык болот"</string> <string name="show_hw_screen_updates" msgid="4117270979975470789">"Жаңыртууларды көрсөтүү"</string> - <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Тартканда көрүүлөрдү терезелердин ичинде көрсөтүү"</string> + <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Тартканда экрандын четтерин жарык кылуу"</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> diff --git a/packages/SettingsLib/res/values-ml/arrays.xml b/packages/SettingsLib/res/values-ml/arrays.xml index 596408297396..e0560ba16314 100644 --- a/packages/SettingsLib/res/values-ml/arrays.xml +++ b/packages/SettingsLib/res/values-ml/arrays.xml @@ -26,7 +26,7 @@ <item msgid="8513729475867537913">"കണക്റ്റുചെയ്യുന്നു..."</item> <item msgid="515055375277271756">"പ്രാമാണീകരിക്കുന്നു..."</item> <item msgid="1943354004029184381">"IP വിലാസം നേടുന്നു..."</item> - <item msgid="4221763391123233270">"കണക്റ്റുചെയ്തു"</item> + <item msgid="4221763391123233270">"കണക്റ്റ് ചെയ്തു"</item> <item msgid="624838831631122137">"താൽക്കാലികമായി നിർത്തി"</item> <item msgid="7979680559596111948">"വിച്ഛേദിക്കുന്നു..."</item> <item msgid="1634960474403853625">"വിച്ഛേദിച്ചു"</item> diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index af0b773f51a8..e4f17888e9a7 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -239,7 +239,7 @@ <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="private_dns_mode_off" msgid="8236575187318721684">"ഓഫ്"</string> - <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"സ്വമേധയാ"</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> diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 55ac9e6cea72..78d9ed792982 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -265,7 +265,7 @@ <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">"Апп-г USB-р баталгаажуулах"</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> @@ -283,7 +283,7 @@ <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> @@ -324,7 +324,7 @@ <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_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> @@ -333,7 +333,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-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index b6654a1656d1..f4711aaf1495 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -266,7 +266,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">"नावांशिवाय ब्लूटूथ डीव्हाइस (फक्त MAC पत्ते) दाखवले जातील"</string> <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"रिमोट डिव्हाइसमध्ये सहन न होणारा मोठा आवाज किंवा नियंत्रणाचा अभाव यासारखी आवाजाची समस्या असल्यास ब्लूटूथ संपूर्ण आवाज वैशिष्ट्य बंद करते."</string> <string name="enable_terminal_title" msgid="95572094356054120">"स्थानिक टर्मिनल"</string> @@ -314,7 +314,7 @@ <string name="show_non_rect_clip" msgid="505954950474595172">"आयताकृती नसलेले क्लिप ऑपरेशन डीबग करा"</string> <string name="track_frame_time" msgid="6094365083096851167">"प्रोफाइल HWUI रेंडरिंग"</string> <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"GPU डीबग स्तर सुरू करा"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"डीबग अॅप्ससाठी 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="animator_duration_scale_title" msgid="3406722410819934083">"अॅनिमेटर कालावधी स्केल"</string> @@ -330,7 +330,7 @@ <string name="force_allow_on_external" msgid="3215759785081916381">"बाह्यवर अॅप्सना अनुमती देण्याची सक्ती करा"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"manifest मूल्यांकडे दुर्लक्ष करून, कोणत्याही अॅपला बाह्य स्टोरेजवर लेखन केले जाण्यासाठी पात्र बनविते"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"अॅक्टिव्हिटीचा आकार बदलण्यायोग्य होण्याची सक्ती करा"</string> - <string name="force_resizable_activities_summary" msgid="6667493494706124459">"manifest मूल्यांकडे दुर्लक्ष करून, एकाधिक-विंडोसाठी सर्व क्रियाकलापांचा आकार बदलण्यायोग्य करा."</string> + <string name="force_resizable_activities_summary" msgid="6667493494706124459">"manifest मूल्यांकडे दुर्लक्ष करून, एकाहून अधिक-विंडोसाठी सर्व अॅक्टिव्हिटींचा आकार बदलण्यायोग्य करा."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"freeform विंडो सुरू करा"</string> <string name="enable_freeform_support_summary" msgid="8247310463288834487">"प्रायोगिक मुक्तस्वरूपाच्या विंडोसाठी समर्थन सुरू करा."</string> <string name="local_backup_password_title" msgid="3860471654439418822">"डेस्कटॉप बॅकअप पासवर्ड"</string> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index dfb99f549cd1..1baa60961c34 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -376,10 +376,10 @@ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Deze functie is experimenteel en kan invloed hebben op de prestaties."</string> <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Overschreven door <xliff:g id="TITLE">%1$s</xliff:g>"</string> <string name="power_remaining_settings_home_page" msgid="4845022416859002011">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string> - <string name="power_remaining_duration_only" msgid="6123167166221295462">"Ongeveer <xliff:g id="TIME_REMAINING">%1$s</xliff:g> resterend"</string> - <string name="power_discharging_duration" msgid="8848256785736335185">"Ongeveer <xliff:g id="TIME_REMAINING">%1$s</xliff:g> resterend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_remaining_duration_only_enhanced" msgid="4189311599812296592">"Ongeveer <xliff:g id="TIME_REMAINING">%1$s</xliff:g> resterend op basis van je gebruik"</string> - <string name="power_discharging_duration_enhanced" msgid="1992003260664804080">"Ongeveer <xliff:g id="TIME_REMAINING">%1$s</xliff:g> resterend op basis van je gebruik (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_remaining_duration_only" msgid="6123167166221295462">"Nog ongeveer <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string> + <string name="power_discharging_duration" msgid="8848256785736335185">"Nog ongeveer <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_remaining_duration_only_enhanced" msgid="4189311599812296592">"Nog ongeveer <xliff:g id="TIME_REMAINING">%1$s</xliff:g> op basis van je gebruik"</string> + <string name="power_discharging_duration_enhanced" msgid="1992003260664804080">"Nog ongeveer <xliff:g id="TIME_REMAINING">%1$s</xliff:g> op basis van je gebruik (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <!-- no translation found for power_remaining_duration_only_short (9183070574408359726) --> <skip /> <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"Is nog genoeg tot ongeveer <xliff:g id="TIME">%1$s</xliff:g> op basis van je gebruik (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -388,10 +388,10 @@ <string name="power_discharge_by_only" msgid="107616694963545745">"Is nog genoeg tot ongeveer <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Tot <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_suggestion_extend_battery" msgid="4401408879069551485">"Batterijduur verlengen tot na <xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g> resterend"</string> - <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g> resterend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Meer dan <xliff:g id="TIME_REMAINING">%1$s</xliff:g> resterend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_remaining_only_more_than_subtext" msgid="8931654680569617380">"Meer dan <xliff:g id="TIME_REMAINING">%1$s</xliff:g> resterend"</string> + <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Nog minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> + <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Nog minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Nog meer dan <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_remaining_only_more_than_subtext" msgid="8931654680569617380">"Nog meer dan <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string> <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="1181059207608751924">"Telefoon wordt binnenkort mogelijk uitgeschakeld"</string> <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="2606370266981054691">"Tablet wordt binnenkort mogelijk uitgeschakeld"</string> <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="2918084807716859985">"Apparaat wordt binnenkort mogelijk uitgeschakeld"</string> @@ -419,7 +419,7 @@ <item msgid="1286113608943010849">"100%"</item> </string-array> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> geleden"</string> - <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> resterend"</string> + <string name="remaining_length_format" msgid="7886337596669190587">"Nog <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="screen_zoom_summary_small" msgid="5867245310241621570">"Klein"</string> <string name="screen_zoom_summary_default" msgid="2247006805614056507">"Standaard"</string> <string name="screen_zoom_summary_large" msgid="4835294730065424084">"Groot"</string> diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 3ec90b2e3e26..f64d8fc5aa76 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -215,14 +215,14 @@ <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="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">"ਵਾਈ-ਫਾਈ ਵਰਬੋਸ ਲੌਗਿੰਗ ਚਾਲੂ ਕਰੋ"</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_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> @@ -251,7 +251,7 @@ <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> @@ -268,7 +268,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> diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml index 9e7d040e746b..855be6f3d2df 100644 --- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml +++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml @@ -59,7 +59,7 @@ <item msgid="45075631231212732">"Sempre usar a verificação HDCP"</item> </string-array> <string-array name="bt_hci_snoop_log_entries"> - <item msgid="3966341281672645384">"Desativada"</item> + <item msgid="3966341281672645384">"Desativado"</item> <item msgid="1969681323976948639">"Filtro ativado"</item> <item msgid="8719029132154020716">"Ativada"</item> </string-array> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index ffaed3737ee9..395aee9df117 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -158,7 +158,7 @@ <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tom de voz"</string> <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Afeta o tom da voz sintetizada"</string> <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string> - <string name="tts_lang_use_system" msgid="2679252467416513208">"Usar idioma do sistema"</string> + <string name="tts_lang_use_system" msgid="2679252467416513208">"Usa o idioma do sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Idioma não selecionado"</string> <string name="tts_default_lang_summary" msgid="5219362163902707785">"Define a voz específica do idioma para o texto falado"</string> <string name="tts_play_example_title" msgid="7094780383253097230">"Ouça um exemplo"</string> @@ -218,7 +218,7 @@ <string name="mock_location_app_set" msgid="8966420655295102685">"App de local fictício: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de Display sem fio"</string> - <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar registro extenso de Wi-Fi"</string> + <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar registro detalhado de Wi-Fi"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware de tethering"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string> @@ -244,7 +244,7 @@ <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Informe o nome do host do provedor de DNS"</string> <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Não foi possível conectar"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções de certificação de Display sem fio"</string> - <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi"</string> + <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro de Wi-Fi; mostrar conforme o RSSI do SSID no seletor de Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Limitada"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Ilimitada"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos de buffer de logger"</string> @@ -257,8 +257,8 @@ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Selecionar configuração USB"</string> <string name="allow_mock_location" msgid="2787962564578664888">"Permitir locais fictícios"</string> <string name="allow_mock_location_summary" msgid="317615105156345626">"Permitir locais fictícios"</string> - <string name="debug_view_attributes" msgid="6485448367803310384">"Ativar visualiz. insp. atributo"</string> - <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Sempre manter dados móveis ativos, mesmo quando o Wi-Fi estiver ativado (para troca rápida de rede)."</string> + <string name="debug_view_attributes" msgid="6485448367803310384">"Ativar visualização de inspeção de atributo"</string> + <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Sempre manter dados móveis ativos, mesmo quando o Wi-Fi estiver ativado (para troca rápida de rede)"</string> <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Usar aceleração de hardware de tethering quando disponível"</string> <string name="adb_warning_title" msgid="6234463310896563253">"Permitir a depuração USB?"</string> <string name="adb_warning_message" msgid="7316799925425402244">"A depuração USB serve apenas para fins de desenvolvimento. Use-a para copiar dados entre o computador e o dispositivo, instalar apps no seu aparelho sem notificação e ler dados de registro."</string> @@ -266,7 +266,7 @@ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Ativar as configurações de desenvolvimento?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Essas configurações são destinadas apenas para o uso de desenvolvedores. Elas podem causar a desativação ou mau funcionamento do dispositivo e dos apps contidos nele."</string> <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar apps por USB"</string> - <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificar comportamento nocivo em apps instalados via ADB/ADT."</string> + <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificar comportamento nocivo em apps instalados via ADB/ADT"</string> <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Dispositivos Bluetooth sem nomes (somente endereços MAC) serão exibidos"</string> <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desativa o recurso Bluetooth de volume absoluto em caso de problemas com o volume em dispositivos remotos, como volume excessivamente alto ou falta de controle."</string> <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string> @@ -280,15 +280,15 @@ <string name="select_application" msgid="5156029161289091703">"Selecionar app"</string> <string name="no_application" msgid="2813387563129153880">"Nada"</string> <string name="wait_for_debugger" msgid="1202370874528893091">"Aguardar depurador"</string> - <string name="wait_for_debugger_summary" msgid="1766918303462746804">"App depurado espera conexão com debugger antes de ser executado."</string> + <string name="wait_for_debugger_summary" msgid="1766918303462746804">"O app depurado espera a conexão com o depurador para ser executado"</string> <string name="debug_input_category" msgid="1811069939601180246">"Entrada"</string> <string name="debug_drawing_category" msgid="6755716469267367852">"Desenho"</string> <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Renderização acelerada por hardware"</string> <string name="media_category" msgid="4388305075496848353">"Mídia"</string> <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoramento"</string> - <string name="strict_mode" msgid="1938795874357830695">"Modo rigoroso ativado"</string> + <string name="strict_mode" msgid="1938795874357830695">"Modo restrito ativado"</string> <string name="strict_mode_summary" msgid="142834318897332338">"Piscar tela se apps demorarem no processo principal"</string> - <string name="pointer_location" msgid="6084434787496938001">"Localização do ponteiro"</string> + <string name="pointer_location" msgid="6084434787496938001">"Localização do cursor"</string> <string name="pointer_location_summary" msgid="840819275172753713">"Exibir dados de toque"</string> <string name="show_touches" msgid="2642976305235070316">"Mostrar toques"</string> <string name="show_touches_summary" msgid="6101183132903926324">"Mostrar feedback visual para toques"</string> @@ -307,16 +307,16 @@ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desativar roteam. autom. p/ perif. de áudio USB"</string> <string name="debug_layout" msgid="5981361776594526155">"Mostrar limites de layout"</string> <string name="debug_layout_summary" msgid="2001775315258637682">"Mostrar limites de corte, margens, etc."</string> - <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forçar dir. layout (RTL)"</string> - <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forçar direção do layout (RTL) p/ todas as localidades"</string> + <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forçar layout da direita p/ esquerda"</string> + <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forçar a direção do layout da direita para a esquerda para todas as localidades"</string> <string name="force_msaa" msgid="7920323238677284387">"Forçar 4x MSAA"</string> <string name="force_msaa_summary" msgid="9123553203895817537">"Ativar 4x MSAA em apps OpenGL ES 2.0"</string> <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar operações de corte não retangulares"</string> <string name="track_frame_time" msgid="6094365083096851167">"Classific. render. HWUI"</string> - <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Ativar camadas depuração de GPU"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Permitir carreg. camadas de depuração GPU p/ apps de dep."</string> - <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de anim. da janela"</string> - <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala anim. de transição"</string> + <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Ativar camadas de depuração de GPU"</string> + <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Permitir carreg. de camadas de depuração de GPU p/ apps de dep"</string> + <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de animação da janela"</string> + <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala de animação de transição"</string> <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala de duração do Animator"</string> <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simular telas secundárias"</string> <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string> @@ -326,9 +326,9 @@ <string name="show_all_anrs" msgid="4924885492787069007">"Mostrar ANRs em 2º plano"</string> <string name="show_all_anrs_summary" msgid="6636514318275139826">"Exibir a caixa de diálogo \"App não responde\" para apps em segundo plano"</string> <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Mostrar avisos do canal de notif."</string> - <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Exibe aviso na tela quando um app posta notificação sem canal válido"</string> + <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Exibir aviso na tela quando um app posta notificação sem canal válido"</string> <string name="force_allow_on_external" msgid="3215759785081916381">"Forçar permissão de apps em armazenamento externo"</string> - <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Qualifica apps para gravação em armazenamento externo, independentemente de valores de manifestos"</string> + <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Qualificar apps para gravação em armazenamento externo, independentemente de valores de manifestos"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forçar atividades a serem redimensionáveis"</string> <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Tornar todas as atividades redimensionáveis para várias janelas, independentemente dos valores do manifesto."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"Ativar janelas de forma livre"</string> @@ -431,7 +431,7 @@ <string name="retail_demo_reset_next" msgid="8356731459226304963">"Próxima"</string> <string name="retail_demo_reset_title" msgid="696589204029930100">"Senha necessária"</string> <string name="active_input_method_subtypes" msgid="3596398805424733238">"Métodos ativos de entrada"</string> - <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Usar idiomas do sistema"</string> + <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Usa idiomas do sistema"</string> <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Falha ao abrir as configurações de <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string> <string name="ime_security_warning" msgid="4135828934735934248">"Este método de entrada pode coletar todo o texto que você digita, incluindo dados pessoais, como senhas e números de cartão de crédito. É um método do app <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Usar este método de entrada?"</string> <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"Observação: após uma reinicialização, não é possível iniciar este app até que você desbloqueie seu smartphone"</string> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index aaa6a027ef6f..34f8e7dd9c9b 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -251,7 +251,7 @@ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Selec. tam. reg. p/ mem. int. reg."</string> <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Pretende limpar o armazenamento persistente do registo?"</string> <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Quando deixamos de monitorizar com o registo persistente, é necessário apagar os dados de registo que se encontram no seu dispositivo."</string> - <string name="select_logpersist_title" msgid="7530031344550073166">"Arm. dados de registo persist. no disp."</string> + <string name="select_logpersist_title" msgid="7530031344550073166">"Guardar dados de registo consistentemente"</string> <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"Selecionar buffers de registo para armazenamento persistente no dispositivo"</string> <string name="select_usb_configuration_title" msgid="2649938511506971843">"Selecionar configuração USB"</string> <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Selecionar configuração USB"</string> @@ -294,7 +294,7 @@ <string name="show_touches_summary" msgid="6101183132903926324">"Mostrar feedback visual para toques"</string> <string name="show_screen_updates" msgid="5470814345876056420">"Atualiz. de superfície"</string> <string name="show_screen_updates_summary" msgid="2569622766672785529">"Destacar a superfície da janela ao atualizar"</string> - <string name="show_hw_screen_updates" msgid="4117270979975470789">"Most. atualiz. de vistas"</string> + <string name="show_hw_screen_updates" msgid="4117270979975470789">"Ver atualizações de vistas"</string> <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Destacar vistas em janelas quando desenhadas"</string> <string name="show_hw_layers_updates" msgid="5645728765605699821">"Mostrar atual. cam. hard."</string> <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Camadas de hard. flash verdes quando estão atuali."</string> @@ -303,11 +303,11 @@ <string name="disable_overlays_summary" msgid="3578941133710758592">"Utilizar sempre GPU para a composição do ecrã"</string> <string name="simulate_color_space" msgid="6745847141353345872">"Simular espaço da cor"</string> <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Ativar vestígios OpenGL"</string> - <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desativ. encam. áudio USB"</string> + <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desativar encaminhamento áudio USB"</string> <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desativar encam. auto. para periféricos áudio USB"</string> <string name="debug_layout" msgid="5981361776594526155">"Mostrar limit. do esquema"</string> <string name="debug_layout_summary" msgid="2001775315258637682">"Apresentar limites de clipes, margens, etc."</string> - <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forçar dir. do esq. RTL"</string> + <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forçar direção do esquema RTL"</string> <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forçar dir. do esq. do ecrã p. RTL tds os locais"</string> <string name="force_msaa" msgid="7920323238677284387">"Forçar 4x MSAA"</string> <string name="force_msaa_summary" msgid="9123553203895817537">"Ativar o 4x MSAA em aplicações OpenGL ES 2.0"</string> @@ -317,7 +317,7 @@ <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Permitir carreg. cam. depuração GPU p/ dep. app"</string> <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de anim. da janela"</string> <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala de anim. de trans."</string> - <string name="animator_duration_scale_title" msgid="3406722410819934083">"Esc. de duração do anim."</string> + <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala de duração de animação"</string> <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simular apresentações secundárias"</string> <string name="debug_applications_category" msgid="4206913653849771549">"Aplicações"</string> <string name="immediately_destroy_activities" msgid="1579659389568133959">"Não manter atividades"</string> diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml index 9e7d040e746b..855be6f3d2df 100644 --- a/packages/SettingsLib/res/values-pt/arrays.xml +++ b/packages/SettingsLib/res/values-pt/arrays.xml @@ -59,7 +59,7 @@ <item msgid="45075631231212732">"Sempre usar a verificação HDCP"</item> </string-array> <string-array name="bt_hci_snoop_log_entries"> - <item msgid="3966341281672645384">"Desativada"</item> + <item msgid="3966341281672645384">"Desativado"</item> <item msgid="1969681323976948639">"Filtro ativado"</item> <item msgid="8719029132154020716">"Ativada"</item> </string-array> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index ffaed3737ee9..395aee9df117 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -158,7 +158,7 @@ <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tom de voz"</string> <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Afeta o tom da voz sintetizada"</string> <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string> - <string name="tts_lang_use_system" msgid="2679252467416513208">"Usar idioma do sistema"</string> + <string name="tts_lang_use_system" msgid="2679252467416513208">"Usa o idioma do sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Idioma não selecionado"</string> <string name="tts_default_lang_summary" msgid="5219362163902707785">"Define a voz específica do idioma para o texto falado"</string> <string name="tts_play_example_title" msgid="7094780383253097230">"Ouça um exemplo"</string> @@ -218,7 +218,7 @@ <string name="mock_location_app_set" msgid="8966420655295102685">"App de local fictício: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de Display sem fio"</string> - <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar registro extenso de Wi-Fi"</string> + <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar registro detalhado de Wi-Fi"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware de tethering"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string> @@ -244,7 +244,7 @@ <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Informe o nome do host do provedor de DNS"</string> <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Não foi possível conectar"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções de certificação de Display sem fio"</string> - <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi"</string> + <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro de Wi-Fi; mostrar conforme o RSSI do SSID no seletor de Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Limitada"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Ilimitada"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos de buffer de logger"</string> @@ -257,8 +257,8 @@ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Selecionar configuração USB"</string> <string name="allow_mock_location" msgid="2787962564578664888">"Permitir locais fictícios"</string> <string name="allow_mock_location_summary" msgid="317615105156345626">"Permitir locais fictícios"</string> - <string name="debug_view_attributes" msgid="6485448367803310384">"Ativar visualiz. insp. atributo"</string> - <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Sempre manter dados móveis ativos, mesmo quando o Wi-Fi estiver ativado (para troca rápida de rede)."</string> + <string name="debug_view_attributes" msgid="6485448367803310384">"Ativar visualização de inspeção de atributo"</string> + <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Sempre manter dados móveis ativos, mesmo quando o Wi-Fi estiver ativado (para troca rápida de rede)"</string> <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Usar aceleração de hardware de tethering quando disponível"</string> <string name="adb_warning_title" msgid="6234463310896563253">"Permitir a depuração USB?"</string> <string name="adb_warning_message" msgid="7316799925425402244">"A depuração USB serve apenas para fins de desenvolvimento. Use-a para copiar dados entre o computador e o dispositivo, instalar apps no seu aparelho sem notificação e ler dados de registro."</string> @@ -266,7 +266,7 @@ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Ativar as configurações de desenvolvimento?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Essas configurações são destinadas apenas para o uso de desenvolvedores. Elas podem causar a desativação ou mau funcionamento do dispositivo e dos apps contidos nele."</string> <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar apps por USB"</string> - <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificar comportamento nocivo em apps instalados via ADB/ADT."</string> + <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificar comportamento nocivo em apps instalados via ADB/ADT"</string> <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Dispositivos Bluetooth sem nomes (somente endereços MAC) serão exibidos"</string> <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desativa o recurso Bluetooth de volume absoluto em caso de problemas com o volume em dispositivos remotos, como volume excessivamente alto ou falta de controle."</string> <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string> @@ -280,15 +280,15 @@ <string name="select_application" msgid="5156029161289091703">"Selecionar app"</string> <string name="no_application" msgid="2813387563129153880">"Nada"</string> <string name="wait_for_debugger" msgid="1202370874528893091">"Aguardar depurador"</string> - <string name="wait_for_debugger_summary" msgid="1766918303462746804">"App depurado espera conexão com debugger antes de ser executado."</string> + <string name="wait_for_debugger_summary" msgid="1766918303462746804">"O app depurado espera a conexão com o depurador para ser executado"</string> <string name="debug_input_category" msgid="1811069939601180246">"Entrada"</string> <string name="debug_drawing_category" msgid="6755716469267367852">"Desenho"</string> <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Renderização acelerada por hardware"</string> <string name="media_category" msgid="4388305075496848353">"Mídia"</string> <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoramento"</string> - <string name="strict_mode" msgid="1938795874357830695">"Modo rigoroso ativado"</string> + <string name="strict_mode" msgid="1938795874357830695">"Modo restrito ativado"</string> <string name="strict_mode_summary" msgid="142834318897332338">"Piscar tela se apps demorarem no processo principal"</string> - <string name="pointer_location" msgid="6084434787496938001">"Localização do ponteiro"</string> + <string name="pointer_location" msgid="6084434787496938001">"Localização do cursor"</string> <string name="pointer_location_summary" msgid="840819275172753713">"Exibir dados de toque"</string> <string name="show_touches" msgid="2642976305235070316">"Mostrar toques"</string> <string name="show_touches_summary" msgid="6101183132903926324">"Mostrar feedback visual para toques"</string> @@ -307,16 +307,16 @@ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desativar roteam. autom. p/ perif. de áudio USB"</string> <string name="debug_layout" msgid="5981361776594526155">"Mostrar limites de layout"</string> <string name="debug_layout_summary" msgid="2001775315258637682">"Mostrar limites de corte, margens, etc."</string> - <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forçar dir. layout (RTL)"</string> - <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forçar direção do layout (RTL) p/ todas as localidades"</string> + <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forçar layout da direita p/ esquerda"</string> + <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forçar a direção do layout da direita para a esquerda para todas as localidades"</string> <string name="force_msaa" msgid="7920323238677284387">"Forçar 4x MSAA"</string> <string name="force_msaa_summary" msgid="9123553203895817537">"Ativar 4x MSAA em apps OpenGL ES 2.0"</string> <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar operações de corte não retangulares"</string> <string name="track_frame_time" msgid="6094365083096851167">"Classific. render. HWUI"</string> - <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Ativar camadas depuração de GPU"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Permitir carreg. camadas de depuração GPU p/ apps de dep."</string> - <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de anim. da janela"</string> - <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala anim. de transição"</string> + <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Ativar camadas de depuração de GPU"</string> + <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Permitir carreg. de camadas de depuração de GPU p/ apps de dep"</string> + <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de animação da janela"</string> + <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala de animação de transição"</string> <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala de duração do Animator"</string> <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simular telas secundárias"</string> <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string> @@ -326,9 +326,9 @@ <string name="show_all_anrs" msgid="4924885492787069007">"Mostrar ANRs em 2º plano"</string> <string name="show_all_anrs_summary" msgid="6636514318275139826">"Exibir a caixa de diálogo \"App não responde\" para apps em segundo plano"</string> <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Mostrar avisos do canal de notif."</string> - <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Exibe aviso na tela quando um app posta notificação sem canal válido"</string> + <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Exibir aviso na tela quando um app posta notificação sem canal válido"</string> <string name="force_allow_on_external" msgid="3215759785081916381">"Forçar permissão de apps em armazenamento externo"</string> - <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Qualifica apps para gravação em armazenamento externo, independentemente de valores de manifestos"</string> + <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Qualificar apps para gravação em armazenamento externo, independentemente de valores de manifestos"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forçar atividades a serem redimensionáveis"</string> <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Tornar todas as atividades redimensionáveis para várias janelas, independentemente dos valores do manifesto."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"Ativar janelas de forma livre"</string> @@ -431,7 +431,7 @@ <string name="retail_demo_reset_next" msgid="8356731459226304963">"Próxima"</string> <string name="retail_demo_reset_title" msgid="696589204029930100">"Senha necessária"</string> <string name="active_input_method_subtypes" msgid="3596398805424733238">"Métodos ativos de entrada"</string> - <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Usar idiomas do sistema"</string> + <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Usa idiomas do sistema"</string> <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Falha ao abrir as configurações de <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string> <string name="ime_security_warning" msgid="4135828934735934248">"Este método de entrada pode coletar todo o texto que você digita, incluindo dados pessoais, como senhas e números de cartão de crédito. É um método do app <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Usar este método de entrada?"</string> <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"Observação: após uma reinicialização, não é possível iniciar este app até que você desbloqueie seu smartphone"</string> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index 4b3ec9941744..ec62c1dd88dc 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -293,7 +293,7 @@ <string name="show_touches" msgid="2642976305235070316">"Afișați atingerile"</string> <string name="show_touches_summary" msgid="6101183132903926324">"Afișați feedbackul vizual pentru atingeri"</string> <string name="show_screen_updates" msgid="5470814345876056420">"Actualizări suprafețe"</string> - <string name="show_screen_updates_summary" msgid="2569622766672785529">"Iluminare suprafețe toată fereastra la actualizare"</string> + <string name="show_screen_updates_summary" msgid="2569622766672785529">"Iluminarea întregii fereastre la actualizare"</string> <string name="show_hw_screen_updates" msgid="4117270979975470789">"Afiș. actualizări ecran"</string> <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Iluminare ecrane din ferestre la desenare"</string> <string name="show_hw_layers_updates" msgid="5645728765605699821">"Actualiz. strat. hardware"</string> @@ -326,9 +326,9 @@ <string name="show_all_anrs" msgid="4924885492787069007">"Afișați ANR de fundal"</string> <string name="show_all_anrs_summary" msgid="6636514318275139826">"Afișați dialogul Aplicația nu răspunde pentru aplicațiile din fundal"</string> <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Afișați avertismentele de pe canalul de notificări"</string> - <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Afișează avertisment pe ecran când o aplicație postează o notificare fără canal valid"</string> + <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Afișați avertisment pe ecran când o aplicație postează o notificare fără canal valid"</string> <string name="force_allow_on_external" msgid="3215759785081916381">"Forțați accesul aplicațiilor la stocarea externă"</string> - <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Face ca orice aplicație eligibilă să fie scrisă în stocarea externă, indiferent de valorile manifestului"</string> + <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Faceți ca orice aplicație eligibilă să fie scrisă în stocarea externă, indiferent de valorile manifestului"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forțați redimensionarea activităților"</string> <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Permiteți redimensionarea tuturor activităților pentru modul cu ferestre multiple, indiferent de valorile manifestului."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"Activați ferestrele cu formă liberă"</string> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index 4943a82e4b85..55ac00dd579d 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -288,9 +288,9 @@ <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="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> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index f3a28f171413..fff2d9dfb80c 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -152,7 +152,7 @@ <string name="launch_defaults_some" msgid="313159469856372621">"Nastavljene so nekatere privzete nastavitve"</string> <string name="launch_defaults_none" msgid="4241129108140034876">"Ni privzetih nastavitev"</string> <string name="tts_settings" msgid="8186971894801348327">"Nastavitve pretvorbe besedila v govor"</string> - <string name="tts_settings_title" msgid="1237820681016639683">"Besedilo v govor"</string> + <string name="tts_settings_title" msgid="1237820681016639683">"Pretvorba besedila v govor"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Hitrost govora"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Hitrost govorjenega besedila"</string> <string name="tts_default_pitch_title" msgid="6135942113172488671">"Višina tona"</string> @@ -205,8 +205,8 @@ <string name="clear_adb_keys" msgid="4038889221503122743">"Preklic dovoljenj za odpr. težav prek USB"</string> <string name="bugreport_in_power" msgid="7923901846375587241">"Bližnjica za por. o napakah"</string> <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Prikaz gumba za ustvarjanje poročila o napakah v meniju za vklop/izklop"</string> - <string name="keep_screen_on" msgid="1146389631208760344">"Brez zaklepanja"</string> - <string name="keep_screen_on_summary" msgid="2173114350754293009">"Med polnjenjem se zaslon ne bo nikoli zaklenil"</string> + <string name="keep_screen_on" msgid="1146389631208760344">"Brez izklopa zaslona"</string> + <string name="keep_screen_on_summary" msgid="2173114350754293009">"Med polnjenjem se zaslon ne bo nikoli izklopil"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Omogoči zajem dnevnika Bluetooth HCI"</string> <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Zajemanje paketov Bluetooth. (po spremembi te nastavitve preklopite Bluetooth)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Odklepanje OEM"</string> @@ -215,21 +215,21 @@ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"OPOZORILO: Ko je vklopljena ta nastavitev, funkcije za zaščito naprave v tej napravi ne bodo delovale."</string> <string name="mock_location_app" msgid="7966220972812881854">"Izberite aplikacijo za simulirano lokacijo"</string> <string name="mock_location_app_not_set" msgid="809543285495344223">"Aplikacija za simulirano lokacijo ni nastavljena"</string> - <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikacija za lažno lokacijo: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikacija za simulirano lokacijo: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="debug_networking_category" msgid="7044075693643009662">"Omrežja"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Potrdilo brezžičnega zaslona"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogoči podrob. zapis. dnevnika za Wi-Fi"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Prenos podatkov v mobilnem omrežju je vedno aktiven"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Strojno pospeševanje za internetno povezavo prek mobilnega telefona"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži naprave Bluetooth brez imen"</string> - <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogočanje absolutnega praga glasnosti"</string> + <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogočanje absolutne glasnosti"</string> <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Različica profila AVRCP za Bluetooth"</string> <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Izberite različico profila AVRCP za Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Zvočni kodek za Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="8436224899475822557">"Sproži zvočni kodek za Bluetooth\nIzbor"</string> <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Hitrost vzorčenja zvoka prek Bluetootha"</string> <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="8010380028880963535">"Sproži zvočni kodek za Bluetooth\nIzbor: hitrost vzorčenja"</string> - <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Število bitov na vzorec za zvok prek Bluetootha"</string> + <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bitov na vzorec za zvok prek Bluetootha"</string> <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="8063859754619484760">"Sproži zvočni kodek za Bluetooth\nIzbor: število bitov na vzorec"</string> <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Način zvočnega kanala prek Bluetootha"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Sproži zvočni kodek za Bluetooth\nIzbor: način kanala"</string> @@ -251,7 +251,7 @@ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Izberite velikost medpomnilnika dnevnika"</string> <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Želite izbrisati trajno shranjevanje dnevniškega orodja?"</string> <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Ko prenehamo spremljanje s trajnim dnevniškim orodjem, moramo podatke tega orodja, shranjene v napravi, izbrisati."</string> - <string name="select_logpersist_title" msgid="7530031344550073166">"Trajno shranjevanje podatkov dnevniškega orodja v napravi"</string> + <string name="select_logpersist_title" msgid="7530031344550073166">"Trajno shranjevanje dnevnika v napravi"</string> <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"Izberite, katere medpomnilnike dnevnika želite trajno shraniti v napravi"</string> <string name="select_usb_configuration_title" msgid="2649938511506971843">"Izbira konfiguracije USB"</string> <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Izbira konfiguracije USB"</string> @@ -268,7 +268,7 @@ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Preveri aplikacije prek USB"</string> <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Preveri, ali so aplikacije, nameščene prek ADB/ADT, škodljive."</string> <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Prikazane bodo naprave Bluetooth brez imen (samo z naslovi MAC)"</string> - <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Onemogoči funkcijo absolutnega praga glasnosti za Bluetooth, če pride do težav z glasnostjo z oddaljenimi napravami, kot je nesprejemljivo visoka glasnost ali pomanjkanje nadzora."</string> + <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Onemogoči funkcijo absolutne glasnosti za Bluetooth, če pride do težav z glasnostjo z oddaljenimi napravami, kot je nesprejemljivo visoka glasnost ali pomanjkanje nadzora."</string> <string name="enable_terminal_title" msgid="95572094356054120">"Lokalni terminal"</string> <string name="enable_terminal_summary" msgid="67667852659359206">"Omogočanje terminalske aplikacije za dostop do lokalne lupine"</string> <string name="hdcp_checking_title" msgid="8605478913544273282">"Preverjanje HDCP"</string> @@ -279,7 +279,7 @@ <string name="debug_app_set" msgid="2063077997870280017">"Aplikacija za iskanje napak: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="select_application" msgid="5156029161289091703">"Izberite aplikacijo"</string> <string name="no_application" msgid="2813387563129153880">"Nič"</string> - <string name="wait_for_debugger" msgid="1202370874528893091">"Počakajte na iskalnik napak"</string> + <string name="wait_for_debugger" msgid="1202370874528893091">"Počakaj na iskalnik napak"</string> <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Aplikacija, v kateri iščete napako, pred izvajanjem čaka na povezavo z iskalnikom napak"</string> <string name="debug_input_category" msgid="1811069939601180246">"Vnos"</string> <string name="debug_drawing_category" msgid="6755716469267367852">"Risanje"</string> @@ -289,13 +289,13 @@ <string name="strict_mode" msgid="1938795874357830695">"Strog način je omogočen"</string> <string name="strict_mode_summary" msgid="142834318897332338">"Osveži zaslon pri dolgih postopkih v glavni niti"</string> <string name="pointer_location" msgid="6084434787496938001">"Mesto kazalca"</string> - <string name="pointer_location_summary" msgid="840819275172753713">"Prekriv. zaslona prikazuje tren. podatke za dotik"</string> + <string name="pointer_location_summary" msgid="840819275172753713">"Prekriv. zaslona prikazuje trenutni dotik"</string> <string name="show_touches" msgid="2642976305235070316">"Prikaz dotikov"</string> <string name="show_touches_summary" msgid="6101183132903926324">"Prikaz vizualnih povratnih informacij za dotike"</string> <string name="show_screen_updates" msgid="5470814345876056420">"Pokaži posodob. površine"</string> - <string name="show_screen_updates_summary" msgid="2569622766672785529">"Ob posodobitvi osvetli celotne površine oken"</string> + <string name="show_screen_updates_summary" msgid="2569622766672785529">"Ob posodobitvi osveži celotne površine oken"</string> <string name="show_hw_screen_updates" msgid="4117270979975470789">"Prikaži posodob. pogleda"</string> - <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Osvetli poglede v oknih pri risanju"</string> + <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Osveži poglede v oknih pri risanju"</string> <string name="show_hw_layers_updates" msgid="5645728765605699821">"Pokaži pos. sl. str. opr."</string> <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Obarvaj sloje strojne opreme zeleno ob posodobitvi"</string> <string name="debug_hw_overdraw" msgid="2968692419951565417">"Prekoračitev območja GPE"</string> @@ -317,7 +317,7 @@ <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Apl. za odpr. nap. dovoli nal. sloj. odpr. nap. GPE"</string> <string name="window_animation_scale_title" msgid="6162587588166114700">"Merilo animacije okna"</string> <string name="transition_animation_scale_title" msgid="387527540523595875">"Merilo animacije prehoda"</string> - <string name="animator_duration_scale_title" msgid="3406722410819934083">"Lestvica trajanja animacije"</string> + <string name="animator_duration_scale_title" msgid="3406722410819934083">"Merilo trajanja animacije"</string> <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simul. sekund. prikazov."</string> <string name="debug_applications_category" msgid="4206913653849771549">"Aplikacije"</string> <string name="immediately_destroy_activities" msgid="1579659389568133959">"Ne obdrži dejavnosti"</string> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 38b16936947a..36734468e391 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -213,7 +213,7 @@ <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" 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> @@ -289,7 +289,7 @@ <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="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> @@ -311,8 +311,8 @@ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Наметни смер распореда екрана здесна налево за све локалитете"</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="track_frame_time" msgid="6094365083096851167">"Прик. проф. помоћу HWUI-а"</string> + <string name="show_non_rect_clip" msgid="505954950474595172">"Отклони грешке исецања области које нису правоугаоног облика"</string> + <string name="track_frame_time" msgid="6094365083096851167">"Пендеруј помоћу HWUI-а"</string> <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Омогући слојеве за отклањање грешака GPU-a"</string> <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Омогући учитавање отк. греш. GPU-a у апл. за отк. греш."</string> <string name="window_animation_scale_title" msgid="6162587588166114700">"Размера анимације прозора"</string> diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index 3960f4428d57..48bcbd47b2a4 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -42,8 +42,7 @@ <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s வழியாகக் கிடைக்கிறது"</string> <string name="tap_to_sign_up" msgid="6449724763052579434">"பதிவு செய்யத் தட்டவும்"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"இணைக்கப்பட்டுள்ளது, ஆனால் இண்டர்நெட் இல்லை"</string> - <!-- no translation found for wifi_limited_connection (7717855024753201527) --> - <skip /> + <string name="wifi_limited_connection" msgid="7717855024753201527">"வரம்பிற்கு உட்பட்ட இணைப்பு"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"இணைய இணைப்பு இல்லை"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"உள்நுழைய வேண்டும்"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"தற்காலிகமாக அணுகல் புள்ளி நிரம்பியுள்ளது"</string> @@ -75,11 +74,9 @@ <string name="bluetooth_connected_no_a2dp_battery_level" msgid="3908466636369853652">"இணைக்கப்பட்டது (மீடியா இல்லை), பேட்டரி <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1163440823807659316">"இணைக்கப்பட்டது (மொபைல் அல்லது மீடியா இல்லை), பேட்டரி <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> <string name="bluetooth_active_battery_level" msgid="3149689299296462009">"செயலில் உள்ளது, <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> பேட்டரி"</string> - <!-- no translation found for bluetooth_active_battery_level_untethered (6662649951391456747) --> - <skip /> + <string name="bluetooth_active_battery_level_untethered" msgid="6662649951391456747">"செயலில் உள்ளது, L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> பேட்டரி, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> பேட்டரி"</string> <string name="bluetooth_battery_level" msgid="1447164613319663655">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> பேட்டரி"</string> - <!-- no translation found for bluetooth_battery_level_untethered (5974406100211667177) --> - <skip /> + <string name="bluetooth_battery_level_untethered" msgid="5974406100211667177">"L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> பேட்டரி, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> பேட்டரி"</string> <string name="bluetooth_active_no_battery_level" msgid="8380223546730241956">"செயலில் உள்ளது"</string> <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"மீடியா ஆடியோ"</string> <string name="bluetooth_profile_headset" msgid="7815495680863246034">"ஃபோன் அழைப்புகள்"</string> @@ -268,8 +265,8 @@ <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_summary" msgid="9164096969924529200">"தீங்கு விளைவிக்கும் செயல்பாட்டை அறிய ADB/ADT மூலம் நிறுவப்பட்டப் பயன்பாடுகளைச் சரிபார்."</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="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"பெயர்கள் இல்லாத புளூடூத் சாதனங்கள் (MAC முகவரிகள் மட்டும்) காட்டப்படும்"</string> <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"மிகவும் அதிகமான ஒலியளவு அல்லது கட்டுப்பாடு இழப்பு போன்ற தொலைநிலைச் சாதனங்களில் ஏற்படும் ஒலி தொடர்பான சிக்கல்கள் இருக்கும் சமயங்களில், புளூடூத் அப்சல்யூட் ஒலியளவு அம்சத்தை முடக்கும்."</string> <string name="enable_terminal_title" msgid="95572094356054120">"அக முனையம்"</string> @@ -327,11 +324,11 @@ <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_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_summary" msgid="3640752408258034689">"மேனிஃபெஸ்ட் மதிப்புகளைப் பொருட்படுத்தாமல், எல்லா பயன்பாட்டையும் வெளிப்புறச் சேமிப்பிடத்தில் எழுத அனுமதிக்கும்"</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_resizable_activities" msgid="8615764378147824985">"செயல்பாடுகளை அளவுமாறக்கூடியதாக அமை"</string> <string name="force_resizable_activities_summary" msgid="6667493494706124459">"மேனிஃபெஸ்ட் மதிப்புகளைப் பொருட்படுத்தாமல், பல சாளரத்திற்கு எல்லா செயல்பாடுகளையும் அளவுமாறக்கூடியதாக அமை."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"குறிப்பிட்ட வடிவமில்லாத சாளரங்களை இயக்கு"</string> @@ -390,8 +387,7 @@ <string name="power_discharge_by" msgid="6453537733650125582">"<xliff:g id="TIME">%1$s</xliff:g> வரை பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"<xliff:g id="TIME">%1$s</xliff:g> வரை பயன்படுத்த முடியும்"</string> <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> வரை"</string> - <!-- no translation found for power_suggestion_extend_battery (4401408879069551485) --> - <skip /> + <string name="power_suggestion_extend_battery" msgid="4401408879069551485">"<xliff:g id="TIME">%1$s</xliff:g> மணிக்குப் பிறகு பேட்டரி நிலையை நீட்டிக்கவும்"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>க்கும் குறைவாகவே பயன்படுத்த முடியும்"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>க்கும் குறைவாகவே பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>க்கும் மேல் பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -465,6 +461,5 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ஒவ்வொரு முறையும் கேள்"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"ஆஃப் செய்யும் வரை"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"சற்றுமுன்"</string> - <!-- no translation found for media_transfer_this_device_name (1636276898262571213) --> - <skip /> + <string name="media_transfer_this_device_name" msgid="1636276898262571213">"இந்தச் சாதனம்"</string> </resources> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index 62879d200674..cad28aff71ee 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -265,8 +265,8 @@ <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_summary" msgid="9164096969924529200">"ตรวจสอบแอปพลิเคชันที่ติดตั้งผ่าน ADB/ADT เพื่อตรวจดูพฤติกรรมที่เป็นอันตราย"</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="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"ระบบจะแสดงอุปกรณ์บลูทูธที่ไม่มีชื่อ (มีเฉพาะที่อยู่ MAC)"</string> <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"ปิดใช้ฟีเจอร์การควบคุมระดับเสียงของอุปกรณ์อื่นผ่านบลูทูธในกรณีที่มีปัญหาเกี่ยวกับระดับเสียงของอุปกรณ์ระยะไกล เช่น ระดับเสียงที่ดังเกินไปหรือระดับเสียงที่ไม่มีการควบคุม"</string> <string name="enable_terminal_title" msgid="95572094356054120">"เทอร์มินัลในตัวเครื่อง"</string> @@ -274,7 +274,7 @@ <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_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> @@ -291,11 +291,11 @@ <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_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="4117270979975470789">"แสดงมุมมองการอัปเดต"</string> - <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"แสดงมุมมองภายในหน้าต่างขณะลาก"</string> + <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"แสดงมุมมองกะพริบภายในหน้าต่างขณะลาก"</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> @@ -328,13 +328,13 @@ <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">"ทำให้สามารถเขียนแอปใดๆ ก็ตามไปยังพื้นที่เก็บข้อมูลภายนอกได้ โดยไม่คำนึงถึงค่าในไฟล์ Manifest"</string> + <string name="force_allow_on_external_summary" msgid="3640752408258034689">"เขียนแอปในพื้นที่เก็บข้อมูลภายนอกได้ โดยไม่คำนึงถึงค่าไฟล์ Manifest"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"บังคับให้กิจกรรมปรับขนาดได้"</string> <string name="force_resizable_activities_summary" msgid="6667493494706124459">"ทำให้กิจกรรมทั้งหมดปรับขนาดได้สำหรับหน้าต่างหลายบาน โดยไม่คำนึงถึงค่าในไฟล์ Manifest"</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_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-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index 7ba5c5e03a15..396dc732d90f 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -428,7 +428,7 @@ <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Özel (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="content_description_menu_button" msgid="8182594799812351266">"Menü"</string> <string name="retail_demo_reset_message" msgid="118771671364131297">"Demo modunda sıfırlamak için şifreyi girin"</string> - <string name="retail_demo_reset_next" msgid="8356731459226304963">"Sonraki"</string> + <string name="retail_demo_reset_next" msgid="8356731459226304963">"İleri"</string> <string name="retail_demo_reset_title" msgid="696589204029930100">"Şifre gerekli"</string> <string name="active_input_method_subtypes" msgid="3596398805424733238">"Etkin giriş yöntemleri"</string> <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Sistem dillerini kullan"</string> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index b04765433f9d..a6cfadccf728 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -342,7 +342,7 @@ <string name="loading_injected_setting_summary" msgid="4095178591461231376">"Завантаження…"</string> <string-array name="color_mode_names"> <item msgid="2425514299220523812">"Насичений (за умовчанням)"</item> - <item msgid="8446070607501413455">"Природний"</item> + <item msgid="8446070607501413455">"Природні"</item> <item msgid="6553408765810699025">"Стандартний"</item> </string-array> <string-array name="color_mode_descriptions"> diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index b2fc3d99a330..7949d9c0ca13 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -42,8 +42,7 @@ <string name="available_via_passpoint" msgid="1617440946846329613">"دستیاب بذریعہ %1$s"</string> <string name="tap_to_sign_up" msgid="6449724763052579434">"سائن اپ کے لیے تھپتھپائیں"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"منسلک، انٹرنیٹ نہیں ہے"</string> - <!-- no translation found for wifi_limited_connection (7717855024753201527) --> - <skip /> + <string name="wifi_limited_connection" msgid="7717855024753201527">"محدود کنکشن"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"انٹرنیٹ نہیں ہے"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"سائن ان درکار ہے"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"رسائی پوائنٹ عارضی طور پر فُل ہے"</string> @@ -75,11 +74,9 @@ <string name="bluetooth_connected_no_a2dp_battery_level" msgid="3908466636369853652">"منسلک ہے (میڈیا کے علاوہ)، بیٹری <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1163440823807659316">"منسلک ہے (فون یا میڈیا کے علاوہ)، بیٹری <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> <string name="bluetooth_active_battery_level" msgid="3149689299296462009">"فعال، <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> بیٹری"</string> - <!-- no translation found for bluetooth_active_battery_level_untethered (6662649951391456747) --> - <skip /> + <string name="bluetooth_active_battery_level_untethered" msgid="6662649951391456747">"فعال، بائيں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> بیٹری، دائیں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> بیٹری"</string> <string name="bluetooth_battery_level" msgid="1447164613319663655">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> بیٹری"</string> - <!-- no translation found for bluetooth_battery_level_untethered (5974406100211667177) --> - <skip /> + <string name="bluetooth_battery_level_untethered" msgid="5974406100211667177">"بائيں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> بیٹری، دائیں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> بیٹری"</string> <string name="bluetooth_active_no_battery_level" msgid="8380223546730241956">"فعال"</string> <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"میڈيا آڈیو"</string> <string name="bluetooth_profile_headset" msgid="7815495680863246034">"فون کالز"</string> @@ -390,8 +387,7 @@ <string name="power_discharge_by" msgid="6453537733650125582">"تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی"</string> <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> تک"</string> - <!-- no translation found for power_suggestion_extend_battery (4401408879069551485) --> - <skip /> + <string name="power_suggestion_extend_battery" msgid="4401408879069551485">"<xliff:g id="TIME">%1$s</xliff:g> کے بعد بیٹری لائف بڑھائیں"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> سے کم باقی ہے"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> سے کم باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> سے زیادہ باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -465,6 +461,5 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ہر بار پوچھیں"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"یہاں تک کہ آپ آف کر دیں"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ابھی ابھی"</string> - <!-- no translation found for media_transfer_this_device_name (1636276898262571213) --> - <skip /> + <string name="media_transfer_this_device_name" msgid="1636276898262571213">"یہ آلہ"</string> </resources> diff --git a/packages/SettingsLib/res/values-uz/arrays.xml b/packages/SettingsLib/res/values-uz/arrays.xml index e64ccfa1fa54..164aa93b19f8 100644 --- a/packages/SettingsLib/res/values-uz/arrays.xml +++ b/packages/SettingsLib/res/values-uz/arrays.xml @@ -59,7 +59,7 @@ <item msgid="45075631231212732">"Har doim HDCP tekshiruvidan foydalanilsin"</item> </string-array> <string-array name="bt_hci_snoop_log_entries"> - <item msgid="3966341281672645384">"Oʻchiq"</item> + <item msgid="3966341281672645384">"Yoqilmagan"</item> <item msgid="1969681323976948639">"Filtrlar yoniq"</item> <item msgid="8719029132154020716">"Yoniq"</item> </string-array> @@ -150,7 +150,7 @@ <item msgid="4046665544396189228">", faol (telefon)"</item> </string-array> <string-array name="select_logd_size_titles"> - <item msgid="8665206199209698501">"O‘chiq"</item> + <item msgid="8665206199209698501">"Yoqilmagan"</item> <item msgid="1593289376502312923">"64 KB"</item> <item msgid="487545340236145324">"256 KB"</item> <item msgid="2423528675294333831">"1 MB"</item> @@ -158,13 +158,13 @@ <item msgid="2803199102589126938">"16 MB"</item> </string-array> <string-array name="select_logd_size_lowram_titles"> - <item msgid="6089470720451068364">"O‘chiq"</item> + <item msgid="6089470720451068364">"Yoqilmagan"</item> <item msgid="4622460333038586791">"64 KB"</item> <item msgid="2212125625169582330">"256 KB"</item> <item msgid="1704946766699242653">"1 MB"</item> </string-array> <string-array name="select_logd_size_summaries"> - <item msgid="6921048829791179331">"O‘chiq"</item> + <item msgid="6921048829791179331">"Yoqilmagan"</item> <item msgid="2969458029344750262">"Bufer: maks. 64 KB"</item> <item msgid="1342285115665698168">"Bufer: maks. 256 KB"</item> <item msgid="1314234299552254621">"Bufer: maks. 1 MB"</item> @@ -172,13 +172,13 @@ <item msgid="5431354956856655120">"Bufer: maks. 16 MB"</item> </string-array> <string-array name="select_logpersist_titles"> - <item msgid="1744840221860799971">"O‘chiq"</item> + <item msgid="1744840221860799971">"Yoqilmagan"</item> <item msgid="3054662377365844197">"Hammasi"</item> <item msgid="688870735111627832">"Radiodan boshqa hammasi"</item> <item msgid="2850427388488887328">"faqat yadro"</item> </string-array> <string-array name="select_logpersist_summaries"> - <item msgid="2216470072500521830">"O‘chiq"</item> + <item msgid="2216470072500521830">"Yoqilmagan"</item> <item msgid="172978079776521897">"Barcha jurnallar buferi"</item> <item msgid="3873873912383879240">"Radio jurnallar buferidan tashqari hammasi"</item> <item msgid="8489661142527693381">"faqat yadro jurnali buferi"</item> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index ccd6a09adce4..c6b56ad5a3b9 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -23,7 +23,7 @@ <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Tarmoqlarni tekshirib chiqishni iloji bo‘lmadi"</string> <string name="wifi_security_none" msgid="7985461072596594400">"Hech qanday"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Saqlandi"</string> - <string name="wifi_disabled_generic" msgid="4259794910584943386">"O‘chiq"</string> + <string name="wifi_disabled_generic" msgid="4259794910584943386">"Yoqilmagan"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP manzilini sozlab bo‘lmadi"</string> <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"Sifatsiz tarmoq sababli ulanib bo‘lmadi"</string> <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi ulanishini o‘rnatib bo‘lmadi"</string> @@ -238,7 +238,7 @@ <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Translatsiya: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Shaxsiy DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Shaxsiy DNS rejimini tanlang"</string> - <string name="private_dns_mode_off" msgid="8236575187318721684">"O‘chiq"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Yoqilmagan"</string> <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"Avtomatik"</string> <string name="private_dns_mode_provider" msgid="8354935160639360804">"Shaxsiy DNS provayderining host nomi"</string> <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"DNS provayderining host nomini kiriting"</string> @@ -367,7 +367,7 @@ <string name="button_convert_fbe" msgid="5152671181309826405">"O‘chirib tashlash va o‘girish…"</string> <string name="picture_color_mode" msgid="4560755008730283695">"Rang rejimi"</string> <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ranglaridan foydalanish"</string> - <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"O‘chiq"</string> + <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Yoqilmagan"</string> <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monoxrom"</string> <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deyteranomaliya (qizil/yashil)"</string> <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaliya (qizil/yashil)"</string> @@ -408,7 +408,7 @@ <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Ulangan, lekin quvvat olmayapti"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"To‘la"</string> <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Administrator tomonidan boshqariladi"</string> - <string name="disabled" msgid="9206776641295849915">"O‘chiq"</string> + <string name="disabled" msgid="9206776641295849915">"Yoqilmagan"</string> <string name="external_source_trusted" msgid="2707996266575928037">"Ruxsat berilgan"</string> <string name="external_source_untrusted" msgid="2677442511837596726">"Ruxsat berilmagan"</string> <string name="install_other_apps" msgid="6986686991775883017">"Notanish ilovalarni o‘rnatish"</string> @@ -459,7 +459,7 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Davomiyligi"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Har safar so‘ralsin"</string> - <string name="zen_mode_forever" msgid="2704305038191592967">"Bekor qilinmaguncha"</string> + <string name="zen_mode_forever" msgid="2704305038191592967">"Rejimdan chiqilgunicha"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Hozir"</string> <string name="media_transfer_this_device_name" msgid="1636276898262571213">"Shu qurilma"</string> </resources> diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index fcf920064e92..02d826f5790c 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -175,6 +175,9 @@ <!-- Adding Quick Settings tiles --> <uses-permission android:name="android.permission.BIND_QUICK_SETTINGS_TILE" /> + <!-- Quick Settings tile: Night Mode / Dark Theme --> + <uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE" /> + <!-- Block notifications inline notifications --> <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" /> diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml index d07caa51a61f..6836f1e33776 100644 --- a/packages/SystemUI/res-keyguard/values-ml/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml @@ -169,13 +169,66 @@ <item msgid="2233497913571137419">"പത്ത്"</item> <item msgid="5621554266768657830">"പതിനൊന്ന്"</item> </string-array> - <!-- no translation found for type_clock_minutes:1 (2091812961809760681) --> - <!-- no translation found for type_clock_minutes:2 (1496435384877290709) --> - <!-- no translation found for type_clock_minutes:3 (881846472976674129) --> - <!-- no translation found for type_clock_minutes:4 (2784477043911540584) --> - <!-- no translation found for type_clock_minutes:5 (1610928853656700614) --> - <!-- no translation found for type_clock_minutes:6 (2317806244043886658) --> - <!-- no translation found for type_clock_minutes:7 (3318687539120971327) --> - <!-- no translation found for type_clock_minutes:8 (5701600693712102348) --> - <!-- no translation found for type_clock_minutes:9 (3247381605947372495) --> + <string-array name="type_clock_minutes"> + <item msgid="8322049385467207985">"മണി"</item> + <item msgid="2091812961809760681">"ഓ ഒരു മിനിറ്റ്"</item> + <item msgid="1496435384877290709">"ഓ രണ്ട് മിനിറ്റ്"</item> + <item msgid="881846472976674129">"ഓ മൂന്ന് മിനിറ്റ്"</item> + <item msgid="2784477043911540584">"ഓ നാലു മിനിറ്റ്"</item> + <item msgid="1610928853656700614">"ഓ അഞ്ച് മിനിറ്റ്"</item> + <item msgid="2317806244043886658">"ഓ ആറ് മിനിറ്റ്"</item> + <item msgid="3318687539120971327">"ഓ ഏഴ് മിനിറ്റ്"</item> + <item msgid="5701600693712102348">"ഓ എട്ട് മിനിറ്റ്"</item> + <item msgid="3247381605947372495">"ഓ ഒമ്പത് മിനിറ്റ്"</item> + <item msgid="3508406095411245038">"പത്ത്"</item> + <item msgid="7161996337755311711">"പതിനൊന്ന്"</item> + <item msgid="4044549963329624197">"പന്ത്രണ്ട്"</item> + <item msgid="333373157917379088">"പതിമൂന്ന്"</item> + <item msgid="2631202907124819385">"പതിനാല്"</item> + <item msgid="6472396076858033453">"പതിനഞ്ച്"</item> + <item msgid="8656981856181581643">"പതിനാറ്"</item> + <item msgid="7289026608562030619">"പതിനേഴ്"</item> + <item msgid="3881477602692646573">"പതിനെട്ട്"</item> + <item msgid="3358129827772984226">"പത്തൊമ്പത്"</item> + <item msgid="3308575407402865807">"ഇരുപത്"</item> + <item msgid="5346560955382229629">"ഇരുപത്തിയൊന്ന്\n"</item> + <item msgid="226750304761473436">"ഇരുപത്തിരണ്ട്\n"</item> + <item msgid="616811325336838734">"ഇരുപത്തിമൂന്ന്\n"</item> + <item msgid="616346116869053440">"ഇരുപത്തിനാല്\n"</item> + <item msgid="4642996410384042830">"ഇരുപത്തിയഞ്ച്\n"</item> + <item msgid="7506092849993571465">"ഇരുപത്തിയാറ്\n"</item> + <item msgid="1915078191101042031">"ഇരുപത്തിയേഴ്\n"</item> + <item msgid="4292378641900520252">"ഇരുപത്തിയെട്ട്\n"</item> + <item msgid="5339513901773103696">"ഇരുപത്തിയൊമ്പത്\n"</item> + <item msgid="3574673250891657607">"മുപ്പത്"</item> + <item msgid="5796923836589110940">"മുപ്പത്തിയൊന്ന്\n"</item> + <item msgid="5859323597571702052">"മുപ്പത്തിരണ്ട്\n"</item> + <item msgid="5133326723148876507">"മുപ്പത്തിമൂന്ന്\n"</item> + <item msgid="2693999494655663096">"മുപ്പത്തിനാല്\n"</item> + <item msgid="3316754944962836197">"അമ്പത്തിയഞ്ച്\n"</item> + <item msgid="816891008836796723">"മുപ്പത്തിയാറ്\n"</item> + <item msgid="9158890488666520078">"മുപ്പത്തിയേഴ്\n"</item> + <item msgid="1894769703213894011">"മുപ്പത്തിയെട്ട്\n"</item> + <item msgid="5638820345598572399">"മുപ്പത്തിയൊമ്പത്\n"</item> + <item msgid="8838304023017895439">"നാൽപത്"</item> + <item msgid="1834742948932559597">"നാൽപ്പത്തിയൊന്ന്\n"</item> + <item msgid="6573707308847773944">"നാൽപത്തിരണ്ട്\n"</item> + <item msgid="2450149950652678001">"നാൽപ്പത്തിമൂന്ന്\n"</item> + <item msgid="2874667401318178036">"നാൽപത്തിനാല്\n"</item> + <item msgid="3391101532763048862">"നാൽപത്തിയഞ്ച്\n"</item> + <item msgid="1671489330863254362">"നാൽപ്പത്തിയാറ്\n"</item> + <item msgid="5916017359554531038">"നാൽപത്തിയേഴ്\n"</item> + <item msgid="8205413177993059967">"നാൽപത്തിയെട്ട്\n"</item> + <item msgid="6607867415142171302">"നാൽപത്തിയൊമ്പത്\n"</item> + <item msgid="8358850748472089162">"അമ്പത്"</item> + <item msgid="3551313125255080234">"അമ്പത്തിയൊന്ന്\n"</item> + <item msgid="1559678130725716542">"അമ്പത്തിരണ്ട്\n"</item> + <item msgid="431441994725492377">"അമ്പത്തിമൂന്ന്\n"</item> + <item msgid="6345774640539623024">"അമ്പത്തിനാല്\n"</item> + <item msgid="8018192990793931120">"അമ്പത്തിയഞ്ച്\n"</item> + <item msgid="6187650843754604534">"അമ്പത്തിയാറ്\n"</item> + <item msgid="8727240174015993259">"അമ്പത്തിയേഴ്\n"</item> + <item msgid="848339003778952950">"അമ്പത്തിയെട്ട്\n"</item> + <item msgid="5798985802835423618">"അമ്പത്തിയൊമ്പത്\n"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res-keyguard/values-th/strings.xml b/packages/SystemUI/res-keyguard/values-th/strings.xml index bfceb15099ba..6baa8c43cf82 100644 --- a/packages/SystemUI/res-keyguard/values-th/strings.xml +++ b/packages/SystemUI/res-keyguard/values-th/strings.xml @@ -69,7 +69,7 @@ <item quantity="other">ลองอีกครั้งใน <xliff:g id="NUMBER">%d</xliff:g> วินาที</item> <item quantity="one">ลองอีกครั้งใน 1 วินาที</item> </plurals> - <string name="kg_pattern_instructions" msgid="5547646893001491340">"วาดรูปแบบของคุณ"</string> + <string name="kg_pattern_instructions" msgid="5547646893001491340">"ลากรูปแบบของคุณ"</string> <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"ป้อน PIN ของซิม"</string> <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"ป้อน PIN ของซิมสำหรับ \"<xliff:g id="CARRIER">%1$s</xliff:g>\""</string> <string name="kg_sim_lock_esim_instructions" msgid="4416732549172148542">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> ปิดใช้ eSIM เพื่อใช้อุปกรณ์โดยไม่มีบริการมือถือ"</string> diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml index d033057cdb78..7a43c6d2051b 100644 --- a/packages/SystemUI/res/layout/status_bar.xml +++ b/packages/SystemUI/res/layout/status_bar.xml @@ -47,6 +47,7 @@ android:layout_height="match_parent" android:paddingStart="@dimen/status_bar_padding_start" android:paddingEnd="@dimen/status_bar_padding_end" + android:paddingTop="@dimen/status_bar_padding_top" android:orientation="horizontal" > <FrameLayout diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 895192a03156..baca541582e9 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index b2e68c21ce43..e3250448f40b 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5ጂ"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5ጂ+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index cda4defa1eba..876609e3d453 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -172,6 +172,8 @@ <string name="data_connection_4g_plus" msgid="1148687201877800700">"شبكة الجيل الرابع أو أحدث"</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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"شبكة 5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"شبكة 5G والأحدث"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 6d09133f6bfa..4b1db9d0c821 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -172,6 +172,8 @@ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string> <string name="data_connection_lte" msgid="2694876797724028614">"এলটিই"</string> <string name="data_connection_lte_plus" msgid="3423013208570937424">"এলটিই+"</string> + <!-- no translation found for data_connection_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -277,8 +279,7 @@ <item quantity="one"> ভিতৰত আৰু <xliff:g id="NUMBER_1">%s</xliff:g>টা জাননী আছে।</item> <item quantity="other"> ভিতৰত আৰু <xliff:g id="NUMBER_1">%s</xliff:g>টা জাননী আছে।</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"জাননীৰ ছেটিংসমূহ"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ছেটিংসমূহ"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"আপোনাৰ ফ\'নৰ স্ক্ৰীণ স্বয়ংক্ৰিয়ভাৱে ঘূৰিব৷"</string> @@ -620,30 +621,24 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"এই জাননীবোৰে আপোনাক সতৰ্ক কৰিব"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"আপুনি সাধাৰণতে এই জাননীসমূহ অগ্ৰাহ্য কৰে। \nসেইবোৰ দেখুওৱাই থাকিব লাগিবনে?"</string> <string name="inline_done_button" msgid="492513001558716452">"কৰা হ’ল"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"প্ৰয়োগ কৰক"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"এই জাননীসমূহ দেখুওৱাই থাকিব লাগিবনে?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"জাননী বন্ধ কৰক"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"নিৰৱে ডেলিভাৰ কৰক"</string> <string name="inline_block_button" msgid="8735843688021655065">"অৱৰোধ কৰক"</string> <string name="inline_keep_button" msgid="6665940297019018232">"দেখুওৱাই থাকক"</string> <string name="inline_minimize_button" msgid="966233327974702195">"সৰু কৰক"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"মৃদু"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"নীৰৱ হৈ থাকক"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"বাধা দিয়া"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"সতৰ্ক কৰি থাকক"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"জাননী অফ কৰক"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"এই এপটোৰ জাননী দেখুওৱাই থাকিব লাগিবনে?"</string> <string name="hint_text_block" msgid="3554459167504485284">"অৱৰোধ কৰা জাননী ক’তো দেখা নাযায় বা সেইবোৰে কোনো শব্দ নকৰে। আপুনি ছেটিংসমূহলৈ গৈ জাননীসমূহ অৱৰোধৰ পৰা আঁতৰাব পাৰে৷"</string> <string name="hint_text_silent" msgid="859468056340177016">"নিৰৱ জাননীসমূহ শ্বেডত দেখা যায়, কিন্তু লক স্ক্ৰীণত আৰু বেনাৰ হিচাপে দেখা নাযায় আৰু কোনো শব্দ নকৰে।"</string> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_alert" msgid="2721169810318722524">"এই জাননীবোৰে এটা শব্দ কৰিব আৰু জাননী দেৰাজ, স্থিতি দণ্ড আৰু লক স্ক্ৰীণত দেখা যাব"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"এই জাননীসমূহ বন্ধ কৰিব নোৱাৰি"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"এই ধৰণৰ জাননীবোৰ ইয়াত কনফিগাৰ কৰিব পৰা নাযায়"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ জৰিয়তে"</string> <string name="appops_camera" msgid="8100147441602585776">"এই এপে কেমেৰা ব্য়ৱহাৰ কৰি আছে।"</string> <string name="appops_microphone" msgid="741508267659494555">"এই এপে মাইক্ৰ\'ফ\'ন ব্য়ৱহাৰ কৰি আছে।"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 36c297ed3d64..5354e0d9ade2 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 00f13ccd912b..242db2efcb2e 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -376,7 +377,7 @@ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Prevucite udesno da biste brzo promenili aplikacije"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Uključi/isključi pregled"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjena je"</string> - <string name="expanded_header_battery_charging" msgid="205623198487189724">"Punjenje"</string> + <string name="expanded_header_battery_charging" msgid="205623198487189724">"Puni se"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> do kraja punjenja"</string> <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"Ne puni se"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Mreža se možda\nnadgleda"</string> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 5ff11d7b344d..396c4be82d71 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 776424414a31..dd6ffb275d68 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 94b32a89fab7..e8d3d3f64947 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -277,8 +279,7 @@ <item quantity="one">ভিতরে আরও <xliff:g id="NUMBER_1">%s</xliff:g>টি বিজ্ঞপ্তি আছে।</item> <item quantity="other">ভিতরে আরও <xliff:g id="NUMBER_1">%s</xliff:g>টি বিজ্ঞপ্তি আছে।</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"বিজ্ঞপ্তির সেটিংস"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> সেটিংস"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"স্ক্রিন অটোমেটিক ঘুরে যাবে৷"</string> @@ -620,30 +621,24 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"এই বিজ্ঞপ্তিগুলি আপনাকে সতর্ক করে দেবে"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"এই বিজ্ঞপ্তিগুলিকে আপনি সাধারণত বাতিল করেন। \nসেগুলি দেখতে চান?"</string> <string name="inline_done_button" msgid="492513001558716452">"হয়ে গেছে"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"প্রয়োগ করুন"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"এই বিজ্ঞপ্তিগুলি পরেও দেখে যেতে চান?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"বিজ্ঞপ্তি বন্ধ করুন"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"সাইলেন্ট মোডে দেখান"</string> <string name="inline_block_button" msgid="8735843688021655065">"ব্লক করুন"</string> <string name="inline_keep_button" msgid="6665940297019018232">"দেখতে থাকুন"</string> <string name="inline_minimize_button" msgid="966233327974702195">"ছোট করে দিন"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"সাইলেন্ট মোডে"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"বিজ্ঞপ্তি মিউট করুন"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"বিরক্তিকর"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"বিজ্ঞপ্তি পান"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"বিজ্ঞপ্তি বন্ধ করুন"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"এই অ্যাপের বিজ্ঞপ্তি পরেও দেখে যেতে চান?"</string> <string name="hint_text_block" msgid="3554459167504485284">"ব্লক করা বিজ্ঞপ্তি কোথাও দেখানো হয় না ও সেটির শব্দ শোনা যায় না। আপনি সেটিংস থেকে বিজ্ঞপ্তি আনব্লক করতে পারেন।"</string> <string name="hint_text_silent" msgid="859468056340177016">"নীরব বিজ্ঞপ্তি শেডে দেখানো হয়, কিন্তু লক স্ক্রিনে দেখানো হয় না। একইসাথে, এটি ব্যানার দেখাতে পারে না বা আওয়াজও করতে পারে না।"</string> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_alert" msgid="2721169810318722524">"আওয়াজ হলেই জানতে পারবেন বিজ্ঞপ্তি এসেছে এবং সেটি বিজ্ঞপ্তি ড্রয়ার, স্ট্যাটাস বার এবং লক স্ক্রিনে দেখা যাবে"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"এই বিজ্ঞপ্তিগুলি বন্ধ করা যাবে না"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"এই সমস্ত বিজ্ঞপ্তিকে এখানে কনফিগার করা যাবে না"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর মাধ্যমে"</string> <string name="appops_camera" msgid="8100147441602585776">"এই অ্যাপটি ক্যামেরা ব্যবহার করছে।"</string> <string name="appops_microphone" msgid="741508267659494555">"এই অ্যাপটি মাইক্রোফোন ব্যবহার করছে।"</string> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index f85ed358552c..a51ba975afd6 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -817,7 +818,7 @@ <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Stranica <xliff:g id="ID_1">%1$d</xliff:g> od <xliff:g id="ID_2">%2$d</xliff:g>"</string> <string name="tuner_lock_screen" msgid="5755818559638850294">"Zaključavanje ekrana"</string> <string name="pip_phone_expand" msgid="5889780005575693909">"Proširi"</string> - <string name="pip_phone_minimize" msgid="1079119422589131792">"Umanji"</string> + <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimiziraj"</string> <string name="pip_phone_close" msgid="8416647892889710330">"Zatvori"</string> <string name="pip_phone_settings" msgid="8080777499521528521">"Postavke"</string> <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Povucite prema dolje da odbacite"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index ce683ef52760..fdf51f2b46ea 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -604,7 +605,7 @@ <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vols activar el Bluetooth?"</string> <string name="enable_bluetooth_message" msgid="9106595990708985385">"Per connectar el teclat amb la tauleta, primer has d\'activar el Bluetooth."</string> <string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"Activa"</string> - <string name="show_silently" msgid="6841966539811264192">"Mostra les notificacions de manera silenciosa"</string> + <string name="show_silently" msgid="6841966539811264192">"Mostra les notificacions en silenci"</string> <string name="block" msgid="2734508760962682611">"Bloqueja totes les notificacions"</string> <string name="do_not_silence" msgid="6878060322594892441">"No silenciïs"</string> <string name="do_not_silence_block" msgid="4070647971382232311">"No silenciïs ni bloquegis"</string> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 1ba20c2b8e3e..924ad5a5d8b9 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index c861c4f8b0de..d347f8e65ad2 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index c185d1cae1b9..fb7628ad03f1 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -840,7 +841,7 @@ <string name="lockscreen_unlock_right" msgid="1529992940510318775">"Rechte Verknüpfung entsperrt außerdem"</string> <string name="lockscreen_none" msgid="4783896034844841821">"Keine"</string> <string name="tuner_launch_app" msgid="1527264114781925348">"<xliff:g id="APP">%1$s</xliff:g> starten"</string> - <string name="tuner_other_apps" msgid="4726596850501162493">"Weitere Apps"</string> + <string name="tuner_other_apps" msgid="4726596850501162493">"Sonstige Apps"</string> <string name="tuner_circle" msgid="2340998864056901350">"Kreis"</string> <string name="tuner_plus" msgid="6792960658533229675">"Plus"</string> <string name="tuner_minus" msgid="4806116839519226809">"Minus"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index c5fc1263a01d..ba5e12273295 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index 98d551ec95fc..8ea35affa6ce 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index d2fac3dda42a..92416703443d 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index 98d551ec95fc..8ea35affa6ce 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index 98d551ec95fc..8ea35affa6ce 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index 2f76dd15b18c..f28f761e4c22 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 10f49ed73a01..fdee8a81324e 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 2153ab760808..8e620d19b889 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5G E"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 7df6494dc532..59616ace92dd 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 2c917b67c787..71a15840c2b6 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -38,12 +38,12 @@ <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Aktibatu"</string> <string name="battery_saver_start_action" msgid="8187820911065797519">"Aktibatu bateria-aurrezlea"</string> <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Ezarpenak"</string> - <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string> + <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wifia"</string> <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Biratu pantaila automatikoki"</string> <string name="status_bar_settings_mute_label" msgid="554682549917429396">"DESAKTIBATU AUDIOA"</string> <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string> <string name="status_bar_settings_notifications" msgid="397146176280905137">"Jakinarazpenak"</string> - <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetootha konektatu da"</string> + <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth-a konektatu da"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Konfiguratu idazketa-metodoak"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Teklatu fisikoa"</string> <string name="usb_device_permission_prompt" msgid="1825685909587559679">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> atzitzeko baimena eman nahi diozu <xliff:g id="APPLICATION">%1$s</xliff:g> aplikazioari?"</string> @@ -125,8 +125,8 @@ <string name="accessibility_face_dialog_face_icon" msgid="2658119009870383490">"Aurpegiaren ikonoa"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Zoom-bateragarritasunaren botoia."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Handiagotu pantaila txikia."</string> - <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetootha konektatuta."</string> - <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetootha deskonektatuta."</string> + <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth-a konektatuta."</string> + <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth-a deskonektatuta."</string> <string name="accessibility_no_battery" msgid="358343022352820946">"Ez dago bateriarik."</string> <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Bateriak barra bat du."</string> <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Bateriak bi barra ditu."</string> @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -295,8 +296,8 @@ <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarmak soilik"</string> <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Isiltasun osoa"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth-a"</string> - <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetootha (<xliff:g id="NUMBER">%d</xliff:g> gailu)"</string> - <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetootha desaktibatuta"</string> + <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth-a (<xliff:g id="NUMBER">%d</xliff:g> gailu)"</string> + <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth-a desaktibatuta"</string> <string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"Ez dago parekatutako gailurik erabilgarri"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="7106697106764717416">"Bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Audioa"</string> @@ -668,7 +669,7 @@ <item quantity="other">%d minutu</item> <item quantity="one">%d minutu</item> </plurals> - <string name="battery_panel_title" msgid="7944156115535366613">"Bateriaren erabilera"</string> + <string name="battery_panel_title" msgid="7944156115535366613">"Bateria-erabilera"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Bateria-aurrezlea ez dago erabilgarri gailua kargatzen ari denean"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Bateria-aurrezlea"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Errendimendua eta atzeko planoko datuen erabilera murrizten ditu"</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 9a7d1b79355b..e673a49e9157 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 9203a19c86a2..512dc5cc1dac 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 6e0bd3378060..3293f41db529 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index b4cc5bd44b4d..f13cdc3e1420 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 62da3b643dbc..17177d85baa7 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -704,7 +706,7 @@ <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Volver"</string> <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"Notificacións"</string> <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"Atallos de teclado"</string> - <string name="keyboard_shortcut_group_system_switch_input" msgid="8413348767825486492">"Cambiar de deseño de teclado"</string> + <string name="keyboard_shortcut_group_system_switch_input" msgid="8413348767825486492">"Cambiar deseño do teclado"</string> <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"Aplicacións"</string> <string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"Asistente"</string> <string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"Navegador"</string> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 42e1fef0b78c..8535a3f0634f 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -277,8 +279,7 @@ <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> વધુ સૂચના અંદર છે.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> વધુ સૂચના અંદર છે.</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"સૂચનાઓની સેટિંગ્સ"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> સેટિંગ્સ"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"સ્ક્રીન આપમેળે ફરશે."</string> @@ -620,30 +621,24 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"આ બધા નોટિફિકેશન તમને અલર્ટ કરશે"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"તમે સામાન્ય રીતે આ નોટીફિકેશનને છોડી દો છો. \nતેમને બતાવવાનું ચાલુ રાખીએ?"</string> <string name="inline_done_button" msgid="492513001558716452">"થઈ ગયું"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"લાગુ કરો"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"આ નોટિફિકેશન બતાવવાનું ચાલુ રાખીએ?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"નોટિફિકેશન બંધ કરો"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"ચુપચાપ મોકલો"</string> <string name="inline_block_button" msgid="8735843688021655065">"બ્લૉક કરો"</string> <string name="inline_keep_button" msgid="6665940297019018232">"બતાવવાનું ચાલુ રાખો"</string> <string name="inline_minimize_button" msgid="966233327974702195">"નાનું કરો"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"સાઇલન્ટ નોટિફિકેશન"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"સાઇલન્ટ મોડ ચાલુ રાખો"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"વિક્ષેપ કરી શકતા"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"અલર્ટ કરવાનું ચાલુ રાખો"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"નોટિફિકેશન બંધ કરો"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"આ ઍપમાંથી નોટિફિકેશન બતાવવાનું ચાલુ રાખીએ?"</string> <string name="hint_text_block" msgid="3554459167504485284">"બ્લૉક કરેલાં નોટિફિકેશન ક્યાંય દેખાતાં નથી કે અવાજ સંભળાવતાં નથી. તમે સેટિંગમાં જઈને નોટિફિકેશનને અનબ્લૉક કરી શકો છો."</string> <string name="hint_text_silent" msgid="859468056340177016">"સાઇલન્ટ નોટિફિકેશન શેડમાં દેખાય છે, પણ લૉક સ્ક્રીન પર દેખાતાં નથી, બૅનર પ્રસ્તુત કરે છે અથવા ધ્વનિ વગાડે છે."</string> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_alert" msgid="2721169810318722524">"આ બધા નોટિફિકેશન કોઈ સાઉન્ડ વગાડશે અને તે નોટિફિકેશન ડ્રોઅર, સ્ટેટસ બાર તેમજ લૉક સ્ક્રીનમાં પણ દેખાશે"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"આ નોટિફિકેશન બંધ કરી શકશો નહીં"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"નોટિફિકેશનના આ ગ્રૂપની ગોઠવણી અહીં કરી શકાશે નહીં"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> મારફતે"</string> <string name="appops_camera" msgid="8100147441602585776">"આ ઍપ કૅમેરાનો ઉપયોગ કરી રહી છે."</string> <string name="appops_microphone" msgid="741508267659494555">"આ ઍપ માઇક્રોફોનનો ઉપયોગ કરી રહી છે."</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index cf1617968634..7d38dd9873aa 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -26,8 +26,8 @@ <string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचनाएं"</string> <string name="battery_low_title" msgid="9187898087363540349">"बैटरी जल्दी ही खत्म हो जाएगी"</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">%1$s</xliff:g> बची है, आपके इस्तेमाल करने के तरीके के हिसाब से बैटरी लगभग <xliff:g id="TIME">%2$s</xliff:g> चलेगी"</string> - <string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> बची है, बैटरी लगभग <xliff:g id="TIME">%2$s</xliff:g> चलेगी"</string> + <string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> बची है, आपके इस्तेमाल करने के हिसाब से बैटरी करीब <xliff:g id="TIME">%2$s</xliff:g> चलेगी"</string> + <string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> बची है, बैटरी करीब <xliff:g id="TIME">%2$s</xliff:g> चलेगी"</string> <string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> बैटरी बची है. बैटरी सेवर चालू है."</string> <string name="invalid_charger" msgid="2741987096648693172">"यूएसबी के ज़रिए चार्ज नहीं किया जा सकता. अपने डिवाइस के साथ मिलने वाले चार्जर का इस्तेमाल करें."</string> <string name="invalid_charger_title" msgid="2836102177577255404">"यूएसबी के ज़रिए चार्ज नहीं किया जा सकता"</string> @@ -175,6 +175,8 @@ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string> <string name="data_connection_lte" msgid="2694876797724028614">"एलटीई"</string> <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string> + <!-- no translation found for data_connection_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -284,8 +286,7 @@ <item quantity="one">इसमें <xliff:g id="NUMBER_1">%s</xliff:g> और सूचनाएं हैं.</item> <item quantity="other">इसमें <xliff:g id="NUMBER_1">%s</xliff:g> और सूचनाएं हैं.</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"सूचना सेटिंग"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> सेटिंग"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"स्क्रीन स्वचालित रूप से घूमेगी."</string> @@ -397,7 +398,7 @@ <string name="zen_silence_introduction" msgid="3137882381093271568">"इससे अलार्म, संगीत, वीडियो और गेम सहित सभी आवाज़ और कंपन (वाइब्रेशन) रोक दिए जाते हैं."</string> <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">"कम अत्यावश्यक सूचनाएं नीचे दी गई हैं"</string> - <string name="notification_tap_again" msgid="7590196980943943842">"खोलने के लिए पुन: टैप करें"</string> + <string name="notification_tap_again" msgid="7590196980943943842">"खोलने के लिए फिर से टैप करें"</string> <string name="keyguard_unlock" msgid="8043466894212841998">"अनलॉक करने के लिए ऊपर स्वाइप करें"</string> <string name="do_disclosure_generic" msgid="5615898451805157556">"इस डिवाइस का प्रबंधन आपका संगठन करता है"</string> <string name="do_disclosure_with_name" msgid="5640615509915445501">"इस डिवाइस के प्रबंधक <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> हैं"</string> @@ -427,7 +428,7 @@ <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"अतिथि को निकालें?"</string> <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"इस सत्र के सभी ऐप्स और डेटा को हटा दिया जाएगा."</string> <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"निकालें"</string> - <string name="guest_wipe_session_title" msgid="6419439912885956132">"अतिथि, आपका पुन: स्वागत है!"</string> + <string name="guest_wipe_session_title" msgid="6419439912885956132">"अतिथि, आपका फिर से स्वागत है!"</string> <string name="guest_wipe_session_message" msgid="8476238178270112811">"क्या आप अपना सत्र जारी रखना चाहते हैं?"</string> <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"फिर से शुरू करें"</string> <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"हां, जारी रखें"</string> @@ -611,7 +612,7 @@ <string name="activity_not_found" msgid="348423244327799974">"ऐप्लिकेशन आपके डिवाइस पर इंस्टॉल नहीं है"</string> <string name="clock_seconds" msgid="7689554147579179507">"घड़ी के सेकंड दिखाएं"</string> <string name="clock_seconds_desc" msgid="6282693067130470675">"स्टेटस बार में सेकंड में समय दिखाएं. इससे बैटरी लाइफ़ पर असर पड़ सकता है."</string> - <string name="qs_rearrange" msgid="8060918697551068765">"त्वरित सेटिंग को पुन: व्यवस्थित करें"</string> + <string name="qs_rearrange" msgid="8060918697551068765">"त्वरित सेटिंग को फिर से व्यवस्थित करें"</string> <string name="show_brightness" msgid="6613930842805942519">"त्वरित सेटिंग में स्क्रीन की रोशनी दिखाएं"</string> <string name="experimental" msgid="6198182315536726162">"प्रयोगात्मक"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"ब्लूटूथ चालू करें?"</string> @@ -632,32 +633,26 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"ये सूचनाएं आपको अलर्ट करेंगी"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"अाप अक्सर इन सूचनाओं को खारिज कर देते हैं. \nआगे भी इन्हें देखना जारी रखना चाहते हैं?"</string> <string name="inline_done_button" msgid="492513001558716452">"हो गया"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"लागू करें"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"ये सूचनाएं दिखाना जारी रखें?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"सूचनाएं दिखाना बंद करें"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"बिना आवाज़ के भेजें"</string> <string name="inline_block_button" msgid="8735843688021655065">"ब्लॉक करें"</string> <string name="inline_keep_button" msgid="6665940297019018232">"दिखाना जारी रखें"</string> <string name="inline_minimize_button" msgid="966233327974702195">"सूचनाएं छोटी करें"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"बिना आवाज़ के"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"साइलेंट मोड में सूचनाएं पाएं"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"आवाज़ वाली सूचनाएं"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"सूचना देना जारी रखें"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"सूचनाएं बंद करें"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"इस ऐप्लिकेशन से जुड़ी सूचनाएं दिखाना जारी रखें?"</string> <!-- no translation found for hint_text_block (3554459167504485284) --> <skip /> <!-- no translation found for hint_text_silent (859468056340177016) --> <skip /> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_alert" msgid="2721169810318722524">"यह सूचनाएं आवाज़ करेंगी और सूचना की दराज, स्टेटस बार और लॉक स्क्रीन में दिखाई देंगी"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ये सूचनाएं दिखाया जाना बंद नहीं किया जा सकता"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"सूचनाओं के इस समूह को यहां कॉन्फ़िगर नहीं किया जा सकता"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> के ज़रिए"</string> <string name="appops_camera" msgid="8100147441602585776">"यह ऐप्लिकेशन कैमरे का इस्तेमाल कर रहा है."</string> <string name="appops_microphone" msgid="741508267659494555">"यह ऐप्लिकेशन माइक्रोफ़ोन का इस्तेमाल कर रहा है."</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 7018cfd500b3..c6d9c7509222 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -172,6 +172,7 @@ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G i više"</string> <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string> <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 7bc45eaf6408..ef0b84b4660b 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -309,7 +310,7 @@ <string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Automatikus képernyőforgatás"</string> <string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"<xliff:g id="ID_1">%s</xliff:g> mód"</string> <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Elforgatás zárolva"</string> - <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Álló"</string> + <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portré"</string> <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Fekvő"</string> <string name="quick_settings_ime_label" msgid="7073463064369468429">"Beviteli módszer"</string> <string name="quick_settings_location_label" msgid="5011327048748762257">"Tartózkodási hely"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index a95bbb145e3f..aaf74b4726f9 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 0f8686d613f6..a816f42bf9de 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -626,7 +627,7 @@ <string name="inline_block_button" msgid="8735843688021655065">"Blokir"</string> <string name="inline_keep_button" msgid="6665940297019018232">"Terus tampilkan"</string> <string name="inline_minimize_button" msgid="966233327974702195">"Perkecil"</string> - <string name="inline_silent_button_silent" msgid="6904727667411781466">"Lembut"</string> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"Senyap"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"Tetap nonaktif"</string> <string name="inline_silent_button_alert" msgid="2449191160203602471">"Mengganggu"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"Terus beri tahu"</string> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 54787a2d81f5..7a291459905d 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 6c1bf7147210..d304bedc028e 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index a271e6edb12f..f1e5a1ccdaba 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"+G5"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 261c05efafa7..ebe6dccaa2ab 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 643e9ff47e9c..1b326a1ce03c 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index fcb314cfa8cf..b74aeb18e31a 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -225,8 +227,8 @@ <string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"үнсіз"</string> <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"тек дабылдар"</string> <string name="accessibility_quick_settings_dnd" msgid="5555155552520665891">"Мазаламау."</string> - <string name="accessibility_quick_settings_dnd_changed_off" msgid="2757071272328547807">"Мазаламау режимі өшірілді."</string> - <string name="accessibility_quick_settings_dnd_changed_on" msgid="6808220653747701059">"мазаламау режимі қосылды."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="2757071272328547807">"\"Мазаламау\" режимі өшірілді."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="6808220653747701059">"\"Мазаламау\" режимі қосылды."</string> <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth өшірулі."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth қосулы."</string> @@ -441,8 +443,8 @@ <string name="battery_saver_notification_title" msgid="8614079794522291840">"Battery saver қосулы"</string> <string name="battery_saver_notification_text" msgid="820318788126672692">"Өнімділікті және фондық деректерді азайтады"</string> <string name="battery_saver_notification_action_text" msgid="132118784269455533">"Battery saver функциясын өшіру"</string> - <string name="media_projection_dialog_text" msgid="5751657130671431216">"Жазу және трансляциялау кезінде <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> сіз ойнайтын аудиомазмұн және құпия сөздер, төлем ақпараттары, фотосуреттер және хабарлар сияқты кез келген құпия ақпаратты сақтай аласыз."</string> - <string name="media_projection_dialog_title" msgid="8124184308671641248">"Трансляциялау/Жазу кезінде құпия ақпаратты көрсету"</string> + <string name="media_projection_dialog_text" msgid="5751657130671431216">"Жазу және трансляциялау кезінде <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ойнатылған аудиомазмұн, құпия сөздер, төлем мәліметтері, фотосуреттер және хабарлар сияқты кез келген құпия ақпаратты сақтай алады."</string> + <string name="media_projection_dialog_title" msgid="8124184308671641248">"Трансляциялау/жазу кезінде құпия ақпаратты көрсету"</string> <string name="media_projection_remember_text" msgid="3103510882172746752">"Қайта көрсетпеу"</string> <string name="clear_all_notifications_text" msgid="814192889771462828">"Барлығын тазалау"</string> <string name="manage_notifications_text" msgid="2386728145475108753">"Басқару"</string> @@ -632,8 +634,8 @@ <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"Хабарландырулар келе берсін"</string> <string name="inline_turn_off_notifications" msgid="8635596135532202355">"Хабарландыруларды өшіру"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Осы қолданбаның хабарландырулары көрсетілсін бе?"</string> - <string name="hint_text_block" msgid="3554459167504485284">"Тыйым салынған хабарландырулар еш жерде көрсетілмейді немесе дыбыс шығармайды. Хабарландыруларды параметрлерден бөгей алмайсыз."</string> - <string name="hint_text_silent" msgid="859468056340177016">"Дыбыссыз хабарландырулар көлеңкеде шығады, бірақ құлыптау экранына шықпайды, баннерде ұсынылады және дыбысты ойнатады."</string> + <string name="hint_text_block" msgid="3554459167504485284">"Тыйым салынған хабарландырулар еш жерде көрсетілмейді немесе дыбыс шығармайды. Тыйымды алу үшін параметрлерге өтіңіз."</string> + <string name="hint_text_silent" msgid="859468056340177016">"Дыбыссыз хабарландырулар көлеңкеде шығады, бірақ құлып экранына шықпайды, баннерде ұсынылады және дыбысты ойнатады."</string> <string name="hint_text_alert" msgid="2721169810318722524">"Бұл дыбыстық хабарландырулар хабарландыру тартпасында, күй жолағында және құлып экранында көрсетіледі."</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Хабарландыруларды өшіру мүмкін емес"</string> <string name="notification_multichannel_desc" msgid="4695920306092240550">"Мұндай хабарландырулар бұл жерде конфигурацияланбайды."</string> @@ -717,7 +719,7 @@ <string name="tuner_full_zen_title" msgid="4540823317772234308">"Дыбыс деңгейін басқару элементтерімен бірге көрсету"</string> <string name="volume_and_do_not_disturb" msgid="1750270820297253561">"Мазаламау"</string> <string name="volume_dnd_silent" msgid="4363882330723050727">"Дыбыс деңгейі түймелерінің төте жолы"</string> - <string name="volume_up_silent" msgid="7545869833038212815">"Дыбысы арттырылған кезде, мазаламау режимінен шығу"</string> + <string name="volume_up_silent" msgid="7545869833038212815">"Дыбысы арттырылған кезде, \"Мазаламау\" режимінен шығу"</string> <string name="battery" msgid="7498329822413202973">"Батарея"</string> <string name="clock" msgid="7416090374234785905">"Сағат"</string> <string name="headset" msgid="4534219457597457353">"Құлақаспап жинағы"</string> @@ -898,10 +900,10 @@ <string name="sensor_privacy_mode" msgid="8982771253020769598">"Датчиктер өшірулі"</string> <string name="device_services" msgid="1191212554435440592">"Құрылғы қызметтері"</string> <string name="music_controls_no_title" msgid="5236895307087002011">"Атауы жоқ"</string> - <string name="restart_button_description" msgid="2035077840254950187">"Бұл қолданбаны іске қосу үшін түртіп, толық экранға өтіңіз."</string> + <string name="restart_button_description" msgid="2035077840254950187">"Бұл қолданбаны қайта қосып, толық экранға өту үшін түртіңіз."</string> <string name="bubbles_deep_link_button_description" msgid="8895837143057564517">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасын ашу"</string> <string name="bubbles_settings_button_description" msgid="2970630476657287189">"<xliff:g id="APP_NAME">%1$s</xliff:g> қалқымалы анықтамаларының параметрлері"</string> - <string name="bubbles_prompt" msgid="8807968030159469710">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасында қалқымалы анықтамаларға рұқсат етілсін бе?"</string> + <string name="bubbles_prompt" msgid="8807968030159469710">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасының қалқымалы анықтамаларына рұқсат етілсін бе?"</string> <string name="no_bubbles" msgid="337101288173078247">"Тыйым салу"</string> <string name="yes_bubbles" msgid="668809525728633841">"Рұқсат беру"</string> <string name="ask_me_later_bubbles" msgid="2147688438402939029">"Кейінірек сұралсын"</string> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 0d19e1f7e004..11764e1c25aa 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 5a6a52cfaab0..04c7bd2d813f 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -277,8 +279,7 @@ <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> ಕ್ಕಿಂತ ಹೆಚ್ಚು ಅಧಿಸೂಚನೆಗಳು ಒಳಗಿವೆ.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ಕ್ಕಿಂತ ಹೆಚ್ಚು ಅಧಿಸೂಚನೆಗಳು ಒಳಗಿವೆ.</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"ಅಧಿಸೂಚನೆ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"ಪರದೆಯು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಿರುಗುತ್ತದೆ."</string> @@ -620,30 +621,24 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"ಈ ಸೂಚನೆಗಳು ನಿಮ್ಮನ್ನು ಎಚ್ಚರಿಸುತ್ತವೆ"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ವಜಾಗೊಳಿಸಿದ್ದೀರಿ. \nಅವುಗಳನ್ನು ತೋರಿಸುತ್ತಲೇ ಇರಬೇಕೆ?"</string> <string name="inline_done_button" msgid="492513001558716452">"ಪೂರ್ಣಗೊಂಡಿದೆ"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"ಅನ್ವಯಿಸಿ"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸುತ್ತಲೇ ಇರಬೇಕೆ?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿಲ್ಲಿಸಿ"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"ಮೌನವಾಗಿ ವಿತರಿಸಿ"</string> <string name="inline_block_button" msgid="8735843688021655065">"ನಿರ್ಬಂಧಿಸಿ"</string> <string name="inline_keep_button" msgid="6665940297019018232">"ತೋರಿಸುತ್ತಲಿರಿ"</string> <string name="inline_minimize_button" msgid="966233327974702195">"ಕಿರಿದುಗೊಳಿಸಿ"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"ಹಿತವಾಗಿ"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"ಮೌನವಾಗಿರಿ"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"ಅಡಚಣೆ"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"ಎಚ್ಚರಿಸುತ್ತಿರಿ"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಿ"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ಈ ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸುತ್ತಲೇ ಇರಬೇಕೆ?"</string> <string name="hint_text_block" msgid="3554459167504485284">"ನಿರ್ಬಂಧಿಸಲಾದ ಅಧಿಸೂಚನೆಗಳು ಎಲ್ಲಿಯೂ ಗೋಚರಿಸುವುದಿಲ್ಲ ಅಥವಾ ಯಾವುದೇ ಧ್ವನಿಯನ್ನು ಪ್ಲೇ ಮಾಡುವುದಿಲ್ಲ. ನೀವು ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಅಧಿಸೂಚನೆಗಳ ನಿರ್ಬಂಧವನ್ನು ರದ್ದುಗೊಳಿಸಬಹುದು."</string> <string name="hint_text_silent" msgid="859468056340177016">"ನಿಶ್ಶಬ್ಧ ಅಧಿಸೂಚನೆಗಳು ಶೇಡ್ನಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ, ಆದರೆ ಲಾಕ್ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಗೋಚರಿಸುವುದಿಲ್ಲ, ಬ್ಯಾನರ್ ಪ್ರಸ್ತುತಪಡಿಸುತ್ತವೆ ಅಥವಾ ಧ್ವನಿಯನ್ನು ಪ್ಲೇ ಮಾಡುತ್ತವೆ."</string> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_alert" msgid="2721169810318722524">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಸ್ವೀಕರಿಸಿದಾಗ ಧ್ವನಿಯನ್ನು ಮಾಡುತ್ತವೆ ಮತ್ತು ಅಧಿಸೂಚನೆ ಡ್ರಾಯರ್, ಸ್ಥಿತಿ ಪಟ್ಟಿ ಮತ್ತು ಲಾಕ್ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತದೆ"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"ಈ ಗುಂಪಿನ ಅಧಿಸೂಚನೆಗಳನ್ನು ಇಲ್ಲಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿರುವುದಿಲ್ಲ"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಮೂಲಕ"</string> <string name="appops_camera" msgid="8100147441602585776">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಕ್ಯಾಮರಾವನ್ನು ಬಳಸುತ್ತಿದೆ."</string> <string name="appops_microphone" msgid="741508267659494555">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ."</string> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index d7bf351ccbbc..56a6af28a277 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 937c1469f883..75308a5245b9 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 8046632c6492..b2103c8ce589 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index e8500c18aa23..28fa2c6d4ac0 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 1b6db067fcba..77ff3b0eb206 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 6ac95b9a5e4c..985fa7b689db 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -704,7 +705,7 @@ <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_switch_input" msgid="8413348767825486492">"Промени распоред на тастатура"</string> + <string name="keyboard_shortcut_group_system_switch_input" msgid="8413348767825486492">"Промени јазик на тастатура"</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> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 1f71904c32c2..25b4720b65b0 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -63,10 +63,8 @@ <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"ഉപകരണത്തിൽ ഇപ്പോൾ സൈൻ ഇൻ ചെയ്തിരിക്കുന്ന ഉപയോക്താവിന് USB ഡീബഗ്ഗിംഗ് ഓണാക്കാനാകില്ല. ഈ ഫീച്ചർ ഉപയോഗിക്കാൻ പ്രാഥമിക ഉപയോക്താവിലേക്ക് മാറുക."</string> <string name="usb_contaminant_title" msgid="206854874263058490">"USB പോർട്ട് പ്രവർത്തനരഹിതമാക്കി"</string> <string name="usb_contaminant_message" msgid="2205845572186473860">"ദ്രാവകത്തിൽ നിന്നോ പൊടിയിൽ നിന്നോ നിങ്ങളുടെ ഉപകരണത്തെ പരിരക്ഷിക്കാനായി USB പോർട്ട് പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നതിനാൽ അത് ആക്സസറികളൊന്നും തിരിച്ചറിയില്ല.\n\n USB പോർട്ട് സുരക്ഷിതമായി വീണ്ടും ഉപയോഗിക്കാനാകുമ്പോൾ നിങ്ങളെ അറിയിക്കും."</string> - <!-- no translation found for usb_port_enabled (7906141351687694867) --> - <skip /> - <!-- no translation found for usb_disable_contaminant_detection (2103905315747120033) --> - <skip /> + <string name="usb_port_enabled" msgid="7906141351687694867">"ആക്സസറികളും ചാർജറുകളും കണ്ടെത്താൻ USB പോർട്ട് പ്രവർത്തനക്ഷമമാക്കുക"</string> + <string name="usb_disable_contaminant_detection" msgid="2103905315747120033">"USB പ്രവർത്തനക്ഷമമാക്കുക"</string> <string name="compat_mode_on" msgid="6623839244840638213">"സ്ക്രീനിൽ ഉൾക്കൊള്ളിക്കാൻ സൂം ചെയ്യുക"</string> <string name="compat_mode_off" msgid="4434467572461327898">"സ്ക്രീനിൽ ഉൾക്കൊള്ളിക്കാൻ വലിച്ചുനീട്ടുക"</string> <string name="global_action_screenshot" msgid="8329831278085426283">"സ്ക്രീൻഷോട്ട്"</string> @@ -113,8 +111,7 @@ <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"നിങ്ങളുടെ ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കാതെ അൺലോക്കുചെയ്യുക"</string> <string name="accessibility_scanning_face" msgid="769545173211758586">"മുഖം സ്കാൻ ചെയ്യുന്നു"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"അയയ്ക്കുക"</string> - <!-- no translation found for accessibility_manage_notification (2026361503393549753) --> - <skip /> + <string name="accessibility_manage_notification" msgid="2026361503393549753">"അറിയിപ്പുകൾ മാനേജ് ചെയ്യുക"</string> <string name="unlock_label" msgid="8779712358041029439">"അൺലോക്കുചെയ്യുക"</string> <string name="phone_label" msgid="2320074140205331708">"ഫോൺ തുറക്കുക"</string> <string name="voice_assist_label" msgid="3956854378310019854">"വോയ്സ് അസിസ്റ്റ് തുറക്കുക"</string> @@ -175,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -185,8 +184,7 @@ <string name="accessibility_cell_data" msgid="5326139158682385073">"മൊബൈൽ ഡാറ്റ"</string> <string name="accessibility_cell_data_on" msgid="5927098403452994422">"മൊബൈൽ ഡാറ്റ ഓണാണ്"</string> <string name="cell_data_off_content_description" msgid="4356113230238585072">"മൊബൈൽ ഡാറ്റ ഓഫാണ്"</string> - <!-- no translation found for not_default_data_content_description (9194667237765917844) --> - <skip /> + <string name="not_default_data_content_description" msgid="9194667237765917844">"ഡാറ്റ ഉപയോഗിക്കുന്നതിന് സജ്ജീകരിച്ചിട്ടില്ല"</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> @@ -228,12 +226,9 @@ <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ഫ്ലൈറ്റ് മോഡ് ഓണാക്കി."</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"പൂർണ്ണ നിശബ്ദത"</string> <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"അലാറങ്ങൾ മാത്രം"</string> - <!-- no translation found for accessibility_quick_settings_dnd (5555155552520665891) --> - <skip /> - <!-- no translation found for accessibility_quick_settings_dnd_changed_off (2757071272328547807) --> - <skip /> - <!-- no translation found for accessibility_quick_settings_dnd_changed_on (6808220653747701059) --> - <skip /> + <string name="accessibility_quick_settings_dnd" msgid="5555155552520665891">"ശല്യപ്പെടുത്തരുത്."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="2757071272328547807">"ശല്യപ്പെടുത്തരുത് എന്നത് ഓഫാക്കി."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="6808220653747701059">"ശല്യപ്പെടുത്തരുത് എന്നത് ഓണാക്കി."</string> <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ബ്ലൂടൂത്ത് ഓഫാണ്."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ബ്ലൂടൂത്ത് ഓണാണ്."</string> @@ -284,8 +279,7 @@ <item quantity="other">ഉള്ളിൽ <xliff:g id="NUMBER_1">%s</xliff:g> അറിയിപ്പുകൾ കൂടിയുണ്ട്.</item> <item quantity="one">ഉള്ളിൽ <xliff:g id="NUMBER_0">%s</xliff:g> അറിയിപ്പ് കൂടിയുണ്ട്.</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"അറിയിപ്പ് ക്രമീകരണങ്ങൾ"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ക്രമീകരണം"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"സ്ക്രീൻ സ്വയമേവ തിരിയും."</string> @@ -298,8 +292,7 @@ <string name="start_dreams" msgid="5640361424498338327">"സ്ക്രീൻ സേവർ"</string> <string name="ethernet_label" msgid="7967563676324087464">"ഇതർനെറ്റ്"</string> <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"കൂടുതൽ ഓപ്ഷനുകൾക്കായി ഐക്കണുകൾ സ്പർശിച്ച് പിടിക്കുക"</string> - <!-- no translation found for quick_settings_dnd_label (7112342227663678739) --> - <skip /> + <string name="quick_settings_dnd_label" msgid="7112342227663678739">"ശല്യപ്പെടുത്തരുത്"</string> <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"മുൻഗണന മാത്രം"</string> <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"അലാറങ്ങൾ മാത്രം"</string> <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"പൂർണ്ണ നിശബ്ദത"</string> @@ -450,10 +443,8 @@ <string name="battery_saver_notification_title" msgid="8614079794522291840">"ബാറ്ററി ലാഭിക്കൽ ഓണാണ്"</string> <string name="battery_saver_notification_text" msgid="820318788126672692">"പ്രവർത്തനവും പശ്ചാത്തല ഡാറ്റയും കുറയ്ക്കുന്നു"</string> <string name="battery_saver_notification_action_text" msgid="132118784269455533">"ബാറ്ററി ലാഭിക്കൽ ഓഫാക്കുക"</string> - <!-- no translation found for media_projection_dialog_text (5751657130671431216) --> - <skip /> - <!-- no translation found for media_projection_dialog_title (8124184308671641248) --> - <skip /> + <string name="media_projection_dialog_text" msgid="5751657130671431216">"റിക്കോർഡ് ചെയ്യുമ്പോഴോ കാസ്റ്റ് ചെയ്യുമ്പോഴോ, നിങ്ങൾ പ്ലേ ചെയ്യുന്ന ഓഡിയോയും പാസ്വേഡുകളും, പേയ്മെന്റ് വിവരം, ഫോട്ടോകൾ, സന്ദേശങ്ങളും <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-ന് ക്യാപ്ചർ ചെയ്യാനാവും."</string> + <string name="media_projection_dialog_title" msgid="8124184308671641248">"കാസ്റ്റ് /റിക്കോർഡ് ചെയ്യുമ്പോൾ സൂക്ഷ്മമായി കൈകാര്യം ചെയ്യേണ്ട വിവരം വെളിപ്പെടുത്തുന്നു"</string> <string name="media_projection_remember_text" msgid="3103510882172746752">"വീണ്ടും കാണിക്കരുത്"</string> <string name="clear_all_notifications_text" msgid="814192889771462828">"എല്ലാം മായ്ക്കുക"</string> <string name="manage_notifications_text" msgid="2386728145475108753">"മാനേജ് ചെയ്യുക"</string> @@ -528,10 +519,8 @@ <string name="accessibility_volume_settings" msgid="4915364006817819212">"ശബ്ദ ക്രമീകരണം"</string> <string name="accessibility_volume_expand" msgid="5946812790999244205">"വികസിപ്പിക്കുക"</string> <string name="accessibility_volume_collapse" msgid="3609549593031810875">"ചുരുക്കുക"</string> - <!-- no translation found for volume_odi_captions_tip (1193653197906918269) --> - <skip /> - <!-- no translation found for accessibility_volume_close_odi_captions_tip (1163987066404128967) --> - <skip /> + <string name="volume_odi_captions_tip" msgid="1193653197906918269">"മീഡിയയ്ക്ക് സ്വയമേവ ക്യാപ്ഷൻ"</string> + <string name="accessibility_volume_close_odi_captions_tip" msgid="1163987066404128967">"അടിക്കുറിപ്പുകൾക്കുള്ള നുറുങ്ങ്"</string> <string name="accessibility_output_chooser" msgid="8185317493017988680">"ഔട്ട്പുട്ട് ഉപകരണം മാറുക"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"സ്ക്രീൻ പിൻ ചെയ്തു"</string> <string name="screen_pinning_description" msgid="8909878447196419623">"നിങ്ങൾ അൺപിൻ ചെയ്യുന്നതുവരെ ഇത് കാണുന്ന വിധത്തിൽ നിലനിർത്തും. അൺപിൻ ചെയ്യാൻ \'തിരികെ\', \'ചുരുക്കവിവരണം\' എന്നിവ സ്പർശിച്ച് പിടിക്കുക."</string> @@ -632,32 +621,24 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"ഈ അറിയിപ്പുകൾ നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകും"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"സാധാരണയായി നിങ്ങൾ ഈ അറിയിപ്പുകൾ നിരാകരിക്കുന്നു. \nഅവ തുടർന്നും കാണിക്കണോ?"</string> <string name="inline_done_button" msgid="492513001558716452">"പൂർത്തിയായി"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"ബാധകമാക്കുക"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"ഈ അറിയിപ്പുകൾ തുടർന്നും കാണിക്കണോ?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"അറിയിപ്പുകൾ നിർത്തുക"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"നിശബ്ദമായി ഡെലിവർ ചെയ്യുക"</string> <string name="inline_block_button" msgid="8735843688021655065">"ബ്ലോക്ക് ചെയ്യുക"</string> <string name="inline_keep_button" msgid="6665940297019018232">"തുടർന്നും കാണിക്കുക"</string> <string name="inline_minimize_button" msgid="966233327974702195">"ചെറുതാക്കുക"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"നിശബ്ദമായ"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"നിശബ്ദമായ നിലയിൽ തുടരുക"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"തടസ്സപ്പെടുത്തുന്ന"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"മുന്നറിയിപ്പ് നൽകുന്നത് തുടരുക"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"അറിയിപ്പുകൾ ഓഫാക്കുക"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ഈ ആപ്പിൽ നിന്നുള്ള അറിയിപ്പുകൾ തുടർന്നും കാണിക്കണോ?"</string> - <!-- no translation found for hint_text_block (3554459167504485284) --> - <skip /> - <!-- no translation found for hint_text_silent (859468056340177016) --> - <skip /> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_block" msgid="3554459167504485284">"ബ്ലോക്ക് ചെയ്ത അറിയിപ്പുകൾ എവിടെയും ദൃശ്യമാവുകയോ ശബ്ദം പ്ലേ ചെയ്യുകയോ ഇല്ല. ക്രമീകരണത്തിൽ നിങ്ങൾക്ക് അറിയിപ്പുകൾ അൺബ്ലോക്ക് ചെയ്യാനാവും."</string> + <string name="hint_text_silent" msgid="859468056340177016">"നിശബ്ദ അറിയിപ്പുകൾ ഷെയ്ഡിൽ ദൃശ്യമാകും, പക്ഷെ ലോക്ക് സ്ക്രീനിൽ ദൃശ്യമാവുകയോ ബാനർ അവതരിപ്പിക്കുകയോ ഒരു ശബ്ദം പ്ലേ ചെയ്യുകയോ ഇല്ല."</string> + <string name="hint_text_alert" msgid="2721169810318722524">"ഈ അറിയിപ്പുകൾ ഒരു ശബ്ദമുണ്ടാക്കുകയും അറിയിപ്പ് ഡ്രോയർ, സ്റ്റാറ്റസ് ബാർ, ലോക്ക് സ്ക്രീൻ എന്നിവയിൽ കാണിക്കുകയും ചെയ്യും"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ഈ അറിയിപ്പുകൾ ഓഫാക്കാനാവില്ല"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"അറിയിപ്പുകളുടെ ഈ ഗ്രൂപ്പ് ഇവിടെ കോണ്ഫിഗര് ചെയ്യാൻ കഴിയില്ല"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> വഴി"</string> <string name="appops_camera" msgid="8100147441602585776">"ഈ ആപ്പ് ക്യാമറ ഉപയോഗിക്കുന്നുണ്ട്."</string> <string name="appops_microphone" msgid="741508267659494555">"ഈ ആപ്പ് മൈക്രോഫോൺ ഉപയോഗിക്കുന്നു."</string> @@ -736,11 +717,9 @@ <string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string> <string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"കലണ്ടർ"</string> <string name="tuner_full_zen_title" msgid="4540823317772234308">"വോളിയം നിയന്ത്രണങ്ങളോടൊപ്പം കാണിക്കുക"</string> - <!-- no translation found for volume_and_do_not_disturb (1750270820297253561) --> - <skip /> + <string name="volume_and_do_not_disturb" msgid="1750270820297253561">"ശല്യപ്പെടുത്തരുത്"</string> <string name="volume_dnd_silent" msgid="4363882330723050727">"വോളിയം ബട്ടൺ കുറുക്കുവഴി"</string> - <!-- no translation found for volume_up_silent (7545869833038212815) --> - <skip /> + <string name="volume_up_silent" msgid="7545869833038212815">"ശബ്ദം കൂടുമ്പോൾ \'ശല്യപ്പെടുത്തരുതിൽ\' നിന്ന് പുറത്ത് കടക്കൂ"</string> <string name="battery" msgid="7498329822413202973">"ബാറ്ററി"</string> <string name="clock" msgid="7416090374234785905">"ക്ലോക്ക്"</string> <string name="headset" msgid="4534219457597457353">"ഹെഡ്സെറ്റ്"</string> @@ -881,8 +860,7 @@ <string name="go_to_web" msgid="2650669128861626071">"ബ്രൗസറിലേക്ക് പോവുക"</string> <string name="mobile_data" msgid="7094582042819250762">"മൊബൈൽ ഡാറ്റ"</string> <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%1$s</xliff:g> — <xliff:g id="ID_2">%2$s</xliff:g>"</string> - <!-- no translation found for mobile_carrier_text_format (3241721038678469804) --> - <skip /> + <string name="mobile_carrier_text_format" msgid="3241721038678469804">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g>, <xliff:g id="MOBILE_DATA_TYPE">%2$s</xliff:g>"</string> <string name="wifi_is_off" msgid="1838559392210456893">"വൈഫൈ ഓഫാണ്"</string> <string name="bt_is_off" msgid="2640685272289706392">"Bluetooth ഓഫാണ്"</string> <string name="dnd_is_off" msgid="6167780215212497572">"\'ശല്യപ്പെടുത്തരുത്\' ഓഫാണ്"</string> @@ -922,30 +900,18 @@ <string name="sensor_privacy_mode" msgid="8982771253020769598">"സെൻസറുകൾ ഓഫാണ്"</string> <string name="device_services" msgid="1191212554435440592">"ഉപകരണ സേവനങ്ങള്"</string> <string name="music_controls_no_title" msgid="5236895307087002011">"പേരില്ല"</string> - <!-- no translation found for restart_button_description (2035077840254950187) --> - <skip /> + <string name="restart_button_description" msgid="2035077840254950187">"ഈ ആപ്പ് റീസ്റ്റാർട്ട് ചെയ്യാനും പൂർണ്ണ സ്ക്രീനാവാനും ടാപ്പ് ചെയ്യുക."</string> <string name="bubbles_deep_link_button_description" msgid="8895837143057564517">"<xliff:g id="APP_NAME">%1$s</xliff:g> തുറക്കുക"</string> - <!-- no translation found for bubbles_settings_button_description (2970630476657287189) --> - <skip /> - <!-- no translation found for bubbles_prompt (8807968030159469710) --> - <skip /> - <!-- no translation found for no_bubbles (337101288173078247) --> - <skip /> + <string name="bubbles_settings_button_description" msgid="2970630476657287189">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനുള്ള ബബിളുകളുടെ ക്രമീകരണം"</string> + <string name="bubbles_prompt" msgid="8807968030159469710">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ൽ നിന്നും ബബിളുകളെ അനുവദിക്കണോ?"</string> + <string name="no_bubbles" msgid="337101288173078247">"നിരസിക്കുക"</string> <string name="yes_bubbles" msgid="668809525728633841">"അനുവദിക്കുക"</string> - <!-- no translation found for ask_me_later_bubbles (2147688438402939029) --> - <skip /> - <!-- no translation found for bubble_content_description_single (1184462974339387516) --> - <skip /> - <!-- no translation found for bubble_content_description_stack (8666349184095622232) --> - <skip /> - <!-- no translation found for bubble_accessibility_action_move (1794879742234803840) --> - <skip /> - <!-- no translation found for bubble_accessibility_action_move_top_left (104736832249802724) --> - <skip /> - <!-- no translation found for bubble_accessibility_action_move_top_right (1671844272347036806) --> - <skip /> - <!-- no translation found for bubble_accessibility_action_move_bottom_left (206369104473183217) --> - <skip /> - <!-- no translation found for bubble_accessibility_action_move_bottom_right (8705660152384312329) --> - <skip /> + <string name="ask_me_later_bubbles" msgid="2147688438402939029">"എന്നോട് പിന്നീട് ചോദിക്കുക"</string> + <string name="bubble_content_description_single" msgid="1184462974339387516">"<xliff:g id="APP_NAME">%2$s</xliff:g>-ൽ നിന്നുള്ള <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_content_description_stack" msgid="8666349184095622232">"<xliff:g id="APP_NAME">%2$s</xliff:g> എന്നതിൽ നിന്നുള്ള <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>, <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> കൂടുതലും"</string> + <string name="bubble_accessibility_action_move" msgid="1794879742234803840">"നീക്കുക"</string> + <string name="bubble_accessibility_action_move_top_left" msgid="104736832249802724">"മുകളിൽ ഇടതുഭാഗത്തേക്ക് നീക്കുക"</string> + <string name="bubble_accessibility_action_move_top_right" msgid="1671844272347036806">"മുകളിൽ വലതുഭാഗത്തേക്ക് നീക്കുക"</string> + <string name="bubble_accessibility_action_move_bottom_left" msgid="206369104473183217">"ചുവടെ ഇടതുഭാഗത്തേക്ക് നീക്കുക"</string> + <string name="bubble_accessibility_action_move_bottom_right" msgid="8705660152384312329">"ചുവടെ വലതുഭാഗത്തേക്ക് നീക്കുക"</string> </resources> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index dcb5c2da29c7..e414ea9e3141 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index e84e03ad4dc4..a913a0095b92 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -172,6 +172,8 @@ <string name="data_connection_4g_plus" msgid="1148687201877800700">"४G+"</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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"१X"</string> @@ -277,8 +279,7 @@ <item quantity="one">आत आणखी <xliff:g id="NUMBER_1">%s</xliff:g> सूचना.</item> <item quantity="other">आत आणखी <xliff:g id="NUMBER_1">%s</xliff:g> सूचना.</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"सूचना सेटिंग्ज"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> सेटिंग्ज"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"स्क्रीन स्वयंचलितपणे फिरेल."</string> @@ -620,30 +621,24 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"या सूचना तुम्हाला इशारा देतील"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"तुम्ही या सूचना सामान्यतः डिसमिस करता. \nते दाखवत राहायचे?"</string> <string name="inline_done_button" msgid="492513001558716452">"पूर्ण झाले"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"लागू करा"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"या सूचना दाखवणे सुरू ठेवायचे?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"सूचना थांबवा"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"शांतपणे पाठवा"</string> <string name="inline_block_button" msgid="8735843688021655065">"ब्लॉक करा"</string> <string name="inline_keep_button" msgid="6665940297019018232">"दाखवणे सुरू ठेवा"</string> <string name="inline_minimize_button" msgid="966233327974702195">"लहान करा"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"नाजूक"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"सायलंट रहा"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"व्यत्यय आणणारे"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"सूचना देत रहा"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"सूचना बंद करा"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"या अॅपकडील सूचना दाखवणे सुरू ठेवायचे?"</string> <string name="hint_text_block" msgid="3554459167504485284">"ब्लॉक केलेल्या सूचना कुठेही दिसत नाहीत किंवा आवाज प्ले करत नाहीत. तुम्ही सेटिंग्जमध्ये सूचना अनब्लॉक करू शकता."</string> <string name="hint_text_silent" msgid="859468056340177016">"सायलंट सूचना रंगछटेमध्ये दिसतात, परंतु लॉक स्क्रीनवर दिसत नाहीत, बॅनर दाखवत नाहीत किंवा आवाज प्ले करत नाहीत."</string> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_alert" msgid="2721169810318722524">"या सूचना आवाज करतील आणि सूचना ड्राॅवर, स्टेटस बार आणि लॉक स्क्रीनवर दाखवल्या जातील"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"या सूचना बंद करता येत नाहीत"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"या सूचनांचा संच येथे कॉन्फिगर केला जाऊ शकत नाही"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> मार्गे"</string> <string name="appops_camera" msgid="8100147441602585776">"हे अॅप कॅमेरा वापरत आहे."</string> <string name="appops_microphone" msgid="741508267659494555">"हे अॅप मायक्रोफोन वापरत आहे."</string> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index dc3d8327c1a4..76472b6a9094 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 40b21cc3c7c9..ac9b53195021 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 75a5730cd430..c35c3ece5de9 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index ebe76ec08fe6..98e1a96f38de 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -277,8 +279,7 @@ <item quantity="other">भित्र थप <xliff:g id="NUMBER_1">%s</xliff:g> सूचनाहरू छन्।</item> <item quantity="one">भित्र थप <xliff:g id="NUMBER_0">%s</xliff:g> सूचना छ।</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"अधिसूचना सेटिङहरू"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> सेटिङहरू"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"स्क्रिन स्वतः घुम्ने छ।"</string> @@ -620,30 +621,24 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"यी सूचनाहरूले तपाईंलाई सतर्क गरिने छ"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"तपाईं सामान्यतया यी सूचनाहरूलाई खारेज गर्ने गर्नुहुन्छ। \nतिनलाई देखाइरहने हो?"</string> <string name="inline_done_button" msgid="492513001558716452">"सम्पन्न भयो"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"लागू गर्नुहोस्"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"यी सूचनाहरू देखाउने क्रम जारी राख्ने हो?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"सूचनाहरू देखाउन छाड्नुहोस्"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"मौन रूपमा डेलिभर गर्नुहोस्"</string> <string name="inline_block_button" msgid="8735843688021655065">"रोक लगाउनुहोस्"</string> <string name="inline_keep_button" msgid="6665940297019018232">"देखाउने क्रम जारी राख्नुहोस्"</string> <string name="inline_minimize_button" msgid="966233327974702195">"सानो बनाउनुहोस्"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"हलुका"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"मौन रहनुहोस्"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"बाधा पुर्याइरहने"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"सर्तक गराइरहनुहोस्"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"सूचनाहरू निष्क्रिय पार्नुहोस्"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"यो अनुप्रयोगका सूचनाहरू देखाउने क्रम जारी राख्ने हो?"</string> <string name="hint_text_block" msgid="3554459167504485284">"रोक लगाइएका सूचनाहरू कतै पनि देखिँदैनन् वा कुनै आवाज गर्दैनन्। तपाईं सेटिङहरूमा सूचनाहरूमाथिको रोक हटाउन सक्नुहुन्छ।"</string> <string name="hint_text_silent" msgid="859468056340177016">"मौन सूचनाहरू ओझेलमा देखिन्छन् तर स्क्रिन लक हुँदा देखिँदैनन्, ब्यानर देखाउँदैनन् अनि कुनै आवाज पनि दिँदैनन्।"</string> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_alert" msgid="2721169810318722524">"यी सूचनाहरू आउँदा ध्वनि बज्ने छ र तिनीहरू सूचनाको ड्रअर, स्थिति पट्टी र लक स्क्रिनमा देखिने छन्"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"यी सूचनाहरूलाई निष्क्रिय पार्न सकिँदैन"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"यहाँबाट सूचनाहरूको यो समूह कन्फिगर गर्न सकिँदैन"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> मार्फत"</string> <string name="appops_camera" msgid="8100147441602585776">"यो अनुप्रयोगले क्यामेराको प्रयोग गर्दै छ।"</string> <string name="appops_microphone" msgid="741508267659494555">"यो अनुप्रयोगले माइक्रोफोनको प्रयोग गर्दै छ।"</string> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index bad9821835ea..d963138ae3a6 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Actief"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meldingen"</string> <string name="battery_low_title" msgid="9187898087363540349">"Batterij is bijna leeg"</string> - <string name="battery_low_percent_format" msgid="2900940511201380775">"<xliff:g id="PERCENTAGE">%s</xliff:g> resterend"</string> - <string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> resterend, nog ongeveer <xliff:g id="TIME">%2$s</xliff:g> over op basis van je gebruik"</string> - <string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> resterend, nog ongeveer <xliff:g id="TIME">%2$s</xliff:g> over"</string> - <string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> resterend. Batterijbesparing is ingeschakeld."</string> + <string name="battery_low_percent_format" msgid="2900940511201380775">"Nog <xliff:g id="PERCENTAGE">%s</xliff:g>"</string> + <string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Nog <xliff:g id="PERCENTAGE">%1$s</xliff:g>, dat is ongeveer <xliff:g id="TIME">%2$s</xliff:g> op basis van je gebruik"</string> + <string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Nog <xliff:g id="PERCENTAGE">%1$s</xliff:g>, dat is ongeveer <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Nog <xliff:g id="PERCENTAGE">%s</xliff:g>. Batterijbesparing is ingeschakeld."</string> <string name="invalid_charger" msgid="2741987096648693172">"Kan niet opladen via USB. Gebruik de oplader die bij je apparaat is geleverd."</string> <string name="invalid_charger_title" msgid="2836102177577255404">"Kan niet opladen via USB"</string> <string name="invalid_charger_text" msgid="6480624964117840005">"Gebruik de oplader die bij je apparaat is geleverd"</string> @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -795,7 +796,7 @@ <string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g>-melding: <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="dock_forced_resizable" msgid="5914261505436217520">"App werkt mogelijk niet met gesplitst scherm."</string> <string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"App biedt geen ondersteuning voor gesplitst scherm."</string> - <string name="forced_resizable_secondary_display" msgid="4230857851756391925">"App werkt mogelijk niet op een secundair display."</string> + <string name="forced_resizable_secondary_display" msgid="4230857851756391925">"App werkt mogelijk niet op een secundair scherm."</string> <string name="activity_launch_on_secondary_display_failed_text" msgid="7793821742158306742">"App kan niet op secundaire displays worden gestart."</string> <string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Instellingen openen."</string> <string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Snelle instellingen openen."</string> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 4c68841cd27d..65ac6c04d0dc 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index d8d5429d3ef6..6a5c11d210df 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -225,7 +227,7 @@ <string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"ਸੰਪੂਰਨ ਖਾਮੋਸ਼ੀ"</string> <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"ਸਿਰਫ਼ ਅਲਾਰਮ"</string> <string name="accessibility_quick_settings_dnd" msgid="5555155552520665891">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ।"</string> - <string name="accessibility_quick_settings_dnd_changed_off" msgid="2757071272328547807">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਨੂੰ ਬੰਦ ਕਰੋ।"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="2757071272328547807">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਨੂੰ ਬੰਦ ਕੀਤਾ ਗਿਆ।"</string> <string name="accessibility_quick_settings_dnd_changed_on" msgid="6808220653747701059">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਗਿਆ।"</string> <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"ਬਲੂਟੁੱਥ।"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth ਬੰਦ।"</string> @@ -277,8 +279,7 @@ <item quantity="one">ਅੰਦਰ <xliff:g id="NUMBER_1">%s</xliff:g> ਹੋਰ ਸੂਚਨਾਵਾਂ।</item> <item quantity="other">ਅੰਦਰ <xliff:g id="NUMBER_1">%s</xliff:g> ਹੋਰ ਸੂਚਨਾਵਾਂ।</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"ਸੂਚਨਾ ਸੈਟਿੰਗਾਂ"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ਸੈਟਿੰਗਾਂ"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"ਸਕ੍ਰੀਨ ਆਟੋਮੈਟਿਕਲੀ ਰੋਟੇਟ ਕਰੇਗੀ।"</string> @@ -620,30 +621,24 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"ਇਹ ਸੂਚਨਾਵਾਂ ਤੁਹਾਨੂੰ ਸੁਚੇਤ ਕਰਨਗੀਆਂ"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"ਤੁਸੀਂ ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਆਮ ਤੌਰ \'ਤੇ ਖਾਰਜ ਕਰਦੇ ਹੋ। \nਕੀ ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string> <string name="inline_done_button" msgid="492513001558716452">"ਹੋ ਗਿਆ"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"ਲਾਗੂ ਕਰੋ"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"ਕੀ ਇਨ੍ਹਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰੋ"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"ਚੁੱਪ-ਚਪੀਤੇ ਡਿਲੀਵਰ ਕਰੋ"</string> <string name="inline_block_button" msgid="8735843688021655065">"ਬਲਾਕ ਕਰੋ"</string> <string name="inline_keep_button" msgid="6665940297019018232">"ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖੋ"</string> <string name="inline_minimize_button" msgid="966233327974702195">"ਛੋਟਾ ਕਰੋ"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"ਅਰਾਮਦੇਹ"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"ਚੁੱਪ ਰਹੋ"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"ਰੁਕਾਵਟੀ"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"ਸੁਚੇਤ ਰਖੋ"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰੋ"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ਕੀ ਇਸ ਐਪ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string> <string name="hint_text_block" msgid="3554459167504485284">"ਬਲਾਕ ਕੀਤੀਆਂ ਸੂਚਨਾਵਾਂ ਕਿਤੇ ਵੀ ਨਹੀਂ ਦਿਸਦੀਆਂ ਜਾਂ ਕੋਈ ਧੁਨੀ ਨਹੀਂ ਵਜਾਉਂਦੀਆਂ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਸੂਚਨਾਵਾਂ ਨੂੰ ਅਣਬਲਾਕ ਕਰ ਸਕਦੇ ਹੋ।"</string> - <string name="hint_text_silent" msgid="859468056340177016">"ਚੁੱਪ ਸੂਚਨਾਵਾਂ ਭਾਹ ਵਿੱਚ ਦਿਸਦੀਆਂ ਹਨ ਪਰ ਲਾਕ ਸਕ੍ਰੀਨ \'ਤੇ, ਬੈਨਰ ਦੇ ਰੂਪ ਵਿੱਚ ਨਹੀਂ ਦਿਸਦੀਆਂ ਹਨ ਅਤੇ ਇੱਕ ਧੁਨੀ ਵਜਾਉਂਦੀਆਂ ਹਨ।"</string> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_silent" msgid="859468056340177016">"ਚੁੱਪ ਸੂਚਨਾਵਾਂ ਭਾਹ ਵਿੱਚ ਦਿਸਦੀਆਂ ਹਨ ਪਰ ਲਾਕ ਸਕ੍ਰੀਨ \'ਤੇ, ਬੈਨਰ ਦੇ ਰੂਪ ਵਿੱਚ ਨਹੀਂ ਦਿਸਦੀਆਂ ਹਨ, ਜਾਂ ਕੋਈ ਧੁਨੀ ਵਜਾਉਂਦੀਆਂ ਹਨ।"</string> + <string name="hint_text_alert" msgid="2721169810318722524">"ਇਹ ਸੂਚਨਾਵਾਂ ਅਵਾਜ਼ ਕਰਨਗੀਆਂ ਅਤੇ ਸੂਚਨਾ ਦਰਾਜ਼, ਸਥਿਤੀ ਪੱਟੀ ਅਤੇ ਲਾਕ ਸਕ੍ਰੀਨ ਵਿੱਚ ਦਿਸਣਗੀਆਂ"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ਇਨ੍ਹਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬੰਦ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"ਇਹ ਸੂਚਨਾਵਾਂ ਦਾ ਗਰੁੱਪ ਇੱਥੇ ਸੰਰੂਪਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਰਾਹੀਂ"</string> <string name="appops_camera" msgid="8100147441602585776">"ਇਹ ਐਪ ਕੈਮਰੇ ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ।"</string> <string name="appops_microphone" msgid="741508267659494555">"ਇਹ ਐਪ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ।"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index af4acd368877..c42faae9182f 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -172,6 +172,9 @@ <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> + <!-- String.format failed for translation --> + <!-- no translation found for data_connection_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -678,7 +681,7 @@ <item quantity="other">%d minuty</item> <item quantity="one">]%d minuta</item> </plurals> - <string name="battery_panel_title" msgid="7944156115535366613">"Wykorzystanie baterii"</string> + <string name="battery_panel_title" msgid="7944156115535366613">"Zużycie baterii"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Oszczędzanie baterii nie jest dostępne podczas ładowania"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Oszczędzanie baterii"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Zmniejsza wydajność i ogranicza dane w tle"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 8b7449fe6fc6..1d3cf8d1022a 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -34,7 +34,7 @@ <string name="invalid_charger_text" msgid="6480624964117840005">"Usar o carregador que acompanha o dispositivo"</string> <string name="battery_low_why" msgid="4553600287639198111">"Configurações"</string> <string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Ativar Economia de bateria?"</string> - <string name="battery_saver_confirmation_title_generic" msgid="2090922638411744540">"Sobre a \"Economia de bateria\""</string> + <string name="battery_saver_confirmation_title_generic" msgid="2090922638411744540">"Sobre a Economia de bateria"</string> <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Ativar"</string> <string name="battery_saver_start_action" msgid="8187820911065797519">"Ativar a Economia de bateria"</string> <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Configurações"</string> @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -880,11 +881,11 @@ <string name="slice_permission_checkbox" msgid="7986504458640562900">"Permitir que <xliff:g id="APP">%1$s</xliff:g> mostre partes de qualquer app"</string> <string name="slice_permission_allow" msgid="2340244901366722709">"Permitir"</string> <string name="slice_permission_deny" msgid="7683681514008048807">"Negar"</string> - <string name="auto_saver_title" msgid="1217959994732964228">"Toque para programar o recurso \"Economia de bateria\""</string> + <string name="auto_saver_title" msgid="1217959994732964228">"Toque para programar o recurso Economia de bateria"</string> <string name="auto_saver_text" msgid="6324376061044218113">"Ativar automaticamente quando a bateria estiver em <xliff:g id="PERCENTAGE">%d</xliff:g>%%"</string> <string name="no_auto_saver_action" msgid="8086002101711328500">"Não"</string> - <string name="auto_saver_enabled_title" msgid="6726474226058316862">"Programação do recurso \"Economia de bateria\" ativada"</string> - <string name="auto_saver_enabled_text" msgid="874711029884777579">"O recurso \"Economia de bateria\" será ativado automaticamente depois que a bateria ficar abaixo de <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> + <string name="auto_saver_enabled_title" msgid="6726474226058316862">"Programação do recurso Economia de bateria ativada"</string> + <string name="auto_saver_enabled_text" msgid="874711029884777579">"O recurso Economia de bateria será ativado automaticamente depois que a bateria ficar abaixo de <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Configurações"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Ok"</string> <string name="heap_dump_tile_name" msgid="9141031328971226374">"Despejar pilha SysUI"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 104eb4591199..e58de4f5548f 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 8b7449fe6fc6..1d3cf8d1022a 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -34,7 +34,7 @@ <string name="invalid_charger_text" msgid="6480624964117840005">"Usar o carregador que acompanha o dispositivo"</string> <string name="battery_low_why" msgid="4553600287639198111">"Configurações"</string> <string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Ativar Economia de bateria?"</string> - <string name="battery_saver_confirmation_title_generic" msgid="2090922638411744540">"Sobre a \"Economia de bateria\""</string> + <string name="battery_saver_confirmation_title_generic" msgid="2090922638411744540">"Sobre a Economia de bateria"</string> <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Ativar"</string> <string name="battery_saver_start_action" msgid="8187820911065797519">"Ativar a Economia de bateria"</string> <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Configurações"</string> @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -880,11 +881,11 @@ <string name="slice_permission_checkbox" msgid="7986504458640562900">"Permitir que <xliff:g id="APP">%1$s</xliff:g> mostre partes de qualquer app"</string> <string name="slice_permission_allow" msgid="2340244901366722709">"Permitir"</string> <string name="slice_permission_deny" msgid="7683681514008048807">"Negar"</string> - <string name="auto_saver_title" msgid="1217959994732964228">"Toque para programar o recurso \"Economia de bateria\""</string> + <string name="auto_saver_title" msgid="1217959994732964228">"Toque para programar o recurso Economia de bateria"</string> <string name="auto_saver_text" msgid="6324376061044218113">"Ativar automaticamente quando a bateria estiver em <xliff:g id="PERCENTAGE">%d</xliff:g>%%"</string> <string name="no_auto_saver_action" msgid="8086002101711328500">"Não"</string> - <string name="auto_saver_enabled_title" msgid="6726474226058316862">"Programação do recurso \"Economia de bateria\" ativada"</string> - <string name="auto_saver_enabled_text" msgid="874711029884777579">"O recurso \"Economia de bateria\" será ativado automaticamente depois que a bateria ficar abaixo de <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> + <string name="auto_saver_enabled_title" msgid="6726474226058316862">"Programação do recurso Economia de bateria ativada"</string> + <string name="auto_saver_enabled_text" msgid="874711029884777579">"O recurso Economia de bateria será ativado automaticamente depois que a bateria ficar abaixo de <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Configurações"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Ok"</string> <string name="heap_dump_tile_name" msgid="9141031328971226374">"Despejar pilha SysUI"</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index ee3092688d64..2837aa78ae49 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 7ee314d2f321..1236224f9c9b 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index a75f3d2594d1..bba9e797b9ae 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 535a8685a07f..f38889ba16b3 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -678,7 +680,7 @@ <item quantity="other">%d minút</item> <item quantity="one">%d minúta</item> </plurals> - <string name="battery_panel_title" msgid="7944156115535366613">"Využitie batérie"</string> + <string name="battery_panel_title" msgid="7944156115535366613">"Spotreba batérie"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Počas nabíjania nie je Šetrič batérie k dispozícii"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Šetrič batérie"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Obmedzí výkonnosť a údaje na pozadí"</string> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 11b262a7f692..f8c3c9918d69 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -714,7 +715,7 @@ <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Nazaj"</string> <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"Obvestila"</string> <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"Bližnjične tipke"</string> - <string name="keyboard_shortcut_group_system_switch_input" msgid="8413348767825486492">"Preklop razporeda tipkovnice"</string> + <string name="keyboard_shortcut_group_system_switch_input" msgid="8413348767825486492">"Preklop postavitve tipkovnice"</string> <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"Aplikacije"</string> <string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"Pomoč"</string> <string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"Brskalnik"</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 5b728a6bbb37..6cc23e2438c1 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -497,12 +499,12 @@ <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string> <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Hap kredencialet e besuara"</string> <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administratori yt ka aktivizuar regjistrimin e rrjetit, i cili monitoron trafikun në pajisjen tënde.\n\nPër më shumë informacione, kontakto me administratorin."</string> - <string name="monitoring_description_vpn" msgid="4445150119515393526">"I dhe leje një aplikacioni që të konfigurojë një lidhje VPN.\n\nKy aplikacion mund të monitorojë pajisjen tënde dhe aktivitetin e rrjetit, përfshirë mailet, aplikacionet dhe sajtet e uebit."</string> + <string name="monitoring_description_vpn" msgid="4445150119515393526">"I dhe leje një aplikacioni që të konfigurojë një lidhje VPN.\n\nKy aplikacion mund të monitorojë pajisjen tënde dhe aktivitetin e rrjetit, përfshirë email-et, aplikacionet dhe sajtet e uebit."</string> <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori yt mund të monitorojë aktivitetin tënd të rrjetit, duke përfshirë email-et, aplikacionet dhe sajtet e uebit.\n\nPër më shumë informacion, kontakto me administratorin tënd.\n\nJe i lidhur edhe me një VPN, që mund të monitorojë aktivitetin tënd të rrjetit."</string> <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string> <string name="monitoring_description_app" msgid="1828472472674709532">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g> i cili mund të monitorojë aktivitetin tënd në rrjet, duke përfshirë mail-et, aplikacionet dhe sajtet e uebit."</string> - <string name="monitoring_description_app_personal" msgid="484599052118316268">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit."</string> - <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit."</string> + <string name="monitoring_description_app_personal" msgid="484599052118316268">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet, përfshirë email-et, aplikacionet dhe sajtet e uebit."</string> + <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet, përfshirë email-et, aplikacionet dhe sajtet e uebit."</string> <string name="monitoring_description_app_work" msgid="4612997849787922906">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profili është i lidhur me <xliff:g id="APPLICATION">%2$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd të punës në rrjet, duke përfshirë mail-et, aplikacionet dhe sajtet e uebit.\n\nPër më shumë informacione, kontakto me administratorin."</string> <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profili është i lidhur me <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd të punës në rrjet, duke përfshirë mail-et, aplikacionet dhe sajtet e uebit.\n\nJe lidhur gjithashtu edhe me <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet."</string> <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"Shkyçur për <xliff:g id="USER_NAME">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index c3e1c941067b..8b1a6959329b 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -376,7 +377,7 @@ <string name="recents_quick_scrub_onboarding" msgid="2778062804333285789">"Превуците удесно да бисте брзо променили апликације"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Укључи/искључи преглед"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Напуњена је"</string> - <string name="expanded_header_battery_charging" msgid="205623198487189724">"Пуњење"</string> + <string name="expanded_header_battery_charging" msgid="205623198487189724">"Пуни се"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> до краја пуњења"</string> <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"Не пуни се"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Мрежа се можда\nнадгледа"</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 380acc830c27..b335402ed6c2 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index f359ac0388b7..494dfc92dd7e 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-sw372dp/dimens.xml b/packages/SystemUI/res/values-sw372dp/dimens.xml index 717f18f13632..e64662ec7bea 100644 --- a/packages/SystemUI/res/values-sw372dp/dimens.xml +++ b/packages/SystemUI/res/values-sw372dp/dimens.xml @@ -17,6 +17,5 @@ --> <resources> <dimen name="nav_content_padding">8dp</dimen> - <dimen name="rounded_corner_content_padding">8dp</dimen> <dimen name="qs_header_tile_margin_horizontal">13dp</dimen> </resources> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index edfb20de3806..c9b9dcad34eb 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -176,6 +176,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -285,8 +287,7 @@ <item quantity="other">உள்ளே மேலும் <xliff:g id="NUMBER_1">%s</xliff:g> அறிவிப்புகள் உள்ளன.</item> <item quantity="one">உள்ளே மேலும் <xliff:g id="NUMBER_0">%s</xliff:g> அறிவிப்பு உள்ளது.</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"அறிவிப்பு அமைப்புகள்"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> அமைப்புகள்"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"திரை தானாகச் சுழலும்."</string> @@ -633,32 +634,26 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"இந்த அறிவிப்புகள் விழிப்பூட்டலாக அமையும்"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"வழக்கமாக, இந்த அறிவிப்புகளை நிராகரிக்கிறீர்கள். \nதொடர்ந்து இவற்றைக் காட்டலாமா?"</string> <string name="inline_done_button" msgid="492513001558716452">"முடிந்தது"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"பயன்படுத்து"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"இந்த அறிவிப்புகளைத் தொடர்ந்து காட்டவா?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"அறிவிப்புகளை நிறுத்து"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"ஒலியின்றி அறிவிப்புகளை வழங்கு"</string> <string name="inline_block_button" msgid="8735843688021655065">"தடு"</string> <string name="inline_keep_button" msgid="6665940297019018232">"அறிவிப்புகளைத் தொடர்ந்து காட்டு"</string> <string name="inline_minimize_button" msgid="966233327974702195">"சிறிதாக்கு"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"ஜென்டில்"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"அறிவிப்புகளை ஒலியின்றிக் காட்டு"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"இண்ட்டரப்டிவ்"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"தொடர்ந்து விழிப்பூட்டு"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"அறிவிப்புகளை முடக்கு"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"இந்தப் பயன்பாட்டின் அறிவிப்புகளைத் தொடர்ந்து காட்டவா?"</string> <!-- no translation found for hint_text_block (3554459167504485284) --> <skip /> <!-- no translation found for hint_text_silent (859468056340177016) --> <skip /> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_alert" msgid="2721169810318722524">"அறிவிப்பு டிராயரிலும், நிலைப் பட்டியிலும், பூட்டுத் திரையிலும் ஒலியுடன் அறிவிக்கப்படும்"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"இந்த அறிவிப்புகளை ஆஃப் செய்ய முடியாது"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"இந்த அறிவுப்புக் குழுக்களை இங்கே உள்ளமைக்க இயலாது"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> மூலமாக"</string> <string name="appops_camera" msgid="8100147441602585776">"இந்த ஆப்ஸானது கேமராவை உபயோகிக்கிறது."</string> <string name="appops_microphone" msgid="741508267659494555">"இந்த ஆப்ஸானது, மைக்ரோஃபோனை உபயோகிக்கிறது."</string> @@ -727,7 +722,7 @@ <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="8413348767825486492">"கீபோர்டு லே அவுட்டை மாற்று"</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-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index ab562042e7a3..d87f11b7f1c6 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -41,7 +41,7 @@ <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_mute_label" msgid="554682549917429396">"మ్యూట్"</string> - <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"స్వయంచాలకం"</string> + <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"ఆటోమేటిక్"</string> <string name="status_bar_settings_notifications" msgid="397146176280905137">"నోటిఫికేషన్లు"</string> <string name="bluetooth_tethered" msgid="7094101612161133267">"బ్లూటూత్ టీథర్ చేయబడింది"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ఇన్పుట్ పద్ధతులను సెటప్ చేయండి"</string> @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -225,7 +227,7 @@ <string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"మొత్తం నిశ్శబ్దం"</string> <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"అలారాలు మాత్రమే"</string> <string name="accessibility_quick_settings_dnd" msgid="5555155552520665891">"అంతరాయం కలిగించవద్దు."</string> - <string name="accessibility_quick_settings_dnd_changed_off" msgid="2757071272328547807">"అంతరాయం కలిగించవద్దు ఆఫ్ చేయబడింది."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="2757071272328547807">"\'అంతరాయం కలిగించవద్దు\' ఆఫ్ చేయబడింది."</string> <string name="accessibility_quick_settings_dnd_changed_on" msgid="6808220653747701059">"అంతరాయం కలిగించవద్దు ఆన్ చేయబడింది."</string> <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"బ్లూటూత్."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"బ్లూటూత్ ఆఫ్లో ఉంది."</string> @@ -277,8 +279,7 @@ <item quantity="other">లోపల మరో <xliff:g id="NUMBER_1">%s</xliff:g> నోటిఫికేషన్లు ఉన్నాయి.</item> <item quantity="one">లోపల మరో <xliff:g id="NUMBER_0">%s</xliff:g> నోటిఫికేషన్ ఉంది.</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"నోటిఫికేషన్ సెట్టింగ్లు"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> సెట్టింగ్లు"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"స్క్రీన్ స్వయంచాలకంగా తిప్పబడుతుంది."</string> @@ -337,7 +338,7 @@ <string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"పరికరాలు ఏవీ అందుబాటులో లేవు"</string> <string name="quick_settings_cast_no_wifi" msgid="2696477881905521882">"Wi‑Fi కనెక్ట్ కాలేదు"</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ప్రకాశం"</string> - <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"స్వయంచాలకం"</string> + <string name="quick_settings_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_more_settings" msgid="326112621462813682">"మరిన్ని సెట్టింగ్లు"</string> @@ -518,7 +519,7 @@ <string name="accessibility_volume_settings" msgid="4915364006817819212">"ధ్వని సెట్టింగ్లు"</string> <string name="accessibility_volume_expand" msgid="5946812790999244205">"విస్తరింపజేయండి"</string> <string name="accessibility_volume_collapse" msgid="3609549593031810875">"కుదించండి"</string> - <string name="volume_odi_captions_tip" msgid="1193653197906918269">"ఆటోమేటిక్ క్యాప్షన్ మీడియా"</string> + <string name="volume_odi_captions_tip" msgid="1193653197906918269">"మీడియాకు ఆటోమేటిక్ శీర్షికలు"</string> <string name="accessibility_volume_close_odi_captions_tip" msgid="1163987066404128967">"ఉపశీర్షికల చిట్కాను మూసివేయండి"</string> <string name="accessibility_output_chooser" msgid="8185317493017988680">"పరికరం అవుట్పుట్ని మార్చండి"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"స్క్రీన్ పిన్ చేయబడింది"</string> @@ -620,30 +621,24 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"ఈ నోటిఫికేషన్లు మిమ్మల్ని హెచ్చరిస్తాయి"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"మీరు సాధారణంగా ఈ నోటిఫికేషన్లను విస్మరిస్తారు. \nవాటి ప్రదర్శనను కొనసాగించాలా?"</string> <string name="inline_done_button" msgid="492513001558716452">"పూర్తయింది"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"వర్తింపజేయి"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"ఈ నోటిఫికేషన్లను చూపిస్తూ ఉండాలా?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"నోటిఫికేషన్లను ఆపివేయి"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"నిశ్శబ్దంగా బట్వాడా చేయండి"</string> <string name="inline_block_button" msgid="8735843688021655065">"బ్లాక్ చేయి"</string> <string name="inline_keep_button" msgid="6665940297019018232">"చూపిస్తూనే ఉండు"</string> <string name="inline_minimize_button" msgid="966233327974702195">"కుదించు"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"సున్నితం"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"నిశబ్దంగా తెలియజేయి"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"అంతరాయం"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"ఎప్పటికప్పుడు హెచ్చరించు"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"నోటిఫికేషన్లను ఆఫ్ చేయి"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ఈ యాప్ నుండి నోటిఫికేషన్లను చూపిస్తూ ఉండాలా?"</string> <string name="hint_text_block" msgid="3554459167504485284">"బ్లాక్ చేసిన నోటిఫికేషన్లు ఎక్కడా కనిపించవు, అలాగే శబ్దం ప్లే కాదు. మీరు సెట్టింగ్లలో నోటిఫికేషన్లను అన్బ్లాక్ చేయవచ్చు."</string> <string name="hint_text_silent" msgid="859468056340177016">"నిశ్శబ్ద నోటిఫికేషన్లు షేడ్లో కనిపిస్తాయి, కానీ లాక్ స్క్రీన్పై కనిపించవు, బ్యానర్లుగా అందించబడవు, అలాగే సౌండ్ ప్లే కాదు."</string> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_alert" msgid="2721169810318722524">"ఈ నోటిఫికేషన్లు శబ్దాన్ని చేస్తూ నోటిఫికేషన్ డ్రాయర్, స్థితి పట్టీ మరియు లాక్ స్క్రీన్లో చూపుతాయి"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ఈ నోటిఫికేషన్లను ఆఫ్ చేయలేరు"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"ఈ నోటిఫికేషన్ల సమూహాన్ని ఇక్కడ కాన్ఫిగర్ చేయలేము"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"<xliff:g id="APP_NAME">%1$s</xliff:g> ద్వారా"</string> <string name="appops_camera" msgid="8100147441602585776">"ఈ యాప్ ఈ కెమెరాను ఉపయోగిస్తోంది."</string> <string name="appops_microphone" msgid="741508267659494555">"ఈ యాప్ మైక్రోఫోన్ను ఉపయోగిస్తుంది."</string> @@ -724,7 +719,7 @@ <string name="tuner_full_zen_title" msgid="4540823317772234308">"వాల్యూమ్ నియంత్రణలతో చూపు"</string> <string name="volume_and_do_not_disturb" msgid="1750270820297253561">"అంతరాయం కలిగించవద్దు"</string> <string name="volume_dnd_silent" msgid="4363882330723050727">"వాల్యూమ్ బటన్ల షార్ట్కట్"</string> - <string name="volume_up_silent" msgid="7545869833038212815">"వాల్యూమ్ పెంచితే అంతరాయం కలిగించవద్దు నుండి నిష్క్రమిస్తుంది"</string> + <string name="volume_up_silent" msgid="7545869833038212815">"వాల్యూమ్ పెంచితే \'అంతరాయం కలిగించవద్దు\' ను ఆపివేస్తుంది"</string> <string name="battery" msgid="7498329822413202973">"బ్యాటరీ"</string> <string name="clock" msgid="7416090374234785905">"గడియారం"</string> <string name="headset" msgid="4534219457597457353">"హెడ్సెట్"</string> @@ -911,7 +906,7 @@ <string name="bubbles_prompt" msgid="8807968030159469710">"<xliff:g id="APP_NAME">%1$s</xliff:g> నుండి బబుల్లను అనుమతించాలా?"</string> <string name="no_bubbles" msgid="337101288173078247">"తిరస్కరించు"</string> <string name="yes_bubbles" msgid="668809525728633841">"అనుమతించు"</string> - <string name="ask_me_later_bubbles" msgid="2147688438402939029">"నన్ను తర్వాత అడగండి"</string> + <string name="ask_me_later_bubbles" msgid="2147688438402939029">"నన్ను తర్వాత అడగు"</string> <string name="bubble_content_description_single" msgid="1184462974339387516">"<xliff:g id="APP_NAME">%2$s</xliff:g> నుండి <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_content_description_stack" msgid="8666349184095622232">"<xliff:g id="APP_NAME">%2$s</xliff:g> నుండి <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> మరియు మరో <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string> <string name="bubble_accessibility_action_move" msgid="1794879742234803840">"తరలించు"</string> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 0068ea6a5d87..98d45a19ebdc 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -706,7 +707,7 @@ <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"แป้นพิมพ์ลัด"</string> <string name="keyboard_shortcut_group_system_switch_input" msgid="8413348767825486492">"สลับรูปแบบแป้นพิมพ์"</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_assist" msgid="9095441910537146013">"ผู้ช่วย"</string> <string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"เบราว์เซอร์"</string> <string name="keyboard_shortcut_group_applications_contacts" msgid="2064197111278436375">"รายชื่อติดต่อ"</string> <string name="keyboard_shortcut_group_applications_email" msgid="6257036897441939004">"อีเมล"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 4b843a3586eb..5c5180c601b1 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 793ac7231b39..3e39588b924f 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -172,6 +172,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 110d76ef9ec4..5b66836daa54 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index b4372d9c923d..5205250397cf 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -175,6 +175,8 @@ <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_5ge (4699478963278829331) --> + <skip /> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -284,8 +286,7 @@ <item quantity="other">اندر <xliff:g id="NUMBER_1">%s</xliff:g> مزید اطلاعات ہیں۔ </item> <item quantity="one">اندر <xliff:g id="NUMBER_0">%s</xliff:g> مزید اطلاع ہے۔</item> </plurals> - <!-- no translation found for notification_summary_message_format (715071952312553396) --> - <skip /> + <string name="notification_summary_message_format" msgid="715071952312553396">"<xliff:g id="CONTACT_NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE_CONTENT">%2$s</xliff:g>"</string> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"اطلاع کی ترتیبات"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ترتیبات"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"اسکرین خود بخود گردش کرے گی۔"</string> @@ -632,32 +633,26 @@ <string name="notification_channel_unsilenced" msgid="4790904571552394137">"یہ اطلاعات آپ کو الرٹ کریں گی"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"آپ عام طور پر ان اطلاعات کو مسترد کرتے ہیں۔ \nان کو دکھاتے رہیں؟"</string> <string name="inline_done_button" msgid="492513001558716452">"ہو گیا"</string> - <!-- no translation found for inline_ok_button (975600017662930615) --> - <skip /> + <string name="inline_ok_button" msgid="975600017662930615">"لاگو کریں"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"یہ اطلاعات دکھانا جاری رکھیں؟"</string> <string name="inline_stop_button" msgid="4172980096860941033">"اطلاعات روک دیں"</string> <string name="inline_deliver_silently_button" msgid="7756289895745629140">"خاموشی سے ڈیلیور کریں"</string> <string name="inline_block_button" msgid="8735843688021655065">"مسدود کریں"</string> <string name="inline_keep_button" msgid="6665940297019018232">"دکھانا جاری رکھیں"</string> <string name="inline_minimize_button" msgid="966233327974702195">"چھوٹا کریں"</string> - <!-- no translation found for inline_silent_button_silent (6904727667411781466) --> - <skip /> + <string name="inline_silent_button_silent" msgid="6904727667411781466">"لطیف"</string> <string name="inline_silent_button_stay_silent" msgid="6308371431217601009">"خاموش رہیں"</string> - <!-- no translation found for inline_silent_button_alert (2449191160203602471) --> - <skip /> + <string name="inline_silent_button_alert" msgid="2449191160203602471">"خلل انداز"</string> <string name="inline_silent_button_keep_alerting" msgid="327696842264359693">"متنبہ کرنا جاری رکھیں"</string> - <!-- no translation found for inline_turn_off_notifications (8635596135532202355) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="8635596135532202355">"اطلاعات کو آف کریں"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"اس ایپ کی طرف سے اطلاعات دکھانا جاری رکھیں؟"</string> <!-- no translation found for hint_text_block (3554459167504485284) --> <skip /> <!-- no translation found for hint_text_silent (859468056340177016) --> <skip /> - <!-- no translation found for hint_text_alert (2721169810318722524) --> - <skip /> + <string name="hint_text_alert" msgid="2721169810318722524">"یہ اطلاعات آواز پیدا کریں گی اور اطلاعاتی دراز، اسٹیٹس بار میں اور مقفل اسکرین پر ظاہر ہوں گی"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ان اطلاعات کو آف نہیں کیا جا سکتا"</string> - <!-- no translation found for notification_multichannel_desc (4695920306092240550) --> - <skip /> + <string name="notification_multichannel_desc" msgid="4695920306092240550">"اطلاعات کے اس گروپ کو یہاں کنفیگر نہیں کیا جا سکتا"</string> <string name="notification_delegate_header" msgid="9167022191405284627">"بذریعہ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="appops_camera" msgid="8100147441602585776">"یہ ایپ کیمرے کا استعمال کر رہی ہے۔"</string> <string name="appops_microphone" msgid="741508267659494555">"یہ ایپ مائیکروفون کا استعمال کر رہی ہے۔"</string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 292f4ef6e731..52253058468e 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -160,7 +160,7 @@ <string name="accessibility_three_bars" msgid="2648241415119396648">"Uchta ustun."</string> <string name="accessibility_signal_full" msgid="9122922886519676839">"Signal to‘liq."</string> <string name="accessibility_desc_on" msgid="2385254693624345265">"Yoniq"</string> - <string name="accessibility_desc_off" msgid="6475508157786853157">"O‘chiq"</string> + <string name="accessibility_desc_off" msgid="6475508157786853157">"Yoqilmagan"</string> <string name="accessibility_desc_connected" msgid="8366256693719499665">"Ulangan."</string> <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Ulanmoqda…"</string> <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string> @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -189,7 +190,7 @@ <string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN yoniq."</string> <string name="accessibility_no_sims" msgid="3957997018324995781">"SIM karta yo‘q."</string> <string name="carrier_network_change_mode" msgid="8149202439957837762">"Mobil tarmoqni o‘zgartirish"</string> - <string name="accessibility_battery_details" msgid="7645516654955025422">"Batareya quvvati sarfi haqida ma’lumot"</string> + <string name="accessibility_battery_details" msgid="7645516654955025422">"Quvvat sarfi tafsilotlari"</string> <string name="accessibility_battery_level" msgid="7451474187113371965">"Batareya <xliff:g id="NUMBER">%d</xliff:g> foiz."</string> <string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Batareya quvvat olmoqda (<xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>%%)."</string> <string name="accessibility_settings_button" msgid="799583911231893380">"Tizim sozlamalari."</string> @@ -604,13 +605,13 @@ <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth yoqilsinmi?"</string> <string name="enable_bluetooth_message" msgid="9106595990708985385">"Klaviaturani planshetingizga ulash uchun Bluetooth xizmatini yoqishingiz kerak."</string> <string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"Yoqish"</string> - <string name="show_silently" msgid="6841966539811264192">"Bildirishnomalar ovozsiz ko‘rsatilsin"</string> + <string name="show_silently" msgid="6841966539811264192">"Tovushsiz chiqsin"</string> <string name="block" msgid="2734508760962682611">"Barcha bildirishnomalar bloklansin"</string> <string name="do_not_silence" msgid="6878060322594892441">"Ovozi o‘chirilmasin"</string> <string name="do_not_silence_block" msgid="4070647971382232311">"Ovozi o‘chirilmasin yoki bloklanmasin"</string> <string name="tuner_full_importance_settings" msgid="3207312268609236827">"Bildirishnomalar uchun kengaytirilgan boshqaruv"</string> <string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Yoniq"</string> - <string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"O‘chiq"</string> + <string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Yoqilmagan"</string> <string name="power_notification_controls_description" msgid="4372459941671353358">"Bildirishnomalar uchun kengaytirilgan boshqaruv yordamida ilova bildirishnomalarining muhimlik darajasini (0-5) sozlash mumkin. \n\n"<b>"5-daraja"</b>" \n- Bildirishnomani ro‘yxatning boshida ko‘rsatish \n- To‘liq ekranli bildirishnomalarni ko‘rsatish \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatish \n\n"<b>"4-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatish \n\n"<b>"3-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatmaslik \n\n"<b>"2-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatmaslik \n- Ovoz va tebranishdan foydalanmaslik \n\n"<b>"1-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatmaslik \n- Ovoz va tebranishdan foydalanmaslik \n- Ekran qulfi va holat qatorida ko‘rsatmaslik \n- Bildirishnomani ro‘yxatning oxirida ko‘rsatish \n\n"<b>"0-daraja"</b>" \n- Ilovadan keladigan barcha bildirishnomalarni bloklash"</string> <string name="notification_header_default_channel" msgid="7506845022070889909">"Bildirishnomalar"</string> <string name="notification_channel_disabled" msgid="344536703863700565">"Bu bildirishnomalar endi chiqmaydi"</string> @@ -728,7 +729,7 @@ <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Trafik tejash yoniq"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Trafik tejash o‘chiq"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Yoniq"</string> - <string name="switch_bar_off" msgid="8803270596930432874">"O‘chiq"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Yoqilmagan"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigatsiya paneli"</string> <string name="nav_bar_layout" msgid="3664072994198772020">"Sxema"</string> <string name="left_nav_bar_button_type" msgid="8555981238887546528">"Qo‘shimcha Chapga tugmasi turi"</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 5db23247dc62..7c95e4e995a6 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G trở lên"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> @@ -362,7 +363,7 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Giới hạn <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Cảnh báo <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Hồ sơ công việc"</string> - <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Chế độ ánh sáng ban đêm"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Ánh sáng đêm"</string> <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Bật khi trời tối"</string> <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Cho đến khi trời sáng"</string> <string name="quick_settings_night_secondary_label_on_at" msgid="6256314040368487637">"Bật vào lúc <xliff:g id="TIME">%s</xliff:g>"</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index ea35df9cc07f..8f014d2a3f2c 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 0245e56e0cc0..cdbea3d44b38 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 01b5c7af7fc9..e0a4a50e1ad7 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -172,6 +172,7 @@ <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> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 1f465ccb8539..c587f314b351 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -172,6 +172,7 @@ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string> <string name="data_connection_lte" msgid="2694876797724028614">"I-LTE"</string> <string name="data_connection_lte_plus" msgid="3423013208570937424">"I-LTE+"</string> + <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string> <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string> <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string> <string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index a067cd202247..e02be38d32e9 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -114,7 +114,7 @@ <!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" --> <string name="quick_settings_tiles_stock" translatable="false"> - wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,saver,work,cast,night + wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,dark,saver,work,cast,night </string> <!-- The tiles to display in QuickSettings --> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 6dfe701e26f5..74924fb5562c 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -238,6 +238,9 @@ <!-- the padding on the end of the statusbar --> <dimen name="status_bar_padding_end">8dp</dimen> + <!-- the padding on the top of the statusbar (usually 0) --> + <dimen name="status_bar_padding_top">0dp</dimen> + <!-- the radius of the overflow dot in the status bar --> <dimen name="overflow_dot_radius">2dp</dimen> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index e098bc5acd5c..444cabfcc50e 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -868,6 +868,8 @@ <string name="quick_settings_night_secondary_label_on_at">On at <xliff:g id="time" example="10 pm">%s</xliff:g></string> <!-- QuickSettings: Secondary text for when the Night Light or some other tile will be on until some user-selected time. [CHAR LIMIT=20] --> <string name="quick_settings_secondary_label_until">Until <xliff:g id="time" example="7 am">%s</xliff:g></string> + <!-- QuickSettings: Label for the toggle to activate Dark theme (A.K.A Dark Mode). [CHAR LIMIT=20] --> + <string name="quick_settings_ui_mode_night_label">Dark Theme</string> <!-- QuickSettings: NFC tile [CHAR LIMIT=NONE] --> <string name="quick_settings_nfc_label">NFC</string> diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl index 04701bcf7c77..577e3bbefdad 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl @@ -124,9 +124,14 @@ oneway interface IOverviewProxy { */ void onAssistantVisibilityChanged(float visibility) = 14; - /* + /** * Sent when back is triggered. */ void onBackAction(boolean completed, int downX, int downY, boolean isButton, boolean gestureSwipeLeft) = 15; + + /** + * Sent when some system ui state changes. + */ + void onSystemUiStateChanged(int stateFlags) = 16; } diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java index 1413ac1433f1..98a8110209e6 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java @@ -23,7 +23,6 @@ import static com.android.systemui.shared.system.WindowManagerWrapper.WINDOWING_ import android.app.ActivityManager.TaskSnapshot; import android.graphics.Bitmap; import android.graphics.Rect; -import android.hardware.HardwareBuffer; /** * Data for a single thumbnail. @@ -53,9 +52,7 @@ public class ThumbnailData { } public ThumbnailData(TaskSnapshot snapshot) { - thumbnail = Bitmap.wrapHardwareBuffer( - HardwareBuffer.createFromGraphicBuffer(snapshot.getSnapshot()), - snapshot.getColorSpace()); + thumbnail = Bitmap.wrapHardwareBuffer(snapshot.getSnapshot(), snapshot.getColorSpace()); insets = new Rect(snapshot.getContentInsets()); orientation = snapshot.getOrientation(); reducedResolution = snapshot.isReducedResolution(); diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java index 1076e73d1072..b36a88b909b3 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java @@ -20,12 +20,16 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL; +import android.annotation.IntDef; import android.content.Context; import android.content.res.Resources; import android.view.WindowManagerPolicyConstants; import com.android.internal.policy.ScreenDecorationsUtils; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Various shared constants between Launcher and SysUI as part of quickstep */ @@ -44,6 +48,17 @@ public class QuickStepContract { public static final String NAV_BAR_MODE_GESTURAL_OVERLAY = WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY; + public static final int SYSUI_STATE_SCREEN_PINNING = 1 << 0; + public static final int SYSUI_STATE_NAV_BAR_HIDDEN = 1 << 1; + public static final int SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED = 1 << 2; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({SYSUI_STATE_SCREEN_PINNING, + SYSUI_STATE_NAV_BAR_HIDDEN, + SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED + }) + public @interface SystemUiStateFlags {} + /** * Touch slopes and thresholds for quick step operations. Drag slop is the point where the * home button press/long press over are ignored and will start to drag when exceeded and the diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java index c92767763cb4..39e0dff5675b 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java @@ -308,7 +308,7 @@ public abstract class BiometricDialogView extends LinearLayout { protected void updateIcon(int lastState, int newState) { final Drawable icon = getAnimationForTransition(lastState, newState); if (icon == null) { - Log.e(TAG, "Animation not found"); + Log.e(TAG, "Animation not found, " + lastState + " -> " + newState); return; } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/FaceDialogView.java b/packages/SystemUI/src/com/android/systemui/biometrics/FaceDialogView.java index 9fba44b76863..d26968635dc2 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/FaceDialogView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/FaceDialogView.java @@ -330,6 +330,10 @@ public class FaceDialogView extends BiometricDialogView { return true; } else if (oldState == STATE_AUTHENTICATING && newState == STATE_AUTHENTICATED) { return true; + } else if (oldState == STATE_ERROR && newState == STATE_PENDING_CONFIRMATION) { + return true; + } else if (oldState == STATE_ERROR && newState == STATE_AUTHENTICATED) { + return true; } return false; } @@ -364,6 +368,10 @@ public class FaceDialogView extends BiometricDialogView { iconRes = R.drawable.face_dialog_face_blue_to_checkmark; } else if (oldState == STATE_AUTHENTICATING && newState == STATE_AUTHENTICATED) { iconRes = R.drawable.face_dialog_face_gray_to_checkmark; + } else if (oldState == STATE_ERROR && newState == STATE_PENDING_CONFIRMATION) { + iconRes = R.drawable.face_dialog_face_gray_to_face_blue; + } else if (oldState == STATE_ERROR && newState == STATE_AUTHENTICATED) { + iconRes = R.drawable.face_dialog_face_blue_to_checkmark; } else { return null; } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintDialogView.java b/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintDialogView.java index c9b30ba3ce8d..412da1428eca 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintDialogView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintDialogView.java @@ -66,6 +66,9 @@ public class FingerprintDialogView extends BiometricDialogView { } else if (oldState == STATE_AUTHENTICATING && newState == STATE_AUTHENTICATED) { // TODO(b/77328470): add animation when fingerprint is authenticated return false; + } else if (oldState == STATE_ERROR && newState == STATE_AUTHENTICATED) { + // TODO(b/77328470): add animation when fingerprint is authenticated + return false; } return false; } @@ -93,6 +96,9 @@ public class FingerprintDialogView extends BiometricDialogView { } else if (oldState == STATE_AUTHENTICATING && newState == STATE_AUTHENTICATED) { // TODO(b/77328470): add animation when fingerprint is authenticated iconRes = R.drawable.fingerprint_dialog_fp_to_error; + } else if (oldState == STATE_ERROR && newState == STATE_AUTHENTICATED) { + // TODO(b/77328470): add animation when fingerprint is authenticated + iconRes = R.drawable.fingerprint_dialog_fp_to_error; } else { return null; } diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index 418d052e1858..0fcc9501e367 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -356,8 +356,10 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe ensureStackViewCreated(); mStackView.addBubble(notif); } + Bubble bubble = mBubbleData.getBubble(notif.key); if (shouldAutoExpand(notif)) { - mStackView.setExpandedBubble(notif); + mStackView.setSelectedBubble(bubble); + mStackView.setExpanded(true); } updateVisibility(); } @@ -397,11 +399,8 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe return; } if (shouldAutoBubbleForFlags(mContext, entry) || shouldBubble(entry)) { - // TODO: handle group summaries - boolean suppressNotification = entry.getBubbleMetadata() != null - && entry.getBubbleMetadata().getSuppressInitialNotification() - && isForegroundApp(entry.notification.getPackageName()); - entry.setShowInShadeWhenBubble(!suppressNotification); + // TODO: handle group summaries? + updateShowInShadeForSuppressNotification(entry); } } @@ -422,7 +421,7 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe } if (mNotificationInterruptionStateProvider.shouldBubbleUp(entry) && alertAgain(entry, entry.notification.getNotification())) { - entry.setShowInShadeWhenBubble(true); + updateShowInShadeForSuppressNotification(entry); entry.setBubbleDismissed(false); // updates come back as bubbles even if dismissed updateBubble(entry); mStackView.updateDotVisibility(entry.key); @@ -586,16 +585,24 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe private boolean shouldAutoExpand(NotificationEntry entry) { Notification.BubbleMetadata metadata = entry.getBubbleMetadata(); return metadata != null && metadata.getAutoExpandBubble() - && isForegroundApp(entry.notification.getPackageName()); + && isForegroundApp(mContext, entry.notification.getPackageName()); + } + + private void updateShowInShadeForSuppressNotification(NotificationEntry entry) { + boolean suppressNotification = entry.getBubbleMetadata() != null + && entry.getBubbleMetadata().getSuppressNotification() + && isForegroundApp(mContext, entry.notification.getPackageName()); + entry.setShowInShadeWhenBubble(!suppressNotification); } /** * Return true if the applications with the package name is running in foreground. * + * @param context application context. * @param pkgName application package name. */ - private boolean isForegroundApp(String pkgName) { - ActivityManager am = mContext.getSystemService(ActivityManager.class); + public static boolean isForegroundApp(Context context, String pkgName) { + ActivityManager am = context.getSystemService(ActivityManager.class); List<RunningTaskInfo> tasks = am.getRunningTasks(1 /* maxNum */); return !tasks.isEmpty() && pkgName.equals(tasks.get(0).topActivity.getPackageName()); } diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java index 285d4aab4f66..17275ad58240 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java @@ -723,7 +723,9 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList action, mStackView.getNormalizedXPosition(), mStackView.getNormalizedYPosition(), - entry.showInShadeWhenBubble()); + entry.showInShadeWhenBubble(), + entry.isForegroundService(), + BubbleController.isForegroundApp(mContext, notification.getPackageName())); } private int getDimenForPackageUser(int resId, String pkg, int userId) { diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java index 53e65e662fb8..686edada1036 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java @@ -441,40 +441,15 @@ public class BubbleStackView extends FrameLayout { * Sets the bubble that should be expanded and expands if needed. * * @param key the {@link NotificationEntry#key} associated with the bubble to expand. + * @deprecated replaced by setSelectedBubble(Bubble) + setExpanded(true) */ + @Deprecated void setExpandedBubble(String key) { Bubble bubbleToExpand = mBubbleData.getBubble(key); - if (mIsExpanded && !bubbleToExpand.equals(mExpandedBubble)) { - // Previously expanded, notify that this bubble is no longer expanded - notifyExpansionChanged(mExpandedBubble.entry, false /* expanded */); - } - Bubble prevBubble = mExpandedBubble; - mExpandedBubble = bubbleToExpand; - if (!mIsExpanded) { - // If we weren't previously expanded we should animate open. - animateExpansion(true /* expand */); - logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED); - mExpandedBubble.entry.setShowInShadeWhenBubble(false); - notifyExpansionChanged(mExpandedBubble.entry, true /* expanded */); - } else { - // Make the container of the expanded view transparent before removing the expanded view - // from it. Otherwise a punch hole created by {@link android.view.SurfaceView} in the - // expanded view becomes visible on the screen. See b/126856255 - mExpandedViewContainer.setAlpha(0.0f); - - mSurfaceSynchronizer.syncSurfaceAndRun(new Runnable() { - @Override - public void run() { - updateExpandedBubble(); - updatePointerPosition(); - requestUpdate(); - logBubbleEvent(prevBubble, StatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED); - logBubbleEvent(mExpandedBubble, - StatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED); - mExpandedBubble.entry.setShowInShadeWhenBubble(false); - notifyExpansionChanged(mExpandedBubble.entry, true /* expanded */); - } - }); + if (bubbleToExpand != null) { + setSelectedBubble(bubbleToExpand); + bubbleToExpand.entry.setShowInShadeWhenBubble(false); + setExpanded(true); } } @@ -492,6 +467,57 @@ public class BubbleStackView extends FrameLayout { } /** + * Changes the currently selected bubble. If the stack is already expanded, the newly selected + * bubble will be shown immediately. This does not change the expanded state or change the + * position of any bubble. + */ + public void setSelectedBubble(Bubble bubbleToSelect) { + if (mExpandedBubble != null && mExpandedBubble.equals(bubbleToSelect)) { + return; + } + final Bubble previouslySelected = mExpandedBubble; + mExpandedBubble = bubbleToSelect; + if (mIsExpanded) { + // Make the container of the expanded view transparent before removing the expanded view + // from it. Otherwise a punch hole created by {@link android.view.SurfaceView} in the + // expanded view becomes visible on the screen. See b/126856255 + mExpandedViewContainer.setAlpha(0.0f); + mSurfaceSynchronizer.syncSurfaceAndRun(() -> { + updateExpandedBubble(); + updatePointerPosition(); + requestUpdate(); + logBubbleEvent(previouslySelected, StatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED); + logBubbleEvent(bubbleToSelect, StatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED); + notifyExpansionChanged(previouslySelected.entry, false /* expanded */); + notifyExpansionChanged(bubbleToSelect.entry, true /* expanded */); + }); + } + } + + /** + * Changes the expanded state of the stack. + * + * @param expanded whether the bubble stack should appear expanded + */ + public void setExpanded(boolean expanded) { + if (expanded == mIsExpanded) { + return; + } + if (mIsExpanded) { + // Collapse the stack + animateExpansion(false /* expand */); + logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED); + } else { + // Expand the stack + animateExpansion(true /* expand */); + // TODO: move next line to BubbleData + logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED); + logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__STACK_EXPANDED); + } + notifyExpansionChanged(mExpandedBubble.entry, mIsExpanded); + } + + /** * Adds a bubble to the top of the stack. * * @param entry the notification to add to the stack of bubbles. @@ -652,7 +678,10 @@ public class BubbleStackView extends FrameLayout { * Collapses the stack of bubbles. * <p> * Must be called from the main thread. + * + * @deprecated use {@link #setExpanded(boolean)} and {@link #setSelectedBubble(Bubble)} */ + @Deprecated @MainThread public void collapseStack() { if (mIsExpanded) { @@ -663,6 +692,11 @@ public class BubbleStackView extends FrameLayout { } } + /** + * @deprecated use {@link #setExpanded(boolean)} and {@link #setSelectedBubble(Bubble)} + */ + @Deprecated + @MainThread void collapseStack(Runnable endRunnable) { collapseStack(); // TODO - use the runnable at end of animation @@ -673,7 +707,10 @@ public class BubbleStackView extends FrameLayout { * Expands the stack of bubbles. * <p> * Must be called from the main thread. + * + * @deprecated use {@link #setExpanded(boolean)} and {@link #setSelectedBubble(Bubble)} */ + @Deprecated @MainThread public void expandStack() { if (!mIsExpanded) { @@ -1070,7 +1107,9 @@ public class BubbleStackView extends FrameLayout { action, getNormalizedXPosition(), getNormalizedYPosition(), - false /* unread notification */); + false /* unread bubble */, + false /* on-going bubble */, + false /* foreground bubble */); } else { StatusBarNotification notification = bubble.entry.notification; StatsLog.write(StatsLog.BUBBLE_UI_CHANGED, @@ -1082,7 +1121,9 @@ public class BubbleStackView extends FrameLayout { action, getNormalizedXPosition(), getNormalizedYPosition(), - bubble.entry.showInShadeWhenBubble()); + bubble.entry.showInShadeWhenBubble(), + bubble.entry.isForegroundService(), + BubbleController.isForegroundApp(mContext, notification.getPackageName())); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java index 2956ad0600a7..daaee4cd5336 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java @@ -41,6 +41,7 @@ import com.android.systemui.qs.tiles.LocationTile; import com.android.systemui.qs.tiles.NfcTile; import com.android.systemui.qs.tiles.NightDisplayTile; import com.android.systemui.qs.tiles.RotationLockTile; +import com.android.systemui.qs.tiles.UiModeNightTile; import com.android.systemui.qs.tiles.UserTile; import com.android.systemui.qs.tiles.WifiTile; import com.android.systemui.qs.tiles.WorkModeTile; @@ -73,6 +74,7 @@ public class QSFactoryImpl implements QSFactory { private final Provider<NightDisplayTile> mNightDisplayTileProvider; private final Provider<NfcTile> mNfcTileProvider; private final Provider<GarbageMonitor.MemoryTile> mMemoryTileProvider; + private final Provider<UiModeNightTile> mUiModeNightTileProvider; private QSTileHost mHost; @@ -94,7 +96,8 @@ public class QSFactoryImpl implements QSFactory { Provider<DataSaverTile> dataSaverTileProvider, Provider<NightDisplayTile> nightDisplayTileProvider, Provider<NfcTile> nfcTileProvider, - Provider<GarbageMonitor.MemoryTile> memoryTileProvider) { + Provider<GarbageMonitor.MemoryTile> memoryTileProvider, + Provider<UiModeNightTile> uiModeNightTileProvider) { mWifiTileProvider = wifiTileProvider; mBluetoothTileProvider = bluetoothTileProvider; mCellularTileProvider = cellularTileProvider; @@ -113,6 +116,7 @@ public class QSFactoryImpl implements QSFactory { mNightDisplayTileProvider = nightDisplayTileProvider; mNfcTileProvider = nfcTileProvider; mMemoryTileProvider = memoryTileProvider; + mUiModeNightTileProvider = uiModeNightTileProvider; } public void setHost(QSTileHost host) { @@ -164,6 +168,8 @@ public class QSFactoryImpl implements QSFactory { return mNightDisplayTileProvider.get(); case "nfc": return mNfcTileProvider.get(); + case "dark": + return mUiModeNightTileProvider.get(); } // Intent tiles. diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index 38962eb14705..20e002edfe02 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -25,6 +25,7 @@ import android.content.Intent; import android.content.res.Resources; import android.provider.Settings; import android.service.quicksettings.Tile; +import android.telephony.SubscriptionManager; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -285,7 +286,13 @@ public class CellularTile extends QSTileImpl<SignalState> { } static Intent getCellularSettingIntent() { - return new Intent(Settings.ACTION_DATA_USAGE_SETTINGS); + Intent intent = new Intent(Settings.ACTION_NETWORK_OPERATOR_SETTINGS); + int dataSub = SubscriptionManager.getDefaultDataSubscriptionId(); + if (dataSub != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + intent.putExtra(Settings.EXTRA_SUB_ID, + SubscriptionManager.getDefaultDataSubscriptionId()); + } + return intent; } private final class CellularDetailAdapter implements DetailAdapter { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java index c6c6f877ac9b..79996bcfa808 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java @@ -16,6 +16,7 @@ package com.android.systemui.qs.tiles; import android.content.DialogInterface.OnClickListener; import android.content.Intent; +import android.provider.Settings; import android.service.quicksettings.Tile; import android.widget.Switch; @@ -54,7 +55,7 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements @Override public Intent getLongClickIntent() { - return CellularTile.getCellularSettingIntent(); + return new Intent(Settings.ACTION_DATA_SAVER_SETTINGS); } @Override protected void handleClick() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java new file mode 100644 index 000000000000..8d2f8952cc6e --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.qs.tiles; + +import android.app.UiModeManager; +import android.content.Intent; +import android.content.res.Configuration; +import android.provider.Settings; +import android.service.quicksettings.Tile; +import android.widget.Switch; + +import com.android.internal.logging.nano.MetricsProto; +import com.android.systemui.R; +import com.android.systemui.plugins.qs.QSTile; +import com.android.systemui.qs.QSHost; +import com.android.systemui.qs.tileimpl.QSTileImpl; +import com.android.systemui.statusbar.policy.ConfigurationController; + +import javax.inject.Inject; + +/** + * Quick Settings tile for: Night Mode / Dark Theme / Dark Mode. + * + * The string id of this tile is "dark" because "night" was already + * taken by {@link NightDisplayTile}. + */ +public class UiModeNightTile extends QSTileImpl<QSTile.BooleanState> implements + ConfigurationController.ConfigurationListener { + + private final Icon mIcon = ResourceIcon.get( + com.android.internal.R.drawable.ic_qs_ui_mode_night); + private UiModeManager mUiModeManager; + + @Inject + public UiModeNightTile(QSHost host, ConfigurationController configurationController) { + super(host); + mUiModeManager = mContext.getSystemService(UiModeManager.class); + configurationController.observe(getLifecycle(), this); + } + + @Override + public void onUiModeChanged() { + refreshState(); + } + + @Override + public BooleanState newTileState() { + return new BooleanState(); + } + + @Override + protected void handleClick() { + boolean newState = !mState.value; + mUiModeManager.setNightMode(newState ? UiModeManager.MODE_NIGHT_YES + : UiModeManager.MODE_NIGHT_NO); + refreshState(newState); + } + + @Override + protected void handleUpdateState(BooleanState state, Object arg) { + boolean nightMode = (mContext.getResources().getConfiguration().uiMode + & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES; + + state.value = nightMode; + state.label = mContext.getString(R.string.quick_settings_ui_mode_night_label); + state.contentDescription = state.label; + state.icon = mIcon; + state.expandedAccessibilityClassName = Switch.class.getName(); + state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; + } + + @Override + public int getMetricsCategory() { + return MetricsProto.MetricsEvent.QS_UI_MODE_NIGHT; + } + + @Override + public Intent getLongClickIntent() { + return new Intent(Settings.ACTION_DISPLAY_SETTINGS); + } + + @Override + protected void handleSetListening(boolean listening) { + } + + @Override + public CharSequence getTileLabel() { + return getState().label; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java index 7b6fb943f512..00aef9aed85d 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java @@ -28,6 +28,9 @@ import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_INP import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SUPPORTS_WINDOW_CORNERS; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SYSUI_PROXY; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_WINDOW_CORNER_RADIUS; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; import android.annotation.FloatRange; import android.content.BroadcastReceiver; @@ -52,6 +55,7 @@ import android.view.InputMonitor; import android.view.MotionEvent; import com.android.internal.policy.ScreenDecorationsUtils; +import com.android.systemui.Dependency; import com.android.systemui.Dumpable; import com.android.systemui.Prefs; import com.android.systemui.SysUiServiceProvider; @@ -60,7 +64,10 @@ import com.android.systemui.shared.recents.IOverviewProxy; import com.android.systemui.shared.recents.ISystemUiProxy; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; +import com.android.systemui.shared.system.QuickStepContract.SystemUiStateFlags; import com.android.systemui.stackdivider.Divider; +import com.android.systemui.statusbar.NavigationBarController; +import com.android.systemui.statusbar.phone.NavigationBarFragment; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.CallbackController; import com.android.systemui.statusbar.policy.DeviceProvisionedController; @@ -107,6 +114,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis private IOverviewProxy mOverviewProxy; private int mConnectionBackoffAttempts; private @InteractionType int mInteractionFlags; + private @SystemUiStateFlags int mSysUiStateFlags; private boolean mBound; private boolean mIsEnabled; private int mCurrentBoundedUserId = -1; @@ -368,6 +376,9 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis } dispatchNavButtonBounds(); + // Update the systemui state flags + updateSystemUiStateFlags(); + notifyConnectionChanged(); } @@ -394,19 +405,29 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis private final DeviceProvisionedListener mDeviceProvisionedCallback = new DeviceProvisionedListener() { - @Override - public void onUserSetupChanged() { - if (mDeviceProvisionedController.isCurrentUserSetup()) { - internalConnectToCurrentUser(); - } - } - @Override - public void onUserSwitched() { - mConnectionBackoffAttempts = 0; + @Override + public void onDeviceProvisionedChanged() { + /* + on initialize, keep track of the previous gestural state (nothing is enabled by default) + restore to a non gestural state if device is not provisioned + once the device is provisioned, restore to the original state + */ + } + + @Override + public void onUserSetupChanged() { + if (mDeviceProvisionedController.isCurrentUserSetup()) { internalConnectToCurrentUser(); } - }; + } + + @Override + public void onUserSwitched() { + mConnectionBackoffAttempts = 0; + internalConnectToCurrentUser(); + } + }; // This is the death handler for the binder from the launcher service private final IBinder.DeathRecipient mOverviewServiceDeathRcpt @@ -455,6 +476,45 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis } } + public void setSystemUiStateFlag(int flag, boolean enabled) { + int newState = mSysUiStateFlags; + if (enabled) { + newState |= flag; + } else { + newState &= ~flag; + } + if (mSysUiStateFlags != newState) { + mSysUiStateFlags = newState; + notifySystemUiStateFlags(mSysUiStateFlags); + } + } + + private void updateSystemUiStateFlags() { + final NavigationBarController navBar = Dependency.get(NavigationBarController.class); + final NavigationBarFragment navBarFragment = navBar.getDefaultNavigationBarFragment(); + final StatusBar statusBar = SysUiServiceProvider.getComponent(mContext, StatusBar.class); + final boolean panelExpanded = statusBar != null && statusBar.getPanel() != null + && statusBar.getPanel().isFullyExpanded(); + mSysUiStateFlags = 0; + mSysUiStateFlags |= ActivityManagerWrapper.getInstance().isScreenPinningActive() + ? SYSUI_STATE_SCREEN_PINNING : 0; + mSysUiStateFlags |= (navBarFragment == null || !navBarFragment.isNavBarWindowVisible()) + ? SYSUI_STATE_NAV_BAR_HIDDEN : 0; + mSysUiStateFlags |= panelExpanded + ? SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED : 0; + notifySystemUiStateFlags(mSysUiStateFlags); + } + + private void notifySystemUiStateFlags(int flags) { + try { + if (mOverviewProxy != null) { + mOverviewProxy.onSystemUiStateChanged(flags); + } + } catch (RemoteException e) { + Log.e(TAG_OPS, "Failed to notify sysui state change", e); + } + } + /** * Sets the navbar region which can receive touch inputs */ @@ -659,6 +719,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis pw.print(" quickStepIntentResolved="); pw.println(isEnabled()); pw.print(" navBarMode="); pw.println(QuickStepContract.getCurrentInteractionMode(mContext)); + pw.print(" mSysUiStateFlags="); pw.println(mSysUiStateFlags); } public interface OverviewProxyListener { diff --git a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java index f796793d908c..07391ed5867f 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java +++ b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java @@ -16,6 +16,7 @@ package com.android.systemui.recents; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; import static com.android.systemui.util.leak.RotationUtils.ROTATION_LANDSCAPE; import static com.android.systemui.util.leak.RotationUtils.ROTATION_SEASCAPE; @@ -44,6 +45,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.SysUiServiceProvider; import com.android.systemui.shared.system.WindowManagerWrapper; @@ -59,6 +61,7 @@ public class ScreenPinningRequest implements View.OnClickListener { private final AccessibilityManager mAccessibilityService; private final WindowManager mWindowManager; + private final OverviewProxyService mOverviewProxyService; private RequestWindowView mRequestWindow; @@ -71,6 +74,7 @@ public class ScreenPinningRequest implements View.OnClickListener { mContext.getSystemService(Context.ACCESSIBILITY_SERVICE); mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); + mOverviewProxyService = Dependency.get(OverviewProxyService.class); } public void clearPrompt() { @@ -125,6 +129,7 @@ public class ScreenPinningRequest implements View.OnClickListener { if (v.getId() == R.id.screen_pinning_ok_button || mRequestWindow == v) { try { ActivityTaskManager.getService().startSystemLockTaskMode(taskId); + mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_SCREEN_PINNING, true); } catch (RemoteException e) {} } clearPrompt(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java index 2bb6e3e32dc7..c833ded6a85f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java @@ -67,7 +67,10 @@ public class NavigationBarController implements Callbacks { mContext = context; mHandler = handler; mDisplayManager = (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE); - getComponent(mContext, CommandQueue.class).addCallback(this); + CommandQueue commandQueue = getComponent(mContext, CommandQueue.class); + if (commandQueue != null) { + commandQueue.addCallback(this); + } } @Override @@ -206,4 +209,9 @@ public class NavigationBarController implements Callbacks { NavigationBarFragment navBar = mNavigationBars.get(DEFAULT_DISPLAY); return (navBar == null) ? null : (NavigationBarView) navBar.getView(); } + + /** @return {@link NavigationBarFragment} on the default display. */ + public NavigationBarFragment getDefaultNavigationBarFragment() { + return mNavigationBars.get(DEFAULT_DISPLAY); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java index f69356ea14a0..ce9401cff676 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java @@ -830,4 +830,12 @@ public final class NotificationEntry { this.index = index; } } + + /** + * Returns whether the notification is a foreground service. It shows that this is an ongoing + * bubble. + */ + public boolean isForegroundService() { + return (notification.getNotification().flags & Notification.FLAG_FOREGROUND_SERVICE) != 0; + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java index 79bf6b3e49f6..b9cacd14451c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java @@ -271,7 +271,12 @@ public class EdgeBackGestureHandler implements DisplayListener { if (x > mEdgeWidth && x < (mDisplaySize.x - mEdgeWidth)) { return false; } - return !mExcludeRegion.contains(x, y); + boolean isInExcludedRegion = mExcludeRegion.contains(x, y); + if (isInExcludedRegion) { + mOverviewProxyService.notifyBackAction(false /* completed */, -1, -1, + false /* isButton */, !mIsOnLeftEdge); + } + return !isInExcludedRegion; } private void onMotionEvent(MotionEvent ev) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java index 6729f9fa5787..591b1b48ddc2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java @@ -24,6 +24,8 @@ import static android.app.StatusBarManager.windowStateToString; import static com.android.systemui.recents.OverviewProxyService.OverviewProxyListener; import static com.android.systemui.shared.system.NavigationBarCompat.InteractionType; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE; @@ -457,8 +459,10 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback mNavigationBarWindowState = state; if (DEBUG_WINDOW_STATE) Log.d(TAG, "Navigation bar " + windowStateToString(state)); + mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_NAV_BAR_HIDDEN, + !isNavBarWindowVisible()); mNavigationBarView.getRotateSuggestionButton() - .onNavigationBarWindowVisibilityChange(state == WINDOW_STATE_SHOWING); + .onNavigationBarWindowVisibilityChange(isNavBarWindowVisible()); } } @@ -776,44 +780,52 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback IActivityTaskManager activityManager = ActivityTaskManager.getService(); boolean touchExplorationEnabled = mAccessibilityManager.isTouchExplorationEnabled(); boolean inLockTaskMode = activityManager.isInLockTaskMode(); - if (inLockTaskMode && !touchExplorationEnabled) { - long time = System.currentTimeMillis(); - - // If we recently long-pressed the other button then they were - // long-pressed 'together' - if ((time - mLastLockToAppLongPress) < LOCK_TO_APP_GESTURE_TOLERENCE) { - activityManager.stopSystemLockTaskMode(); - // When exiting refresh disabled flags. - mNavigationBarView.updateNavButtonIcons(); - return true; - } else if (v.getId() == btnId1) { - ButtonDispatcher button = btnId2 == R.id.recent_apps - ? mNavigationBarView.getRecentsButton() - : mNavigationBarView.getHomeButton(); - if (!button.getCurrentView().isPressed()) { - // If we aren't pressing recents/home right now then they presses - // won't be together, so send the standard long-press action. + boolean stopLockTaskMode = false; + try { + if (inLockTaskMode && !touchExplorationEnabled) { + long time = System.currentTimeMillis(); + + // If we recently long-pressed the other button then they were + // long-pressed 'together' + if ((time - mLastLockToAppLongPress) < LOCK_TO_APP_GESTURE_TOLERENCE) { + stopLockTaskMode = true; + return true; + } else if (v.getId() == btnId1) { + ButtonDispatcher button = btnId2 == R.id.recent_apps + ? mNavigationBarView.getRecentsButton() + : mNavigationBarView.getHomeButton(); + if (!button.getCurrentView().isPressed()) { + // If we aren't pressing recents/home right now then they presses + // won't be together, so send the standard long-press action. + sendBackLongPress = true; + } + } + mLastLockToAppLongPress = time; + } else { + // If this is back still need to handle sending the long-press event. + if (v.getId() == btnId1) { sendBackLongPress = true; + } else if (touchExplorationEnabled && inLockTaskMode) { + // When in accessibility mode a long press that is recents/home (not back) + // should stop lock task. + stopLockTaskMode = true; + return true; + } else if (v.getId() == btnId2) { + return btnId2 == R.id.recent_apps + ? onLongPressRecents() + : onHomeLongClick( + mNavigationBarView.getHomeButton().getCurrentView()); } } - mLastLockToAppLongPress = time; - } else { - // If this is back still need to handle sending the long-press event. - if (v.getId() == btnId1) { - sendBackLongPress = true; - } else if (touchExplorationEnabled && inLockTaskMode) { - // When in accessibility mode a long press that is recents/home (not back) - // should stop lock task. + } finally { + if (stopLockTaskMode) { activityManager.stopSystemLockTaskMode(); // When exiting refresh disabled flags. mNavigationBarView.updateNavButtonIcons(); - return true; - } else if (v.getId() == btnId2) { - return btnId2 == R.id.recent_apps - ? onLongPressRecents() - : onHomeLongClick(mNavigationBarView.getHomeButton().getCurrentView()); + mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_SCREEN_PINNING, false); } } + if (sendBackLongPress) { KeyButtonView keyButtonView = (KeyButtonView) v; keyButtonView.sendEvent(KeyEvent.ACTION_DOWN, KeyEvent.FLAG_LONG_PRESS); @@ -925,6 +937,10 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback } } + public boolean isNavBarWindowVisible() { + return mNavigationBarWindowState == WINDOW_STATE_SHOWING; + } + /** * Checks current navigation bar mode and make transitions. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 835db6f532db..a45d86ef0dfe 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -20,6 +20,7 @@ import static android.content.Intent.ACTION_OVERLAY_CHANGED; import static android.view.WindowManagerPolicyConstants.NAV_BAR_INVALID; import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_SHOW_OVERVIEW_BUTTON; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE; import android.animation.LayoutTransition; @@ -632,10 +633,6 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav return getContext().getDisplay(); } - public boolean inScreenPinning() { - return ActivityManagerWrapper.getInstance().isScreenPinningActive(); - } - public void setLayoutTransitionsEnabled(boolean enabled) { mLayoutTransitionsEnabled = enabled; updateLayoutTransitionsEnabled(); @@ -691,6 +688,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav public void onPanelExpandedChange(boolean expanded) { updateSlippery(); + mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED, + expanded); } public void updateStates() { @@ -710,10 +709,6 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav showSwipeUpUI ? mQuickStepAccessibilityDelegate : null); } - public boolean isNotificationsFullyCollapsed() { - return mPanelView.isFullyCollapsed(); - } - /** * Updates the {@link WindowManager.LayoutParams.FLAG_SLIPPERY} state dependent on if swipe up * is enabled, or the notifications is fully opened without being in an animated state. If diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index 8f135c80a1d0..11e5625f8538 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -75,7 +75,8 @@ public class MobileSignalController extends SignalController< private SignalStrength mSignalStrength; private MobileIconGroup mDefaultIcons; private Config mConfig; - private boolean mInflateSignalStrengths = false; + @VisibleForTesting + boolean mInflateSignalStrengths = false; // Some specific carriers have 5GE network which is special LTE CA network. private static final int NETWORK_TYPE_LTE_CA_5GE = TelephonyManager.MAX_NETWORK_TYPE + 1; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java index 4fe18b486b9f..ce5bfced961b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java @@ -428,8 +428,12 @@ public class NetworkControllerBaseTest extends SysuiTestCase { IconState iconState = iconArg.getValue(); - int state = SignalDrawable.getState(icon, SignalStrength.NUM_SIGNAL_STRENGTH_BINS, - cutOut); + int numSignalStrengthBins = SignalStrength.NUM_SIGNAL_STRENGTH_BINS; + if (mMobileSignalController.mInflateSignalStrengths) { + numSignalStrengthBins++; + icon++; + } + int state = SignalDrawable.getState(icon, numSignalStrengthBins, cutOut); assertEquals("Data icon in status bar", typeIcon, (int) typeIconArg.getValue()); assertEquals("Signal icon in status bar", state, iconState.icon); assertEquals("Visibility in status bar", visible, iconState.visible); diff --git a/proto/src/metrics_constants/metrics_constants.proto b/proto/src/metrics_constants/metrics_constants.proto index a88ae9e8b952..3babb6d943f5 100644 --- a/proto/src/metrics_constants/metrics_constants.proto +++ b/proto/src/metrics_constants/metrics_constants.proto @@ -7175,6 +7175,13 @@ message MetricsEvent { // Salt generation for the above hashed direct share target FIELD_HASHED_TARGET_SALT_GEN = 1705; + // OPEN: QS dark theme tile shown + // ACTION: QS dark theme tile tapped + // SUBTYPE: 0 is off, 1 is on + // CATEGORY: QUICK_SETTINGS + // OS: Q + QS_UI_MODE_NIGHT = 1706; + // ---- End Q Constants, all Q 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/DynamicSystemService.java b/services/core/java/com/android/server/DynamicSystemService.java index 99bbcf890a0a..f1882c5f641e 100644 --- a/services/core/java/com/android/server/DynamicSystemService.java +++ b/services/core/java/com/android/server/DynamicSystemService.java @@ -47,7 +47,7 @@ public class DynamicSystemService extends IDynamicSystemService.Stub implements private static IGsiService connect(DeathRecipient recipient) throws RemoteException { IBinder binder = ServiceManager.getService("gsiservice"); if (binder == null) { - throw new RemoteException(NO_SERVICE_ERROR); + return null; } /** * The init will restart gsiservice if it crashed and the proxy object will need to be @@ -68,26 +68,31 @@ public class DynamicSystemService extends IDynamicSystemService.Stub implements private IGsiService getGsiService() throws RemoteException { checkPermission(); + if (!"running".equals(SystemProperties.get("init.svc.gsid"))) { SystemProperties.set("ctl.start", "gsid"); - for (int sleepMs = 64; sleepMs <= (GSID_ROUGH_TIMEOUT_MS << 1); sleepMs <<= 1) { - try { - Thread.sleep(sleepMs); - } catch (InterruptedException e) { - Slog.e(TAG, "Interrupted when waiting for GSID"); - break; + } + + for (int sleepMs = 64; sleepMs <= (GSID_ROUGH_TIMEOUT_MS << 1); sleepMs <<= 1) { + synchronized (this) { + if (mGsiService == null) { + mGsiService = connect(this); } - if ("running".equals(SystemProperties.get("init.svc.gsid"))) { - break; + if (mGsiService != null) { + return mGsiService; } } - } - synchronized (this) { - if (mGsiService == null) { - mGsiService = connect(this); + + try { + Slog.d(TAG, "GsiService is not ready, wait for " + sleepMs + "ms"); + Thread.sleep(sleepMs); + } catch (InterruptedException e) { + Slog.e(TAG, "Interrupted when waiting for GSID"); + return null; } - return mGsiService; } + + throw new RemoteException(NO_SERVICE_ERROR); } private void checkPermission() { diff --git a/services/core/java/com/android/server/ExplicitHealthCheckController.java b/services/core/java/com/android/server/ExplicitHealthCheckController.java index 27ad208ef8a1..19ab33e85f5e 100644 --- a/services/core/java/com/android/server/ExplicitHealthCheckController.java +++ b/services/core/java/com/android/server/ExplicitHealthCheckController.java @@ -35,7 +35,9 @@ import android.os.RemoteException; import android.os.UserHandle; import android.service.watchdog.ExplicitHealthCheckService; import android.service.watchdog.IExplicitHealthCheckService; +import android.service.watchdog.PackageInfo; import android.text.TextUtils; +import android.util.ArraySet; import android.util.Slog; import com.android.internal.annotations.GuardedBy; @@ -69,7 +71,7 @@ class ExplicitHealthCheckController { // To prevent deadlocks between the controller and watchdog threads, we have // a lock invariant to ALWAYS acquire the PackageWatchdog#mLock before #mLock in this class. // It's easier to just NOT hold #mLock when calling into watchdog code on this consumer. - @GuardedBy("mLock") @Nullable private Consumer<List<String>> mSupportedConsumer; + @GuardedBy("mLock") @Nullable private Consumer<List<PackageInfo>> mSupportedConsumer; // Called everytime we need to notify the watchdog to sync requests between itself and the // health check service. In practice, should never be null after it has been #setEnabled. // To prevent deadlocks between the controller and watchdog threads, we have @@ -104,7 +106,7 @@ class ExplicitHealthCheckController { * ensure a happens-before relationship of the set parameters and visibility on other threads. */ public void setCallbacks(Consumer<String> passedConsumer, - Consumer<List<String>> supportedConsumer, Runnable notifySyncRunnable) { + Consumer<List<PackageInfo>> supportedConsumer, Runnable notifySyncRunnable) { synchronized (mLock) { if (mPassedConsumer != null || mSupportedConsumer != null || mNotifySyncRunnable != null) { @@ -144,14 +146,18 @@ class ExplicitHealthCheckController { return; } - getSupportedPackages(supportedPackages -> { + getSupportedPackages(supportedPackageInfos -> { // Notify the watchdog without lock held - mSupportedConsumer.accept(supportedPackages); + mSupportedConsumer.accept(supportedPackageInfos); getRequestedPackages(previousRequestedPackages -> { synchronized (mLock) { // Hold lock so requests and cancellations are sent atomically. // It is important we don't mix requests from multiple threads. + Set<String> supportedPackages = new ArraySet<>(); + for (PackageInfo info : supportedPackageInfos) { + supportedPackages.add(info.getPackageName()); + } // Note, this may modify newRequestedPackages newRequestedPackages.retainAll(supportedPackages); @@ -229,7 +235,7 @@ class ExplicitHealthCheckController { * Returns the packages that we can request explicit health checks for. * The packages will be returned to the {@code consumer}. */ - private void getSupportedPackages(Consumer<List<String>> consumer) { + private void getSupportedPackages(Consumer<List<PackageInfo>> consumer) { synchronized (mLock) { if (!prepareServiceLocked("get health check supported packages")) { return; @@ -238,7 +244,8 @@ class ExplicitHealthCheckController { Slog.d(TAG, "Getting health check supported packages"); try { mRemoteService.getSupportedPackages(new RemoteCallback(result -> { - List<String> packages = result.getStringArrayList(EXTRA_SUPPORTED_PACKAGES); + List<PackageInfo> packages = + result.getParcelableArrayList(EXTRA_SUPPORTED_PACKAGES); Slog.i(TAG, "Explicit health check supported packages " + packages); consumer.accept(packages); })); diff --git a/services/core/java/com/android/server/PackageWatchdog.java b/services/core/java/com/android/server/PackageWatchdog.java index 0c681df036b4..7d0d8344a566 100644 --- a/services/core/java/com/android/server/PackageWatchdog.java +++ b/services/core/java/com/android/server/PackageWatchdog.java @@ -27,6 +27,7 @@ import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; +import android.service.watchdog.PackageInfo; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; @@ -57,6 +58,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -102,16 +104,10 @@ public class PackageWatchdog { private boolean mIsHealthCheckEnabled = true; @GuardedBy("mLock") private boolean mIsPackagesReady; - // SystemClock#uptimeMillis when we last executed #pruneObservers. + // SystemClock#uptimeMillis when we last executed #syncState // 0 if no prune is scheduled. @GuardedBy("mLock") - private long mUptimeAtLastPruneMs; - // Duration in millis that the last prune was scheduled for. - // Used along with #mUptimeAtLastPruneMs after scheduling a prune to determine the remaining - // duration before #pruneObservers will be executed. - // 0 if no prune is scheduled. - @GuardedBy("mLock") - private long mDurationAtLastPrune; + private long mUptimeAtLastStateSync; private PackageWatchdog(Context context) { // Needs to be constructed inline @@ -156,7 +152,7 @@ public class PackageWatchdog { mHealthCheckController.setCallbacks(packageName -> onHealthCheckPassed(packageName), packages -> onSupportedPackages(packages), () -> syncRequestsAsync()); - // Controller is initially disabled until here where we may enable it and sync requests + // Controller is initially disabled until here where we may enable it and sync our state setExplicitHealthCheckEnabled(mIsHealthCheckEnabled); } } @@ -173,10 +169,6 @@ public class PackageWatchdog { if (internalObserver != null) { internalObserver.mRegisteredObserver = observer; } - if (mDurationAtLastPrune == 0) { - // Nothing running, prune - pruneAndSchedule(); - } } } @@ -214,6 +206,12 @@ public class PackageWatchdog { packages.add(new MonitoredPackage(packageNames.get(i), durationMs, false)); } + // Sync before we add the new packages to the observers. This will #pruneObservers, + // causing any elapsed time to be deducted from all existing packages before we add new + // packages. This maintains the invariant that the elapsed time for ALL (new and existing) + // packages is the same. + syncState("observing new packages"); + synchronized (mLock) { ObserverInternal oldObserver = mAllObservers.get(observer.getName()); if (oldObserver == null) { @@ -224,16 +222,16 @@ public class PackageWatchdog { } else { Slog.d(TAG, observer.getName() + " added the following " + "packages to monitor " + packageNames); - oldObserver.updatePackages(packages); + oldObserver.updatePackagesLocked(packages); } } + + // Register observer in case not already registered registerHealthObserver(observer); - // Always prune because we may have received packges requiring an earlier - // schedule than we are currently scheduled for. - pruneAndSchedule(); - Slog.i(TAG, "Syncing health check requests, observing packages " + packageNames); - syncRequestsAsync(); - saveToFileAsync(); + + // Sync after we add the new packages to the observers. We may have received packges + // requiring an earlier schedule than we are currently scheduled for. + syncState("updated observers"); } /** @@ -245,7 +243,7 @@ public class PackageWatchdog { synchronized (mLock) { mAllObservers.remove(observer.getName()); } - saveToFileAsync(); + syncState("unregistering observer: " + observer.getName()); } /** @@ -296,7 +294,8 @@ public class PackageWatchdog { ObserverInternal observer = mAllObservers.valueAt(oIndex); PackageHealthObserver registeredObserver = observer.mRegisteredObserver; if (registeredObserver != null - && observer.onPackageFailure(versionedPackage.getPackageName())) { + && observer.onPackageFailureLocked( + versionedPackage.getPackageName())) { int impact = registeredObserver.onHealthCheckFailed(versionedPackage); if (impact != PackageHealthObserverImpact.USER_IMPACT_NONE && impact < currentObserverImpact) { @@ -321,9 +320,11 @@ public class PackageWatchdog { /** Writes the package information to file during shutdown. */ public void writeNow() { synchronized (mLock) { + // Must only run synchronous tasks as this runs on the ShutdownThread and no other + // thread is guaranteed to run during shutdown. if (!mAllObservers.isEmpty()) { - mLongTaskHandler.removeCallbacks(this::saveToFile); - pruneObservers(SystemClock.uptimeMillis() - mUptimeAtLastPruneMs); + mLongTaskHandler.removeCallbacks(this::saveToFileAsync); + pruneObserversLocked(); saveToFile(); Slog.i(TAG, "Last write to update package durations"); } @@ -341,9 +342,8 @@ public class PackageWatchdog { synchronized (mLock) { mIsHealthCheckEnabled = enabled; mHealthCheckController.setEnabled(enabled); - Slog.i(TAG, "Syncing health check requests, explicit health check is " - + (enabled ? "enabled" : "disabled")); - syncRequestsAsync(); + // Prune to update internal state whenever health check is enabled/disabled + syncState("health check state " + (enabled ? "enabled" : "disabled")); } } @@ -393,9 +393,8 @@ public class PackageWatchdog { * Serializes and syncs health check requests with the {@link ExplicitHealthCheckController}. */ private void syncRequestsAsync() { - if (!mShortTaskHandler.hasCallbacks(this::syncRequests)) { - mShortTaskHandler.post(this::syncRequests); - } + mShortTaskHandler.removeCallbacks(this::syncRequests); + mShortTaskHandler.post(this::syncRequests); } /** @@ -414,6 +413,7 @@ public class PackageWatchdog { // Call outside lock to avoid holding lock when calling into the controller. if (packages != null) { + Slog.i(TAG, "Syncing health check requests for packages: " + packages); mHealthCheckController.syncRequests(packages); } } @@ -426,86 +426,73 @@ public class PackageWatchdog { * effectively behave as if the explicit health check hasn't passed for {@code packageName}. * * <p> {@code packageName} can still be considered failed if reported by - * {@link #onPackageFailure} before the package expires. + * {@link #onPackageFailureLocked} before the package expires. * * <p> Triggered by components outside the system server when they are fully functional after an * update. */ private void onHealthCheckPassed(String packageName) { Slog.i(TAG, "Health check passed for package: " + packageName); - boolean shouldUpdateFile = false; + boolean isStateChanged = false; + synchronized (mLock) { for (int observerIdx = 0; observerIdx < mAllObservers.size(); observerIdx++) { ObserverInternal observer = mAllObservers.valueAt(observerIdx); MonitoredPackage monitoredPackage = observer.mPackages.get(packageName); - if (monitoredPackage != null && !monitoredPackage.mHasPassedHealthCheck) { - monitoredPackage.mHasPassedHealthCheck = true; - shouldUpdateFile = true; + + if (monitoredPackage != null) { + int oldState = monitoredPackage.getHealthCheckStateLocked(); + int newState = monitoredPackage.tryPassHealthCheckLocked(); + isStateChanged |= oldState != newState; } } } - // So we can unbind from the service if this was the last result we expected - Slog.i(TAG, "Syncing health check requests, health check passed for " + packageName); - syncRequestsAsync(); - - if (shouldUpdateFile) { - saveToFileAsync(); + if (isStateChanged) { + syncState("health check passed for " + packageName); } } - private void onSupportedPackages(List<String> supportedPackages) { - boolean shouldUpdateFile = false; - boolean shouldPrune = false; + private void onSupportedPackages(List<PackageInfo> supportedPackages) { + boolean isStateChanged = false; + + Map<String, Long> supportedPackageTimeouts = new ArrayMap<>(); + Iterator<PackageInfo> it = supportedPackages.iterator(); + while (it.hasNext()) { + PackageInfo info = it.next(); + supportedPackageTimeouts.put(info.getPackageName(), info.getHealthCheckTimeoutMillis()); + } synchronized (mLock) { Slog.d(TAG, "Received supported packages " + supportedPackages); Iterator<ObserverInternal> oit = mAllObservers.values().iterator(); while (oit.hasNext()) { - ObserverInternal observer = oit.next(); - Iterator<MonitoredPackage> pit = - observer.mPackages.values().iterator(); + Iterator<MonitoredPackage> pit = oit.next().mPackages.values().iterator(); while (pit.hasNext()) { MonitoredPackage monitoredPackage = pit.next(); - String packageName = monitoredPackage.mName; - int healthCheckState = monitoredPackage.getHealthCheckState(); - - if (healthCheckState != MonitoredPackage.STATE_PASSED) { - // Have to update file, we will either transition state or reduce - // health check duration - shouldUpdateFile = true; - - if (supportedPackages.contains(packageName)) { - // Supports health check, transition to ACTIVE if not already. - // We need to prune packages earlier than already scheduled. - shouldPrune = true; - - // TODO: Get healthCheckDuration from supportedPackages - long healthCheckDuration = monitoredPackage.mDurationMs; - monitoredPackage.mHealthCheckDurationMs = Math.min(healthCheckDuration, - monitoredPackage.mDurationMs); - Slog.i(TAG, packageName + " health check state is now: ACTIVE(" - + monitoredPackage.mHealthCheckDurationMs + "ms)"); - } else { - // Does not support health check, transistion to PASSED - monitoredPackage.mHasPassedHealthCheck = true; - Slog.i(TAG, packageName + " health check state is now: PASSED"); - } + String packageName = monitoredPackage.getName(); + int oldState = monitoredPackage.getHealthCheckStateLocked(); + int newState; + + if (supportedPackageTimeouts.containsKey(packageName)) { + // Supported packages become ACTIVE if currently INACTIVE + newState = monitoredPackage.setHealthCheckActiveLocked( + supportedPackageTimeouts.get(packageName)); } else { - Slog.i(TAG, packageName + " does not support health check, state: PASSED"); + // Unsupported packages are marked as PASSED unless already FAILED + newState = monitoredPackage.tryPassHealthCheckLocked(); } + isStateChanged |= oldState != newState; } } } - if (shouldUpdateFile) { - saveToFileAsync(); - } - if (shouldPrune) { - pruneAndSchedule(); + if (isStateChanged) { + syncState("updated health check supported packages " + supportedPackages); } } + @GuardedBy("mLock") private Set<String> getPackagesPendingHealthChecksLocked() { Slog.d(TAG, "Getting all observed packages pending health checks"); Set<String> packages = new ArraySet<>(); @@ -516,8 +503,9 @@ public class PackageWatchdog { observer.mPackages.values().iterator(); while (pit.hasNext()) { MonitoredPackage monitoredPackage = pit.next(); - String packageName = monitoredPackage.mName; - if (!monitoredPackage.mHasPassedHealthCheck) { + String packageName = monitoredPackage.getName(); + if (monitoredPackage.getHealthCheckStateLocked() + != MonitoredPackage.STATE_PASSED) { packages.add(packageName); } } @@ -525,88 +513,91 @@ public class PackageWatchdog { return packages; } - /** Executes {@link #pruneObservers} and schedules the next execution. */ - private void pruneAndSchedule() { + /** + * Syncs the state of the observers. + * + * <p> Prunes all observers, saves new state to disk, syncs health check requests with the + * health check service and schedules the next state sync. + */ + private void syncState(String reason) { synchronized (mLock) { - long nextDurationToScheduleMs = getNextPruneScheduleMillisLocked(); - if (nextDurationToScheduleMs == Long.MAX_VALUE) { - Slog.i(TAG, "No monitored packages, ending prune"); - mDurationAtLastPrune = 0; - mUptimeAtLastPruneMs = 0; - return; - } - long uptimeMs = SystemClock.uptimeMillis(); - // O if not running - long elapsedDurationMs = mUptimeAtLastPruneMs == 0 - ? 0 : uptimeMs - mUptimeAtLastPruneMs; - // Less than O if unexpectedly didn't run yet even though - // we are past the last duration scheduled to run - long remainingDurationMs = mDurationAtLastPrune - elapsedDurationMs; - if (mUptimeAtLastPruneMs == 0 - || remainingDurationMs <= 0 - || nextDurationToScheduleMs < remainingDurationMs) { - // First schedule or an earlier reschedule - pruneObservers(elapsedDurationMs); - // We don't use Handler#hasCallbacks because we want to update the schedule delay - mShortTaskHandler.removeCallbacks(this::pruneAndSchedule); - mShortTaskHandler.postDelayed(this::pruneAndSchedule, nextDurationToScheduleMs); - mDurationAtLastPrune = nextDurationToScheduleMs; - mUptimeAtLastPruneMs = uptimeMs; - } + Slog.i(TAG, "Syncing state, reason: " + reason); + pruneObserversLocked(); + + saveToFileAsync(); + syncRequestsAsync(); + + // Done syncing state, schedule the next state sync + scheduleNextSyncStateLocked(); + } + } + + private void syncStateWithScheduledReason() { + syncState("scheduled"); + } + + @GuardedBy("mLock") + private void scheduleNextSyncStateLocked() { + long durationMs = getNextStateSyncMillisLocked(); + mShortTaskHandler.removeCallbacks(this::syncStateWithScheduledReason); + if (durationMs == Long.MAX_VALUE) { + Slog.i(TAG, "Cancelling state sync, nothing to sync"); + mUptimeAtLastStateSync = 0; + } else { + Slog.i(TAG, "Scheduling next state sync in " + durationMs + "ms"); + mUptimeAtLastStateSync = SystemClock.uptimeMillis(); + mShortTaskHandler.postDelayed(this::syncStateWithScheduledReason, durationMs); } } /** - * Returns the next time in millis to schedule a prune. + * Returns the next duration in millis to sync the watchdog state. * * @returns Long#MAX_VALUE if there are no observed packages. */ - private long getNextPruneScheduleMillisLocked() { + @GuardedBy("mLock") + private long getNextStateSyncMillisLocked() { long shortestDurationMs = Long.MAX_VALUE; for (int oIndex = 0; oIndex < mAllObservers.size(); oIndex++) { ArrayMap<String, MonitoredPackage> packages = mAllObservers.valueAt(oIndex).mPackages; for (int pIndex = 0; pIndex < packages.size(); pIndex++) { MonitoredPackage mp = packages.valueAt(pIndex); - long duration = Math.min(mp.mDurationMs, mp.mHealthCheckDurationMs); + long duration = mp.getShortestScheduleDurationMsLocked(); if (duration < shortestDurationMs) { shortestDurationMs = duration; } } } - Slog.i(TAG, "Next prune will be scheduled in " + shortestDurationMs + "ms"); - return shortestDurationMs; } /** - * Removes {@code elapsedMs} milliseconds from all durations on monitored packages. - * - * <p> Prunes all observers with {@link ObserverInternal#prunePackages} and discards observers - * without any packages left. + * Removes {@code elapsedMs} milliseconds from all durations on monitored packages + * and updates other internal state. */ - private void pruneObservers(long elapsedMs) { - if (elapsedMs == 0) { + @GuardedBy("mLock") + private void pruneObserversLocked() { + long elapsedMs = mUptimeAtLastStateSync == 0 + ? 0 : SystemClock.uptimeMillis() - mUptimeAtLastStateSync; + if (elapsedMs <= 0) { + Slog.i(TAG, "Not pruning observers, elapsed time: " + elapsedMs + "ms"); return; } - synchronized (mLock) { - Slog.d(TAG, "Removing expired packages after " + elapsedMs + "ms"); - Iterator<ObserverInternal> it = mAllObservers.values().iterator(); - while (it.hasNext()) { - ObserverInternal observer = it.next(); - Set<MonitoredPackage> failedPackages = - observer.prunePackages(elapsedMs); - if (!failedPackages.isEmpty()) { - onHealthCheckFailed(observer, failedPackages); - } - if (observer.mPackages.isEmpty()) { - Slog.i(TAG, "Discarding observer " + observer.mName + ". All packages expired"); - it.remove(); - } + + Slog.i(TAG, "Removing " + elapsedMs + "ms from all packages on all observers"); + Iterator<ObserverInternal> it = mAllObservers.values().iterator(); + while (it.hasNext()) { + ObserverInternal observer = it.next(); + Set<MonitoredPackage> failedPackages = + observer.prunePackagesLocked(elapsedMs); + if (!failedPackages.isEmpty()) { + onHealthCheckFailed(observer, failedPackages); + } + if (observer.mPackages.isEmpty()) { + Slog.i(TAG, "Discarding observer " + observer.mName + ". All packages expired"); + it.remove(); } } - Slog.i(TAG, "Syncing health check requests, pruned observers"); - syncRequestsAsync(); - saveToFileAsync(); } private void onHealthCheckFailed(ObserverInternal observer, @@ -618,7 +609,7 @@ public class PackageWatchdog { PackageManager pm = mContext.getPackageManager(); Iterator<MonitoredPackage> it = failedPackages.iterator(); while (it.hasNext()) { - String failedPackage = it.next().mName; + String failedPackage = it.next().getName(); long versionCode = 0; Slog.i(TAG, "Explicit health check failed for package " + failedPackage); try { @@ -673,6 +664,7 @@ public class PackageWatchdog { * Persists mAllObservers to file. Threshold information is ignored. */ private boolean saveToFile() { + Slog.i(TAG, "Saving observer state to file"); synchronized (mLock) { FileOutputStream stream; try { @@ -689,7 +681,7 @@ public class PackageWatchdog { out.startTag(null, TAG_PACKAGE_WATCHDOG); out.attribute(null, ATTR_VERSION, Integer.toString(DB_VERSION)); for (int oIndex = 0; oIndex < mAllObservers.size(); oIndex++) { - mAllObservers.valueAt(oIndex).write(out); + mAllObservers.valueAt(oIndex).writeLocked(out); } out.endTag(null, TAG_PACKAGE_WATCHDOG); out.endDocument(); @@ -730,7 +722,7 @@ public class PackageWatchdog { ObserverInternal(String name, List<MonitoredPackage> packages) { mName = name; - updatePackages(packages); + updatePackagesLocked(packages); } /** @@ -738,20 +730,13 @@ public class PackageWatchdog { * Does not persist any package failure thresholds. */ @GuardedBy("mLock") - public boolean write(XmlSerializer out) { + public boolean writeLocked(XmlSerializer out) { try { out.startTag(null, TAG_OBSERVER); out.attribute(null, ATTR_NAME, mName); for (int i = 0; i < mPackages.size(); i++) { MonitoredPackage p = mPackages.valueAt(i); - out.startTag(null, TAG_PACKAGE); - out.attribute(null, ATTR_NAME, p.mName); - out.attribute(null, ATTR_DURATION, String.valueOf(p.mDurationMs)); - out.attribute(null, ATTR_EXPLICIT_HEALTH_CHECK_DURATION, - String.valueOf(p.mHealthCheckDurationMs)); - out.attribute(null, ATTR_PASSED_HEALTH_CHECK, - String.valueOf(p.mHasPassedHealthCheck)); - out.endTag(null, TAG_PACKAGE); + p.writeLocked(out); } out.endTag(null, TAG_OBSERVER); return true; @@ -762,7 +747,7 @@ public class PackageWatchdog { } @GuardedBy("mLock") - public void updatePackages(List<MonitoredPackage> packages) { + public void updatePackagesLocked(List<MonitoredPackage> packages) { for (int pIndex = 0; pIndex < packages.size(); pIndex++) { MonitoredPackage p = packages.get(pIndex); mPackages.put(p.mName, p); @@ -775,37 +760,24 @@ public class PackageWatchdog { * observation. If any health check duration is less than 0, the health check result * is evaluated. * - * @returns a {@link Set} of packages that were removed from the observer without explicit + * @return a {@link Set} of packages that were removed from the observer without explicit * health check passing, or an empty list if no package expired for which an explicit health * check was still pending */ @GuardedBy("mLock") - private Set<MonitoredPackage> prunePackages(long elapsedMs) { + private Set<MonitoredPackage> prunePackagesLocked(long elapsedMs) { Set<MonitoredPackage> failedPackages = new ArraySet<>(); Iterator<MonitoredPackage> it = mPackages.values().iterator(); while (it.hasNext()) { MonitoredPackage p = it.next(); - int healthCheckState = p.getHealthCheckState(); - - // Handle health check timeouts - if (healthCheckState == MonitoredPackage.STATE_ACTIVE) { - // Only reduce duration if state is active - p.mHealthCheckDurationMs -= elapsedMs; - // Check duration after reducing duration - if (p.mHealthCheckDurationMs <= 0) { - failedPackages.add(p); - } + int oldState = p.getHealthCheckStateLocked(); + int newState = p.handleElapsedTimeLocked(elapsedMs); + if (oldState != MonitoredPackage.STATE_FAILED + && newState == MonitoredPackage.STATE_FAILED) { + Slog.i(TAG, "Package " + p.mName + " failed health check"); + failedPackages.add(p); } - - // Handle package expiry - p.mDurationMs -= elapsedMs; - // Check duration after reducing duration - if (p.mDurationMs <= 0) { - if (healthCheckState == MonitoredPackage.STATE_INACTIVE) { - Slog.w(TAG, "Package " + p.mName - + " expiring without starting health check, failing"); - failedPackages.add(p); - } + if (p.isExpiredLocked()) { it.remove(); } } @@ -817,10 +789,10 @@ public class PackageWatchdog { * @returns {@code true} if failure threshold is exceeded, {@code false} otherwise */ @GuardedBy("mLock") - public boolean onPackageFailure(String packageName) { + public boolean onPackageFailureLocked(String packageName) { MonitoredPackage p = mPackages.get(packageName); if (p != null) { - return p.onFailure(); + return p.onFailureLocked(); } return false; } @@ -877,33 +849,45 @@ public class PackageWatchdog { } /** - * Represents a package along with the time it should be monitored for. + * Represents a package and its health check state along with the time + * it should be monitored for. * * <p> Note, the PackageWatchdog#mLock must always be held when reading or writing * instances of this class. */ - //TODO(b/120598832): Remove 'm' from non-private fields - private static class MonitoredPackage { + static class MonitoredPackage { // Health check states + // TODO(b/120598832): Prefix with HEALTH_CHECK // mName has not passed health check but has requested a health check - public static int STATE_ACTIVE = 0; + public static final int STATE_ACTIVE = 0; // mName has not passed health check and has not requested a health check - public static int STATE_INACTIVE = 1; + public static final int STATE_INACTIVE = 1; // mName has passed health check - public static int STATE_PASSED = 2; - - public final String mName; - // Whether an explicit health check has passed + public static final int STATE_PASSED = 2; + // mName has failed health check + public static final int STATE_FAILED = 3; + + //TODO(b/120598832): VersionedPackage? + private final String mName; + // One of STATE_[ACTIVE|INACTIVE|PASSED|FAILED]. Updated on construction and after + // methods that could change the health check state: handleElapsedTimeLocked and + // tryPassHealthCheckLocked + private int mHealthCheckState = STATE_INACTIVE; + // Whether an explicit health check has passed. + // This value in addition with mHealthCheckDurationMs determines the health check state + // of the package, see #getHealthCheckStateLocked @GuardedBy("mLock") - public boolean mHasPassedHealthCheck; - // System uptime duration to monitor package + private boolean mHasPassedHealthCheck; + // System uptime duration to monitor package. @GuardedBy("mLock") - public long mDurationMs; + private long mDurationMs; // System uptime duration to check the result of an explicit health check // Initially, MAX_VALUE until we get a value from the health check service // and request health checks. + // This value in addition with mHasPassedHealthCheck determines the health check state + // of the package, see #getHealthCheckStateLocked @GuardedBy("mLock") - public long mHealthCheckDurationMs = Long.MAX_VALUE; + private long mHealthCheckDurationMs = Long.MAX_VALUE; // System uptime of first package failure @GuardedBy("mLock") private long mUptimeStartMs; @@ -921,6 +905,20 @@ public class PackageWatchdog { mDurationMs = durationMs; mHealthCheckDurationMs = healthCheckDurationMs; mHasPassedHealthCheck = hasPassedHealthCheck; + updateHealthCheckStateLocked(); + } + + /** Writes the salient fields to disk using {@code out}. */ + @GuardedBy("mLock") + public void writeLocked(XmlSerializer out) throws IOException { + out.startTag(null, TAG_PACKAGE); + out.attribute(null, ATTR_NAME, mName); + out.attribute(null, ATTR_DURATION, String.valueOf(mDurationMs)); + out.attribute(null, ATTR_EXPLICIT_HEALTH_CHECK_DURATION, + String.valueOf(mHealthCheckDurationMs)); + out.attribute(null, ATTR_PASSED_HEALTH_CHECK, + String.valueOf(mHasPassedHealthCheck)); + out.endTag(null, TAG_PACKAGE); } /** @@ -929,7 +927,7 @@ public class PackageWatchdog { * @return {@code true} if failure count exceeds a threshold, {@code false} otherwise */ @GuardedBy("mLock") - public boolean onFailure() { + public boolean onFailureLocked() { final long now = SystemClock.uptimeMillis(); final long duration = now - mUptimeStartMs; if (duration > TRIGGER_DURATION_MS) { @@ -949,18 +947,141 @@ public class PackageWatchdog { } /** - * Returns any of the health check states of {@link #STATE_ACTIVE}, + * Sets the initial health check duration. + * + * @return the new health check state + */ + @GuardedBy("mLock") + public int setHealthCheckActiveLocked(long initialHealthCheckDurationMs) { + if (initialHealthCheckDurationMs <= 0) { + Slog.wtf(TAG, "Cannot set non-positive health check duration " + + initialHealthCheckDurationMs + "ms for package " + mName + + ". Using total duration " + mDurationMs + "ms instead"); + initialHealthCheckDurationMs = mDurationMs; + } + if (mHealthCheckState == STATE_INACTIVE) { + // Transitions to ACTIVE + mHealthCheckDurationMs = initialHealthCheckDurationMs; + } + return updateHealthCheckStateLocked(); + } + + /** + * Updates the monitoring durations of the package. + * + * @return the new health check state + */ + @GuardedBy("mLock") + public int handleElapsedTimeLocked(long elapsedMs) { + if (elapsedMs <= 0) { + Slog.w(TAG, "Cannot handle non-positive elapsed time for package " + mName); + return mHealthCheckState; + } + // Transitions to FAILED if now <= 0 and health check not passed + mDurationMs -= elapsedMs; + if (mHealthCheckState == STATE_ACTIVE) { + // We only update health check durations if we have #setHealthCheckActiveLocked + // This ensures we don't leave the INACTIVE state for an unexpected elapsed time + // Transitions to FAILED if now <= 0 and health check not passed + mHealthCheckDurationMs -= elapsedMs; + } + return updateHealthCheckStateLocked(); + } + + /** + * Marks the health check as passed and transitions to {@link #STATE_PASSED} + * if not yet {@link #STATE_FAILED}. + * + * @return the new health check state + */ + @GuardedBy("mLock") + public int tryPassHealthCheckLocked() { + if (mHealthCheckState != STATE_FAILED) { + // FAILED is a final state so only pass if we haven't failed + // Transition to PASSED + mHasPassedHealthCheck = true; + } + return updateHealthCheckStateLocked(); + } + + /** Returns the monitored package name. */ + private String getName() { + return mName; + } + + //TODO(b/120598832): IntDef + /** + * Returns the current health check state, any of {@link #STATE_ACTIVE}, * {@link #STATE_INACTIVE} or {@link #STATE_PASSED} */ @GuardedBy("mLock") - public int getHealthCheckState() { + public int getHealthCheckStateLocked() { + return mHealthCheckState; + } + + /** + * Returns the shortest duration before the package should be scheduled for a prune. + * + * @return the duration or {@link Long#MAX_VALUE} if the package should not be scheduled + */ + @GuardedBy("mLock") + public long getShortestScheduleDurationMsLocked() { + return Math.min(toPositive(mDurationMs), toPositive(mHealthCheckDurationMs)); + } + + /** + * Returns {@code true} if the total duration left to monitor the package is less than or + * equal to 0 {@code false} otherwise. + */ + @GuardedBy("mLock") + public boolean isExpiredLocked() { + return mDurationMs <= 0; + } + + /** + * Updates the health check state based on {@link #mHasPassedHealthCheck} + * and {@link #mHealthCheckDurationMs}. + * + * @return the new health check state + */ + @GuardedBy("mLock") + private int updateHealthCheckStateLocked() { + int oldState = mHealthCheckState; if (mHasPassedHealthCheck) { - return STATE_PASSED; + // Set final state first to avoid ambiguity + mHealthCheckState = STATE_PASSED; + } else if (mHealthCheckDurationMs <= 0 || mDurationMs <= 0) { + // Set final state first to avoid ambiguity + mHealthCheckState = STATE_FAILED; } else if (mHealthCheckDurationMs == Long.MAX_VALUE) { - return STATE_INACTIVE; + mHealthCheckState = STATE_INACTIVE; } else { - return STATE_ACTIVE; + mHealthCheckState = STATE_ACTIVE; + } + Slog.i(TAG, "Updated health check state for package " + mName + ": " + + toString(oldState) + " -> " + toString(mHealthCheckState)); + return mHealthCheckState; + } + + /** Returns a {@link String} representation of the current health check state. */ + private static String toString(int state) { + switch (state) { + case STATE_ACTIVE: + return "ACTIVE"; + case STATE_INACTIVE: + return "INACTIVE"; + case STATE_PASSED: + return "PASSED"; + case STATE_FAILED: + return "FAILED"; + default: + return "UNKNOWN"; } } + + /** Returns {@code value} if it is greater than 0 or {@link Long#MAX_VALUE} otherwise. */ + private static long toPositive(long value) { + return value > 0 ? value : Long.MAX_VALUE; + } } } diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index ac584e9571fc..af78b769ce8c 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -1172,7 +1172,11 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { .filter(i -> TelephonyPermissions.checkCarrierPrivilegeForSubId(i)) .findFirst().getAsInt(); } catch (NoSuchElementException ex) { - log("notifyCarrierNetworkChange without carrier privilege"); + loge("notifyCarrierNetworkChange without carrier privilege"); + } + // the active subId does not have carrier privilege. + if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + throw new SecurityException("notifyCarrierNetworkChange without carrier privilege"); } int phoneId = SubscriptionManager.getPhoneId(subId); @@ -2272,6 +2276,10 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { Rlog.d(TAG, s); } + private static void loge(String s) { + Rlog.e(TAG, s); + } + boolean idMatch(int rSubId, int subId, int phoneId) { if(subId < 0) { diff --git a/services/core/java/com/android/server/TestNetworkService.java b/services/core/java/com/android/server/TestNetworkService.java index e64ab78d1ed2..40bf7bccff72 100644 --- a/services/core/java/com/android/server/TestNetworkService.java +++ b/services/core/java/com/android/server/TestNetworkService.java @@ -60,6 +60,7 @@ class TestNetworkService extends ITestNetworkManager.Stub { @NonNull private static final String TAG = TestNetworkService.class.getSimpleName(); @NonNull private static final String TEST_NETWORK_TYPE = "TEST_NETWORK"; @NonNull private static final String TEST_TUN_PREFIX = "testtun"; + @NonNull private static final String TEST_TAP_PREFIX = "testtap"; @NonNull private static final AtomicInteger sTestTunIndex = new AtomicInteger(); @NonNull private final Context mContext; @@ -70,7 +71,7 @@ class TestNetworkService extends ITestNetworkManager.Stub { @NonNull private final Handler mHandler; // Native method stubs - private static native int jniCreateTun(@NonNull String iface); + private static native int jniCreateTunTap(boolean isTun, @NonNull String iface); @VisibleForTesting protected TestNetworkService( @@ -85,23 +86,23 @@ class TestNetworkService extends ITestNetworkManager.Stub { } /** - * Create a TUN interface with the given interface name and link addresses + * Create a TUN or TAP interface with the given interface name and link addresses * - * <p>This method will return the FileDescriptor to the TUN interface. Close it to tear down the - * TUN interface. + * <p>This method will return the FileDescriptor to the interface. Close it to tear down the + * interface. */ - @Override - public TestNetworkInterface createTunInterface(@NonNull LinkAddress[] linkAddrs) { + private TestNetworkInterface createInterface(boolean isTun, LinkAddress[] linkAddrs) { enforceTestNetworkPermissions(mContext); checkNotNull(linkAddrs, "missing linkAddrs"); - String iface = TEST_TUN_PREFIX + sTestTunIndex.getAndIncrement(); + String ifacePrefix = isTun ? TEST_TUN_PREFIX : TEST_TAP_PREFIX; + String iface = ifacePrefix + sTestTunIndex.getAndIncrement(); return Binder.withCleanCallingIdentity( () -> { try { ParcelFileDescriptor tunIntf = - ParcelFileDescriptor.adoptFd(jniCreateTun(iface)); + ParcelFileDescriptor.adoptFd(jniCreateTunTap(isTun, iface)); for (LinkAddress addr : linkAddrs) { mNetd.interfaceAddAddress( iface, @@ -116,6 +117,28 @@ class TestNetworkService extends ITestNetworkManager.Stub { }); } + /** + * Create a TUN interface with the given interface name and link addresses + * + * <p>This method will return the FileDescriptor to the TUN interface. Close it to tear down the + * TUN interface. + */ + @Override + public TestNetworkInterface createTunInterface(@NonNull LinkAddress[] linkAddrs) { + return createInterface(true, linkAddrs); + } + + /** + * Create a TAP interface with the given interface name + * + * <p>This method will return the FileDescriptor to the TAP interface. Close it to tear down the + * TAP interface. + */ + @Override + public TestNetworkInterface createTapInterface() { + return createInterface(false, new LinkAddress[0]); + } + // Tracker for TestNetworkAgents @GuardedBy("mTestNetworkTracker") @NonNull @@ -310,7 +333,7 @@ class TestNetworkService extends ITestNetworkManager.Stub { public void teardownTestNetwork(int netId) { enforceTestNetworkPermissions(mContext); - TestNetworkAgent agent; + final TestNetworkAgent agent; synchronized (mTestNetworkTracker) { agent = mTestNetworkTracker.get(netId); } @@ -325,14 +348,10 @@ class TestNetworkService extends ITestNetworkManager.Stub { agent.teardown(); } - // STOPSHIP: Change this back to android.Manifest.permission.MANAGE_TEST_NETWORKS - private static final String PERMISSION_NAME = "dummy"; + private static final String PERMISSION_NAME = + android.Manifest.permission.MANAGE_TEST_NETWORKS; public static void enforceTestNetworkPermissions(@NonNull Context context) { - // STOPSHIP: Re-enable these checks. Disabled until adoptShellPermissionIdentity() can be - // called from CTS test code. - if (false) { - context.enforceCallingOrSelfPermission(PERMISSION_NAME, "TestNetworkService"); - } + context.enforceCallingOrSelfPermission(PERMISSION_NAME, "TestNetworkService"); } } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 1757c9816355..0b9e3bb1b99e 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -6147,8 +6147,9 @@ public class ActivityManagerService extends IActivityManager.Stub } @Override - public void moveTaskToFront(int taskId, int flags, Bundle bOptions) { - mActivityTaskManager.moveTaskToFront(taskId, flags, bOptions); + public void moveTaskToFront(IApplicationThread appThread, String callingPackage, int taskId, + int flags, Bundle bOptions) { + mActivityTaskManager.moveTaskToFront(appThread, callingPackage, taskId, flags, bOptions); } /** diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index f1f40d49ccd1..9780a7f71970 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -62,6 +62,7 @@ import android.os.AppZygote; import android.os.Binder; import android.os.Build; import android.os.Bundle; +import android.os.GraphicsEnvironment; import android.os.Handler; import android.os.IBinder; import android.os.Looper; @@ -703,6 +704,13 @@ public final class ProcessList { return prefix + "+" + Integer.toString(diff); } + private static boolean shouldUseSystemGraphicsDriver(Context context, Bundle coreSettings, + ApplicationInfo applicationInfo) { + final boolean shouldUseGameDriver = + GraphicsEnvironment.shouldUseGameDriver(context, coreSettings, applicationInfo); + return !shouldUseGameDriver; + } + public static String makeOomAdjString(int setAdj, boolean compact) { if (setAdj >= ProcessList.CACHED_APP_MIN_ADJ) { return buildOomTag("cch", "cch", " ", setAdj, @@ -1783,6 +1791,8 @@ public final class ProcessList { final StorageManagerInternal storageManagerInternal = LocalServices.getService(StorageManagerInternal.class); final String sandboxId = storageManagerInternal.getSandboxId(app.info.packageName); + final boolean useSystemGraphicsDriver = shouldUseSystemGraphicsDriver(mService.mContext, + mService.mCoreSettingsObserver.getCoreSettingsLocked(), app.info); Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "Start proc: " + app.processName); checkSlow(startTime, "startProcess: asking zygote to start proc"); @@ -1793,7 +1803,8 @@ public final class ProcessList { app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet, app.info.dataDir, null, app.info.packageName, packageNames, sandboxId, - new String[] {PROC_START_SEQ_IDENT + app.startSeq}); + new String[] {PROC_START_SEQ_IDENT + app.startSeq}, + useSystemGraphicsDriver); } else if (hostingType.equals("app_zygote")) { final AppZygote appZygote = createAppZygoteForProcessIfNeeded(app); @@ -1802,14 +1813,16 @@ public final class ProcessList { app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet, app.info.dataDir, null, app.info.packageName, packageNames, sandboxId, /*useUnspecializedAppProcessPool=*/ false, - new String[] {PROC_START_SEQ_IDENT + app.startSeq}); + new String[] {PROC_START_SEQ_IDENT + app.startSeq}, + useSystemGraphicsDriver); } else { startResult = Process.start(entryPoint, app.processName, uid, uid, gids, runtimeFlags, mountExternal, app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet, app.info.dataDir, invokeWith, app.info.packageName, packageNames, sandboxId, - new String[] {PROC_START_SEQ_IDENT + app.startSeq}); + new String[] {PROC_START_SEQ_IDENT + app.startSeq}, + useSystemGraphicsDriver); } checkSlow(startTime, "startProcess: returned from zygote!"); return startResult; diff --git a/services/core/java/com/android/server/biometrics/AuthenticationClient.java b/services/core/java/com/android/server/biometrics/AuthenticationClient.java index f7278d2601c3..b2c5c053528e 100644 --- a/services/core/java/com/android/server/biometrics/AuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/AuthenticationClient.java @@ -120,8 +120,8 @@ public abstract class AuthenticationClient extends ClientMonitor { @Override public boolean onAuthenticated(BiometricAuthenticator.Identifier identifier, boolean authenticated, ArrayList<Byte> token) { - super.logOnAuthenticated(authenticated, mRequireConfirmation, getTargetUserId(), - isBiometricPrompt()); + super.logOnAuthenticated(getContext(), authenticated, mRequireConfirmation, + getTargetUserId(), isBiometricPrompt()); final BiometricServiceBase.ServiceListener listener = getListener(); diff --git a/services/core/java/com/android/server/biometrics/BiometricService.java b/services/core/java/com/android/server/biometrics/BiometricService.java index 153133a6c669..4c59e608398c 100644 --- a/services/core/java/com/android/server/biometrics/BiometricService.java +++ b/services/core/java/com/android/server/biometrics/BiometricService.java @@ -1054,7 +1054,8 @@ public class BiometricService extends SystemService { BiometricsProtoEnums.CLIENT_BIOMETRIC_PROMPT, mCurrentAuthSession.mRequireConfirmation, StatsLog.BIOMETRIC_AUTHENTICATED__STATE__CONFIRMED, - latency); + latency, + Utils.isDebugEnabled(getContext(), mCurrentAuthSession.mUserId)); } else { int error = reason == BiometricPrompt.DISMISSED_REASON_NEGATIVE ? BiometricConstants.BIOMETRIC_ERROR_NEGATIVE_BUTTON @@ -1077,7 +1078,8 @@ public class BiometricService extends SystemService { BiometricsProtoEnums.ACTION_AUTHENTICATE, BiometricsProtoEnums.CLIENT_BIOMETRIC_PROMPT, error, - 0 /* vendorCode */); + 0 /* vendorCode */, + Utils.isDebugEnabled(getContext(), mCurrentAuthSession.mUserId)); } } diff --git a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java index 18c2edc086dc..3f856d3e8eb2 100644 --- a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java +++ b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java @@ -1231,6 +1231,7 @@ public abstract class BiometricServiceBase extends SystemService if (mPendingClient != null) { Slog.d(getTag(), "Enumerate finished, starting pending client"); startClient(mPendingClient, false /* initiatedByClient */); + mPendingClient = null; } } } diff --git a/services/core/java/com/android/server/biometrics/ClientMonitor.java b/services/core/java/com/android/server/biometrics/ClientMonitor.java index 87b9eaaa9cbb..006558080ef0 100644 --- a/services/core/java/com/android/server/biometrics/ClientMonitor.java +++ b/services/core/java/com/android/server/biometrics/ClientMonitor.java @@ -157,7 +157,7 @@ public abstract class ClientMonitor extends LoggableMonitor implements IBinder.D * @return true if client should be removed */ public boolean onAcquired(int acquiredInfo, int vendorCode) { - super.logOnAcquired(acquiredInfo, vendorCode, getTargetUserId()); + super.logOnAcquired(mContext, acquiredInfo, vendorCode, getTargetUserId()); if (DEBUG) Slog.v(getLogTag(), "Acquired: " + acquiredInfo + " " + vendorCode); try { if (mListener != null) { @@ -182,7 +182,7 @@ public abstract class ClientMonitor extends LoggableMonitor implements IBinder.D * @return true if client should be removed */ public boolean onError(long deviceId, int error, int vendorCode) { - super.logOnError(error, vendorCode, getTargetUserId()); + super.logOnError(mContext, error, vendorCode, getTargetUserId()); try { if (mListener != null) { mListener.onError(deviceId, error, vendorCode, getCookie()); diff --git a/services/core/java/com/android/server/biometrics/LoggableMonitor.java b/services/core/java/com/android/server/biometrics/LoggableMonitor.java index b0577cd79ac4..9c040884772c 100644 --- a/services/core/java/com/android/server/biometrics/LoggableMonitor.java +++ b/services/core/java/com/android/server/biometrics/LoggableMonitor.java @@ -16,6 +16,7 @@ package com.android.server.biometrics; +import android.content.Context; import android.hardware.biometrics.BiometricConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.face.FaceManager; @@ -61,7 +62,8 @@ public abstract class LoggableMonitor { return BiometricsProtoEnums.CLIENT_UNKNOWN; } - protected final void logOnAcquired(int acquiredInfo, int vendorCode, int targetUserId) { + protected final void logOnAcquired(Context context, int acquiredInfo, int vendorCode, + int targetUserId) { if (statsModality() == BiometricsProtoEnums.MODALITY_FACE) { if (acquiredInfo == FaceManager.FACE_ACQUIRED_START) { mFirstAcquireTimeMs = System.currentTimeMillis(); @@ -87,10 +89,11 @@ public abstract class LoggableMonitor { statsAction(), statsClient(), acquiredInfo, - 0 /* vendorCode */); // Don't log vendorCode for now + 0 /* vendorCode */, // Don't log vendorCode for now + Utils.isDebugEnabled(context, targetUserId)); } - protected final void logOnError(int error, int vendorCode, int targetUserId) { + protected final void logOnError(Context context, int error, int vendorCode, int targetUserId) { if (DEBUG) { Slog.v(TAG, "Error! Modality: " + statsModality() + ", User: " + targetUserId @@ -107,11 +110,12 @@ public abstract class LoggableMonitor { statsAction(), statsClient(), error, - vendorCode); + vendorCode, + Utils.isDebugEnabled(context, targetUserId)); } - protected final void logOnAuthenticated(boolean authenticated, boolean requireConfirmation, - int targetUserId, boolean isBiometricPrompt) { + protected final void logOnAuthenticated(Context context, boolean authenticated, + boolean requireConfirmation, int targetUserId, boolean isBiometricPrompt) { int authState = StatsLog.BIOMETRIC_AUTHENTICATED__STATE__UNKNOWN; if (!authenticated) { authState = StatsLog.BIOMETRIC_AUTHENTICATED__STATE__REJECTED; @@ -148,7 +152,8 @@ public abstract class LoggableMonitor { statsClient(), requireConfirmation, authState, - latency); + latency, + Utils.isDebugEnabled(context, targetUserId)); } protected final void logOnEnrolled(int targetUserId, long latency, boolean enrollSuccessful) { diff --git a/services/core/java/com/android/server/biometrics/Utils.java b/services/core/java/com/android/server/biometrics/Utils.java new file mode 100644 index 000000000000..5544bede92f2 --- /dev/null +++ b/services/core/java/com/android/server/biometrics/Utils.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.biometrics; + +import android.content.Context; +import android.os.Build; +import android.provider.Settings; + +public class Utils { + public static boolean isDebugEnabled(Context context, int targetUserId) { + if (!(Build.IS_ENG || Build.IS_USERDEBUG)) { + return false; + } + + if (Settings.Secure.getIntForUser(context.getContentResolver(), + Settings.Secure.BIOMETRIC_DEBUG_ENABLED, 0, + targetUserId) == 0) { + return false; + } + return true; + } +} diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index a935c652be53..74fb4b27100e 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -841,6 +841,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { @Override public void commit(@NonNull IntentSender statusReceiver, boolean forTransfer) { + if (hasParentSessionId()) { + throw new IllegalStateException( + "Session " + sessionId + " is a child of multi-package session " + + mParentSessionId + " and may not be committed directly."); + } if (!markAsCommitted(statusReceiver, forTransfer)) { return; } @@ -2037,6 +2042,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { @Override public void abandon() { + if (hasParentSessionId()) { + throw new IllegalStateException( + "Session " + sessionId + " is a child of multi-package session " + + mParentSessionId + " and may not be abandoned directly."); + } synchronized (mLock) { assertCallerIsOwnerOrRootLocked(); @@ -2079,13 +2089,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } @Override - public void addChildSessionId(int childSessionId) throws RemoteException { + public void addChildSessionId(int childSessionId) { final PackageInstallerSession childSession = mSessionProvider.getSession(childSessionId); - if (childSession == null) { - throw new RemoteException("Unable to add child.", - new PackageManagerException("Child session " + childSessionId - + " does not exist"), - false, true).rethrowAsRuntimeException(); + if (childSession == null + || (childSession.hasParentSessionId() && childSession.mParentSessionId != sessionId) + || childSession.mCommitted + || childSession.mDestroyed) { + throw new IllegalStateException("Unable to add child session " + childSessionId + + " as it does not exist or is in an invalid state."); } synchronized (mLock) { assertCallerIsOwnerOrRootLocked(); @@ -2124,11 +2135,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { synchronized (mLock) { if (parentSessionId != SessionInfo.INVALID_ID && mParentSessionId != SessionInfo.INVALID_ID) { - throw new RemoteException("Unable to set parent session.", - new PackageManagerException( - "The parent of " + sessionId + " is" + " already set to " - + mParentSessionId), false, - true).rethrowAsRuntimeException(); + throw new IllegalStateException("The parent of " + sessionId + " is" + " already" + + "set to " + mParentSessionId); } this.mParentSessionId = parentSessionId; } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 928b8f651fd8..c68974b30db9 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -10213,7 +10213,7 @@ public class PackageManagerService extends IPackageManager.Stub } } - private void destroyAppProfilesLIF(PackageParser.Package pkg, int userId) { + private void destroyAppProfilesLIF(PackageParser.Package pkg) { if (pkg == null) { Slog.wtf(TAG, "Package was null!", new Throwable()); return; @@ -18315,8 +18315,8 @@ public class PackageManagerService extends IPackageManager.Stub } disabledSystemPs = mSettings.getDisabledSystemPkgLPr(packageName); - // Save this off before we delete the package. When deleting a stub application - // we always set the enabled state to 'disabled'. + // Save the enabled state before we delete the package. When deleting a stub + // application we always set the enabled state to 'disabled'. origEnabledState = uninstalledPs == null ? COMPONENT_ENABLED_STATE_DEFAULT : uninstalledPs.getEnabled(userId); // Static shared libs can be declared by any package, so let us not @@ -18590,7 +18590,7 @@ public class PackageManagerService extends IPackageManager.Stub } destroyAppDataLIF(resolvedPkg, UserHandle.USER_ALL, StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE); - destroyAppProfilesLIF(resolvedPkg, UserHandle.USER_ALL); + destroyAppProfilesLIF(resolvedPkg); if (outInfo != null) { outInfo.dataRemoved = true; } @@ -19317,6 +19317,8 @@ public class PackageManagerService extends IPackageManager.Stub pkg = mPackages.get(ps.name); } + destroyAppProfilesLIF(pkg); + final int[] userIds = (userId == UserHandle.USER_ALL) ? sUserManager.getUserIds() : new int[] {userId}; for (int nextUserId : userIds) { @@ -19325,11 +19327,9 @@ public class PackageManagerService extends IPackageManager.Stub + nextUserId); } - destroyAppDataLIF(pkg, userId, + destroyAppDataLIF(pkg, nextUserId, StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE); - destroyAppProfilesLIF(pkg, userId); - clearDefaultBrowserIfNeededForUser(ps.name, userId); - removeKeystoreDataIfNeeded(nextUserId, ps.appId); + clearDefaultBrowserIfNeededForUser(ps.name, nextUserId); synchronized (mPackages) { if (clearPackagePreferredActivitiesLPw(ps.name, nextUserId)) { scheduleWritePackageRestrictionsLocked(nextUserId); diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index 1908b3f8b366..72d543862c58 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -487,7 +487,7 @@ public class StagingManager { } try { apkParentSession.addChildSessionId(apkChildSession.sessionId); - } catch (RemoteException e) { + } catch (IllegalStateException e) { Slog.e(TAG, "Failed to add a child session for installing the APK files", e); return false; } diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java index 35fa9406eb79..108eaf680291 100644 --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java @@ -108,7 +108,10 @@ public final class DefaultPermissionGrantPolicy { @PackageManager.PackageInfoFlags private static final int DEFAULT_PACKAGE_INFO_QUERY_FLAGS = - PackageManager.MATCH_UNINSTALLED_PACKAGES | PackageManager.GET_PERMISSIONS; + PackageManager.MATCH_UNINSTALLED_PACKAGES + | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS + | PackageManager.GET_PERMISSIONS; private static final String AUDIO_MIME_TYPE = "audio/mpeg"; @@ -1353,8 +1356,7 @@ public final class DefaultPermissionGrantPolicy { } private PackageInfo getSystemPackageInfo(String pkg) { - //TODO not MATCH_SYSTEM_ONLY? - return getPackageInfo(pkg, PackageManager.MATCH_FACTORY_ONLY); + return getPackageInfo(pkg, PackageManager.MATCH_SYSTEM_ONLY); } private PackageInfo getPackageInfo(String pkg) { 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 c75a462d5bc1..dd63e3ca290e 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -18,12 +18,6 @@ package com.android.server.pm.permission; import static android.Manifest.permission.READ_EXTERNAL_STORAGE; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; -import static android.app.AppOpsManager.MODE_ALLOWED; -import static android.app.AppOpsManager.MODE_ERRORED; -import static android.app.AppOpsManager.MODE_FOREGROUND; -import static android.app.AppOpsManager.OP_NONE; -import static android.app.AppOpsManager.permissionToOp; -import static android.app.AppOpsManager.permissionToOpCode; import static android.content.pm.PackageManager.FLAGS_PERMISSION_RESTRICTION_ANY_EXEMPT; import static android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION; import static android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT; @@ -40,8 +34,6 @@ import static android.content.pm.PackageManager.FLAG_PERMISSION_WHITELIST_UPGRAD import static android.content.pm.PackageManager.MASK_PERMISSION_FLAGS_ALL; import static android.content.pm.PackageManager.RESTRICTED_PERMISSIONS_ENABLED; import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER; -import static android.os.UserHandle.getAppId; -import static android.os.UserHandle.getUid; import static com.android.server.pm.PackageManagerService.DEBUG_INSTALL; import static com.android.server.pm.PackageManagerService.DEBUG_PACKAGE_SCANNING; @@ -56,8 +48,6 @@ import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; -import android.app.AppOpsManager; -import android.app.AppOpsManagerInternal; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.PackageManager.PermissionWhitelistFlags; @@ -1309,9 +1299,6 @@ public class PermissionManagerService { updatedUserIds); updatedUserIds = setInitialGrantForNewImplicitPermissionsLocked(origPermissions, permissionsState, pkg, updatedUserIds); - - // TODO: Move to PermissionPolicyService - setAppOpsLocked(permissionsState, pkg); } // Persist the runtime permissions state for users with changes. If permissions @@ -1327,23 +1314,6 @@ public class PermissionManagerService { } /** - * Set app op for a app-op related to a permission. - * - * @param permission The permission the app-op belongs to - * @param pkg The package the permission belongs to - * @param userId The user to be changed - * @param mode The new mode to set - */ - private void setAppOpMode(@NonNull String permission, @NonNull PackageParser.Package pkg, - @UserIdInt int userId, int mode) { - AppOpsManagerInternal appOpsInternal = LocalServices.getService( - AppOpsManagerInternal.class); - - appOpsInternal.setUidMode(permissionToOpCode(permission), - getUid(userId, getAppId(pkg.applicationInfo.uid)), mode); - } - - /** * Revoke permissions that are not implicit anymore and that have * {@link PackageManager#FLAG_PERMISSION_REVOKE_WHEN_REQUESTED} set. * @@ -1357,8 +1327,6 @@ public class PermissionManagerService { private @NonNull int[] revokePermissionsNoLongerImplicitLocked( @NonNull PermissionsState ps, @NonNull PackageParser.Package pkg, @NonNull int[] updatedUserIds) { - AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class); - String pkgName = pkg.packageName; boolean supportsRuntimePermissions = pkg.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.M; @@ -1390,23 +1358,6 @@ public class PermissionManagerService { } flagsToRemove |= USER_PERMISSION_FLAGS; - - List<String> fgPerms = mBackgroundPermissions.get(permission); - if (fgPerms != null) { - int numFgPerms = fgPerms.size(); - for (int fgPermNum = 0; fgPermNum < numFgPerms; fgPermNum++) { - String fgPerm = fgPerms.get(fgPermNum); - - int mode = appOpsManager.unsafeCheckOpRaw( - permissionToOp(fgPerm), - getUid(userId, getAppId(pkg.applicationInfo.uid)), - pkgName); - - if (mode == MODE_ALLOWED) { - setAppOpMode(fgPerm, pkg, userId, MODE_FOREGROUND); - } - } - } } ps.updatePermissionFlags(bp, userId, flagsToRemove, 0); @@ -1438,91 +1389,39 @@ public class PermissionManagerService { @NonNull ArraySet<String> sourcePerms, @NonNull String newPerm, @NonNull PermissionsState ps, @NonNull PackageParser.Package pkg, @UserIdInt int userId) { - AppOpsManagerInternal appOpsManager = LocalServices.getService(AppOpsManagerInternal.class); String pkgName = pkg.packageName; + boolean isGranted = false; + int flags = 0; - if (pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) { - if (permissionToOp(newPerm) != null) { - int mostLenientSourceMode = MODE_ERRORED; - int flags = 0; - - // Find most lenient source permission state. - int numSourcePerms = sourcePerms.size(); - for (int i = 0; i < numSourcePerms; i++) { - String sourcePerm = sourcePerms.valueAt(i); - - if (ps.hasRuntimePermission(sourcePerm, userId)) { - int sourceOp = permissionToOpCode(sourcePerm); - - if (sourceOp != OP_NONE) { - int mode = appOpsManager.checkOperationUnchecked(sourceOp, - getUid(userId, getAppId(pkg.applicationInfo.uid)), pkgName); - - if (mode == MODE_FOREGROUND || mode == MODE_ERRORED) { - Log.wtf(TAG, "split permission" + sourcePerm + " has app-op state " - + AppOpsManager.MODE_NAMES[mode]); - - continue; - } - - // Leniency order: allowed < ignored < default - if (mode < mostLenientSourceMode) { - mostLenientSourceMode = mode; - flags = ps.getPermissionFlags(sourcePerm, userId); - } else if (mode == mostLenientSourceMode) { - flags |= ps.getPermissionFlags(sourcePerm, userId); - } - } - } + int numSourcePerm = sourcePerms.size(); + for (int i = 0; i < numSourcePerm; i++) { + String sourcePerm = sourcePerms.valueAt(i); + if ((ps.hasRuntimePermission(sourcePerm, userId)) + || ps.hasInstallPermission(sourcePerm)) { + if (!isGranted) { + flags = 0; } - if (mostLenientSourceMode != MODE_ERRORED) { - if (DEBUG_PERMISSIONS) { - Slog.i(TAG, newPerm + " inherits app-ops state " + mostLenientSourceMode - + " from " + sourcePerms + " for " + pkgName); - } - - setAppOpMode(newPerm, pkg, userId, mostLenientSourceMode); - - // Add permission flags - ps.updatePermissionFlags(mSettings.getPermission(newPerm), userId, flags, - flags); - } - } - } else { - boolean isGranted = false; - int flags = 0; - - int numSourcePerm = sourcePerms.size(); - for (int i = 0; i < numSourcePerm; i++) { - String sourcePerm = sourcePerms.valueAt(i); - if ((ps.hasRuntimePermission(sourcePerm, userId)) - || ps.hasInstallPermission(sourcePerm)) { - if (!isGranted) { - flags = 0; - } - - isGranted = true; + isGranted = true; + flags |= ps.getPermissionFlags(sourcePerm, userId); + } else { + if (!isGranted) { flags |= ps.getPermissionFlags(sourcePerm, userId); - } else { - if (!isGranted) { - flags |= ps.getPermissionFlags(sourcePerm, userId); - } } } + } - if (isGranted) { - if (DEBUG_PERMISSIONS) { - Slog.i(TAG, newPerm + " inherits runtime perm grant from " + sourcePerms - + " for " + pkgName); - } - - ps.grantRuntimePermission(mSettings.getPermissionLocked(newPerm), userId); + if (isGranted) { + if (DEBUG_PERMISSIONS) { + Slog.i(TAG, newPerm + " inherits runtime perm grant from " + sourcePerms + + " for " + pkgName); } - // Add permission flags - ps.updatePermissionFlags(mSettings.getPermission(newPerm), userId, flags, flags); + ps.grantRuntimePermission(mSettings.getPermissionLocked(newPerm), userId); } + + // Add permission flags + ps.updatePermissionFlags(mSettings.getPermission(newPerm), userId, flags, flags); } /** @@ -1632,48 +1531,6 @@ public class PermissionManagerService { return updatedUserIds; } - /** - * Fix app-op modes for runtime permissions. - * - * @param permsState The state of the permissions of the package - * @param pkg The package information - */ - private void setAppOpsLocked(@NonNull PermissionsState permsState, - @NonNull PackageParser.Package pkg) { - for (int userId : UserManagerService.getInstance().getUserIds()) { - int numPerms = pkg.requestedPermissions.size(); - for (int i = 0; i < numPerms; i++) { - String permission = pkg.requestedPermissions.get(i); - - // For pre-M apps the runtime permission do not store the state - if (pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) { - continue; - } - - PermissionState state = permsState.getRuntimePermissionState(permission, userId); - if (state == null) { - continue; - } - - // Adjust app-op mods for foreground/background permissions. If an package used to - // have both fg and bg permission granted and it lost the bg permission during an - // upgrade the app-op mode should get downgraded to foreground. - if (state.isGranted()) { - BasePermission bp = mSettings.getPermission(permission); - - if (bp != null && bp.perm != null && bp.perm.info != null - && bp.perm.info.backgroundPermission != null) { - PermissionState bgState = permsState.getRuntimePermissionState( - bp.perm.info.backgroundPermission, userId); - - setAppOpMode(permission, pkg, userId, bgState != null && bgState.isGranted() - ? MODE_ALLOWED : MODE_FOREGROUND); - } - } - } - } - } - private boolean isNewPlatformPermissionForPackage(String perm, PackageParser.Package pkg) { boolean allowed = false; final int NP = PackageParser.NEW_PERMISSIONS.length; diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java index 67f30dc2e9fc..1fd8b711d348 100644 --- a/services/core/java/com/android/server/policy/PermissionPolicyService.java +++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java @@ -17,8 +17,10 @@ package com.android.server.policy; import static android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION; +import static android.content.pm.PackageManager.GET_PERMISSIONS; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.AppOpsManager; import android.content.Context; @@ -29,6 +31,7 @@ import android.content.pm.PackageManagerInternal; import android.content.pm.PackageManagerInternal.PackageListObserver; import android.content.pm.PackageParser; import android.content.pm.PermissionInfo; +import android.os.Build; import android.os.Process; import android.os.UserHandle; import android.permission.PermissionControllerManager; @@ -158,37 +161,59 @@ public final class PermissionPolicyService extends SystemService { }); } + private static @Nullable Context getUserContext(@NonNull Context context, + @NonNull UserHandle user) { + if (context.getUser().equals(user)) { + return context; + } else { + try { + return context.createPackageContextAsUser(context.getPackageName(), 0, user); + } catch (NameNotFoundException e) { + Slog.e(LOG_TAG, "Cannot create context for user " + user, e); + return null; + } + } + } + + /** + * Synchronize a single package. + */ private static void synchronizePackagePermissionsAndAppOpsForUser(@NonNull Context context, @NonNull String packageName, @UserIdInt int userId) { final PackageManagerInternal packageManagerInternal = LocalServices.getService( PackageManagerInternal.class); - final PackageParser.Package pkg = packageManagerInternal.getPackage(packageName); + final PackageInfo pkg = packageManagerInternal.getPackageInfo(packageName, 0, + Process.SYSTEM_UID, userId); if (pkg == null) { return; } - final PermissionToOpSynchroniser synchroniser = new PermissionToOpSynchroniser(context); - synchroniser.addPackage(context, pkg, userId); + final PermissionToOpSynchroniser synchroniser = new PermissionToOpSynchroniser( + getUserContext(context, UserHandle.of(userId))); + synchroniser.addPackage(pkg.packageName); final String[] sharedPkgNames = packageManagerInternal.getPackagesForSharedUserId( - pkg.mSharedUserId, userId); + pkg.sharedUserId, userId); if (sharedPkgNames != null) { for (String sharedPkgName : sharedPkgNames) { final PackageParser.Package sharedPkg = packageManagerInternal .getPackage(sharedPkgName); if (sharedPkg != null) { - synchroniser.addPackage(context, sharedPkg, userId); + synchroniser.addPackage(sharedPkg.packageName); } } } synchroniser.syncPackages(); } + /** + * Synchronize all packages + */ private static void synchronizePermissionsAndAppOpsForUser(@NonNull Context context, @UserIdInt int userId) { final PackageManagerInternal packageManagerInternal = LocalServices.getService( PackageManagerInternal.class); - final PermissionToOpSynchroniser synchronizer = new PermissionToOpSynchroniser(context); - packageManagerInternal.forEachPackage((pkg) -> - synchronizer.addPackage(context, pkg, userId)); + final PermissionToOpSynchroniser synchronizer = new PermissionToOpSynchroniser( + getUserContext(context, UserHandle.of(userId))); + packageManagerInternal.forEachPackage((pkg) -> synchronizer.addPackage(pkg.packageName)); synchronizer.syncPackages(); } @@ -198,17 +223,47 @@ public final class PermissionPolicyService extends SystemService { */ private static class PermissionToOpSynchroniser { private final @NonNull Context mContext; - - private final @NonNull SparseIntArray mUids = new SparseIntArray(); - private final @NonNull SparseArray<String> mPackageNames = new SparseArray<>(); - private final @NonNull SparseIntArray mAllowedUidOps = new SparseIntArray(); - private final @NonNull SparseIntArray mDefaultUidOps = new SparseIntArray(); + private final @NonNull PackageManager mPackageManager; + private final @NonNull AppOpsManager mAppOpsManager; + + /** All uid that need to be synchronized */ + private final @NonNull SparseIntArray mAllUids = new SparseIntArray(); + + /** + * All ops that need to be restricted + * + * @see #syncRestrictedOps + */ + private final @NonNull ArrayList<OpToRestrict> mOpsToRestrict = new ArrayList<>(); + + /** + * All ops that need to be unrestricted + * + * @see #syncRestrictedOps + */ + private final @NonNull ArrayList<OpToUnrestrict> mOpsToUnrestrict = new ArrayList<>(); + + /** + * All foreground permissions + * + * @see #syncOpsOfFgPermissions() + */ + private final @NonNull ArrayList<FgPermission> mFgPermOps = new ArrayList<>(); PermissionToOpSynchroniser(@NonNull Context context) { mContext = context; + mPackageManager = context.getPackageManager(); + mAppOpsManager = context.getSystemService(AppOpsManager.class); } - void syncPackages() { + /** + * Set app ops that belong to restricted permissions. + * + * <p>This processes ops previously added by {@link #addOpIfRestricted} + */ + private void syncRestrictedOps() { + final SparseIntArray unprocessedUids = mAllUids.clone(); + // TRICKY: we set the app op for a restricted permission to allow if the app // requesting the permission is whitelisted and to deny if the app requesting // the permission is not whitelisted. However, there is another case where an @@ -222,52 +277,48 @@ public final class PermissionPolicyService extends SystemService { final SparseArray<List<String>> unrequestedRestrictedPermissionsForUid = new SparseArray<>(); - final AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class); - final int allowedCount = mAllowedUidOps.size(); - for (int i = 0; i < allowedCount; i++) { - final int opCode = mAllowedUidOps.keyAt(i); - final int uid = mAllowedUidOps.valueAt(i); - final String packageName = mPackageNames.valueAt(i); - setUidModeAllowed(appOpsManager, opCode, uid, packageName); + final int unrestrictCount = mOpsToUnrestrict.size(); + for (int i = 0; i < unrestrictCount; i++) { + final OpToUnrestrict op = mOpsToUnrestrict.get(i); + setUidModeAllowed(op.code, op.uid, op.packageName); // Keep track this permission was requested by the UID. List<String> unrequestedRestrictedPermissions = - unrequestedRestrictedPermissionsForUid.get(uid); + unrequestedRestrictedPermissionsForUid.get(op.uid); if (unrequestedRestrictedPermissions == null) { unrequestedRestrictedPermissions = new ArrayList<>(sAllRestrictedPermissions); - unrequestedRestrictedPermissionsForUid.put(uid, + unrequestedRestrictedPermissionsForUid.put(op.uid, unrequestedRestrictedPermissions); } - unrequestedRestrictedPermissions.remove(AppOpsManager.opToPermission(opCode)); + unrequestedRestrictedPermissions.remove(AppOpsManager.opToPermission(op.code)); - mUids.delete(uid); + unprocessedUids.delete(op.uid); } - final int defaultCount = mDefaultUidOps.size(); - for (int i = 0; i < defaultCount; i++) { - final int opCode = mDefaultUidOps.keyAt(i); - final int uid = mDefaultUidOps.valueAt(i); - setUidModeDefault(appOpsManager, opCode, uid); + final int restrictCount = mOpsToRestrict.size(); + for (int i = 0; i < restrictCount; i++) { + final OpToRestrict op = mOpsToRestrict.get(i); + setUidModeDefault(op.code, op.uid); // Keep track this permission was requested by the UID. List<String> unrequestedRestrictedPermissions = - unrequestedRestrictedPermissionsForUid.get(uid); + unrequestedRestrictedPermissionsForUid.get(op.uid); if (unrequestedRestrictedPermissions == null) { unrequestedRestrictedPermissions = new ArrayList<>(sAllRestrictedPermissions); - unrequestedRestrictedPermissionsForUid.put(uid, + unrequestedRestrictedPermissionsForUid.put(op.uid, unrequestedRestrictedPermissions); } - unrequestedRestrictedPermissions.remove(AppOpsManager.opToPermission(opCode)); + unrequestedRestrictedPermissions.remove(AppOpsManager.opToPermission(op.code)); - mUids.delete(uid); + unprocessedUids.delete(op.uid); } // Give root access - mUids.put(Process.ROOT_UID, Process.ROOT_UID); + unprocessedUids.put(Process.ROOT_UID, Process.ROOT_UID); // Add records for UIDs that don't use any restricted permissions. - final int uidCount = mUids.size(); + final int uidCount = unprocessedUids.size(); for (int i = 0; i < uidCount; i++) { - final int uid = mUids.keyAt(i); + final int uid = unprocessedUids.keyAt(i); unrequestedRestrictedPermissionsForUid.put(uid, new ArrayList<>(sAllRestrictedPermissions)); } @@ -280,7 +331,7 @@ public final class PermissionPolicyService extends SystemService { if (unrequestedRestrictedPermissions != null) { final int uid = unrequestedRestrictedPermissionsForUid.keyAt(i); final String[] packageNames = (uid != Process.ROOT_UID) - ? mContext.getPackageManager().getPackagesForUid(uid) + ? mPackageManager.getPackagesForUid(uid) : new String[] {"root"}; if (packageNames == null) { continue; @@ -289,8 +340,7 @@ public final class PermissionPolicyService extends SystemService { for (int j = 0; j < permissionCount; j++) { final String permission = unrequestedRestrictedPermissions.get(j); for (String packageName : packageNames) { - setUidModeAllowed(appOpsManager, - AppOpsManager.permissionToOpCode(permission), uid, + setUidModeAllowed(AppOpsManager.permissionToOpCode(permission), uid, packageName); } } @@ -298,19 +348,115 @@ public final class PermissionPolicyService extends SystemService { } } - private void addPackage(@NonNull Context context, - @NonNull PackageParser.Package pkg, @UserIdInt int userId) { - final PackageManager packageManager = context.getPackageManager(); + /** + * Set app ops that belong to restricted permissions. + * + * <p>This processed ops previously added by {@link #addOpIfRestricted} + */ + private void syncOpsOfFgPermissions() { + int numFgPermOps = mFgPermOps.size(); + for (int i = 0; i < numFgPermOps; i++) { + FgPermission perm = mFgPermOps.get(i); + + if (mPackageManager.checkPermission(perm.fgPermissionName, perm.packageName) + == PackageManager.PERMISSION_GRANTED) { + if (mPackageManager.checkPermission(perm.bgPermissionName, perm.packageName) + == PackageManager.PERMISSION_GRANTED) { + mAppOpsManager.setUidMode( + AppOpsManager.permissionToOpCode(perm.fgPermissionName), perm.uid, + AppOpsManager.MODE_ALLOWED); + } else { + mAppOpsManager.setUidMode( + AppOpsManager.permissionToOpCode(perm.fgPermissionName), perm.uid, + AppOpsManager.MODE_FOREGROUND); + } + } else { + mAppOpsManager.setUidMode( + AppOpsManager.permissionToOpCode(perm.fgPermissionName), perm.uid, + AppOpsManager.MODE_IGNORED); + } + } + } + + /** + * Synchronize all previously {@link #addPackage added} packages. + */ + void syncPackages() { + syncRestrictedOps(); + syncOpsOfFgPermissions(); + } + + /** + * Add op that belong to a restricted permission for later processing in + * {@link #syncRestrictedOps}. + * + * <p>Note: Called with the package lock held. Do <u>not</u> call into app-op manager. + * + * @param permissionInfo The permission that is currently looked at + * @param pkg The package looked at + */ + private void addOpIfRestricted(@NonNull PermissionInfo permissionInfo, + @NonNull PackageInfo pkg) { + final String permission = permissionInfo.name; + final int opCode = AppOpsManager.permissionToOpCode(permission); + final int uid = pkg.applicationInfo.uid; + + if (!permissionInfo.isRestricted()) { + return; + } + + final boolean applyRestriction = PackageManager.RESTRICTED_PERMISSIONS_ENABLED + && (mPackageManager.getPermissionFlags(permission, pkg.packageName, + mContext.getUser()) & FLAG_PERMISSION_APPLY_RESTRICTION) != 0; + + if (permissionInfo.isHardRestricted()) { + if (applyRestriction) { + mOpsToRestrict.add(new OpToRestrict(uid, opCode)); + } else { + mOpsToUnrestrict.add(new OpToUnrestrict(uid, pkg.packageName, opCode)); + } + } else if (permissionInfo.isSoftRestricted()) { + //TODO: Implement soft restrictions like storage here. + } + } + + private void addOpIfFgPermissions(@NonNull PermissionInfo permissionInfo, + @NonNull PackageInfo pkg) { + if (pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) { + // Pre-M apps do not store their fg/bg state in the permissions + return; + } + + if (permissionInfo.backgroundPermission == null) { + return; + } - final int uid = UserHandle.getUid(userId, UserHandle.getAppId(pkg.applicationInfo.uid)); - final UserHandle userHandle = UserHandle.of(userId); + mFgPermOps.add(new FgPermission(pkg.applicationInfo.uid, pkg.packageName, + permissionInfo.name, permissionInfo.backgroundPermission)); + } + + /** + * Add a package for {@link #syncPackages() processing} later. + * + * <p>Note: Called with the package lock held. Do <u>not</u> call into app-op manager. + * + * @param pkgName The package to add for later processing. + */ + void addPackage(@NonNull String pkgName) { + final PackageInfo pkg; + try { + pkg = mPackageManager.getPackageInfo(pkgName, GET_PERMISSIONS); + } catch (NameNotFoundException e) { + return; + } - mUids.put(uid, uid); + mAllUids.put(pkg.applicationInfo.uid, pkg.applicationInfo.uid); - final int permissionCount = pkg.requestedPermissions.size(); - for (int i = 0; i < permissionCount; i++) { - final String permission = pkg.requestedPermissions.get(i); + if (pkg.requestedPermissions == null) { + return; + } + for (String permission : pkg.requestedPermissions) { final int opCode = AppOpsManager.permissionToOpCode(permission); if (opCode == AppOpsManager.OP_NONE) { continue; @@ -318,44 +464,63 @@ public final class PermissionPolicyService extends SystemService { final PermissionInfo permissionInfo; try { - permissionInfo = packageManager.getPermissionInfo(permission, 0); + permissionInfo = mPackageManager.getPermissionInfo(permission, 0); } catch (PackageManager.NameNotFoundException e) { continue; } - if (!permissionInfo.isRestricted()) { - continue; - } - - final boolean applyRestriction = PackageManager.RESTRICTED_PERMISSIONS_ENABLED - && (packageManager.getPermissionFlags(permission, pkg.packageName, - userHandle) & FLAG_PERMISSION_APPLY_RESTRICTION) != 0; - - if (permissionInfo.isHardRestricted()) { - if (applyRestriction) { - mDefaultUidOps.put(opCode, uid); - } else { - mPackageNames.put(opCode, pkg.packageName); - mAllowedUidOps.put(opCode, uid); - } - } else if (permissionInfo.isSoftRestricted()) { - //TODO: Implement soft restrictions like storage here. - } + addOpIfRestricted(permissionInfo, pkg); + addOpIfFgPermissions(permissionInfo, pkg); } } - private static void setUidModeAllowed(@NonNull AppOpsManager appOpsManager, - int opCode, int uid, @NonNull String packageName) { - final int currentMode = appOpsManager.unsafeCheckOpRaw(AppOpsManager + private void setUidModeAllowed(int opCode, int uid, @NonNull String packageName) { + final int currentMode = mAppOpsManager.unsafeCheckOpRaw(AppOpsManager .opToPublicName(opCode), uid, packageName); if (currentMode == AppOpsManager.MODE_DEFAULT) { - appOpsManager.setUidMode(opCode, uid, AppOpsManager.MODE_ALLOWED); + mAppOpsManager.setUidMode(opCode, uid, AppOpsManager.MODE_ALLOWED); } } - private static void setUidModeDefault(@NonNull AppOpsManager appOpsManager, - int opCode, int uid) { - appOpsManager.setUidMode(opCode, uid, AppOpsManager.MODE_DEFAULT); + private void setUidModeDefault(int opCode, int uid) { + mAppOpsManager.setUidMode(opCode, uid, AppOpsManager.MODE_DEFAULT); + } + + private class OpToRestrict { + final int uid; + final int code; + + OpToRestrict(int uid, int code) { + this.uid = uid; + this.code = code; + } + } + + private class OpToUnrestrict { + final int uid; + final @NonNull String packageName; + final int code; + + OpToUnrestrict(int uid, @NonNull String packageName, int code) { + this.uid = uid; + this.packageName = packageName; + this.code = code; + } + } + + private class FgPermission { + final int uid; + final @NonNull String packageName; + final @NonNull String fgPermissionName; + final @NonNull String bgPermissionName; + + private FgPermission(int uid, @NonNull String packageName, + @NonNull String fgPermissionName, @NonNull String bgPermissionName) { + this.uid = uid; + this.packageName = packageName; + this.fgPermissionName = fgPermissionName; + this.bgPermissionName = bgPermissionName; + } } } } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index b3f1c553ba82..d0ca861d8d3b 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1361,9 +1361,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mKeyguardDelegate.isShowing()) { // Double the time it takes to take a screenshot from the keyguard return (long) (KEYGUARD_SCREENSHOT_CHORD_DELAY_MULTIPLIER * - ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout()); + ViewConfiguration.get(mContext).getScreenshotChordKeyTimeout()); } - return ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout(); + return ViewConfiguration.get(mContext).getScreenshotChordKeyTimeout(); } private long getRingerToggleChordDelay() { diff --git a/services/core/java/com/android/server/webkit/SystemImpl.java b/services/core/java/com/android/server/webkit/SystemImpl.java index 56a6c3cb99b2..a9a6b193fe90 100644 --- a/services/core/java/com/android/server/webkit/SystemImpl.java +++ b/services/core/java/com/android/server/webkit/SystemImpl.java @@ -266,6 +266,11 @@ public class SystemImpl implements SystemInterface { } @Override + public void ensureZygoteStarted() { + WebViewZygote.getProcess(); + } + + @Override public boolean isMultiProcessDefaultEnabled() { // Multiprocess is enabled for all 64-bit devices, since the ability to run the renderer // process in 32-bit when it's a separate process typically results in a net memory saving. diff --git a/services/core/java/com/android/server/webkit/SystemInterface.java b/services/core/java/com/android/server/webkit/SystemInterface.java index 3fb52790621a..743740d277ba 100644 --- a/services/core/java/com/android/server/webkit/SystemInterface.java +++ b/services/core/java/com/android/server/webkit/SystemInterface.java @@ -61,5 +61,7 @@ public interface SystemInterface { public int getMultiProcessSetting(Context context); public void setMultiProcessSetting(Context context, int value); public void notifyZygote(boolean enableMultiProcess); + /** Start the zygote if it's not already running. */ + public void ensureZygoteStarted(); public boolean isMultiProcessDefaultEnabled(); } diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java index f704c30402d3..890456aa6e9c 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java @@ -17,6 +17,7 @@ package com.android.server.webkit; import android.content.Context; import android.content.pm.PackageInfo; +import android.os.AsyncTask; import android.os.UserHandle; import android.webkit.WebViewProviderInfo; import android.webkit.WebViewProviderResponse; @@ -81,6 +82,14 @@ public class WebViewUpdateServiceImpl { migrateFallbackStateOnBoot(); mWebViewUpdater.prepareWebViewInSystemServer(); mSystemInterface.notifyZygote(isMultiProcessEnabled()); + AsyncTask.THREAD_POOL_EXECUTOR.execute(this::startZygoteWhenReady); + } + + void startZygoteWhenReady() { + // Wait on a background thread for RELRO creation to be done. We ignore the return value + // because even if RELRO creation failed we still want to start the zygote. + waitForAndGetProvider(); + mSystemInterface.ensureZygoteStarted(); } void handleNewUser(int userId) { diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 6cf36d692520..ed3ec94ea3dd 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -87,6 +87,7 @@ import static android.content.res.Configuration.UI_MODE_TYPE_VR_HEADSET; import static android.os.Build.VERSION_CODES.HONEYCOMB; import static android.os.Build.VERSION_CODES.O; import static android.os.Process.SYSTEM_UID; +import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.Surface.ROTATION_270; import static android.view.Surface.ROTATION_90; @@ -1948,14 +1949,20 @@ final class ActivityRecord extends ConfigurationContainer { return false; } + // Whether the activity is on the sleeping display. + // TODO(b/129750406): This should be applied for the default display, too. + final boolean isDisplaySleeping = getDisplay().isSleeping() + && getDisplayId() != DEFAULT_DISPLAY; // Whether this activity is the top activity of this stack. final boolean isTop = this == stack.getTopActivity(); // Exclude the case where this is the top activity in a pinned stack. final boolean isTopNotPinnedStack = stack.isAttached() && stack.getDisplay().isTopNotPinnedStack(stack); - // Now check whether it's really visible depending on Keyguard state. - return stack.checkKeyguardVisibility(this, + // Now check whether it's really visible depending on Keyguard state, and update + // {@link ActivityStack} internal states. + final boolean visibleIgnoringDisplayStatus = stack.checkKeyguardVisibility(this, visibleIgnoringKeyguard, isTop && isTopNotPinnedStack); + return visibleIgnoringDisplayStatus && !isDisplaySleeping; } boolean shouldBeVisible() { diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java index afdbd73d520d..a9d76a61f4f5 100644 --- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java @@ -2775,8 +2775,8 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { true /* forceSend */, targetActivity); mActivityMetricsLogger.notifyActivityLaunching(task.intent); try { - mService.moveTaskToFrontLocked(task.taskId, 0, options, - true /* fromRecents */); + mService.moveTaskToFrontLocked(null /* appThread */, null /* callingPackage */, + task.taskId, 0, options, true /* fromRecents */); // Apply options to prevent pendingOptions be taken by client to make sure // the override pending app transition will be applied immediately. targetActivity.applyOptionsLocked(); diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index 3b358e897ccc..473a8757f09f 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -759,8 +759,8 @@ class ActivityStarter { try { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "shouldAbortBackgroundActivityStart"); - abortBackgroundStart = shouldAbortBackgroundActivityStart(callingUid, callingPid, - callingPackage, realCallingUid, realCallingPid, callerApp, + abortBackgroundStart = shouldAbortBackgroundActivityStart(callingUid, + callingPid, callingPackage, realCallingUid, realCallingPid, callerApp, originatingPendingIntent, allowBackgroundActivityStart, intent); } finally { Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); @@ -768,14 +768,7 @@ class ActivityStarter { abort |= (abortBackgroundStart && !mService.isBackgroundActivityStartsEnabled()); // TODO: remove this toast after feature development is done if (abortBackgroundStart) { - final Resources res = mService.mContext.getResources(); - final String toastMsg = res.getString(abort - ? R.string.activity_starter_block_bg_activity_starts_enforcing - : R.string.activity_starter_block_bg_activity_starts_permissive, - callingPackage); - mService.mUiHandler.post(() -> { - Toast.makeText(mService.mContext, toastMsg, Toast.LENGTH_LONG).show(); - }); + showBackgroundActivityBlockedToast(abort, callingPackage); } } @@ -935,7 +928,7 @@ class ActivityStarter { return res; } - private boolean shouldAbortBackgroundActivityStart(int callingUid, int callingPid, + boolean shouldAbortBackgroundActivityStart(int callingUid, int callingPid, final String callingPackage, int realCallingUid, int realCallingPid, WindowProcessController callerApp, PendingIntentRecord originatingPendingIntent, boolean allowBackgroundActivityStart, Intent intent) { @@ -1025,11 +1018,11 @@ class ActivityStarter { if (mSupervisor.mRecentTasks.isCallerRecents(callingUid)) { return false; } - // don't abort if the callingPackage is the device owner - if (mService.isDeviceOwner(callingPackage)) { + // don't abort if the callingUid is the device owner + if (mService.isDeviceOwner(callingUid)) { return false; } - // don't abort if the callingPackage has companion device + // don't abort if the callingUid has companion device final int callingUserId = UserHandle.getUserId(callingUid); if (mService.isAssociatedCompanionApp(callingUserId, callingUid)) { return false; @@ -1048,7 +1041,7 @@ class ActivityStarter { + "; realCallingUid: " + realCallingUid + "; isRealCallingUidForeground: " + isRealCallingUidForeground + "; isRealCallingUidPersistentSystemProcess: " - + isRealCallingUidPersistentSystemProcess + + isRealCallingUidPersistentSystemProcess + "; originatingPendingIntent: " + originatingPendingIntent + "; isBgStartWhitelisted: " + allowBackgroundActivityStart + "; intent: " + intent @@ -1076,6 +1069,18 @@ class ActivityStarter { return false; } + // TODO: remove this toast after feature development is done + void showBackgroundActivityBlockedToast(boolean abort, String callingPackage) { + final Resources res = mService.mContext.getResources(); + final String toastMsg = res.getString(abort + ? R.string.activity_starter_block_bg_activity_starts_enforcing + : R.string.activity_starter_block_bg_activity_starts_permissive, + callingPackage); + mService.mUiHandler.post(() -> { + Toast.makeText(mService.mContext, toastMsg, Toast.LENGTH_LONG).show(); + }); + } + /** * Creates a launch intent for the given auxiliary resolution data. */ diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java index b2e5b6ab7a1a..7d25466bf348 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java @@ -507,9 +507,9 @@ public abstract class ActivityTaskManagerInternal { public abstract boolean isUidForeground(int uid); /** - * Called by DevicePolicyManagerService to set the package name of the device owner. + * Called by DevicePolicyManagerService to set the uid of the device owner. */ - public abstract void setDeviceOwnerPackageName(String deviceOwnerPkg); + public abstract void setDeviceOwnerUid(int uid); /** Set all associated companion app that belongs to an userId. */ public abstract void setCompanionAppPackages(int userId, Set<String> companionAppPackages); diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 10ae78297a41..b4249046c1b5 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -633,7 +633,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { private FontScaleSettingObserver mFontScaleSettingObserver; - private String mDeviceOwnerPackageName; + private int mDeviceOwnerUid = Process.INVALID_UID; private final class FontScaleSettingObserver extends ContentObserver { private final Uri mFontScaleUri = Settings.System.getUriFor(FONT_SCALE); @@ -2281,25 +2281,48 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { * TODO: Add mController hook */ @Override - public void moveTaskToFront(int taskId, int flags, Bundle bOptions) { + public void moveTaskToFront(IApplicationThread appThread, String callingPackage, int taskId, + int flags, Bundle bOptions) { mAmInternal.enforceCallingPermission(android.Manifest.permission.REORDER_TASKS, "moveTaskToFront()"); if (DEBUG_STACK) Slog.d(TAG_STACK, "moveTaskToFront: moving taskId=" + taskId); synchronized (mGlobalLock) { - moveTaskToFrontLocked(taskId, flags, SafeActivityOptions.fromBundle(bOptions), - false /* fromRecents */); + moveTaskToFrontLocked(appThread, callingPackage, taskId, flags, + SafeActivityOptions.fromBundle(bOptions), false /* fromRecents */); } } - void moveTaskToFrontLocked(int taskId, int flags, SafeActivityOptions options, + void moveTaskToFrontLocked(@Nullable IApplicationThread appThread, + @Nullable String callingPackage, int taskId, int flags, SafeActivityOptions options, boolean fromRecents) { - if (!checkAppSwitchAllowedLocked(Binder.getCallingPid(), - Binder.getCallingUid(), -1, -1, "Task to front")) { + final int callingPid = Binder.getCallingPid(); + final int callingUid = Binder.getCallingUid(); + if (!isSameApp(callingUid, callingPackage)) { + String msg = "Permission Denial: moveTaskToFrontLocked() from pid=" + + Binder.getCallingPid() + " as package " + callingPackage; + Slog.w(TAG, msg); + throw new SecurityException(msg); + } + if (!checkAppSwitchAllowedLocked(callingPid, callingUid, -1, -1, "Task to front")) { SafeActivityOptions.abort(options); return; } final long origId = Binder.clearCallingIdentity(); + WindowProcessController callerApp = null; + if (appThread != null) { + callerApp = getProcessController(appThread); + } + final ActivityStarter starter = getActivityStartController().obtainStarter( + null /* intent */, "moveTaskToFront"); + if (starter.shouldAbortBackgroundActivityStart(callingUid, callingPid, callingPackage, -1, + -1, callerApp, null, false, null)) { + boolean abort = !isBackgroundActivityStartsEnabled(); + starter.showBackgroundActivityBlockedToast(abort, callingPackage); + if (abort) { + return; + } + } try { final TaskRecord task = mRootActivityContainer.anyTaskForId(taskId); if (task == null) { @@ -2331,6 +2354,26 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } + /** + * Return true if callingUid is system, or packageName belongs to that callingUid. + */ + boolean isSameApp(int callingUid, @Nullable String packageName) { + try { + if (callingUid != 0 && callingUid != SYSTEM_UID) { + if (packageName == null) { + return false; + } + final int uid = AppGlobals.getPackageManager().getPackageUid(packageName, + PackageManager.MATCH_DEBUG_TRIAGED_MISSING, + UserHandle.getUserId(callingUid)); + return UserHandle.isSameApp(callingUid, uid); + } + } catch (RemoteException e) { + // Should not happen + } + return true; + } + boolean checkAppSwitchAllowedLocked(int sourcePid, int sourceUid, int callingPid, int callingUid, String name) { if (mAppSwitchesAllowedTime < SystemClock.uptimeMillis()) { @@ -5291,7 +5334,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { return mAmInternal.isBackgroundActivityStartsEnabled(); } - boolean isPackageNameWhitelistedForBgActivityStarts(String packageName) { + boolean isPackageNameWhitelistedForBgActivityStarts(@Nullable String packageName) { + if (packageName == null) { + return false; + } return mAmInternal.isPackageNameWhitelistedForBgActivityStarts(packageName); } @@ -5830,15 +5876,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { || mWindowManager.mRoot.isAnyNonToastWindowVisibleForUid(uid); } - boolean isDeviceOwner(String packageName) { - if (packageName == null) { - return false; - } - return packageName.equals(mDeviceOwnerPackageName); + boolean isDeviceOwner(int uid) { + return uid >= 0 && mDeviceOwnerUid == uid; } - void setDeviceOwnerPackageName(String deviceOwnerPkg) { - mDeviceOwnerPackageName = deviceOwnerPkg; + void setDeviceOwnerUid(int uid) { + mDeviceOwnerUid = uid; } /** @@ -7288,9 +7331,9 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } @Override - public void setDeviceOwnerPackageName(String deviceOwnerPkg) { + public void setDeviceOwnerUid(int uid) { synchronized (mGlobalLock) { - ActivityTaskManagerService.this.setDeviceOwnerPackageName(deviceOwnerPkg); + ActivityTaskManagerService.this.setDeviceOwnerUid(uid); } } diff --git a/services/core/java/com/android/server/wm/AppTaskImpl.java b/services/core/java/com/android/server/wm/AppTaskImpl.java index 441c5935a507..e967a92f1891 100644 --- a/services/core/java/com/android/server/wm/AppTaskImpl.java +++ b/services/core/java/com/android/server/wm/AppTaskImpl.java @@ -27,6 +27,7 @@ import android.os.Binder; import android.os.Bundle; import android.os.IBinder; import android.os.UserHandle; +import android.util.Slog; /** * An implementation of IAppTask, that allows an app to manage its own tasks via @@ -34,6 +35,7 @@ import android.os.UserHandle; * only the process that calls getAppTasks() can call the AppTask methods. */ class AppTaskImpl extends IAppTask.Stub { + private static final String TAG = "AppTaskImpl"; private ActivityTaskManagerService mService; private int mTaskId; @@ -90,16 +92,36 @@ class AppTaskImpl extends IAppTask.Stub { } @Override - public void moveToFront() { + public void moveToFront(IApplicationThread appThread, String callingPackage) { checkCaller(); // Will bring task to front if it already has a root activity. final int callingPid = Binder.getCallingPid(); final int callingUid = Binder.getCallingUid(); + if (!mService.isSameApp(callingUid, callingPackage)) { + String msg = "Permission Denial: moveToFront() from pid=" + + Binder.getCallingPid() + " as package " + callingPackage; + Slog.w(TAG, msg); + throw new SecurityException(msg); + } final long origId = Binder.clearCallingIdentity(); try { synchronized (mService.mGlobalLock) { - mService.mStackSupervisor.startActivityFromRecents(callingPid, callingUid, mTaskId, - null); + WindowProcessController callerApp = null; + if (appThread != null) { + callerApp = mService.getProcessController(appThread); + } + final ActivityStarter starter = mService.getActivityStartController().obtainStarter( + null /* intent */, "moveToFront"); + if (starter.shouldAbortBackgroundActivityStart(callingUid, callingPid, + callingPackage, -1, -1, callerApp, null, false, null)) { + boolean abort = !mService.isBackgroundActivityStartsEnabled(); + starter.showBackgroundActivityBlockedToast(abort, callingPackage); + if (abort) { + return; + } + } + mService.mStackSupervisor.startActivityFromRecents(callingPid, + callingUid, mTaskId, null); } } finally { Binder.restoreCallingIdentity(origId); diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 0f4e123923b0..ee4e33e4cfaa 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -250,8 +250,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo // on the IME target. We mainly have this container grouping so we can keep track of all the IME // window containers together and move them in-sync if/when needed. We use a subclass of // WindowContainer which is omitted from screen magnification, as the IME is never magnified. - private final NonMagnifiableWindowContainers mImeWindowsContainers = - new NonMagnifiableWindowContainers("mImeWindowsContainers", mWmService); + private final NonAppWindowContainers mImeWindowsContainers = + new NonAppWindowContainers("mImeWindowsContainers", mWmService); private WindowState mTmpWindow; private WindowState mTmpWindow2; @@ -4642,16 +4642,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } } - private class NonMagnifiableWindowContainers extends NonAppWindowContainers { - NonMagnifiableWindowContainers(String name, WindowManagerService service) { - super(name, service); - } - - @Override - void applyMagnificationSpec(Transaction t, MagnificationSpec spec) { - } - }; - SurfaceControl.Builder makeSurface(SurfaceSession s) { return mWmService.makeSurfaceBuilder(s) .setParent(mWindowingLayer); diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index 432d75e9a4e3..363db5439f27 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -294,7 +294,16 @@ class KeyguardController { /** * Called when occluded state changed. */ - private void handleOccludedChanged() { + private void handleOccludedChanged(int displayId) { + // TODO(b/113840485): Handle app transition for individual display, and apply occluded + // state change to secondary displays. + // For now, only default display fully supports occluded change. Other displays only + // updates keygaurd sleep token on that display. + if (displayId != DEFAULT_DISPLAY) { + updateKeyguardSleepToken(displayId); + return; + } + mWindowManager.onKeyguardOccludedChanged(isDisplayOccluded(DEFAULT_DISPLAY)); if (isKeyguardLocked()) { mWindowManager.deferSurfaceLayout(); @@ -303,7 +312,7 @@ class KeyguardController { .prepareAppTransition(resolveOccludeTransit(), false /* alwaysKeepCurrent */, 0 /* flags */, true /* forceOverride */); - updateKeyguardSleepToken(); + updateKeyguardSleepToken(DEFAULT_DISPLAY); mRootActivityContainer.ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS); mWindowManager.executeAppTransition(); } finally { @@ -395,13 +404,16 @@ class KeyguardController { for (int displayNdx = mRootActivityContainer.getChildCount() - 1; displayNdx >= 0; displayNdx--) { final ActivityDisplay display = mRootActivityContainer.getChildAt(displayNdx); - final int displayId = display.mDisplayId; - final KeyguardDisplayState state = getDisplay(displayId); - if (isKeyguardUnoccludedOrAodShowing(displayId) && state.mSleepToken == null) { - state.acquiredSleepToken(); - } else if (!isKeyguardUnoccludedOrAodShowing(displayId) && state.mSleepToken != null) { - state.releaseSleepToken(); - } + updateKeyguardSleepToken(display.mDisplayId); + } + } + + private void updateKeyguardSleepToken(int displayId) { + final KeyguardDisplayState state = getDisplay(displayId); + if (isKeyguardUnoccludedOrAodShowing(displayId) && state.mSleepToken == null) { + state.acquiredSleepToken(); + } else if (!isKeyguardUnoccludedOrAodShowing(displayId) && state.mSleepToken != null) { + state.releaseSleepToken(); } } @@ -483,11 +495,8 @@ class KeyguardController { mOccluded |= controller.mWindowManager.isShowingDream(); } - // TODO(b/113840485): Handle app transition for individual display, and apply occluded - // state change to secondary displays. - // For now, only default display can change occluded. - if (lastOccluded != mOccluded && mDisplayId == DEFAULT_DISPLAY) { - controller.handleOccludedChanged(); + if (lastOccluded != mOccluded) { + controller.handleOccludedChanged(mDisplayId); } if (lastDismissActivity != mDismissingKeyguardActivity && !mOccluded && mDismissingKeyguardActivity != null diff --git a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java index 3c9a46b43a2f..0b63f484c8e2 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java @@ -26,7 +26,6 @@ import android.app.ActivityManager; import android.app.ActivityManager.TaskSnapshot; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; -import android.hardware.HardwareBuffer; import android.os.Process; import android.os.SystemClock; import android.util.ArraySet; @@ -363,8 +362,7 @@ class TaskSnapshotPersister { // TODO(b/116112787) TaskSnapshot needs bookkeep the ColorSpace of the // hardware bitmap when created. final Bitmap bitmap = Bitmap.wrapHardwareBuffer( - HardwareBuffer.createFromGraphicBuffer(mSnapshot.getSnapshot()), - mSnapshot.getColorSpace()); + mSnapshot.getSnapshot(), mSnapshot.getColorSpace()); if (bitmap == null) { Slog.e(TAG, "Invalid task snapshot hw bitmap"); return false; diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java index 166a33d7a560..da873b8bc308 100644 --- a/services/core/java/com/android/server/wm/WallpaperController.java +++ b/services/core/java/com/android/server/wm/WallpaperController.java @@ -35,7 +35,6 @@ import static com.android.server.wm.WindowManagerService.H.WALLPAPER_DRAW_PENDIN import android.graphics.Bitmap; import android.graphics.Rect; -import android.hardware.HardwareBuffer; import android.os.Bundle; import android.os.Debug; import android.os.IBinder; @@ -744,8 +743,7 @@ class WallpaperController { return null; } return Bitmap.wrapHardwareBuffer( - HardwareBuffer.createFromGraphicBuffer(wallpaperBuffer.getGraphicBuffer()), - wallpaperBuffer.getColorSpace()); + wallpaperBuffer.getGraphicBuffer(), wallpaperBuffer.getColorSpace()); } private WindowState getTopVisibleWallpaper() { diff --git a/services/core/jni/com_android_server_TestNetworkService.cpp b/services/core/jni/com_android_server_TestNetworkService.cpp index b90ff233c1ac..36a6fde36191 100644 --- a/services/core/jni/com_android_server_TestNetworkService.cpp +++ b/services/core/jni/com_android_server_TestNetworkService.cpp @@ -54,12 +54,12 @@ static void throwException(JNIEnv* env, int error, const char* action, const cha jniThrowException(env, "java/lang/IllegalStateException", msg.c_str()); } -static int createTunInterface(JNIEnv* env, const char* iface) { +static int createTunTapInterface(JNIEnv* env, bool isTun, const char* iface) { base::unique_fd tun(open("/dev/tun", O_RDWR | O_NONBLOCK)); ifreq ifr{}; // Allocate interface. - ifr.ifr_flags = IFF_TUN | IFF_NO_PI; + ifr.ifr_flags = (isTun ? IFF_TUN : IFF_TAP) | IFF_NO_PI; strlcpy(ifr.ifr_name, iface, IFNAMSIZ); if (ioctl(tun.get(), TUNSETIFF, &ifr)) { throwException(env, errno, "allocating", ifr.ifr_name); @@ -80,23 +80,23 @@ static int createTunInterface(JNIEnv* env, const char* iface) { //------------------------------------------------------------------------------ -static jint create(JNIEnv* env, jobject /* thiz */, jstring jIface) { +static jint create(JNIEnv* env, jobject /* thiz */, jboolean isTun, jstring jIface) { ScopedUtfChars iface(env, jIface); if (!iface.c_str()) { jniThrowNullPointerException(env, "iface"); return -1; } - int tun = createTunInterface(env, iface.c_str()); + int tun = createTunTapInterface(env, isTun, iface.c_str()); - // Any exceptions will be thrown from the createTunInterface call + // Any exceptions will be thrown from the createTunTapInterface call return tun; } //------------------------------------------------------------------------------ static const JNINativeMethod gMethods[] = { - {"jniCreateTun", "(Ljava/lang/String;)I", (void*)create}, + {"jniCreateTunTap", "(ZLjava/lang/String;)I", (void*)create}, }; int register_android_server_TestNetworkService(JNIEnv* env) { diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java b/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java index 27cd70c9a606..215e46f9aecb 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java @@ -26,6 +26,7 @@ import android.content.pm.PackageManagerInternal; import android.content.pm.UserInfo; import android.os.Binder; import android.os.Environment; +import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.os.UserManagerInternal; @@ -209,8 +210,11 @@ class Owners { } private void pushToActivityTaskManagerLocked() { - mActivityTaskManagerInternal.setDeviceOwnerPackageName(mDeviceOwner != null - ? mDeviceOwner.packageName : null); + final int uid = mDeviceOwner != null ? mPackageManagerInternal.getPackageUid( + mDeviceOwner.packageName, + PackageManager.MATCH_ALL | PackageManager.MATCH_KNOWN_PACKAGES, mDeviceOwnerUserId) + : Process.INVALID_UID; + mActivityTaskManagerInternal.setDeviceOwnerUid(uid); } String getDeviceOwnerPackageName() { diff --git a/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java index 7a68e92cff6d..c0a11b27c65c 100644 --- a/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java @@ -78,6 +78,7 @@ import android.provider.Settings; import android.util.Log; import android.util.SparseArray; +import androidx.test.filters.FlakyTest; import androidx.test.runner.AndroidJUnit4; import com.android.internal.annotations.GuardedBy; @@ -403,6 +404,7 @@ public class AlarmManagerServiceTest { assertEquals(expectedTriggerTime, mTestTimer.getElapsed()); } + @FlakyTest(bugId = 130313408) @Test public void testEarliestAlarmSet() { final PendingIntent pi6 = getNewMockPendingIntent(); diff --git a/services/tests/servicestests/src/com/android/server/webkit/TestSystemImpl.java b/services/tests/servicestests/src/com/android/server/webkit/TestSystemImpl.java index 3f687c81ad29..8cde10675fe3 100644 --- a/services/tests/servicestests/src/com/android/server/webkit/TestSystemImpl.java +++ b/services/tests/servicestests/src/com/android/server/webkit/TestSystemImpl.java @@ -185,6 +185,9 @@ public class TestSystemImpl implements SystemInterface { public void notifyZygote(boolean enableMultiProcess) {} @Override + public void ensureZygoteStarted() {} + + @Override public boolean isMultiProcessDefaultEnabled() { return mMultiProcessDefault; } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java index d02db7b2af22..44aa55d07133 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java @@ -659,7 +659,7 @@ public class ActivityStarterTests extends ActivityTestsBase { boolean hasForegroundActivities, boolean callerIsRecents, boolean callerIsTempWhitelisted, boolean callerIsInstrumentingWithBackgroundActivityStartPrivileges, - boolean isCallingPackageNameDeviceOwner, boolean isCallingPackageTempWhitelisted) { + boolean isCallingUidDeviceOwner, boolean isCallingPackageTempWhitelisted) { // window visibility doReturn(callingUidHasVisibleWindow).when(mService.mWindowManager.mRoot) .isAnyNonToastWindowVisibleForUid(callingUid); @@ -685,8 +685,8 @@ public class ActivityStarterTests extends ActivityTestsBase { // caller is instrumenting with background activity starts privileges callerApp.setInstrumenting(callerIsInstrumentingWithBackgroundActivityStartPrivileges, callerIsInstrumentingWithBackgroundActivityStartPrivileges); - // calling package name is the device owner - doReturn(isCallingPackageNameDeviceOwner).when(mService).isDeviceOwner(any()); + // callingUid is the device owner + doReturn(isCallingUidDeviceOwner).when(mService).isDeviceOwner(callingUid); // calling package name is temporarily whitelisted doReturn(isCallingPackageTempWhitelisted).when(mService) .isPackageNameWhitelistedForBgActivityStarts("com.whatever.dude"); diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java index 1eb716a63935..9722d2ccce99 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java @@ -207,7 +207,8 @@ public class TaskStackChangedListenerTest { // Test for onTaskMovedToFront. assertEquals(1, taskMovedToFrontLatch.getCount()); - mService.moveTaskToFront(id, 0, null); + mService.moveTaskToFront(null, getInstrumentation().getContext().getPackageName(), id, 0, + null); waitForCallback(taskMovedToFrontLatch); assertEquals(activity.getTaskId(), params[0]); diff --git a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java index 9d7319f7d337..95b8f6700c76 100644 --- a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java +++ b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java @@ -78,6 +78,7 @@ public class AppLaunch extends InstrumentationTestCase { private static final String KEY_SIMPLEPERF_CMD = "simpleperf_cmd"; private static final String KEY_SIMPLEPERF_APP = "simpleperf_app"; private static final String KEY_CYCLE_CLEAN = "cycle_clean"; + private static final String KEY_TRACE_ALL = "trace_all"; private static final String KEY_TRACE_ITERATIONS = "trace_iterations"; private static final String KEY_LAUNCH_DIRECTORY = "launch_directory"; private static final String KEY_TRACE_DIRECTORY = "trace_directory"; @@ -111,7 +112,7 @@ public class AppLaunch extends InstrumentationTestCase { private static final String SUCCESS_MESSAGE = "Status: ok"; private static final String TOTAL_TIME_MESSAGE = "TotalTime:"; private static final String COMPILE_SUCCESS = "Success"; - private static final String LAUNCH_ITERATION = "LAUNCH_ITERATION - %d"; + private static final String LAUNCH_ITERATION = "LAUNCH_ITERATION-%d"; private static final String TRACE_ITERATION = "TRACE_ITERATION-%d"; private static final String LAUNCH_ITERATION_PREFIX = "LAUNCH_ITERATION"; private static final String TRACE_ITERATION_PREFIX = "TRACE_ITERATION"; @@ -142,6 +143,7 @@ public class AppLaunch extends InstrumentationTestCase { private String[] mCompilerFilters = null; private String mLastAppName = ""; private boolean mCycleCleanUp = false; + private boolean mTraceAll = false; private boolean mIterationCycle = false; private long mCycleTime = 0; private StringBuilder mCycleTimes = new StringBuilder(); @@ -296,18 +298,40 @@ public class AppLaunch extends InstrumentationTestCase { // skip if the app has failures while launched first continue; } - // In the "applaunch.txt" file app launches are referenced using - // "LAUNCH_ITERATION - ITERATION NUM" - launchResults = startApp(launch.getApp(), launch.getLaunchReason()); - if (launchResults.mLaunchTime < 0) { - addLaunchResult(launch, new AppLaunchResult()); - // if it fails once, skip the rest of the launches - continue; - } else { - mCycleTime += launchResults.mLaunchTime; - addLaunchResult(launch, launchResults); + AtraceLogger atraceLogger = null; + if (mTraceAll) { + Log.i(TAG, "Started tracing " + launch.getApp()); + atraceLogger = AtraceLogger + .getAtraceLoggerInstance(getInstrumentation()); } - sleep(POST_LAUNCH_IDLE_TIMEOUT); + try { + // Start the trace + if (atraceLogger != null) { + atraceLogger.atraceStart(traceCategoriesSet, traceBufferSize, + traceDumpInterval, rootTraceSubDir, + String.format("%s-%s-%s", launch.getApp(), + launch.getCompilerFilter(), launch.getLaunchReason())); + } + // In the "applaunch.txt" file app launches are referenced using + // "LAUNCH_ITERATION - ITERATION NUM" + launchResults = startApp(launch.getApp(), launch.getLaunchReason()); + if (launchResults.mLaunchTime < 0) { + addLaunchResult(launch, new AppLaunchResult()); + // if it fails once, skip the rest of the launches + continue; + } else { + mCycleTime += launchResults.mLaunchTime; + addLaunchResult(launch, launchResults); + } + sleep(POST_LAUNCH_IDLE_TIMEOUT); + } finally { + // Stop the trace + if (atraceLogger != null) { + Log.i(TAG, "Stopped tracing " + launch.getApp()); + atraceLogger.atraceStop(); + } + } + } // App launch times for trace launch will not be used for final @@ -534,6 +558,7 @@ public class AppLaunch extends InstrumentationTestCase { mLaunchOrder = args.getString(KEY_LAUNCH_ORDER, LAUNCH_ORDER_CYCLIC); mSimplePerfAppOnly = Boolean.parseBoolean(args.getString(KEY_SIMPLEPERF_APP)); mCycleCleanUp = Boolean.parseBoolean(args.getString(KEY_CYCLE_CLEAN)); + mTraceAll = Boolean.parseBoolean(args.getString(KEY_TRACE_ALL)); mTrialLaunch = mTrialLaunch || Boolean.parseBoolean(args.getString(KEY_TRIAL_LAUNCH)); if (mSimplePerfCmd != null && mSimplePerfAppOnly) { diff --git a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java index b308982c2343..fa7bf61a07b2 100644 --- a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java +++ b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java @@ -16,6 +16,7 @@ package com.android.server; +import static com.android.server.PackageWatchdog.MonitoredPackage; import static com.android.server.PackageWatchdog.TRIGGER_FAILURE_COUNT; import static org.junit.Assert.assertEquals; @@ -27,6 +28,7 @@ import android.content.Context; import android.content.pm.VersionedPackage; import android.os.Handler; import android.os.test.TestLooper; +import android.service.watchdog.PackageInfo; import android.util.AtomicFile; import androidx.test.InstrumentationRegistry; @@ -143,6 +145,31 @@ public class PackageWatchdogTest { assertNull(watchdog.getPackages(observer3)); } + /** Observing already observed package extends the observation time. */ + @Test + public void testObserveAlreadyObservedPackage() throws Exception { + PackageWatchdog watchdog = createWatchdog(); + TestObserver observer = new TestObserver(OBSERVER_NAME_1); + + // Start observing APP_A + watchdog.startObservingHealth(observer, Arrays.asList(APP_A), SHORT_DURATION); + + // Then advance time half-way + Thread.sleep(SHORT_DURATION / 2); + mTestLooper.dispatchAll(); + + // Start observing APP_A again + watchdog.startObservingHealth(observer, Arrays.asList(APP_A), SHORT_DURATION); + + // Then advance time such that it should have expired were it not for the second observation + Thread.sleep((SHORT_DURATION / 2) + 1); + mTestLooper.dispatchAll(); + + // Verify that APP_A not expired since second observation extended the time + assertEquals(1, watchdog.getPackages(observer).size()); + assertTrue(watchdog.getPackages(observer).contains(APP_A)); + } + /** * Test package observers are persisted and loaded on startup */ @@ -577,6 +604,84 @@ public class PackageWatchdogTest { assertEquals(APP_C, observer.mFailedPackages.get(0)); } + /** + * Tests failure when health check duration is different from package observation duration + * Failure is also notified only once. + */ + @Test + public void testExplicitHealthCheckFailureBeforeExpiry() throws Exception { + TestController controller = new TestController(); + PackageWatchdog watchdog = createWatchdog(controller, true /* withPackagesReady */); + TestObserver observer = new TestObserver(OBSERVER_NAME_1, + PackageHealthObserverImpact.USER_IMPACT_MEDIUM); + + // Start observing with explicit health checks for APP_A and + // package observation duration == LONG_DURATION + // health check duration == SHORT_DURATION (set by default in the TestController) + controller.setSupportedPackages(Arrays.asList(APP_A)); + watchdog.startObservingHealth(observer, Arrays.asList(APP_A), LONG_DURATION); + + // Then APP_A has exceeded health check duration + Thread.sleep(SHORT_DURATION); + mTestLooper.dispatchAll(); + + // Verify that health check is failed + assertEquals(1, observer.mFailedPackages.size()); + assertEquals(APP_A, observer.mFailedPackages.get(0)); + + // Then clear failed packages and start observing a random package so requests are synced + // and PackageWatchdog#onSupportedPackages is called and APP_A has a chance to fail again + // this time due to package expiry. + observer.mFailedPackages.clear(); + watchdog.startObservingHealth(observer, Arrays.asList(APP_B), LONG_DURATION); + + // Verify that health check failure is not notified again + assertTrue(observer.mFailedPackages.isEmpty()); + } + + /** Tests {@link MonitoredPackage} health check state transitions. */ + @Test + public void testPackageHealthCheckStateTransitions() { + MonitoredPackage m1 = new MonitoredPackage(APP_A, LONG_DURATION, + false /* hasPassedHealthCheck */); + MonitoredPackage m2 = new MonitoredPackage(APP_B, LONG_DURATION, false); + MonitoredPackage m3 = new MonitoredPackage(APP_C, LONG_DURATION, false); + MonitoredPackage m4 = new MonitoredPackage(APP_D, LONG_DURATION, SHORT_DURATION, true); + + // Verify transition: inactive -> active -> passed + // Verify initially inactive + assertEquals(MonitoredPackage.STATE_INACTIVE, m1.getHealthCheckStateLocked()); + // Verify still inactive, until we #setHealthCheckActiveLocked + assertEquals(MonitoredPackage.STATE_INACTIVE, m1.handleElapsedTimeLocked(SHORT_DURATION)); + // Verify now active + assertEquals(MonitoredPackage.STATE_ACTIVE, m1.setHealthCheckActiveLocked(SHORT_DURATION)); + // Verify now passed + assertEquals(MonitoredPackage.STATE_PASSED, m1.tryPassHealthCheckLocked()); + + // Verify transition: inactive -> active -> failed + // Verify initially inactive + assertEquals(MonitoredPackage.STATE_INACTIVE, m2.getHealthCheckStateLocked()); + // Verify now active + assertEquals(MonitoredPackage.STATE_ACTIVE, m2.setHealthCheckActiveLocked(SHORT_DURATION)); + // Verify now failed + assertEquals(MonitoredPackage.STATE_FAILED, m2.handleElapsedTimeLocked(SHORT_DURATION)); + + // Verify transition: inactive -> failed + // Verify initially inactive + assertEquals(MonitoredPackage.STATE_INACTIVE, m3.getHealthCheckStateLocked()); + // Verify now failed because package expired + assertEquals(MonitoredPackage.STATE_FAILED, m3.handleElapsedTimeLocked(LONG_DURATION)); + // Verify remains failed even when asked to pass + assertEquals(MonitoredPackage.STATE_FAILED, m3.tryPassHealthCheckLocked()); + + // Verify transition: passed + assertEquals(MonitoredPackage.STATE_PASSED, m4.getHealthCheckStateLocked()); + // Verify remains passed even if health check fails + assertEquals(MonitoredPackage.STATE_PASSED, m4.handleElapsedTimeLocked(SHORT_DURATION)); + // Verify remains passed even if package expires + assertEquals(MonitoredPackage.STATE_PASSED, m4.handleElapsedTimeLocked(LONG_DURATION)); + } + private PackageWatchdog createWatchdog() { return createWatchdog(new TestController(), true /* withPackagesReady */); } @@ -636,7 +741,7 @@ public class PackageWatchdogTest { private List<String> mSupportedPackages = new ArrayList<>(); private List<String> mRequestedPackages = new ArrayList<>(); private Consumer<String> mPassedConsumer; - private Consumer<List<String>> mSupportedConsumer; + private Consumer<List<PackageInfo>> mSupportedConsumer; private Runnable mNotifySyncRunnable; @Override @@ -649,7 +754,7 @@ public class PackageWatchdogTest { @Override public void setCallbacks(Consumer<String> passedConsumer, - Consumer<List<String>> supportedConsumer, Runnable notifySyncRunnable) { + Consumer<List<PackageInfo>> supportedConsumer, Runnable notifySyncRunnable) { mPassedConsumer = passedConsumer; mSupportedConsumer = supportedConsumer; mNotifySyncRunnable = notifySyncRunnable; @@ -661,7 +766,11 @@ public class PackageWatchdogTest { if (mIsEnabled) { packages.retainAll(mSupportedPackages); mRequestedPackages.addAll(packages); - mSupportedConsumer.accept(mSupportedPackages); + List<PackageInfo> packageInfos = new ArrayList<>(); + for (String packageName: packages) { + packageInfos.add(new PackageInfo(packageName, SHORT_DURATION)); + } + mSupportedConsumer.accept(packageInfos); } else { mSupportedConsumer.accept(Collections.emptyList()); } diff --git a/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java index 548a0c22c569..5fb23b0ad507 100644 --- a/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java +++ b/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java @@ -40,7 +40,7 @@ public class ActivityManagerPermissionTests extends TestCase { @SmallTest public void testREORDER_TASKS() { try { - mAm.moveTaskToFront(0, 0, null); + mAm.moveTaskToFront(null, null, 0, 0, null); fail("IActivityManager.moveTaskToFront did not throw SecurityException as" + " expected"); } catch (SecurityException e) { diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 62ea9af49f51..9010f3c9943e 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -75,7 +75,7 @@ interface IWifiManager boolean removePasspointConfiguration(in String fqdn, String packageName); - List<PasspointConfiguration> getPasspointConfigurations(); + List<PasspointConfiguration> getPasspointConfigurations(in String packageName); List<WifiConfiguration> getWifiConfigsForPasspointProfiles(in List<String> fqdnList); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 140e9c324dfa..4115663b8bb8 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -1778,7 +1778,7 @@ public class WifiManager { }) public List<PasspointConfiguration> getPasspointConfigurations() { try { - return mService.getPasspointConfigurations(); + return mService.getPasspointConfigurations(mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/wifi/java/com/android/server/wifi/BaseWifiService.java b/wifi/java/com/android/server/wifi/BaseWifiService.java index 842d78ddcda2..fcf8bd5eaa3e 100644 --- a/wifi/java/com/android/server/wifi/BaseWifiService.java +++ b/wifi/java/com/android/server/wifi/BaseWifiService.java @@ -124,7 +124,7 @@ public class BaseWifiService extends IWifiManager.Stub { } @Override - public List<PasspointConfiguration> getPasspointConfigurations() { + public List<PasspointConfiguration> getPasspointConfigurations(String packageName) { throw new UnsupportedOperationException(); } diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pConfigTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pConfigTest.java index 01a4c53d618b..41f109a63759 100644 --- a/wifi/tests/src/android/net/wifi/p2p/WifiP2pConfigTest.java +++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pConfigTest.java @@ -16,8 +16,11 @@ package android.net.wifi.p2p; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; +import android.os.Parcel; + import androidx.test.filters.SmallTest; import org.junit.Test; @@ -27,6 +30,8 @@ import org.junit.Test; */ @SmallTest public class WifiP2pConfigTest { + + private static final String DEVICE_ADDRESS = "aa:bb:cc:dd:ee:ff"; /** * Check network name setter */ @@ -113,4 +118,43 @@ public class WifiP2pConfigTest { // expected exception. } } + + @Test + /* + * Verify WifiP2pConfig basic operations + */ + public void testWifiP2pConfig() throws Exception { + WifiP2pConfig config = new WifiP2pConfig(); + config.deviceAddress = DEVICE_ADDRESS; + + WifiP2pConfig copiedConfig = new WifiP2pConfig(config); + // no equals operator, use toString for comparison. + assertEquals(config.toString(), copiedConfig.toString()); + + Parcel parcelW = Parcel.obtain(); + config.writeToParcel(parcelW, 0); + byte[] bytes = parcelW.marshall(); + parcelW.recycle(); + + Parcel parcelR = Parcel.obtain(); + parcelR.unmarshall(bytes, 0, bytes.length); + parcelR.setDataPosition(0); + WifiP2pConfig configFromParcel = WifiP2pConfig.CREATOR.createFromParcel(parcelR); + + // no equals operator, use toString for comparison. + assertEquals(config.toString(), configFromParcel.toString()); + + } + + @Test + /* + * Verify WifiP2pConfig invalidate API + */ + public void testInvalidate() throws Exception { + WifiP2pConfig config = new WifiP2pConfig(); + config.deviceAddress = DEVICE_ADDRESS; + config.invalidate(); + assertEquals("", config.deviceAddress); + } + } diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pDeviceListTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pDeviceListTest.java new file mode 100644 index 000000000000..22936bd352fe --- /dev/null +++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pDeviceListTest.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.p2p; + +import static org.junit.Assert.assertEquals; + +import android.os.Parcel; + +import androidx.test.filters.SmallTest; + +import org.junit.Test; + +/** + * Unit test harness for {@link android.net.wifi.p2p.WifiP2pDeviceList} + */ +@SmallTest +public class WifiP2pDeviceListTest { + + private static final WifiP2pDevice TEST_DEVICE_1 = new WifiP2pDevice("aa:bb:cc:dd:ee:ff"); + private static final WifiP2pDevice TEST_DEVICE_2 = new WifiP2pDevice("aa:bb:cc:dd:ee:f1"); + private static final WifiP2pDevice TEST_DEVICE_3 = new WifiP2pDevice("11:22:33:44:55:66"); + private static final WifiP2pDevice TEST_DEVICE_4 = new WifiP2pDevice("a0:b0:c0:d0:e0:f0"); + + /** + * Verify basic operations. + */ + @Test + public void testListOperations() throws Exception { + WifiP2pDeviceList list = new WifiP2pDeviceList(); + list.update(TEST_DEVICE_1); + list.update(TEST_DEVICE_2); + list.update(TEST_DEVICE_3); + assertEquals(3, list.getDeviceList().size()); + + assertEquals(TEST_DEVICE_1, list.get(TEST_DEVICE_1.deviceAddress)); + assertEquals(null, list.get(TEST_DEVICE_4.deviceAddress)); + + list.remove(TEST_DEVICE_2.deviceAddress); + assertEquals(null, list.get(TEST_DEVICE_2.deviceAddress)); + + list.remove(TEST_DEVICE_3); + assertEquals(null, list.get(TEST_DEVICE_3.deviceAddress)); + + assertEquals(1, list.getDeviceList().size()); + + list.clear(); + assertEquals(0, list.getDeviceList().size()); + + Parcel parcelW = Parcel.obtain(); + list.writeToParcel(parcelW, 0); + byte[] bytes = parcelW.marshall(); + parcelW.recycle(); + + Parcel parcelR = Parcel.obtain(); + parcelR.unmarshall(bytes, 0, bytes.length); + parcelR.setDataPosition(0); + WifiP2pDeviceList fromParcel = WifiP2pDeviceList.CREATOR.createFromParcel(parcelR); + + assertEquals(list.toString(), fromParcel.toString()); + } +} diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pGroupListTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pGroupListTest.java new file mode 100644 index 000000000000..2402f5bb4658 --- /dev/null +++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pGroupListTest.java @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.p2p; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import android.os.Parcel; + +import androidx.test.filters.SmallTest; + +import org.junit.Before; +import org.junit.Test; + +/** + * Unit test harness for {@link android.net.wifi.p2p.WifiP2pGroupList} + */ +@SmallTest +public class WifiP2pGroupListTest { + + private static final WifiP2pDevice TEST_GROUP_OWNER_1 = new WifiP2pDevice("aa:bb:cc:dd:ee:f0"); + private static final WifiP2pDevice TEST_GROUP_OWNER_2 = new WifiP2pDevice("aa:bb:cc:dd:ee:f1"); + private static final WifiP2pDevice TEST_GROUP_OWNER_3 = new WifiP2pDevice("aa:bb:cc:dd:ee:f2"); + private static final WifiP2pDevice TEST_GROUP_OWNER_OTHER = + new WifiP2pDevice("aa:bb:cc:dd:ee:f3"); + + private WifiP2pGroup mTestGroup1; + private WifiP2pGroup mTestGroup2; + private WifiP2pGroup mTestGroup3; + private WifiP2pGroup mTestGroup4; + + private WifiP2pGroup createGroup( + int networkId, String networkName, + String passphrase, boolean isGo, + WifiP2pDevice goDev) { + WifiP2pGroup group = new WifiP2pGroup(); + group.setNetworkId(networkId); + group.setNetworkName(networkName); + group.setPassphrase(passphrase); + group.setIsGroupOwner(isGo); + group.setOwner(goDev); + return group; + } + + @Before + public void setUp() throws Exception { + mTestGroup1 = createGroup(0, "testGroup1", "12345678", false, TEST_GROUP_OWNER_1); + mTestGroup2 = createGroup(1, "testGroup2", "12345678", true, TEST_GROUP_OWNER_2); + mTestGroup3 = createGroup(2, "testGroup3", "12345678", false, TEST_GROUP_OWNER_3); + mTestGroup4 = createGroup(3, "testGroup4", "12345678", false, TEST_GROUP_OWNER_1); + } + + /** + * Verify basic operations. + */ + @Test + public void testListOperations() throws Exception { + WifiP2pGroupList list = new WifiP2pGroupList(); + list.add(mTestGroup1); + list.add(mTestGroup2); + list.add(mTestGroup3); + list.add(mTestGroup4); + assertEquals(4, list.getGroupList().size()); + + // in list + assertEquals(mTestGroup2.getNetworkId(), + list.getNetworkId(TEST_GROUP_OWNER_2.deviceAddress)); + assertEquals(TEST_GROUP_OWNER_2.deviceAddress, + list.getOwnerAddr(mTestGroup2.getNetworkId())); + // not in list + assertEquals(-1, list.getNetworkId(TEST_GROUP_OWNER_OTHER.deviceAddress)); + // if there are groups with the same GO, return the first one found. + assertEquals(mTestGroup1.getNetworkId(), + list.getNetworkId(TEST_GROUP_OWNER_1.deviceAddress)); + // identify groups with the same GO, but different network names. + assertEquals(mTestGroup4.getNetworkId(), + list.getNetworkId(TEST_GROUP_OWNER_1.deviceAddress, "testGroup4")); + + list.remove(mTestGroup3.getNetworkId()); + assertEquals(-1, list.getNetworkId(TEST_GROUP_OWNER_3.deviceAddress)); + assertFalse(list.contains(mTestGroup3.getNetworkId())); + + assertEquals(3, list.getGroupList().size()); + + Parcel parcelW = Parcel.obtain(); + list.writeToParcel(parcelW, 0); + byte[] bytes = parcelW.marshall(); + parcelW.recycle(); + + Parcel parcelR = Parcel.obtain(); + parcelR.unmarshall(bytes, 0, bytes.length); + parcelR.setDataPosition(0); + WifiP2pGroupList fromParcel = WifiP2pGroupList.CREATOR.createFromParcel(parcelR); + + assertEquals(list.toString(), fromParcel.toString()); + + list.clear(); + assertEquals(0, list.getGroupList().size()); + + } +} diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pGroupTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pGroupTest.java new file mode 100644 index 000000000000..9473e42184e3 --- /dev/null +++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pGroupTest.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.p2p; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import android.os.Parcel; + +import androidx.test.filters.SmallTest; + +import org.junit.Test; + +/** + * Unit test harness for {@link android.net.wifi.p2p.WifiP2pGroup} + */ +@SmallTest +public class WifiP2pGroupTest { + + private static final String INTERFACE = "p2p-p2p0-3"; + private static final int NETWORK_ID = 9; + private static final String NETWORK_NAME = "DIRECT-xy-Hello"; + private static final String PASSPHRASE = "HelloWorld"; + private static final WifiP2pDevice GROUP_OWNER = new WifiP2pDevice("de:ad:be:ef:00:01"); + private static final int FREQUENCY = 5300; + private static final WifiP2pDevice CLIENT_1 = new WifiP2pDevice("aa:bb:cc:dd:ee:01"); + private static final WifiP2pDevice CLIENT_2 = new WifiP2pDevice("aa:bb:cc:dd:ee:02"); + + /** + * Verify setter/getter functions. + */ + @Test + public void testSetterGetter() throws Exception { + WifiP2pGroup group = new WifiP2pGroup(); + + group.setInterface(INTERFACE); + group.setNetworkId(NETWORK_ID); + group.setNetworkName(NETWORK_NAME); + group.setPassphrase(PASSPHRASE); + group.setIsGroupOwner(false); + group.setOwner(GROUP_OWNER); + group.setFrequency(FREQUENCY); + group.addClient(CLIENT_1.deviceAddress); + group.addClient(CLIENT_2); + + assertEquals(INTERFACE, group.getInterface()); + assertEquals(NETWORK_ID, group.getNetworkId()); + assertEquals(NETWORK_NAME, group.getNetworkName()); + assertEquals(PASSPHRASE, group.getPassphrase()); + assertFalse(group.isGroupOwner()); + assertEquals(GROUP_OWNER, group.getOwner()); + assertEquals(FREQUENCY, group.getFrequency()); + + assertFalse(group.isClientListEmpty()); + assertTrue(group.contains(CLIENT_1)); + + assertEquals(2, group.getClientList().size()); + + group.removeClient(CLIENT_1); + group.removeClient(CLIENT_2.deviceAddress); + assertFalse(group.contains(CLIENT_1)); + assertTrue(group.isClientListEmpty()); + + Parcel parcelW = Parcel.obtain(); + group.writeToParcel(parcelW, 0); + byte[] bytes = parcelW.marshall(); + parcelW.recycle(); + + Parcel parcelR = Parcel.obtain(); + parcelR.unmarshall(bytes, 0, bytes.length); + parcelR.setDataPosition(0); + WifiP2pGroup fromParcel = WifiP2pGroup.CREATOR.createFromParcel(parcelR); + + assertEquals(group.toString(), fromParcel.toString()); + + } +} diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pInfoTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pInfoTest.java new file mode 100644 index 000000000000..e207ca1f3e7a --- /dev/null +++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pInfoTest.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.p2p; + +import static org.junit.Assert.assertEquals; + +import android.os.Parcel; + +import androidx.test.filters.SmallTest; + +import org.junit.Before; +import org.junit.Test; + +import java.net.InetAddress; + +/** + * Unit test harness for {@link android.net.wifi.p2p.WifiP2pInfo} + */ +@SmallTest +public class WifiP2pInfoTest { + + private InetAddress mGroupOnwerIpv4Address; + + @Before + public void setUp() throws Exception { + byte[] ipv4 = {(byte) 192, (byte) 168, (byte) 49, (byte) 1}; + mGroupOnwerIpv4Address = InetAddress.getByAddress(ipv4); + } + + /** + * Verifies copy constructor. + */ + @Test + public void testCopyOperator() throws Exception { + WifiP2pInfo info = new WifiP2pInfo(); + info.groupFormed = true; + info.isGroupOwner = true; + info.groupOwnerAddress = mGroupOnwerIpv4Address; + + WifiP2pInfo copiedInfo = new WifiP2pInfo(info); + + // no equals operator, use toString for data comparison. + assertEquals(info.toString(), copiedInfo.toString()); + } + + /** + * Verifies parcel serialization/deserialization. + */ + @Test + public void testParcelOperation() throws Exception { + WifiP2pInfo info = new WifiP2pInfo(); + info.groupFormed = true; + info.isGroupOwner = true; + info.groupOwnerAddress = mGroupOnwerIpv4Address; + + Parcel parcelW = Parcel.obtain(); + info.writeToParcel(parcelW, 0); + byte[] bytes = parcelW.marshall(); + parcelW.recycle(); + + Parcel parcelR = Parcel.obtain(); + parcelR.unmarshall(bytes, 0, bytes.length); + parcelR.setDataPosition(0); + WifiP2pInfo fromParcel = WifiP2pInfo.CREATOR.createFromParcel(parcelR); + + // no equals operator, use toString for data comparison. + assertEquals(info.toString(), fromParcel.toString()); + } +} diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pProvDiscEventTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pProvDiscEventTest.java new file mode 100644 index 000000000000..e3b10a7a52f0 --- /dev/null +++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pProvDiscEventTest.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.p2p; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import androidx.test.filters.SmallTest; + +import org.junit.Test; + +/** + * Unit test harness for {@link android.net.wifi.p2p.WifiP2pProvDiscEvent} + */ +@SmallTest +public class WifiP2pProvDiscEventTest { + + private static final String DEVICE_ADDRESS = "aa:bb:cc:dd:ee:ff"; + private static final String EVENT_PBC_REQ_STRING = "P2P-PROV-DISC-PBC-REQ"; + private static final String EVENT_PBC_RSP_STRING = "P2P-PROV-DISC-PBC-RESP"; + private static final String EVENT_ENTER_PIN_STRING = "P2P-PROV-DISC-ENTER-PIN"; + private static final String EVENT_SHOW_PIN_STRING = "P2P-PROV-DISC-SHOW-PIN"; + private static final String TEST_PIN = "44490607"; + + /** + * Test parsing PBC request event. + */ + @Test + public void testPbcReqEvent() throws Exception { + WifiP2pProvDiscEvent event = + new WifiP2pProvDiscEvent(EVENT_PBC_REQ_STRING + " " + DEVICE_ADDRESS); + assertEquals(WifiP2pProvDiscEvent.PBC_REQ, event.event); + assertEquals(DEVICE_ADDRESS, event.device.deviceAddress); + } + + + /** + * Test parsing PBC response event. + */ + @Test + public void testPbcRespEvent() throws Exception { + WifiP2pProvDiscEvent event = + new WifiP2pProvDiscEvent(EVENT_PBC_RSP_STRING + " " + DEVICE_ADDRESS); + assertEquals(WifiP2pProvDiscEvent.PBC_RSP, event.event); + assertEquals(DEVICE_ADDRESS, event.device.deviceAddress); + } + + /** + * Test parsing ENTER-PIN event. + */ + @Test + public void testEnterPinEvent() throws Exception { + WifiP2pProvDiscEvent event = + new WifiP2pProvDiscEvent(EVENT_ENTER_PIN_STRING + " " + DEVICE_ADDRESS); + assertEquals(WifiP2pProvDiscEvent.ENTER_PIN, event.event); + assertEquals(DEVICE_ADDRESS, event.device.deviceAddress); + } + + /** + * Test parsing SHOW-PIN event. + */ + @Test + public void testShowPinEvent() throws Exception { + WifiP2pProvDiscEvent event = + new WifiP2pProvDiscEvent( + EVENT_SHOW_PIN_STRING + " " + DEVICE_ADDRESS + " " + TEST_PIN); + assertEquals(WifiP2pProvDiscEvent.SHOW_PIN, event.event); + assertEquals(DEVICE_ADDRESS, event.device.deviceAddress); + assertEquals(TEST_PIN, event.pin); + } + + /** + * Test parsing malformed input. + */ + @Test + public void testMalformedInput() throws Exception { + try { + WifiP2pProvDiscEvent event = new WifiP2pProvDiscEvent("OneToken"); + fail("Should throw IllegalArgumentException exception."); + } catch (IllegalArgumentException ex) { + // expected exception. + } + } + + /** + * Test parsing malformed event. + */ + @Test + public void testMalformedEvent() throws Exception { + try { + WifiP2pProvDiscEvent event = new WifiP2pProvDiscEvent("XXX " + DEVICE_ADDRESS); + fail("Should throw IllegalArgumentException exception."); + } catch (IllegalArgumentException ex) { + // expected exception. + } + } +} diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java new file mode 100644 index 000000000000..d2f11688e4e5 --- /dev/null +++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.p2p; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import android.os.Parcel; + +import androidx.test.filters.SmallTest; + +import org.junit.Before; +import org.junit.Test; + +/** + * Unit test harness for {@link android.net.wifi.p2p.WifiP2pWfdInfo} + */ +@SmallTest +public class WifiP2pWfdInfoTest { + + private static final int TEST_CTRL_PORT = 9999; + private static final int TEST_MAX_TPUT = 1024; + + private WifiP2pWfdInfo mSourceInfo = new WifiP2pWfdInfo( + 0, + TEST_CTRL_PORT, + TEST_MAX_TPUT); + + @Before + public void setUp() { + // initialize device info flags. + mSourceInfo.setDeviceType(WifiP2pWfdInfo.WFD_SOURCE); + mSourceInfo.setSessionAvailable(true); + } + + /** + * Verifies setters/getters. + */ + @Test + public void testSettersGetters() throws Exception { + WifiP2pWfdInfo info = new WifiP2pWfdInfo(); + + info.setWfdEnabled(true); + assertTrue(info.isWfdEnabled()); + + info.setDeviceType(WifiP2pWfdInfo.WFD_SOURCE); + assertEquals(WifiP2pWfdInfo.WFD_SOURCE, info.getDeviceType()); + + info.setCoupledSinkSupportAtSource(true); + assertTrue(info.isCoupledSinkSupportedAtSource()); + + info.setCoupledSinkSupportAtSink(true); + assertTrue(info.isCoupledSinkSupportedAtSink()); + + info.setSessionAvailable(true); + assertTrue(info.isSessionAvailable()); + + info.setControlPort(TEST_CTRL_PORT); + assertEquals(TEST_CTRL_PORT, info.getControlPort()); + + info.setMaxThroughput(TEST_MAX_TPUT); + assertEquals(TEST_MAX_TPUT, info.getMaxThroughput()); + + assertEquals("0018270f0400", info.getDeviceInfoHex()); + } + + /** + * Verifies copy constructor. + */ + @Test + public void testCopyOperator() throws Exception { + WifiP2pWfdInfo copiedInfo = new WifiP2pWfdInfo(mSourceInfo); + + // no equals operator, use toString for data comparison. + assertEquals(mSourceInfo.toString(), copiedInfo.toString()); + } + + /** + * Verifies parcel serialization/deserialization. + */ + @Test + public void testParcelOperation() throws Exception { + Parcel parcelW = Parcel.obtain(); + mSourceInfo.writeToParcel(parcelW, 0); + byte[] bytes = parcelW.marshall(); + parcelW.recycle(); + + Parcel parcelR = Parcel.obtain(); + parcelR.unmarshall(bytes, 0, bytes.length); + parcelR.setDataPosition(0); + WifiP2pWfdInfo fromParcel = WifiP2pWfdInfo.CREATOR.createFromParcel(parcelR); + + // no equals operator, use toString for data comparison. + assertEquals(mSourceInfo.toString(), fromParcel.toString()); + } +} diff --git a/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfoTest.java b/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfoTest.java new file mode 100644 index 000000000000..e1cffee361e8 --- /dev/null +++ b/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfoTest.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.p2p.nsd; + +import static org.junit.Assert.fail; + +import androidx.test.filters.SmallTest; + +import org.junit.Before; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +/** + * Unit test harness for {@link android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo} + */ +@SmallTest +public class WifiP2pDnsSdServiceInfoTest { + + private static final String INSTANCE_NAME = "MyPrinter"; + private static final String SERVICE_TYPE = "_ipp._tcp"; + private static final String TXTRECORD_PROP_AVAILABLE = "available"; + private static final String TXTRECORD_PROP_AVAILABLE_VISABLE = "visable"; + + private Map<String, String> mTxtMap = new HashMap<>(); + + @Before + public void setUp() throws Exception { + mTxtMap.put(TXTRECORD_PROP_AVAILABLE, TXTRECORD_PROP_AVAILABLE_VISABLE); + } + + /** + * Verify newInstance API + */ + @Test + public void testNewInstance() throws Exception { + WifiP2pDnsSdServiceInfo info = null; + + // the least arguments + info = WifiP2pDnsSdServiceInfo.newInstance( + INSTANCE_NAME, + SERVICE_TYPE, + null); + + // all arguments are given. + info = WifiP2pDnsSdServiceInfo.newInstance( + INSTANCE_NAME, + SERVICE_TYPE, + mTxtMap); + + // failure case due to no instance name. + try { + info = WifiP2pDnsSdServiceInfo.newInstance( + null, + SERVICE_TYPE, + null); + fail("should throw IllegalArgumentException"); + } catch (IllegalArgumentException ex) { + // expected exception. + } + + // failure case due to no service type. + try { + info = WifiP2pDnsSdServiceInfo.newInstance( + INSTANCE_NAME, + null, + null); + fail("should throw IllegalArgumentException"); + } catch (IllegalArgumentException ex) { + // expected exception. + } + } +} diff --git a/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequestTest.java b/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequestTest.java new file mode 100644 index 000000000000..7d46a5f3a79d --- /dev/null +++ b/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequestTest.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.p2p.nsd; + +import static org.junit.Assert.fail; + +import androidx.test.filters.SmallTest; + +import org.junit.Test; + +/** + * Unit test harness for {@link android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest} + */ +@SmallTest +public class WifiP2pDnsSdServiceRequestTest { + + private static final String SERVICE_NAME = "MyPrinter"; + private static final String SERVICE_TYPE = "_ipp._tcp"; + + @Test + public void testNewInstance() throws Exception { + WifiP2pDnsSdServiceRequest request = null; + + // default new instance + request = WifiP2pDnsSdServiceRequest.newInstance(); + + // set service type + request = WifiP2pDnsSdServiceRequest.newInstance(SERVICE_TYPE); + + // set service type + request = WifiP2pDnsSdServiceRequest.newInstance(SERVICE_NAME, SERVICE_TYPE); + + // failure case due to null service type + try { + request = WifiP2pDnsSdServiceRequest.newInstance(null); + fail("should throw IllegalArgumentException"); + } catch (IllegalArgumentException ex) { + // expected exception. + } + + // failure case due to null service name + try { + request = WifiP2pDnsSdServiceRequest.newInstance(SERVICE_NAME, null); + fail("should throw IllegalArgumentException"); + } catch (IllegalArgumentException ex) { + // expected exception. + } + + // failure case due to null service type + try { + request = WifiP2pDnsSdServiceRequest.newInstance(null, SERVICE_TYPE); + fail("should throw IllegalArgumentException"); + } catch (IllegalArgumentException ex) { + // expected exception. + } + + } +} diff --git a/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfoTest.java b/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfoTest.java new file mode 100644 index 000000000000..49ead11065ae --- /dev/null +++ b/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfoTest.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.p2p.nsd; + +import static org.junit.Assert.fail; + +import androidx.test.filters.SmallTest; + +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +/** + * Unit test harness for {@link android.net.wifi.p2p.nsd.WifiP2pUpnpServiceInfo} + */ +@SmallTest +public class WifiP2pUpnpServiceInfoTest { + + private static final String UUID = "6859dede-8574-59ab-9332-123456789012"; + private static final String DEVICE = "aa:bb:cc:dd:ee:ff"; + + private List<String> mServiceList = new ArrayList<>(); + + @Before + public void setUp() throws Exception { + mServiceList.add("urn:schemas-upnp-org:service:ContentDirectory:1"); + } + + /** + * Verify newInstance API + */ + @Test + public void testNewInstance() throws Exception { + WifiP2pUpnpServiceInfo info = null; + + // the least arguments + info = WifiP2pUpnpServiceInfo.newInstance( + UUID, DEVICE, null); + + // all arguments are given. + info = WifiP2pUpnpServiceInfo.newInstance( + UUID, DEVICE, mServiceList); + + // failure case due to no UUID. + try { + info = WifiP2pUpnpServiceInfo.newInstance( + null, DEVICE, null); + fail("should throw IllegalArgumentException"); + } catch (IllegalArgumentException ex) { + // expected exception. + } + + // failure case due to no device. + try { + info = WifiP2pUpnpServiceInfo.newInstance( + UUID, + null, + null); + fail("should throw IllegalArgumentException"); + } catch (IllegalArgumentException ex) { + // expected exception. + } + } +} diff --git a/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequestTest.java b/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequestTest.java new file mode 100644 index 000000000000..79930dc83372 --- /dev/null +++ b/wifi/tests/src/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequestTest.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.p2p.nsd; + +import static org.junit.Assert.fail; + +import androidx.test.filters.SmallTest; + +import org.junit.Test; + +/** + * Unit test harness for {@link android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest} + */ +@SmallTest +public class WifiP2pUpnpServiceRequestTest { + + @Test + public void testNewInstance() throws Exception { + WifiP2pUpnpServiceRequest request = null; + + // Create a service discovery request to search all UPnP services. + request = WifiP2pUpnpServiceRequest.newInstance(); + + // Create a service discovery request to search specified UPnP services. + request = WifiP2pUpnpServiceRequest.newInstance("ssdp:all"); + + // failure case due to null target string + try { + request = WifiP2pUpnpServiceRequest.newInstance(null); + fail("should throw IllegalArgumentException"); + } catch (IllegalArgumentException ex) { + // expected exception. + } + } +} |