diff options
229 files changed, 4391 insertions, 1223 deletions
diff --git a/Android.bp b/Android.bp index 2c4963c91583..24a9bca1844c 100644 --- a/Android.bp +++ b/Android.bp @@ -62,6 +62,7 @@ cc_library { "core/proto/android/os/kernelwake.proto", "core/proto/android/os/pagetypeinfo.proto", "core/proto/android/os/procrank.proto", + "core/proto/android/os/system_properties.proto", "core/proto/android/service/graphicsstats.proto", "tools/streaming_proto/stream.proto", ], @@ -86,6 +87,7 @@ gensrcs { "core/proto/android/os/kernelwake.proto", "core/proto/android/os/pagetypeinfo.proto", "core/proto/android/os/procrank.proto", + "core/proto/android/os/system_properties.proto", ], // Append protoc-gen-cppstream tool's PATH otherwise aprotoc can't find the plugin tool diff --git a/api/current.txt b/api/current.txt index c7b2537c6733..a1b959656e32 100644 --- a/api/current.txt +++ b/api/current.txt @@ -6974,6 +6974,7 @@ package android.app.slice { public final class Slice implements android.os.Parcelable { ctor protected Slice(android.os.Parcel); method public static android.app.slice.Slice bindSlice(android.content.ContentResolver, android.net.Uri); + method public static android.app.slice.Slice bindSlice(android.content.Context, android.content.Intent); method public int describeContents(); method public java.util.List<java.lang.String> getHints(); method public java.util.List<android.app.slice.SliceItem> getItems(); @@ -7042,6 +7043,7 @@ package android.app.slice { method public final java.lang.String getType(android.net.Uri); method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues); method public abstract android.app.slice.Slice onBindSlice(android.net.Uri); + method public android.net.Uri onMapIntentToUri(android.content.Intent); method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal); method public final android.database.Cursor query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal); diff --git a/api/system-current.txt b/api/system-current.txt index acb81eecea3e..d4656acd4e8c 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7418,6 +7418,7 @@ package android.app.slice { public final class Slice implements android.os.Parcelable { ctor protected Slice(android.os.Parcel); method public static android.app.slice.Slice bindSlice(android.content.ContentResolver, android.net.Uri); + method public static android.app.slice.Slice bindSlice(android.content.Context, android.content.Intent); method public int describeContents(); method public java.util.List<java.lang.String> getHints(); method public java.util.List<android.app.slice.SliceItem> getItems(); @@ -7486,6 +7487,7 @@ package android.app.slice { method public final java.lang.String getType(android.net.Uri); method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues); method public abstract android.app.slice.Slice onBindSlice(android.net.Uri); + method public android.net.Uri onMapIntentToUri(android.content.Intent); method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal); method public final android.database.Cursor query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal); diff --git a/api/test-current.txt b/api/test-current.txt index 6701de3f62cc..de41626fc17e 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -7048,6 +7048,7 @@ package android.app.slice { public final class Slice implements android.os.Parcelable { ctor protected Slice(android.os.Parcel); method public static android.app.slice.Slice bindSlice(android.content.ContentResolver, android.net.Uri); + method public static android.app.slice.Slice bindSlice(android.content.Context, android.content.Intent); method public int describeContents(); method public java.util.List<java.lang.String> getHints(); method public java.util.List<android.app.slice.SliceItem> getItems(); @@ -7116,6 +7117,7 @@ package android.app.slice { method public final java.lang.String getType(android.net.Uri); method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues); method public abstract android.app.slice.Slice onBindSlice(android.net.Uri); + method public android.net.Uri onMapIntentToUri(android.content.Intent); method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal); method public final android.database.Cursor query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal); @@ -38154,6 +38156,7 @@ package android.service.notification { public abstract class ConditionProviderService extends android.app.Service { ctor public ConditionProviderService(); + method public boolean isBound(); method public final void notifyCondition(android.service.notification.Condition); method public final void notifyConditions(android.service.notification.Condition...); method public android.os.IBinder onBind(android.content.Intent); diff --git a/cmds/incident_helper/src/ih_util.cpp b/cmds/incident_helper/src/ih_util.cpp index 0b51e66c2108..db4f586c7e31 100644 --- a/cmds/incident_helper/src/ih_util.cpp +++ b/cmds/incident_helper/src/ih_util.cpp @@ -30,22 +30,26 @@ bool isValidChar(char c) { || (v == (uint8_t)'_'); } -static std::string trim(const std::string& s, const std::string& chars) { - const auto head = s.find_first_not_of(chars); +std::string trim(const std::string& s, const std::string& charset) { + const auto head = s.find_first_not_of(charset); if (head == std::string::npos) return ""; - const auto tail = s.find_last_not_of(chars); + const auto tail = s.find_last_not_of(charset); return s.substr(head, tail - head + 1); } -static std::string trimDefault(const std::string& s) { +static inline std::string toLowerStr(const std::string& s) { + std::string res(s); + std::transform(res.begin(), res.end(), res.begin(), ::tolower); + return res; +} + +static inline std::string trimDefault(const std::string& s) { return trim(s, DEFAULT_WHITESPACE); } -static std::string trimHeader(const std::string& s) { - std::string res = trimDefault(s); - std::transform(res.begin(), res.end(), res.begin(), ::tolower); - return res; +static inline std::string trimHeader(const std::string& s) { + return toLowerStr(trimDefault(s)); } // This is similiar to Split in android-base/file.h, but it won't add empty string @@ -188,97 +192,106 @@ bool Reader::ok(std::string* error) { } // ============================================================================== -static int -lookupName(const char** names, const int size, const char* name) +Table::Table(const char* names[], const uint64_t ids[], const int count) + :mEnums(), + mEnumValuesByName() { - for (int i=0; i<size; i++) { - if (strcmp(name, names[i]) == 0) { - return i; - } + map<std::string, uint64_t> fields; + for (int i = 0; i < count; i++) { + fields[names[i]] = ids[i]; } - return -1; -} - -EnumTypeMap::EnumTypeMap(const char* enumNames[], const uint32_t enumValues[], const int enumCount) - :mEnumNames(enumNames), - mEnumValues(enumValues), - mEnumCount(enumCount) -{ -} - -EnumTypeMap::~EnumTypeMap() -{ + mFields = fields; } -int -EnumTypeMap::parseValue(const std::string& value) +Table::~Table() { - int index = lookupName(mEnumNames, mEnumCount, value.c_str()); - if (index < 0) return mEnumValues[0]; // Assume value 0 is default - return mEnumValues[index]; } -Table::Table(const char* names[], const uint64_t ids[], const int count) - :mFieldNames(names), - mFieldIds(ids), - mFieldCount(count), - mEnums() +void +Table::addEnumTypeMap(const char* field, const char* enumNames[], const int enumValues[], const int enumSize) { -} + if (mFields.find(field) == mFields.end()) return; -Table::~Table() -{ + map<std::string, int> enu; + for (int i = 0; i < enumSize; i++) { + enu[enumNames[i]] = enumValues[i]; + } + mEnums[field] = enu; } void -Table::addEnumTypeMap(const char* field, const char* enumNames[], const uint32_t enumValues[], const int enumSize) +Table::addEnumNameToValue(const char* enumName, const int enumValue) { - int index = lookupName(mFieldNames, mFieldCount, field); - if (index < 0) return; - - EnumTypeMap enu(enumNames, enumValues, enumSize); - mEnums[index] = enu; + mEnumValuesByName[enumName] = enumValue; } bool Table::insertField(ProtoOutputStream* proto, const std::string& name, const std::string& value) { - int index = lookupName(mFieldNames, mFieldCount, name.c_str()); - if (index < 0) return false; + if (mFields.find(name) == mFields.end()) return false; - uint64_t found = mFieldIds[index]; - switch (found & FIELD_TYPE_MASK) { - case FIELD_TYPE_DOUBLE: - case FIELD_TYPE_FLOAT: + uint64_t found = mFields[name]; + record_t repeats; // used for repeated fields + switch ((found & FIELD_COUNT_MASK) | (found & FIELD_TYPE_MASK)) { + case FIELD_COUNT_SINGLE | FIELD_TYPE_DOUBLE: + case FIELD_COUNT_SINGLE | FIELD_TYPE_FLOAT: proto->write(found, toDouble(value)); break; - case FIELD_TYPE_STRING: - case FIELD_TYPE_BYTES: + case FIELD_COUNT_SINGLE | FIELD_TYPE_STRING: + case FIELD_COUNT_SINGLE | FIELD_TYPE_BYTES: proto->write(found, value); break; - case FIELD_TYPE_INT64: - case FIELD_TYPE_SINT64: - case FIELD_TYPE_UINT64: - case FIELD_TYPE_FIXED64: - case FIELD_TYPE_SFIXED64: + case FIELD_COUNT_SINGLE | FIELD_TYPE_INT64: + case FIELD_COUNT_SINGLE | FIELD_TYPE_SINT64: + case FIELD_COUNT_SINGLE | FIELD_TYPE_UINT64: + case FIELD_COUNT_SINGLE | FIELD_TYPE_FIXED64: + case FIELD_COUNT_SINGLE | FIELD_TYPE_SFIXED64: proto->write(found, toLongLong(value)); break; - case FIELD_TYPE_BOOL: + case FIELD_COUNT_SINGLE | FIELD_TYPE_BOOL: + if (strcmp(toLowerStr(value).c_str(), "true") == 0 || strcmp(value.c_str(), "1") == 0) { + proto->write(found, true); + break; + } + if (strcmp(toLowerStr(value).c_str(), "false") == 0 || strcmp(value.c_str(), "0") == 0) { + proto->write(found, false); + break; + } return false; - case FIELD_TYPE_ENUM: - if (mEnums.find(index) == mEnums.end()) { - // forget to add enum type mapping + case FIELD_COUNT_SINGLE | FIELD_TYPE_ENUM: + // if the field has its own enum mapping, use this, otherwise use general name to value mapping. + if (mEnums.find(name) != mEnums.end()) { + if (mEnums[name].find(value) != mEnums[name].end()) { + proto->write(found, mEnums[name][value]); + } else { + proto->write(found, 0); // TODO: should get the default enum value (Unknown) + } + } else if (mEnumValuesByName.find(value) != mEnumValuesByName.end()) { + proto->write(found, mEnumValuesByName[value]); + } else { return false; } - proto->write(found, mEnums[index].parseValue(value)); break; - case FIELD_TYPE_INT32: - case FIELD_TYPE_SINT32: - case FIELD_TYPE_UINT32: - case FIELD_TYPE_FIXED32: - case FIELD_TYPE_SFIXED32: + case FIELD_COUNT_SINGLE | FIELD_TYPE_INT32: + case FIELD_COUNT_SINGLE | FIELD_TYPE_SINT32: + case FIELD_COUNT_SINGLE | FIELD_TYPE_UINT32: + case FIELD_COUNT_SINGLE | FIELD_TYPE_FIXED32: + case FIELD_COUNT_SINGLE | FIELD_TYPE_SFIXED32: proto->write(found, toInt(value)); break; + // REPEATED TYPE below: + case FIELD_COUNT_REPEATED | FIELD_TYPE_INT32: + repeats = parseRecord(value, COMMA_DELIMITER); + for (size_t i=0; i<repeats.size(); i++) { + proto->write(found, toInt(repeats[i])); + } + break; + case FIELD_COUNT_REPEATED | FIELD_TYPE_STRING: + repeats = parseRecord(value, COMMA_DELIMITER); + for (size_t i=0; i<repeats.size(); i++) { + proto->write(found, repeats[i]); + } + break; default: return false; } diff --git a/cmds/incident_helper/src/ih_util.h b/cmds/incident_helper/src/ih_util.h index e8366fa599e2..4a5fe1dd7a42 100644 --- a/cmds/incident_helper/src/ih_util.h +++ b/cmds/incident_helper/src/ih_util.h @@ -37,6 +37,9 @@ const std::string COMMA_DELIMITER = ","; // returns true if c is a-zA-Z0-9 or underscore _ bool isValidChar(char c); +// trim the string with the given charset +std::string trim(const std::string& s, const std::string& charset); + /** * When a text has a table format like this * line 1: HeadA HeadB HeadC @@ -98,21 +101,6 @@ private: std::string mStatus; }; -class EnumTypeMap -{ -public: - EnumTypeMap() {}; - EnumTypeMap(const char* enumNames[], const uint32_t enumValues[], const int enumCount); - ~EnumTypeMap(); - - int parseValue(const std::string& value); - -private: - const char** mEnumNames; - const uint32_t* mEnumValues; - int mEnumCount; -}; - /** * The class contains a mapping between table headers to its field ids. * And allow users to insert the field values to proto based on its header name. @@ -124,14 +112,16 @@ public: ~Table(); // Add enum names to values for parsing purpose. - void addEnumTypeMap(const char* field, const char* enumNames[], const uint32_t enumValues[], const int enumSize); + void addEnumTypeMap(const char* field, const char* enumNames[], const int enumValues[], const int enumSize); + + // manually add enum names to values mapping, useful when an Enum type is used by a lot of fields, and there are no name conflicts + void addEnumNameToValue(const char* enumName, const int enumValue); bool insertField(ProtoOutputStream* proto, const std::string& name, const std::string& value); private: - const char** mFieldNames; - const uint64_t* mFieldIds; - const int mFieldCount; - map<int, EnumTypeMap> mEnums; + map<std::string, uint64_t> mFields; + map<std::string, map<std::string, int>> mEnums; + map<std::string, int> mEnumValuesByName; }; #endif // INCIDENT_HELPER_UTIL_H diff --git a/cmds/incident_helper/src/main.cpp b/cmds/incident_helper/src/main.cpp index 5ebe9bd31be5..8239d8ec92ed 100644 --- a/cmds/incident_helper/src/main.cpp +++ b/cmds/incident_helper/src/main.cpp @@ -20,6 +20,7 @@ #include "parsers/KernelWakesParser.h" #include "parsers/PageTypeInfoParser.h" #include "parsers/ProcrankParser.h" +#include "parsers/SystemPropertiesParser.h" #include <android-base/file.h> #include <getopt.h> @@ -49,6 +50,8 @@ static TextParserBase* selectParser(int section) { return new ReverseParser(); /* ========================================================================= */ // IDs larger than 1 are section ids reserved in incident.proto + case 1000: + return new SystemPropertiesParser(); case 2000: return new ProcrankParser(); case 2001: diff --git a/cmds/incident_helper/src/parsers/SystemPropertiesParser.cpp b/cmds/incident_helper/src/parsers/SystemPropertiesParser.cpp new file mode 100644 index 000000000000..ee5feb03242e --- /dev/null +++ b/cmds/incident_helper/src/parsers/SystemPropertiesParser.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2017 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. + */ +#define LOG_TAG "incident_helper" + +#include <android/util/ProtoOutputStream.h> + +#include "frameworks/base/core/proto/android/os/system_properties.proto.h" +#include "ih_util.h" +#include "SystemPropertiesParser.h" + +using namespace android::os; + +const string LINE_DELIMITER = "]: ["; + +// system properties' names sometimes are not valid proto field names, make the names valid. +static string convertToFieldName(const string& name) { + int len = (int)name.length(); + char cstr[len + 1]; + strcpy(cstr, name.c_str()); + for (int i = 0; i < len; i++) { + if (!isValidChar(cstr[i])) { + cstr[i] = '_'; + } + } + return string(cstr); +} + +status_t +SystemPropertiesParser::Parse(const int in, const int out) const +{ + Reader reader(in); + string line; + string name; // the name of the property + string value; // the string value of the property + + ProtoOutputStream proto; + Table table(SystemPropertiesProto::_FIELD_NAMES, SystemPropertiesProto::_FIELD_IDS, SystemPropertiesProto::_FIELD_COUNT); + table.addEnumNameToValue("running", SystemPropertiesProto::STATUS_RUNNING); + table.addEnumNameToValue("stopped", SystemPropertiesProto::STATUS_STOPPED); + + // parse line by line + while (reader.readLine(&line)) { + if (line.empty()) continue; + + line = line.substr(1, line.size() - 2); // trim [] + size_t index = line.find(LINE_DELIMITER); // split by "]: [" + if (index == string::npos) { + fprintf(stderr, "Bad Line %s\n", line.c_str()); + continue; + } + name = line.substr(0, index); + value = trim(line.substr(index + 4), DEFAULT_WHITESPACE); + if (value.empty()) continue; + + // if the property name couldn't be found in proto definition or the value has mistype, + // add to extra properties with its name and value + if (!table.insertField(&proto, convertToFieldName(name), value)) { + long long token = proto.start(SystemPropertiesProto::EXTRA_PROPERTIES); + proto.write(SystemPropertiesProto::Property::NAME, name); + proto.write(SystemPropertiesProto::Property::VALUE, value); + proto.end(token); + } + } + + if (!reader.ok(&line)) { + fprintf(stderr, "Bad read from fd %d: %s\n", in, line.c_str()); + return -1; + } + + if (!proto.flush(out)) { + fprintf(stderr, "[%s]Error writing proto back\n", this->name.string()); + return -1; + } + fprintf(stderr, "[%s]Proto size: %zu bytes\n", this->name.string(), proto.size()); + return NO_ERROR; +} diff --git a/cmds/incident_helper/src/parsers/SystemPropertiesParser.h b/cmds/incident_helper/src/parsers/SystemPropertiesParser.h new file mode 100644 index 000000000000..c4016006a48a --- /dev/null +++ b/cmds/incident_helper/src/parsers/SystemPropertiesParser.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2017 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. + */ + +#ifndef SYSTEM_PROPERTIES_PARSER_H +#define SYSTEM_PROPERTIES_PARSER_H + +#include "TextParserBase.h" + +using namespace android; + +/** + * SystemProperties parser, parses text produced by command getprop. + */ +class SystemPropertiesParser : public TextParserBase { +public: + SystemPropertiesParser() : TextParserBase(String8("SystemPropertiesParser")) {}; + ~SystemPropertiesParser() {}; + + virtual status_t Parse(const int in, const int out) const; +}; + +#endif // SYSTEM_PROPERTIES_PARSER_H diff --git a/cmds/incident_helper/testdata/system_properties.txt b/cmds/incident_helper/testdata/system_properties.txt new file mode 100644 index 000000000000..57c07ee9d75e --- /dev/null +++ b/cmds/incident_helper/testdata/system_properties.txt @@ -0,0 +1,14 @@ +[aaudio.hw_burst_min_usec]: [2000] +[aaudio.mmap_exclusive_policy]: [2] +[dalvik.vm.appimageformat]: [lz4] +[gsm.operator.isroaming]: [false] +[init.svc.vendor.imsqmidaemon]: [running] +[init.svc.vendor.init-radio-sh]: [stopped] +[net.dns1]: [2001:4860:4860::8844] +[net.tcp.buffersize.wifi]: [524288,2097152,4194304,262144,524288,1048576] +[nfc.initialized]: [True] +[persist_radio_VT_ENABLE]: [1] +[ro.boot.boottime]: [1BLL:85,1BLE:898,2BLL:0,2BLE:862,SW:6739,KL:340] +[ro.bootimage.build.date.utc]: [1509394807] +[ro.bootimage.build.fingerprint]: [google/marlin/marlin:P/MASTER/jinyithu10301320:eng/dev-keys] +[ro.wifi.channels]: []
\ No newline at end of file diff --git a/cmds/incident_helper/tests/SystemPropertiesParser_test.cpp b/cmds/incident_helper/tests/SystemPropertiesParser_test.cpp new file mode 100644 index 000000000000..23e292a512b9 --- /dev/null +++ b/cmds/incident_helper/tests/SystemPropertiesParser_test.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2017 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. + */ + +#include "SystemPropertiesParser.h" + +#include "frameworks/base/core/proto/android/os/system_properties.pb.h" + +#include <android-base/file.h> +#include <android-base/test_utils.h> +#include <gmock/gmock.h> +#include <google/protobuf/message.h> +#include <gtest/gtest.h> +#include <string.h> +#include <fcntl.h> + +using namespace android::base; +using namespace android::os; +using namespace std; +using ::testing::StrEq; +using ::testing::Test; +using ::testing::internal::CaptureStderr; +using ::testing::internal::CaptureStdout; +using ::testing::internal::GetCapturedStderr; +using ::testing::internal::GetCapturedStdout; + +class SystemPropertiesParserTest : public Test { +public: + virtual void SetUp() override { + ASSERT_TRUE(tf.fd != -1); + } + + string getSerializedString(::google::protobuf::Message& message) { + string expectedStr; + message.SerializeToFileDescriptor(tf.fd); + ReadFileToString(tf.path, &expectedStr); + return expectedStr; + } + +protected: + TemporaryFile tf; + + const string kTestPath = GetExecutableDirectory(); + const string kTestDataPath = kTestPath + "/testdata/"; +}; + +TEST_F(SystemPropertiesParserTest, HasSwapInfo) { + const string testFile = kTestDataPath + "system_properties.txt"; + SystemPropertiesParser parser; + SystemPropertiesProto expected; + + expected.set_aaudio_hw_burst_min_usec(2000); + expected.set_aaudio_mmap_exclusive_policy(2); + expected.set_dalvik_vm_appimageformat("lz4"); + expected.set_gsm_operator_isroaming(false); + expected.set_init_svc_vendor_imsqmidaemon(SystemPropertiesProto_Status_STATUS_RUNNING); + expected.set_init_svc_vendor_init_radio_sh(SystemPropertiesProto_Status_STATUS_STOPPED); + expected.set_net_dns1("2001:4860:4860::8844"); + expected.add_net_tcp_buffersize_wifi(524288); + expected.add_net_tcp_buffersize_wifi(2097152); + expected.add_net_tcp_buffersize_wifi(4194304); + expected.add_net_tcp_buffersize_wifi(262144); + expected.add_net_tcp_buffersize_wifi(524288); + expected.add_net_tcp_buffersize_wifi(1048576); + expected.set_nfc_initialized(true); + expected.set_persist_radio_vt_enable(1); + expected.add_ro_boot_boottime("1BLL:85"); + expected.add_ro_boot_boottime("1BLE:898"); + expected.add_ro_boot_boottime("2BLL:0"); + expected.add_ro_boot_boottime("2BLE:862"); + expected.add_ro_boot_boottime("SW:6739"); + expected.add_ro_boot_boottime("KL:340"); + expected.set_ro_bootimage_build_date_utc(1509394807LL); + expected.set_ro_bootimage_build_fingerprint("google/marlin/marlin:P/MASTER/jinyithu10301320:eng/dev-keys"); + + int fd = open(testFile.c_str(), O_RDONLY); + ASSERT_TRUE(fd != -1); + + CaptureStdout(); + ASSERT_EQ(NO_ERROR, parser.Parse(fd, STDOUT_FILENO)); + EXPECT_EQ(GetCapturedStdout(), getSerializedString(expected)); + close(fd); +} diff --git a/cmds/sm/src/com/android/commands/sm/Sm.java b/cmds/sm/src/com/android/commands/sm/Sm.java index 699de94a0240..77e8efafa2a0 100644 --- a/cmds/sm/src/com/android/commands/sm/Sm.java +++ b/cmds/sm/src/com/android/commands/sm/Sm.java @@ -101,6 +101,8 @@ public final class Sm { runSetEmulateFbe(); } else if ("get-fbe-mode".equals(op)) { runGetFbeMode(); + } else if ("idle-maint".equals(op)) { + runIdleMaint(); } else if ("fstrim".equals(op)) { runFstrim(); } else if ("set-virtual-disk".equals(op)) { @@ -278,6 +280,15 @@ public final class Sm { StorageManager.DEBUG_VIRTUAL_DISK); } + public void runIdleMaint() throws RemoteException { + final boolean im_run = "run".equals(nextArg()); + if (im_run) { + mSm.runIdleMaintenance(); + } else { + mSm.abortIdleMaintenance(); + } + } + private String nextArg() { if (mNextArg >= mArgs.length) { return null; @@ -300,6 +311,7 @@ public final class Sm { System.err.println(" sm unmount VOLUME"); System.err.println(" sm format VOLUME"); System.err.println(" sm benchmark VOLUME"); + System.err.println(" sm idle-maint [run|abort]"); System.err.println(" sm fstrim"); System.err.println(""); System.err.println(" sm forget [UUID|all]"); diff --git a/cmds/statsd/src/config/ConfigManager.cpp b/cmds/statsd/src/config/ConfigManager.cpp index 6e8ed7736ee7..a9ce4a337590 100644 --- a/cmds/statsd/src/config/ConfigManager.cpp +++ b/cmds/statsd/src/config/ConfigManager.cpp @@ -212,7 +212,7 @@ static StatsdConfig build_fake_config() { keyMatcher = durationMetric->add_dimension(); keyMatcher->set_key(WAKE_LOCK_UID_KEY_ID); durationMetric->set_what("WL_HELD_PER_APP_PER_NAME"); - durationMetric->set_predicate("APP_IS_BACKGROUND_AND_SCREEN_ON"); + durationMetric->set_condition("APP_IS_BACKGROUND_AND_SCREEN_ON"); link = durationMetric->add_links(); link->set_condition("APP_IS_BACKGROUND"); link->add_key_in_main()->set_key(WAKE_LOCK_UID_KEY_ID); @@ -226,7 +226,7 @@ static StatsdConfig build_fake_config() { keyMatcher = durationMetric->add_dimension(); keyMatcher->set_key(WAKE_LOCK_UID_KEY_ID); durationMetric->set_what("WL_HELD_PER_APP_PER_NAME"); - durationMetric->set_predicate("APP_IS_BACKGROUND_AND_SCREEN_ON"); + durationMetric->set_condition("APP_IS_BACKGROUND_AND_SCREEN_ON"); link = durationMetric->add_links(); link->set_condition("APP_IS_BACKGROUND"); link->add_key_in_main()->set_key(WAKE_LOCK_UID_KEY_ID); @@ -238,7 +238,7 @@ static StatsdConfig build_fake_config() { durationMetric->mutable_bucket()->set_bucket_size_millis(30 * 1000L); durationMetric->set_type(DurationMetric_AggregationType_DURATION_MAX_SPARSE); durationMetric->set_what("WL_HELD_PER_APP_PER_NAME"); - durationMetric->set_predicate("APP_IS_BACKGROUND_AND_SCREEN_ON"); + durationMetric->set_condition("APP_IS_BACKGROUND_AND_SCREEN_ON"); link = durationMetric->add_links(); link->set_condition("APP_IS_BACKGROUND"); link->add_key_in_main()->set_key(WAKE_LOCK_UID_KEY_ID); diff --git a/cmds/statsd/src/metrics/metrics_manager_util.cpp b/cmds/statsd/src/metrics/metrics_manager_util.cpp index c2044d85ec9f..4c63b20f5fb6 100644 --- a/cmds/statsd/src/metrics/metrics_manager_util.cpp +++ b/cmds/statsd/src/metrics/metrics_manager_util.cpp @@ -220,6 +220,11 @@ bool initMetrics(const StatsdConfig& config, const unordered_map<string, int>& l handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap, metric.links(), allConditionTrackers, conditionIndex, conditionToMetricMap); + } else { + if (metric.links_size() > 0) { + ALOGW("metrics has a EventConditionLink but doesn't have a condition"); + return false; + } } sp<MetricProducer> countProducer = @@ -276,10 +281,15 @@ bool initMetrics(const StatsdConfig& config, const unordered_map<string, int>& l int conditionIndex = -1; - if (metric.has_predicate()) { - handleMetricWithConditions(metric.predicate(), metricIndex, conditionTrackerMap, + if (metric.has_condition()) { + handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap, metric.links(), allConditionTrackers, conditionIndex, conditionToMetricMap); + } else { + if (metric.links_size() > 0) { + ALOGW("metrics has a EventConditionLink but doesn't have a condition"); + return false; + } } sp<MetricProducer> durationMetric = new DurationMetricProducer( @@ -308,6 +318,11 @@ bool initMetrics(const StatsdConfig& config, const unordered_map<string, int>& l handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap, metric.links(), allConditionTrackers, conditionIndex, conditionToMetricMap); + } else { + if (metric.links_size() > 0) { + ALOGW("metrics has a EventConditionLink but doesn't have a condition"); + return false; + } } sp<MetricProducer> eventMetric = @@ -349,6 +364,11 @@ bool initMetrics(const StatsdConfig& config, const unordered_map<string, int>& l handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap, metric.links(), allConditionTrackers, conditionIndex, conditionToMetricMap); + } else { + if (metric.links_size() > 0) { + ALOGW("metrics has a EventConditionLink but doesn't have a condition"); + return false; + } } sp<MetricProducer> valueProducer = @@ -389,6 +409,11 @@ bool initMetrics(const StatsdConfig& config, const unordered_map<string, int>& l handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap, metric.links(), allConditionTrackers, conditionIndex, conditionToMetricMap); + } else { + if (metric.links_size() > 0) { + ALOGW("metrics has a EventConditionLink but doesn't have a condition"); + return false; + } } sp<MetricProducer> gaugeProducer = diff --git a/cmds/statsd/src/statsd_config.proto b/cmds/statsd/src/statsd_config.proto index 7648a9178a7c..9a760b1b8ca5 100644 --- a/cmds/statsd/src/statsd_config.proto +++ b/cmds/statsd/src/statsd_config.proto @@ -161,20 +161,20 @@ message DurationMetric { optional string what = 2; + optional string condition = 3; + + repeated EventConditionLink links = 4; + enum AggregationType { DURATION_SUM = 1; DURATION_MAX_SPARSE = 2; - } - optional AggregationType type = 3; - - optional string predicate = 4; - - repeated KeyMatcher dimension = 5; + } + optional AggregationType type = 5; - optional Bucket bucket = 6; + repeated KeyMatcher dimension = 6; - repeated EventConditionLink links = 7; + optional Bucket bucket = 7; } message GaugeMetric { diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index a52dc1e4e768..f931589b50a2 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -758,10 +758,10 @@ public class NotificationManager { } /** - * Checks the ability to read/modify notification do not disturb policy for the calling package. + * Checks the ability to modify notification do not disturb policy for the calling package. * * <p> - * Returns true if the calling package can read/modify notification policy. + * Returns true if the calling package can modify notification policy. * * <p> * Apps can request policy access by sending the user to the activity that matches the system @@ -839,8 +839,6 @@ public class NotificationManager { * Gets the current notification policy. * * <p> - * Only available if policy access is granted to this package. - * See {@link #isNotificationPolicyAccessGranted}. */ public Policy getNotificationPolicy() { INotificationManager service = getService(); diff --git a/core/java/android/app/slice/Slice.java b/core/java/android/app/slice/Slice.java index fdf8c070b34f..616a5be3e552 100644 --- a/core/java/android/app/slice/Slice.java +++ b/core/java/android/app/slice/Slice.java @@ -21,9 +21,12 @@ import android.annotation.Nullable; import android.annotation.StringDef; import android.app.PendingIntent; import android.app.RemoteInput; -import android.app.slice.widget.SliceView; +import android.content.ContentProvider; import android.content.ContentResolver; +import android.content.Context; import android.content.IContentProvider; +import android.content.Intent; +import android.content.pm.ResolveInfo; import android.graphics.drawable.Icon; import android.net.Uri; import android.os.Bundle; @@ -424,4 +427,58 @@ public final class Slice implements Parcelable { resolver.releaseProvider(provider); } } + + /** + * Turns a slice intent into slice content. Expects an explicit intent. If there is no + * {@link ContentProvider} associated with the given intent this will throw + * {@link IllegalArgumentException}. + * + * @param context The context to use. + * @param intent The intent associated with a slice. + * @return The Slice provided by the app or null if none is given. + * @see Slice + * @see SliceProvider#onMapIntentToUri(Intent) + * @see Intent + */ + public static @Nullable Slice bindSlice(Context context, @NonNull Intent intent) { + Preconditions.checkNotNull(intent, "intent"); + Preconditions.checkArgument(intent.getComponent() != null || intent.getPackage() != null, + "Slice intent must be explicit " + intent); + ContentResolver resolver = context.getContentResolver(); + + // Check if the intent has data for the slice uri on it and use that + final Uri intentData = intent.getData(); + if (intentData != null && SliceProvider.SLICE_TYPE.equals(resolver.getType(intentData))) { + return bindSlice(resolver, intentData); + } + // Otherwise ask the app + List<ResolveInfo> providers = + context.getPackageManager().queryIntentContentProviders(intent, 0); + if (providers == null) { + throw new IllegalArgumentException("Unable to resolve intent " + intent); + } + String authority = providers.get(0).providerInfo.authority; + Uri uri = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT) + .authority(authority).build(); + IContentProvider provider = resolver.acquireProvider(uri); + if (provider == null) { + throw new IllegalArgumentException("Unknown URI " + uri); + } + try { + Bundle extras = new Bundle(); + extras.putParcelable(SliceProvider.EXTRA_INTENT, intent); + final Bundle res = provider.call(resolver.getPackageName(), + SliceProvider.METHOD_MAP_INTENT, null, extras); + if (res == null) { + return null; + } + return res.getParcelable(SliceProvider.EXTRA_SLICE); + } catch (RemoteException e) { + // Arbitrary and not worth documenting, as Activity + // Manager will kill this process shortly anyway. + return null; + } finally { + resolver.releaseProvider(provider); + } + } } diff --git a/core/java/android/app/slice/SliceProvider.java b/core/java/android/app/slice/SliceProvider.java index da718dc9a2a2..05f4ce6eb10f 100644 --- a/core/java/android/app/slice/SliceProvider.java +++ b/core/java/android/app/slice/SliceProvider.java @@ -16,10 +16,13 @@ package android.app.slice; import android.Manifest.permission; +import android.annotation.NonNull; +import android.app.slice.widget.SliceView; import android.content.ContentProvider; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Intent; +import android.content.IntentFilter; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; @@ -37,29 +40,45 @@ import android.util.Log; import java.util.concurrent.CountDownLatch; /** - * A SliceProvider allows app to provide content to be displayed in system - * spaces. This content is templated and can contain actions, and the behavior - * of how it is surfaced is specific to the system surface. + * A SliceProvider allows an app to provide content to be displayed in system spaces. This content + * is templated and can contain actions, and the behavior of how it is surfaced is specific to the + * system surface. + * <p> + * Slices are not currently live content. They are bound once and shown to the user. If the content + * changes due to a callback from user interaction, then + * {@link ContentResolver#notifyChange(Uri, ContentObserver)} should be used to notify the system. + * </p> + * <p> + * The provider needs to be declared in the manifest to provide the authority for the app. The + * authority for most slices is expected to match the package of the application. + * </p> * - * <p>Slices are not currently live content. They are bound once and shown to the - * user. If the content changes due to a callback from user interaction, then - * {@link ContentResolver#notifyChange(Uri, ContentObserver)} - * should be used to notify the system.</p> - * - * <p>The provider needs to be declared in the manifest to provide the authority - * for the app. The authority for most slices is expected to match the package - * of the application.</p> * <pre class="prettyprint"> * {@literal * <provider * android:name="com.android.mypkg.MySliceProvider" * android:authorities="com.android.mypkg" />} * </pre> + * <p> + * Slices can be identified by a Uri or by an Intent. To link an Intent with a slice, the provider + * must have an {@link IntentFilter} matching the slice intent. When a slice is being requested via + * an intent, {@link #onMapIntentToUri(Intent)} can be called and is expected to return an + * appropriate Uri representing the slice. + * + * <pre class="prettyprint"> + * {@literal + * <provider + * android:name="com.android.mypkg.MySliceProvider" + * android:authorities="com.android.mypkg"> + * <intent-filter> + * <action android:name="android.intent.action.MY_SLICE_INTENT" /> + * </intent-filter> + * </provider>} + * </pre> * * @see Slice */ public abstract class SliceProvider extends ContentProvider { - /** * This is the Android platform's MIME type for a slice: URI * containing a slice implemented through {@link SliceProvider}. @@ -78,6 +97,14 @@ public abstract class SliceProvider extends ContentProvider { /** * @hide */ + public static final String METHOD_MAP_INTENT = "map_slice"; + /** + * @hide + */ + public static final String EXTRA_INTENT = "slice_intent"; + /** + * @hide + */ public static final String EXTRA_SLICE = "slice"; private static final boolean DEBUG = false; @@ -98,6 +125,20 @@ public abstract class SliceProvider extends ContentProvider { // TODO: Provide alternate notifyChange that takes in the slice (i.e. notifyChange(Uri, Slice)). public abstract Slice onBindSlice(Uri sliceUri); + /** + * This method must be overridden if an {@link IntentFilter} is specified on the SliceProvider. + * In that case, this method can be called and is expected to return a non-null Uri representing + * a slice. Otherwise this will throw {@link UnsupportedOperationException}. + * + * @return Uri representing the slice associated with the provided intent. + * @see {@link Slice} + * @see {@link SliceView#setSlice(Intent)} + */ + public @NonNull Uri onMapIntentToUri(Intent intent) { + throw new UnsupportedOperationException( + "This provider has not implemented intent to uri mapping"); + } + @Override public final int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { @@ -159,6 +200,19 @@ public abstract class SliceProvider extends ContentProvider { Bundle b = new Bundle(); b.putParcelable(EXTRA_SLICE, s); return b; + } else if (method.equals(METHOD_MAP_INTENT)) { + getContext().enforceCallingPermission(permission.BIND_SLICE, + "Slice binding requires the permission BIND_SLICE"); + Intent intent = extras.getParcelable(EXTRA_INTENT); + Uri uri = onMapIntentToUri(intent); + Bundle b = new Bundle(); + if (uri != null) { + Slice s = handleBindSlice(uri); + b.putParcelable(EXTRA_SLICE, s); + } else { + b.putParcelable(EXTRA_SLICE, null); + } + return b; } return super.call(method, arg, extras); } diff --git a/core/java/android/app/slice/widget/SliceView.java b/core/java/android/app/slice/widget/SliceView.java index cc13ba39905a..fa1b64ceed97 100644 --- a/core/java/android/app/slice/widget/SliceView.java +++ b/core/java/android/app/slice/widget/SliceView.java @@ -183,10 +183,25 @@ public class SliceView extends ViewGroup { } /** + * Populates this view with the {@link Slice} associated with the provided {@link Intent}. To + * use this method your app must have the permission + * {@link android.Manifest.permission#BIND_SLICE}). + * <p> + * Setting a slice differs from {@link #showSlice(Slice)} because it will ensure the view is + * updated with the slice identified by the provided intent changes. The lifecycle of this + * observer is handled by SliceView in {@link #onAttachedToWindow()} and + * {@link #onDetachedFromWindow()}. To unregister this observer outside of that you can call + * {@link #clearSlice}. + * + * @return true if a slice was found for the provided intent. * @hide */ - public void showSlice(Intent intent) { - // TODO + public boolean setSlice(@Nullable Intent intent) { + Slice s = Slice.bindSlice(mContext, intent); + if (s != null) { + return setSlice(s.getUri()); + } + return s != null; } /** @@ -199,8 +214,7 @@ public class SliceView extends ViewGroup { * is handled by SliceView in {@link #onAttachedToWindow()} and {@link #onDetachedFromWindow()}. * To unregister this observer outside of that you can call {@link #clearSlice}. * - * @return true if the a slice was found for the provided uri. - * @see #clearSlice + * @return true if a slice was found for the provided uri. */ public boolean setSlice(@NonNull Uri sliceUri) { Preconditions.checkNotNull(sliceUri, diff --git a/core/java/android/database/MergeCursor.java b/core/java/android/database/MergeCursor.java index 2c25db765a2b..272cfa24181c 100644 --- a/core/java/android/database/MergeCursor.java +++ b/core/java/android/database/MergeCursor.java @@ -17,7 +17,7 @@ package android.database; /** - * A convience class that lets you present an array of Cursors as a single linear Cursor. + * A convenience class that lets you present an array of Cursors as a single linear Cursor. * The schema of the cursors presented is entirely up to the creator of the MergeCursor, and * may be different if that is desired. Calls to getColumns, getColumnIndex, etc will return the * value for the row that the MergeCursor is currently pointing at. diff --git a/core/java/android/os/RemoteCallbackList.java b/core/java/android/os/RemoteCallbackList.java index 2281fb6d5cc2..b9b9a18e361d 100644 --- a/core/java/android/os/RemoteCallbackList.java +++ b/core/java/android/os/RemoteCallbackList.java @@ -19,6 +19,7 @@ package android.os; import android.util.ArrayMap; import android.util.Slog; +import java.io.PrintWriter; import java.util.function.Consumer; /** @@ -399,6 +400,13 @@ public class RemoteCallbackList<E extends IInterface> { } } + /** @hide */ + public void dump(PrintWriter pw, String prefix) { + pw.print(prefix); pw.print("callbacks: "); pw.println(mCallbacks.size()); + pw.print(prefix); pw.print("killed: "); pw.println(mKilled); + pw.print(prefix); pw.print("broadcasts count: "); pw.println(mBroadcastCount); + } + private void logExcessiveCallbacks() { final long size = mCallbacks.size(); final long TOO_MANY = 3000; diff --git a/core/java/android/os/storage/IStorageManager.aidl b/core/java/android/os/storage/IStorageManager.aidl index 0b76eec4ae0b..2ffc7b028d9b 100644 --- a/core/java/android/os/storage/IStorageManager.aidl +++ b/core/java/android/os/storage/IStorageManager.aidl @@ -186,4 +186,6 @@ interface IStorageManager { long getAllocatableBytes(String volumeUuid, int flags, String callingPackage) = 77; void allocateBytes(String volumeUuid, long bytes, int flags, String callingPackage) = 78; void secdiscard(in String path) = 79; + void runIdleMaintenance() = 80; + void abortIdleMaintenance() = 81; } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 16e7f30e9c76..6decc3050f64 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -9478,6 +9478,16 @@ public final class Settings { public static final String BATTERY_SAVER_CONSTANTS = "battery_saver_constants"; /** + * Battery Saver device specific settings + * This is encoded as a key=value list, separated by commas. + * See {@link com.android.server.power.BatterySaverPolicy} for the details. + * + * @hide + */ + public static final String BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS = + "battery_saver_device_specific_constants"; + + /** * Battery anomaly detection specific settings * This is encoded as a key=value list, separated by commas. * wakeup_blacklisted_tags is a string, encoded as a set of tags, encoded via diff --git a/core/java/android/service/notification/ConditionProviderService.java b/core/java/android/service/notification/ConditionProviderService.java index 080482b0dae9..6fc689ab07cf 100644 --- a/core/java/android/service/notification/ConditionProviderService.java +++ b/core/java/android/service/notification/ConditionProviderService.java @@ -18,6 +18,7 @@ package android.service.notification; import android.annotation.SdkConstant; import android.annotation.SystemApi; +import android.annotation.TestApi; import android.app.ActivityManager; import android.app.INotificationManager; import android.app.Service; @@ -200,7 +201,11 @@ public abstract class ConditionProviderService extends Service { return mProvider; } - private boolean isBound() { + /** + * @hide + */ + @TestApi + public boolean isBound() { if (mProvider == null) { Log.w(TAG, "Condition provider service not yet bound."); return false; diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java index fc1d4873c9cb..2a2722082a7d 100644 --- a/core/java/android/util/FeatureFlagUtils.java +++ b/core/java/android/util/FeatureFlagUtils.java @@ -16,6 +16,7 @@ package android.util; +import android.content.Context; import android.os.SystemProperties; import android.text.TextUtils; @@ -37,7 +38,7 @@ public class FeatureFlagUtils { * @param feature the flag name * @return true if the flag is enabled (either by default in system, or override by user) */ - public static boolean isEnabled(String feature) { + public static boolean isEnabled(Context context, String feature) { // Tries to get feature flag from system property. // Step 1: check if feature flag has any override. Flag name: sys.fflag.override.<feature> String value = SystemProperties.get(FFLAG_OVERRIDE_PREFIX + feature); diff --git a/core/java/android/util/KeyValueListParser.java b/core/java/android/util/KeyValueListParser.java index be531ff35991..d50395e223e5 100644 --- a/core/java/android/util/KeyValueListParser.java +++ b/core/java/android/util/KeyValueListParser.java @@ -147,4 +147,18 @@ public class KeyValueListParser { } return def; } + + /** + * @return the number of keys. + */ + public int size() { + return mValues.size(); + } + + /** + * @return the key at {@code index}. Use with {@link #size()} to enumerate all key-value pairs. + */ + public String keyAt(int index) { + return mValues.keyAt(index); + } } diff --git a/core/java/android/view/FocusFinder.java b/core/java/android/view/FocusFinder.java index 74555de5f291..713cfb48c95f 100644 --- a/core/java/android/view/FocusFinder.java +++ b/core/java/android/view/FocusFinder.java @@ -530,7 +530,7 @@ public class FocusFinder { * axis distances. Warning: this fudge factor is finely tuned, be sure to * run all focus tests if you dare tweak it. */ - int getWeightedDistanceFor(int majorAxisDistance, int minorAxisDistance) { + long getWeightedDistanceFor(long majorAxisDistance, long minorAxisDistance) { return 13 * majorAxisDistance * majorAxisDistance + minorAxisDistance * minorAxisDistance; } diff --git a/core/java/android/view/RenderNode.java b/core/java/android/view/RenderNode.java index ea6e63c3b9de..5070151815f5 100644 --- a/core/java/android/view/RenderNode.java +++ b/core/java/android/view/RenderNode.java @@ -353,6 +353,11 @@ public class RenderNode { return nHasShadow(mNativeRenderNode); } + /** setShadowColor */ + public boolean setShadowColor(int color) { + return nSetShadowColor(mNativeRenderNode, color); + } + /** * Enables or disables clipping to the outline. * @@ -910,6 +915,8 @@ public class RenderNode { @CriticalNative private static native boolean nHasShadow(long renderNode); @CriticalNative + private static native boolean nSetShadowColor(long renderNode, int color); + @CriticalNative private static native boolean nSetClipToOutline(long renderNode, boolean clipToOutline); @CriticalNative private static native boolean nSetRevealClip(long renderNode, diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index e12c0b0d93b8..be09fe869518 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -15182,6 +15182,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return mRenderNode.hasShadow(); } + /** + * @hide + */ + public void setShadowColor(@ColorInt int color) { + if (mRenderNode.setShadowColor(color)) { + invalidateViewProperty(true, true); + } + } + /** @hide */ public void setRevealClip(boolean shouldClip, float x, float y, float radius) { diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index a56f86d70cbd..9241ec0046ac 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -54,6 +54,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +// TODO: use java.lang.ref.Cleaner once Android supports Java 9 +import sun.misc.Cleaner; + /** * The {@link AutofillManager} provides ways for apps and custom views to integrate with the * Autofill Framework lifecycle. @@ -303,6 +306,9 @@ public final class AutofillManager { private IAutoFillManagerClient mServiceClient; @GuardedBy("mLock") + private Cleaner mServiceClientCleaner; + + @GuardedBy("mLock") private AutofillCallback mCallback; private final Context mContext; @@ -1172,10 +1178,19 @@ public final class AutofillManager { if (mServiceClient == null) { mServiceClient = new AutofillManagerClient(this); try { - final int flags = mService.addClient(mServiceClient, mContext.getUserId()); + final int userId = mContext.getUserId(); + final int flags = mService.addClient(mServiceClient, userId); mEnabled = (flags & FLAG_ADD_CLIENT_ENABLED) != 0; sDebug = (flags & FLAG_ADD_CLIENT_DEBUG) != 0; sVerbose = (flags & FLAG_ADD_CLIENT_VERBOSE) != 0; + final IAutoFillManager service = mService; + final IAutoFillManagerClient serviceClient = mServiceClient; + mServiceClientCleaner = Cleaner.create(this, () -> { + try { + service.removeClient(serviceClient, userId); + } catch (RemoteException e) { + } + }); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1294,6 +1309,10 @@ public final class AutofillManager { if ((flags & SET_STATE_FLAG_RESET_CLIENT) != 0) { // Reset connection to system mServiceClient = null; + if (mServiceClientCleaner != null) { + mServiceClientCleaner.clean(); + mServiceClientCleaner = null; + } } } sDebug = (flags & SET_STATE_FLAG_DEBUG) != 0; diff --git a/core/java/android/view/autofill/IAutoFillManager.aidl b/core/java/android/view/autofill/IAutoFillManager.aidl index 9329c4dcff6a..d6db3fe573f5 100644 --- a/core/java/android/view/autofill/IAutoFillManager.aidl +++ b/core/java/android/view/autofill/IAutoFillManager.aidl @@ -33,6 +33,7 @@ import android.view.autofill.IAutoFillManagerClient; interface IAutoFillManager { // Returns flags: FLAG_ADD_CLIENT_ENABLED | FLAG_ADD_CLIENT_DEBUG | FLAG_ADD_CLIENT_VERBOSE int addClient(in IAutoFillManagerClient client, int userId); + void removeClient(in IAutoFillManagerClient client, int userId); int startSession(IBinder activityToken, in IBinder appCallback, in AutofillId autoFillId, in Rect bounds, in AutofillValue value, int userId, boolean hasCallback, int flags, in ComponentName componentName); diff --git a/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java b/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java index fbf65356f568..2833564f73c4 100644 --- a/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java +++ b/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java @@ -49,6 +49,7 @@ public final class SmartSelectionEventTracker { private static final int PREV_EVENT_DELTA = MetricsEvent.FIELD_SELECTION_SINCE_PREVIOUS; private static final int INDEX = MetricsEvent.FIELD_SELECTION_SESSION_INDEX; private static final int WIDGET_TYPE = MetricsEvent.FIELD_SELECTION_WIDGET_TYPE; + private static final int WIDGET_VERSION = MetricsEvent.FIELD_SELECTION_WIDGET_VERSION; private static final int MODEL_NAME = MetricsEvent.FIELD_TEXTCLASSIFIER_MODEL; private static final int ENTITY_TYPE = MetricsEvent.FIELD_SELECTION_ENTITY_TYPE; private static final int SMART_START = MetricsEvent.FIELD_SELECTION_SMART_RANGE_START; @@ -60,23 +61,32 @@ public final class SmartSelectionEventTracker { private static final String ZERO = "0"; private static final String TEXTVIEW = "textview"; private static final String EDITTEXT = "edittext"; + private static final String UNSELECTABLE_TEXTVIEW = "nosel-textview"; private static final String WEBVIEW = "webview"; private static final String EDIT_WEBVIEW = "edit-webview"; + private static final String CUSTOM_TEXTVIEW = "customview"; + private static final String CUSTOM_EDITTEXT = "customedit"; + private static final String CUSTOM_UNSELECTABLE_TEXTVIEW = "nosel-customview"; private static final String UNKNOWN = "unknown"; @Retention(RetentionPolicy.SOURCE) @IntDef({WidgetType.UNSPECIFIED, WidgetType.TEXTVIEW, WidgetType.WEBVIEW, WidgetType.EDITTEXT, WidgetType.EDIT_WEBVIEW}) public @interface WidgetType { - int UNSPECIFIED = 0; - int TEXTVIEW = 1; - int WEBVIEW = 2; - int EDITTEXT = 3; - int EDIT_WEBVIEW = 4; + int UNSPECIFIED = 0; + int TEXTVIEW = 1; + int WEBVIEW = 2; + int EDITTEXT = 3; + int EDIT_WEBVIEW = 4; + int UNSELECTABLE_TEXTVIEW = 5; + int CUSTOM_TEXTVIEW = 6; + int CUSTOM_EDITTEXT = 7; + int CUSTOM_UNSELECTABLE_TEXTVIEW = 8; } private final MetricsLogger mMetricsLogger = new MetricsLogger(); private final int mWidgetType; + @Nullable private final String mWidgetVersion; private final Context mContext; @Nullable private String mSessionId; @@ -91,6 +101,14 @@ public final class SmartSelectionEventTracker { public SmartSelectionEventTracker(@NonNull Context context, @WidgetType int widgetType) { mWidgetType = widgetType; + mWidgetVersion = null; + mContext = Preconditions.checkNotNull(context); + } + + public SmartSelectionEventTracker( + @NonNull Context context, @WidgetType int widgetType, @Nullable String widgetVersion) { + mWidgetType = widgetType; + mWidgetVersion = widgetVersion; mContext = Preconditions.checkNotNull(context); } @@ -147,6 +165,7 @@ public final class SmartSelectionEventTracker { .addTaggedData(PREV_EVENT_DELTA, prevEventDelta) .addTaggedData(INDEX, mIndex) .addTaggedData(WIDGET_TYPE, getWidgetTypeName()) + .addTaggedData(WIDGET_VERSION, mWidgetVersion) .addTaggedData(MODEL_NAME, mModelName) .addTaggedData(ENTITY_TYPE, event.mEntityType) .addTaggedData(SMART_START, getSmartRangeDelta(mSmartIndices[0])) @@ -277,6 +296,14 @@ public final class SmartSelectionEventTracker { return EDITTEXT; case WidgetType.EDIT_WEBVIEW: return EDIT_WEBVIEW; + case WidgetType.UNSELECTABLE_TEXTVIEW: + return UNSELECTABLE_TEXTVIEW; + case WidgetType.CUSTOM_TEXTVIEW: + return CUSTOM_TEXTVIEW; + case WidgetType.CUSTOM_EDITTEXT: + return CUSTOM_EDITTEXT; + case WidgetType.CUSTOM_UNSELECTABLE_TEXTVIEW: + return CUSTOM_UNSELECTABLE_TEXTVIEW; default: return UNKNOWN; } @@ -295,7 +322,10 @@ public final class SmartSelectionEventTracker { private static void debugLog(LogMaker log) { if (!DEBUG_LOG_ENABLED) return; - final String widget = Objects.toString(log.getTaggedData(WIDGET_TYPE), UNKNOWN); + final String widgetType = Objects.toString(log.getTaggedData(WIDGET_TYPE), UNKNOWN); + final String widgetVersion = Objects.toString(log.getTaggedData(WIDGET_VERSION), ""); + final String widget = widgetVersion.isEmpty() + ? widgetType : widgetType + "-" + widgetVersion; final int index = Integer.parseInt(Objects.toString(log.getTaggedData(INDEX), ZERO)); if (log.getType() == MetricsEvent.ACTION_TEXT_SELECTION_START) { String sessionId = Objects.toString(log.getTaggedData(SESSION_ID), ""); diff --git a/core/java/android/widget/SelectionActionModeHelper.java b/core/java/android/widget/SelectionActionModeHelper.java index 71854ae89290..d0ad27af0a92 100644 --- a/core/java/android/widget/SelectionActionModeHelper.java +++ b/core/java/android/widget/SelectionActionModeHelper.java @@ -591,7 +591,9 @@ public final class SelectionActionModeHelper { Preconditions.checkNotNull(textView); final @SmartSelectionEventTracker.WidgetType int widgetType = textView.isTextEditable() ? SmartSelectionEventTracker.WidgetType.EDITTEXT - : SmartSelectionEventTracker.WidgetType.TEXTVIEW; + : (textView.isTextSelectable() + ? SmartSelectionEventTracker.WidgetType.TEXTVIEW + : SmartSelectionEventTracker.WidgetType.UNSELECTABLE_TEXTVIEW); mDelegate = new SmartSelectionEventTracker(textView.getContext(), widgetType); mEditTextLogger = textView.isTextEditable(); mWordIterator = BreakIterator.getWordInstance(textView.getTextLocale()); diff --git a/core/jni/android_text_StaticLayout.cpp b/core/jni/android_text_StaticLayout.cpp index ac7924930cc8..4e88a83a92ea 100644 --- a/core/jni/android_text_StaticLayout.cpp +++ b/core/jni/android_text_StaticLayout.cpp @@ -120,14 +120,13 @@ static inline std::vector<float> jintArrayToFloatVector(JNIEnv* env, jintArray j class Run { public: - Run(int32_t start, int32_t end) : mStart(start), mEnd(end) {} + Run(int32_t start, int32_t end) : mRange(start, end) {} virtual ~Run() {} virtual void addTo(minikin::LineBreaker* lineBreaker) = 0; protected: - const int32_t mStart; - const int32_t mEnd; + minikin::Range mRange; private: // Forbid copy and assign. @@ -143,7 +142,7 @@ class StyleRun : public Run { mIsRtl(isRtl) {} void addTo(minikin::LineBreaker* lineBreaker) override { - lineBreaker->addStyleRun(&mPaint, mCollection, mStart, mEnd, mIsRtl); + lineBreaker->addStyleRun(&mPaint, mCollection, mRange, mIsRtl); } private: @@ -158,7 +157,7 @@ class Replacement : public Run { : Run(start, end), mWidth(width), mLocaleListId(localeListId) {} void addTo(minikin::LineBreaker* lineBreaker) override { - lineBreaker->addReplacement(mStart, mEnd, mWidth, mLocaleListId); + lineBreaker->addReplacement(mRange, mWidth, mLocaleListId); } private: @@ -273,7 +272,7 @@ static void recycleCopy(JNIEnv* env, jobject recycle, jintArray recycleBreaks, static jint nComputeLineBreaks(JNIEnv* env, jclass, jlong nativePtr, // Inputs - jcharArray text, + jcharArray javaText, jint length, jfloat firstWidth, jint firstWidthLineCount, @@ -294,11 +293,10 @@ static jint nComputeLineBreaks(JNIEnv* env, jclass, jlong nativePtr, StaticLayoutNative* builder = toNative(nativePtr); + ScopedCharArrayRO text(env, javaText); + // TODO: Reorganize minikin APIs. - minikin::LineBreaker b; - b.resize(length); - env->GetCharArrayRegion(text, 0, length, b.buffer()); - b.setText(); + minikin::LineBreaker b(minikin::U16StringPiece(text.get(), length)); if (variableTabStops == nullptr) { b.setTabStops(nullptr, 0, defaultTabStop); } else { @@ -321,7 +319,6 @@ static jint nComputeLineBreaks(JNIEnv* env, jclass, jlong nativePtr, env->SetFloatArrayRegion(charWidths, 0, b.size(), b.charWidths()); - b.finish(); builder->clearRuns(); return static_cast<jint>(nBreaks); diff --git a/core/jni/android_view_RenderNode.cpp b/core/jni/android_view_RenderNode.cpp index 6e8c93132562..37ff8c8cefd2 100644 --- a/core/jni/android_view_RenderNode.cpp +++ b/core/jni/android_view_RenderNode.cpp @@ -174,6 +174,10 @@ static jboolean android_view_RenderNode_hasShadow(jlong renderNodePtr) { return renderNode->stagingProperties().hasShadow(); } +static jboolean android_view_RenderNode_setShadowColor(jlong renderNodePtr, jint shadowColor) { + return SET_AND_DIRTY(setShadowColor, static_cast<SkColor>(shadowColor), RenderNode::GENERIC); +} + static jboolean android_view_RenderNode_setClipToOutline(jlong renderNodePtr, jboolean clipToOutline) { RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); @@ -571,6 +575,7 @@ static const JNINativeMethod gMethods[] = { { "nSetOutlineEmpty", "(J)Z", (void*) android_view_RenderNode_setOutlineEmpty }, { "nSetOutlineNone", "(J)Z", (void*) android_view_RenderNode_setOutlineNone }, { "nHasShadow", "(J)Z", (void*) android_view_RenderNode_hasShadow }, + { "nSetShadowColor", "(JI)Z", (void*) android_view_RenderNode_setShadowColor }, { "nSetClipToOutline", "(JZ)Z", (void*) android_view_RenderNode_setClipToOutline }, { "nSetRevealClip", "(JZFFF)Z", (void*) android_view_RenderNode_setRevealClip }, diff --git a/core/proto/android/os/incident.proto b/core/proto/android/os/incident.proto index 4c3e9373242c..f68f3a4ad7a4 100644 --- a/core/proto/android/os/incident.proto +++ b/core/proto/android/os/incident.proto @@ -25,6 +25,7 @@ import "frameworks/base/core/proto/android/os/incidentheader.proto"; import "frameworks/base/core/proto/android/os/kernelwake.proto"; import "frameworks/base/core/proto/android/os/pagetypeinfo.proto"; import "frameworks/base/core/proto/android/os/procrank.proto"; +import "frameworks/base/core/proto/android/os/system_properties.proto"; import "frameworks/base/core/proto/android/providers/settings.proto"; import "frameworks/base/core/proto/android/server/activitymanagerservice.proto"; import "frameworks/base/core/proto/android/server/alarmmanagerservice.proto"; @@ -51,7 +52,10 @@ message IncidentProto { repeated IncidentHeaderProto header = 1; // Device information - //SystemProperties system_properties = 1000; + optional SystemPropertiesProto system_properties = 1000 [ + (section).type = SECTION_COMMAND, + (section).args = "/system/bin/getprop" + ]; // Linux services optional Procrank procrank = 2000 [ diff --git a/core/proto/android/os/system_properties.proto b/core/proto/android/os/system_properties.proto new file mode 100644 index 000000000000..921bb5a4b471 --- /dev/null +++ b/core/proto/android/os/system_properties.proto @@ -0,0 +1,657 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto2"; + +option java_multiple_files = true; +option java_outer_classname = "SystemPropertiesProtoMetadata"; + +import "frameworks/base/tools/streaming_proto/stream.proto"; + +package android.os; + +// System Properties from getprop +message SystemPropertiesProto { + option (stream_proto.stream_msg).enable_fields_mapping = true; + + // Properties that are not specified below are appended here. + message Property { + optional string name = 1; + optional string value = 2; + } + repeated Property extra_properties = 1; + + optional int32 aaudio_hw_burst_min_usec = 2; + optional int32 aaudio_mmap_exclusive_policy = 3; + optional int32 aaudio_mmap_policy = 4; + + optional int32 af_fast_track_multiplier = 5; + + optional int32 audio_adm_buffering_ms = 6; + optional int32 audio_hal_period_size = 7; + + optional string dalvik_vm_appimageformat = 8; + optional string dalvik_vm_dex2oat_Xms = 9; + optional string dalvik_vm_dex2oat_Xmx = 10; + optional bool dalvik_vm_dexopt_secondary = 11; + optional string dalvik_vm_heapgrowthlimit = 12; + optional string dalvik_vm_heapmaxfree = 13; + optional string dalvik_vm_heapminfree = 14; + optional string dalvik_vm_heapsize = 15; + optional string dalvik_vm_heapstartsize = 16; + optional float dalvik_vm_heaptargetutilization = 17; + optional string dalvik_vm_image_dex2oat_Xms = 18; + optional string dalvik_vm_image_dex2oat_Xmx = 19; + optional string dalvik_vm_image_dex2oat_filter = 20; + optional string dalvik_vm_isa_arm_features = 21; + optional string dalvik_vm_isa_arm_variant = 22; + optional string dalvik_vm_isa_arm64_features = 23; + optional string dalvik_vm_isa_arm64_variant = 24; + optional int32 dalvik_vm_lockprof_threshold = 25; + optional string dalvik_vm_stack_trace_dir = 26; + optional bool dalvik_vm_usejit = 27; + optional bool dalvik_vm_usejitprofiles = 28; + + optional int32 debug_atrace_tags_enableflags = 29; + optional int32 debug_force_rtl = 30; + optional string debug_htc_hrdump = 31; + + optional int32 dev_bootcomplete = 32; + + optional bool drm_service_enabled = 33; + + optional int32 fmas_hdph_sgain = 34; + + optional int32 gsm_current_phone_type = 35; + optional string gsm_network_type = 36; + optional string gsm_operator_alpha = 37; + optional string gsm_operator_iso_country = 38; + optional bool gsm_operator_isroaming = 39; + optional string gsm_operator_numeric = 40; + optional string gsm_sim_operator_alpha = 41; + optional string gsm_sim_operator_iso_country = 42; + optional int32 gsm_sim_operator_numeric = 43; + optional string gsm_sim_state = 44; + optional string gsm_version_baseband = 45; + optional string gsm_version_ril_impl = 46; + + optional sint32 htc_camera_sensor_inf = 47; + + optional bool hwservicemanager_ready = 48; + + // Enum values for a lot of system properties + enum Status { + STATUS_UNKNOWN = 0; + STATUS_RUNNING = 1; + STATUS_STOPPED = 2; + } + optional Status init_svc_adbd = 49; + optional Status init_svc_audioserver = 50; + optional Status init_svc_bootanim = 51; + optional Status init_svc_bufferhubd = 52; + optional Status init_svc_cameraserver = 53; + optional Status init_svc_clear_bcb = 54; + optional Status init_svc_drm = 55; + optional Status init_svc_gatekeeperd = 56; + optional Status init_svc_healthd = 57; + optional Status init_svc_hidl_memory = 58; + optional Status init_svc_hostapd = 59; + optional Status init_svc_hwservicemanager = 60; + optional Status init_svc_installd = 61; + optional Status init_svc_keystore = 62; + optional Status init_svc_lmkd = 63; + optional Status init_svc_logd = 64; + optional Status init_svc_logd_reinit = 65; + optional Status init_svc_media = 66; + optional Status init_svc_mediadrm = 67; + optional Status init_svc_mediaextractor = 68; + optional Status init_svc_mediametrics = 69; + optional Status init_svc_netd = 70; + optional Status init_svc_performanced = 71; + optional Status init_svc_ril_daemon = 72; + optional Status init_svc_servicemanager = 73; + optional Status init_svc_storaged = 74; + optional Status init_svc_surfaceflinger = 75; + optional Status init_svc_thermalservice = 76; + optional Status init_svc_tombstoned = 77; + optional Status init_svc_ueventd = 78; + optional Status init_svc_update_engine = 79; + optional Status init_svc_update_verifier_nonencrypted = 80; + optional Status init_svc_vendor_adsprpcd = 81; + optional Status init_svc_vendor_atfwd = 82; + optional Status init_svc_vendor_audio_hal_2_0 = 83; + optional Status init_svc_vendor_bluetooth_1_0 = 84; + optional Status init_svc_vendor_boot_hal_1_0 = 85; + optional Status init_svc_vendor_camera_provider_2_4 = 86; + optional Status init_svc_vendor_cas_hal_1_0 = 87; + optional Status init_svc_vendor_cnd = 88; + optional Status init_svc_vendor_cnss_daemon = 89; + optional Status init_svc_vendor_cnss_diag = 90; + optional Status init_svc_vendor_configstore_hal = 91; + optional Status init_svc_vendor_contexthub_hal_1_0 = 92; + optional Status init_svc_vendor_devstart_sh = 93; + optional Status init_svc_vendor_drm_hal_1_0 = 94; + optional Status init_svc_vendor_drm_widevine_hal_1_0 = 95; + optional Status init_svc_vendor_dumpstate_1_0 = 96; + optional Status init_svc_vendor_flash_nanohub_fw = 97; + optional Status init_svc_vendor_foreground_sh = 98; + optional Status init_svc_vendor_fps_hal = 99; + optional Status init_svc_vendor_gatekeeper_1_0 = 100; + optional Status init_svc_vendor_gnss_service = 101; + optional Status init_svc_vendor_gralloc_2_0 = 102; + optional Status init_svc_vendor_hci_filter_root = 103; + optional Status init_svc_vendor_hwcomposer_2_1 = 104; + optional Status init_svc_vendor_imsdatadaemon = 105; + optional Status init_svc_vendor_imsqmidaemon = 106; + optional Status init_svc_vendor_init_radio_sh = 107; + optional Status init_svc_vendor_irsc_util = 108; + optional Status init_svc_vendor_keymaster_3_0 = 109; + optional Status init_svc_vendor_light_hal_2_0 = 110; + optional Status init_svc_vendor_loc_launcher = 111; + optional Status init_svc_vendor_media_omx = 112; + optional Status init_svc_vendor_memtrack_hal_1_0 = 113; + optional Status init_svc_vendor_mid_sh = 114; + optional Status init_svc_vendor_msm_irqbalance = 115; + optional Status init_svc_vendor_nanohub_slpi = 116; + optional Status init_svc_vendor_netmgrd = 117; + optional Status init_svc_vendor_nfc_hal_service = 118; + optional Status init_svc_vendor_per_mgr = 119; + optional Status init_svc_vendor_per_proxy = 120; + optional Status init_svc_vendor_perfd = 121; + optional Status init_svc_vendor_port_bridge = 122; + optional Status init_svc_vendor_power_hal_1_1 = 123; + optional Status init_svc_vendor_power_sh = 124; + optional Status init_svc_vendor_qseecomd = 125; + optional Status init_svc_vendor_ramdump_auto = 126; + optional Status init_svc_vendor_rmt_storage = 127; + optional Status init_svc_vendor_sensors_hal_1_0 = 128; + optional Status init_svc_vendor_ss_ramdump = 129; + optional Status init_svc_vendor_ssr_setup = 130; + optional Status init_svc_vendor_thermal_engine = 131; + optional Status init_svc_vendor_time_daemon = 132; + optional Status init_svc_vendor_usb_hal_1_1 = 133; + optional Status init_svc_vendor_vibrator_1_0 = 134; + optional Status init_svc_vendor_vr_1_0 = 135; + optional Status init_svc_vendor_wifi_hal_legacy = 136; + optional Status init_svc_virtual_touchpad = 137; + optional Status init_svc_vndservicemanager = 138; + optional Status init_svc_vold = 139; + optional Status init_svc_vr_hwc = 140; + optional Status init_svc_webview_zygote32 = 141; + optional Status init_svc_wificond = 142; + optional Status init_svc_wpa_supplicant = 143; + optional Status init_svc_zygote = 144; + optional Status init_svc_zygote_secondary = 145; + + optional bool keyguard_no_require_sim = 146; + + optional string log_tag_WifiHAL = 147; + + optional bool logd_logpersistd_enable = 148; + + optional bool media_mediadrmservice_enable = 149; + optional bool media_recorder_show_manufacturer_and_model = 150; + + optional string net_bt_name = 151; + optional string net_dns1 = 152; + optional string net_dns2 = 153; + optional string net_dns3 = 154; + optional string net_dns4 = 155; + optional bool net_lte_ims_data_enabled = 156; + optional int32 net_qtaguid_enabled = 157; + optional int32 net_tcp_2g_init_rwnd = 158; + repeated int32 net_tcp_buffersize_default = 159; + repeated int32 net_tcp_buffersize_edge = 160; + repeated int32 net_tcp_buffersize_evdo = 161; + repeated int32 net_tcp_buffersize_gprs = 162; + repeated int32 net_tcp_buffersize_hsdpa = 163; + repeated int32 net_tcp_buffersize_hspa = 164; + repeated int32 net_tcp_buffersize_hspap = 165; + repeated int32 net_tcp_buffersize_hsupa = 166; + repeated int32 net_tcp_buffersize_lte = 167; + repeated int32 net_tcp_buffersize_umts = 168; + repeated int32 net_tcp_buffersize_wifi = 169; + optional int32 net_tcp_default_init_rwnd = 170; + + optional bool nfc_initialized = 171; + + optional bool persist_audio_fluence_speaker = 172; + optional bool persist_audio_fluence_voicecall = 173; + optional bool persist_audio_fluence_voicecomm = 174; + optional bool persist_audio_fluence_voicerec = 175; + + optional int32 persist_camera_debug_logfile = 176; + optional int32 persist_camera_eis_enable = 177; + optional int32 persist_camera_gyro_android = 178; + optional int32 persist_camera_is_type = 179; + optional int32 persist_camera_tnr_preview = 180; + optional int32 persist_camera_tnr_video = 181; + optional int32 persist_camera_tof_direct = 182; + + optional int32 persist_cne_feature = 183; + + optional bool persist_data_iwlan_enable = 184; + optional string persist_data_mode = 185; + + optional int32 persist_radio_RATE_ADAPT_ENABLE = 186; + optional int32 persist_radio_ROTATION_ENABLE = 187; + optional int32 persist_radio_VT_ENABLE = 188; + optional int32 persist_radio_VT_HYBRID_ENABLE = 189; + optional int32 persist_radio_adb_log_on = 190; + optional int32 persist_radio_airplane_mode_on = 191; + optional int32 persist_radio_apm_sim_not_pwdn = 192; + optional int32 persist_radio_custom_ecc = 193; + optional bool persist_radio_data_con_rprt = 194; + optional int32 persist_radio_data_ltd_sys_ind = 195; + optional string persist_radio_enable_tel_mon = 196; + optional bool persist_radio_eons_enabled = 197; + optional bool persist_radio_is_wps_enabled = 198; + optional int32 persist_radio_pwropt_modepref_0 = 199; + optional int32 persist_radio_ril_payload_on = 200; + optional int32 persist_radio_sglte_target = 201; + optional int32 persist_radio_sib16_support = 202; + optional int32 persist_radio_smlog_switch = 203; + optional int32 persist_radio_snapshot_enabled = 204; + optional int32 persist_radio_snapshot_timer = 205; + optional int32 persist_radio_sw_mbn_loaded = 206; + optional int32 persist_radio_sw_mbn_update = 207; + optional string persist_radio_ver_info = 208; + optional int32 persist_radio_videopause_mode = 209; + + optional int32 persist_rcs_supported = 210; + + optional string persist_sys_boot_reason = 211; + optional int32 persist_sys_cnd_iwlan = 212; + optional string persist_sys_dalvik_vm_lib_2 = 213; + optional string persist_sys_gps_lpp = 214; + optional string persist_sys_locale = 215; + optional int32 persist_sys_ssr_enable_ramdumps = 216; + optional string persist_sys_ssr_restart_level = 217; + optional string persist_sys_timezone = 218; + optional string persist_sys_usb_config = 219; + optional int32 persist_sys_webview_vmsize = 220; + + optional string pm_dexopt_ab_ota = 221; + optional string pm_dexopt_bg_dexopt = 222; + optional string pm_dexopt_boot = 223; + optional string pm_dexopt_first_boot = 224; + optional string pm_dexopt_inactive = 225; + optional string pm_dexopt_install = 226; + optional string pm_dexopt_shared = 227; + + optional string qcom_bluetooth_soc = 228; + + optional int32 qdcm_diagonal_matrix_mode = 229; + optional int32 qdcm_only_pcc_for_trans = 230; + + repeated string ril_ecclist = 231; + optional int32 ril_power_backoff_suppressed = 232; + optional int32 ril_qcril_pre_init_lock_held = 233; + optional string ril_voice_network_type = 234; + optional string rild_libpath = 235; + + optional int32 ro_adb_secure = 236; + optional int32 ro_allow_mock_location = 237; + repeated string ro_atrace_core_services = 238; + optional string ro_baseband = 239; + optional int32 ro_bionic_ld_warning = 240; + optional bool ro_bluetooth_dun = 241; + optional string ro_bluetooth_hfp_ver = 242; + optional bool ro_bluetooth_sap = 243; + optional string ro_board_platform = 244; + + optional string ro_boot_baseband = 245; + optional string ro_boot_bootdevice = 246; + optional string ro_boot_bootloader = 247; + optional string ro_boot_bootreason = 248; + repeated string ro_boot_boottime = 249; + optional int32 ro_boot_cid = 250; + optional string ro_boot_console = 251; + optional string ro_boot_ddrinfo = 252; + optional string ro_boot_ddrsize = 253; + optional int32 ro_boot_flash_locked = 254; + optional int32 ro_boot_fp_src = 255; + optional string ro_boot_hardware = 256; + optional string ro_boot_hardware_color = 257; + optional string ro_boot_hardware_ddr = 258; + optional string ro_boot_hardware_revision = 259; + optional string ro_boot_hardware_sku = 260; + optional string ro_boot_hardware_ufs = 261; + optional string ro_boot_htc_hrdump = 262; + optional int32 ro_boot_keymaster = 263; + optional string ro_boot_mid = 264; + optional int32 ro_boot_msm_hw_ver_id = 265; + optional int32 ro_boot_oem_unlock_support = 266; + optional int32 ro_boot_qf_st = 267; + optional int32 ro_boot_ramdump_enable = 268; + optional string ro_boot_serialno = 269; + optional string ro_boot_slot_suffix = 270; + optional int32 ro_boot_temp_protect_ignore = 271; + optional string ro_boot_vendor_overlay_theme = 272; + optional string ro_boot_verifiedbootstate = 273; + optional string ro_boot_veritymode = 274; + optional string ro_boot_wificountrycode = 275; + + optional string ro_bootimage_build_date = 276; + optional int64 ro_bootimage_build_date_utc = 277; + optional string ro_bootimage_build_fingerprint = 278; + + optional string ro_bootloader = 279; + optional string ro_bootmode = 280; + + optional int64 ro_boottime_adbd = 281; + optional int64 ro_boottime_audioserver = 282; + optional int64 ro_boottime_bootanim = 283; + optional int64 ro_boottime_bufferhubd = 284; + optional int64 ro_boottime_cameraserver = 285; + optional int64 ro_boottime_clear_bcb = 286; + optional int64 ro_boottime_drm = 287; + optional int64 ro_boottime_gatekeeperd = 288; + optional int64 ro_boottime_healthd = 289; + optional int64 ro_boottime_hidl_memory = 290; + optional int64 ro_boottime_hwservicemanager = 291; + optional int64 ro_boottime_init = 292; + optional int64 ro_boottime_init_cold_boot_wait = 293; + optional int32 ro_boottime_init_mount_all_early = 294; + optional int32 ro_boottime_init_mount_all_late = 295; + optional int32 ro_boottime_init_selinux = 296; + optional int64 ro_boottime_installd = 297; + optional int64 ro_boottime_keystore = 298; + optional int64 ro_boottime_lmkd = 299; + optional int64 ro_boottime_logd = 300; + optional int64 ro_boottime_logd_reinit = 301; + optional int64 ro_boottime_media = 302; + optional int64 ro_boottime_mediadrm = 303; + optional int64 ro_boottime_mediaextractor = 304; + optional int64 ro_boottime_mediametrics = 305; + optional int64 ro_boottime_netd = 306; + optional int64 ro_boottime_performanced = 307; + optional int64 ro_boottime_ril_daemon = 308; + optional int64 ro_boottime_servicemanager = 309; + optional int64 ro_boottime_storaged = 310; + optional int64 ro_boottime_surfaceflinger = 311; + optional int64 ro_boottime_thermalservice = 312; + optional int64 ro_boottime_tombstoned = 313; + optional int64 ro_boottime_ueventd = 314; + optional int64 ro_boottime_update_engine = 315; + optional int64 ro_boottime_update_verifier_nonencrypted = 316; + optional int64 ro_boottime_vendor_adsprpcd = 317; + optional int64 ro_boottime_vendor_atfwd = 318; + optional int64 ro_boottime_vendor_audio_hal_2_0 = 319; + optional int64 ro_boottime_vendor_bluetooth_1_0 = 320; + optional int64 ro_boottime_vendor_boot_hal_1_0 = 321; + optional int64 ro_boottime_vendor_camera_provider_2_4 = 322; + optional int64 ro_boottime_vendor_cas_hal_1_0 = 323; + optional int64 ro_boottime_vendor_cnd = 324; + optional int64 ro_boottime_vendor_cnss_daemon = 325; + optional int64 ro_boottime_vendor_cnss_diag = 326; + optional int64 ro_boottime_vendor_configstore_hal = 327; + optional int64 ro_boottime_vendor_contexthub_hal_1_0 = 328; + optional int64 ro_boottime_vendor_devstart_sh = 329; + optional int64 ro_boottime_vendor_drm_hal_1_0 = 330; + optional int64 ro_boottime_vendor_drm_widevine_hal_1_0 = 331; + optional int64 ro_boottime_vendor_dumpstate_1_0 = 332; + optional int64 ro_boottime_vendor_flash_nanohub_fw = 333; + optional int64 ro_boottime_vendor_foreground_sh = 334; + optional int64 ro_boottime_vendor_fps_hal = 335; + optional int64 ro_boottime_vendor_gatekeeper_1_0 = 336; + optional int64 ro_boottime_vendor_gnss_service = 337; + optional int64 ro_boottime_vendor_gralloc_2_0 = 338; + optional int64 ro_boottime_vendor_hci_filter_root = 339; + optional int64 ro_boottime_vendor_hwcomposer_2_1 = 340; + optional int64 ro_boottime_vendor_imsdatadaemon = 341; + optional int64 ro_boottime_vendor_imsqmidaemon = 342; + optional int64 ro_boottime_vendor_init_radio_sh = 343; + optional int64 ro_boottime_vendor_irsc_util = 344; + optional int64 ro_boottime_vendor_keymaster_3_0 = 345; + optional int64 ro_boottime_vendor_light_hal_2_0 = 346; + optional int64 ro_boottime_vendor_loc_launcher = 347; + optional int64 ro_boottime_vendor_media_omx = 348; + optional int64 ro_boottime_vendor_memtrack_hal_1_0 = 349; + optional int64 ro_boottime_vendor_mid_sh = 350; + optional int64 ro_boottime_vendor_msm_irqbalance = 351; + optional int64 ro_boottime_vendor_nanohub_slpi = 352; + optional int64 ro_boottime_vendor_netmgrd = 353; + optional int64 ro_boottime_vendor_nfc_hal_service = 354; + optional int64 ro_boottime_vendor_per_mgr = 355; + optional int64 ro_boottime_vendor_per_proxy = 356; + optional int64 ro_boottime_vendor_perfd = 357; + optional int64 ro_boottime_vendor_port_bridge = 358; + optional int64 ro_boottime_vendor_power_hal_1_1 = 359; + optional int64 ro_boottime_vendor_power_sh = 360; + optional int64 ro_boottime_vendor_qseecomd = 361; + optional int64 ro_boottime_vendor_ramdump_auto = 362; + optional int64 ro_boottime_vendor_rmt_storage = 363; + optional int64 ro_boottime_vendor_sensors_hal_1_0 = 364; + optional int64 ro_boottime_vendor_ss_ramdump = 365; + optional int64 ro_boottime_vendor_ssr_setup = 366; + optional int64 ro_boottime_vendor_thermal_engine = 367; + optional int64 ro_boottime_vendor_time_daemon = 368; + optional int64 ro_boottime_vendor_usb_hal_1_1 = 369; + optional int64 ro_boottime_vendor_vibrator_1_0 = 370; + optional int64 ro_boottime_vendor_vr_1_0 = 371; + optional int64 ro_boottime_vendor_wifi_hal_legacy = 372; + optional int64 ro_boottime_virtual_touchpad = 373; + optional int64 ro_boottime_vndservicemanager = 374; + optional int64 ro_boottime_vold = 375; + optional int64 ro_boottime_vr_hwc = 376; + optional int64 ro_boottime_webview_zygote32 = 377; + optional int64 ro_boottime_wificond = 378; + optional int64 ro_boottime_wpa_supplicant = 379; + optional int64 ro_boottime_zygote = 380; + optional int64 ro_boottime_zygote_secondary = 381; + + optional string ro_bt_bdaddr_path = 382; + + optional bool ro_build_ab_update = 383; + optional string ro_build_characteristics = 384; + optional string ro_build_date = 385; + optional int64 ro_build_date_utc = 386; + optional string ro_build_description = 387; + optional string ro_build_display_id = 388; + optional string ro_build_expect_baseband = 389; + optional string ro_build_expect_bootloader = 390; + optional string ro_build_fingerprint = 391; + optional string ro_build_flavor = 392; + optional string ro_build_host = 393; + optional string ro_build_id = 394; + optional string ro_build_product = 395; + optional bool ro_build_system_root_image = 396; + optional string ro_build_tags = 397; + optional string ro_build_type = 398; + optional string ro_build_user = 399; + optional string ro_build_version_all_codenames = 400; + optional string ro_build_version_base_os = 401; + optional string ro_build_version_codename = 402; + optional string ro_build_version_incremental = 403; + optional int32 ro_build_version_preview_sdk = 404; + optional string ro_build_version_release = 405; + optional int32 ro_build_version_sdk = 406; + optional string ro_build_version_security_patch = 407; + + optional int32 ro_camera_notify_nfc = 408; + optional string ro_carrier = 409; + optional bool ro_com_android_dataroaming = 410; + optional bool ro_com_android_prov_mobiledata = 411; + optional string ro_com_google_clientidbase = 412; + optional int32 ro_com_google_ime_theme_id = 413; + + optional string ro_config_alarm_alert = 414; + optional string ro_config_notification_sound = 415; + optional string ro_config_ringtone = 416; + optional int32 ro_config_vc_call_vol_steps = 417; + optional string ro_control_privapp_permissions = 418; + optional int32 ro_cp_system_other_odex = 419; + + optional string ro_crypto_scrypt_params = 420; + optional string ro_crypto_state = 421; + optional string ro_crypto_type = 422; + optional string ro_crypto_volume_filenames_mode = 423; + optional int32 ro_dalvik_vm_native_bridge = 424; + optional int32 ro_debuggable = 425; + optional bool ro_device_owner = 426; + optional string ro_error_receiver_system_apps = 427; + + optional int32 ro_facelock_black_timeout = 428; + optional int32 ro_facelock_det_timeout = 429; + optional int32 ro_facelock_est_max_time = 430; + optional int32 ro_facelock_rec_timeout = 431; + + optional string ro_frp_pst = 432; + + optional string ro_hardware = 433; + optional string ro_hardware_power = 434; + + optional int32 ro_hwui_drop_shadow_cache_size = 435; + optional int32 ro_hwui_gradient_cache_size = 436; + optional int32 ro_hwui_layer_cache_size = 437; + optional int32 ro_hwui_path_cache_size = 438; + optional int32 ro_hwui_r_buffer_cache_size = 439; + optional int32 ro_hwui_text_large_cache_height = 440; + optional int32 ro_hwui_text_large_cache_width = 441; + optional int32 ro_hwui_text_small_cache_height = 442; + optional int32 ro_hwui_text_small_cache_width = 443; + optional float ro_hwui_texture_cache_flushrate = 444; + optional int32 ro_hwui_texture_cache_size = 445; + + optional bool ro_init_subcontexts_enabled = 446; + optional int32 ro_kernel_android_checkjni = 447; + optional string ro_logd_size = 448; + optional int32 ro_min_freq_0 = 449; + optional int32 ro_oem_unlock_supported = 450; + optional bool ro_opa_eligible_device = 451; + optional int32 ro_opengles_version = 452; + optional bool ro_persistent_properties_ready = 453; + + optional string ro_product_board = 454; + optional string ro_product_brand = 455; + optional string ro_product_cpu_abi = 456; + repeated string ro_product_cpu_abilist = 457; + repeated string ro_product_cpu_abilist32 = 458; + optional string ro_product_cpu_abilist64 = 459; + optional string ro_product_device = 460; + optional int32 ro_product_first_api_level = 461; + optional string ro_product_locale = 462; + optional string ro_product_manufacturer = 463; + optional string ro_product_model = 464; + optional string ro_product_name = 465; + optional string ro_product_vendor_brand = 466; + optional string ro_product_vendor_device = 467; + optional string ro_product_vendor_manufacturer = 468; + optional string ro_product_vendor_model = 469; + optional string ro_product_vendor_name = 470; + + optional int32 ro_property_service_version = 471; + optional string ro_qc_sdk_audio_fluencetype = 472; + optional int32 ro_qcom_adreno_qgl_ShaderStorageImageExtendedFormats = 473; + optional bool ro_qualcomm_bluetooth_ftp = 474; + optional bool ro_qualcomm_bluetooth_hfp = 475; + optional bool ro_qualcomm_bluetooth_hsp = 476; + optional bool ro_qualcomm_bluetooth_map = 477; + optional bool ro_qualcomm_bluetooth_nap = 478; + optional bool ro_qualcomm_bluetooth_opp = 479; + optional bool ro_qualcomm_bluetooth_pbap = 480; + + optional string ro_radio_log_loc = 481; + optional string ro_radio_log_prefix = 482; + optional int32 ro_revision = 483; + optional bool ro_ril_svdo = 484; + optional bool ro_ril_svlte1x = 485; + optional int64 ro_runtime_firstboot = 486; + optional int32 ro_secure = 487; + optional string ro_serialno = 488; + optional int32 ro_setupwizard_enterprise_mode = 489; + optional bool ro_setupwizard_rotation_locked = 490; + optional int32 ro_sf_lcd_density = 491; + optional bool ro_storage_manager_enabled = 492; + optional bool ro_telephony_call_ring_multiple = 493; + optional int32 ro_telephony_default_cdma_sub = 494; + optional int32 ro_telephony_default_network = 495; + optional bool ro_treble_enabled = 496; + optional string ro_url_legal = 497; + optional string ro_url_legal_android_privacy = 498; + optional string ro_vendor_build_date = 499; + optional int64 ro_vendor_build_date_utc = 500; + optional string ro_vendor_build_fingerprint = 501; + optional string ro_vendor_extension_library = 502; + optional bool ro_wallpapers_loc_request_suw = 503; + optional string ro_wifi_channels = 504; + optional string ro_zygote = 505; + + optional int32 sdm_debug_disable_rotator_split = 506; + + optional string selinux_restorecon_recursive = 507; + + optional string sendbug_preferred_domain = 508; + + optional string sensors_contexthub_lid_state = 509; + + optional int32 service_bootanim_exit = 510; + optional int32 service_sf_present_timestamp = 511; + + optional string setupwizard_theme = 512; + + optional string sys_boot_reason = 513; + optional int32 sys_boot_completed = 514; + optional int32 sys_ims_QMI_DAEMON_STATUS = 515; + optional bool sys_keymaster_loaded = 516; + optional bool sys_listeners_registered = 517; + optional int32 sys_logbootcomplete = 518; + optional int32 sys_oem_unlock_allowed = 519; + optional int32 sys_post_boot_parsed = 520; + optional int32 sys_qcom_devup = 521; + optional int32 sys_retaildemo_enabled = 522; + optional string sys_slpi_firmware_version = 523; + optional int32 sys_sysctl_extra_free_kbytes = 524; + optional int32 sys_sysctl_tcp_def_init_rwnd = 525; + optional bool sys_time_set = 526; + optional string sys_usb_config = 527; + optional int32 sys_usb_configfs = 528; + optional string sys_usb_controller = 529; + optional int32 sys_usb_ffs_max_read = 530; + optional int32 sys_usb_ffs_max_write = 531; + optional int32 sys_usb_ffs_mtp_ready = 532; + optional int32 sys_usb_ffs_ready = 533; + optional int32 sys_usb_mtp_device_type = 534; + optional int32 sys_usb_rps_mask = 535; + optional string sys_usb_state = 536; + optional bool sys_user_0_ce_available = 537; + optional int32 sys_wifitracing_started = 538; + + optional int32 telephony_lteOnCdmaDevice = 539; + + optional int32 tombstoned_max_tombstone_count = 540; + + optional int32 vidc_debug_perf_mode = 541; + + optional int32 vold_has_adoptable = 542; + optional int32 vold_has_quota = 543; + optional int32 vold_post_fs_data_done = 544; + + optional int32 wc_transport_clean_up = 545; + optional int32 wc_transport_hci_filter_status = 546; + optional string wc_transport_patch_dnld_inprog = 547; + optional int32 wc_transport_ref_count = 548; + optional int32 wc_transport_soc_initialized = 549; + optional bool wc_transport_start_root = 550; + optional int32 wc_transport_vnd_power = 551; + + optional string wifi_interface = 552; + optional string wlan_driver_status = 553; + + // Next Tag: 554 +} + diff --git a/core/res/res/anim/slide_out_micro.xml b/core/res/res/anim/slide_out_micro.xml index 01df0dae6259..c6470935e5d2 100644 --- a/core/res/res/anim/slide_out_micro.xml +++ b/core/res/res/anim/slide_out_micro.xml @@ -19,7 +19,7 @@ --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="normal"> + android:zAdjustment="top"> <translate android:fromYDelta="0" android:toYDelta="5%p" android:duration="250" android:interpolator="@android:interpolator/fast_out_slow_in"/> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 039b6ebfa41f..10ead459a239 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -1676,7 +1676,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Другая праца <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Трэцяя праца <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"Каб адмацаваць гэты экран, краніце і ўтрымлівайце кнопкі \"Назад\" і \"Агляд\""</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"Гэту праграму нельга адмацаваць"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Экран замацаваны"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Экран адмацаваны"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Запытваць PIN-код перад адмацаваннем"</string> @@ -1852,14 +1851,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Праверка экстранных паведамленняў"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Адказаць"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"Дзеянні з голасам для гэтай SIM-карты не дапускаюцца"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"Няма SIM-карты для дзеянняў з голасам"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"Дзеянні з голасам для гэтай SIM-карты не дапускаюцца"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Дзеянні з голасам для гэтага тэлефона не дапускаюцца"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Выплыўное акно"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"Для гэтага ярлыка патрабуецца найноўшая версія праграмы"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 8e1b5b421356..4ad3afbc8ac5 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -1745,7 +1745,7 @@ <string name="app_category_image" msgid="4867854544519846048">"ফটো ও ছবিগুলি"</string> <string name="app_category_social" msgid="5842783057834965912">"সামাজিক ও যোগাযোগ"</string> <string name="app_category_news" msgid="7496506240743986873">"খবর ও পত্রিকাগুলি"</string> - <string name="app_category_maps" msgid="5878491404538024367">"মানচিত্র ও নেভিগেশান"</string> + <string name="app_category_maps" msgid="5878491404538024367">"ম্যাপ ও নেভিগেশান"</string> <string name="app_category_productivity" msgid="3742083261781538852">"উৎপাদনশীলতা"</string> <string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"ডিভাইসের স্টোরেজ"</string> <string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB ডিবাগিং"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index bb793a57de9c..4e9ab0a0309f 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -838,8 +838,8 @@ <string name="permdesc_setAlarm" msgid="316392039157473848">"Permet que l\'aplicació defineixi una alarma en una aplicació de despertador instal·lada. És possible que algunes aplicacions de despertador no incorporin aquesta funció."</string> <string name="permlab_addVoicemail" msgid="5525660026090959044">"afegeix bústia de veu"</string> <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Permet que l\'aplicació afegeixi missatges a la safata d\'entrada de la bústia de veu."</string> - <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Modifica els permisos d\'ubicació geogràfica del navegador"</string> - <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Permet que l\'aplicació modifiqui els permisos d\'ubicació geogràfica del navegador. Les aplicacions malicioses poden utilitzar-ho per enviar la informació d\'ubicació a llocs web arbitraris."</string> + <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Modifica els permisos d\'ubicació del navegador"</string> + <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Permet que l\'aplicació modifiqui els permisos d\'ubicació del navegador. Les aplicacions malicioses poden utilitzar-ho per enviar la informació d\'ubicació a llocs web arbitraris."</string> <string name="save_password_message" msgid="767344687139195790">"Voleu que el navegador recordi aquesta contrasenya?"</string> <string name="save_password_notnow" msgid="6389675316706699758">"Ara no"</string> <string name="save_password_remember" msgid="6491879678996749466">"Recorda-ho"</string> @@ -1203,7 +1203,7 @@ <string name="share_remote_bugreport_action" msgid="6249476773913384948">"COMPARTEIX"</string> <string name="decline_remote_bugreport_action" msgid="6230987241608770062">"REBUTJA"</string> <string name="select_input_method" msgid="8547250819326693584">"Canvia el teclat"</string> - <string name="show_ime" msgid="2506087537466597099">"Mantén-lo a la pantalla mentre el teclat físic està actiu"</string> + <string name="show_ime" msgid="2506087537466597099">"Mantén-lo en pantalla mentre el teclat físic està actiu"</string> <string name="hardware" msgid="194658061510127999">"Mostra el teclat virtual"</string> <string name="select_keyboard_layout_notification_title" msgid="597189518763083494">"Configura el teclat físic"</string> <string name="select_keyboard_layout_notification_message" msgid="8084622969903004900">"Toca per seleccionar l\'idioma i el disseny"</string> @@ -1289,7 +1289,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fons de pantalla"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Canvia el fons de pantalla"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Oient de notificacions"</string> - <string name="vr_listener_binding_label" msgid="4316591939343607306">"Processador d\'RV"</string> + <string name="vr_listener_binding_label" msgid="4316591939343607306">"Processador de RV"</string> <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Proveïdor de condicions"</string> <string name="notification_ranker_binding_label" msgid="774540592299064747">"Servei de classificació de notificacions"</string> <string name="vpn_title" msgid="19615213552042827">"VPN activada"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 07450b2e1b61..e185683f2917 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -979,16 +979,11 @@ <string name="inputMethod" msgid="1653630062304567879">"Input method"</string> <string name="editTextMenuTitle" msgid="4909135564941815494">"Text actions"</string> <string name="email" msgid="4560673117055050403">"Email"</string> - <!-- no translation found for dial (1253998302767701559) --> - <skip /> - <!-- no translation found for map (6521159124535543457) --> - <skip /> - <!-- no translation found for browse (1245903488306147205) --> - <skip /> - <!-- no translation found for sms (4560537514610063430) --> - <skip /> - <!-- no translation found for add_contact (7867066569670597203) --> - <skip /> + <string name="dial" msgid="1253998302767701559">"Call"</string> + <string name="map" msgid="6521159124535543457">"Locate"</string> + <string name="browse" msgid="1245903488306147205">"Open"</string> + <string name="sms" msgid="4560537514610063430">"Message"</string> + <string name="add_contact" msgid="7867066569670597203">"Add"</string> <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Storage space running out"</string> <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Some system functions may not work"</string> <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"Not enough storage for the system. Make sure that you have 250 MB of free space and restart."</string> @@ -998,7 +993,6 @@ <string name="cancel" msgid="6442560571259935130">"Cancel"</string> <string name="yes" msgid="5362982303337969312">"OK"</string> <string name="no" msgid="5141531044935541497">"Cancel"</string> - <string name="close" msgid="2318214661230355730">"CLOSE"</string> <string name="dialog_alert_title" msgid="2049658708609043103">"Attention"</string> <string name="loading" msgid="7933681260296021180">"Loading…"</string> <string name="capital_on" msgid="1544682755514494298">"ON"</string> @@ -1055,8 +1049,6 @@ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scale"</string> <string name="screen_compat_mode_show" msgid="4013878876486655892">"Always show"</string> <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Re-enable this in System settings > Apps > Downloaded."</string> - <string name="top_app_killed_title" msgid="6814231368167994497">"App isn\'t responding"</string> - <string name="top_app_killed_message" msgid="3487519022191609844">"<xliff:g id="APP_NAME">%1$s</xliff:g> may be using too much memory."</string> <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> does not support the current Display size setting and may behave unexpectedly."</string> <string name="unsupported_display_size_show" msgid="7969129195360353041">"Always show"</string> <string name="smv_application" msgid="3307209192155442829">"The app <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) has violated its self-enforced Strict Mode policy."</string> @@ -1634,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2nd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3rd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"To unpin this screen, touch & hold Back and Overview buttons"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"This app can\'t be unpinned"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Screen pinned"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Screen unpinned"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Ask for PIN before unpinning"</string> @@ -1790,18 +1781,14 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Emergency messages test"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Reply"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <string name="mmcc_authentication_reject" msgid="7729819349669603406">"SIM not allowed"</string> - <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM not provisioned"</string> - <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM not allowed"</string> - <string name="mmcc_illegal_me" msgid="4438696681169345015">"Phone not allowed"</string> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"SIM not allowed for voice"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"SIM not provisioned for voice"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"SIM not allowed for voice"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Phone not allowed for voice"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-Up Window"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> - <!-- no translation found for shortcut_restored_on_lower_version (5270675146351613828) --> - <skip /> - <!-- no translation found for shortcut_restore_not_supported (5028808567940014190) --> - <skip /> - <!-- no translation found for shortcut_restore_signature_mismatch (2406209324521327518) --> - <skip /> - <!-- no translation found for shortcut_restore_unknown_issue (8703738064603262597) --> - <skip /> + <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"This shortcut requires latest app"</string> + <string name="shortcut_restore_not_supported" msgid="5028808567940014190">"Couldn’t restore shortcut because app doesn’t support backup and restore"</string> + <string name="shortcut_restore_signature_mismatch" msgid="2406209324521327518">"Couldn’t restore shortcut because of app signature mismatch"</string> + <string name="shortcut_restore_unknown_issue" msgid="8703738064603262597">"Couldn’t restore shortcut"</string> </resources> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index 07450b2e1b61..e185683f2917 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -979,16 +979,11 @@ <string name="inputMethod" msgid="1653630062304567879">"Input method"</string> <string name="editTextMenuTitle" msgid="4909135564941815494">"Text actions"</string> <string name="email" msgid="4560673117055050403">"Email"</string> - <!-- no translation found for dial (1253998302767701559) --> - <skip /> - <!-- no translation found for map (6521159124535543457) --> - <skip /> - <!-- no translation found for browse (1245903488306147205) --> - <skip /> - <!-- no translation found for sms (4560537514610063430) --> - <skip /> - <!-- no translation found for add_contact (7867066569670597203) --> - <skip /> + <string name="dial" msgid="1253998302767701559">"Call"</string> + <string name="map" msgid="6521159124535543457">"Locate"</string> + <string name="browse" msgid="1245903488306147205">"Open"</string> + <string name="sms" msgid="4560537514610063430">"Message"</string> + <string name="add_contact" msgid="7867066569670597203">"Add"</string> <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Storage space running out"</string> <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Some system functions may not work"</string> <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"Not enough storage for the system. Make sure that you have 250 MB of free space and restart."</string> @@ -998,7 +993,6 @@ <string name="cancel" msgid="6442560571259935130">"Cancel"</string> <string name="yes" msgid="5362982303337969312">"OK"</string> <string name="no" msgid="5141531044935541497">"Cancel"</string> - <string name="close" msgid="2318214661230355730">"CLOSE"</string> <string name="dialog_alert_title" msgid="2049658708609043103">"Attention"</string> <string name="loading" msgid="7933681260296021180">"Loading…"</string> <string name="capital_on" msgid="1544682755514494298">"ON"</string> @@ -1055,8 +1049,6 @@ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scale"</string> <string name="screen_compat_mode_show" msgid="4013878876486655892">"Always show"</string> <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Re-enable this in System settings > Apps > Downloaded."</string> - <string name="top_app_killed_title" msgid="6814231368167994497">"App isn\'t responding"</string> - <string name="top_app_killed_message" msgid="3487519022191609844">"<xliff:g id="APP_NAME">%1$s</xliff:g> may be using too much memory."</string> <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> does not support the current Display size setting and may behave unexpectedly."</string> <string name="unsupported_display_size_show" msgid="7969129195360353041">"Always show"</string> <string name="smv_application" msgid="3307209192155442829">"The app <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) has violated its self-enforced Strict Mode policy."</string> @@ -1634,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2nd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3rd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"To unpin this screen, touch & hold Back and Overview buttons"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"This app can\'t be unpinned"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Screen pinned"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Screen unpinned"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Ask for PIN before unpinning"</string> @@ -1790,18 +1781,14 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Emergency messages test"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Reply"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <string name="mmcc_authentication_reject" msgid="7729819349669603406">"SIM not allowed"</string> - <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM not provisioned"</string> - <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM not allowed"</string> - <string name="mmcc_illegal_me" msgid="4438696681169345015">"Phone not allowed"</string> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"SIM not allowed for voice"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"SIM not provisioned for voice"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"SIM not allowed for voice"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Phone not allowed for voice"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-Up Window"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> - <!-- no translation found for shortcut_restored_on_lower_version (5270675146351613828) --> - <skip /> - <!-- no translation found for shortcut_restore_not_supported (5028808567940014190) --> - <skip /> - <!-- no translation found for shortcut_restore_signature_mismatch (2406209324521327518) --> - <skip /> - <!-- no translation found for shortcut_restore_unknown_issue (8703738064603262597) --> - <skip /> + <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"This shortcut requires latest app"</string> + <string name="shortcut_restore_not_supported" msgid="5028808567940014190">"Couldn’t restore shortcut because app doesn’t support backup and restore"</string> + <string name="shortcut_restore_signature_mismatch" msgid="2406209324521327518">"Couldn’t restore shortcut because of app signature mismatch"</string> + <string name="shortcut_restore_unknown_issue" msgid="8703738064603262597">"Couldn’t restore shortcut"</string> </resources> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 07450b2e1b61..e185683f2917 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -979,16 +979,11 @@ <string name="inputMethod" msgid="1653630062304567879">"Input method"</string> <string name="editTextMenuTitle" msgid="4909135564941815494">"Text actions"</string> <string name="email" msgid="4560673117055050403">"Email"</string> - <!-- no translation found for dial (1253998302767701559) --> - <skip /> - <!-- no translation found for map (6521159124535543457) --> - <skip /> - <!-- no translation found for browse (1245903488306147205) --> - <skip /> - <!-- no translation found for sms (4560537514610063430) --> - <skip /> - <!-- no translation found for add_contact (7867066569670597203) --> - <skip /> + <string name="dial" msgid="1253998302767701559">"Call"</string> + <string name="map" msgid="6521159124535543457">"Locate"</string> + <string name="browse" msgid="1245903488306147205">"Open"</string> + <string name="sms" msgid="4560537514610063430">"Message"</string> + <string name="add_contact" msgid="7867066569670597203">"Add"</string> <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Storage space running out"</string> <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Some system functions may not work"</string> <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"Not enough storage for the system. Make sure that you have 250 MB of free space and restart."</string> @@ -998,7 +993,6 @@ <string name="cancel" msgid="6442560571259935130">"Cancel"</string> <string name="yes" msgid="5362982303337969312">"OK"</string> <string name="no" msgid="5141531044935541497">"Cancel"</string> - <string name="close" msgid="2318214661230355730">"CLOSE"</string> <string name="dialog_alert_title" msgid="2049658708609043103">"Attention"</string> <string name="loading" msgid="7933681260296021180">"Loading…"</string> <string name="capital_on" msgid="1544682755514494298">"ON"</string> @@ -1055,8 +1049,6 @@ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scale"</string> <string name="screen_compat_mode_show" msgid="4013878876486655892">"Always show"</string> <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Re-enable this in System settings > Apps > Downloaded."</string> - <string name="top_app_killed_title" msgid="6814231368167994497">"App isn\'t responding"</string> - <string name="top_app_killed_message" msgid="3487519022191609844">"<xliff:g id="APP_NAME">%1$s</xliff:g> may be using too much memory."</string> <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> does not support the current Display size setting and may behave unexpectedly."</string> <string name="unsupported_display_size_show" msgid="7969129195360353041">"Always show"</string> <string name="smv_application" msgid="3307209192155442829">"The app <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) has violated its self-enforced Strict Mode policy."</string> @@ -1634,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2nd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3rd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"To unpin this screen, touch & hold Back and Overview buttons"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"This app can\'t be unpinned"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Screen pinned"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Screen unpinned"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Ask for PIN before unpinning"</string> @@ -1790,18 +1781,14 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Emergency messages test"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Reply"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <string name="mmcc_authentication_reject" msgid="7729819349669603406">"SIM not allowed"</string> - <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM not provisioned"</string> - <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM not allowed"</string> - <string name="mmcc_illegal_me" msgid="4438696681169345015">"Phone not allowed"</string> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"SIM not allowed for voice"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"SIM not provisioned for voice"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"SIM not allowed for voice"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Phone not allowed for voice"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-Up Window"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> - <!-- no translation found for shortcut_restored_on_lower_version (5270675146351613828) --> - <skip /> - <!-- no translation found for shortcut_restore_not_supported (5028808567940014190) --> - <skip /> - <!-- no translation found for shortcut_restore_signature_mismatch (2406209324521327518) --> - <skip /> - <!-- no translation found for shortcut_restore_unknown_issue (8703738064603262597) --> - <skip /> + <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"This shortcut requires latest app"</string> + <string name="shortcut_restore_not_supported" msgid="5028808567940014190">"Couldn’t restore shortcut because app doesn’t support backup and restore"</string> + <string name="shortcut_restore_signature_mismatch" msgid="2406209324521327518">"Couldn’t restore shortcut because of app signature mismatch"</string> + <string name="shortcut_restore_unknown_issue" msgid="8703738064603262597">"Couldn’t restore shortcut"</string> </resources> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 07450b2e1b61..e185683f2917 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -979,16 +979,11 @@ <string name="inputMethod" msgid="1653630062304567879">"Input method"</string> <string name="editTextMenuTitle" msgid="4909135564941815494">"Text actions"</string> <string name="email" msgid="4560673117055050403">"Email"</string> - <!-- no translation found for dial (1253998302767701559) --> - <skip /> - <!-- no translation found for map (6521159124535543457) --> - <skip /> - <!-- no translation found for browse (1245903488306147205) --> - <skip /> - <!-- no translation found for sms (4560537514610063430) --> - <skip /> - <!-- no translation found for add_contact (7867066569670597203) --> - <skip /> + <string name="dial" msgid="1253998302767701559">"Call"</string> + <string name="map" msgid="6521159124535543457">"Locate"</string> + <string name="browse" msgid="1245903488306147205">"Open"</string> + <string name="sms" msgid="4560537514610063430">"Message"</string> + <string name="add_contact" msgid="7867066569670597203">"Add"</string> <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Storage space running out"</string> <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Some system functions may not work"</string> <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"Not enough storage for the system. Make sure that you have 250 MB of free space and restart."</string> @@ -998,7 +993,6 @@ <string name="cancel" msgid="6442560571259935130">"Cancel"</string> <string name="yes" msgid="5362982303337969312">"OK"</string> <string name="no" msgid="5141531044935541497">"Cancel"</string> - <string name="close" msgid="2318214661230355730">"CLOSE"</string> <string name="dialog_alert_title" msgid="2049658708609043103">"Attention"</string> <string name="loading" msgid="7933681260296021180">"Loading…"</string> <string name="capital_on" msgid="1544682755514494298">"ON"</string> @@ -1055,8 +1049,6 @@ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scale"</string> <string name="screen_compat_mode_show" msgid="4013878876486655892">"Always show"</string> <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Re-enable this in System settings > Apps > Downloaded."</string> - <string name="top_app_killed_title" msgid="6814231368167994497">"App isn\'t responding"</string> - <string name="top_app_killed_message" msgid="3487519022191609844">"<xliff:g id="APP_NAME">%1$s</xliff:g> may be using too much memory."</string> <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> does not support the current Display size setting and may behave unexpectedly."</string> <string name="unsupported_display_size_show" msgid="7969129195360353041">"Always show"</string> <string name="smv_application" msgid="3307209192155442829">"The app <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) has violated its self-enforced Strict Mode policy."</string> @@ -1634,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2nd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3rd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"To unpin this screen, touch & hold Back and Overview buttons"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"This app can\'t be unpinned"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Screen pinned"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Screen unpinned"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Ask for PIN before unpinning"</string> @@ -1790,18 +1781,14 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Emergency messages test"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Reply"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <string name="mmcc_authentication_reject" msgid="7729819349669603406">"SIM not allowed"</string> - <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM not provisioned"</string> - <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM not allowed"</string> - <string name="mmcc_illegal_me" msgid="4438696681169345015">"Phone not allowed"</string> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"SIM not allowed for voice"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"SIM not provisioned for voice"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"SIM not allowed for voice"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Phone not allowed for voice"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-Up Window"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> - <!-- no translation found for shortcut_restored_on_lower_version (5270675146351613828) --> - <skip /> - <!-- no translation found for shortcut_restore_not_supported (5028808567940014190) --> - <skip /> - <!-- no translation found for shortcut_restore_signature_mismatch (2406209324521327518) --> - <skip /> - <!-- no translation found for shortcut_restore_unknown_issue (8703738064603262597) --> - <skip /> + <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"This shortcut requires latest app"</string> + <string name="shortcut_restore_not_supported" msgid="5028808567940014190">"Couldn’t restore shortcut because app doesn’t support backup and restore"</string> + <string name="shortcut_restore_signature_mismatch" msgid="2406209324521327518">"Couldn’t restore shortcut because of app signature mismatch"</string> + <string name="shortcut_restore_unknown_issue" msgid="8703738064603262597">"Couldn’t restore shortcut"</string> </resources> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 9ec963b7c57b..878f9eb3347b 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -273,7 +273,7 @@ <string name="permgrouprequest_sms" msgid="605618939583628306">"Anna sovellukselle <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> lupa lähettää ja katsella tekstiviestejä."</string> <string name="permgrouplab_storage" msgid="1971118770546336966">"Tallennustila"</string> <string name="permgroupdesc_storage" msgid="637758554581589203">"käyttää laitteellesi tallennettuja valokuvia, mediatiedostoja ja muita tiedostoja"</string> - <string name="permgrouprequest_storage" msgid="7429669910547860218">"Anna <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> lupa käyttää laitteellasi olevia kuvia, mediaa ja tiedostoja."</string> + <string name="permgrouprequest_storage" msgid="7429669910547860218">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tarvitsee sinulta luvan käyttää laitteellasi olevia kuvia, mediaa ja tiedostoja"</string> <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofoni"</string> <string name="permgroupdesc_microphone" msgid="4988812113943554584">"tallentaa ääntä"</string> <string name="permgrouprequest_microphone" msgid="8065941268709600606">"Anna sovellukselle <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> lupa nauhoittaa ääntä."</string> @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Toinen <xliff:g id="LABEL">%1$s</xliff:g>, työ"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Kolmas <xliff:g id="LABEL">%1$s</xliff:g>, työ"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"Irrota näyttö koskettamalla pitkään Takaisin- ja Viimeisimmät-painikkeita"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"Tätä sovellusta ei voi irrottaa"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Näyttö kiinnitetty"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Näyttö irrotettu"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Pyydä PIN ennen irrotusta"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Hätäilmoitustesti"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Vastaa"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"Äänipalvelujen käyttö ei sallittua SIM-kortilla"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"SIM-kortti ei käyttäjien hallinnassa"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"Äänipalvelujen käyttö ei sallittua SIM-kortilla"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Äänipalvelujen käyttö ei sallittua puhelimella"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Ponnahdusikkuna"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"Tämä pikakuvake edellyttää uusinta sovellusta."</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 16283e71d1cb..05ab42d81569 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -217,7 +217,7 @@ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Rapport interactif"</string> <string name="bugreport_option_interactive_summary" msgid="229299488536107968">"Utilisez cette option dans la plupart des circonstances. Elle vous permet de suivre la progression du rapport, d\'entrer plus d\'information sur le problème et d\'effectuer des saisies d\'écran. Certaines sections moins utilisées et dont le remplissage demande beaucoup de temps peuvent être omises."</string> <string name="bugreport_option_full_title" msgid="6354382025840076439">"Rapport complet"</string> - <string name="bugreport_option_full_summary" msgid="7210859858969115745">"Utilisez cette option pour qu\'il y ait le moins d\'interférences système possible lorsque votre appareil ne répond pas ou qu\'il est trop lent, ou lorsque vous avez besoin de toutes les sections du rapport de bogue. Aucune saisie d\'écran supplémentaire ne peut être capturée, et vous ne pouvez entrer aucune autre information."</string> + <string name="bugreport_option_full_summary" msgid="7210859858969115745">"Utilisez cette option pour qu\'il y ait le moins d\'interférences système possible lorsque votre appareil ne répond pas ou qu\'il est trop lent, ou lorsque vous avez besoin de toutes les sections du rapport de bogue. Aucune capture d\'écran supplémentaire ne peut être capturée, et vous ne pouvez entrer aucune autre information."</string> <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368"> <item quantity="one">Saisie d\'écran pour le rapport de bogue dans <xliff:g id="NUMBER_1">%d</xliff:g> seconde.</item> <item quantity="other">Saisie d\'écran pour le rapport de bogue dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes.</item> @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2e <xliff:g id="LABEL">%1$s</xliff:g> professionnel(le)"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3e <xliff:g id="LABEL">%1$s</xliff:g> professionnel(le)"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"Pour annuler l\'épinglage de cet écran, maintenez enfoncés les boutons Retour et Aperçu."</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"Impossible d\'annuler l\'épinglage de cette application"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Écran épinglé"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Épinglage d\'écran annulé"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Demander le NIP avant d\'annuler l\'épinglage"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Test de messages d\'urgence"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Répondre"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"Cette carte SIM n\'est pas autorisée pour la voix"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"Cette carte SIM n\'est pas autorisée pour la voix"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"Cette carte SIM n\'est pas autorisée pour la voix"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Ce téléphone n\'est pas autorisé pour la voix"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Fenêtre contextuelle"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"Ce raccourci nécessite la dernière version de l\'application"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index e3b93cb407d7..d0f100a0052b 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2.º <xliff:g id="LABEL">%1$s</xliff:g> do traballo"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3.º <xliff:g id="LABEL">%1$s</xliff:g> do traballo"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"Para soltar a pantalla, mantén premidos os botóns Volver e Visión xeral."</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"Esta aplicación non se pode soltar"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Pantalla fixada"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Pantalla desactivada"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Solicitar un PIN antes de soltar a pantalla"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Proba de mensaxes de urxencia"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Responder"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"Non se permite a tarxeta SIM para as accións de voz"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"Non se introduciu ningunha tarxeta SIM para as accións de voz"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"Non se permite a tarxeta SIM para as accións de voz"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Non se permite o teléfono para as accións de voz"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Ventá emerxente"</string> <string name="slice_more_content" msgid="8504342889413274608">"<xliff:g id="NUMBER">%1$d</xliff:g> máis"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"Para utilizar este atallo, necesítase a versión máis recente da aplicación"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index d1c37001d3e6..1e9b38c04ba8 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2જું કાર્ય <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3જું કાર્ય <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"આ સ્ક્રીનને અનપિન કરવા માટે, પાછળ અને ઝલક બટનોને સ્પર્શ કરી રાખો"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"આ ઍપ્લિકેશનને અનપિન કરી શકાશે નહીં"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"સ્ક્રીન પિન કરી"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"સ્ક્રીન અનપિન કરી"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"અનપિન કરતા પહેલાં પિન માટે પૂછો"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"કટોકટી સંદેશાઓનું પરીક્ષણ"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"જવાબ આપો"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"વૉઇસ માટે આ સિમને મંજૂરી નથી"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"આ સિમમાં વૉઇસ માટે કોઈ જોગવાઈ નથી"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"વૉઇસ માટે આ સિમને મંજૂરી નથી"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"વૉઇસ માટે આ ફોનને મંજૂરી નથી"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"પૉપઅપ વિંડો"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"આ શૉર્ટકટ માટે નવી ઍપ જરૂરી છે"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 11a882069908..f24ee7951568 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -525,7 +525,7 @@ <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"नेटवर्क उपयोग हिसाब बदलें"</string> <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"ऐप्स को यह संशोधित करने देता है कि ऐप्स की तुलना में नेटवर्क उपयोग का मूल्यांकन कैसे किया जाता है. सामान्य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string> <string name="permlab_accessNotifications" msgid="7673416487873432268">"सूचना तक पहुंचें"</string> - <string name="permdesc_accessNotifications" msgid="458457742683431387">"ऐप को सूचना पाने, जांच करने और साफ़ करने देता है, जिनमें अन्य ऐप के ज़रिए पोस्ट की गई सूचनाएं भी शामिल हैं."</string> + <string name="permdesc_accessNotifications" msgid="458457742683431387">"ऐप को सूचना पाने, जाँच करने और साफ़ करने देता है, जिनमें अन्य ऐप के ज़रिए पोस्ट की गई सूचनाएं भी शामिल हैं."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"सूचना श्रवणकर्ता सेवा से जुड़ें"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"उपयोगकर्ता को सूचना सुनने वाली सेवा के सबसे बेहतर इंटरफ़ेस से जुड़ने देती है. सामान्य ऐप के लिए कभी भी इसकी ज़रुरत नहीं होगी."</string> <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"किसी शर्तें लागू करने वाली (कंडीशन प्रोवाइडर) सेवा से जुड़ें"</string> @@ -760,7 +760,7 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"साइन इन करें"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"उपयोगकर्ता नाम या पासवर्ड गलत है."</string> <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"अपना उपयोगकर्ता नाम या पासवर्ड भूल गए?\n "<b>"google.com/accounts/recovery"</b>" पर जाएं."</string> - <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"जांच रहा है…"</string> + <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"जाँच रहा है…"</string> <string name="lockscreen_unlock_label" msgid="737440483220667054">"अनलॉक करें"</string> <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"ध्वनि चालू करें"</string> <string name="lockscreen_sound_off_label" msgid="996822825154319026">"ध्वनि बंद"</string> @@ -1215,7 +1215,7 @@ <string name="alert_windows_notification_message" msgid="8917232109522912560">"अगर आप नहीं चाहते कि <xliff:g id="NAME">%s</xliff:g> इस सुविधा का उपयोग करे, तो सेटिंग खोलने और उसे बंद करने के लिए टैप करें."</string> <string name="alert_windows_notification_turn_off_action" msgid="3367294525884949878">"बंद करें"</string> <string name="ext_media_checking_notification_title" msgid="5734005953288045806">"<xliff:g id="NAME">%s</xliff:g> को तैयार किया जा रहा है"</string> - <string name="ext_media_checking_notification_message" msgid="4747432538578886744">"त्रुटियों की जांच कर रहा है"</string> + <string name="ext_media_checking_notification_message" msgid="4747432538578886744">"त्रुटियों की जाँच कर रहा है"</string> <string name="ext_media_new_notification_message" msgid="7589986898808506239">"नए <xliff:g id="NAME">%s</xliff:g> का पता लगा"</string> <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"फ़ोटो और मीडिया ट्रांसफर करने के लिए"</string> <string name="ext_media_unmountable_notification_title" msgid="8295123366236989588">"दूषित <xliff:g id="NAME">%s</xliff:g>"</string> @@ -1243,7 +1243,7 @@ <string name="ext_media_move_failure_message" msgid="1978096440816403360">"डेटा शुरुआती जगह पर छूट गया है"</string> <string name="ext_media_status_removed" msgid="6576172423185918739">"निकाल दिया गया"</string> <string name="ext_media_status_unmounted" msgid="2551560878416417752">"निकाला गया"</string> - <string name="ext_media_status_checking" msgid="6193921557423194949">"जांच की जा रही है..."</string> + <string name="ext_media_status_checking" msgid="6193921557423194949">"जाँच की जा रही है..."</string> <string name="ext_media_status_mounted" msgid="7253821726503179202">"तैयार"</string> <string name="ext_media_status_mounted_ro" msgid="8020978752406021015">"केवल-पढ़ने के लिए"</string> <string name="ext_media_status_bad_removal" msgid="8395398567890329422">"असुरक्षित रूप से निकाला गया"</string> @@ -1475,7 +1475,7 @@ <string name="kg_login_submit_button" msgid="5355904582674054702">"साइन इन करें"</string> <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_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> @@ -1789,6 +1789,6 @@ <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"इस शॉर्टकट वाला ऐप चलाने के लिए इसका नया वर्शन डाउनलोड करें"</string> <string name="shortcut_restore_not_supported" msgid="5028808567940014190">"शॉर्टकट बहाल नहीं किया जा सका क्योंकि इस ऐप में बैकअप लेने और उसे बहाल करने की सुविधा नहीं है"</string> - <string name="shortcut_restore_signature_mismatch" msgid="2406209324521327518">"ऐप का हस्ताक्षर अलग होने के कारण शॉर्टकट बहाल नहीं किया जा सका"</string> + <string name="shortcut_restore_signature_mismatch" msgid="2406209324521327518">"ऐप सिग्नेचर अलग होने के कारण शॉर्टकट बहाल नहीं किया जा सका"</string> <string name="shortcut_restore_unknown_issue" msgid="8703738064603262597">"शॉर्टकट बहाल नहीं किया जा सका"</string> </resources> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index f02a7bada1d3..609bef003d56 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2 ನೇ ಕೆಲಸದ <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3 ನೇ ಕೆಲಸದ <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"ಈ ಪರದೆಯನ್ನು ಅನ್ಪಿನ್ ಮಾಡಲು, ಹಿಂದಕ್ಕೆ ಮತ್ತು ಸಮಗ್ರ ನೋಟ ಬಟನ್ಗಳನ್ನು ಸ್ಪರ್ಶಿಸಿ ಒತ್ತಿಹಿಡಿಯಿರಿ"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಅನ್ಪಿನ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"ಸ್ಕ್ರೀನ್ ಪಿನ್ ಮಾಡಲಾಗಿದೆ"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"ಸ್ಕ್ರೀನ್ ಅನ್ಪಿನ್ ಮಾಡಲಾಗಿದೆ"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"ಅನ್ಪಿನ್ ಮಾಡಲು ಪಿನ್ ಕೇಳು"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"ತುರ್ತು ಸಂದೇಶಗಳ ಪರೀಕ್ಷೆ"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"ಪ್ರತ್ಯುತ್ತರ"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"ಧ್ವನಿಗಾಗಿ ಸಿಮ್ ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"ಧ್ವನಿಗಾಗಿ ಸಿಮ್ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"ಧ್ವನಿಗಾಗಿ ಸಿಮ್ ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"ಧ್ವನಿಗಾಗಿ ಫೋನ್ ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"ಪಾಪ್ಅಪ್ ವಿಂಡೋ"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"ಈ ಶಾರ್ಟ್ಕಟ್ಗೆ ಇತ್ತೀಚಿನ ಅಪ್ಲಿಕೇಶನ್ ಅಗತ್ಯವಿದೆ"</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index ae897b341b55..8fb570b22448 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"രണ്ടാമത്തെ ഔദ്യോഗിക <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"മൂന്നാമത്തെ ഔദ്യോഗിക <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"ഈ സ്ക്രീൻ അൺപിൻ ചെയ്യാൻ, ബാക്ക്, ചുരുക്കവിവരണം എന്നീ ബട്ടണുകൾ സ്പർശിച്ച് പിടിക്കുക"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"ഈ ആപ്പ് അൺപിൻ ചെയ്യാൻ കഴിയില്ല"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"സ്ക്രീൻ പിൻ ചെയ്തു"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"സ്ക്രീൻ അൺപിൻ ചെയ്തു"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"ചെയ്യുംമുമ്പ് പിൻ ചോദിക്കൂ"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"അടിയന്തര സന്ദേശ ടെസ്റ്റ്"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"മറുപടി നൽകുക"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"സിം വോയ്സിന് അനുവദനീയമല്ല"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"സിം വോയ്സിന് പ്രൊവിഷൻ ചെയ്തിട്ടില്ല"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"സിം വോയ്സിന് അനുവദനീയമല്ല"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"ഫോൺ വോയ്സിന് അനുവദനീയമല്ല"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"പോപ്പ് അപ്പ് വിൻഡോ"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"ഈ കുറുക്കുവഴിക്ക് ഏറ്റവും പുതിയ ആപ്പ് ആവശ്യമാണ്"</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index 7de97b39cdb0..c41547b5b908 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -1199,8 +1199,8 @@ <string name="usb_notification_message" msgid="3370903770828407960">"थप विकल्पहरूका लागि ट्याप गर्नुहोस्।"</string> <string name="usb_unsupported_audio_accessory_title" msgid="3529881374464628084">"एनालग अडियोको सहायक उपकरण पत्ता लाग्यो"</string> <string name="usb_unsupported_audio_accessory_message" msgid="6309553946441565215">"संलग्न गरिएको यन्त्र यो फोनसँग कम्प्याटिबल छैन। थप जान्न ट्याप गर्नुहोस्।"</string> - <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डिबग गर्ने जडित छ"</string> - <string name="adb_active_notification_message" msgid="4948470599328424059">"USB डिबगिङलाई असक्षम गर्न ट्याप गर्नुहोस्।"</string> + <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डिबग गर्ने सुविधा सुचारू छ"</string> + <string name="adb_active_notification_message" msgid="4948470599328424059">"USB डिबग गर्ने सुविधालाई असक्षम गर्न ट्याप गर्नुहोस्।"</string> <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB डिबगिङलाई असक्षम पार्न ट्याप गर्नुहोस्।"</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"बग रिपोर्ट लिँदै..."</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"बग रिपोर्टलाई साझेदारी गर्ने हो?"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index d6233fb05497..d269fac8a9fc 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"ਦੂਸਰੀ ਕਾਰਜ-ਸਥਾਨ <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"ਤੀਸਰੀ ਕਾਰਜ-ਸਥਾਨ <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"ਇਸ ਸਕ੍ਰੀਨ ਨੂੰ ਅਨਪਿੰਨ ਕਰਨ ਲਈ, \'ਪਿੱਛੇ\' ਅਤੇ \'ਰੂਪ-ਰੇਖਾ\' ਬਟਨਾਂ ਨੂੰ ਸਪੱਰਸ਼ ਕਰੋ ਅਤੇ ਦਬਾਈ ਰੱਖੋ"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"ਇਸ ਐਪ ਨੂੰ ਅਨਪਿੰਨ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"ਸਕ੍ਰੀਨ ਪਿੰਨ ਕੀਤੀ"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"ਸਕ੍ਰੀਨ ਅਨਪਿਨ ਕੀਤੀ"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"ਅਨਪਿੰਨ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਪਿੰਨ ਮੰਗੋ"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"ਸੰਕਟਕਾਲੀਨ ਸੰਦੇਸ਼ ਟੈਸਟ"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"ਜਵਾਬ ਦਿਓ"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"ਸਿਮ ਰਾਹੀਂ ਅਵਾਜ਼ੀ ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"ਸਿਮ ਰਾਹੀਂ ਅਵਾਜ਼ੀ ਕਾਲ ਕਰਨ ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"ਸਿਮ ਰਾਹੀਂ ਅਵਾਜ਼ੀ ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"ਫ਼ੋਨ ਰਾਹੀਂ ਅਵਾਜ਼ੀ ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"ਪੌਪਅੱਪ ਵਿੰਡੋ"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"ਇਸ ਸ਼ਾਰਟਕੱਟ ਨੂੰ ਨਵੀਨਤਮ ਐਪ ਦੀ ਲੋੜ ਹੈ"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index d088cdd315b8..03c4536af96e 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Segundo <xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Terceiro <xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"Para liberar esta tela, mantenha os botões Voltar e Visão geral pressionados"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"Não é possível liberar este app"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Tela fixada"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Tela liberada"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Pedir PIN antes de liberar"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Teste de mensagens de emergência"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Responder"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"SIM não autorizado para voz"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"SIM não aprovisionado para voz"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"SIM não autorizado para voz"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Smartphone não autorizado para voz"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Janela pop-up"</string> <string name="slice_more_content" msgid="8504342889413274608">"Mais <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"Esse atalho requer o app mais recente"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index d088cdd315b8..03c4536af96e 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Segundo <xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Terceiro <xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"Para liberar esta tela, mantenha os botões Voltar e Visão geral pressionados"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"Não é possível liberar este app"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Tela fixada"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Tela liberada"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Pedir PIN antes de liberar"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Teste de mensagens de emergência"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Responder"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"SIM não autorizado para voz"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"SIM não aprovisionado para voz"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"SIM não autorizado para voz"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Smartphone não autorizado para voz"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Janela pop-up"</string> <string name="slice_more_content" msgid="8504342889413274608">"Mais <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"Esse atalho requer o app mais recente"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 0afa41330959..d65eaa79ef46 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -1651,7 +1651,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> pentru serviciu (2)"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> pentru serviciu (3)"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"Pentru a anula fixarea acestui ecran, atingeți lung butoanele Înapoi și Recente"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"Nu se poate anula fixarea acestei aplicații"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Ecran fixat"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Fixarea ecranului anulată"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Solicită codul PIN înainte de a anula fixarea"</string> @@ -1817,14 +1816,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Testarea mesajelor de urgență"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Răspundeți"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"Cardul SIM nu este permis pentru voce"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"Cardul SIM nu este activat pentru voce"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"Cardul SIM nu este permis pentru voce"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Telefonul nu este permis pentru voce"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Fereastră pop-up"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"Această comandă rapidă necesită cea mai recentă aplicație"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 0eaaf91cd6d5..cea220a7256c 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -1624,7 +1624,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> ya 2 ya Kazini"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> ya 3 ya Kazini"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"Ili kubandua skrini hii, gusa na ushikilie vitufe vya Nyuma na Muhtasari"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"Huwezi kubandua programu hii"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Skrini imebandikwa"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"Skrini imebanduliwa"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Itisha PIN kabla hujabandua"</string> @@ -1780,14 +1779,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Jaribio la ujumbe wa dharura"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Jibu"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"SIM hairuhusiwi katika huduma ya sauti"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"SIM haina mipangilio ya huduma ya sauti"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"SIM hairuhusiwi katika huduma ya sauti"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"Simu hairuhusiwi katika huduma ya sauti"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"Dirisha Ibukizi"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"Njia hii ya mkato inahitaji toleo jipya la programu"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index bf0f46a43451..e03824b11baf 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -1184,7 +1184,7 @@ <string name="no_permissions" msgid="7283357728219338112">"அனுமதிகள் தேவையில்லை"</string> <string name="perm_costs_money" msgid="4902470324142151116">"இதனால் நீங்கள் கட்டணம் செலுத்த வேண்டியிருக்கலாம்"</string> <string name="dlg_ok" msgid="7376953167039865701">"சரி"</string> - <string name="usb_charging_notification_title" msgid="6895185153353640787">"இந்தச் சாதனத்தை USB சார்ஜ் செய்கிறது"</string> + <string name="usb_charging_notification_title" msgid="6895185153353640787">"சாதனம் USB சார்ஜிங் செய்யப்படுகிறது"</string> <string name="usb_supplying_notification_title" msgid="5310642257296510271">"இணைத்துள்ள சாதனத்திற்கு USB சக்தி அளிக்கிறது"</string> <string name="usb_mtp_notification_title" msgid="8396264943589760855">"USB, கோப்புப் பரிமாற்றத்துக்கு மட்டும்"</string> <string name="usb_ptp_notification_title" msgid="1347328437083192112">"USB, படப் பரிமாற்றத்துக்கு மட்டும்"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 9b3b89b55574..8ae8401f8928 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2వ కార్యాలయం <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3వ కార్యాలయం <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"ఈ స్క్రీన్ను అన్పిన్ చేయడానికి, వెనుకకు మరియు స్థూలదృష్టి బటన్లను నొక్కి & పట్టుకోండి"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"ఈ అనువర్తనాన్ని అన్పిన్ చేయడం సాధ్యపడదు"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"స్క్రీన్ పిన్ చేయబడింది"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"స్క్రీన్ అన్పిన్ చేయబడింది"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"అన్పిన్ చేయడానికి ముందు పిన్ కోసం అడుగు"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"అత్యవసర సందేశాల పరీక్ష"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"ప్రత్యుత్తరం పంపండి"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"వాయిస్ కోసం SIM అనుమతించబడదు"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"వాయిస్ కోసం SIM సదుపాయం లేదు"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"వాయిస్ కోసం SIM అనుమతించబడదు"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"వాయిస్ కోసం ఫోన్ అనుమతించబడదు"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"పాప్అప్ విండో"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"ఈ సత్వరమార్గానికి తాజా యాప్ అవసరం"</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index b89af42fc445..f009e08b32d1 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"دوسرا کام <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"تیسرا کام <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"اس اسکرین سے پن ہٹانے کیلئے، ٹچ کریں اور مجموعی جائزہ اور واپس جائیں بٹنز کو دبائے رکھیں"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"اس ایپ سے پن ہٹایا نہیں جا سکتا"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"اسکرین کو پن کر دیا گیا"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"اسکرین کا پن ہٹا دیا گیا"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"پن ہٹانے سے پہلے PIN طلب کریں"</string> @@ -1782,18 +1781,14 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"ایمرجنسی پیغامات کی جانچ"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"جواب دیں"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"آواز کیلئے SIM کو اجازت نہیں ہے"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"SIM میں آواز کیلئے سہولت نہیں ہے"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"آواز کیلئے SIM کو اجازت نہیں ہے"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"آواز کیلئے فون کو اجازت نہیں ہے"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"پاپ اپ ونڈو"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"اس شارٹ کٹ کیلئے جدید ترین ایپ درکار ہے"</string> <string name="shortcut_restore_not_supported" msgid="5028808567940014190">"شارٹ کٹ کو بحال نہیں کیا جا سکا، کیونکہ ایپ بیک اپ اور بحالی کو سپورٹ نہیں کرتی ہے"</string> - <string name="shortcut_restore_signature_mismatch" msgid="2406209324521327518">"ایپ کی دستخط کے غیر مماثل ہونے کی وجہ سے شارٹ کٹ کو بحال نہیں کیا جا سکا"</string> + <string name="shortcut_restore_signature_mismatch" msgid="2406209324521327518">"ایپ دستخط غیر مماثل ہونے کی وجہ سے شارٹ کٹ کو بحال نہیں کیا جا سکا"</string> <string name="shortcut_restore_unknown_issue" msgid="8703738064603262597">"شارٹ کٹ کو بحال نہیں کیا جا سکا"</string> </resources> diff --git a/core/res/res/values-watch/styles_material.xml b/core/res/res/values-watch/styles_material.xml index fd881026ca6b..6cef47d4cbde 100644 --- a/core/res/res/values-watch/styles_material.xml +++ b/core/res/res/values-watch/styles_material.xml @@ -39,8 +39,8 @@ please see styles_device_defaults.xml. <item name="taskOpenExitAnimation">@anim/slide_in_exit_micro</item> <item name="taskCloseEnterAnimation">@null</item> <item name="taskCloseExitAnimation">@anim/slide_out_micro</item> - <item name="taskToFrontEnterAnimation">@anim/slide_in_enter_micro</item> - <item name="taskToFrontExitAnimation">@anim/slide_in_exit_micro</item> + <item name="taskToFrontEnterAnimation">@null</item> + <item name="taskToFrontExitAnimation">@anim/slide_out_micro</item> <item name="taskToBackEnterAnimation">@null</item> <item name="taskToBackExitAnimation">@anim/slide_out_micro</item> <item name="wallpaperOpenEnterAnimation">@null</item> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 5629df1796d5..6b95eda27a8a 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -979,10 +979,10 @@ <string name="inputMethod" msgid="1653630062304567879">"输入法"</string> <string name="editTextMenuTitle" msgid="4909135564941815494">"文字操作"</string> <string name="email" msgid="4560673117055050403">"电子邮件"</string> - <string name="dial" msgid="1253998302767701559">"通话"</string> + <string name="dial" msgid="1253998302767701559">"拨打电话"</string> <string name="map" msgid="6521159124535543457">"定位"</string> <string name="browse" msgid="1245903488306147205">"打开"</string> - <string name="sms" msgid="4560537514610063430">"短信"</string> + <string name="sms" msgid="4560537514610063430">"发短信"</string> <string name="add_contact" msgid="7867066569670597203">"添加"</string> <string name="low_internal_storage_view_title" msgid="5576272496365684834">"存储空间不足"</string> <string name="low_internal_storage_view_text" msgid="6640505817617414371">"某些系统功能可能无法正常使用"</string> @@ -1626,7 +1626,6 @@ <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"第二个工作<xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"第三个工作<xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="lock_to_app_toast" msgid="6820571533009838261">"要取消固定此屏幕,请触摸并按住“返回”和“概览”按钮"</string> - <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"无法取消固定此应用"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"已固定屏幕"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"已取消固定屏幕"</string> <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"取消时要求输入PIN码"</string> @@ -1782,14 +1781,10 @@ <string name="etws_primary_default_message_test" msgid="2709597093560037455">"紧急消息测试"</string> <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"回复"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> - <!-- no translation found for mmcc_authentication_reject (5767701075994754356) --> - <skip /> - <!-- no translation found for mmcc_imsi_unknown_in_hlr (5316658473301462825) --> - <skip /> - <!-- no translation found for mmcc_illegal_ms (807334478177362062) --> - <skip /> - <!-- no translation found for mmcc_illegal_me (1950705155760872972) --> - <skip /> + <string name="mmcc_authentication_reject" msgid="5767701075994754356">"SIM 卡不支持语音"</string> + <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"未配置支持语音的 SIM 卡"</string> + <string name="mmcc_illegal_ms" msgid="807334478177362062">"SIM 卡不支持语音"</string> + <string name="mmcc_illegal_me" msgid="1950705155760872972">"手机不支持语音"</string> <string name="popup_window_default_title" msgid="4874318849712115433">"弹出式窗口"</string> <string name="slice_more_content" msgid="8504342889413274608">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string> <string name="shortcut_restored_on_lower_version" msgid="5270675146351613828">"您必须拥有最新版的应用才能使用此快捷方式"</string> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 1879ab719bb7..edd793d89afa 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -3164,4 +3164,6 @@ <!-- Corner radius of system dialogs --> <dimen name="config_dialogCornerRadius">2dp</dimen> + + <string translatable="false" name="config_batterySaverDeviceSpecificConfig"></string> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index e476d893b900..54970851f3c1 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3150,4 +3150,5 @@ <!-- From media projection --> <java-symbol type="string" name="config_mediaProjectionPermissionDialogComponent" /> + <java-symbol type="string" name="config_batterySaverDeviceSpecificConfig" /> </resources> diff --git a/core/tests/featureflagtests/src/android/util/FeatureFlagUtilsTest.java b/core/tests/featureflagtests/src/android/util/FeatureFlagUtilsTest.java index ebfa45c9bbc6..c5d175b4245f 100644 --- a/core/tests/featureflagtests/src/android/util/FeatureFlagUtilsTest.java +++ b/core/tests/featureflagtests/src/android/util/FeatureFlagUtilsTest.java @@ -20,7 +20,9 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; +import android.content.Context; import android.os.SystemProperties; +import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.SmallTest; @@ -35,8 +37,11 @@ public class FeatureFlagUtilsTest { private static final String TEST_FEATURE_NAME = "feature_foobar"; + private Context mContext; + @Before public void setUp() { + mContext = InstrumentationRegistry.getTargetContext(); cleanup(); } @@ -54,7 +59,7 @@ public class FeatureFlagUtilsTest { public void testGetFlag_enabled_shouldReturnTrue() { SystemProperties.set(FeatureFlagUtils.FFLAG_PREFIX + TEST_FEATURE_NAME, "true"); - assertTrue(FeatureFlagUtils.isEnabled(TEST_FEATURE_NAME)); + assertTrue(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME)); } @Test @@ -62,12 +67,12 @@ public class FeatureFlagUtilsTest { SystemProperties.set(FeatureFlagUtils.FFLAG_PREFIX + TEST_FEATURE_NAME, "false"); SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + TEST_FEATURE_NAME, "true"); - assertTrue(FeatureFlagUtils.isEnabled(TEST_FEATURE_NAME)); + assertTrue(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME)); } @Test public void testSetEnabled_shouldSetOverrideFlag() { - assertFalse(FeatureFlagUtils.isEnabled(TEST_FEATURE_NAME)); + assertFalse(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME)); FeatureFlagUtils.setEnabled(TEST_FEATURE_NAME, true); @@ -79,7 +84,7 @@ public class FeatureFlagUtilsTest { @Test public void testGetFlag_notSet_shouldReturnFalse() { - assertFalse(FeatureFlagUtils.isEnabled(TEST_FEATURE_NAME)); + assertFalse(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME)); } } diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h index 837c4effea9f..3d2c2520624b 100644 --- a/libs/hwui/RenderProperties.h +++ b/libs/hwui/RenderProperties.h @@ -26,6 +26,7 @@ #include <SkBlendMode.h> #include <SkCamera.h> +#include <SkColor.h> #include <SkMatrix.h> #include <SkRegion.h> @@ -506,6 +507,14 @@ public: getOutline().getAlpha() != 0.0f; } + SkColor getShadowColor() const { + return mPrimitiveFields.mShadowColor; + } + + bool setShadowColor(SkColor shadowColor) { + return RP_SET(mPrimitiveFields.mShadowColor, shadowColor); + } + bool fitsOnLayer() const { const DeviceInfo* deviceInfo = DeviceInfo::get(); return mPrimitiveFields.mWidth <= deviceInfo->maxTextureSize() && @@ -529,6 +538,7 @@ private: int mLeft = 0, mTop = 0, mRight = 0, mBottom = 0; int mWidth = 0, mHeight = 0; int mClippingFlags = CLIP_TO_BOUNDS; + SkColor mShadowColor = SK_ColorBLACK; float mAlpha = 1; float mTranslationX = 0, mTranslationY = 0, mTranslationZ = 0; float mElevation = 0; diff --git a/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp b/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp index 67e06022b17c..7b59ccf3eec7 100644 --- a/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp +++ b/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp @@ -189,7 +189,7 @@ void EndReorderBarrierDrawable::drawShadow(SkCanvas* canvas, RenderNodeDrawable* } SkShadowUtils::DrawShadow( canvas, *casterPath, zParams, skiaLightPos, SkiaPipeline::getLightRadius(), - ambientAlpha, spotAlpha, SK_ColorBLACK, + ambientAlpha, spotAlpha, casterProperties.getShadowColor(), casterAlpha < 1.0f ? SkShadowFlags::kTransparentOccluder_ShadowFlag : 0); } diff --git a/packages/ExtServices/src/android/ext/services/notification/Assistant.java b/packages/ExtServices/src/android/ext/services/notification/Assistant.java index f535368bd356..6fe8975577a4 100644 --- a/packages/ExtServices/src/android/ext/services/notification/Assistant.java +++ b/packages/ExtServices/src/android/ext/services/notification/Assistant.java @@ -23,16 +23,37 @@ import static android.service.notification.NotificationListenerService.Ranking import android.app.INotificationManager; import android.content.Context; import android.ext.services.R; +import android.os.AsyncTask; import android.os.Bundle; +import android.os.Environment; +import android.os.storage.StorageManager; import android.service.notification.Adjustment; import android.service.notification.NotificationAssistantService; import android.service.notification.NotificationStats; import android.service.notification.StatusBarNotification; import android.util.ArrayMap; +import android.util.AtomicFile; import android.util.Log; import android.util.Slog; +import android.util.Xml; +import com.android.internal.util.FastXmlSerializer; +import com.android.internal.util.XmlUtils; + +import libcore.io.IoUtils; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlSerializer; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Map; /** * Notification assistant that provides guidance on notification channel blocking @@ -41,19 +62,112 @@ public class Assistant extends NotificationAssistantService { private static final String TAG = "ExtAssistant"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - private static final ArrayList<Integer> DISMISS_WITH_PREJUDICE = new ArrayList<>(); + private static final String TAG_ASSISTANT = "assistant"; + private static final String TAG_IMPRESSION = "impression-set"; + private static final String ATT_KEY = "key"; + private static final int DB_VERSION = 1; + private static final String ATTR_VERSION = "version"; + + private static final ArrayList<Integer> PREJUDICAL_DISMISSALS = new ArrayList<>(); static { - DISMISS_WITH_PREJUDICE.add(REASON_CANCEL); - DISMISS_WITH_PREJUDICE.add(REASON_LISTENER_CANCEL); + PREJUDICAL_DISMISSALS.add(REASON_CANCEL); + PREJUDICAL_DISMISSALS.add(REASON_LISTENER_CANCEL); } // key : impressions tracker - // TODO: persist across reboots + // TODO: prune deleted channels and apps ArrayMap<String, ChannelImpressions> mkeyToImpressions = new ArrayMap<>(); // SBN key : channel id ArrayMap<String, String> mLiveNotifications = new ArrayMap<>(); private Ranking mFakeRanking = null; + private AtomicFile mFile = null; + + public Assistant() { + } + + private void loadFile() { + if (DEBUG) Slog.d(TAG, "loadFile"); + AsyncTask.execute(() -> { + InputStream infile = null; + try { + infile = mFile.openRead(); + readXml(infile); + } catch (FileNotFoundException e) { + // No data yet + } catch (IOException e) { + Log.e(TAG, "Unable to read channel impressions", e); + } catch (NumberFormatException | XmlPullParserException e) { + Log.e(TAG, "Unable to parse channel impressions", e); + } finally { + IoUtils.closeQuietly(infile); + } + }); + } + + protected void readXml(InputStream stream) + throws XmlPullParserException, NumberFormatException, IOException { + final XmlPullParser parser = Xml.newPullParser(); + parser.setInput(stream, StandardCharsets.UTF_8.name()); + final int outerDepth = parser.getDepth(); + while (XmlUtils.nextElementWithin(parser, outerDepth)) { + if (!TAG_ASSISTANT.equals(parser.getName())) { + continue; + } + final int impressionOuterDepth = parser.getDepth(); + while (XmlUtils.nextElementWithin(parser, impressionOuterDepth)) { + if (!TAG_IMPRESSION.equals(parser.getName())) { + continue; + } + String key = parser.getAttributeValue(null, ATT_KEY); + ChannelImpressions ci = new ChannelImpressions(); + ci.populateFromXml(parser); + synchronized (mkeyToImpressions) { + ci.append(mkeyToImpressions.get(key)); + mkeyToImpressions.put(key, ci); + } + } + } + } + + private void saveFile() throws IOException { + AsyncTask.execute(() -> { + final FileOutputStream stream; + try { + stream = mFile.startWrite(); + } catch (IOException e) { + Slog.w(TAG, "Failed to save policy file", e); + return; + } + try { + final XmlSerializer out = new FastXmlSerializer(); + out.setOutput(stream, StandardCharsets.UTF_8.name()); + writeXml(out); + mFile.finishWrite(stream); + } catch (IOException e) { + Slog.w(TAG, "Failed to save impressions file, restoring backup", e); + mFile.failWrite(stream); + } + }); + } + + protected void writeXml(XmlSerializer out) throws IOException { + out.startDocument(null, true); + out.startTag(null, TAG_ASSISTANT); + out.attribute(null, ATTR_VERSION, Integer.toString(DB_VERSION)); + synchronized (mkeyToImpressions) { + for (Map.Entry<String, ChannelImpressions> entry + : mkeyToImpressions.entrySet()) { + // TODO: ensure channel still exists + out.startTag(null, TAG_IMPRESSION); + out.attribute(null, ATT_KEY, entry.getKey()); + entry.getValue().writeXml(out); + out.endTag(null, TAG_IMPRESSION); + } + } + out.endTag(null, TAG_ASSISTANT); + out.endDocument(); + } @Override public Adjustment onNotificationEnqueued(StatusBarNotification sbn) { @@ -87,26 +201,38 @@ public class Assistant extends NotificationAssistantService { public void onNotificationRemoved(StatusBarNotification sbn, RankingMap rankingMap, NotificationStats stats, int reason) { try { + boolean updatedImpressions = false; String channelId = mLiveNotifications.remove(sbn.getKey()); String key = getKey(sbn.getPackageName(), sbn.getUserId(), channelId); - ChannelImpressions ci = mkeyToImpressions.getOrDefault(key, new ChannelImpressions()); - if (stats.hasSeen()) { - ci.incrementViews(); + synchronized (mkeyToImpressions) { + ChannelImpressions ci = mkeyToImpressions.getOrDefault(key, + new ChannelImpressions()); + if (stats.hasSeen()) { + ci.incrementViews(); + updatedImpressions = true; + } + if (PREJUDICAL_DISMISSALS.contains(reason)) { + if ((!sbn.isAppGroup() || sbn.getNotification().isGroupChild()) + && !stats.hasInteracted() + && stats.getDismissalSurface() != NotificationStats.DISMISSAL_AOD + && stats.getDismissalSurface() != NotificationStats.DISMISSAL_PEEK + && stats.getDismissalSurface() != NotificationStats.DISMISSAL_OTHER) { + if (DEBUG) Log.i(TAG, "increment dismissals " + key); + ci.incrementDismissals(); + updatedImpressions = true; + } else { + if (DEBUG) Slog.i(TAG, "reset streak " + key); + if (ci.getStreak() > 0) { + updatedImpressions = true; + } + ci.resetStreak(); + } + } + mkeyToImpressions.put(key, ci); } - if (DISMISS_WITH_PREJUDICE.contains(reason) - && !sbn.isAppGroup() - && !sbn.getNotification().isGroupChild() - && !stats.hasInteracted() - && stats.getDismissalSurface() != NotificationStats.DISMISSAL_AOD - && stats.getDismissalSurface() != NotificationStats.DISMISSAL_PEEK - && stats.getDismissalSurface() != NotificationStats.DISMISSAL_OTHER) { - if (DEBUG) Log.i(TAG, "increment dismissals"); - ci.incrementDismissals(); - } else { - if (DEBUG) Slog.i(TAG, "reset streak"); - ci.resetStreak(); + if (updatedImpressions) { + saveFile(); } - mkeyToImpressions.put(key, ci); } catch (Throwable e) { Slog.e(TAG, "Error occurred processing removal", e); } @@ -121,6 +247,11 @@ public class Assistant extends NotificationAssistantService { public void onListenerConnected() { if (DEBUG) Log.i(TAG, "CONNECTED"); try { + mFile = new AtomicFile(new File(new File( + Environment.getDataUserCePackageDirectory( + StorageManager.UUID_PRIVATE_INTERNAL, getUserId(), getPackageName()), + "assistant"), "block_stats.xml")); + loadFile(); for (StatusBarNotification sbn : getActiveNotifications()) { onNotificationPosted(sbn); } @@ -129,7 +260,7 @@ public class Assistant extends NotificationAssistantService { } } - private String getKey(String pkg, int userId, String channelId) { + protected String getKey(String pkg, int userId, String channelId) { return pkg + "|" + userId + "|" + channelId; } @@ -151,6 +282,11 @@ public class Assistant extends NotificationAssistantService { } // for testing + + protected void setFile(AtomicFile file) { + mFile = file; + } + protected void setFakeRanking(Ranking ranking) { mFakeRanking = ranking; } @@ -162,4 +298,16 @@ public class Assistant extends NotificationAssistantService { protected void setContext(Context context) { mSystemContext = context; } + + protected ChannelImpressions getImpressions(String key) { + synchronized (mkeyToImpressions) { + return mkeyToImpressions.get(key); + } + } + + protected void insertImpressions(String key, ChannelImpressions ci) { + synchronized (mkeyToImpressions) { + mkeyToImpressions.put(key, ci); + } + } }
\ No newline at end of file diff --git a/packages/ExtServices/src/android/ext/services/notification/ChannelImpressions.java b/packages/ExtServices/src/android/ext/services/notification/ChannelImpressions.java index 30567ccdd074..4ad4b2415735 100644 --- a/packages/ExtServices/src/android/ext/services/notification/ChannelImpressions.java +++ b/packages/ExtServices/src/android/ext/services/notification/ChannelImpressions.java @@ -18,14 +18,23 @@ package android.ext.services.notification; import android.os.Parcel; import android.os.Parcelable; +import android.text.TextUtils; import android.util.Log; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlSerializer; + +import java.io.IOException; + public final class ChannelImpressions implements Parcelable { private static final String TAG = "ExtAssistant.CI"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); static final double DISMISS_TO_VIEW_RATIO_LIMIT = .8; static final int STREAK_LIMIT = 2; + static final String ATT_DISMISSALS = "dismisses"; + static final String ATT_VIEWS = "views"; + static final String ATT_STREAK = "streak"; private int mDismissals = 0; private int mViews = 0; @@ -62,6 +71,14 @@ public final class ChannelImpressions implements Parcelable { mStreak++; } + public void append(ChannelImpressions additionalImpressions) { + if (additionalImpressions != null) { + mViews += additionalImpressions.getViews(); + mStreak += additionalImpressions.getStreak(); + mDismissals += additionalImpressions.getDismissals(); + } + } + public void incrementViews() { mViews++; } @@ -134,4 +151,36 @@ public final class ChannelImpressions implements Parcelable { sb.append('}'); return sb.toString(); } + + protected void populateFromXml(XmlPullParser parser) { + mDismissals = safeInt(parser, ATT_DISMISSALS, 0); + mStreak = safeInt(parser, ATT_STREAK, 0); + mViews = safeInt(parser, ATT_VIEWS, 0); + } + + protected void writeXml(XmlSerializer out) throws IOException { + if (mDismissals != 0) { + out.attribute(null, ATT_DISMISSALS, String.valueOf(mDismissals)); + } + if (mStreak != 0) { + out.attribute(null, ATT_STREAK, String.valueOf(mStreak)); + } + if (mViews != 0) { + out.attribute(null, ATT_VIEWS, String.valueOf(mViews)); + } + } + + private static int safeInt(XmlPullParser parser, String att, int defValue) { + final String val = parser.getAttributeValue(null, att); + return tryParseInt(val, defValue); + } + + private static int tryParseInt(String value, int defValue) { + if (TextUtils.isEmpty(value)) return defValue; + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + return defValue; + } + } } diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java index 4e5e9f9d1e00..7c35b48310f2 100644 --- a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java +++ b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java @@ -31,7 +31,6 @@ import android.app.INotificationManager; import android.app.Notification; import android.app.NotificationChannel; import android.content.Intent; -import android.ext.services.R; import android.os.UserHandle; import android.service.notification.Adjustment; import android.service.notification.NotificationListenerService; @@ -42,6 +41,10 @@ import android.service.notification.StatusBarNotification; import android.support.test.InstrumentationRegistry; import android.test.ServiceTestCase; import android.testing.TestableContext; +import android.util.AtomicFile; +import android.util.Xml; + +import com.android.internal.util.FastXmlSerializer; import org.junit.Before; import org.junit.Rule; @@ -49,6 +52,14 @@ import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlSerializer; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileOutputStream; public class AssistantTest extends ServiceTestCase<Assistant> { @@ -67,6 +78,8 @@ public class AssistantTest extends ServiceTestCase<Assistant> { new NotificationChannel("one", "", IMPORTANCE_LOW); @Mock INotificationManager mNoMan; + @Mock + AtomicFile mFile; Assistant mAssistant; @@ -88,6 +101,8 @@ public class AssistantTest extends ServiceTestCase<Assistant> { bindService(startIntent); mAssistant = getService(); mAssistant.setNoMan(mNoMan); + mAssistant.setFile(mFile); + when(mFile.startWrite()).thenReturn(mock(FileOutputStream.class)); } private StatusBarNotification generateSbn(String pkg, int uid, NotificationChannel channel, @@ -170,18 +185,43 @@ public class AssistantTest extends ServiceTestCase<Assistant> { } @Test - public void testGroupCannotTriggerAdjustment() throws Exception { + public void testGroupChildCanTriggerAdjustment() throws Exception { almostBlockChannel(PKG1, UID1, P1C1); StatusBarNotification sbn = generateSbn(PKG1, UID1, P1C1, "no", "I HAVE A GROUP"); - mAssistant.setFakeRanking(mock(Ranking.class)); + mAssistant.setFakeRanking(generateRanking(sbn, P1C1)); NotificationStats stats = new NotificationStats(); stats.setDismissalSurface(NotificationStats.DISMISSAL_SHADE); stats.setSeen(); + mAssistant.onNotificationPosted(sbn, mock(RankingMap.class)); mAssistant.onNotificationRemoved( sbn, mock(RankingMap.class), stats, NotificationListenerService.REASON_CANCEL); - sbn = generateSbn(PKG1, UID1, P1C1, "new one!", null); + sbn = generateSbn(PKG1, UID1, P1C1, "new one!", "group"); + mAssistant.onNotificationPosted(sbn, mock(RankingMap.class)); + + ArgumentCaptor<Adjustment> captor = ArgumentCaptor.forClass(Adjustment.class); + verify(mNoMan, times(1)).applyAdjustmentFromAssistant(any(), captor.capture()); + assertEquals(sbn.getKey(), captor.getValue().getKey()); + assertEquals(Ranking.USER_SENTIMENT_NEGATIVE, + captor.getValue().getSignals().getInt(Adjustment.KEY_USER_SENTIMENT)); + } + + @Test + public void testGroupSummaryCannotTriggerAdjustment() throws Exception { + almostBlockChannel(PKG1, UID1, P1C1); + + StatusBarNotification sbn = generateSbn(PKG1, UID1, P1C1, "no", "I HAVE A GROUP"); + sbn.getNotification().flags |= Notification.FLAG_GROUP_SUMMARY; + mAssistant.setFakeRanking(generateRanking(sbn, P1C1)); + NotificationStats stats = new NotificationStats(); + stats.setDismissalSurface(NotificationStats.DISMISSAL_SHADE); + stats.setSeen(); + mAssistant.onNotificationPosted(sbn, mock(RankingMap.class)); + mAssistant.onNotificationRemoved( + sbn, mock(RankingMap.class), stats, NotificationListenerService.REASON_CANCEL); + + sbn = generateSbn(PKG1, UID1, P1C1, "new one!", "group"); mAssistant.onNotificationPosted(sbn, mock(RankingMap.class)); verify(mNoMan, never()).applyAdjustmentFromAssistant(any(), any()); @@ -192,10 +232,11 @@ public class AssistantTest extends ServiceTestCase<Assistant> { almostBlockChannel(PKG1, UID1, P1C1); StatusBarNotification sbn = generateSbn(PKG1, UID1, P1C1, "no", null); - mAssistant.setFakeRanking(mock(Ranking.class)); + mAssistant.setFakeRanking(generateRanking(sbn, P1C1)); NotificationStats stats = new NotificationStats(); stats.setDismissalSurface(NotificationStats.DISMISSAL_AOD); stats.setSeen(); + mAssistant.onNotificationPosted(sbn, mock(RankingMap.class)); mAssistant.onNotificationRemoved( sbn, mock(RankingMap.class), stats, NotificationListenerService.REASON_CANCEL); @@ -208,13 +249,13 @@ public class AssistantTest extends ServiceTestCase<Assistant> { @Test public void testInteractedCannotTriggerAdjustment() throws Exception { almostBlockChannel(PKG1, UID1, P1C1); - StatusBarNotification sbn = generateSbn(PKG1, UID1, P1C1, "no", null); - mAssistant.setFakeRanking(mock(Ranking.class)); + mAssistant.setFakeRanking(generateRanking(sbn, P1C1)); NotificationStats stats = new NotificationStats(); stats.setDismissalSurface(NotificationStats.DISMISSAL_SHADE); stats.setSeen(); stats.setExpanded(); + mAssistant.onNotificationPosted(sbn, mock(RankingMap.class)); mAssistant.onNotificationRemoved( sbn, mock(RankingMap.class), stats, NotificationListenerService.REASON_CANCEL); @@ -229,10 +270,11 @@ public class AssistantTest extends ServiceTestCase<Assistant> { almostBlockChannel(PKG1, UID1, P1C1); StatusBarNotification sbn = generateSbn(PKG1, UID1, P1C1, "no", null); - mAssistant.setFakeRanking(mock(Ranking.class)); + mAssistant.setFakeRanking(generateRanking(sbn, P1C1)); NotificationStats stats = new NotificationStats(); stats.setDismissalSurface(NotificationStats.DISMISSAL_SHADE); stats.setSeen(); + mAssistant.onNotificationPosted(sbn, mock(RankingMap.class)); mAssistant.onNotificationRemoved( sbn, mock(RankingMap.class), stats, NotificationListenerService.REASON_APP_CANCEL); @@ -265,4 +307,88 @@ public class AssistantTest extends ServiceTestCase<Assistant> { verify(mNoMan, never()).applyAdjustmentFromAssistant(any(), any()); } + + @Test + public void testReadXml() throws Exception { + String key1 = mAssistant.getKey("pkg1", 1, "channel1"); + int streak1 = 2; + int views1 = 5; + int dismiss1 = 9; + + int streak1a = 3; + int views1a = 10; + int dismiss1a = 99; + String key1a = mAssistant.getKey("pkg1", 1, "channel1a"); + + int streak2 = 7; + int views2 = 77; + int dismiss2 = 777; + String key2 = mAssistant.getKey("pkg2", 2, "channel2"); + + String xml = "<assistant version=\"1\">\n" + + "<impression-set key=\"" + key1 + "\" " + + "dismisses=\"" + dismiss1 + "\" views=\"" + views1 + + "\" streak=\"" + streak1 + "\"/>\n" + + "<impression-set key=\"" + key1a + "\" " + + "dismisses=\"" + dismiss1a + "\" views=\"" + views1a + + "\" streak=\"" + streak1a + "\"/>\n" + + "<impression-set key=\"" + key2 + "\" " + + "dismisses=\"" + dismiss2 + "\" views=\"" + views2 + + "\" streak=\"" + streak2 + "\"/>\n" + + "</assistant>\n"; + mAssistant.readXml(new BufferedInputStream(new ByteArrayInputStream(xml.getBytes()))); + + ChannelImpressions c1 = mAssistant.getImpressions(key1); + assertEquals(2, c1.getStreak()); + assertEquals(5, c1.getViews()); + assertEquals(9, c1.getDismissals()); + + ChannelImpressions c1a = mAssistant.getImpressions(key1a); + assertEquals(3, c1a.getStreak()); + assertEquals(10, c1a.getViews()); + assertEquals(99, c1a.getDismissals()); + + ChannelImpressions c2 = mAssistant.getImpressions(key2); + assertEquals(7, c2.getStreak()); + assertEquals(77, c2.getViews()); + assertEquals(777, c2.getDismissals()); + } + + @Test + public void testRoundTripXml() throws Exception { + String key1 = mAssistant.getKey("pkg1", 1, "channel1"); + ChannelImpressions ci1 = new ChannelImpressions(9, 10); + String key2 = mAssistant.getKey("pkg1", 1, "channel2"); + ChannelImpressions ci2 = new ChannelImpressions(); + for (int i = 0; i < 3; i++) { + ci2.incrementViews(); + ci2.incrementDismissals(); + } + ChannelImpressions ci3 = new ChannelImpressions(); + String key3 = mAssistant.getKey("pkg3", 3, "channel2"); + for (int i = 0; i < 9; i++) { + ci3.incrementViews(); + if (i % 3 == 0) { + ci3.incrementDismissals(); + } + } + + mAssistant.insertImpressions(key1, ci1); + mAssistant.insertImpressions(key2, ci2); + mAssistant.insertImpressions(key3, ci3); + + + XmlSerializer serializer = new FastXmlSerializer(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + serializer.setOutput(new BufferedOutputStream(baos), "utf-8"); + mAssistant.writeXml(serializer); + + Assistant assistant = new Assistant(); + assistant.readXml(new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray()))); + + assertEquals(ci1, assistant.getImpressions(key1)); + assertEquals(ci2, assistant.getImpressions(key2)); + assertEquals(ci3, assistant.getImpressions(key3)); + } + } diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/ChannelImpressionsTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/ChannelImpressionsTest.java index a8c9fa35e678..d28e2ac0cffe 100644 --- a/packages/ExtServices/tests/src/android/ext/services/notification/ChannelImpressionsTest.java +++ b/packages/ExtServices/tests/src/android/ext/services/notification/ChannelImpressionsTest.java @@ -21,6 +21,8 @@ import static android.ext.services.notification.ChannelImpressions.STREAK_LIMIT; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertEquals; + import org.junit.Test; public class ChannelImpressionsTest { @@ -82,4 +84,28 @@ public class ChannelImpressionsTest { assertFalse(ci.shouldTriggerBlock()); } + + @Test + public void testAppend() { + ChannelImpressions ci = new ChannelImpressions(); + ci.incrementViews(); + ci.incrementDismissals(); + + ChannelImpressions ci2 = new ChannelImpressions(); + ci2.incrementViews(); + ci2.incrementDismissals(); + ci2.incrementViews(); + + ci.append(ci2); + assertEquals(3, ci.getViews()); + assertEquals(2, ci.getDismissals()); + assertEquals(2, ci.getStreak()); + + assertEquals(2, ci2.getViews()); + assertEquals(1, ci2.getDismissals()); + assertEquals(1, ci2.getStreak()); + + // no crash + ci.append(null); + } } diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index 2dc8dc9bf22d..ec3425338b06 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"تعذر الإقران مع <xliff:g id="DEVICE_NAME">%1$s</xliff:g> نظرًا لوجود رقم تعريف شخصي أو مفتاح مرور غير صحيح."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"لا يمكن الاتصال بـ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"تم رفض الاقتران بواسطة <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"كمبيوتر"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"سماعة رأس"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"هاتف"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"تصوير"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"سماعة أذن"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"جهاز إدخال طرفي"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"بلوتوث"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"تم إيقاف Wi-Fi."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"تم قطع اتصال Wi-Fi."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"إشارة Wi-Fi تتكون من شريط واحد."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"برنامج ترميز LDAC لصوت البلوتوث: جودة التشغيل"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"اختيار برنامج ترميز LDAC لصوت البلوتوث:\nجودة التشغيل"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"البث: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"نظام أسماء النطاقات عبر طبقة النقل الآمنة"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"عند تمكينه، يمكن استخدام نظام أسماء النطاقات عبر طبقة النقل الآمنة على المنفذ 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"نظام أسماء النطاقات الخاص"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"اختر وضع نظام أسماء النطاقات الخاص"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"غير مفعّل"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"انتهازي"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"اسم مضيف مزوّد نظام أسماء النطاقات الخاص"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"أدخل اسم مضيف مزوّد نظام أسماء النطاقات"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"عرض خيارات شهادة عرض شاشة لاسلكي"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"زيادة مستوى تسجيل Wi-Fi، وعرض لكل SSID RSSI في منتقي Wi-Fi"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"عند تمكينه، سيكون Wi-Fi أكثر حدة في تسليم اتصال البيانات إلى الجوّال، وذلك عندما تكون إشارة WiFi منخفضة"</string> diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index e855f9b141ad..3efe3bf669c7 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Не атрымалася спалучыцца з прыладай <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, таму што PIN-код або пароль няправiльныя."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Не магу размаўляць з прыладай <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Злучэнне адхілена прыладай <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Камп\'ютар"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Гарнітура"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Тэлефон"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Прылада апрацоўкі відарысаў"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Навушнікі"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Перыферыйная прылада ўводу"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi выключаны."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi адлучаны."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Адзiн слупок Wi-Fi."</string> @@ -209,8 +216,12 @@ <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="3181967377574368400">"Выбраць аўдыякодэк Bluetooth LDAC:\nякасць прайгравання"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Перадача плынню: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS праз TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"Калі магчыма, паспрабаваць DNS праз TLS на порце 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Прыватная DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Выберыце рэжым прыватнай DNS"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Выключана"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Гібкі"</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="wifi_display_certification_summary" msgid="1155182309166746973">"Паказаць опцыі сертыфікацыі бесправаднога дысплея"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Падвыс. узровень дэтал-цыі журнала Wi‑Fi у залежн. ад SSID RSSI у Wi‑Fi Picker"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Калі гэта функцыя ўключана, Wi-Fi будзе больш інтэнсіўна імкнуцца перайсці на падключ. маб. перад. даных пры слабым сігнале Wi‑Fi"</string> diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index 24a90847cdbc..b2afcb55cd5b 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -78,7 +78,7 @@ <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"মিডিয়া অডিওতে সংযুক্ত রয়েছে"</string> <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ফোন অডিওতে সংযুক্ত"</string> <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ফাইল স্থানান্তর সার্ভারের সঙ্গে সংযুক্ত"</string> - <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"মানচিত্রে সংযুক্ত"</string> + <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"ম্যাপে সংযুক্ত"</string> <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP -তে সংযুক্ত হয়েছে"</string> <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ফাইল স্থানান্তর সার্ভারের সঙ্গে সংযুক্ত নয়"</string> <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ইনপুট ডিভাইসে সংযুক্ত"</string> @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ভুল পিন বা কোড দেওয়ার কারণে <xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সঙ্গে চেনানো যায়নি।"</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সঙ্গে যোগাযোগ করতে পারবেন না।"</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"চেনানো <xliff:g id="DEVICE_NAME">%1$s</xliff:g> প্রত্যাখ্যান করেছে।"</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"কম্পিউটার"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"হেডসেট"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"ফোন"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"ইমেজিং"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"হেডফোন"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"পেরিফেরাল ইনপুট"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"ব্লুটুথ"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"ওয়াই ফাই বন্ধ৷"</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"ওয়াই ফাই এর সংযোগ বিচ্ছিন্ন হয়েছে৷"</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"ওয়াই ফাই এ একটি দণ্ড৷"</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ব্লুটুথ অডিও LDAC কোডেক: প্লেব্যাক গুণমান"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ব্লুটুথ অডিও LDAC কোডেক বেছে নিন:\nপ্লেব্যাক গুণমান"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"স্ট্রিমিং: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"TLS এ ডিএনএস"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"যদি সক্ষম করা থাকে তাহলে পোর্ট ৮৫৩ তে TLS এ ডিএনএস এর চেষ্টা করুন।"</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ব্যক্তিগত ডিএনএস"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ব্যক্তিগত ডিএনএস মোড বেছে নিন"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"বন্ধ আছে"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"সুবিধাবাদী"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"ব্যক্তিগত ডিএনএস প্রদানকারীর হোস্টনেম"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"ডিএনএস প্রদানকারীর হোস্টনেম লিখুন"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ওয়্যারলেস প্রদর্শন সার্টিফিকেশন জন্য বিকল্পগুলি দেখান"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ওয়াই-ফাই লগিং স্তর বাড়ান, ওয়াই-ফাই চয়নকারীতে SSID RSSI অনুযায়ী দেখান"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"সক্ষম করা থাকলে, ওয়াই ফাই সিগন্যালের মান খারাপ হলে ডেটা সংযোগ মোবাইলের কাছে হস্তান্তর করার জন্য ওয়াই ফাই আরো বেশি তৎপর হবে।"</string> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 0ee111a97839..fc81c76ed207 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"No s\'ha pogut vincular amb <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, perquè el PIN o la contrasenya són incorrectes."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"No es pot comunicar amb <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Vinculació rebutjada per <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Ordinador"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Auriculars"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Telèfon"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Imatges"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Auricular"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Perifèric d\'entrada"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi desactivada."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi desconnectada."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Senyal Wi-Fi: una barra."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Còdec LDAC d\'àudio per Bluetooth: qualitat de reproducció"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Selecciona el còdec LDAC d\'àudio per Bluetooth:\nQualitat de reproducció"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"S\'està reproduint en temps real: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS per TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"Si s\'ha activat, prova d\'utilitzar DNS per TLS al port 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS privat"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecciona el mode de DNS privat"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Desactivat"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Oportunista"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Nom d\'amfitrió del proveïdor de DNS privat"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Introdueix el nom d\'amfitrió del proveïdor de DNS"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra les opcions de 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_aggressive_handover_summary" msgid="7266329646559808827">"Quan s\'activa, la Wi-Fi és més agressiva en transferir la connexió de dades al mòbil quan el senyal de la Wi-Fi sigui dèbil"</string> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index e85242a87736..e9fa0862fbd8 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Couldn\'t pair with <xliff:g id="DEVICE_NAME">%1$s</xliff:g> because of an incorrect PIN or passkey."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Can\'t communicate with <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Pairing rejected by <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Computer"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Headset"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Telephone"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Imaging"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Headphone"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Input Peripheral"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi off."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi disconnected."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wi-Fi one bar."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC Codec: Playback Quality"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Select Bluetooth Audio LDAC Codec:\nPlayback Quality"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS over TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"If enabled, attempt DNS over TLS on port 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Private DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Select private DNS mode"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Off"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Opportunistic"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Private DNS provider hostname"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Enter hostname of DNS provider"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to mobile, when Wi‑Fi signal is low"</string> diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml index e85242a87736..e9fa0862fbd8 100644 --- a/packages/SettingsLib/res/values-en-rCA/strings.xml +++ b/packages/SettingsLib/res/values-en-rCA/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Couldn\'t pair with <xliff:g id="DEVICE_NAME">%1$s</xliff:g> because of an incorrect PIN or passkey."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Can\'t communicate with <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Pairing rejected by <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Computer"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Headset"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Telephone"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Imaging"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Headphone"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Input Peripheral"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi off."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi disconnected."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wi-Fi one bar."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC Codec: Playback Quality"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Select Bluetooth Audio LDAC Codec:\nPlayback Quality"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS over TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"If enabled, attempt DNS over TLS on port 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Private DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Select private DNS mode"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Off"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Opportunistic"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Private DNS provider hostname"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Enter hostname of DNS provider"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to mobile, when Wi‑Fi signal is low"</string> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index e85242a87736..e9fa0862fbd8 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Couldn\'t pair with <xliff:g id="DEVICE_NAME">%1$s</xliff:g> because of an incorrect PIN or passkey."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Can\'t communicate with <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Pairing rejected by <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Computer"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Headset"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Telephone"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Imaging"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Headphone"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Input Peripheral"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi off."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi disconnected."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wi-Fi one bar."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC Codec: Playback Quality"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Select Bluetooth Audio LDAC Codec:\nPlayback Quality"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS over TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"If enabled, attempt DNS over TLS on port 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Private DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Select private DNS mode"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Off"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Opportunistic"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Private DNS provider hostname"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Enter hostname of DNS provider"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to mobile, when Wi‑Fi signal is low"</string> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index e85242a87736..e9fa0862fbd8 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Couldn\'t pair with <xliff:g id="DEVICE_NAME">%1$s</xliff:g> because of an incorrect PIN or passkey."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Can\'t communicate with <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Pairing rejected by <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Computer"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Headset"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Telephone"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Imaging"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Headphone"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Input Peripheral"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi off."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi disconnected."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wi-Fi one bar."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC Codec: Playback Quality"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Select Bluetooth Audio LDAC Codec:\nPlayback Quality"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS over TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"If enabled, attempt DNS over TLS on port 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Private DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Select private DNS mode"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Off"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Opportunistic"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Private DNS provider hostname"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Enter hostname of DNS provider"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to mobile, when Wi‑Fi signal is low"</string> diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml index 2a4983aa00de..88fba49dcd55 100644 --- a/packages/SettingsLib/res/values-en-rXC/strings.xml +++ b/packages/SettingsLib/res/values-en-rXC/strings.xml @@ -216,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC Codec: Playback Quality"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Select Bluetooth Audio LDAC Codec:\nPlayback Quality"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS over TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"If enabled, attempt DNS over TLS on port 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Private DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Select Private DNS Mode"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Off"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Opportunistic"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Private DNS provider hostname"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Enter hostname of DNS provider"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to mobile, when Wi‑Fi signal is low"</string> diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index 8474c4941e10..a5929e257950 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"No se ha podido vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g> porque la clave de acceso o el PIN son incorrectos."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"No se puede establecer comunicación con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Vinculación rechazada por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Ordenador"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Cascos"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Teléfono"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Escáner"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Auriculares"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Periférico de entrada"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi desactivado."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi desconectado."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Una barra de Wi-Fi."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Selecciona el códec LDAC por Bluetooth: calidad de reproducción"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Selecciona el códec LDAC de audio por Bluetooth:\nCalidad de reproducción"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS a través de TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"Si esta opción está inhabilitada, prueba DNS a través de TLS en el puerto 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS privado"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecciona el modo de DNS privado"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"No"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Oportunista"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Nombre de host de proveedor de DNS privado"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Introduce el nombre de host del proveedor de DNS"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opciones para la certificación de la pantalla inalámbrica"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar el nivel de registro de Wi-Fi, mostrar por SSID RSSI en el selector Wi-Fi"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Si se activa esta opción, la conexión Wi-Fi será más agresiva al pasar la conexión a datos móviles (si la señal Wi-Fi es débil)"</string> @@ -382,10 +393,10 @@ <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Ayuda y sugerencias"</string> <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string> - <string name="retail_demo_reset_message" msgid="118771671364131297">"Escribe una contraseña para restablecer datos de fábrica en modo demostración"</string> + <string name="retail_demo_reset_message" msgid="118771671364131297">"Escribe una contraseña para restablecer estado de fábrica en modo demostración"</string> <string name="retail_demo_reset_next" msgid="8356731459226304963">"Siguiente"</string> <string name="retail_demo_reset_title" msgid="696589204029930100">"Contraseña obligatoria"</string> - <string name="active_input_method_subtypes" msgid="3596398805424733238">"Métodos de introducción activos"</string> + <string name="active_input_method_subtypes" msgid="3596398805424733238">"Métodos de introducción de texto activos"</string> <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Usar idiomas del sistema"</string> <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Error al abrir los ajustes de <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string> <string name="ime_security_warning" msgid="4135828934735934248">"Este método de entrada puede registrar todo lo que escribas, incluidos datos personales, como las contraseñas y los números de las tarjetas de crédito. Procede de la aplicación <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. ¿Quieres usar este método de entrada?"</string> diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index 29b1e2b22ed0..a8d3cca8d033 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Non se puido sincronizar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g> debido a que se introduciu un contrasinal ou PIN incorrecto."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Non se pode comunicar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Sincronización rexeitada por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Ordenador"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Auriculares con micrófono"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Teléfono"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Imaxes"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Auriculares"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Periférico de entrada"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi desactivada."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wifi desconectada."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Unha barra de wifi."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Códec LDAC de audio por Bluetooth: calidade de reprodución"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Seleccionar códec LDAC de audio por Bluetooth:\ncalidade de reprodución"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Reprodución en tempo real: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS a través de TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"Se se activa esta opción, téntase utilizar o método DNS a través de TLS no porto 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS privado"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecciona o modo de DNS privado"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Desactivar"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Oportunista"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Nome de host de provedor de DNS privado"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Introduce o nome de host de provedor de DNS"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra opcións para o certificado de visualización sen fíos"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nivel de rexistro da wifi, mostrar por SSID RSSI no selector de wifi"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Cando estea activada esta función, a wifi será máis agresiva ao transferir a conexión de datos ao móbil cando o sinal wifi sexa feble"</string> diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index cbaa414ebddc..e3f9746d8493 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"એક ખોટા પિન અથવા પાસકીને કારણે <xliff:g id="DEVICE_NAME">%1$s</xliff:g> સાથે જોડી બનાવી શકાઈ નથી."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> સાથે સંચાર કરી શકાતો નથી."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> દ્વારા જોડી કરવાનું નકાર્યું."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"કમ્પ્યુટર"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"હૅડસેટ"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"ફોન"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"ઇમેજિંગ"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"હેડફોન"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"ઇનપુટ પેરિફેરલ"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"બ્લૂટૂથ"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi બંધ."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wifi ડિસ્કનેક્ટ થયું."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wifi એક બાર."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"બ્લૂટૂથ ઑડિઓ LDAC કોડેક: પ્લેબૅક ગુણવત્તા"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"બ્લૂટૂથ ઑડિઓ LDAC કોડેક પસંદ કરો:\nપ્લેબૅક ગુણવત્તા"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"સ્ટ્રીમિંગ: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS ઓવર TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"જો ચાલુ કરવામાં આવે, તો પોર્ટ 853 પરથી DNS ઓવર TLSનો પ્રયાસ કરો."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ખાનગી DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ખાનગી DNS મોડને પસંદ કરો"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"બંધ"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"તકવાદી"</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="wifi_display_certification_summary" msgid="1155182309166746973">"વાયરલેસ ડિસ્પ્લે પ્રમાણપત્ર માટેના વિકલ્પો બતાવો"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"વાઇ-ફાઇ લોગિંગ સ્તર વધારો, વાઇ-ફાઇ પીકરમાં SSID RSSI દીઠ બતાવો"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"જ્યારે સક્ષમ કરેલ હોય, ત્યારે વાઇ-ફાઇ સિગ્નલ નબળું હોવા પર, વાઇ-ફાઇ વધુ ઝડપથી ડેટા કનેક્શનને મોબાઇલ પર મોકલશે"</string> diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml index a41c4f239b8f..1a765b34e4d7 100644 --- a/packages/SettingsLib/res/values-hi/arrays.xml +++ b/packages/SettingsLib/res/values-hi/arrays.xml @@ -49,14 +49,14 @@ <item msgid="1805837518286731242">"खराब कनेक्शन को अस्थायी रूप से अनदेखा कर रहा है"</item> </string-array> <string-array name="hdcp_checking_titles"> - <item msgid="441827799230089869">"कभी नही जांचें"</item> - <item msgid="6042769699089883931">"केवल DRM सामग्री जांचें"</item> - <item msgid="9174900380056846820">"हमेशा जांचें"</item> + <item msgid="441827799230089869">"कभी नही जाँचें"</item> + <item msgid="6042769699089883931">"केवल DRM सामग्री जाँचें"</item> + <item msgid="9174900380056846820">"हमेशा जाँचें"</item> </string-array> <string-array name="hdcp_checking_summaries"> - <item msgid="505558545611516707">"कभी भी HDCP जांच का उपयोग न करें"</item> - <item msgid="3878793616631049349">"HDCP जांच का उपयोग केवल DRM सामग्री के लिए करें"</item> - <item msgid="45075631231212732">"हमेशा HDCP जांच का उपयोग करें"</item> + <item msgid="505558545611516707">"कभी भी HDCP जाँच का उपयोग न करें"</item> + <item msgid="3878793616631049349">"HDCP जाँच का उपयोग केवल DRM सामग्री के लिए करें"</item> + <item msgid="45075631231212732">"हमेशा HDCP जाँच का उपयोग करें"</item> </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (डिफ़ॉल्ट)"</item> diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index 5d25d2096abe..3b5ea2d846f7 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -30,7 +30,7 @@ <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string> <string name="wifi_cant_connect" msgid="5410016875644565884">"कनेक्ट नहीं हो पा रहा है"</string> <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' से कनेक्ट नहीं हो पा रहा है"</string> - <string name="wifi_check_password_try_again" msgid="516958988102584767">"पासवर्ड जांचें और दोबारा कोशिश करें"</string> + <string name="wifi_check_password_try_again" msgid="516958988102584767">"पासवर्ड जाँचें और दोबारा कोशिश करें"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"रेंज में नहीं"</string> <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"अपने आप कनेक्ट नहीं होगा"</string> <string name="wifi_no_internet" msgid="3880396223819116454">"इंटरनेट नहीं है"</string> @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"गलत पिन या पासकी के कारण <xliff:g id="DEVICE_NAME">%1$s</xliff:g> के साथ युग्मित नहीं हो सका."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> से संचार नहीं कर सकता."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ने जोड़ने का अनुरोध नहीं माना."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"कंप्यूटर"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"हेडसेट"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"फ़ोन"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"इमेजिंग"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"हेडफ़ोन"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"इनपुट पेरिफ़ेरल"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"ब्लूटूथ"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"वाई-फ़ाई बंद है."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"वाई-फ़ाई डिसकनेक्ट है."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"वाई-फ़ाई का एक बार है."</string> @@ -142,7 +149,7 @@ <string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> पूरी तरह से समर्थित है"</string> <string name="tts_status_requires_network" msgid="6042500821503226892">"<xliff:g id="LOCALE">%1$s</xliff:g> के लिए नेटवर्क कनेक्शन की आवश्यकता है"</string> <string name="tts_status_not_supported" msgid="4491154212762472495">"<xliff:g id="LOCALE">%1$s</xliff:g> समर्थित नहीं है"</string> - <string name="tts_status_checking" msgid="5339150797940483592">"जांच की जा रही है..."</string> + <string name="tts_status_checking" msgid="5339150797940483592">"जाँच की जा रही है..."</string> <string name="tts_engine_settings_title" msgid="3499112142425680334">"<xliff:g id="TTS_ENGINE_NAME">%s</xliff:g> के लिए सेटिंग"</string> <string name="tts_engine_settings_button" msgid="1030512042040722285">"इंजन सेटिंग लॉन्च करें"</string> <string name="tts_engine_preference_section_title" msgid="448294500990971413">"पसंदीदा इंजन"</string> @@ -209,10 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ब्लूटूथ ऑडियो LDAC कोडेक: प्लेबैक क्वालिटी"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ब्लूटूथ ऑडियो LDAC कोडेक चुनें:\nप्लेबैक क्वालिटी"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"चलाया जा रहा है: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <!-- no translation found for dns_tls (6773814174391131955) --> - <skip /> - <!-- no translation found for dns_tls_summary (3692494150251071380) --> - <skip /> + <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="7608409735589131766">"मौका मिलते ही काम करने वाला"</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="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस दिखाई देने के लिए प्रमाणन विकल्प दिखाएं"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाई-फ़ाई प्रवेश स्तर बढ़ाएं, वाई-फ़ाई पिकर में प्रति SSID RSSI दिखाएं"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"इसके सक्षम होने पर, जब वाई-फ़ाई संकेत कमज़ोर हों तो वाई-फ़ाई, डेटा कनेक्शन को मोबाइल पर ज़्यादा तेज़ी से भेजेगा"</string> @@ -236,14 +245,14 @@ <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="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"फ़ोन की रिंगटोन को ब्लूटूथ हेडसेट पर बजने दें"</string> <string name="enable_terminal_title" msgid="95572094356054120">"स्थानीय टर्मिनल"</string> <string name="enable_terminal_summary" msgid="67667852659359206">"लोकल शेल तक पहुंचने की सुविधा देने वाले टर्मिनल ऐप को चालू करें"</string> - <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP जांच"</string> - <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP जांच व्यवहार सेट करें"</string> + <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP जाँच"</string> + <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP जाँच व्यवहार सेट करें"</string> <string name="debug_debugging_category" msgid="6781250159513471316">"डीबग करना"</string> <string name="debug_app" msgid="8349591734751384446">"डीबग ऐप्स को चुनें"</string> <string name="debug_app_not_set" msgid="718752499586403499">"कोई डीबग ऐप्स सेट नहीं है"</string> @@ -304,7 +313,7 @@ <string name="force_resizable_activities" msgid="8615764378147824985">"आकार बदले जाने के लिए गतिविधियों को बाध्य करें"</string> <string name="force_resizable_activities_summary" msgid="6667493494706124459">"सभी गतिविधियों को मल्टी-विंडो (एक से ज़्यादा ऐप, एक साथ) के लिए आकार बदलने लायक बनाएं, चाहे उनकी मेनिफ़ेस्ट वैल्यू कुछ भी हो."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"फ़्रीफ़ॉर्म विंडो (एक साथ कई विंडो दिखाना) चालू करें"</string> - <string name="enable_freeform_support_summary" msgid="8247310463288834487">"जांच के लिए बनी फ़्रीफ़ॉर्म विंडो के लिए सहायता चालू करें."</string> + <string name="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_change" msgid="5376206246809190364">"डेस्कटॉप के पूर्ण बैकअप का पासवर्ड बदलने या निकालने के लिए टैप करें"</string> diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index 2365058bb8db..34f471bf9ee7 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Հնարավոր չեղավ զուգավորվել <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ի հետ սխալ PIN-ի կամ անցաբառի պատճառով:."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Հնարավոր չէ կապ հաստատել <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ի հետ:"</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Զուգավորումը մերժվեց <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ի կողմից:"</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Համակարգիչ"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Ականջակալ"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Հեռախոս"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Պատկերներ"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Ականջակալ"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Մուտքի արտաքին սարքեր"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi-ն անջատված է:"</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi-ը կապակցված չէ:"</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wi-Fi-ի ուժգնությունը՝ մեկ գիծ:"</string> @@ -209,8 +216,12 @@ <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="3181967377574368400">"Ընտրեք Bluetooth աուդիո LDAC կոդեկը՝\nնվագարկման որակ"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Հեռարձակում՝ <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS TLS-ի միջոցով"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"Միացնելու դեպքում փորձել DNS-ը TLS-ի միջոցով միացք 853-ում:"</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Անհատական DNS սերվեր"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Ընտրեք անհատական DNS սերվերի ռեժիմը"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Անջատված է"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Ճկուն"</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="wifi_display_certification_summary" msgid="1155182309166746973">"Ցույց տալ անլար էկրանի հավաստագրման ընտրանքները"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Բարձրացնել մակարդակը, Wi‑Fi ընտրիչում ամեն մի SSID-ի համար ցույց տալ RSSI"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Եթե այս գործառույթը միացված է, Wi-Fi-ի թույլ ազդանշանի դեպքում Wi‑Fi ինտերնետից բջջային ինտերնետի անցումը ավելի կտրուկ կկատարվի"</string> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index 435abbb908da..c5f4f85af808 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"לא ניתן להתאים את <xliff:g id="DEVICE_NAME">%1$s</xliff:g> בשל קוד גישה או סיסמה שגויים."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"לא ניתן לתקשר עם <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"ההתאמה נדחתה על ידי <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"מחשב"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"אוזניות"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"טלפון"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"הדמיה"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"אוזנייה"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"ציוד קלט היקפי"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi כבוי."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi מנותק."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"פס אחד של Wi-Fi."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codec אודיו LDAC ל-Bluetooth: איכות נגינה"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"בחירת Codec אודיו LDAC ל-Bluetooth:\nאיכות נגינה"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"סטרימינג: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS באמצעות TLS (אבטחת שכבת התעבורה)"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"אם האפשרות מופעלת, יש לנסות DNS באמצעות TLS (אבטחת שכבת התעבורה) ביציאה 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS פרטי"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"צריך לבחור במצב DNS פרטי"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"מושבת"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"אופרטוניסטי"</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="wifi_display_certification_summary" msgid="1155182309166746973">"הצג אפשרויות עבור אישור של תצוגת WiFi"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"העלה את רמת הרישום של Wi‑Fi ביומן, הצג לכל SSID RSSI ב-Wi‑Fi Picker"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"כשאפשרות זו מופעלת, Wi-Fi יתנהג בצורה אגרסיבית יותר בעת העברת חיבור הנתונים לרשת הסלולרית כשאות ה-Wi-Fi חלש."</string> diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index 8d9a7e150f87..d7ab9feaf55e 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ತಪ್ಪಾಗಿರುವ ಪಿನ್ ಅಥವಾ ಪಾಸ್ಕೀ ಕಾರಣದಿಂದಾಗಿ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಜೊತೆಗೆ ಜೋಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಜೊತೆಗೆ ಸಂವಹನ ನಡೆಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"ಜೋಡಿಸುವಿಕೆಯನ್ನು <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ತಿರಸ್ಕರಿಸಿದೆ"</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"ಕಂಪ್ಯೂಟರ್"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"ಹೆಡ್ಸೆಟ್"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"ಫೋನ್"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"ಇಮೇಜಿಂಗ್"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"ಹೆಡ್ಫೋನ್"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"ಪೆರಿಪೆರಲ್ ಇನ್ಪುಟ್"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"ಬ್ಲೂಟೂತ್"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"ವೈಫೈ ಆಫ್."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"ವೈಫೈ ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡಿದೆ."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"ವೈಫೈ ಒಂದು ಪಟ್ಟಿ."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೊ LDAC ಕೋಡೆಕ್: ಪ್ಲೇಬ್ಯಾಕ್ ಗುಣಮಟ್ಟ"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೊ LDAC ಕೋಡೆಕ್:\nಪ್ಲೇಬ್ಯಾಕ್ ಗುಣಮಟ್ಟ ಆಯ್ಕೆ ಮಾಡಿ"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ಸ್ಟ್ರೀಮಿಂಗ್: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"TLS ಮೇಲೆ DNS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"ಸಕ್ರಿಯಗೊಂಡರೆ, ಪೋರ್ಟ್ 853 ನಲ್ಲಿ TLS ಮೇಲೆ DNS ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ಖಾಸಗಿ DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ಖಾಸಗಿ DNS ಮೋಡ್ ಆಯ್ಕೆಮಾಡಿ"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"ಆಫ್"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"ಅವಕಾಶವಾದಿ"</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="wifi_display_certification_summary" msgid="1155182309166746973">"ವೈರ್ಲೆಸ್ ಪ್ರದರ್ಶನ ಪ್ರಮಾಣೀಕರಣಕ್ಕಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸು"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ಲಾಗಿಂಗ್ ಮಟ್ಟನ್ನು ಹೆಚ್ಚಿಸಿ, Wi‑Fi ಆಯ್ಕೆಯಲ್ಲಿ ಪ್ರತಿಯೊಂದು SSID RSSI ತೋರಿಸಿ"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"ಇದು ಸಕ್ರಿಯಗೊಂಡರೆ, ವೈ-ಫೈ ಸಿಗ್ನಲ್ ದುರ್ಬಲವಾಗಿದ್ದಾಗ, ಮೊಬೈಲ್ಗೆ ಡೇಟಾ ಸಂಪರ್ಕವನ್ನು ಹಸ್ತಾಂತರಿಸುವಲ್ಲಿ ವೈ-ಫೈ ಹೆಚ್ಚು ಆಕ್ರಮಣಕಾರಿಯಾಗಿರುತ್ತದೆ"</string> diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index a2a10f273092..a96fbcf3cbe5 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ഒരു തെറ്റായ പിൻ അല്ലെങ്കിൽ പാസ്കീ കാരണം <xliff:g id="DEVICE_NAME">%1$s</xliff:g> എന്നതുമായി ജോടിയാക്കാനായില്ല."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> എന്നതുമായി ആശയവിനിമയം നടത്താനായില്ല."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>, ജോടിയാക്കൽ നിരസിച്ചു."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"കമ്പ്യൂട്ടർ"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"ഹെഡ്സെറ്റ്"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"ഫോൺ"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"ഇമേജിംഗ്"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"ഹെഡ്ഫോൺ"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"ഇൻപുട്ട് പെരിഫറൽ"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"വൈഫൈ ഓഫാണ്."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"വൈഫൈ വിച്ഛേദിച്ചു."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"വൈഫൈ സിഗ്നൽ ഒരു ബാർ."</string> @@ -209,8 +216,12 @@ <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="3181967377574368400">"Bluetooth ഓഡിയോ LDAC കോഡെക് തിരഞ്ഞെടുക്കുക:\nപ്ലേബാക്ക് നിലവാരം"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"സ്ട്രീമിംഗ്: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"TLS വഴിയുള്ള DNS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ, പോർട്ട് 853-ലെ TLS വഴി DNS-ന് ശ്രമിക്കുക."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"സ്വകാര്യ DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"സ്വകാര്യ DNS മോഡ് തിരഞ്ഞെടുക്കുക"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"ഓഫ്"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"അവസരവാദപരം"</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="wifi_display_certification_summary" msgid="1155182309166746973">"വയർലെസ് ഡിസ്പ്ലേ സർട്ടിഫിക്കേഷനായി ഓപ്ഷനുകൾ ദൃശ്യമാക്കുക"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"വൈഫൈ പിക്കറിൽ ഓരോ SSID RSSI പ്രകാരം കാണിക്കാൻ വൈഫൈ ലോഗിംഗ് നില വർദ്ധിപ്പിക്കുക"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"പ്രവർത്തനക്ഷമമായിരിക്കുമ്പോൾ, വൈഫൈ സിഗ്നൽ കുറവായിരിക്കുന്ന സമയത്ത് മൊബൈലിലേക്ക് ഡാറ്റ കണക്ഷൻ വഴി കൈമാറുന്നതിൽ വൈഫൈ കൂടുതൽ സക്രിയമായിരിക്കും"</string> diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index 17d7191fae46..3ac692335b40 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -216,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ब्लूटूथ ऑडिओ LDAC कोडेक: प्लेबॅक गुणवत्ता"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ब्लूटूथ ऑडिओ LDAC कोडेक निवडा:\nप्लेबॅक गुणवत्ता"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"स्ट्रीमिंग: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS ओव्हर TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"सुरू केल्यास, पोर्ट 853 वर DNS ओव्हर TLS करण्याचा प्रयत्न करा."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"खाजगी DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"खाजगी DNS मोड निवडा"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"बंद"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"संधिसाधू"</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="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस डिस्प्ले प्रमाणिकरणाचे पर्याय दाखवा"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाय-फाय लॉगिंग स्तर वाढवा, वाय-फाय सिलेक्टरमध्ये प्रति SSID RSSI दर्शवा"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"सक्षम केले असताना, वाय-फाय सिग्नल कमी असताना, मोबाइलकडे डेटा कनेक्शन सोपवण्यासाठी वाय-फाय अधिक अॅग्रेसिव्ह असेल."</string> diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index 7d166b403f3f..c1892c3ee322 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ပင်နံပါတ် သို့မဟုတ် ဖြတ်သန်းခွင့်ကီးမမှန်ကန်သောကြောင့်<xliff:g id="DEVICE_NAME">%1$s</xliff:g>နှင့် တွဲချိတ်မရပါ။"</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>နှင့်ဆက်သွယ်မရပါ"</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>နှင့်တွဲချိတ်ရန် ပယ်ချခံရသည်"</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"ကွန်ပျူတာ"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"မိုက်ခွက်ပါနားကြပ်"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"ဖုန်း"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"ဓာတ်ပုံဆိုင်ရာ"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"နားကြပ်"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"ချိတ်ဆက်အသုံးပြုရသည့် စက်ပစ္စည်းများ"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"ဘလူးတုသ်"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi ပိတ်ထားသည်"</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi ချိတ်ဆက်ထားမှု မရှိပါ"</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wi-Fi ၁ ဘားရှိ"</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ဘလူးတုသ်အသံ LDAC ကိုးဒက်ခ်− နားထောင်ရန် အရည်အသွေး"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ဘလူးတုသ်အသံ LDAC ကိုးဒက်ခ်ကို ရွေးပါ−\nနားထောင်ရန် အရည်အသွေး"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"တိုက်ရိုက်လွှင့်နေသည်− <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS over TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"ဖွင့်ထားပါက DNS over TLS ကို ပို့တ် ၈၅၃ တွင် စမ်းကြည့်ပါ။"</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"သီးသန့် DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"သီးသန့် DNS မုဒ်ကို ရွေးပါ"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"ပိတ်ရန်"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"အခွင့်အရေးသမား"</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="wifi_display_certification_summary" msgid="1155182309166746973">"ကြိုးမဲ့ အခင်းအကျင်း အသိအမှတ်ပြုလက်မှတ်အတွက် ရွေးချယ်စရာများပြရန်"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi မှတ်တမ်းတင်ခြင်း နှုန်းအားမြင့်ကာ၊ Wi‑Fi ရွေးရာတွင် SSID RSSI ဖြင့်ပြပါ"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"ဖွင့်ထားပါက Wi‑Fi လွှင့်အား နည်းချိန်တွင် Wi‑Fi မှ မိုဘိုင်းသို့ ဒေတာချိတ်ဆက်မှုကို လွှဲပြောင်းရာ၌ ပိုမိုထိရောက်ပါသည်"</string> diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index a3875a6a2026..172fed1a14e9 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>गलत PIN वा पासकिका कारण सँग जोडा बाँध्न सक्दैन।"</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> सँग कुराकानी हुन सक्दैन।"</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> द्वारा जोडा बाँध्ने कार्य अस्वीकृत"</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"कम्प्युटर"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"हेडसेट"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"फोन"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"छवि सम्बन्धी"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"हेडफोन"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"इनपुट सम्बन्धी बाह्य यन्त्र"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"ब्लुटुथ"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi बन्द।"</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi जडान विच्छेद भयो।"</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wi-Fi एक पट्टि।"</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ब्लुटुथ अडियो LDAC कोडेक: प्लेब्याक गुणस्तर"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ब्लुटुथ अडियो LDAC कोडेक चयन गर्नुहोस्:\nप्लेब्याक गुणस्तर"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"स्ट्रिमिङ: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"TLS मा DNS को प्रयोग"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"सक्षम पारिएको खण्डमा पोर्ट ८५३ मा TLS मा DNS प्रयोग गर्ने अनुरोध गर्नुहोस्।"</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"निजी DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"निजी DNS मोड चयन गर्नुहोस्"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"निष्क्रिय छ"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"अवसरवादी"</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="wifi_display_certification_summary" msgid="1155182309166746973">"ताररहित प्रदर्शन प्रमाणीकरणका लागि विकल्पहरू देखाउनुहोस्"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi लग स्तर बढाउनुहोस्, Wi-Fi चयनकर्तामा प्रति SSID RSSI देखाइन्छ"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"सक्षम गरिएको अवस्थामा, Wi-Fi सिग्नल न्यून हुँदा, Wi-Fi ले बढी आक्रामक ढंगले मोबाइलमा डेटा जडान हस्तान्तरण गर्नेछ"</string> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index 4d0d7fe8d932..38853f09bd82 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Kan niet koppelen aan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> vanwege een onjuiste pincode of toegangscode."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Kan niet communiceren met <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Koppeling geweigerd door <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Computer"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Headset"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Telefoon"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Replicatieapparaat"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Hoofdtelefoon"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Randapparaat voor invoer"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi: uitgeschakeld."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wifi-verbinding verbroken."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wifi: één streepje."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"LDAC-codec voor Bluetooth-audio: afspeelkwaliteit"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"LDAC-codec voor Bluetooth-audio selecteren:\nafspeelkwaliteit"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS via TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"Als deze optie is ingeschakeld, wordt geprobeerd om DNS via TLS uit te voeren via poort 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privé-DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecteer de modus Privé-DNS"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Uit"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Opportunistisch"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Hostnaam van privé-DNS-provider"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Geef hostnaam van DNS-provider op"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Opties weergeven voor certificering van draadloze weergave"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Logniveau voor wifi verhogen, weergeven per SSID RSSI in wifi-kiezer"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Indien ingeschakeld, is wifi agressiever bij het overgeven van de gegevensverbinding aan mobiel wanneer het wifi-signaal zwak is"</string> diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 56e361f20e08..be4fa8d6a727 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ਇੱਕ ਗਲਤ ਪਿੰਨ ਜਾਂ ਪਾਸਕੁੰਜੀ ਦੇ ਕਾਰਨ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਨਾਲ ਜੋੜਾਬੱਧ ਨਹੀਂ ਹੋ ਸਕਿਆ।"</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਨਾਲ ਸੰਚਾਰ ਨਹੀਂ ਕਰ ਸਕਦਾ।"</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"ਪੇਅਰਿੰਗ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਵੱਲੋਂ ਰੱਦ ਕੀਤੀ ਗਈ।"</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"ਕੰਪਿਊਟਰ"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"ਹੈੱਡਸੈੱਟ"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"ਫ਼ੋਨ ਕਰੋ"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"ਇਮੇਜਿੰਗ"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"ਹੈੱਡਫੋਨ"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"ਇਨਪੁੱਟ ਪੈਰਿਫੈਰਲ"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"ਬਲੂਟੁੱਥ"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi ਬੰਦ।"</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wifi ਡਿਸਕਨੈਕਟ ਕੀਤਾ।"</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wifi ਇੱਕ ਬਾਰ।"</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ਬਲੂਟੁੱਥ ਔਡੀਓ LDAC ਕੋਡੇਕ: ਪਲੇਬੈਕ ਗੁਣਵੱਤਾ"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ਬਲੂਟੁੱਥ ਔਡੀਓ LDAC ਕੋਡੇਕ ਚੁਣੋ:\nਪਲੇਬੈਕ ਗੁਣਵੱਤਾ"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ਸਟ੍ਰੀਮਿੰਗ: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"TLS \'ਤੇ DNS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"ਚਾਲੂ ਕੀਤੇ ਜਾਣ \'ਤੇ, ਪੋਰਟ 853 \'ਤੇ TLS \'ਤੇ DNS ਵਰਤਣ ਦੀ ਬੇਨਤੀ ਕਰੋ।"</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ਨਿੱਜੀ DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ਨਿੱਜੀ DNS ਮੋਡ ਚੁਣੋ"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"ਬੰਦ"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"ਮੌਕਾਪ੍ਰਸਤ"</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="wifi_display_certification_summary" msgid="1155182309166746973">"ਵਾਇਰਲੈੱਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਚੋਣਾਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰੋ"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ਵਾਈ‑ਫਾਈ ਲੌਗਿੰਗ ਪੱਧਰ ਵਧਾਓ, ਵਾਈ‑ਫਾਈ Picker ਵਿੱਚ ਪ੍ਰਤੀ SSID RSSI ਦਿਖਾਓ"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"ਜਦੋਂ ਯੋਗ ਬਣਾਇਆ ਹੋਵੇ, ਤਾਂ ਵਾਈ‑ਫਾਈ ਸਿਗਨਲ ਘੱਟ ਹੋਣ \'ਤੇ ਵਾਈ‑ਫਾਈ ਡਾਟਾ ਕਨੈਕਸ਼ਨ ਮੋਬਾਈਲ ਨੂੰ ਹੈਂਡ ਓਵਰ ਕਰਨ ਵਿੱਚ ਵੱਧ ਆਕਰਮਣਸ਼ੀਲ ਹੋਵੇਗਾ।"</string> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index 7be64e41f302..89a18ef5c014 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Nu s-a putut împerechea cu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> din cauza unui cod PIN sau al unei chei de acces incorecte."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Nu se poate comunica cu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Împerechere respinsă de <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Computer"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Set căști-microfon"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Telefon"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Dispozitiv pentru imagini"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Căști"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Dispozitiv periferic de intrare"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi dezactivat."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi deconectat."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Semnal Wi-Fi: o bară."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codecul LDAC audio pentru Bluetooth: calitatea redării"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Selectați codecul LDAC audio pentru Bluetooth:\ncalitatea redării"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Transmitere în flux: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS prin TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"Dacă opțiunea este activată, încercați DNS prin TLS pe portul 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS privat"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selectați modul DNS privat"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Dezactivat"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Oportunist"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Nume de gazdă al furnizorului de DNS privat"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Introduceți numele de gazdă al furnizorului de DNS"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afișați opțiunile pentru certificarea Ecran wireless"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Măriți niv. de înr. prin Wi‑Fi, afișați în fcț. de SSID RSSI în Selectorul Wi‑Fi"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Când este activată, Wi-Fi va fi mai agresivă la predarea conexiunii de date către rețeaua mobilă când semnalul Wi-Fi este slab"</string> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index 756254b98c1c..a1beef68d8cd 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Haikuweza kulingana na <xliff:g id="DEVICE_NAME">%1$s</xliff:g> kwa sababu ya PIN isiyo sahihi au msimbo ya kuingia."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Haiwezi kuanzisha mawasiliano na <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Ulinganishaji umekataliwa na <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Kompyuta"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Vifaa vya sauti"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Simu"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Kupiga picha"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Kifaa cha sauti"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Vifaa vya Ziada vya Kuingiza Data"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi imezimwa."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wifi imeondolewa."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Kipima mtandao kimoja cha Wifi."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Kodeki ya LDAC ya Sauti ya Bluetooth: Ubora wa Kucheza"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Chagua Kodeki ya LDAC ya Sauti ya Bluetooth:\nUbora wa Kucheza"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Kutiririsha: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"DNS kupitia TLS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"Ukiwasha mipangilio hii, jaribu kutumia DNS kupitia TLS kwenye mlango wa 853."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS ya Faragha"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Chagua Hali ya DNS ya Faragha"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Imezimwa"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"Inayojitokeza"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Jina la mpangishi wa huduma za DNS ya faragha"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Weka jina la mpangishi wa huduma za DNS"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Onyesha chaguo za cheti cha kuonyesha pasiwaya"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Ongeza hatua ya uwekaji kumbukumbu ya Wi-Fi, onyesha kwa kila SSID RSSI kwenye Kichukuzi cha Wi-Fi"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Ikiwashwa, Wi-Fi itakabidhi kwa hima muunganisho wa data kwa mtandao wa simu, wakati mtandao wa Wi-Fi si thabiti"</string> diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index e31e3e0a4377..3a8b17518afa 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"தவறான பின் அல்லது கடவுச்சொல் காரணமாக <xliff:g id="DEVICE_NAME">%1$s</xliff:g> உடன் இணைக்க முடியவில்லை."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> உடன் இணைக்க முடியவில்லை."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> இணைப்பதை நிராகரித்தது."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"கணினி"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"தலையணி"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"ஃபோன்"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"இமேஜிங்"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"ஹெட்ஃபோன்"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"இன்புட் பெரிபெரல்"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"புளூடூத்"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"வைஃபை முடக்கப்பட்டது."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"வைஃபை துண்டிக்கப்பட்டது."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"வைஃபை சிக்னல்: ஒரு கோடு."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"புளூடூத் ஆடியோ LDAC கோடெக்: வீடியோவின் தரம்"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"புளூடூத் ஆடியோ LDAC கோடெக்கைத் தேர்ந்தெடுக்கவும்:\nவீடியோவின் தரம்"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ஸ்ட்ரீமிங்: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"TLS வழியாக DNS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"இயக்கப்பட்டிருந்தால், போர்ட் 853 இல் TLS வழியாக DNSஐ முயலவும்."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"தனிப்பட்ட DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"தனிப்பட்ட DNS பயன்முறையைத் தேர்ந்தெடுக்கவும்"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"ஆஃப்"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"சந்தர்ப்பவாதம்"</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="wifi_display_certification_summary" msgid="1155182309166746973">"வயர்லெஸ் காட்சி சான்றுக்கான விருப்பங்களைக் காட்டு"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wifi நுழைவு அளவை அதிகரித்து, வைஃபை தேர்வியில் ஒவ்வொன்றிற்கும் SSID RSSI ஐ காட்டுக"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"இயக்கப்பட்டதும், வைஃபை சிக்னல் குறையும் போது, வைஃபை முழுமையாக ஒத்துழைக்காமல் இருந்தால் மொபைல் தரவிற்கு மாறும்"</string> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index 0c28ef218b8d..b6f1bd2c8139 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"పిన్ లేదా పాస్కీ చెల్లని కారణంగా <xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో జత చేయడం సాధ్యపడలేదు."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో కమ్యూనికేట్ చేయడం సాధ్యపడదు."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> జత చేయడాన్ని తిరస్కరించింది."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"కంప్యూటర్"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"హెడ్సెట్"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"ఫోన్"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"ప్రతిబింబనం"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"హెడ్ఫోన్"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"ఇన్పుట్ అనుబంధ పరికరం"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"బ్లూటూత్"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi ఆఫ్లో ఉంది."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wifi డిస్కనెక్ట్ చేయబడింది."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wifi సిగ్నల్ ఒక బార్ ఉంది."</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"బ్లూటూత్ ఆడియో LDAC కోడెక్: ప్లేబ్యాక్ నాణ్యత"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"బ్లూటూత్ ఆడియో LDAC కోడెక్ని ఎంచుకోండి:\nప్లేబ్యాక్ నాణ్యత"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ప్రసారం చేస్తోంది: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"TLSపై DNS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"ప్రారంభించబడితే, పోర్ట్ 853లో TLSపై DNSని ప్రయత్నించండి."</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ప్రైవేట్ DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ప్రైవేట్ DNS మోడ్ను ఎంచుకోండి"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"ఆఫ్"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"అవకాశవాదం"</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="wifi_display_certification_summary" msgid="1155182309166746973">"వైర్లెస్ ప్రదర్శన సర్టిఫికెట్ కోసం ఎంపికలను చూపు"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ఎంపికలో SSID RSSI ప్రకారం చూపబడే Wi‑Fi లాగింగ్ స్థాయిని పెంచండి"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"ప్రారంభించబడినప్పుడు, Wi‑Fi సిగ్నల్ బలహీనంగా ఉంటే డేటా కనెక్షన్ను మొబైల్కి మార్చేలా Wi‑Fi చురుగ్గా వ్యవహరిస్తుంది"</string> diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index 782bb6fc4230..3b6ab4a53748 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"غلط PIN یا پاس کلید کی وجہ سے <xliff:g id="DEVICE_NAME">%1$s</xliff:g> کے ساتھ جوڑا نہیں بنا سکا۔"</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> کے ساتھ مواصلت نہیں ہو سکتی۔"</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> نے جوڑا بنانے کو مسترد کر دیا۔"</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"کمپیوٹر"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"ہیڈ سیٹ"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"فون"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"امیجنگ"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"ہیڈ فون"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"ان پٹ پیریفرل"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"بلوٹوتھ"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi آف ہے۔"</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wifi غیر منسلک ہو گیا۔"</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wifi ایک بار۔"</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"بلوٹوتھ آڈیو LDAC کوڈیک: پلے بیک کا معیار"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"بلوٹوتھ آڈیو LDAC کوڈیک منتخب کریں:\nپلے بیک کا معیار"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"سلسلہ بندی: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"TLS پر DNS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"فعال ہونے پر پورٹ 853 پر TLS پر DNS استعمال کرنے کی کوشش کریں۔"</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"نجی DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"نجی DNS وضع منتخب کریں"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"آف"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"موقع پرست"</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="wifi_display_certification_summary" msgid="1155182309166746973">"وائرلیس ڈسپلے سرٹیفیکیشن کیلئے اختیارات دکھائیں"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi لاگنگ لیول میں اضافہ کریں، Wi‑Fi منتخب کنندہ میں فی SSID RSSI دکھائیں"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"فعال کئے جانے پر، جب Wi‑Fi سگنل کمزور ہوگا، تو Wi‑Fi موبائل پر ڈیٹا کنکشن بھیجنے کیلئے مزید جارحانہ کارروائی کرے گا"</string> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 95e4455e2d1d..4b3d2d47b4bc 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> qurilmasiga ulanib bo‘lmadi, chunki PIN-kod yoki parol noto‘g‘ri kiritildi."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"“<xliff:g id="DEVICE_NAME">%1$s</xliff:g>” qurilmasi bilan aloqa o‘rnatib bo‘lmayapti."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> biriktirish so‘rovini rad qildi."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Kompyuter"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Audio moslama"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Telefon"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Kamera"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Quloqchin"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Kiritish qurilmasi"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi o‘chiq."</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi o‘chiq."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wi-Fi: bitta ustun"</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"LDAC audiokodeki bilan ijro etish sifati (Bluetooth orqali)"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"LDAC audiokodeki:\nijro sifati"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Translatsiya: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"TLS orqali DNS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"Yoqilgan bo‘lsa, TLS orqali DNS serverini 853-port yordamida sozlab ko‘ring"</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_opportunistic" msgid="7608409735589131766">"Moslashuvchan"</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> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Simsiz monitorlarni sertifikatlash parametrini ko‘rsatish"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi ulanishini tanlashda har bir SSID uchun jurnalda ko‘rsatilsin"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Agar ushbu funksiya yoqilsa, Wi-Fi signali past bo‘lganda internetga ulanish majburiy ravishda mobil internetga o‘tkaziladi"</string> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index 094bb906a3c0..dd58cc941dce 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -99,6 +99,13 @@ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"PIN码或配对密钥不正确,无法与<xliff:g id="DEVICE_NAME">%1$s</xliff:g>配对。"</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"无法与“<xliff:g id="DEVICE_NAME">%1$s</xliff:g>”进行通信。"</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> 已拒绝配对。"</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"计算机"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"耳麦"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"手机"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"成像设备"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"耳机"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"外围输入设备"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"蓝牙"</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"WLAN 已关闭。"</string> <string name="accessibility_no_wifi" msgid="8834610636137374508">"WLAN 连接已断开。"</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"WLAN 信号强度为一格。"</string> @@ -209,8 +216,12 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"蓝牙音频 LDAC 编解码器:播放质量"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"选择蓝牙音频 LDAC 编解码器:\n播放质量"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"正在流式传输:<xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="dns_tls" msgid="6773814174391131955">"通过传输层安全协议 (TLS) 执行 DNS"</string> - <string name="dns_tls_summary" msgid="3692494150251071380">"如果启用,即可在端口 853 上尝试“通过传输层安全协议 (TLS) 执行 DNS”。"</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"私人 DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"选择私人 DNS 模式"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"关闭"</string> + <string name="private_dns_mode_opportunistic" msgid="7608409735589131766">"随机"</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="wifi_display_certification_summary" msgid="1155182309166746973">"显示无线显示认证选项"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"提升WLAN日志记录级别(在WLAN选择器中显示每个SSID的RSSI)"</string> <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"开启此设置后,系统会在 WLAN 信号较弱时,主动将网络模式从 WLAN 网络切换到移动数据网络"</string> diff --git a/packages/SystemUI/res-keyguard/values-be/strings.xml b/packages/SystemUI/res-keyguard/values-be/strings.xml index b33c523c23ec..359271d5abdc 100644 --- a/packages/SystemUI/res-keyguard/values-be/strings.xml +++ b/packages/SystemUI/res-keyguard/values-be/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Увядзіце пароль для разблакіравання"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Каб разблакіраваць, увядзіце PIN-код"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Няправільны PIN-код."</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Несапраўдная картка."</string> <string name="keyguard_charged" msgid="2222329688813033109">"Зараджаны"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Ідзе зарадка"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Зараджаецца хутка"</string> diff --git a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml index d0d905b0518f..e5119402674f 100644 --- a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml @@ -29,6 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Type password to unlock"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Type PIN to unlock"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Incorrect PIN code."</string> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Invalid card."</string> <string name="keyguard_charged" msgid="2222329688813033109">"Charged"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Charging"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Charging rapidly"</string> diff --git a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml index d0d905b0518f..e5119402674f 100644 --- a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml @@ -29,6 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Type password to unlock"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Type PIN to unlock"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Incorrect PIN code."</string> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Invalid card."</string> <string name="keyguard_charged" msgid="2222329688813033109">"Charged"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Charging"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Charging rapidly"</string> diff --git a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml index d0d905b0518f..e5119402674f 100644 --- a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml @@ -29,6 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Type password to unlock"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Type PIN to unlock"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Incorrect PIN code."</string> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Invalid card."</string> <string name="keyguard_charged" msgid="2222329688813033109">"Charged"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Charging"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Charging rapidly"</string> diff --git a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml index d0d905b0518f..e5119402674f 100644 --- a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml @@ -29,6 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Type password to unlock"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Type PIN to unlock"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Incorrect PIN code."</string> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Invalid card."</string> <string name="keyguard_charged" msgid="2222329688813033109">"Charged"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Charging"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Charging rapidly"</string> diff --git a/packages/SystemUI/res-keyguard/values-fi/strings.xml b/packages/SystemUI/res-keyguard/values-fi/strings.xml index b8689ee24906..dc2a4411b268 100644 --- a/packages/SystemUI/res-keyguard/values-fi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fi/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Poista lukitus antamalla salasana."</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Poista lukitus antamalla PIN-koodi."</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Väärä PIN-koodi"</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Virheellinen kortti"</string> <string name="keyguard_charged" msgid="2222329688813033109">"Ladattu"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Ladataan"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Nopea lataus käynnissä"</string> diff --git a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml index e70dca379ad3..8e614e04d560 100644 --- a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Entrez le mot de passe pour déverrouiller le clavier."</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Entrez le NIP pour déverrouiller le clavier."</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"NIP erroné."</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Cette carte n\'est pas valide."</string> <string name="keyguard_charged" msgid="2222329688813033109">"Chargé"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Pile en cours de charge"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Charge rapide"</string> diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml index 4fe50ed05bdf..7be5f41fa409 100644 --- a/packages/SystemUI/res-keyguard/values-gl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Escribe o contrasinal para desbloquear"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Escribe o PIN para desbloquear"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Código PIN incorrecto"</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"A tarxeta non é válida."</string> <string name="keyguard_charged" msgid="2222329688813033109">"Cargada"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Cargando"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Cargando rapidamente"</string> diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml index 72d9b752b2c0..48aa75b9f29a 100644 --- a/packages/SystemUI/res-keyguard/values-gu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"અનલૉક કરવા માટે પાસવર્ડ લખો"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"અનલૉક કરવા માટે પિન લખો"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ખોટો પિન કોડ."</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"અમાન્ય કાર્ડ."</string> <string name="keyguard_charged" msgid="2222329688813033109">"ચાર્જ થઈ ગયું"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"ચાર્જ થઈ રહ્યું છે"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"ઝડપથી ચાર્જ થઈ રહ્યું છે"</string> diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml index 5b944687958a..093c5cbc791a 100644 --- a/packages/SystemUI/res-keyguard/values-kn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"ಅನ್ಲಾಕ್ ಮಾಡಲು ಪಾಸ್ವರ್ಡ್ ಟೈಪ್ ಮಾಡಿ"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"ಅನ್ಲಾಕ್ ಮಾಡಲು ಪಿನ್ ಟೈಪ್ ಮಾಡಿ"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ತಪ್ಪಾದ ಪಿನ್ ಕೋಡ್."</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"ಅಮಾನ್ಯ ಕಾರ್ಡ್."</string> <string name="keyguard_charged" msgid="2222329688813033109">"ಚಾರ್ಜ್ ಆಗಿದೆ"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"ವೇಗವಾಗಿ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string> diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml index b00584fb2b91..0b2123189559 100644 --- a/packages/SystemUI/res-keyguard/values-ml/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"അൺലോക്കുചെയ്യുന്നതിന് പാസ്വേഡ് ടൈപ്പുചെയ്യുക"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"അൺലോക്കുചെയ്യുന്നതിന് പിൻ ടൈപ്പുചെയ്യുക"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"പിൻ കോഡ് തെറ്റാണ്."</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"അസാധുവായ കാർഡ്."</string> <string name="keyguard_charged" msgid="2222329688813033109">"ചാർജായി"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"ചാർജ്ജുചെയ്യുന്നു"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"വേഗത്തിൽ ചാർജുചെയ്യുന്നു"</string> diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml index bedcf1792a62..0bab97dd1959 100644 --- a/packages/SystemUI/res-keyguard/values-pa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"ਅਣਲਾਕ ਕਰਨ ਲਈ ਪਾਸਵਰਡ ਟਾਈਪ ਕਰੋ"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"ਅਣਲਾਕ ਕਰਨ ਲਈ ਪਿੰਨ ਟਾਈਪ ਕਰੋ"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ਗਲਤ ਪਿੰਨ ਕੋਡ।"</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"ਅਵੈਧ ਕਾਰਡ।"</string> <string name="keyguard_charged" msgid="2222329688813033109">"ਚਾਰਜ ਹੋ ਗਿਆ"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"ਤੇਜ਼ੀ ਨਾਲ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string> diff --git a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml index 60c6f49689ca..362ffcf70852 100644 --- a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Digite a senha para desbloquear"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Insira o PIN para desbloquear"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Código PIN incorreto."</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Cartão inválido."</string> <string name="keyguard_charged" msgid="2222329688813033109">"Carregada"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Carregando"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Carregando rapidamente"</string> diff --git a/packages/SystemUI/res-keyguard/values-pt/strings.xml b/packages/SystemUI/res-keyguard/values-pt/strings.xml index 60c6f49689ca..362ffcf70852 100644 --- a/packages/SystemUI/res-keyguard/values-pt/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Digite a senha para desbloquear"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Insira o PIN para desbloquear"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Código PIN incorreto."</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Cartão inválido."</string> <string name="keyguard_charged" msgid="2222329688813033109">"Carregada"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Carregando"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Carregando rapidamente"</string> diff --git a/packages/SystemUI/res-keyguard/values-ro/strings.xml b/packages/SystemUI/res-keyguard/values-ro/strings.xml index 743bbc11a93d..d0dc17e567a6 100644 --- a/packages/SystemUI/res-keyguard/values-ro/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ro/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Introduceți parola pentru a debloca"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Introduceți codul PIN pentru a debloca"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Cod PIN incorect."</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Card nevalid"</string> <string name="keyguard_charged" msgid="2222329688813033109">"Încărcată"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Se încarcă"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Se încarcă rapid"</string> diff --git a/packages/SystemUI/res-keyguard/values-sw/strings.xml b/packages/SystemUI/res-keyguard/values-sw/strings.xml index 7ee090217523..ff75819b04cd 100644 --- a/packages/SystemUI/res-keyguard/values-sw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sw/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Andika nenosiri ili ufungue"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Andika PIN ili ufungue"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Nambari ya PIN si sahihi."</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Kadi si Sahihi."</string> <string name="keyguard_charged" msgid="2222329688813033109">"Betri imejaa"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"Inachaji"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Inachaji kwa kasi"</string> diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml index bbcc57ec4451..73f709462af4 100644 --- a/packages/SystemUI/res-keyguard/values-te/strings.xml +++ b/packages/SystemUI/res-keyguard/values-te/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"అన్లాక్ చేయడానికి పాస్వర్డ్ను టైప్ చేయండి"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"అన్లాక్ చేయడానికి పిన్ టైప్ చేయండి"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"పిన్ కోడ్ తప్పు."</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"చెల్లని కార్డ్."</string> <string name="keyguard_charged" msgid="2222329688813033109">"ఛార్జ్ చేయబడింది"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"ఛార్జ్ అవుతోంది"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"వేగంగా ఛార్జ్ అవుతోంది"</string> diff --git a/packages/SystemUI/res-keyguard/values-ur/strings.xml b/packages/SystemUI/res-keyguard/values-ur/strings.xml index 4f09c98f0399..3bb59f01aa61 100644 --- a/packages/SystemUI/res-keyguard/values-ur/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ur/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"غیر مقفل کرنے کیلئے پاس ورڈ ٹائپ کریں"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"غیر مقفل کرنے کیلئے PIN ٹائپ کریں"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"غلط PIN کوڈ۔"</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"غلط کارڈ۔"</string> <string name="keyguard_charged" msgid="2222329688813033109">"چارج ہوگئی"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"چارج ہو رہا ہے"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"تیزی سے چارج ہو رہا ہے"</string> diff --git a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml index 30737ccb5380..d523c20cc5ac 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml @@ -29,8 +29,7 @@ <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"输入密码即可解锁"</string> <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"输入 PIN 码即可解锁"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN 码有误。"</string> - <!-- no translation found for keyguard_sim_error_message_short (592109500618448312) --> - <skip /> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"SIM 卡无效。"</string> <string name="keyguard_charged" msgid="2222329688813033109">"已充满电"</string> <string name="keyguard_plugged_in" msgid="89308975354638682">"正在充电"</string> <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"正在快速充电"</string> diff --git a/packages/SystemUI/res/values-be/config.xml b/packages/SystemUI/res/values-be/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-be/config.xml +++ b/packages/SystemUI/res/values-be/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 6de7852a69e0..e2ee4ea5ac50 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -53,15 +53,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Прывязаныя праз Bluetooth"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Налада метадаў уводу"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Фізічная клавіятура"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Дазволіць праграме <xliff:g id="APPLICATION">%1$s</xliff:g> атрымлiваць доступ да прылады USB?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Дазволіць праграме <xliff:g id="APPLICATION">%1$s</xliff:g> доступ да USB-аксесуара?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Адкрыць <xliff:g id="ACTIVITY">%1$s</xliff:g>, калі гэтая USB-прылада падлучаная?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Адкрыць <xliff:g id="ACTIVITY">%1$s</xliff:g>, калі гэтая USB-прылада падлучаная?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Няма ўсталяв. прыкл. для працы з гэтай прыл. USB. Больш падраб. пра гэтую прыл.: <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB-прылада"</string> <string name="label_view" msgid="6304565553218192990">"Прагляд"</string> - <string name="always_use_device" msgid="1450287437017315906">"Выкарыстоўваць налады па змаўчанні для дадзенай USB-прылады"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Выкарыстоўваць налады па змаўчанні для дадзенай USB-прылады"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"Дазволіць адладку USB?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"Адбiтак ключа RSA на гэтым камп\'ютары:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Заўсёды дазваляць з гэтага камп\'ютара"</string> diff --git a/packages/SystemUI/res/values-bn/config.xml b/packages/SystemUI/res/values-bn/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-bn/config.xml +++ b/packages/SystemUI/res/values-bn/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index ab1b0a17e40a..58bddb0ad296 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"ব্লুটুথ টিথার করা হয়েছে"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ইনপুট পদ্ধতিগুলি সেট আপ করুন"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ফিজিক্যাল কীবোর্ড"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"এই <xliff:g id="APPLICATION">%1$s</xliff:g> অ্যাপ্লিকেশানটিকে কি USB ডিভাইস অ্যাক্সেস করা অনুমতি দেবেন?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"এই <xliff:g id="APPLICATION">%1$s</xliff:g> অ্যাপ্লিকেশানটিকে কি USB যন্ত্রাংশ অ্যাক্সেস করার অনুমতি দেবেন?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"যখন এই USB ডিভাইসটি সংযুক্ত থাকে তখন কি <xliff:g id="ACTIVITY">%1$s</xliff:g> খুলবেন?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"যখন এই USB যন্ত্রাংশটি সংযুক্ত থাকে তখন কি <xliff:g id="ACTIVITY">%1$s</xliff:g> খুলবেন?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ইনস্টল থাকা কোনো অ্যাপ্লিকেশান এই USB যন্ত্রাংশের সাথে কাজ করে না৷ <xliff:g id="URL">%1$s</xliff:g> এ এই যন্ত্রাংশের সম্পর্কে আরও জানুন৷"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB যন্ত্রাংশ"</string> <string name="label_view" msgid="6304565553218192990">"দেখুন"</string> - <string name="always_use_device" msgid="1450287437017315906">"এই USB ডিভাইসের জন্য এটি ডিফল্টরুপে ব্যবহার করুন"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"এই USB আনুষঙ্গিকের জন্য এটি ডিফল্টরুপে ব্যবহার করুন"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"USB ডিবাগিং মঞ্জুর করবেন?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"কম্পিউটারের RSA কী আঙ্গুলের ছাপ হল:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"এই কম্পিউটার থেকে সর্বদা অনুমতি দিন"</string> diff --git a/packages/SystemUI/res/values-ca/config.xml b/packages/SystemUI/res/values-ca/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-ca/config.xml +++ b/packages/SystemUI/res/values-ca/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 28b0ffe6b789..6db3e3843ac7 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Xarxa compartida per Bluetooth"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Configura els mètodes d\'entrada"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Teclat físic"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Vols permetre que l\'aplicació <xliff:g id="APPLICATION">%1$s</xliff:g> accedeixi al dispositiu USB?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Vols permetre que l\'aplicació <xliff:g id="APPLICATION">%1$s</xliff:g> accedeixi a l\'accessori USB?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Vols que s\'obri <xliff:g id="ACTIVITY">%1$s</xliff:g> quan aquest dispositiu USB estigui connectat?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Vols que s\'obri <xliff:g id="ACTIVITY">%1$s</xliff:g> quan aquest accessori USB estigui connectat?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Les aplicacions instal·lades no funcionen amb l\'accessori USB. Més informació: <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"Accessori USB"</string> <string name="label_view" msgid="6304565553218192990">"Mostra"</string> - <string name="always_use_device" msgid="1450287437017315906">"Utilitza de manera predet. per al dispositiu USB"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Utilitza de manera predet. per a l\'accessori USB"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"Vols permetre la depuració USB?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"L\'empremta digital de la clau de l\'RSA de l\'equip és:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Dona sempre permís des d\'aquest equip"</string> diff --git a/packages/SystemUI/res/values-en-rAU/config.xml b/packages/SystemUI/res/values-en-rAU/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-en-rAU/config.xml +++ b/packages/SystemUI/res/values-en-rAU/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index fe17a2d8bc0c..76b21b5cee0e 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -51,15 +51,15 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Set up input methods"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Physical keyboard"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB device?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB accessory?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB device is connected?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB accessory is connected?"</string> + <string name="usb_device_permission_prompt" msgid="1825685909587559679">"Allow <xliff:g id="APPLICATION">%1$s</xliff:g> to access <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"Allow <xliff:g id="APPLICATION">%1$s</xliff:g> to access <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> + <string name="usb_device_confirm_prompt" msgid="7440562274256843905">"Open <xliff:g id="APPLICATION">%1$s</xliff:g> to handle <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"Open <xliff:g id="APPLICATION">%1$s</xliff:g> to handle <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"No installed apps work with this USB accessory. Learn more about this accessory at <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB accessory"</string> <string name="label_view" msgid="6304565553218192990">"View"</string> - <string name="always_use_device" msgid="1450287437017315906">"Use by default for this USB device"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Use by default for this USB accessory"</string> + <string name="always_use_device" msgid="4015357883336738417">"Always open <xliff:g id="APPLICATION">%1$s</xliff:g> when <xliff:g id="USB_DEVICE">%2$s</xliff:g> is connected"</string> + <string name="always_use_accessory" msgid="3257892669444535154">"Always open <xliff:g id="APPLICATION">%1$s</xliff:g> when <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> is connected"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"Allow USB debugging?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string> @@ -180,7 +180,6 @@ <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string> <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Open <xliff:g id="APP">%s</xliff:g> application info."</string> <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string> - <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string> <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string> <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string> <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string> @@ -343,8 +342,6 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string> - <string-array name="recents_blacklist_array"> - </string-array> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> until full"</string> diff --git a/packages/SystemUI/res/values-en-rCA/config.xml b/packages/SystemUI/res/values-en-rCA/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-en-rCA/config.xml +++ b/packages/SystemUI/res/values-en-rCA/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index 1ff0ee402a27..1bc1197a06e0 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -51,15 +51,15 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Set up input methods"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Physical keyboard"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB device?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB accessory?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB device is connected?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB accessory is connected?"</string> + <string name="usb_device_permission_prompt" msgid="1825685909587559679">"Allow <xliff:g id="APPLICATION">%1$s</xliff:g> to access <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"Allow <xliff:g id="APPLICATION">%1$s</xliff:g> to access <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> + <string name="usb_device_confirm_prompt" msgid="7440562274256843905">"Open <xliff:g id="APPLICATION">%1$s</xliff:g> to handle <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"Open <xliff:g id="APPLICATION">%1$s</xliff:g> to handle <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"No installed apps work with this USB accessory. Learn more about this accessory at <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB accessory"</string> <string name="label_view" msgid="6304565553218192990">"View"</string> - <string name="always_use_device" msgid="1450287437017315906">"Use by default for this USB device"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Use by default for this USB accessory"</string> + <string name="always_use_device" msgid="4015357883336738417">"Always open <xliff:g id="APPLICATION">%1$s</xliff:g> when <xliff:g id="USB_DEVICE">%2$s</xliff:g> is connected"</string> + <string name="always_use_accessory" msgid="3257892669444535154">"Always open <xliff:g id="APPLICATION">%1$s</xliff:g> when <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> is connected"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"Allow USB debugging?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string> @@ -180,7 +180,6 @@ <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string> <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Open <xliff:g id="APP">%s</xliff:g> application info."</string> <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string> - <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string> <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string> <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string> <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string> @@ -343,8 +342,6 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string> - <string-array name="recents_blacklist_array"> - </string-array> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> until full"</string> diff --git a/packages/SystemUI/res/values-en-rGB/config.xml b/packages/SystemUI/res/values-en-rGB/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-en-rGB/config.xml +++ b/packages/SystemUI/res/values-en-rGB/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index fe17a2d8bc0c..76b21b5cee0e 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -51,15 +51,15 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Set up input methods"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Physical keyboard"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB device?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB accessory?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB device is connected?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB accessory is connected?"</string> + <string name="usb_device_permission_prompt" msgid="1825685909587559679">"Allow <xliff:g id="APPLICATION">%1$s</xliff:g> to access <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"Allow <xliff:g id="APPLICATION">%1$s</xliff:g> to access <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> + <string name="usb_device_confirm_prompt" msgid="7440562274256843905">"Open <xliff:g id="APPLICATION">%1$s</xliff:g> to handle <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"Open <xliff:g id="APPLICATION">%1$s</xliff:g> to handle <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"No installed apps work with this USB accessory. Learn more about this accessory at <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB accessory"</string> <string name="label_view" msgid="6304565553218192990">"View"</string> - <string name="always_use_device" msgid="1450287437017315906">"Use by default for this USB device"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Use by default for this USB accessory"</string> + <string name="always_use_device" msgid="4015357883336738417">"Always open <xliff:g id="APPLICATION">%1$s</xliff:g> when <xliff:g id="USB_DEVICE">%2$s</xliff:g> is connected"</string> + <string name="always_use_accessory" msgid="3257892669444535154">"Always open <xliff:g id="APPLICATION">%1$s</xliff:g> when <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> is connected"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"Allow USB debugging?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string> @@ -180,7 +180,6 @@ <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string> <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Open <xliff:g id="APP">%s</xliff:g> application info."</string> <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string> - <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string> <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string> <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string> <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string> @@ -343,8 +342,6 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string> - <string-array name="recents_blacklist_array"> - </string-array> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> until full"</string> diff --git a/packages/SystemUI/res/values-en-rIN/config.xml b/packages/SystemUI/res/values-en-rIN/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-en-rIN/config.xml +++ b/packages/SystemUI/res/values-en-rIN/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index fe17a2d8bc0c..76b21b5cee0e 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -51,15 +51,15 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Set up input methods"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Physical keyboard"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB device?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB accessory?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB device is connected?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB accessory is connected?"</string> + <string name="usb_device_permission_prompt" msgid="1825685909587559679">"Allow <xliff:g id="APPLICATION">%1$s</xliff:g> to access <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"Allow <xliff:g id="APPLICATION">%1$s</xliff:g> to access <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> + <string name="usb_device_confirm_prompt" msgid="7440562274256843905">"Open <xliff:g id="APPLICATION">%1$s</xliff:g> to handle <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"Open <xliff:g id="APPLICATION">%1$s</xliff:g> to handle <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"No installed apps work with this USB accessory. Learn more about this accessory at <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB accessory"</string> <string name="label_view" msgid="6304565553218192990">"View"</string> - <string name="always_use_device" msgid="1450287437017315906">"Use by default for this USB device"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Use by default for this USB accessory"</string> + <string name="always_use_device" msgid="4015357883336738417">"Always open <xliff:g id="APPLICATION">%1$s</xliff:g> when <xliff:g id="USB_DEVICE">%2$s</xliff:g> is connected"</string> + <string name="always_use_accessory" msgid="3257892669444535154">"Always open <xliff:g id="APPLICATION">%1$s</xliff:g> when <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> is connected"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"Allow USB debugging?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string> @@ -180,7 +180,6 @@ <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string> <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Open <xliff:g id="APP">%s</xliff:g> application info."</string> <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string> - <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string> <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string> <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string> <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string> @@ -343,8 +342,6 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string> - <string-array name="recents_blacklist_array"> - </string-array> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> until full"</string> diff --git a/packages/SystemUI/res/values-en-rXC/config.xml b/packages/SystemUI/res/values-en-rXC/config.xml index 5309563e3986..f015d9b378d4 100644 --- a/packages/SystemUI/res/values-en-rXC/config.xml +++ b/packages/SystemUI/res/values-en-rXC/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index e1326de67a03..131e1993a745 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -51,15 +51,15 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Set up input methods"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Physical keyboard"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB device?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB accessory?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB device is connected?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB accessory is connected?"</string> + <string name="usb_device_permission_prompt" msgid="1825685909587559679">"Allow <xliff:g id="APPLICATION">%1$s</xliff:g> to access <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"Allow <xliff:g id="APPLICATION">%1$s</xliff:g> to access <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> + <string name="usb_device_confirm_prompt" msgid="7440562274256843905">"Open <xliff:g id="APPLICATION">%1$s</xliff:g> to handle <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"Open <xliff:g id="APPLICATION">%1$s</xliff:g> to handle <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"No installed apps work with this USB accessory. Learn more about this accessory at <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB accessory"</string> <string name="label_view" msgid="6304565553218192990">"View"</string> - <string name="always_use_device" msgid="1450287437017315906">"Use by default for this USB device"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Use by default for this USB accessory"</string> + <string name="always_use_device" msgid="4015357883336738417">"Always open <xliff:g id="APPLICATION">%1$s</xliff:g> when <xliff:g id="USB_DEVICE">%2$s</xliff:g> is connected"</string> + <string name="always_use_accessory" msgid="3257892669444535154">"Always open <xliff:g id="APPLICATION">%1$s</xliff:g> when <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> is connected"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"Allow USB debugging?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string> diff --git a/packages/SystemUI/res/values-fi/config.xml b/packages/SystemUI/res/values-fi/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-fi/config.xml +++ b/packages/SystemUI/res/values-fi/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 7b6dc5455a83..65d80a946ebe 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth yhdistetty"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Määritä syöttötavat"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Fyysinen näppäimistö"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Annetaanko sovellukselle <xliff:g id="APPLICATION">%1$s</xliff:g> lupa käyttää USB-laitetta?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Annetaanko sovellukselle <xliff:g id="APPLICATION">%1$s</xliff:g> lupa käyttää USB-lisälaitetta?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Avataanko <xliff:g id="ACTIVITY">%1$s</xliff:g> tämän USB-laitteen ollessa kytkettynä?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Avataanko <xliff:g id="ACTIVITY">%1$s</xliff:g> tämän USB-lisälaitteen ollessa kytkettynä?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Asennetut sov. eivät toimi tämän USB-laitteen kanssa. Lisätietoja laitteesta: <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB-lisälaite"</string> <string name="label_view" msgid="6304565553218192990">"Näytä"</string> - <string name="always_use_device" msgid="1450287437017315906">"Käytä oletuksena tällä USB-laitteella"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Käytä oletuksena tällä USB-lisälaitteella"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"Sallitaanko USB-vianetsintä?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"Tietokoneen RSA-avaintunnistetiedosto on:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Salli aina tällä tietokoneella"</string> @@ -71,7 +77,7 @@ <string name="screenshot_saving_title" msgid="8242282144535555697">"Tallennetaan kuvakaappausta..."</string> <string name="screenshot_saving_text" msgid="2419718443411738818">"Kuvakaappausta tallennetaan."</string> <string name="screenshot_saved_title" msgid="6461865960961414961">"Kuvakaappaus tallennettu"</string> - <string name="screenshot_saved_text" msgid="2685605830386712477">"Tarkastele kuvakaappausta napauttamalla."</string> + <string name="screenshot_saved_text" msgid="2685605830386712477">"Tarkastele kuvakaappausta napauttamalla"</string> <string name="screenshot_failed_title" msgid="705781116746922771">"Kuvakaappausta ei voitu tallentaa"</string> <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"Kuvakaappausta tallennettaessa tapahtui virhe."</string> <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"Kuvakaappauksen tallentaminen epäonnistui, sillä tallennustilaa ei ole riittävästi."</string> diff --git a/packages/SystemUI/res/values-fr-rCA/config.xml b/packages/SystemUI/res/values-fr-rCA/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-fr-rCA/config.xml +++ b/packages/SystemUI/res/values-fr-rCA/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 2344c00954d3..989f6d1ee7f7 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Connexion Bluetooth partagée"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Configurer les modes de saisie"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Clavier physique"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Autoriser l\'application <xliff:g id="APPLICATION">%1$s</xliff:g> à accéder au périphérique USB?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Autoriser l\'application <xliff:g id="APPLICATION">%1$s</xliff:g> à accéder à l\'accessoire USB?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Ouvrir <xliff:g id="ACTIVITY">%1$s</xliff:g> lors de la connexion de ce périphérique USB?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Ouvrir <xliff:g id="ACTIVITY">%1$s</xliff:g> lors de la connexion de cet accessoire USB?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Aucune application installée compatible avec accessoire USB. En savoir plus sur <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"Accessoire USB"</string> <string name="label_view" msgid="6304565553218192990">"Afficher"</string> - <string name="always_use_device" msgid="1450287437017315906">"Utiliser par défaut pour ce périphérique USB"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Utiliser par défaut pour cet accessoire USB"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"Autoriser le débogage USB?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"Empreinte numérique de la clé RSA de l\'ordinateur : \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Toujours autoriser sur cet ordinateur"</string> @@ -71,7 +77,7 @@ <string name="screenshot_saving_title" msgid="8242282144535555697">"Enregistrement capture écran…"</string> <string name="screenshot_saving_text" msgid="2419718443411738818">"Enregistrement de la capture d\'écran en cours…"</string> <string name="screenshot_saved_title" msgid="6461865960961414961">"Capture d\'écran réussie"</string> - <string name="screenshot_saved_text" msgid="2685605830386712477">"Touchez pour afficher votre saisie d\'écran."</string> + <string name="screenshot_saved_text" msgid="2685605830386712477">"Touchez pour afficher votre capture d\'écran."</string> <string name="screenshot_failed_title" msgid="705781116746922771">"Impossible de réaliser une capture d\'écran"</string> <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"Une erreur s\'est produite lors de l\'enregistrement de la saisie d\'écran."</string> <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"Impossible d\'enregistrer la saisie d\'écran, car l\'espace de stockage est limité."</string> diff --git a/packages/SystemUI/res/values-gl/config.xml b/packages/SystemUI/res/values-gl/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-gl/config.xml +++ b/packages/SystemUI/res/values-gl/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 7f11ba26ddf9..94c525aa6a06 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Conexión compartida por Bluetooth"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Configurar métodos de entrada"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Teclado físico"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Queres permitir que a aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> acceda ao dispositivo USB?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Queres permitir que a aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> acceda ao accesorio USB?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Queres abrir <xliff:g id="ACTIVITY">%1$s</xliff:g> cando este dispositivo USB estea conectado?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Queres abrir <xliff:g id="ACTIVITY">%1$s</xliff:g> cando este accesorio USB estea conectado?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Ningunha aplicación instalada funciona co accesorio USB. Máis información: <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"Accesorio USB"</string> <string name="label_view" msgid="6304565553218192990">"Ver"</string> - <string name="always_use_device" msgid="1450287437017315906">"Usar de forma predeterminada para dispositivo USB"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Usar de forma predeterminada para este accesorio USB"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"Permitir a depuración de erros de USB?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"A impresión dixital da clave de RSA do ordenador é:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Permitir sempre desde este ordenador"</string> diff --git a/packages/SystemUI/res/values-gu/config.xml b/packages/SystemUI/res/values-gu/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-gu/config.xml +++ b/packages/SystemUI/res/values-gu/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 2dbd57bde27c..b13011aff597 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"બ્લૂટૂથ ટિથર કર્યું"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ઇનપુટ પદ્ધતિઓ સેટ કરો"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ભૌતિક કીબોર્ડ"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"<xliff:g id="APPLICATION">%1$s</xliff:g> એપ્લિકેશનને USB ઉપકરણ અૅક્સેસ કરવાની મંજૂરી આપીએ?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"<xliff:g id="APPLICATION">%1$s</xliff:g> એપ્લિકેશનને USB ઍક્સેસરી અૅક્સેસ કરવાની મંજૂરી આપીએ?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"જ્યારે આ USB ઉપકરણ કનેક્ટ હોય ત્યારે <xliff:g id="ACTIVITY">%1$s</xliff:g> ખોલીએ?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"જ્યારે આ USB ઍક્સેસરી કનેક્ટ હોય ત્યારે <xliff:g id="ACTIVITY">%1$s</xliff:g> ખોલીએ?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"કોઈપણ ઇન્સ્ટોલ કરેલી ઍપ્લિકેશનો આ USB ઍક્સેસરી સાથે કામ કરતી નથી. આ ઍક્સેસરી વિશે <xliff:g id="URL">%1$s</xliff:g> પર વધુ જાણો."</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB ઍક્સેસરી"</string> <string name="label_view" msgid="6304565553218192990">"જુઓ"</string> - <string name="always_use_device" msgid="1450287437017315906">"આ USB ઉપકરણ માટે ડિફોલ્ટ તરીકે ઉપયોગમાં લો"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"આ USB ઍક્સેસરી માટે ડિફોલ્ટ તરીકે ઉપયોગમાં લો"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"USB ડિબગિંગને મંજૂરી આપીએ?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"કમ્પ્યુટરની RSA મુખ્ય ફિંગરપ્રિંટ આ છે:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"હંમેશા આ કમ્પ્યુટરથી મંજૂરી આપો"</string> diff --git a/packages/SystemUI/res/values-hi/config.xml b/packages/SystemUI/res/values-hi/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-hi/config.xml +++ b/packages/SystemUI/res/values-hi/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index 93dadd2d29e4..ef66a35a9a9b 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"ब्लूटूथ टीदर किया गया"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"इनपुट का तरीका सेट करें"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"भौतिक कीबोर्ड"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"ऐप्स <xliff:g id="APPLICATION">%1$s</xliff:g> को USB डिवाइस तक पहुंचने दें?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"ऐप्स <xliff:g id="APPLICATION">%1$s</xliff:g> को USB सहायक डिवाइस तक पहुंचने दें?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"जब यह USB डिवाइस कनेक्ट किया जाए, तब <xliff:g id="ACTIVITY">%1$s</xliff:g> को खोलें?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"जब यह USB एसेसरी कनेक्ट की जाए, तब <xliff:g id="ACTIVITY">%1$s</xliff:g> को खोलें?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"इस USB सहायक डिवाइस के साथ कोई भी इंस्टॉल ऐप्स काम नहीं करता. इस सहायक डिवाइस के बारे में यहां अधिक जानें: <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB सहायक साधन"</string> <string name="label_view" msgid="6304565553218192990">"देखें"</string> - <string name="always_use_device" msgid="1450287437017315906">"इस USB डिवाइस के लिए डिफ़ॉल्ट रूप से उपयोग करें"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"इस USB एसेसरी के लिए डिफ़ॉल्ट रूप से उपयोग करें"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"USB डीबगिंग करने दें?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"कंप्यूटर का RSA कुंजी फ़िंगरप्रिंट है:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"इस कंप्यूटर से हमेशा अनुमति दें"</string> diff --git a/packages/SystemUI/res/values-iw/config.xml b/packages/SystemUI/res/values-iw/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-iw/config.xml +++ b/packages/SystemUI/res/values-iw/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index eb850992ea20..dcef8c674251 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -53,15 +53,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth קשור"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"הגדר שיטות קלט"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"מקלדת פיזית"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"לאפשר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> גישה להתקן ה-USB?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"לאפשר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> גישה לאביזר ה-USB?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"האם לפתוח את <xliff:g id="ACTIVITY">%1$s</xliff:g> כאשר מכשיר USB זה מחובר?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"האם לפתוח את <xliff:g id="ACTIVITY">%1$s</xliff:g> כאשר אביזר USB זה מחובר?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"אין אפליקציות מותקנות הפועלות עם אביזר ה-USB. למידע נוסף על אביזר זה היכנס לכתובת <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"אביזר USB"</string> <string name="label_view" msgid="6304565553218192990">"הצג"</string> - <string name="always_use_device" msgid="1450287437017315906">"השתמש כברירת מחדל עבור מכשיר USB זה"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"השתמש כברירת מחדל עבור אביזר USB זה"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"האם לאפשר ניפוי באגים ב-USB?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"טביעת האצבע של מפתח ה-RSA של המחשב היא:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"אפשר תמיד ממחשב זה"</string> diff --git a/packages/SystemUI/res/values-kn/config.xml b/packages/SystemUI/res/values-kn/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-kn/config.xml +++ b/packages/SystemUI/res/values-kn/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index ca1a650aa982..7ba785b64dcf 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"ಬ್ಲೂಟೂತ್ ವ್ಯಾಪ್ತಿ ತಲುಪಿದೆ"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ಇನ್ಪುಟ್ ವಿಧಾನಗಳನ್ನು ಹೊಂದಿಸು"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"USB ಸಾಧನವನ್ನು ಪ್ರವೇಶಿಸಲು <xliff:g id="APPLICATION">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿಸುವುದೇ?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"USB ಪರಿಕರವನ್ನು ಪ್ರವೇಶಿಸಲು <xliff:g id="APPLICATION">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿಸುವುದೇ?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"ಈ USB ಸಾಧನ ಸಂಪರ್ಕಗೊಂಡಿರುವಾಗ <xliff:g id="ACTIVITY">%1$s</xliff:g> ತೆರೆಯುವುದೇ?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"USB ಪರಿಕರವು ಸಂಪರ್ಕಗೊಂಡಿರುವಾಗ <xliff:g id="ACTIVITY">%1$s</xliff:g> ತೆರೆಯುವುದೇ?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ಆಪ್ಗಳು USB ಪರಿಕರದಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ. ಆ ಬಗ್ಗೆ <xliff:g id="URL">%1$s</xliff:g> ನಲ್ಲಿ ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB ಪರಿಕರ"</string> <string name="label_view" msgid="6304565553218192990">"ವೀಕ್ಷಿಸು"</string> - <string name="always_use_device" msgid="1450287437017315906">"ಈ USB ಪರಿಕರಕ್ಕಾಗಿ ಡಿಫಾಲ್ಟ್ ಆಗಿ ಬಳಸಿ"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"ಈ USB ಪರಿಕರಕ್ಕಾಗಿ ಡಿಫಾಲ್ಟ್ ಆಗಿ ಬಳಸಿ"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು ಅನುಮತಿಸುವುದೇ?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"ಕಂಪ್ಯೂಟರ್ನ RSA ಕೀ ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಹೀಗಿದೆ :\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"ಈ ಕಂಪ್ಯೂಟರ್ನಿಂದ ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ"</string> diff --git a/packages/SystemUI/res/values-ml/config.xml b/packages/SystemUI/res/values-ml/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-ml/config.xml +++ b/packages/SystemUI/res/values-ml/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 855ae6ad466a..5522e512db80 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"ബ്ലൂടൂത്ത് ടെതർ ചെയ്തു"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ടൈപ്പുചെയ്യൽ രീതികൾ സജ്ജീകരിക്കുക"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ഫിസിക്കൽ കീബോർഡ്"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"USB ഉപകരണം ആക്സസ്സ് ചെയ്യാൻ <xliff:g id="APPLICATION">%1$s</xliff:g> എന്ന അപ്ളിക്കേഷനെ അനുവദിക്കണോ?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"USB ആക്സസ്സറി ആക്സസ്സുചെയ്യാൻ <xliff:g id="APPLICATION">%1$s</xliff:g> എന്ന അപ്ലിക്കേഷനെ അനുവദിക്കണോ?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"ഈ USB ഉപകരണം കണക്റ്റുചെയ്തിരിക്കുമ്പോൾ <xliff:g id="ACTIVITY">%1$s</xliff:g> തുറക്കണോ?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"ഈ USB ആക്സസ്സറി കണക്റ്റുചെയ്തിരിക്കുമ്പോൾ <xliff:g id="ACTIVITY">%1$s</xliff:g> തുറക്കണോ?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ഈ USB ആക്സസ്സറിയിൽ ഇൻസ്റ്റാളുചെയ്തവയൊന്നും പ്രവർത്തിക്കുന്നില്ല. <xliff:g id="URL">%1$s</xliff:g>-ൽ ഇതേക്കുറിച്ച് കൂടുതലറിയുക"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB ആക്സസ്സറി"</string> <string name="label_view" msgid="6304565553218192990">"കാണുക"</string> - <string name="always_use_device" msgid="1450287437017315906">"ഈ USB ഉപകരണത്തിനായി സ്ഥിരമായി ഉപയോഗിക്കുക"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"ഈ USB ആക്സസ്സറിക്കായി സ്ഥിരമായി ഉപയോഗിക്കുക"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"USB ഡീബഗ്ഗിംഗ് അനുവദിക്കണോ?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"ഈ കമ്പ്യൂട്ടറിന്റെ RSA കീ ഫിംഗർപ്രിന്റ് ഇതാണ്:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"ഈ കമ്പ്യൂട്ടറിൽ നിന്ന് എല്ലായ്പ്പോഴും അനുവദിക്കുക"</string> diff --git a/packages/SystemUI/res/values-mr/config.xml b/packages/SystemUI/res/values-mr/config.xml index 9857f13948d6..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-mr/config.xml +++ b/packages/SystemUI/res/values-mr/config.xml @@ -22,7 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <!-- no translation found for config_overviewServiceComponent (2288311504315574053) --> - <skip /> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index 2a9ec0c4b732..b03d6bf5b6ce 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"ब्लूटूथ टेदर केले"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"इनपुट पद्धती सेट करा"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"वास्तविक कीबोर्ड"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"USB डिव्हाइसवर प्रवेश करण्यासाठी <xliff:g id="APPLICATION">%1$s</xliff:g> अॅप ला अनुमती द्यायची?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"अॅप <xliff:g id="APPLICATION">%1$s</xliff:g> ला USB उपसाधनात प्रवेश करण्याची अनुमती द्यायची?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"हे USB डिव्हाइस कनेक्ट केलेले असते तेव्हा <xliff:g id="ACTIVITY">%1$s</xliff:g> उघडायचे?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"हे USB उपसाधन कनेक्ट केलेले असते तेव्हा <xliff:g id="ACTIVITY">%1$s</xliff:g> उघडायचे?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"इंस्टॉल केलेले अॅप्स या USB उपसाधनासह कार्य करत नाहीत. <xliff:g id="URL">%1$s</xliff:g> येथे या उपसाधनाविषयी अधिक जाणून घ्या"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB उपसाधन"</string> <string name="label_view" msgid="6304565553218192990">"पहा"</string> - <string name="always_use_device" msgid="1450287437017315906">"या USB डीव्हाइससाठी डीफॉल्टनुसार वापरा"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"या USB अॅक्सेसरीसाठी डीफॉल्टनुसार वापरा"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"USB डीबग करण्यास अनुमती द्यायची?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"संगणकाची RSA की फिंगरप्रिंट ही आहे:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"या संगणकावरून नेहमी अनुमती द्या"</string> diff --git a/packages/SystemUI/res/values-ne/config.xml b/packages/SystemUI/res/values-ne/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-ne/config.xml +++ b/packages/SystemUI/res/values-ne/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index b2bf111c1bfc..e994174f2cba 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"ब्लुटुथ टेथर भयो"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"इनपुट विधिहरू सेटअप गर्नुहोस्"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"वास्तविक किबोर्ड"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"<xliff:g id="APPLICATION">%1$s</xliff:g> USB उपकरणलाई पहुँच दिनको लागि अनुप्रयोगलाई अनुमति दिने हो?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"<xliff:g id="APPLICATION">%1$s</xliff:g> USB पाटपुर्जालाई पहुँच दिनको लागि अनुप्रयोगलाई अनुमति दिने हो?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"यो USB उपकरण जोडिएको बेला <xliff:g id="ACTIVITY">%1$s</xliff:g> खोल्ने हो?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"यो USB सहायक जडान हुँदा <xliff:g id="ACTIVITY">%1$s</xliff:g> खोल्ने हो?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"यस USB उपकरणसँग स्थापित अनुप्रयोग काम गर्दैन। यस उपकरणको बारेमा <xliff:g id="URL">%1$s</xliff:g> मा धेरै जान्नुहोस्"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB सहयोगी"</string> <string name="label_view" msgid="6304565553218192990">"दृश्य"</string> - <string name="always_use_device" msgid="1450287437017315906">"यो USB उपकरणको लागि पूर्वनिर्धारितबाट प्रयोग गर्नुहोस्"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"यस USB सहायक सामानको लागि पूर्वनिर्धारितद्वारा प्रयोग गर्नुहोस्"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"USB डिबग गर्नको लागि अनुमति दिने हो?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"कम्प्युटरको RSA कुञ्जी औंलाछाप:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"यो कम्प्युटरबाट सधैँ अनुमति दिनुहोस्"</string> diff --git a/packages/SystemUI/res/values-nl/config.xml b/packages/SystemUI/res/values-nl/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-nl/config.xml +++ b/packages/SystemUI/res/values-nl/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 815e5f9f7b6b..640b5d03161b 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -51,15 +51,15 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth getetherd"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Invoermethoden instellen"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Fysiek toetsenbord"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"De app <xliff:g id="APPLICATION">%1$s</xliff:g> toegang geven tot het USB-apparaat?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"De app <xliff:g id="APPLICATION">%1$s</xliff:g> toegang geven tot het USB-accessoire?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"<xliff:g id="ACTIVITY">%1$s</xliff:g> openen wanneer dit USB-apparaat wordt aangesloten?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"<xliff:g id="ACTIVITY">%1$s</xliff:g> openen wanneer dit USB-accessoire wordt aangesloten?"</string> + <string name="usb_device_permission_prompt" msgid="1825685909587559679">"<xliff:g id="APPLICATION">%1$s</xliff:g> toegang geven tot <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"<xliff:g id="APPLICATION">%1$s</xliff:g> toegang geven tot <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> + <string name="usb_device_confirm_prompt" msgid="7440562274256843905">"<xliff:g id="APPLICATION">%1$s</xliff:g> openen om <xliff:g id="USB_DEVICE">%2$s</xliff:g> te verwerken?"</string> + <string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"<xliff:g id="APPLICATION">%1$s</xliff:g> openen om <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> te verwerken?"</string> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Er werken geen geïnstalleerde apps met dit USB-accessoire. Meer informatie op: <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB-accessoire"</string> <string name="label_view" msgid="6304565553218192990">"Weergeven"</string> - <string name="always_use_device" msgid="1450287437017315906">"Standaard gebruiken voor dit USB-apparaat"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Standaard gebruiken voor dit USB-accessoire"</string> + <string name="always_use_device" msgid="4015357883336738417">"<xliff:g id="APPLICATION">%1$s</xliff:g> altijd openen wanneer <xliff:g id="USB_DEVICE">%2$s</xliff:g> is verbonden"</string> + <string name="always_use_accessory" msgid="3257892669444535154">"<xliff:g id="APPLICATION">%1$s</xliff:g> altijd openen wanneer <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> is verbonden"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"USB-foutopsporing toestaan?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"De vingerafdruk voor de RSA-sleutel van de computer is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Altijd toestaan vanaf deze computer"</string> diff --git a/packages/SystemUI/res/values-pa/config.xml b/packages/SystemUI/res/values-pa/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-pa/config.xml +++ b/packages/SystemUI/res/values-pa/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index cec5c9677b42..48be37109959 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth ਟੀਥਰ ਕੀਤੀ"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ਇਨਪੁਟ ਵਿਧੀਆਂ ਸੈਟ ਅਪ ਕਰੋ"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ਫਿਜੀਕਲ ਕੀ-ਬੋਰਡ"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"ਕੀ ਐਪ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ USB ਡੀਵਾਈਸ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"ਕੀ ਐਪ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ USB ਐਕਸੈੱਸਰੀ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"ਕੀ ਜਦੋਂ ਇਹ USB ਡੀਵਾਈਸ ਕਨੈਕਟ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਤਾਂ <xliff:g id="ACTIVITY">%1$s</xliff:g> ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"ਕੀ ਜਦੋਂ ਇਹ USB ਐਕਸੈਸਰੀ ਕਨੈਕਟ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਤਾਂ <xliff:g id="ACTIVITY">%1$s</xliff:g> ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ਕੋਈ ਇੰਸਟੌਲ ਕੀਤੇ ਐਪਸ ਇਸ USB ਐਕਸੈਸਰੀ ਨਾਲ ਕੰਮ ਨਹੀਂ ਕਰਦੇ। <xliff:g id="URL">%1$s</xliff:g> ਤੇ ਇਸ ਐਕਸੈਸਰੀ ਬਾਰੇ ਹੋਰ ਜਾਣੋ"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB ਐਕਸੈਸਰੀ"</string> <string name="label_view" msgid="6304565553218192990">"ਦੇਖੋ"</string> - <string name="always_use_device" msgid="1450287437017315906">"ਇਸ USB ਡੀਵਾਈਸ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਤੌਰ \'ਤੇ ਵਰਤੋ"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"ਇਸ USB ਐਕਸਸੈਰੀ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਤੌਰ \'ਤੇ ਵਰਤੋ"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"ਕੀ USB ਡੀਬਗਿੰਗ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"ਕੰਪਿਊਟਰ ਦਾ RSA ਕੁੰਜੀ ਫਿੰਗਰਪ੍ਰਿੰਟ \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"ਹਮੇਸ਼ਾਂ ਇਸ ਕੰਪਿਊਟਰ ਤੋਂ ਆਗਿਆ ਦਿਓ"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/config.xml b/packages/SystemUI/res/values-pt-rBR/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-pt-rBR/config.xml +++ b/packages/SystemUI/res/values-pt-rBR/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 4b72c2920dcf..ce457be5396e 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -51,15 +51,15 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth vinculado"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Configurar métodos de entrada"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Teclado físico"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Permitir que o app <xliff:g id="APPLICATION">%1$s</xliff:g> acesse o dispositivo USB?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Permitir que o app <xliff:g id="APPLICATION">%1$s</xliff:g> acesse o acessório USB?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Abrir <xliff:g id="ACTIVITY">%1$s</xliff:g> quando este dispositivo USB estiver conectado?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Abrir <xliff:g id="ACTIVITY">%1$s</xliff:g> quando este acessório USB estiver conectado?"</string> + <string name="usb_device_permission_prompt" msgid="1825685909587559679">"Permitir que o app <xliff:g id="APPLICATION">%1$s</xliff:g> acesse <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"Permitir que o app <xliff:g id="APPLICATION">%1$s</xliff:g> acesse <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> + <string name="usb_device_confirm_prompt" msgid="7440562274256843905">"Abrir o app <xliff:g id="APPLICATION">%1$s</xliff:g> para lidar com o <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"Abrir o app <xliff:g id="APPLICATION">%1$s</xliff:g> para lidar com o <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Nenhum apl. instalado funciona com o USB. Saiba mais sobre o acessório em <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"Acessório USB"</string> <string name="label_view" msgid="6304565553218192990">"Visualizar"</string> - <string name="always_use_device" msgid="1450287437017315906">"Usar por padrão para este dispositivo USB"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Usar por padrão para este acessório USB"</string> + <string name="always_use_device" msgid="4015357883336738417">"Sempre abrir o app <xliff:g id="APPLICATION">%1$s</xliff:g> quando <xliff:g id="USB_DEVICE">%2$s</xliff:g> for conectado"</string> + <string name="always_use_accessory" msgid="3257892669444535154">"Sempre abrir o app <xliff:g id="APPLICATION">%1$s</xliff:g> quando <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> for conectado"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"Permitir a depuração USB?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"A impressão digital da chave RSA deste computador é:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Sempre permitir a partir deste computador"</string> diff --git a/packages/SystemUI/res/values-pt/config.xml b/packages/SystemUI/res/values-pt/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-pt/config.xml +++ b/packages/SystemUI/res/values-pt/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 4b72c2920dcf..ce457be5396e 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -51,15 +51,15 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth vinculado"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Configurar métodos de entrada"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Teclado físico"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Permitir que o app <xliff:g id="APPLICATION">%1$s</xliff:g> acesse o dispositivo USB?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Permitir que o app <xliff:g id="APPLICATION">%1$s</xliff:g> acesse o acessório USB?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Abrir <xliff:g id="ACTIVITY">%1$s</xliff:g> quando este dispositivo USB estiver conectado?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Abrir <xliff:g id="ACTIVITY">%1$s</xliff:g> quando este acessório USB estiver conectado?"</string> + <string name="usb_device_permission_prompt" msgid="1825685909587559679">"Permitir que o app <xliff:g id="APPLICATION">%1$s</xliff:g> acesse <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"Permitir que o app <xliff:g id="APPLICATION">%1$s</xliff:g> acesse <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> + <string name="usb_device_confirm_prompt" msgid="7440562274256843905">"Abrir o app <xliff:g id="APPLICATION">%1$s</xliff:g> para lidar com o <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"Abrir o app <xliff:g id="APPLICATION">%1$s</xliff:g> para lidar com o <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Nenhum apl. instalado funciona com o USB. Saiba mais sobre o acessório em <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"Acessório USB"</string> <string name="label_view" msgid="6304565553218192990">"Visualizar"</string> - <string name="always_use_device" msgid="1450287437017315906">"Usar por padrão para este dispositivo USB"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Usar por padrão para este acessório USB"</string> + <string name="always_use_device" msgid="4015357883336738417">"Sempre abrir o app <xliff:g id="APPLICATION">%1$s</xliff:g> quando <xliff:g id="USB_DEVICE">%2$s</xliff:g> for conectado"</string> + <string name="always_use_accessory" msgid="3257892669444535154">"Sempre abrir o app <xliff:g id="APPLICATION">%1$s</xliff:g> quando <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> for conectado"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"Permitir a depuração USB?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"A impressão digital da chave RSA deste computador é:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Sempre permitir a partir deste computador"</string> diff --git a/packages/SystemUI/res/values-ro/config.xml b/packages/SystemUI/res/values-ro/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-ro/config.xml +++ b/packages/SystemUI/res/values-ro/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 48005783ad43..c7822e0d1a26 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -52,15 +52,15 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Conectat prin tethering prin Bluetooth"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Setați metode introducere text"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Tastatură fizică"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Permiteți aplicației <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze dispozitivul USB?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Permiteți aplicației <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze accesoriul USB?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Deschideți <xliff:g id="ACTIVITY">%1$s</xliff:g> la conectarea acestui dispozitiv USB?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Deschideți <xliff:g id="ACTIVITY">%1$s</xliff:g> la conectarea acestui accesoriu USB?"</string> + <string name="usb_device_permission_prompt" msgid="1825685909587559679">"Permiteți <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"Permiteți <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> + <string name="usb_device_confirm_prompt" msgid="7440562274256843905">"Deschideți <xliff:g id="APPLICATION">%1$s</xliff:g> ca să gestioneze <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string> + <string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"Deschideți <xliff:g id="APPLICATION">%1$s</xliff:g> ca să gestioneze <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Aplic. instal. nu funcț. cu acest acces. USB. Aflați despre acest accesoriu la <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"Accesoriu USB"</string> <string name="label_view" msgid="6304565553218192990">"Afișați"</string> - <string name="always_use_device" msgid="1450287437017315906">"Utilizați în mod prestabilit pt. acest dispoz. USB"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Utiliz. în mod prestabilit pt. acest accesoriu USB"</string> + <string name="always_use_device" msgid="4015357883336738417">"Deschideți întotdeauna <xliff:g id="APPLICATION">%1$s</xliff:g> când este conectat <xliff:g id="USB_DEVICE">%2$s</xliff:g>"</string> + <string name="always_use_accessory" msgid="3257892669444535154">"Deschideți întotdeauna <xliff:g id="APPLICATION">%1$s</xliff:g> când este conectat <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"Permiteți remedierea erorilor prin USB?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"Amprenta digitală din cheia RSA a computerului este:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Permiteți întotdeauna de pe acest computer"</string> diff --git a/packages/SystemUI/res/values-sw/config.xml b/packages/SystemUI/res/values-sw/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-sw/config.xml +++ b/packages/SystemUI/res/values-sw/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 524faea9cf28..d1bbe50585aa 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth imefungwa"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Weka mbinu za ingizo"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Kibodi halisi"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Ruhusu programu <xliff:g id="APPLICATION">%1$s</xliff:g> kufikia kifaa cha USB?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Ruhusu programu <xliff:g id="APPLICATION">%1$s</xliff:g> kufikia kifaa cha ziada cha USB?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Je, ungetaka kufungua <xliff:g id="ACTIVITY">%1$s</xliff:g>wakati kifaa cha USB kimeunganishwa?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Je, ungetaka kufungua <xliff:g id="ACTIVITY">%1$s</xliff:g>wakati kifaa cha USB kimeunganishwa?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Hakuna programu zilizosakinishwa zinazofanya kazi na kifaa hiki cha USB. Pata maelezo zaidi kuhusu kifaa hiki kwenye <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"Kifaa cha Usb"</string> <string name="label_view" msgid="6304565553218192990">"Ona"</string> - <string name="always_use_device" msgid="1450287437017315906">"Kwa kifaa hiki cha USB tumia chaguo-msingi"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"Tumia kama chaguo-msingi ya kifuasi hiki cha USB"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"Ruhusu utatuaji wa USB?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"Alama ya kidole ya kitufe cha RSA ya kompyuta ni:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Ruhusu kutoka kwenye kompyuta hii kila wakati"</string> diff --git a/packages/SystemUI/res/values-ta/config.xml b/packages/SystemUI/res/values-ta/config.xml index 9857f13948d6..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-ta/config.xml +++ b/packages/SystemUI/res/values-ta/config.xml @@ -22,7 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <!-- no translation found for config_overviewServiceComponent (2288311504315574053) --> - <skip /> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index ada5d4bbb8d3..02d66136d65f 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"புளூடூத் இணைக்கப்பட்டது"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"உள்ளீட்டு முறைகளை அமை"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"கைமுறை விசைப்பலகை"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"USB சாதனத்தை அணுக <xliff:g id="APPLICATION">%1$s</xliff:g> பயன்பாட்டை அனுமதிக்கவா?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"USB இன் துணைக்கருவியை அணுக <xliff:g id="APPLICATION">%1$s</xliff:g> பயன்பாட்டை அனுமதிக்கவா?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"இந்த USB சாதனம் இணைக்கப்பட்டுள்ளபோது <xliff:g id="ACTIVITY">%1$s</xliff:g> ஐத் திறக்கவா?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"இந்த USB துணைக்கருவி இணைக்கப்பட்டுள்ளபோது <xliff:g id="ACTIVITY">%1$s</xliff:g> ஐத் திறக்கவா?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"நிறுவிய பயன்பாடுகள் எதுவும், USB துணைக்கருவியுடன் இயங்காது. <xliff:g id="URL">%1$s</xliff:g> இல் துணைக்கருவி குறித்து மேலும் அறிக"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB துணைக்கருவி"</string> <string name="label_view" msgid="6304565553218192990">"காட்சி"</string> - <string name="always_use_device" msgid="1450287437017315906">"இந்த USB சாதனத்திற்கு இயல்பாகப் பயன்படுத்து"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"USB துணைக்கருவிக்கு இயல்பாகப் பயன்படுத்து"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"USB பிழைத்திருத்தத்தை அனுமதிக்கவா?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"பின்வருவது கணினியின் RSA விசை கைரேகையாகும்:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"இந்தக் கணினியிலிருந்து எப்போதும் அனுமதி"</string> diff --git a/packages/SystemUI/res/values-te/config.xml b/packages/SystemUI/res/values-te/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-te/config.xml +++ b/packages/SystemUI/res/values-te/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index f23e169aaba3..0652de95a267 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"బ్లూటూత్ టీథర్ చేయబడింది"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ఇన్పుట్ పద్ధతులను సెటప్ చేయండి"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"భౌతిక కీబోర్డ్"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"USB పరికరాన్ని యాక్సెస్ చేయడానికి యాప్ <xliff:g id="APPLICATION">%1$s</xliff:g> అనుమతించాలా?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"USB ఉపకరణాన్ని యాక్సెస్ చేయడానికి యాప్ <xliff:g id="APPLICATION">%1$s</xliff:g>ను అనుమతించాలా?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"ఈ USB పరికరం కనెక్ట్ చేయబడినప్పుడు <xliff:g id="ACTIVITY">%1$s</xliff:g>ని తెరవాలా?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"ఈ USB ఉపకరణం కనెక్ట్ చేయబడినప్పుడు <xliff:g id="ACTIVITY">%1$s</xliff:g>ని తెరవాలా?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ఈ USB ఉపకరణంతో ఇన్స్టాల్ చేయబడిన అనువర్తనాలు ఏవీ పని చేయవు. ఈ ఉపకరణం గురించి <xliff:g id="URL">%1$s</xliff:g>లో మరింత తెలుసుకోండి"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB ఉపకరణం"</string> <string name="label_view" msgid="6304565553218192990">"వీక్షించండి"</string> - <string name="always_use_device" msgid="1450287437017315906">"ఈ USB పరికరానికి డిఫాల్ట్గా ఉపయోగించండి"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"ఈ USB ఉపకరణానికి డిఫాల్ట్గా ఉపయోగించండి"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"USB డీబగ్గింగ్ను అనుమతించాలా?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"ఇది కంప్యూటర్ యొక్క RSA కీ వేలిముద్ర:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"ఈ కంప్యూటర్ నుండి ఎల్లప్పుడూ అనుమతించు"</string> diff --git a/packages/SystemUI/res/values-ur/config.xml b/packages/SystemUI/res/values-ur/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-ur/config.xml +++ b/packages/SystemUI/res/values-ur/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index 7f171829865e..68db1bfd21ca 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"بلوٹوتھ مربوط کر دیا گیا"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ان پٹ کے طریقوں کو ترتیب دیں"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"طبعی کی بورڈ"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"ایپ <xliff:g id="APPLICATION">%1$s</xliff:g> کو USB آلہ تک رسائی کی اجازت دیں؟"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"<xliff:g id="APPLICATION">%1$s</xliff:g> ایپ کو USB لازمہ تک رسائی حاصل کرنے کی اجازت دیں؟"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"اس USB آلہ کے مربوط ہونے پر <xliff:g id="ACTIVITY">%1$s</xliff:g> کھولیں؟"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"اس USB لوازم کے مربوط ہونے پر <xliff:g id="ACTIVITY">%1$s</xliff:g> کھولیں؟"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"اس USB لوازم کے ساتھ کوئی انسٹال کردہ ایپس کام نہیں کرتی ہیں۔ <xliff:g id="URL">%1$s</xliff:g> پر مزید جانیں"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB لوازم"</string> <string name="label_view" msgid="6304565553218192990">"دیکھیں"</string> - <string name="always_use_device" msgid="1450287437017315906">"اس USB آلہ کیلئے بطور ڈیفالٹ استعمال کریں"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"اس USB لوازم کیلئے بطور ڈیفالٹ استعمال کریں"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"USB ڈیبگ کرنے کی اجازت دیں؟"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"کمپیوٹر کے RSA کا کلیدی فنگر پرنٹ ہے:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"اس کمپیوٹر سے ہمیشہ اجازت دیں"</string> diff --git a/packages/SystemUI/res/values-zh-rCN/config.xml b/packages/SystemUI/res/values-zh-rCN/config.xml index 5309563e3986..477f2198e4a6 100644 --- a/packages/SystemUI/res/values-zh-rCN/config.xml +++ b/packages/SystemUI/res/values-zh-rCN/config.xml @@ -22,5 +22,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="config_overviewServiceComponent" msgid="2288311504315574053">"com.android.launcher3/com.android.quickstep.TouchInteractionService"</string> <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> </resources> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index e179c5df5b19..74afc22fd118 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -51,15 +51,21 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"已通过蓝牙共享网络"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"设置输入法"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"物理键盘"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"允许应用“<xliff:g id="APPLICATION">%1$s</xliff:g>”访问该USB设备吗?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"允许应用“<xliff:g id="APPLICATION">%1$s</xliff:g>”访问该USB配件吗?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"要在连接此USB设备时打开<xliff:g id="ACTIVITY">%1$s</xliff:g>吗?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"要在连接此USB配件时打开<xliff:g id="ACTIVITY">%1$s</xliff:g>吗?"</string> + <!-- no translation found for usb_device_permission_prompt (1825685909587559679) --> + <skip /> + <!-- no translation found for usb_accessory_permission_prompt (2465531696941369047) --> + <skip /> + <!-- no translation found for usb_device_confirm_prompt (7440562274256843905) --> + <skip /> + <!-- no translation found for usb_accessory_confirm_prompt (4333670517539993561) --> + <skip /> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"未安装此USB配件适用的应用。要了解此配件的详情,请访问:<xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"USB配件"</string> <string name="label_view" msgid="6304565553218192990">"查看"</string> - <string name="always_use_device" msgid="1450287437017315906">"默认情况下用于该USB设备"</string> - <string name="always_use_accessory" msgid="1210954576979621596">"默认情况下用于该USB配件"</string> + <!-- no translation found for always_use_device (4015357883336738417) --> + <skip /> + <!-- no translation found for always_use_accessory (3257892669444535154) --> + <skip /> <string name="usb_debugging_title" msgid="4513918393387141949">"允许 USB 调试吗?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"这台计算机的 RSA 密钥指纹如下:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"一律允许使用这台计算机进行调试"</string> diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index 0b816b5ff820..d2dfbbf5d9d0 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -736,7 +736,10 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener // However, the window bounds include the insets, so we need to subtract them here to make // them identical. if (ssp.hasDockedTask()) { - windowRect.bottom -= systemInsets.bottom; + if (systemInsets.bottom < windowRect.height()) { + // Only apply inset if it isn't going to cause the rect height to go negative. + windowRect.bottom -= systemInsets.bottom; + } systemInsets.bottom = 0; } calculateWindowStableInsets(systemInsets, windowRect, displayRect); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java index 4180884597f0..bed6d82147fe 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java @@ -19,6 +19,7 @@ package com.android.systemui.statusbar.phone; import android.app.ActivityManager; import android.content.Context; import android.content.res.Resources; +import android.graphics.Matrix; import android.graphics.Rect; import android.os.RemoteException; import android.util.Log; @@ -76,6 +77,8 @@ public class NavigationBarGestureHelper extends GestureDetector.SimpleOnGestureL private final GestureDetector mTaskSwitcherDetector; private final int mScrollTouchSlop; private final int mMinFlingVelocity; + private final Matrix mTransformGlobalMatrix = new Matrix(); + private final Matrix mTransformLocalMatrix = new Matrix(); private int mTouchDownX; private int mTouchDownY; private boolean mDownOnRecents; @@ -116,27 +119,30 @@ public class NavigationBarGestureHelper extends GestureDetector.SimpleOnGestureL final IOverviewProxy overviewProxy = mOverviewEventSender.getProxy(); if (overviewProxy != null) { mNavigationBarView.requestUnbufferedDispatch(event); + event.transform(mTransformGlobalMatrix); try { overviewProxy.onMotionEvent(event); return true; } catch (RemoteException e) { Log.e(TAG, "Callback failed", e); + } finally { + event.transform(mTransformLocalMatrix); } } return false; } public boolean onInterceptTouchEvent(MotionEvent event) { - if (!proxyMotionEvents(event)) { - // If we move more than a fixed amount, then start capturing for the - // task switcher detector, disabled when proxying motion events to launcher service - mTaskSwitcherDetector.onTouchEvent(event); - } int action = event.getAction(); + boolean result = false; switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: { mTouchDownX = (int) event.getX(); mTouchDownY = (int) event.getY(); + mTransformGlobalMatrix.set(Matrix.IDENTITY_MATRIX); + mTransformLocalMatrix.set(Matrix.IDENTITY_MATRIX); + mNavigationBarView.transformMatrixToGlobal(mTransformGlobalMatrix); + mNavigationBarView.transformMatrixToLocal(mTransformLocalMatrix); break; } case MotionEvent.ACTION_MOVE: { @@ -147,7 +153,7 @@ public class NavigationBarGestureHelper extends GestureDetector.SimpleOnGestureL boolean exceededTouchSlop = xDiff > mScrollTouchSlop && xDiff > yDiff || yDiff > mScrollTouchSlop && yDiff > xDiff; if (exceededTouchSlop) { - return true; + result = true; } break; } @@ -155,7 +161,12 @@ public class NavigationBarGestureHelper extends GestureDetector.SimpleOnGestureL case MotionEvent.ACTION_UP: break; } - return mDockWindowEnabled && interceptDockWindowEvent(event); + if (!proxyMotionEvents(event)) { + // If we move more than a fixed amount, then start capturing for the + // task switcher detector, disabled when proxying motion events to launcher service + mTaskSwitcherDetector.onTouchEvent(event); + } + return result || (mDockWindowEnabled && interceptDockWindowEvent(event)); } private boolean interceptDockWindowEvent(MotionEvent event) { diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index 73a6d7c0e36f..98efd522970b 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -4758,6 +4758,11 @@ message MetricsEvent { // OS: P NOTIFICATION_ZEN_MODE_TOGGLE_ON_ALARM = 1261; + // FIELD: the version of the widget the selection was made in. + // CATEGORY: TEXT_SELECTION_SESSION + // OS: P + FIELD_SELECTION_WIDGET_VERSION = 1262; + // Add new aosp constants above this line. // END OF AOSP CONSTANTS } diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java index caff0ba9bea2..23e4f504735b 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java @@ -512,6 +512,16 @@ public final class AutofillManagerService extends SystemService { } @Override + public void removeClient(IAutoFillManagerClient client, int userId) { + synchronized (mLock) { + final AutofillManagerServiceImpl service = peekServiceForUserLocked(userId); + if (service != null) { + service.removeClientLocked(client); + } + } + } + + @Override public void setAuthenticationResult(Bundle data, int sessionId, int authenticationId, int userId) { synchronized (mLock) { diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index a3def1435df9..21e27220b621 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -273,6 +273,12 @@ final class AutofillManagerServiceImpl { return isEnabled(); } + void removeClientLocked(IAutoFillManagerClient client) { + if (mClients != null) { + mClients.unregister(client); + } + } + void setAuthenticationResultLocked(Bundle data, int sessionId, int authenticationId, int uid) { if (!isEnabled()) { return; @@ -548,6 +554,10 @@ final class AutofillManagerServiceImpl { } sendStateToClients(true); + if (mClients != null) { + mClients.kill(); + mClients = null; + } } @NonNull @@ -752,6 +762,9 @@ final class AutofillManagerServiceImpl { } } + pw.print(prefix); pw.println("Clients"); + mClients.dump(pw, prefix2); + if (mEventHistory == null || mEventHistory.getEvents() == null || mEventHistory.getEvents().size() == 0) { pw.print(prefix); pw.println("No event on last fill response"); diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index 75206e48aa8b..c34c30cf6e43 100644 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -195,6 +195,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { private LinkedList<ActiveLog> mActiveLogs; private LinkedList<Long> mCrashTimestamps; private int mCrashes; + private long mLastEnabledTime; // configuration from external IBinder call which is used to // synchronize with broadcast receiver. @@ -2021,6 +2022,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mHandler.sendMessage(mHandler.obtainMessage(MESSAGE_ENABLE, quietMode ? 1 : 0, 0)); addActiveLog(packageName, true); + mLastEnabledTime = SystemClock.elapsedRealtime(); } private void addActiveLog(String packageName, boolean enable) { @@ -2142,7 +2144,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { writer.println(" address: " + mAddress); writer.println(" name: " + mName); if (mEnable) { - long onDuration = System.currentTimeMillis() - mActiveLogs.getLast().getTime(); + long onDuration = SystemClock.elapsedRealtime() - mLastEnabledTime; String onDurationString = String.format("%02d:%02d:%02d.%03d", (int)(onDuration / (1000 * 60 * 60)), (int)((onDuration / (1000 * 60)) % 60), diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 3e40dfdb3a2f..bccae062811c 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -5616,7 +5616,8 @@ public class ConnectivityService extends IConnectivityManager.Stub } private void logNetworkEvent(NetworkAgentInfo nai, int evtype) { - mMetricsLog.log(new NetworkEvent(nai.network.netId, evtype)); + int[] transports = nai.networkCapabilities.getTransportTypes(); + mMetricsLog.log(nai.network.netId, transports, new NetworkEvent(evtype)); } private static boolean toBool(int encodedBoolean) { diff --git a/services/core/java/com/android/server/MountServiceIdler.java b/services/core/java/com/android/server/MountServiceIdler.java index d8bd0bb5a93c..1891ba9b1742 100644 --- a/services/core/java/com/android/server/MountServiceIdler.java +++ b/services/core/java/com/android/server/MountServiceIdler.java @@ -72,7 +72,7 @@ public class MountServiceIdler extends JobService { synchronized (mFinishCallback) { mStarted = true; } - ms.runIdleMaintenance(mFinishCallback); + ms.runIdleMaint(mFinishCallback); } return ms != null; } @@ -82,8 +82,12 @@ public class MountServiceIdler extends JobService { // Once we kick off the fstrim we aren't actually interruptible; just note // that we don't need to call jobFinished(), and let everything happen in // the callback from the mount service. - synchronized (mFinishCallback) { - mStarted = false; + StorageManagerService ms = StorageManagerService.sSelf; + if (ms != null) { + ms.abortIdleMaint(mFinishCallback); + synchronized (mFinishCallback) { + mStarted = false; + } } return false; } diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 75e8000ea2c1..3c955eb0f0db 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -542,6 +542,8 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon private static final int H_VOLUME_UNMOUNT = 8; private static final int H_PARTITION_FORGET = 9; private static final int H_RESET = 10; + private static final int H_RUN_IDLE_MAINT = 11; + private static final int H_ABORT_IDLE_MAINT = 12; class StorageManagerServiceHandler extends Handler { public StorageManagerServiceHandler(Looper looper) { @@ -650,6 +652,17 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon resetIfReadyAndConnected(); break; } + case H_RUN_IDLE_MAINT: { + Slog.i(TAG, "Running idle maintenance"); + runIdleMaint((Runnable)msg.obj); + break; + } + case H_ABORT_IDLE_MAINT: { + Slog.i(TAG, "Aborting idle maintenance"); + abortIdleMaint((Runnable)msg.obj); + break; + } + } } } @@ -1779,6 +1792,58 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon } } + void runIdleMaint(Runnable callback) { + enforcePermission(android.Manifest.permission.MOUNT_FORMAT_FILESYSTEMS); + + try { + mVold.runIdleMaint(new IVoldTaskListener.Stub() { + @Override + public void onStatus(int status, PersistableBundle extras) { + // Not currently used + } + @Override + public void onFinished(int status, PersistableBundle extras) { + if (callback != null) { + BackgroundThread.getHandler().post(callback); + } + } + }); + } catch (Exception e) { + Slog.wtf(TAG, e); + } + } + + @Override + public void runIdleMaintenance() { + runIdleMaint(null); + } + + void abortIdleMaint(Runnable callback) { + enforcePermission(android.Manifest.permission.MOUNT_FORMAT_FILESYSTEMS); + + try { + mVold.abortIdleMaint(new IVoldTaskListener.Stub() { + @Override + public void onStatus(int status, PersistableBundle extras) { + // Not currently used + } + @Override + public void onFinished(int status, PersistableBundle extras) { + if (callback != null) { + BackgroundThread.getHandler().post(callback); + } + } + }); + } catch (Exception e) { + Slog.wtf(TAG, e); + } + } + + @Override + public void abortIdleMaintenance() { + abortIdleMaint(null); + } + private void remountUidExternalStorage(int uid, int mode) { try { mVold.remountUid(uid, mode); diff --git a/services/core/java/com/android/server/am/ActivityDisplay.java b/services/core/java/com/android/server/am/ActivityDisplay.java index ea7b443f0c46..2289f8572b93 100644 --- a/services/core/java/com/android/server/am/ActivityDisplay.java +++ b/services/core/java/com/android/server/am/ActivityDisplay.java @@ -276,17 +276,8 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack> { if (windowingMode == WINDOWING_MODE_PINNED) { return (T) new PinnedActivityStack(this, stackId, mSupervisor, onTop); } - final T stack = (T) new ActivityStack( + return (T) new ActivityStack( this, stackId, mSupervisor, windowingMode, activityType, onTop); - - if (mDisplayId == DEFAULT_DISPLAY && windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) { - // Make sure recents stack exist when creating a dock stack as it normally needs to be - // on the other side of the docked stack and we make visibility decisions based on that. - // TODO: Not sure if this is needed after we change to calculate visibility based on - // stack z-order vs. id. - getOrCreateStack(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_RECENTS, onTop); - } - return stack; } /** @@ -365,6 +356,7 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack> { + " already exist on display=" + this + " stack=" + stack); } mSplitScreenPrimaryStack = stack; + onSplitScreenModeActivated(); } } @@ -377,6 +369,42 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack> { mPinnedStack = null; } else if (stack == mSplitScreenPrimaryStack) { mSplitScreenPrimaryStack = null; + // Inform the reset of the system that split-screen mode was dismissed so things like + // resizing all the other stacks can take place. + onSplitScreenModeDismissed(); + } + } + + private void onSplitScreenModeDismissed() { + mSupervisor.mWindowManager.deferSurfaceLayout(); + try { + // Adjust the windowing mode of any stack in secondary split-screen to fullscreen. + for (int i = mStacks.size() - 1; i >= 0; --i) { + final ActivityStack otherStack = mStacks.get(i); + if (!otherStack.inSplitScreenSecondaryWindowingMode()) { + continue; + } + otherStack.setWindowingMode(WINDOWING_MODE_FULLSCREEN); + } + } finally { + mSupervisor.mWindowManager.continueSurfaceLayout(); + } + } + + private void onSplitScreenModeActivated() { + mSupervisor.mWindowManager.deferSurfaceLayout(); + try { + // Adjust the windowing mode of any affected by split-screen to split-screen secondary. + for (int i = mStacks.size() - 1; i >= 0; --i) { + final ActivityStack otherStack = mStacks.get(i); + if (otherStack == mSplitScreenPrimaryStack + || !otherStack.affectedBySplitScreenResize()) { + continue; + } + otherStack.setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); + } + } finally { + mSupervisor.mWindowManager.continueSurfaceLayout(); } } @@ -475,22 +503,10 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack> { supportsFreeform, supportsPip, activityType)) { return windowingMode; } - // Return the display's windowing mode - return getWindowingMode(); - } - - /** Returns the top visible stack activity type that isn't in the exclude windowing mode. */ - int getTopVisibleStackActivityType(int excludeWindowingMode) { - for (int i = mStacks.size() - 1; i >= 0; --i) { - final ActivityStack stack = mStacks.get(i); - if (stack.getWindowingMode() == excludeWindowingMode) { - continue; - } - if (stack.shouldBeVisible(null /* starting */)) { - return stack.getActivityType(); - } - } - return ACTIVITY_TYPE_UNDEFINED; + // Try to use the display's windowing mode otherwise fallback to fullscreen. + windowingMode = getWindowingMode(); + return windowingMode != WINDOWING_MODE_UNDEFINED + ? windowingMode : WINDOWING_MODE_FULLSCREEN; } /** @@ -599,7 +615,20 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack> { } public void dump(PrintWriter pw, String prefix) { - pw.println(prefix + "displayId=" + mDisplayId + " mStacks=" + mStacks); + pw.println(prefix + "displayId=" + mDisplayId + " stacks=" + mStacks.size()); + final String myPrefix = prefix + " "; + if (mHomeStack != null) { + pw.println(myPrefix + "mHomeStack=" + mHomeStack); + } + if (mRecentsStack != null) { + pw.println(myPrefix + "mRecentsStack=" + mRecentsStack); + } + if (mPinnedStack != null) { + pw.println(myPrefix + "mPinnedStack=" + mPinnedStack); + } + if (mSplitScreenPrimaryStack != null) { + pw.println(myPrefix + "mSplitScreenPrimaryStack=" + mSplitScreenPrimaryStack); + } } public void writeToProto(ProtoOutputStream proto, long fieldId) { diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 5bef8cbc0817..ea2d1f30a04e 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -2779,12 +2779,12 @@ public class ActivityManagerService extends IActivityManager.Stub mConfigurationSeq = mTempConfig.seq = 1; mStackSupervisor = createStackSupervisor(); mStackSupervisor.onConfigurationChanged(mTempConfig); - mKeyguardController = mStackSupervisor.mKeyguardController; + mKeyguardController = mStackSupervisor.getKeyguardController(); mCompatModePackages = new CompatModePackages(this, systemDir, mHandler); mIntentFirewall = new IntentFirewall(new IntentFirewallInterface(), mHandler); mTaskChangeNotificationController = new TaskChangeNotificationController(this, mStackSupervisor, mHandler); - mActivityStarter = new ActivityStarter(this); + mActivityStarter = new ActivityStarter(this, AppGlobals.getPackageManager()); mRecentTasks = createRecentTasks(); mStackSupervisor.setRecentTasks(mRecentTasks); mLockTaskController = new LockTaskController(mContext, mStackSupervisor, mHandler); @@ -2828,7 +2828,9 @@ public class ActivityManagerService extends IActivityManager.Stub } protected ActivityStackSupervisor createStackSupervisor() { - return new ActivityStackSupervisor(this, mHandler.getLooper()); + final ActivityStackSupervisor supervisor = new ActivityStackSupervisor(this, mHandler.getLooper()); + supervisor.initialize(); + return supervisor; } protected RecentTasks createRecentTasks() { @@ -4759,7 +4761,7 @@ public class ActivityManagerService extends IActivityManager.Stub throws RemoteException { Slog.i(TAG, "Activity tried to startVoiceInteraction"); synchronized (this) { - ActivityRecord activity = getFocusedStack().topActivity(); + ActivityRecord activity = getFocusedStack().getTopActivity(); if (ActivityRecord.forTokenLocked(callingActivity) != activity) { throw new SecurityException("Only focused activity can call startVoiceInteraction"); } @@ -5354,8 +5356,7 @@ public class ActivityManagerService extends IActivityManager.Stub return -1; } - final ProcessRecord getRecordForAppLocked( - IApplicationThread thread) { + ProcessRecord getRecordForAppLocked(IApplicationThread thread) { if (thread == null) { return null; } @@ -7121,7 +7122,7 @@ public class ActivityManagerService extends IActivityManager.Stub } checkTime(startTime, "attachApplicationLocked: immediately before bindApplication"); - mStackSupervisor.mActivityMetricsLogger.notifyBindApplication(app); + mStackSupervisor.getActivityMetricsLogger().notifyBindApplication(app); if (app.isolatedEntryPoint != null) { // This is an isolated process which should just call an entry point instead of // being bound to an application. @@ -10435,13 +10436,7 @@ public class ActivityManagerService extends IActivityManager.Stub "exitFreeformMode: You can only go fullscreen from freeform."); } - final ActivityStack fullscreenStack = stack.getDisplay().getOrCreateStack( - WINDOWING_MODE_FULLSCREEN, stack.getActivityType(), ON_TOP); - - if (DEBUG_STACK) Slog.d(TAG_STACK, "exitFreeformMode: " + r); - // TODO: Should just change windowing mode vs. re-parenting... - r.getTask().reparent(fullscreenStack, ON_TOP, - REPARENT_KEEP_STACK_AT_FRONT, ANIMATE, !DEFER_RESUME, "exitFreeformMode"); + stack.setWindowingMode(WINDOWING_MODE_FULLSCREEN); } finally { Binder.restoreCallingIdentity(ident); } @@ -10450,6 +10445,11 @@ public class ActivityManagerService extends IActivityManager.Stub @Override public void setTaskWindowingMode(int taskId, int windowingMode, boolean toTop) { + if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) { + setTaskWindowingModeSplitScreenPrimary(taskId, SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT, + toTop, ANIMATE, null /* initialBounds */); + return; + } enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "setTaskWindowingMode()"); synchronized (this) { final long ident = Binder.clearCallingIdentity(); @@ -10462,56 +10462,16 @@ public class ActivityManagerService extends IActivityManager.Stub if (DEBUG_STACK) Slog.d(TAG_STACK, "setTaskWindowingMode: moving task=" + taskId + " to windowingMode=" + windowingMode + " toTop=" + toTop); - if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) { - mWindowManager.setDockedStackCreateState(SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT, - null /* initialBounds */); - } if (!task.isActivityTypeStandardOrUndefined()) { - throw new IllegalArgumentException("setTaskWindowingMode: Attempt to move task " - + taskId + " to non-standard windowin mode=" + windowingMode); + throw new IllegalArgumentException("setTaskWindowingMode: Attempt to move" + + " non-standard task " + taskId + " to windowing mode=" + + windowingMode); } final ActivityDisplay display = task.getStack().getDisplay(); final ActivityStack stack = display.getOrCreateStack(windowingMode, task.getStack().getActivityType(), toTop); - // TODO: We should just change the windowing mode for the task vs. creating and - // moving it to a stack. - task.reparent(stack, toTop, REPARENT_KEEP_STACK_AT_FRONT, ANIMATE, !DEFER_RESUME, - "moveTaskToStack"); - } finally { - Binder.restoreCallingIdentity(ident); - } - } - } - - @Override - public void moveTaskToStack(int taskId, int stackId, boolean toTop) { - enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "moveTaskToStack()"); - synchronized (this) { - long ident = Binder.clearCallingIdentity(); - try { - final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId); - if (task == null) { - Slog.w(TAG, "moveTaskToStack: No task for id=" + taskId); - return; - } - - if (DEBUG_STACK) Slog.d(TAG_STACK, "moveTaskToStack: moving task=" + taskId - + " to stackId=" + stackId + " toTop=" + toTop); - - final ActivityStack stack = mStackSupervisor.getStack(stackId); - if (stack == null) { - throw new IllegalStateException( - "moveTaskToStack: No stack for stackId=" + stackId); - } - if (!stack.isActivityTypeStandardOrUndefined()) { - throw new IllegalArgumentException("moveTaskToStack: Attempt to move task " - + taskId + " to stack " + stackId); - } - if (stack.inSplitScreenPrimaryWindowingMode()) { - mWindowManager.setDockedStackCreateState( - SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT, null /* initialBounds */); - } + // TODO: Use ActivityStack.setWindowingMode instead of re-parenting. task.reparent(stack, toTop, REPARENT_KEEP_STACK_AT_FRONT, ANIMATE, !DEFER_RESUME, "moveTaskToStack"); } finally { @@ -10521,7 +10481,7 @@ public class ActivityManagerService extends IActivityManager.Stub } /** - * Moves the input task to the primary-split-screen stack. + * Moves the specified task to the primary-split-screen stack. * * @param taskId Id of task to move. * @param createMode The mode the primary split screen stack should be created in if it doesn't @@ -10530,7 +10490,7 @@ public class ActivityManagerService extends IActivityManager.Stub * and * {@link android.app.ActivityManager#SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT} * @param toTop If the task and stack should be moved to the top. - * @param animate Whether we should play an animation for the moving the task + * @param animate Whether we should play an animation for the moving the task. * @param initialBounds If the primary stack gets created, it will use these bounds for the * stack. Pass {@code null} to use default bounds. */ @@ -10550,22 +10510,55 @@ public class ActivityManagerService extends IActivityManager.Stub if (DEBUG_STACK) Slog.d(TAG_STACK, "setTaskWindowingModeSplitScreenPrimary: moving task=" + taskId + " to createMode=" + createMode + " toTop=" + toTop); + if (!task.isActivityTypeStandardOrUndefined()) { + throw new IllegalArgumentException("setTaskWindowingMode: Attempt to move" + + " non-standard task " + taskId + " to split-screen windowing mode"); + } + mWindowManager.setDockedStackCreateState(createMode, initialBounds); + final int windowingMode = task.getWindowingMode(); + final ActivityStack stack = task.getStack(); + if (toTop) { + stack.moveToFront("setTaskWindowingModeSplitScreenPrimary", task); + } + stack.setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, animate); + return windowingMode != task.getWindowingMode(); + } finally { + Binder.restoreCallingIdentity(ident); + } + } + } - final ActivityDisplay display = task.getStack().getDisplay(); - final ActivityStack stack = display.getOrCreateStack( - WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, task.getStack().getActivityType(), - toTop); - - // Defer resuming until we move the home stack to the front below - // TODO: Should just change windowing mode vs. re-parenting... - final boolean moved = task.reparent(stack, toTop, - REPARENT_KEEP_STACK_AT_FRONT, animate, !DEFER_RESUME, - "setTaskWindowingModeSplitScreenPrimary"); - if (moved) { - mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS); + @Override + public void moveTaskToStack(int taskId, int stackId, boolean toTop) { + enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "moveTaskToStack()"); + synchronized (this) { + long ident = Binder.clearCallingIdentity(); + try { + final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId); + if (task == null) { + Slog.w(TAG, "moveTaskToStack: No task for id=" + taskId); + return; } - return moved; + + if (DEBUG_STACK) Slog.d(TAG_STACK, "moveTaskToStack: moving task=" + taskId + + " to stackId=" + stackId + " toTop=" + toTop); + + final ActivityStack stack = mStackSupervisor.getStack(stackId); + if (stack == null) { + throw new IllegalStateException( + "moveTaskToStack: No stack for stackId=" + stackId); + } + if (!stack.isActivityTypeStandardOrUndefined()) { + throw new IllegalArgumentException("moveTaskToStack: Attempt to move task " + + taskId + " to stack " + stackId); + } + if (stack.inSplitScreenPrimaryWindowingMode()) { + mWindowManager.setDockedStackCreateState( + SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT, null /* initialBounds */); + } + task.reparent(stack, toTop, REPARENT_KEEP_STACK_AT_FRONT, ANIMATE, !DEFER_RESUME, + "moveTaskToStack"); } finally { Binder.restoreCallingIdentity(ident); } @@ -10588,14 +10581,11 @@ public class ActivityManagerService extends IActivityManager.Stub Slog.w(TAG, "dismissSplitScreenMode: primary split-screen stack not found."); return; } + if (toTop) { - mStackSupervisor.resizeStackLocked(stack, null /* destBounds */, - null /* tempTaskBounds */, null /* tempTaskInsetBounds */, - true /* preserveWindows */, true /* allowResizeInDockedMode */, - !DEFER_RESUME); - } else { - mStackSupervisor.moveTasksToFullscreenStackLocked(stack, false /* onTop */); + stack.moveToFront("dismissSplitScreenMode"); } + stack.setWindowingMode(WINDOWING_MODE_FULLSCREEN); } } finally { Binder.restoreCallingIdentity(ident); @@ -12951,7 +12941,7 @@ public class ActivityManagerService extends IActivityManager.Stub return false; } - final ActivityRecord activity = focusedStack.topActivity(); + final ActivityRecord activity = focusedStack.getTopActivity(); if (activity == null) { return false; } @@ -12968,7 +12958,7 @@ public class ActivityManagerService extends IActivityManager.Stub try { synchronized (this) { ActivityRecord caller = ActivityRecord.forTokenLocked(token); - ActivityRecord top = getFocusedStack().topActivity(); + ActivityRecord top = getFocusedStack().getTopActivity(); if (top != caller) { Slog.w(TAG, "showAssistFromActivity failed: caller " + caller + " is not current top " + top); @@ -13011,7 +13001,7 @@ public class ActivityManagerService extends IActivityManager.Stub "enqueueAssistContext()"); synchronized (this) { - ActivityRecord activity = getFocusedStack().topActivity(); + ActivityRecord activity = getFocusedStack().getTopActivity(); if (activity == null) { Slog.w(TAG, "getAssistContextExtras failed: no top activity"); return null; @@ -23890,7 +23880,7 @@ public class ActivityManagerService extends IActivityManager.Stub @Override public void notifyAppTransitionStarting(SparseIntArray reasons, long timestamp) { synchronized (ActivityManagerService.this) { - mStackSupervisor.mActivityMetricsLogger.notifyTransitionStarting( + mStackSupervisor.getActivityMetricsLogger().notifyTransitionStarting( reasons, timestamp); } } diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index b2308d5ec9af..9a16745c9ca3 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -1529,7 +1529,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo void setVisibility(boolean visible) { mWindowContainerController.setVisibility(visible, mDeferHidingClient); - mStackSupervisor.mActivityMetricsLogger.notifyVisibilityChanged(this); + mStackSupervisor.getActivityMetricsLogger().notifyVisibilityChanged(this); } // TODO: Look into merging with #setVisibility() @@ -1810,7 +1810,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo } stack.mFullyDrawnStartTime = 0; } - mStackSupervisor.mActivityMetricsLogger.logAppTransitionReportedDrawn(this, + mStackSupervisor.getActivityMetricsLogger().logAppTransitionReportedDrawn(this, restoredFromBundle); fullyDrawnStartTime = 0; } @@ -1852,7 +1852,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo @Override public void onStartingWindowDrawn(long timestamp) { synchronized (service) { - mStackSupervisor.mActivityMetricsLogger.notifyStartingWindowDrawn( + mStackSupervisor.getActivityMetricsLogger().notifyStartingWindowDrawn( getStackId(), timestamp); } } @@ -1860,7 +1860,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo @Override public void onWindowsDrawn(long timestamp) { synchronized (service) { - mStackSupervisor.mActivityMetricsLogger.notifyWindowsDrawn(getStackId(), timestamp); + mStackSupervisor.getActivityMetricsLogger().notifyWindowsDrawn(getStackId(), timestamp); if (displayStartTime != 0) { reportLaunchTimeLocked(timestamp); } diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 8cc584e44d19..c086c5292059 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -16,6 +16,9 @@ package com.android.server.am; +import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SECONDARY_DISPLAY; +import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SPLIT_SCREEN; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; @@ -95,7 +98,6 @@ import static java.lang.Integer.MAX_VALUE; import android.app.Activity; import android.app.ActivityManager; -import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityOptions; import android.app.AppGlobals; import android.app.IActivityController; @@ -345,6 +347,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai private final SparseArray<Rect> mTmpBounds = new SparseArray<>(); private final SparseArray<Rect> mTmpInsetBounds = new SparseArray<>(); private final Rect mTmpRect2 = new Rect(); + private final ActivityOptions mTmpOptions = ActivityOptions.makeBasic(); /** Run all ActivityStacks through this */ protected final ActivityStackSupervisor mStackSupervisor; @@ -452,8 +455,8 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai mStackId = stackId; mCurrentUser = mService.mUserController.getCurrentUserId(); mTmpRect2.setEmpty(); - setWindowingMode(windowingMode); setActivityType(activityType); + setWindowingMode(windowingMode); mWindowContainerController = createStackWindowController(display.mDisplayId, onTop, mTmpRect2); postAddToDisplay(display, mTmpRect2.isEmpty() ? null : mTmpRect2, onTop); @@ -479,6 +482,125 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai } @Override + public void setWindowingMode(int windowingMode) { + setWindowingMode(windowingMode, false /* animate */); + } + + void setWindowingMode(int preferredWindowingMode, boolean animate) { + final int currentMode = getWindowingMode(); + final ActivityDisplay display = getDisplay(); + final TaskRecord topTask = topTask(); + final ActivityStack splitScreenStack = display.getSplitScreenPrimaryStack(); + mTmpOptions.setLaunchWindowingMode(preferredWindowingMode); + + // Need to make sure windowing mode is supported. + int windowingMode = display.resolveWindowingMode( + null /* ActivityRecord */, mTmpOptions, topTask, getActivityType());; + if (splitScreenStack == this && windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) { + // Resolution to split-screen secondary for the primary split-screen stack means we want + // to go fullscreen. + windowingMode = WINDOWING_MODE_FULLSCREEN; + } + + // Take any required action due to us not supporting the preferred windowing mode. + if (windowingMode != preferredWindowingMode && isActivityTypeStandardOrUndefined()) { + if (display.hasSplitScreenPrimaryStack() + && (preferredWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY + || preferredWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY)) { + // Looks like we can't launch in split screen mode, go ahead an dismiss split-screen + // and display a warning toast about it. + mService.mTaskChangeNotificationController.notifyActivityDismissingDockedStack(); + display.getSplitScreenPrimaryStack().setWindowingMode(WINDOWING_MODE_FULLSCREEN); + } + } + + if (currentMode == windowingMode) { + // You are already in the window mode silly... + return; + } + + final WindowManagerService wm = mService.mWindowManager; + final ActivityRecord topActivity = getTopActivity(); + + if (windowingMode != WINDOWING_MODE_FULLSCREEN && topActivity != null + && topActivity.isNonResizableOrForcedResizable() && !topActivity.noDisplay) { + // Inform the user that they are starting an app that may not work correctly in + // multi-window mode. + final String packageName = topActivity.appInfo.packageName; + mService.mTaskChangeNotificationController.notifyActivityForcedResizable( + topTask.taskId, FORCED_RESIZEABLE_REASON_SPLIT_SCREEN, packageName); + } + + wm.deferSurfaceLayout(); + try { + if (!animate && topActivity != null) { + mNoAnimActivities.add(topActivity); + } + super.setWindowingMode(windowingMode); + + if (mWindowContainerController == null) { + // Nothing else to do if we don't have a window container yet. E.g. call from ctor. + return; + } + + if (windowingMode == WINDOWING_MODE_PINNED || currentMode == WINDOWING_MODE_PINNED) { + // TODO: Need to remove use of PinnedActivityStack for this to be supported. + // NOTE: Need to ASS.scheduleUpdatePictureInPictureModeIfNeeded() in + // setWindowModeUnchecked() when this support is added. See TaskRecord.reparent() + throw new IllegalArgumentException( + "Changing pinned windowing mode not currently supported"); + } + + if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY && splitScreenStack != null) { + // We already have a split-screen stack in this display, so just move the tasks over. + // TODO: Figure-out how to do all the stuff in + // AMS.setTaskWindowingModeSplitScreenPrimary + throw new IllegalArgumentException("Setting primary split-screen windowing mode" + + " while there is already one isn't currently supported"); + //return; + } + + mTmpRect2.setEmpty(); + if (windowingMode != WINDOWING_MODE_FULLSCREEN) { + mWindowContainerController.getRawBounds(mTmpRect2); + if (windowingMode == WINDOWING_MODE_FREEFORM) { + if (topTask != null) { + // TODO: Can we consolidate this and other sites that call this methods? + Rect bounds = topTask().getLaunchBounds(); + if (bounds != null) { + mTmpRect2.set(bounds); + } + } + } + } + + if (!Objects.equals(mBounds, mTmpRect2)) { + resize(mTmpRect2, null /* tempTaskBounds */, null /* tempTaskInsetBounds */); + } + } finally { + if (mDisplayId == DEFAULT_DISPLAY + && windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) { + // Make sure recents stack exist when creating a dock stack as it normally needs to + // be on the other side of the docked stack and we make visibility decisions based + // on that. + // TODO: This is only here to help out with the case where recents stack doesn't + // exist yet. For that case the initial size of the split-screen stack will be the + // the one where the home stack is visible since recents isn't visible yet, but the + // divider will be off. I think we should just make the initial bounds that of home + // so that the divider matches and remove this logic. + display.getOrCreateStack(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, + ACTIVITY_TYPE_RECENTS, true /* onTop */); + // If task moved to docked stack - show recents if needed. + mService.mWindowManager.showRecentApps(false /* fromHome */); + } + wm.continueSurfaceLayout(); + } + + mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, PRESERVE_WINDOWS); + mStackSupervisor.resumeFocusedStackTopActivityLocked(); + } + + @Override public boolean isCompatible(int windowingMode, int activityType) { // TODO: Should we just move this to ConfigurationContainer? if (activityType == ACTIVITY_TYPE_UNDEFINED) { @@ -538,12 +660,6 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai * either destroyed completely or re-parented. */ private void removeFromDisplay() { - if (getWindowingMode() == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) { - // If we removed a docked stack we want to resize it so it resizes all other stacks - // in the system to fullscreen. - mStackSupervisor.resizeDockedStackLocked( - null, null, null, null, null, PRESERVE_WINDOWS); - } final ActivityDisplay display = getDisplay(); if (display != null) { display.removeChild(this); @@ -730,14 +846,11 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai return null; } - final ActivityRecord topActivity() { + ActivityRecord getTopActivity() { for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { - ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; - for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { - final ActivityRecord r = activities.get(activityNdx); - if (!r.finishing) { - return r; - } + final ActivityRecord r = mTaskHistory.get(taskNdx).getTopActivity(); + if (r != null) { + return r; } } return null; @@ -751,7 +864,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai return null; } - final TaskRecord bottomTask() { + private TaskRecord bottomTask() { if (mTaskHistory.isEmpty()) { return null; } @@ -1607,8 +1720,6 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai } final int otherWindowingMode = other.getWindowingMode(); - // TODO: Can be removed once we are no longer using returnToType for back functionality - final ActivityStack stackBehind = i > 0 ? display.getChildAt(i - 1) : null; if (otherWindowingMode == WINDOWING_MODE_FULLSCREEN) { if (other.isStackTranslucent(starting)) { @@ -1669,7 +1780,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai boolean preserveWindows) { mTopActivityOccludesKeyguard = false; mTopDismissingKeyguardActivity = null; - mStackSupervisor.mKeyguardController.beginActivityVisibilityUpdate(); + mStackSupervisor.getKeyguardController().beginActivityVisibilityUpdate(); try { ActivityRecord top = topRunningActivityLocked(); if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "ensureActivitiesVisible behind " + top @@ -1777,7 +1888,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai notifyActivityDrawnLocked(null); } } finally { - mStackSupervisor.mKeyguardController.endActivityVisibilityUpdate(); + mStackSupervisor.getKeyguardController().endActivityVisibilityUpdate(); } } @@ -1802,6 +1913,13 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai return inPinnedWindowingMode(); } + @Override + public boolean supportsSplitScreenWindowingMode() { + final TaskRecord topTask = topTask(); + return super.supportsSplitScreenWindowingMode() + && (topTask == null || topTask.supportsSplitScreenWindowingMode()); + } + /** @return True if the resizing of the primary-split-screen stack affects this stack size. */ boolean affectedBySplitScreenResize() { if (!supportsSplitScreenWindowingMode()) { @@ -1828,9 +1946,9 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai boolean checkKeyguardVisibility(ActivityRecord r, boolean shouldBeVisible, boolean isTop) { final boolean isInPinnedStack = r.inPinnedWindowingMode(); - final boolean keyguardShowing = mStackSupervisor.mKeyguardController.isKeyguardShowing( + final boolean keyguardShowing = mStackSupervisor.getKeyguardController().isKeyguardShowing( mDisplayId != INVALID_DISPLAY ? mDisplayId : DEFAULT_DISPLAY); - final boolean keyguardLocked = mStackSupervisor.mKeyguardController.isKeyguardLocked(); + final boolean keyguardLocked = mStackSupervisor.getKeyguardController().isKeyguardLocked(); final boolean showWhenLocked = r.canShowWhenLocked() && !isInPinnedStack; final boolean dismissKeyguard = r.hasDismissKeyguardWindows(); if (shouldBeVisible) { @@ -1845,7 +1963,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai } final boolean canShowWithKeyguard = canShowWithInsecureKeyguard() - && mStackSupervisor.mKeyguardController.canDismissKeyguard(); + && mStackSupervisor.getKeyguardController().canDismissKeyguard(); if (canShowWithKeyguard) { return true; } @@ -1854,10 +1972,10 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai // If keyguard is showing, nothing is visible, except if we are able to dismiss Keyguard // right away. - return shouldBeVisible && mStackSupervisor.mKeyguardController + return shouldBeVisible && mStackSupervisor.getKeyguardController() .canShowActivityWhileKeyguardShowing(r, dismissKeyguard); } else if (keyguardLocked) { - return shouldBeVisible && mStackSupervisor.mKeyguardController.canShowWhileOccluded( + return shouldBeVisible && mStackSupervisor.getKeyguardController().canShowWhileOccluded( dismissKeyguard, showWhenLocked); } else { return shouldBeVisible; @@ -2421,7 +2539,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai // if needed to get the correct rotation behavior. // TODO: Remove this once visibilities are set correctly immediately when // starting an activity. - if (mStackSupervisor.mKeyguardController.isKeyguardLocked()) { + if (mStackSupervisor.getKeyguardController().isKeyguardLocked()) { mStackSupervisor.ensureActivitiesVisibleLocked(null /* starting */, 0 /* configChanges */, false /* preserveWindows */); } @@ -4299,7 +4417,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai if (DEBUG_SWITCH) Slog.v(TAG_SWITCH, "moveTaskToFront: " + tr); final ActivityStack topStack = getDisplay().getTopStack(); - final ActivityRecord topActivity = topStack != null ? topStack.topActivity() : null; + final ActivityRecord topActivity = topStack != null ? topStack.getTopActivity() : null; final int numTasks = mTaskHistory.size(); final int index = mTaskHistory.indexOf(tr); if (numTasks == 0 || index < 0) { @@ -4502,6 +4620,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai final TaskRecord task = mTaskHistory.get(i); if (task.isResizeable()) { if (inFreeformWindowingMode()) { + // TODO: Can be removed now since each freeform task is in its own stack. // For freeform stack we don't adjust the size of the tasks to match that // of the stack, but we do try to make sure the tasks are still contained // with the bounds of the stack. @@ -4889,7 +5008,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai voiceInteractor); // add the task to stack first, mTaskPositioner might need the stack association addTask(task, toTop, "createTaskRecord"); - final boolean isLockscreenShown = mService.mStackSupervisor.mKeyguardController + final boolean isLockscreenShown = mService.mStackSupervisor.getKeyguardController() .isKeyguardShowing(mDisplayId != INVALID_DISPLAY ? mDisplayId : DEFAULT_DISPLAY); if (!mStackSupervisor.getLaunchingBoundsController().layoutTask(task, info.windowLayout) && mBounds != null && task.isResizeable() && !isLockscreenShown) { diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 062083c47b26..745e9fbc9b9d 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -295,7 +295,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D WindowManagerService mWindowManager; DisplayManager mDisplayManager; - private final LaunchingBoundsController mLaunchingBoundsController; + private LaunchingBoundsController mLaunchingBoundsController; /** Counter for next free stack ID to use for dynamic activity stacks. */ private int mNextFreeStackId = 0; @@ -395,7 +395,6 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D private final SparseArray<IntArray> mDisplayAccessUIDs = new SparseArray<>(); private DisplayManagerInternal mDisplayManagerInternal; - private InputManagerInternal mInputManagerInternal; /** Used to keep resumeTopActivityUncheckedLocked() from being entered recursively */ boolean inResumeTopActivity; @@ -414,7 +413,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // Whether tasks have moved and we need to rank the tasks before next OOM scoring private boolean mTaskLayersChanged = true; - final ActivityMetricsLogger mActivityMetricsLogger; + private ActivityMetricsLogger mActivityMetricsLogger; private final ArrayList<ActivityRecord> mTmpActivityList = new ArrayList<>(); @@ -534,11 +533,13 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D */ boolean mIsDockMinimized; - final KeyguardController mKeyguardController; + private KeyguardController mKeyguardController; private PowerManager mPowerManager; private int mDeferResumeCount; + private boolean mInitialized; + /** * Description of a request to start a new activity, which has been held * due to app switches being disabled. @@ -574,14 +575,32 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D public ActivityStackSupervisor(ActivityManagerService service, Looper looper) { mService = service; mHandler = new ActivityStackSupervisorHandler(looper); + } + + public void initialize() { + if (mInitialized) { + return; + } + + mInitialized = true; mRunningTasks = createRunningTasks(); - mActivityMetricsLogger = new ActivityMetricsLogger(this, mService.mContext, looper); - mKeyguardController = new KeyguardController(service, this); + mActivityMetricsLogger = new ActivityMetricsLogger(this, mService.mContext, + mHandler.getLooper()); + mKeyguardController = new KeyguardController(mService, this); mLaunchingBoundsController = new LaunchingBoundsController(); mLaunchingBoundsController.registerDefaultPositioners(this); } + + public ActivityMetricsLogger getActivityMetricsLogger() { + return mActivityMetricsLogger; + } + + public KeyguardController getKeyguardController() { + return mKeyguardController; + } + void setRecentTasks(RecentTasks recentTasks) { mRecentTasks = recentTasks; mRecentTasks.registerCallback(this); @@ -624,8 +643,6 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D mHomeStack = mFocusedStack = mLastFocusedStack = getDefaultDisplay().getOrCreateStack( WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP); - - mInputManagerInternal = LocalServices.getService(InputManagerInternal.class); } } @@ -2945,6 +2962,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D * Returns the reparent target stack, creating the stack if necessary. This call also enforces * the various checks on tasks that are going to be reparented from one stack to another. */ + // TODO: Look into changing users to this method to ActivityDisplay.resolveWindowingMode() ActivityStack getReparentTargetStack(TaskRecord task, ActivityStack stack, boolean toTop) { final ActivityStack prevStack = task.getStack(); final int stackId = stack.mStackId; @@ -2971,8 +2989,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D + " reparent task=" + task + " to stackId=" + stackId); } - // Ensure that we aren't trying to move into a freeform stack without freeform - // support + // Ensure that we aren't trying to move into a freeform stack without freeform support if (stack.getWindowingMode() == WINDOWING_MODE_FREEFORM && !mService.mSupportsFreeformWindowManagement) { throw new IllegalArgumentException("Device doesn't support freeform, can not reparent" @@ -3376,7 +3393,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // When launching tasks behind, update the last active time of the top task after the new // task has been shown briefly - final ActivityRecord top = stack.topActivity(); + final ActivityRecord top = stack.getTopActivity(); if (top != null) { top.getTask().touchActiveTime(); } @@ -4200,10 +4217,9 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } } - final ActivityRecord topActivity = task.getTopActivity(); if (!task.supportsSplitScreenWindowingMode() || forceNonResizable) { - // Display a warning toast that we tried to put a non-dockable task in the docked - // stack. + // Display a warning toast that we tried to put an app that doesn't support split-screen + // in split-screen. mService.mTaskChangeNotificationController.notifyActivityDismissingDockedStack(); // Dismiss docked stack. If task appeared to be in docked stack but is not resizable - @@ -4217,6 +4233,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D return; } + final ActivityRecord topActivity = task.getTopActivity(); if (topActivity != null && topActivity.isNonResizableOrForcedResizable() && !topActivity.noDisplay) { final String packageName = topActivity.appInfo.packageName; @@ -4552,7 +4569,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D final ActivityStack stack = display.getChildAt(j); // Get top activity from a visible stack and add it to the list. if (stack.shouldBeVisible(null /* starting */)) { - final ActivityRecord top = stack.topActivity(); + final ActivityRecord top = stack.getTopActivity(); if (top != null) { if (stack == mFocusedStack) { topActivityTokens.add(0, top.appToken); diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 1c8028270f97..9b8cbc1043a5 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -90,6 +90,7 @@ import android.content.IntentSender; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.AuxiliaryResolveInfo; +import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; @@ -133,6 +134,7 @@ class ActivityStarter { private static final int INVALID_LAUNCH_MODE = -1; private final ActivityManagerService mService; + private final IPackageManager mPackageManager; private final ActivityStackSupervisor mSupervisor; private final ActivityStartInterceptor mInterceptor; @@ -232,8 +234,9 @@ class ActivityStarter { mIntentDelivered = false; } - ActivityStarter(ActivityManagerService service) { + ActivityStarter(ActivityManagerService service, IPackageManager packageManager) { mService = service; + mPackageManager = packageManager; mSupervisor = mService.mStackSupervisor; mInterceptor = new ActivityStartInterceptor(mService, mSupervisor); } @@ -264,8 +267,12 @@ class ActivityStarter { outActivity[0] = mLastStartActivityRecord[0]; } + return getExternalResult(mLastStartActivityResult); + } + + public static int getExternalResult(int result) { // Aborted results are treated as successes externally, but we must track them internally. - return mLastStartActivityResult != START_ABORTED ? mLastStartActivityResult : START_SUCCESS; + return result != START_ABORTED ? result : START_SUCCESS; } /** DO NOT call this method directly. Use {@link #startActivityLocked} instead. */ @@ -295,7 +302,8 @@ class ActivityStarter { } } - final int userId = aInfo != null ? UserHandle.getUserId(aInfo.applicationInfo.uid) : 0; + final int userId = aInfo != null && aInfo.applicationInfo != null + ? UserHandle.getUserId(aInfo.applicationInfo.uid) : 0; if (err == ActivityManager.START_SUCCESS) { Slog.i(TAG, "START u" + userId + " {" + intent.toShortString(true, true, true, false) @@ -371,7 +379,7 @@ class ActivityStarter { && sourceRecord.info.applicationInfo.uid != aInfo.applicationInfo.uid) { try { intent.addCategory(Intent.CATEGORY_VOICE); - if (!AppGlobals.getPackageManager().activitySupportsIntent( + if (!mPackageManager.activitySupportsIntent( intent.getComponent(), intent, resolvedType)) { Slog.w(TAG, "Activity being started in current voice task does not support voice: " @@ -389,7 +397,7 @@ class ActivityStarter { // If the caller is starting a new voice session, just make sure the target // is actually allowing it to run this way. try { - if (!AppGlobals.getPackageManager().activitySupportsIntent(intent.getComponent(), + if (!mPackageManager.activitySupportsIntent(intent.getComponent(), intent, resolvedType)) { Slog.w(TAG, "Activity being started in new voice task does not support: " @@ -665,7 +673,7 @@ class ActivityStarter { if (intent != null && intent.hasFileDescriptors()) { throw new IllegalArgumentException("File descriptors passed in Intent"); } - mSupervisor.mActivityMetricsLogger.notifyActivityLaunching(); + mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(); boolean componentSpecified = intent.getComponent() != null; // Save a copy in case ephemeral needs it @@ -859,7 +867,7 @@ class ActivityStarter { } } - mSupervisor.mActivityMetricsLogger.notifyActivityLaunched(res, outRecord[0]); + mSupervisor.getActivityMetricsLogger().notifyActivityLaunched(res, outRecord[0]); return res; } } @@ -1119,7 +1127,7 @@ class ActivityStarter { // If the activity being launched is the same as the one currently at the top, then // we need to check if it should only be launched once. final ActivityStack topStack = mSupervisor.mFocusedStack; - final ActivityRecord topFocused = topStack.topActivity(); + final ActivityRecord topFocused = topStack.getTopActivity(); final ActivityRecord top = topStack.topRunningNonDelayedActivityLocked(mNotTop); final boolean dontStart = top != null && mStartActivity.resultTo == null && top.realActivity.equals(mStartActivity.realActivity) @@ -1565,8 +1573,8 @@ class ActivityStarter { && (topTask != intentActivity.getTask() || topTask != focusStack.topTask()) && !mAvoidMoveToFront) { mStartActivity.intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); - if (mSourceRecord == null || (mSourceStack.topActivity() != null && - mSourceStack.topActivity().getTask() == mSourceRecord.getTask())) { + if (mSourceRecord == null || (mSourceStack.getTopActivity() != null && + mSourceStack.getTopActivity().getTask() == mSourceRecord.getTask())) { // We really do want to push this one into the user's face, right now. if (mLaunchTaskBehind && mSourceRecord != null) { intentActivity.setTaskToAffiliateWith(mSourceRecord.getTask()); @@ -1956,7 +1964,7 @@ class ActivityStarter { if (mDoResume) { mTargetStack.moveToFront("addingToTopTask"); } - final ActivityRecord prev = mTargetStack.topActivity(); + final ActivityRecord prev = mTargetStack.getTopActivity(); final TaskRecord task = (prev != null) ? prev.getTask() : mTargetStack.createTaskRecord( mSupervisor.getNextTaskIdForUserLocked(mStartActivity.userId), mStartActivity.info, mIntent, null, null, true); diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java index 40b1cac70883..949f51fe1b09 100644 --- a/services/core/java/com/android/server/am/TaskRecord.java +++ b/services/core/java/com/android/server/am/TaskRecord.java @@ -606,9 +606,8 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi final int toStackWindowingMode = toStack.getWindowingMode(); final ActivityRecord topActivity = getTopActivity(); - final boolean mightReplaceWindow = - replaceWindowsOnTaskMove(getWindowingMode(), toStackWindowingMode) - && topActivity != null; + final boolean mightReplaceWindow = topActivity != null + && replaceWindowsOnTaskMove(getWindowingMode(), toStackWindowingMode); if (mightReplaceWindow) { // We are about to relaunch the activity because its configuration changed due to // being maximized, i.e. size change. The activity will first remove the old window @@ -722,7 +721,6 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi } // TODO: Handle incorrect request to move before the actual move, not after. - final boolean inSplitScreenMode = supervisor.getDefaultDisplay().hasSplitScreenPrimaryStack(); supervisor.handleNonResizableTaskIfNeeded(this, preferredStack.getWindowingMode(), DEFAULT_DISPLAY, toStack); @@ -735,10 +733,9 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi } /** - * Returns true if the windows of tasks being moved to the target stack from the source - * stack should be replaced, meaning that window manager will keep the old window around - * until the new is ready. - * @hide + * @return True if the windows of tasks being moved to the target stack from the source stack + * should be replaced, meaning that window manager will keep the old window around until the new + * is ready. */ private static boolean replaceWindowsOnTaskMove( int sourceWindowingMode, int targetWindowingMode) { @@ -2062,11 +2059,8 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi } static Rect validateBounds(Rect bounds) { - if (bounds != null && bounds.isEmpty()) { - Slog.wtf(TAG, "Received strange task bounds: " + bounds, new Throwable()); - return null; - } - return bounds; + // TODO: Not needed once we have bounds in WindowConfiguration. + return (bounds != null && bounds.isEmpty()) ? null : bounds; } /** Updates the task's bounds and override configuration to match what is expected for the @@ -2095,7 +2089,7 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi } /** Returns the bounds that should be used to launch this task. */ - private Rect getLaunchBounds() { + Rect getLaunchBounds() { if (mStack == null) { return null; } diff --git a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java index ca6c9e78d0a2..1a1aa569b249 100644 --- a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java +++ b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java @@ -390,11 +390,9 @@ public class SyntheticPasswordManager { } public void removeUser(int userId) { - if (isWeaverAvailable()) { - for (long handle : mStorage.listSyntheticPasswordHandlesForUser(WEAVER_SLOT_NAME, - userId)) { - destroyWeaverSlot(handle, userId); - } + for (long handle : mStorage.listSyntheticPasswordHandlesForUser(SP_BLOB_NAME, userId)) { + destroyWeaverSlot(handle, userId); + destroySPBlobKey(getHandleName(handle)); } } diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 6cebdd64d8f9..557ba427e0f6 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -2720,9 +2720,9 @@ public class NotificationManagerService extends SystemService { protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (!DumpUtils.checkDumpAndUsageStatsPermission(getContext(), TAG, pw)) return; final DumpFilter filter = DumpFilter.parseFromArguments(args); - if (filter != null && filter.stats) { + if (filter.stats) { dumpJson(pw, filter); - } else if (filter != null && filter.proto) { + } else if (filter.proto) { dumpProto(fd, filter); } else { dumpImpl(pw, filter); @@ -2839,7 +2839,6 @@ public class NotificationManagerService extends SystemService { @Override public Policy getNotificationPolicy(String pkg) { - enforcePolicyAccess(pkg, "getNotificationPolicy"); final long identity = Binder.clearCallingIdentity(); try { return mZenModeHelper.getNotificationPolicy(); @@ -3236,7 +3235,7 @@ public class NotificationManagerService extends SystemService { return null; }; - private void dumpJson(PrintWriter pw, DumpFilter filter) { + private void dumpJson(PrintWriter pw, @NonNull DumpFilter filter) { JSONObject dump = new JSONObject(); try { dump.put("service", "Notification Manager"); @@ -3250,7 +3249,7 @@ public class NotificationManagerService extends SystemService { pw.println(dump); } - private void dumpProto(FileDescriptor fd, DumpFilter filter) { + private void dumpProto(FileDescriptor fd, @NonNull DumpFilter filter) { final ProtoOutputStream proto = new ProtoOutputStream(fd); synchronized (mNotificationLock) { long records = proto.start(NotificationServiceDumpProto.RECORDS); @@ -3332,7 +3331,7 @@ public class NotificationManagerService extends SystemService { proto.flush(); } - void dumpImpl(PrintWriter pw, DumpFilter filter) { + void dumpImpl(PrintWriter pw, @NonNull DumpFilter filter) { pw.print("Current Notification Manager state"); if (filter.filtered) { pw.print(" (filtered to "); pw.print(filter); pw.print(")"); @@ -5901,6 +5900,7 @@ public class NotificationManagerService extends SystemService { public boolean redact = true; public boolean proto = false; + @NonNull public static DumpFilter parseFromArguments(String[] args) { final DumpFilter filter = new DumpFilter(); for (int ai = 0; ai < args.length; ai++) { diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java index d7e9cf377532..d566a45011d7 100644 --- a/services/core/java/com/android/server/notification/RankingHelper.java +++ b/services/core/java/com/android/server/notification/RankingHelper.java @@ -22,6 +22,7 @@ import com.android.internal.logging.nano.MetricsProto; import com.android.internal.util.Preconditions; import com.android.internal.util.XmlUtils; +import android.annotation.NonNull; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationChannelGroup; @@ -915,21 +916,21 @@ public class RankingHelper implements RankingConfig { } } - public void dump(PrintWriter pw, String prefix, NotificationManagerService.DumpFilter filter) { - if (filter == null) { - final int N = mSignalExtractors.length; - pw.print(prefix); - pw.print("mSignalExtractors.length = "); - pw.println(N); - for (int i = 0; i < N; i++) { - pw.print(prefix); - pw.print(" "); - pw.println(mSignalExtractors[i]); - } - + public void dump(PrintWriter pw, String prefix, + @NonNull NotificationManagerService.DumpFilter filter) { + final int N = mSignalExtractors.length; + pw.print(prefix); + pw.print("mSignalExtractors.length = "); + pw.println(N); + for (int i = 0; i < N; i++) { pw.print(prefix); - pw.println("per-package config:"); + pw.print(" "); + pw.println(mSignalExtractors[i].getClass().getSimpleName()); } + + pw.print(prefix); + pw.println("per-package config:"); + pw.println("Records:"); synchronized (mRecords) { dumpRecords(pw, prefix, filter, mRecords); @@ -938,7 +939,8 @@ public class RankingHelper implements RankingConfig { dumpRecords(pw, prefix, filter, mRestoredWithoutUids); } - public void dump(ProtoOutputStream proto, NotificationManagerService.DumpFilter filter) { + public void dump(ProtoOutputStream proto, + @NonNull NotificationManagerService.DumpFilter filter) { final int N = mSignalExtractors.length; for (int i = 0; i < N; i++) { proto.write(RankingHelperProto.NOTIFICATION_SIGNAL_EXTRACTORS, @@ -952,12 +954,13 @@ public class RankingHelper implements RankingConfig { } private static void dumpRecords(ProtoOutputStream proto, long fieldId, - NotificationManagerService.DumpFilter filter, ArrayMap<String, Record> records) { + @NonNull NotificationManagerService.DumpFilter filter, + ArrayMap<String, Record> records) { final int N = records.size(); long fToken; for (int i = 0; i < N; i++) { final Record r = records.valueAt(i); - if (filter == null || filter.matches(r.pkg)) { + if (filter.matches(r.pkg)) { fToken = proto.start(fieldId); proto.write(RecordProto.PACKAGE, r.pkg); @@ -985,11 +988,12 @@ public class RankingHelper implements RankingConfig { } private static void dumpRecords(PrintWriter pw, String prefix, - NotificationManagerService.DumpFilter filter, ArrayMap<String, Record> records) { + @NonNull NotificationManagerService.DumpFilter filter, + ArrayMap<String, Record> records) { final int N = records.size(); for (int i = 0; i < N; i++) { final Record r = records.valueAt(i); - if (filter == null || filter.matches(r.pkg)) { + if (filter.matches(r.pkg)) { pw.print(prefix); pw.print(" AppSettings: "); pw.print(r.pkg); diff --git a/services/core/java/com/android/server/power/BatterySaverPolicy.java b/services/core/java/com/android/server/power/BatterySaverPolicy.java index 0c73fe85d08e..15121b809f95 100644 --- a/services/core/java/com/android/server/power/BatterySaverPolicy.java +++ b/services/core/java/com/android/server/power/BatterySaverPolicy.java @@ -15,25 +15,31 @@ */ package com.android.server.power; -import android.annotation.IntDef; import android.content.ContentResolver; +import android.content.Context; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; -import android.os.PowerManager; import android.os.PowerManager.ServiceType; +import android.os.PowerSaveState; import android.provider.Settings; +import android.provider.Settings.Global; +import android.text.TextUtils; +import android.util.ArrayMap; import android.util.KeyValueListParser; import android.util.Slog; -import android.os.PowerSaveState; + +import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.R; import java.io.PrintWriter; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; /** * Class to decide whether to turn on battery saver mode for specific service + * + * Test: atest BatterySaverPolicyTest */ public class BatterySaverPolicy extends ContentObserver { private static final String TAG = "BatterySaverPolicy"; @@ -60,7 +66,12 @@ public class BatterySaverPolicy extends ContentObserver { private static final String KEY_FORCE_ALL_APPS_STANDBY_ALARMS = "force_all_apps_standby_alarms"; private static final String KEY_OPTIONAL_SENSORS_DISABLED = "optional_sensors_disabled"; - private final KeyValueListParser mParser = new KeyValueListParser(','); + private static final String KEY_SCREEN_ON_FILE_PREFIX = "file-on:"; + private static final String KEY_SCREEN_OFF_FILE_PREFIX = "file-off:"; + + private static String mSettings; + private static String mDeviceSpecificSettings; + private static String mDeviceSpecificSettingsSource; // For dump() only. /** * {@code true} if vibration is disabled in battery saver mode. @@ -159,55 +170,174 @@ public class BatterySaverPolicy extends ContentObserver { */ private boolean mOptionalSensorsDisabled; + private final Object mLock = new Object(); + + @GuardedBy("mLock") + private Context mContext; + + @GuardedBy("mLock") private ContentResolver mContentResolver; + @GuardedBy("mLock") + private final ArrayList<BatterySaverPolicyListener> mListeners = new ArrayList<>(); + + /** + * List of [Filename -> content] that should be written when battery saver is activated + * and the screen is on. + * + * We use this to change the max CPU frequencies. + */ + @GuardedBy("mLock") + private ArrayMap<String, String> mScreenOnFiles; + + /** + * List of [Filename -> content] that should be written when battery saver is activated + * and the screen is off. + * + * We use this to change the max CPU frequencies. + */ + @GuardedBy("mLock") + private ArrayMap<String, String> mScreenOffFiles; + + public interface BatterySaverPolicyListener { + void onBatterySaverPolicyChanged(BatterySaverPolicy policy); + } + public BatterySaverPolicy(Handler handler) { super(handler); } - public void start(ContentResolver contentResolver) { - mContentResolver = contentResolver; + public void systemReady(Context context) { + synchronized (mLock) { + mContext = context; + mContentResolver = context.getContentResolver(); + + mContentResolver.registerContentObserver(Settings.Global.getUriFor( + Settings.Global.BATTERY_SAVER_CONSTANTS), false, this); + mContentResolver.registerContentObserver(Settings.Global.getUriFor( + Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS), false, this); + } + onChange(true, null); + } + + public void addListener(BatterySaverPolicyListener listener) { + synchronized (mLock) { + mListeners.add(listener); + } + } + + @VisibleForTesting + String getGlobalSetting(String key) { + return Settings.Global.getString(mContentResolver, key); + } + + @VisibleForTesting + int getDeviceSpecificConfigResId() { + return R.string.config_batterySaverDeviceSpecificConfig; + } - mContentResolver.registerContentObserver(Settings.Global.getUriFor( - Settings.Global.BATTERY_SAVER_CONSTANTS), false, this); + @VisibleForTesting + void onChangeForTest() { onChange(true, null); } @Override public void onChange(boolean selfChange, Uri uri) { - final String value = Settings.Global.getString(mContentResolver, - Settings.Global.BATTERY_SAVER_CONSTANTS); - updateConstants(value); + final BatterySaverPolicyListener[] listeners; + synchronized (mLock) { + // Load the non-device-specific setting. + final String setting = getGlobalSetting(Settings.Global.BATTERY_SAVER_CONSTANTS); + + // Load the device specific setting. + // We first check the global setting, and if it's empty or the string "null" is set, + // use the default value from config.xml. + String deviceSpecificSetting = getGlobalSetting( + Settings.Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS); + mDeviceSpecificSettingsSource = + Settings.Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS; + + if (TextUtils.isEmpty(deviceSpecificSetting) || "null".equals(deviceSpecificSetting)) { + deviceSpecificSetting = + mContext.getString(getDeviceSpecificConfigResId()); + mDeviceSpecificSettingsSource = "(overlay)"; + } + + // Update. + updateConstantsLocked(setting, deviceSpecificSetting); + + listeners = mListeners.toArray(new BatterySaverPolicyListener[mListeners.size()]); + } + + // Notify the listeners. + for (BatterySaverPolicyListener listener : listeners) { + listener.onBatterySaverPolicyChanged(this); + } } @VisibleForTesting - void updateConstants(final String value) { - synchronized (BatterySaverPolicy.this) { - try { - mParser.setString(value); - } catch (IllegalArgumentException e) { - Slog.e(TAG, "Bad battery saver constants"); + void updateConstantsLocked(final String setting, final String deviceSpecificSetting) { + mSettings = setting; + mDeviceSpecificSettings = deviceSpecificSetting; + + final KeyValueListParser parser = new KeyValueListParser(','); + + // Non-device-specific parameters. + try { + parser.setString(setting); + } catch (IllegalArgumentException e) { + Slog.wtf(TAG, "Bad battery saver constants: " + setting); + } + + mVibrationDisabled = parser.getBoolean(KEY_VIBRATION_DISABLED, true); + mAnimationDisabled = parser.getBoolean(KEY_ANIMATION_DISABLED, true); + mSoundTriggerDisabled = parser.getBoolean(KEY_SOUNDTRIGGER_DISABLED, true); + mFullBackupDeferred = parser.getBoolean(KEY_FULLBACKUP_DEFERRED, true); + mKeyValueBackupDeferred = parser.getBoolean(KEY_KEYVALUE_DEFERRED, true); + mFireWallDisabled = parser.getBoolean(KEY_FIREWALL_DISABLED, false); + mAdjustBrightnessDisabled = parser.getBoolean(KEY_ADJUST_BRIGHTNESS_DISABLED, false); + mAdjustBrightnessFactor = parser.getFloat(KEY_ADJUST_BRIGHTNESS_FACTOR, 0.5f); + mDataSaverDisabled = parser.getBoolean(KEY_DATASAVER_DISABLED, true); + mForceAllAppsStandbyJobs = parser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY_JOBS, true); + mForceAllAppsStandbyAlarms = + parser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY_ALARMS, true); + mOptionalSensorsDisabled = parser.getBoolean(KEY_OPTIONAL_SENSORS_DISABLED, true); + + // Get default value from Settings.Secure + final int defaultGpsMode = Settings.Secure.getInt(mContentResolver, SECURE_KEY_GPS_MODE, + GPS_MODE_NO_CHANGE); + mGpsMode = parser.getInt(KEY_GPS_MODE, defaultGpsMode); + + // Non-device-specific parameters. + try { + parser.setString(deviceSpecificSetting); + } catch (IllegalArgumentException e) { + Slog.wtf(TAG, "Bad device specific battery saver constants: " + + deviceSpecificSetting); + } + + mScreenOnFiles = collectParams(parser, KEY_SCREEN_ON_FILE_PREFIX); + mScreenOffFiles = collectParams(parser, KEY_SCREEN_OFF_FILE_PREFIX); + } + + private static ArrayMap<String, String> collectParams( + KeyValueListParser parser, String prefix) { + final ArrayMap<String, String> ret = new ArrayMap<>(); + + for (int i = parser.size() - 1; i >= 0; i--) { + final String key = parser.keyAt(i); + if (!key.startsWith(prefix)) { + continue; + } + final String path = key.substring(prefix.length()); + + if (!(path.startsWith("/sys/") || path.startsWith("/proc"))) { + Slog.wtf(TAG, "Invalid path: " + path); + continue; } - mVibrationDisabled = mParser.getBoolean(KEY_VIBRATION_DISABLED, true); - mAnimationDisabled = mParser.getBoolean(KEY_ANIMATION_DISABLED, true); - mSoundTriggerDisabled = mParser.getBoolean(KEY_SOUNDTRIGGER_DISABLED, true); - mFullBackupDeferred = mParser.getBoolean(KEY_FULLBACKUP_DEFERRED, true); - mKeyValueBackupDeferred = mParser.getBoolean(KEY_KEYVALUE_DEFERRED, true); - mFireWallDisabled = mParser.getBoolean(KEY_FIREWALL_DISABLED, false); - mAdjustBrightnessDisabled = mParser.getBoolean(KEY_ADJUST_BRIGHTNESS_DISABLED, false); - mAdjustBrightnessFactor = mParser.getFloat(KEY_ADJUST_BRIGHTNESS_FACTOR, 0.5f); - mDataSaverDisabled = mParser.getBoolean(KEY_DATASAVER_DISABLED, true); - mForceAllAppsStandbyJobs = mParser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY_JOBS, true); - mForceAllAppsStandbyAlarms = - mParser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY_ALARMS, true); - mOptionalSensorsDisabled = mParser.getBoolean(KEY_OPTIONAL_SENSORS_DISABLED, true); - - // Get default value from Settings.Secure - final int defaultGpsMode = Settings.Secure.getInt(mContentResolver, SECURE_KEY_GPS_MODE, - GPS_MODE_NO_CHANGE); - mGpsMode = mParser.getInt(KEY_GPS_MODE, defaultGpsMode); + ret.put(path, parser.getString(key, "")); } + return ret; } /** @@ -220,7 +350,7 @@ public class BatterySaverPolicy extends ContentObserver { * @return State data that contains battery saver data */ public PowerSaveState getBatterySaverPolicy(@ServiceType int type, boolean realMode) { - synchronized (BatterySaverPolicy.this) { + synchronized (mLock) { final PowerSaveState.Builder builder = new PowerSaveState.Builder() .setGlobalBatterySaverEnabled(realMode); if (!realMode) { @@ -273,25 +403,57 @@ public class BatterySaverPolicy extends ContentObserver { } } + public ArrayMap<String, String> getFileValues(boolean screenOn) { + synchronized (mLock) { + return screenOn ? mScreenOnFiles : mScreenOffFiles; + } + } + public void dump(PrintWriter pw) { - pw.println(); - pw.println("Battery saver policy"); - pw.println(" Settings " + Settings.Global.BATTERY_SAVER_CONSTANTS); - pw.println(" value: " + Settings.Global.getString(mContentResolver, - Settings.Global.BATTERY_SAVER_CONSTANTS)); - - pw.println(); - pw.println(" " + KEY_VIBRATION_DISABLED + "=" + mVibrationDisabled); - pw.println(" " + KEY_ANIMATION_DISABLED + "=" + mAnimationDisabled); - pw.println(" " + KEY_FULLBACKUP_DEFERRED + "=" + mFullBackupDeferred); - pw.println(" " + KEY_KEYVALUE_DEFERRED + "=" + mKeyValueBackupDeferred); - pw.println(" " + KEY_FIREWALL_DISABLED + "=" + mFireWallDisabled); - pw.println(" " + KEY_DATASAVER_DISABLED + "=" + mDataSaverDisabled); - pw.println(" " + KEY_ADJUST_BRIGHTNESS_DISABLED + "=" + mAdjustBrightnessDisabled); - pw.println(" " + KEY_ADJUST_BRIGHTNESS_FACTOR + "=" + mAdjustBrightnessFactor); - pw.println(" " + KEY_GPS_MODE + "=" + mGpsMode); - pw.println(" " + KEY_FORCE_ALL_APPS_STANDBY_JOBS + "=" + mForceAllAppsStandbyJobs); - pw.println(" " + KEY_FORCE_ALL_APPS_STANDBY_ALARMS + "=" + mForceAllAppsStandbyAlarms); - pw.println(" " + KEY_OPTIONAL_SENSORS_DISABLED + "=" + mOptionalSensorsDisabled); + synchronized (mLock) { + pw.println(); + pw.println("Battery saver policy"); + pw.println(" Settings " + Settings.Global.BATTERY_SAVER_CONSTANTS); + pw.println(" value: " + mSettings); + pw.println(" Settings " + mDeviceSpecificSettingsSource); + pw.println(" value: " + mDeviceSpecificSettings); + + pw.println(); + pw.println(" " + KEY_VIBRATION_DISABLED + "=" + mVibrationDisabled); + pw.println(" " + KEY_ANIMATION_DISABLED + "=" + mAnimationDisabled); + pw.println(" " + KEY_FULLBACKUP_DEFERRED + "=" + mFullBackupDeferred); + pw.println(" " + KEY_KEYVALUE_DEFERRED + "=" + mKeyValueBackupDeferred); + pw.println(" " + KEY_FIREWALL_DISABLED + "=" + mFireWallDisabled); + pw.println(" " + KEY_DATASAVER_DISABLED + "=" + mDataSaverDisabled); + pw.println(" " + KEY_ADJUST_BRIGHTNESS_DISABLED + "=" + mAdjustBrightnessDisabled); + pw.println(" " + KEY_ADJUST_BRIGHTNESS_FACTOR + "=" + mAdjustBrightnessFactor); + pw.println(" " + KEY_GPS_MODE + "=" + mGpsMode); + pw.println(" " + KEY_FORCE_ALL_APPS_STANDBY_JOBS + "=" + mForceAllAppsStandbyJobs); + pw.println(" " + KEY_FORCE_ALL_APPS_STANDBY_ALARMS + "=" + mForceAllAppsStandbyAlarms); + pw.println(" " + KEY_OPTIONAL_SENSORS_DISABLED + "=" + mOptionalSensorsDisabled); + pw.println(); + + pw.print(" Screen On Files:\n"); + dumpMap(pw, " ", mScreenOnFiles); + pw.println(); + + pw.print(" Screen Off Files:\n"); + dumpMap(pw, " ", mScreenOffFiles); + pw.println(); + } + } + + private void dumpMap(PrintWriter pw, String prefix, ArrayMap<String, String> map) { + if (map == null) { + return; + } + final int size = map.size(); + for (int i = 0; i < size; i++) { + pw.print(prefix); + pw.print(map.keyAt(i)); + pw.print(": '"); + pw.print(map.valueAt(i)); + pw.println("'"); + } } } diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index a153fdfb67c3..a47b8095dae7 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -63,7 +63,6 @@ import android.service.vr.IVrManager; import android.service.vr.IVrStateCallbacks; import android.util.EventLog; import android.util.KeyValueListParser; -import android.util.Log; import android.util.PrintWriterPrinter; import android.util.Slog; import android.util.SparseArray; @@ -71,7 +70,6 @@ import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import android.view.Display; import android.view.WindowManagerPolicy; -import android.widget.Toast; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.IAppOpsService; @@ -92,10 +90,8 @@ import com.android.server.Watchdog; import com.android.server.am.BatteryStatsService; import com.android.server.lights.Light; import com.android.server.lights.LightsManager; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; +import com.android.server.power.batterysaver.BatterySaverController; + import libcore.util.Objects; import java.io.FileDescriptor; @@ -228,6 +224,7 @@ public final class PowerManagerService extends SystemService private final PowerManagerHandler mHandler; private final AmbientDisplayConfiguration mAmbientDisplayConfiguration; private final BatterySaverPolicy mBatterySaverPolicy; + private final BatterySaverController mBatterySaverController; private LightsManager mLightsManager; private BatteryManagerInternal mBatteryManagerInternal; @@ -555,9 +552,6 @@ public final class PowerManagerService extends SystemService // True if double tap to wake is enabled private boolean mDoubleTapWakeEnabled; - private final ArrayList<PowerManagerInternal.LowPowerModeListener> mLowPowerModeListeners - = new ArrayList<PowerManagerInternal.LowPowerModeListener>(); - // True if we are currently in VR Mode. private boolean mIsVrModeEnabled; @@ -645,7 +639,10 @@ public final class PowerManagerService extends SystemService mHandler = new PowerManagerHandler(mHandlerThread.getLooper()); mConstants = new Constants(mHandler); mAmbientDisplayConfiguration = new AmbientDisplayConfiguration(mContext); + mBatterySaverPolicy = new BatterySaverPolicy(mHandler); + mBatterySaverController = new BatterySaverController(mContext, + BackgroundThread.get().getLooper(), mBatterySaverPolicy); synchronized (mLock) { mWakeLockSuspendBlocker = createSuspendBlockerLocked("PowerManagerService.WakeLocks"); @@ -670,7 +667,6 @@ public final class PowerManagerService extends SystemService PowerManagerService(Context context, BatterySaverPolicy batterySaverPolicy) { super(context); - mBatterySaverPolicy = batterySaverPolicy; mContext = context; mHandlerThread = new ServiceThread(TAG, Process.THREAD_PRIORITY_DISPLAY, false /*allowIo*/); @@ -680,6 +676,10 @@ public final class PowerManagerService extends SystemService mAmbientDisplayConfiguration = new AmbientDisplayConfiguration(mContext); mDisplaySuspendBlocker = null; mWakeLockSuspendBlocker = null; + + mBatterySaverPolicy = batterySaverPolicy; + mBatterySaverController = new BatterySaverController(context, + BackgroundThread.getHandler().getLooper(), batterySaverPolicy); } @Override @@ -752,6 +752,7 @@ public final class PowerManagerService extends SystemService mDisplayManagerInternal.initPowerManagement( mDisplayPowerCallbacks, mHandler, sensorManager); + // Go. readConfigurationLocked(); updateSettingsLocked(); @@ -761,7 +762,9 @@ public final class PowerManagerService extends SystemService final ContentResolver resolver = mContext.getContentResolver(); mConstants.start(resolver); - mBatterySaverPolicy.start(resolver); + + mBatterySaverController.systemReady(); + mBatterySaverPolicy.systemReady(mContext); // Register for settings changes. resolver.registerContentObserver(Settings.Secure.getUriFor( @@ -996,43 +999,9 @@ public final class PowerManagerService extends SystemService if (mLowPowerModeEnabled != lowPowerModeEnabled) { mLowPowerModeEnabled = lowPowerModeEnabled; - powerHintInternal(PowerHint.LOW_POWER, lowPowerModeEnabled ? 1 : 0); - postAfterBootCompleted(new Runnable() { - @Override - public void run() { - Intent intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING) - .putExtra(PowerManager.EXTRA_POWER_SAVE_MODE, mLowPowerModeEnabled) - .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); - mContext.sendBroadcast(intent); - ArrayList<PowerManagerInternal.LowPowerModeListener> listeners; - synchronized (mLock) { - listeners = new ArrayList<PowerManagerInternal.LowPowerModeListener>( - mLowPowerModeListeners); - } - for (int i = 0; i < listeners.size(); i++) { - final PowerManagerInternal.LowPowerModeListener listener = listeners.get(i); - final PowerSaveState result = - mBatterySaverPolicy.getBatterySaverPolicy( - listener.getServiceType(), lowPowerModeEnabled); - listener.onLowPowerModeChanged(result); - } - intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED); - intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); - mContext.sendBroadcastAsUser(intent, UserHandle.ALL); - // Send internal version that requires signature permission. - intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED_INTERNAL); - intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); - mContext.sendBroadcastAsUser(intent, UserHandle.ALL, - Manifest.permission.DEVICE_POWER); - - // STOPSHIP Remove the toast. - if (mLowPowerModeEnabled) { - Toast.makeText(mContext, - com.android.internal.R.string.battery_saver_warning, - Toast.LENGTH_LONG).show(); - } - } - }); + + postAfterBootCompleted(() -> + mBatterySaverController.enableBatterySaver(mLowPowerModeEnabled)); } } @@ -3136,7 +3105,7 @@ public final class PowerManagerService extends SystemService mIsVrModeEnabled = enabled; } - private void powerHintInternal(int hintId, int data) { + public static void powerHintInternal(int hintId, int data) { nativeSendPowerHint(hintId, data); } @@ -4405,7 +4374,7 @@ public final class PowerManagerService extends SystemService * Gets the reason for the last time the phone had to reboot. * * @return The reason the phone last shut down as an int or - * {@link PowerManager.SHUTDOWN_REASON_UNKNOWN} if the file could not be opened. + * {@link PowerManager#SHUTDOWN_REASON_UNKNOWN} if the file could not be opened. */ @Override // Binder call public int getLastShutdownReason() { @@ -4728,9 +4697,7 @@ public final class PowerManagerService extends SystemService @Override public void registerLowPowerModeObserver(LowPowerModeListener listener) { - synchronized (mLock) { - mLowPowerModeListeners.add(listener); - } + mBatterySaverController.addListener(listener); } @Override diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java new file mode 100644 index 000000000000..b3e853838069 --- /dev/null +++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java @@ -0,0 +1,239 @@ +/* + * Copyright (C) 2017 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.power.batterysaver; + +import android.Manifest; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.hardware.power.V1_0.PowerHint; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.os.PowerManager; +import android.os.PowerManagerInternal.LowPowerModeListener; +import android.os.PowerSaveState; +import android.os.UserHandle; +import android.util.ArrayMap; +import android.util.Slog; +import android.widget.Toast; + +import com.android.internal.annotations.GuardedBy; +import com.android.internal.util.Preconditions; +import com.android.server.power.BatterySaverPolicy; +import com.android.server.power.BatterySaverPolicy.BatterySaverPolicyListener; +import com.android.server.power.PowerManagerService; + +import java.util.ArrayList; + +/** + * Responsible for battery saver mode transition logic. + */ +public class BatterySaverController implements BatterySaverPolicyListener { + static final String TAG = "BatterySaverController"; + + static final boolean DEBUG = false; // DO NOT MERGE WITH TRUE + + private final Object mLock = new Object(); + private final Context mContext; + private final MyHandler mHandler; + private final FileUpdater mFileUpdater; + + private PowerManager mPowerManager; + + private final BatterySaverPolicy mBatterySaverPolicy; + + @GuardedBy("mLock") + private final ArrayList<LowPowerModeListener> mListeners = new ArrayList<>(); + + @GuardedBy("mLock") + private boolean mEnabled; + + /** + * Keep track of the previous enabled state, which we use to decide when to send broadcasts, + * which we don't want to send only when the screen state changes. + */ + @GuardedBy("mLock") + private boolean mWasEnabled; + + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + switch (intent.getAction()) { + case Intent.ACTION_SCREEN_ON: + case Intent.ACTION_SCREEN_OFF: + mHandler.postStateChanged(); + break; + } + } + }; + + /** + * Constructor. + */ + public BatterySaverController(Context context, Looper looper, BatterySaverPolicy policy) { + mContext = context; + mHandler = new MyHandler(looper); + mBatterySaverPolicy = policy; + mBatterySaverPolicy.addListener(this); + mFileUpdater = new FileUpdater(context); + } + + /** + * Add a listener. + */ + public void addListener(LowPowerModeListener listener) { + synchronized (mLock) { + mListeners.add(listener); + } + } + + /** + * Called by {@link PowerManagerService} on system ready.. + */ + public void systemReady() { + final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); + filter.addAction(Intent.ACTION_SCREEN_OFF); + mContext.registerReceiver(mReceiver, filter); + } + + private PowerManager getPowerManager() { + if (mPowerManager == null) { + mPowerManager = + Preconditions.checkNotNull(mContext.getSystemService(PowerManager.class)); + } + return mPowerManager; + } + + @Override + public void onBatterySaverPolicyChanged(BatterySaverPolicy policy) { + mHandler.postStateChanged(); + } + + private class MyHandler extends Handler { + private final int MSG_STATE_CHANGED = 1; + + public MyHandler(Looper looper) { + super(looper); + } + + public void postStateChanged() { + obtainMessage(MSG_STATE_CHANGED).sendToTarget(); + } + + @Override + public void dispatchMessage(Message msg) { + switch (msg.what) { + case MSG_STATE_CHANGED: + handleBatterySaverStateChanged(); + break; + } + } + } + + /** + * Called by {@link PowerManagerService} to update the battery saver stete. + */ + public void enableBatterySaver(boolean enable) { + synchronized (mLock) { + if (mEnabled == enable) { + return; + } + mEnabled = enable; + + mHandler.postStateChanged(); + } + } + + /** + * Dispatch power save events to the listeners. + * + * This is always called on the handler thread. + */ + void handleBatterySaverStateChanged() { + final LowPowerModeListener[] listeners; + + final boolean wasEnabled; + final boolean enabled; + final boolean isScreenOn = getPowerManager().isInteractive(); + final ArrayMap<String, String> fileValues; + + synchronized (mLock) { + Slog.i(TAG, "Battery saver enabled: screen on=" + isScreenOn); + + listeners = mListeners.toArray(new LowPowerModeListener[mListeners.size()]); + wasEnabled = mWasEnabled; + enabled = mEnabled; + + if (enabled) { + fileValues = mBatterySaverPolicy.getFileValues(isScreenOn); + } else { + fileValues = null; + } + } + + PowerManagerService.powerHintInternal(PowerHint.LOW_POWER, enabled ? 1 : 0); + + if (enabled) { + // STOPSHIP Remove the toast. + Toast.makeText(mContext, + com.android.internal.R.string.battery_saver_warning, + Toast.LENGTH_LONG).show(); + } + + if (fileValues == null || fileValues.size() == 0) { + mFileUpdater.restoreDefault(); + } else { + mFileUpdater.writeFiles(fileValues); + } + + if (enabled != wasEnabled) { + if (DEBUG) { + Slog.i(TAG, "Sending broadcasts for mode: " + enabled); + } + + // Send the broadcasts and notify the listeners. We only do this when the battery saver + // mode changes, but not when only the screen state changes. + Intent intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING) + .putExtra(PowerManager.EXTRA_POWER_SAVE_MODE, enabled) + .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); + mContext.sendBroadcast(intent); + + intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED); + intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); + mContext.sendBroadcastAsUser(intent, UserHandle.ALL); + + // Send internal version that requires signature permission. + intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED_INTERNAL); + intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); + mContext.sendBroadcastAsUser(intent, UserHandle.ALL, + Manifest.permission.DEVICE_POWER); + + + for (LowPowerModeListener listener : listeners) { + final PowerSaveState result = + mBatterySaverPolicy.getBatterySaverPolicy( + listener.getServiceType(), enabled); + listener.onLowPowerModeChanged(result); + } + } + + synchronized (mLock) { + mWasEnabled = enabled; + } + } +} diff --git a/services/core/java/com/android/server/power/batterysaver/FileUpdater.java b/services/core/java/com/android/server/power/batterysaver/FileUpdater.java new file mode 100644 index 000000000000..cfe8fc490e0a --- /dev/null +++ b/services/core/java/com/android/server/power/batterysaver/FileUpdater.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2017 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.power.batterysaver; + +import android.content.Context; +import android.util.ArrayMap; +import android.util.Slog; + +/** + * Used by {@link BatterySaverController} to write values to /sys/ (and possibly /proc/ too) files + * with retry and to restore the original values. + * + * TODO Implement it + */ +public class FileUpdater { + private static final String TAG = BatterySaverController.TAG; + + private static final boolean DEBUG = BatterySaverController.DEBUG; + + private final Object mLock = new Object(); + private final Context mContext; + + public FileUpdater(Context context) { + mContext = context; + } + + public void writeFiles(ArrayMap<String, String> fileValues) { + if (DEBUG) { + final int size = fileValues.size(); + for (int i = 0; i < size; i++) { + Slog.d(TAG, "Writing '" + fileValues.valueAt(i) + + "' to '" + fileValues.keyAt(i) + "'"); + } + } + } + + public void restoreDefault() { + if (DEBUG) { + Slog.d(TAG, "Resetting file default values"); + } + } +} diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index e8ebbe4dd805..5493207d0f8a 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -756,7 +756,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC mBootsToVr = SystemProperties.getBoolean("ro.boot.vr", false); mUseStandbyToExitVrMode = mBootsToVr - && SystemProperties.getBoolean("persist.vr.use_standby_to_exit_vr_mode", false); + && SystemProperties.getBoolean("persist.vr.use_standby_to_exit_vr_mode", true); publishLocalService(VrManagerInternal.class, new LocalService()); publishBinderService(Context.VR_SERVICE, mVrManager.asBinder()); } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index c4b810f7d30b..4d839d009c56 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -16,6 +16,7 @@ package com.android.server.wm; +import static android.app.ActivityManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; @@ -1488,7 +1489,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo * Returns the topmost stack on the display that is compatible with the input windowing mode. * Null is no compatible stack on the display. */ - TaskStack getStack(int windowingMode) { + TaskStack getTopStackInWindowingMode(int windowingMode) { return getStack(windowingMode, ACTIVITY_TYPE_UNDEFINED); } @@ -1764,10 +1765,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final TaskStack stack = new TaskStack(mService, stackId, controller); mTaskStackContainers.addStackToDisplay(stack, onTop); - - if (stack.inSplitScreenPrimaryWindowingMode()) { - mDividerControllerLocked.notifyDockedStackExistsChanged(true); - } return stack; } @@ -2274,7 +2271,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo /** Returns true if the stack in the windowing mode is visible. */ boolean isStackVisible(int windowingMode) { - final TaskStack stack = getStack(windowingMode); + final TaskStack stack = getTopStackInWindowingMode(windowingMode); return stack != null && stack.isVisible(); } @@ -3391,6 +3388,12 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } for (int i = mTaskStackContainers.getChildCount() - 1; i >= 0; --i) { final TaskStack stack = mTaskStackContainers.getChildAt(i); + if (activityType == ACTIVITY_TYPE_UNDEFINED + && windowingMode == stack.getWindowingMode()) { + // Passing in undefined type means we want to match the topmost stack with the + // windowing mode. + return stack; + } if (stack.isCompatible(windowingMode, activityType)) { return stack; } @@ -3461,6 +3464,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo + " already exist on display=" + this + " stack=" + stack); } mSplitScreenPrimaryStack = stack; + mDividerControllerLocked.notifyDockedStackExistsChanged(true); } } @@ -3471,6 +3475,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo mPinnedStack = null; } else if (stack == mSplitScreenPrimaryStack) { mSplitScreenPrimaryStack = null; + // Re-set the split-screen create mode whenever the split-screen stack is removed. + mService.setDockedStackCreateStateLocked( + SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT, null /* initialBounds */); + mDividerControllerLocked.notifyDockedStackExistsChanged(false); } } diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index e693e5af46a1..d79ba897150b 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -559,7 +559,7 @@ public class DockedStackDividerController implements DimLayerUser { void setResizeDimLayer(boolean visible, int targetWindowingMode, float alpha) { // TODO: Maybe only allow split-screen windowing modes? final TaskStack stack = targetWindowingMode != WINDOWING_MODE_UNDEFINED - ? mDisplayContent.getStack(targetWindowingMode) + ? mDisplayContent.getTopStackInWindowingMode(targetWindowingMode) : null; final TaskStack dockedStack = mDisplayContent.getSplitScreenPrimaryStack(); boolean visibleAndValid = visible && stack != null && dockedStack != null; @@ -663,11 +663,15 @@ public class DockedStackDividerController implements DimLayerUser { if (mMinimizedDock && mService.mPolicy.isKeyguardShowingAndNotOccluded()) { return; } - final TaskStack fullscreenStack = mDisplayContent.getStack( + final TaskStack topSecondaryStack = mDisplayContent.getTopStackInWindowingMode( WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); - final boolean homeVisible = homeTask.getTopVisibleAppToken() != null; - final boolean homeBehind = fullscreenStack != null && fullscreenStack.isVisible(); - setMinimizedDockedStack(homeVisible && !homeBehind, animate); + boolean homeVisible = homeTask.getTopVisibleAppToken() != null; + if (homeVisible && topSecondaryStack != null) { + // Home should only be considered visible if it is greater or equal to the top secondary + // stack in terms of z-order. + homeVisible = homeStack.compareTo(topSecondaryStack) >= 0; + } + setMinimizedDockedStack(homeVisible, animate); } private boolean isWithinDisplay(Task task) { diff --git a/services/core/java/com/android/server/wm/StackWindowController.java b/services/core/java/com/android/server/wm/StackWindowController.java index aff1bc62563f..95c1d536123f 100644 --- a/services/core/java/com/android/server/wm/StackWindowController.java +++ b/services/core/java/com/android/server/wm/StackWindowController.java @@ -225,11 +225,13 @@ public class StackWindowController } } - private void getRawBounds(Rect outBounds) { - if (mContainer.getRawFullscreen()) { - outBounds.setEmpty(); - } else { - mContainer.getRawBounds(outBounds); + public void getRawBounds(Rect outBounds) { + synchronized (mWindowMap) { + if (mContainer.getRawFullscreen()) { + outBounds.setEmpty(); + } else { + mContainer.getRawBounds(outBounds); + } } } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index dde79462e39f..053fb47023e1 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -685,9 +685,12 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye public void onConfigurationChanged(Configuration newParentConfig) { final int prevWindowingMode = getWindowingMode(); super.onConfigurationChanged(newParentConfig); - if (mDisplayContent != null && prevWindowingMode != getWindowingMode()) { - mDisplayContent.onStackWindowingModeChanged(this); + final int windowingMode = getWindowingMode(); + if (mDisplayContent == null || prevWindowingMode == windowingMode) { + return; } + mDisplayContent.onStackWindowingModeChanged(this); + updateBoundsForWindowModeChange(); } @Override @@ -699,39 +702,41 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye mDisplayContent = dc; mAnimationBackgroundSurface = new DimLayer(mService, this, mDisplayContent.getDisplayId(), "animation background stackId=" + mStackId); + updateBoundsForWindowModeChange(); + super.onDisplayChanged(dc); + } + private void updateBoundsForWindowModeChange() { Rect bounds = null; - final TaskStack dockedStack = dc.getSplitScreenPrimaryStackIgnoringVisibility(); - if (inSplitScreenPrimaryWindowingMode() - || (dockedStack != null && inSplitScreenSecondaryWindowingMode() - && !dockedStack.fillsParent())) { + final boolean inSplitScreenPrimary = inSplitScreenPrimaryWindowingMode(); + final TaskStack splitScreenStack = + mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility(); + if (inSplitScreenPrimary || (splitScreenStack != null + && inSplitScreenSecondaryWindowingMode() && !splitScreenStack.fillsParent())) { // The existence of a docked stack affects the size of other static stack created since // the docked stack occupies a dedicated region on screen, but only if the dock stack is // not fullscreen. If it's fullscreen, it means that we are in the transition of // dismissing it, so we must not resize this stack. bounds = new Rect(); - dc.getLogicalDisplayRect(mTmpRect); + mDisplayContent.getLogicalDisplayRect(mTmpRect); mTmpRect2.setEmpty(); - if (dockedStack != null) { - dockedStack.getRawBounds(mTmpRect2); + if (splitScreenStack != null) { + splitScreenStack.getRawBounds(mTmpRect2); } final boolean dockedOnTopOrLeft = mService.mDockedStackCreateMode == SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; getStackDockedModeBounds(mTmpRect, bounds, mTmpRect2, - mDisplayContent.mDividerControllerLocked.getContentWidth(), - dockedOnTopOrLeft); + mDisplayContent.mDividerControllerLocked.getContentWidth(), dockedOnTopOrLeft); } else if (inPinnedWindowingMode()) { // Update the bounds based on any changes to the display info getAnimationOrCurrentBounds(mTmpRect2); - boolean updated = mDisplayContent.mPinnedStackControllerLocked.onTaskStackBoundsChanged( - mTmpRect2, mTmpRect3); - if (updated) { + if (mDisplayContent.mPinnedStackControllerLocked.onTaskStackBoundsChanged( + mTmpRect2, mTmpRect3)) { bounds = new Rect(mTmpRect3); } } updateDisplayInfo(bounds); - super.onDisplayChanged(dc); } /** @@ -922,10 +927,6 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye mAnimationBackgroundSurface = null; } - if (inSplitScreenPrimaryWindowingMode()) { - mDisplayContent.mDividerControllerLocked.notifyDockedStackExistsChanged(false); - } - mDisplayContent = null; mService.mWindowPlacerLocked.requestTraversal(); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index df51be18936d..723b888e0d14 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6860,11 +6860,16 @@ public class WindowManagerService extends IWindowManager.Stub public void setWillReplaceWindow(IBinder token, boolean animate) { synchronized (mWindowMap) { final AppWindowToken appWindowToken = mRoot.getAppWindowToken(token); - if (appWindowToken == null || !appWindowToken.hasContentToDisplay()) { + if (appWindowToken == null) { Slog.w(TAG_WM, "Attempted to set replacing window on non-existing app token " + token); return; } + if (!appWindowToken.hasContentToDisplay()) { + Slog.w(TAG_WM, "Attempted to set replacing window on app token with no content" + + token); + return; + } appWindowToken.setWillReplaceWindows(animate); } } @@ -6884,11 +6889,16 @@ public class WindowManagerService extends IWindowManager.Stub void setWillReplaceWindows(IBinder token, boolean childrenOnly) { synchronized (mWindowMap) { final AppWindowToken appWindowToken = mRoot.getAppWindowToken(token); - if (appWindowToken == null || !appWindowToken.hasContentToDisplay()) { + if (appWindowToken == null) { Slog.w(TAG_WM, "Attempted to set replacing window on non-existing app token " + token); return; } + if (!appWindowToken.hasContentToDisplay()) { + Slog.w(TAG_WM, "Attempted to set replacing window on app token with no content" + + token); + return; + } if (childrenOnly) { appWindowToken.setWillReplaceChildWindows(); diff --git a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java index df989f7d6be5..3c02e23eed2a 100644 --- a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java +++ b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java @@ -25,6 +25,20 @@ import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.fail; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationChannelGroup; @@ -74,20 +88,6 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.ThreadLocalRandom; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @SmallTest @RunWith(AndroidJUnit4.class) public class RankingHelperTest extends NotificationTestCase { diff --git a/services/tests/servicestests/res/values/strings.xml b/services/tests/servicestests/res/values/strings.xml index 1253d448f3c9..3ac56bb5d8bc 100644 --- a/services/tests/servicestests/res/values/strings.xml +++ b/services/tests/servicestests/res/values/strings.xml @@ -28,4 +28,8 @@ <string name="test_account_type2_authenticator_label">AccountManagerService Test Account Type2</string> <string name="test_account_type1">com.android.server.accounts.account_manager_service_test.account.type1</string> <string name="test_account_type2">com.android.server.accounts.account_manager_service_test.account.type2</string> + + <string name="config_batterySaverDeviceSpecificConfig_1"></string> + <string name="config_batterySaverDeviceSpecificConfig_2">file-off:/sys/a=1,file-off:/sys/b=2</string> + <string name="config_batterySaverDeviceSpecificConfig_3">file-off:/sys/a=3,file-on:/proc/c=4,/abc=3</string> </resources> diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java index cb13e85157aa..2b770acf59cc 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java @@ -29,6 +29,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.ComponentName; @@ -156,7 +161,8 @@ public class ActivityRecordTests extends ActivityTestsBase { record.canBeLaunchedOnDisplay(DEFAULT_DISPLAY); - assertEquals(((TestActivityStackSupervisor) mService.mStackSupervisor) - .getLastResizeableFromCanPlaceEntityOnDisplay(), expected); + + verify(mService.mStackSupervisor, times(1)).canPlaceEntityOnDisplay(anyInt(), eq(expected), anyInt(), anyInt(), + eq(record.info)); } } diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java index 480b210c17b8..6b09363cff0b 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java @@ -166,6 +166,8 @@ public class ActivityStackTests extends ActivityTestsBase { final ActivityDisplay display = mService.mStackSupervisor.getDefaultDisplay(); final TestActivityStack homeStack = createStackForShouldBeVisibleTest(display, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, true /* onTop */); + // Home stack should always be fullscreen for this test. + homeStack.setSupportsSplitScreen(false); final TestActivityStack splitScreenPrimary = createStackForShouldBeVisibleTest(display, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, true /* onTop */); final TestActivityStack splitScreenSecondary = createStackForShouldBeVisibleTest(display, diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java index 5b1e4b731d38..f9933fb63f12 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java @@ -16,13 +16,28 @@ package com.android.server.am; +import static android.app.ActivityManager.START_ABORTED; +import static android.app.ActivityManager.START_CLASS_NOT_FOUND; +import static android.app.ActivityManager.START_FORWARD_AND_REQUEST_CONFLICT; +import static android.app.ActivityManager.START_NOT_VOICE_COMPATIBLE; +import static android.app.ActivityManager.START_SUCCESS; +import static android.app.ActivityManager.START_SWITCHES_CANCELED; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; +import android.app.ActivityOptions; +import android.app.IApplicationThread; import android.content.ComponentName; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageManager; import android.graphics.Rect; +import android.os.IBinder; +import android.os.RemoteException; import android.platform.test.annotations.Presubmit; +import android.service.voice.IVoiceInteractionSession; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; @@ -36,10 +51,20 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyBoolean; import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.anyObject; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.times; +import static android.app.ActivityManager.START_PERMISSION_DENIED; +import static android.app.ActivityManager.START_INTENT_NOT_RESOLVED; + +import com.android.internal.os.BatteryStatsImpl; + /** * Tests for the {@link ActivityStack} class. * @@ -52,12 +77,26 @@ import static org.mockito.Mockito.times; public class ActivityStarterTests extends ActivityTestsBase { private ActivityManagerService mService; private ActivityStarter mStarter; + private IPackageManager mPackageManager; + + private static final int PRECONDITION_NO_CALLER_APP = 1; + private static final int PRECONDITION_NO_INTENT_COMPONENT = 1 << 1; + private static final int PRECONDITION_NO_ACTIVITY_INFO = 1 << 2; + private static final int PRECONDITION_SOURCE_PRESENT = 1 << 3; + private static final int PRECONDITION_REQUEST_CODE = 1 << 4; + private static final int PRECONDITION_SOURCE_VOICE_SESSION = 1 << 5; + private static final int PRECONDITION_NO_VOICE_SESSION_SUPPORT = 1 << 6; + private static final int PRECONDITION_DIFFERENT_UID = 1 << 7; + private static final int PRECONDITION_ACTIVITY_SUPPORTS_INTENT_EXCEPTION = 1 << 8; + private static final int PRECONDITION_CANNOT_START_ANY_ACTIVITY = 1 << 9; + private static final int PRECONDITION_DISALLOW_APP_SWITCHING = 1 << 10; @Override public void setUp() throws Exception { super.setUp(); mService = createActivityManagerService(); - mStarter = new ActivityStarter(mService); + mPackageManager = mock(IPackageManager.class); + mStarter = new ActivityStarter(mService, mPackageManager); } @Test @@ -92,4 +131,152 @@ public class ActivityStarterTests extends ActivityTestsBase { assertEquals(task2.mBounds, null); } } + + @Test + public void testStartActivityPreconditions() throws Exception { + verifyStartActivityPreconditions(PRECONDITION_NO_CALLER_APP, START_PERMISSION_DENIED); + verifyStartActivityPreconditions(PRECONDITION_NO_INTENT_COMPONENT, + START_INTENT_NOT_RESOLVED); + verifyStartActivityPreconditions(PRECONDITION_NO_ACTIVITY_INFO, START_CLASS_NOT_FOUND); + verifyStartActivityPreconditions(PRECONDITION_SOURCE_PRESENT | PRECONDITION_REQUEST_CODE, + Intent.FLAG_ACTIVITY_FORWARD_RESULT, START_FORWARD_AND_REQUEST_CONFLICT); + verifyStartActivityPreconditions( + PRECONDITION_SOURCE_PRESENT | PRECONDITION_NO_VOICE_SESSION_SUPPORT + | PRECONDITION_SOURCE_VOICE_SESSION | PRECONDITION_DIFFERENT_UID, + START_NOT_VOICE_COMPATIBLE); + verifyStartActivityPreconditions( + PRECONDITION_SOURCE_PRESENT | PRECONDITION_NO_VOICE_SESSION_SUPPORT + | PRECONDITION_SOURCE_VOICE_SESSION | PRECONDITION_DIFFERENT_UID + | PRECONDITION_ACTIVITY_SUPPORTS_INTENT_EXCEPTION, + START_NOT_VOICE_COMPATIBLE); + verifyStartActivityPreconditions(PRECONDITION_CANNOT_START_ANY_ACTIVITY, START_ABORTED); + verifyStartActivityPreconditions(PRECONDITION_DISALLOW_APP_SWITCHING, + START_SWITCHES_CANCELED); + } + + private static boolean containsConditions(int preconditions, int mask) { + return (preconditions & mask) == mask; + } + + private void verifyStartActivityPreconditions(int preconditions, int expectedResult) { + verifyStartActivityPreconditions(preconditions, 0 /*launchFlags*/, expectedResult); + } + + /** + * Excercises how the {@link ActivityStarter} reacts to various preconditions. The caller + * provides a bitmask of all the set conditions (such as {@link #PRECONDITION_NO_CALLER_APP}) + * and the launch flags specified in the intent. The method constructs a call to + * {@link ActivityStarter#startActivityLocked} based on these preconditions and ensures the + * result matches the expected. It is important to note that the method also checks side effects + * of the start, such as ensuring {@link ActivityOptions#abort()} is called in the relevant + * scenarios. + * @param preconditions A bitmask representing the preconditions for the launch + * @param launchFlags The launch flags to be provided by the launch {@link Intent}. + * @param expectedResult The expected result from the launch. + */ + private void verifyStartActivityPreconditions(int preconditions, int launchFlags, + int expectedResult) { + final ActivityManagerService service = createActivityManagerService(); + final IPackageManager packageManager = mock(IPackageManager.class); + final ActivityStarter starter = new ActivityStarter(service, packageManager); + + final IApplicationThread caller = mock(IApplicationThread.class); + + // If no caller app, return {@code null} {@link ProcessRecord}. + final ProcessRecord record = containsConditions(preconditions, PRECONDITION_NO_CALLER_APP) + ? null : new ProcessRecord(mock(BatteryStatsImpl.class), + mock(ApplicationInfo.class), null, 0); + + doReturn(record).when(service).getRecordForAppLocked(anyObject()); + + final Intent intent = new Intent(); + intent.setFlags(launchFlags); + + final ActivityInfo aInfo = containsConditions(preconditions, PRECONDITION_NO_ACTIVITY_INFO) + ? null : new ActivityInfo(); + + if (aInfo != null) { + aInfo.applicationInfo = new ApplicationInfo(); + aInfo.applicationInfo.packageName = ActivityBuilder.DEFAULT_PACKAGE; + } + + IVoiceInteractionSession voiceSession = + containsConditions(preconditions, PRECONDITION_SOURCE_VOICE_SESSION) + ? mock(IVoiceInteractionSession.class) : null; + + // Create source token + final ActivityBuilder builder = new ActivityBuilder(service).setTask( + new TaskBuilder(service.mStackSupervisor).setVoiceSession(voiceSession).build()); + + // Offset uid by one from {@link ActivityInfo} to simulate different uids. + if (containsConditions(preconditions, PRECONDITION_DIFFERENT_UID)) { + builder.setUid(aInfo.applicationInfo.uid + 1); + } + + final ActivityRecord source = builder.build(); + + if (!containsConditions(preconditions, PRECONDITION_NO_INTENT_COMPONENT)) { + intent.setComponent(source.realActivity); + } + + if (containsConditions(preconditions, PRECONDITION_DISALLOW_APP_SWITCHING)) { + doReturn(false).when(service).checkAppSwitchAllowedLocked(anyInt(), anyInt(), anyInt(), + anyInt(), any()); + } + + if (containsConditions(preconditions,PRECONDITION_CANNOT_START_ANY_ACTIVITY)) { + doReturn(false).when(service.mStackSupervisor).checkStartAnyActivityPermission( + any(), any(), any(), anyInt(), anyInt(), anyInt(), any(), anyBoolean(), + any(), any(), any(), any()); + } + + try { + if (containsConditions(preconditions, + PRECONDITION_ACTIVITY_SUPPORTS_INTENT_EXCEPTION)) { + doAnswer((inv) -> { + throw new RemoteException(); + }).when(packageManager).activitySupportsIntent(eq(source.realActivity), eq(intent), + any()); + } else { + doReturn(!containsConditions(preconditions, PRECONDITION_NO_VOICE_SESSION_SUPPORT)) + .when(packageManager).activitySupportsIntent(eq(source.realActivity), + eq(intent), any()); + } + } catch (RemoteException e) { + } + + final IBinder resultTo = containsConditions(preconditions, PRECONDITION_SOURCE_PRESENT) + || containsConditions(preconditions, PRECONDITION_SOURCE_VOICE_SESSION) + ? source.appToken : null; + + final int requestCode = containsConditions(preconditions, PRECONDITION_REQUEST_CODE) + ? 1 : 0; + + final int result = starter.startActivityLocked(caller, intent, + null /*ephemeralIntent*/, null /*resolvedType*/, aInfo, null /*rInfo*/, + null /*voiceSession*/, null /*voiceInteractor*/, resultTo, + null /*resultWho*/, requestCode, 0 /*callingPid*/, 0 /*callingUid*/, + null /*callingPackage*/, 0 /*realCallingPid*/, 0 /*realCallingUid*/, + 0 /*startFlags*/, null /*options*/, false /*ignoreTargetSecurity*/, + false /*componentSpecified*/, null /*outActivity*/, + null /*inTask*/, "testLaunchActivityPermissionDenied"); + + // In some cases the expected result internally is different than the published result. We + // must use ActivityStarter#getExternalResult to translate. + assertEquals(ActivityStarter.getExternalResult(expectedResult), result); + + // Ensure that {@link ActivityOptions} are aborted with unsuccessful result. + if (expectedResult != START_SUCCESS) { + final ActivityOptions options = spy(ActivityOptions.makeBasic()); + final int optionResult = starter.startActivityLocked(caller, intent, + null /*ephemeralIntent*/, null /*resolvedType*/, aInfo, null /*rInfo*/, + null /*voiceSession*/, null /*voiceInteractor*/, resultTo, + null /*resultWho*/, requestCode, 0 /*callingPid*/, 0 /*callingUid*/, + null /*callingPackage*/, 0 /*realCallingPid*/, 0 /*realCallingUid*/, + 0 /*startFlags*/, options /*options*/, false /*ignoreTargetSecurity*/, + false /*componentSpecified*/, null /*outActivity*/, + null /*inTask*/, "testLaunchActivityPermissionDenied"); + verify(options, times(1)).abort(); + } + } } diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java index 198cc6ded558..9c949ad34844 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java @@ -21,8 +21,11 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.view.Display.DEFAULT_DISPLAY; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyBoolean; +import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.spy; @@ -38,6 +41,7 @@ import android.graphics.Rect; import android.hardware.display.DisplayManager; import android.os.HandlerThread; import android.os.Looper; +import android.service.voice.IVoiceInteractionSession; import android.support.test.InstrumentationRegistry; import com.android.server.AttributeCache; import com.android.server.wm.AppWindowContainerController; @@ -78,7 +82,10 @@ public class ActivityTestsBase { } protected ActivityManagerService createActivityManagerService() { - return setupActivityManagerService(new TestActivityManagerService(mContext)); + final ActivityManagerService service = + setupActivityManagerService(new TestActivityManagerService(mContext)); + AttributeCache.init(mContext); + return service; } protected ActivityManagerService setupActivityManagerService(ActivityManagerService service) { @@ -95,7 +102,7 @@ public class ActivityTestsBase { private static int sCurrentActivityId = 0; // Default package name - private static final String DEFAULT_PACKAGE = "com.foo"; + static final String DEFAULT_PACKAGE = "com.foo"; // Default base activity name private static final String DEFAULT_BASE_ACTIVITY_NAME = ".BarActivity"; @@ -156,7 +163,6 @@ public class ActivityTestsBase { aInfo.applicationInfo = new ApplicationInfo(); aInfo.applicationInfo.packageName = mComponent.getPackageName(); aInfo.applicationInfo.uid = mUid; - AttributeCache.init(mService.mContext); final ActivityRecord activity = new ActivityRecord(mService, null /* caller */, 0 /* launchedFromPid */, 0, null, intent, null, aInfo /*aInfo*/, new Configuration(), null /* resultTo */, null /* resultWho */, @@ -182,6 +188,7 @@ public class ActivityTestsBase { private String mPackage; private int mFlags = 0; private int mTaskId = 0; + private IVoiceInteractionSession mVoiceSession; private ActivityStack mStack; @@ -199,6 +206,11 @@ public class ActivityTestsBase { return this; } + TaskBuilder setVoiceSession(IVoiceInteractionSession session) { + mVoiceSession = session; + return this; + } + TaskBuilder setFlags(int flags) { mFlags = flags; return this; @@ -229,7 +241,7 @@ public class ActivityTestsBase { intent.setFlags(mFlags); final TaskRecord task = new TaskRecord(mSupervisor.mService, mTaskId, aInfo, - intent /*intent*/, null /*_taskDescription*/); + intent /*intent*/, mVoiceSession, null /*_voiceInteractor*/); mSupervisor.setFocusStackUnchecked("test", mStack); mStack.addTask(task, true, "creating test task"); task.setStack(mStack); @@ -255,7 +267,27 @@ public class ActivityTestsBase { } @Override - protected ActivityStackSupervisor createStackSupervisor() { + final protected ActivityStackSupervisor createStackSupervisor() { + final ActivityStackSupervisor supervisor = spy(createTestSupervisor()); + + // No home stack is set. + doNothing().when(supervisor).moveHomeStackToFront(any()); + doReturn(true).when(supervisor).moveHomeStackTaskToTop(any()); + // Invoked during {@link ActivityStack} creation. + doNothing().when(supervisor).updateUIDsPresentOnDisplay(); + // Always keep things awake. + doReturn(true).when(supervisor).hasAwakeDisplay(); + // Called when moving activity to pinned stack. + doNothing().when(supervisor).ensureActivitiesVisibleLocked(any(), anyInt(), anyBoolean()); + // Do not schedule idle timeouts + doNothing().when(supervisor).scheduleIdleTimeoutLocked(any()); + + supervisor.initialize(); + + return supervisor; + } + + protected ActivityStackSupervisor createTestSupervisor() { return new TestActivityStackSupervisor(this, mHandlerThread.getLooper()); } @@ -269,14 +301,18 @@ public class ActivityTestsBase { * setup not available in the test environment. Also specifies an injector for */ protected static class TestActivityStackSupervisor extends ActivityStackSupervisor { - private final ActivityDisplay mDisplay; - private boolean mLastResizeable; + private ActivityDisplay mDisplay; public TestActivityStackSupervisor(ActivityManagerService service, Looper looper) { super(service, looper); mDisplayManager = (DisplayManager) mService.mContext.getSystemService(Context.DISPLAY_SERVICE); mWindowManager = prepareMockWindowManager(); + } + + @Override + public void initialize() { + super.initialize(); mDisplay = new TestActivityDisplay(this, DEFAULT_DISPLAY); attachDisplay(mDisplay); } @@ -286,54 +322,11 @@ public class ActivityTestsBase { return mDisplay; } - // TODO: Use Mockito spy instead. Currently not possible due to TestActivityStackSupervisor - // access to ActivityDisplay - @Override - boolean canPlaceEntityOnDisplay(int displayId, boolean resizeable, int callingPid, - int callingUid, ActivityInfo activityInfo) { - mLastResizeable = resizeable; - return super.canPlaceEntityOnDisplay(displayId, resizeable, callingPid, callingUid, - activityInfo); - } - - // TODO: remove and use Mockito verify once {@link #canPlaceEntityOnDisplay} override is - // removed. - public boolean getLastResizeableFromCanPlaceEntityOnDisplay() { - return mLastResizeable; - } - - // No home stack is set. - @Override - void moveHomeStackToFront(String reason) { - } - - @Override - boolean moveHomeStackTaskToTop(String reason) { - return true; - } - - // Invoked during {@link ActivityStack} creation. - @Override - void updateUIDsPresentOnDisplay() { - } - - // Just return the current front task. + // Just return the current front task. This is called internally so we cannot use spy to mock this out. @Override ActivityStack getNextFocusableStackLocked(ActivityStack currentFocus) { return mFocusedStack; } - - // Called when moving activity to pinned stack. - @Override - void ensureActivitiesVisibleLocked(ActivityRecord starting, int configChanges, - boolean preserveWindows) { - } - - // Always keep things awake - @Override - boolean hasAwakeDisplay() { - return true; - } } private static class TestActivityDisplay extends ActivityDisplay { @@ -396,6 +389,11 @@ public class ActivityTestsBase { static final int IS_TRANSLUCENT_TRUE = 2; private int mIsTranslucent = IS_TRANSLUCENT_UNSET; + static final int SUPPORTS_SPLIT_SCREEN_UNSET = 0; + static final int SUPPORTS_SPLIT_SCREEN_FALSE = 1; + static final int SUPPORTS_SPLIT_SCREEN_TRUE = 2; + private int mSupportsSplitScreen = SUPPORTS_SPLIT_SCREEN_UNSET; + TestActivityStack(ActivityDisplay display, int stackId, ActivityStackSupervisor supervisor, int windowingMode, int activityType, boolean onTop) { super(display, stackId, supervisor, windowingMode, activityType, onTop); @@ -439,5 +437,23 @@ public class ActivityTestsBase { return super.isStackTranslucent(starting); } } + + void setSupportsSplitScreen(boolean supportsSplitScreen) { + mSupportsSplitScreen = supportsSplitScreen + ? SUPPORTS_SPLIT_SCREEN_TRUE : SUPPORTS_SPLIT_SCREEN_FALSE; + } + + @Override + public boolean supportsSplitScreenWindowingMode() { + switch (mSupportsSplitScreen) { + case SUPPORTS_SPLIT_SCREEN_TRUE: + return true; + case SUPPORTS_SPLIT_SCREEN_FALSE: + return false; + case SUPPORTS_SPLIT_SCREEN_UNSET: + default: + return super.supportsSplitScreenWindowingMode(); + } + } } } diff --git a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java index f5ea60ff5929..fbb5fd2dfef1 100644 --- a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java +++ b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java @@ -510,7 +510,7 @@ public class RecentTasksTest extends ActivityTestsBase { } @Override - protected ActivityStackSupervisor createStackSupervisor() { + protected ActivityStackSupervisor createTestSupervisor() { return new MyTestActivityStackSupervisor(this, mHandlerThread.getLooper()); } diff --git a/services/tests/servicestests/src/com/android/server/power/BatterySaverPolicyTest.java b/services/tests/servicestests/src/com/android/server/power/BatterySaverPolicyTest.java index 50ac41cdf417..5b6225e79f8e 100644 --- a/services/tests/servicestests/src/com/android/server/power/BatterySaverPolicyTest.java +++ b/services/tests/servicestests/src/com/android/server/power/BatterySaverPolicyTest.java @@ -18,8 +18,13 @@ package com.android.server.power; import android.os.PowerManager.ServiceType; import android.os.PowerSaveState; import android.os.Handler; +import android.provider.Settings; +import android.provider.Settings.Global; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; +import android.util.ArrayMap; + +import com.android.frameworks.servicestests.R; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -36,7 +41,7 @@ public class BatterySaverPolicyTest extends AndroidTestCase { private static final float DEFAULT_BRIGHTNESS_FACTOR = 0.5f; private static final float PRECISION = 0.001f; private static final int GPS_MODE = 0; - private static final int DEFAULT_GPS_MODE = 1; + private static final int DEFAULT_GPS_MODE = 0; private static final String BATTERY_SAVER_CONSTANTS = "vibration_disabled=true," + "animation_disabled=false," + "soundtrigger_disabled=true," @@ -49,15 +54,34 @@ public class BatterySaverPolicyTest extends AndroidTestCase { + "gps_mode=0"; private static final String BATTERY_SAVER_INCORRECT_CONSTANTS = "vi*,!=,,true"; + private class BatterySaverPolicyForTest extends BatterySaverPolicy { + public BatterySaverPolicyForTest(Handler handler) { + super(handler); + } + + @Override + String getGlobalSetting(String key) { + return mMockGlobalSettings.get(key); + } + + @Override + int getDeviceSpecificConfigResId() { + return mDeviceSpecificConfigResId; + } + } + @Mock Handler mHandler; - private BatterySaverPolicy mBatterySaverPolicy; + private BatterySaverPolicyForTest mBatterySaverPolicy; + + private final ArrayMap<String, String> mMockGlobalSettings = new ArrayMap<>(); + private int mDeviceSpecificConfigResId = R.string.config_batterySaverDeviceSpecificConfig_1; public void setUp() throws Exception { super.setUp(); MockitoAnnotations.initMocks(this); - mBatterySaverPolicy = new BatterySaverPolicy(mHandler); - mBatterySaverPolicy.start(getContext().getContentResolver()); + mBatterySaverPolicy = new BatterySaverPolicyForTest(mHandler); + mBatterySaverPolicy.systemReady(getContext()); } @SmallTest @@ -102,7 +126,7 @@ public class BatterySaverPolicyTest extends AndroidTestCase { @SmallTest public void testGetBatterySaverPolicy_PolicyDataSaver_DefaultValueCorrect() { - mBatterySaverPolicy.updateConstants(""); + mBatterySaverPolicy.updateConstantsLocked("", ""); final PowerSaveState batterySaverStateOn = mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.DATA_SAVER, BATTERY_SAVER_ON); assertThat(batterySaverStateOn.batterySaverEnabled).isFalse(); @@ -132,7 +156,7 @@ public class BatterySaverPolicyTest extends AndroidTestCase { @SmallTest public void testUpdateConstants_getCorrectData() { - mBatterySaverPolicy.updateConstants(BATTERY_SAVER_CONSTANTS); + mBatterySaverPolicy.updateConstantsLocked(BATTERY_SAVER_CONSTANTS, ""); final PowerSaveState vibrationState = mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.VIBRATION, BATTERY_SAVER_ON); @@ -177,12 +201,12 @@ public class BatterySaverPolicyTest extends AndroidTestCase { @SmallTest public void testUpdateConstants_IncorrectData_NotCrash() { //Should not crash - mBatterySaverPolicy.updateConstants(BATTERY_SAVER_INCORRECT_CONSTANTS); - mBatterySaverPolicy.updateConstants(null); + mBatterySaverPolicy.updateConstantsLocked(BATTERY_SAVER_INCORRECT_CONSTANTS, ""); + mBatterySaverPolicy.updateConstantsLocked(null, ""); } private void testServiceDefaultValue(@ServiceType int type) { - mBatterySaverPolicy.updateConstants(""); + mBatterySaverPolicy.updateConstantsLocked("", ""); final PowerSaveState batterySaverStateOn = mBatterySaverPolicy.getBatterySaverPolicy(type, BATTERY_SAVER_ON); assertThat(batterySaverStateOn.batterySaverEnabled).isTrue(); @@ -191,4 +215,37 @@ public class BatterySaverPolicyTest extends AndroidTestCase { mBatterySaverPolicy.getBatterySaverPolicy(type, BATTERY_SAVER_OFF); assertThat(batterySaverStateOff.batterySaverEnabled).isFalse(); } + + public void testDeviceSpecific() { + mDeviceSpecificConfigResId = R.string.config_batterySaverDeviceSpecificConfig_1; + mMockGlobalSettings.put(Global.BATTERY_SAVER_CONSTANTS, ""); + mMockGlobalSettings.put(Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS, ""); + + mBatterySaverPolicy.onChangeForTest(); + assertThat(mBatterySaverPolicy.getFileValues(true).toString()).isEqualTo("{}"); + assertThat(mBatterySaverPolicy.getFileValues(false).toString()).isEqualTo("{}"); + + + mDeviceSpecificConfigResId = R.string.config_batterySaverDeviceSpecificConfig_2; + + mBatterySaverPolicy.onChangeForTest(); + assertThat(mBatterySaverPolicy.getFileValues(true).toString()).isEqualTo("{}"); + assertThat(mBatterySaverPolicy.getFileValues(false).toString()) + .isEqualTo("{/sys/a=1, /sys/b=2}"); + + + mDeviceSpecificConfigResId = R.string.config_batterySaverDeviceSpecificConfig_3; + + mBatterySaverPolicy.onChangeForTest(); + assertThat(mBatterySaverPolicy.getFileValues(true).toString()).isEqualTo("{/proc/c=4}"); + assertThat(mBatterySaverPolicy.getFileValues(false).toString()).isEqualTo("{/sys/a=3}"); + + + mMockGlobalSettings.put(Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS, + "file-on:/proc/z=4"); + + mBatterySaverPolicy.onChangeForTest(); + assertThat(mBatterySaverPolicy.getFileValues(true).toString()).isEqualTo("{/proc/z=4}"); + assertThat(mBatterySaverPolicy.getFileValues(false).toString()).isEqualTo("{}"); + } } diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java index b60d5bf90766..5039e424c4dc 100644 --- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java @@ -16,32 +16,28 @@ package com.android.server.power; -import android.content.Context; +import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP; +import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.when; + import android.hardware.display.DisplayManagerInternal.DisplayPowerRequest; import android.os.PowerManager; import android.os.PowerSaveState; import android.os.SystemProperties; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; -import android.text.TextUtils; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.OutputStreamWriter; + +import com.android.server.power.batterysaver.BatterySaverController; + import org.junit.Rule; -import org.junit.rules.TemporaryFolder; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP; -import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE; -import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING; -import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.anyBoolean; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.when; - /** * Tests for {@link com.android.server.power.PowerManagerService} */ diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index ffb5e93f457c..2bb1c4ed648c 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -1684,6 +1684,8 @@ public abstract class Connection extends Conferenceable { // The internal telecom call ID associated with this connection. private String mTelecomCallId; + // The PhoneAccountHandle associated with this connection. + private PhoneAccountHandle mPhoneAccountHandle; private int mState = STATE_NEW; private CallAudioState mCallAudioState; private Uri mAddress; @@ -3099,6 +3101,27 @@ public abstract class Connection extends Conferenceable { } /** + * Sets the {@link PhoneAccountHandle} associated with this connection. + * + * @hide + */ + public void setPhoneAccountHandle(PhoneAccountHandle phoneAccountHandle) { + if (mPhoneAccountHandle != phoneAccountHandle) { + mPhoneAccountHandle = phoneAccountHandle; + notifyPhoneAccountChanged(phoneAccountHandle); + } + } + + /** + * Returns the {@link PhoneAccountHandle} associated with this connection. + * + * @hide + */ + public PhoneAccountHandle getPhoneAccountHandle() { + return mPhoneAccountHandle; + } + + /** * Sends an event associated with this {@code Connection} with associated event extras to the * {@link InCallService}. * <p> diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index 35804f64f4d7..311b297b1397 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -1382,7 +1382,7 @@ public abstract class ConnectionService extends Service { connection.setTelecomCallId(callId); if (connection.getState() != Connection.STATE_DISCONNECTED) { - addConnection(callId, connection); + addConnection(request.getAccountHandle(), callId, connection); } Uri address = connection.getAddress(); @@ -1846,6 +1846,7 @@ public abstract class ConnectionService extends Service { mAdapter.setIsConferenced(connectionId, id); } } + onConferenceAdded(conference); } } @@ -2056,6 +2057,30 @@ public abstract class ConnectionService extends Service { public void onConference(Connection connection1, Connection connection2) {} /** + * Called when a connection is added. + * @hide + */ + public void onConnectionAdded(Connection connection) {} + + /** + * Called when a connection is removed. + * @hide + */ + public void onConnectionRemoved(Connection connection) {} + + /** + * Called when a conference is added. + * @hide + */ + public void onConferenceAdded(Conference conference) {} + + /** + * Called when a conference is removed. + * @hide + */ + public void onConferenceRemoved(Conference conference) {} + + /** * Indicates that a remote conference has been created for existing {@link RemoteConnection}s. * When this method is invoked, this {@link ConnectionService} should create its own * representation of the conference call and send it to telecom using {@link #addConference}. @@ -2122,16 +2147,18 @@ public abstract class ConnectionService extends Service { // prefix for a unique incremental call ID. id = handle.getComponentName().getClassName() + "@" + getNextCallId(); } - addConnection(id, connection); + addConnection(handle, id, connection); return id; } - private void addConnection(String callId, Connection connection) { + private void addConnection(PhoneAccountHandle handle, String callId, Connection connection) { connection.setTelecomCallId(callId); mConnectionById.put(callId, connection); mIdByConnection.put(connection, callId); connection.addConnectionListener(mConnectionListener); connection.setConnectionService(this); + connection.setPhoneAccountHandle(handle); + onConnectionAdded(connection); } /** {@hide} */ @@ -2143,6 +2170,7 @@ public abstract class ConnectionService extends Service { mConnectionById.remove(id); mIdByConnection.remove(connection); mAdapter.removeCall(id); + onConnectionRemoved(connection); } } @@ -2179,6 +2207,8 @@ public abstract class ConnectionService extends Service { mConferenceById.remove(id); mIdByConference.remove(conference); mAdapter.removeCall(id); + + onConferenceRemoved(conference); } } diff --git a/telephony/java/android/telephony/CellIdentityGsm.java b/telephony/java/android/telephony/CellIdentityGsm.java index 4d7c71febd6f..6276626afae2 100644 --- a/telephony/java/android/telephony/CellIdentityGsm.java +++ b/telephony/java/android/telephony/CellIdentityGsm.java @@ -115,11 +115,10 @@ public final class CellIdentityGsm implements Parcelable { // for inbound parcels mBsic = (bsic == 0xFF) ? Integer.MAX_VALUE : bsic; - // Only allow INT_MAX if unknown string mcc/mnc if (mccStr == null || mccStr.matches("^[0-9]{3}$")) { mMccStr = mccStr; - } else if (mccStr.isEmpty() || mccStr.equals(String.valueOf(Integer.MAX_VALUE))) { - // If the mccStr is empty or unknown, set it as null. + } else if (mccStr.isEmpty()) { + // If the mccStr parsed from Parcel is empty, set it as null. mMccStr = null; } else { throw new IllegalArgumentException("invalid MCC format"); @@ -127,8 +126,8 @@ public final class CellIdentityGsm implements Parcelable { if (mncStr == null || mncStr.matches("^[0-9]{2,3}$")) { mMncStr = mncStr; - } else if (mncStr.isEmpty() || mncStr.equals(String.valueOf(Integer.MAX_VALUE))) { - // If the mncStr is empty or unknown, set it as null. + } else if (mncStr.isEmpty()) { + // If the mncStr parsed from Parcel is empty, set it as null. mMncStr = null; } else { throw new IllegalArgumentException("invalid MNC format"); diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java index fd837fc0ac26..74d2966b25bc 100644 --- a/telephony/java/android/telephony/CellIdentityLte.java +++ b/telephony/java/android/telephony/CellIdentityLte.java @@ -114,11 +114,10 @@ public final class CellIdentityLte implements Parcelable { mTac = tac; mEarfcn = earfcn; - // Only allow INT_MAX if unknown string mcc/mnc if (mccStr == null || mccStr.matches("^[0-9]{3}$")) { mMccStr = mccStr; - } else if (mccStr.isEmpty() || mccStr.equals(String.valueOf(Integer.MAX_VALUE))) { - // If the mccStr is empty or unknown, set it as null. + } else if (mccStr.isEmpty()) { + // If the mccStr parsed from Parcel is empty, set it as null. mMccStr = null; } else { throw new IllegalArgumentException("invalid MCC format"); @@ -126,8 +125,8 @@ public final class CellIdentityLte implements Parcelable { if (mncStr == null || mncStr.matches("^[0-9]{2,3}$")) { mMncStr = mncStr; - } else if (mncStr.isEmpty() || mncStr.equals(String.valueOf(Integer.MAX_VALUE))) { - // If the mncStr is empty or unknown, set it as null. + } else if (mncStr.isEmpty()) { + // If the mncStr parsed from Parcel is empty, set it as null. mMncStr = null; } else { throw new IllegalArgumentException("invalid MNC format"); diff --git a/telephony/java/android/telephony/CellIdentityWcdma.java b/telephony/java/android/telephony/CellIdentityWcdma.java index 1597245c6fa2..51b11aa82b9a 100644 --- a/telephony/java/android/telephony/CellIdentityWcdma.java +++ b/telephony/java/android/telephony/CellIdentityWcdma.java @@ -114,11 +114,10 @@ public final class CellIdentityWcdma implements Parcelable { mPsc = psc; mUarfcn = uarfcn; - // Only allow INT_MAX if unknown string mcc/mnc if (mccStr == null || mccStr.matches("^[0-9]{3}$")) { mMccStr = mccStr; - } else if (mccStr.isEmpty() || mccStr.equals(String.valueOf(Integer.MAX_VALUE))) { - // If the mccStr is empty or unknown, set it as null. + } else if (mccStr.isEmpty()) { + // If the mccStr parsed from Parcel is empty, set it as null. mMccStr = null; } else { throw new IllegalArgumentException("invalid MCC format"); @@ -126,8 +125,8 @@ public final class CellIdentityWcdma implements Parcelable { if (mncStr == null || mncStr.matches("^[0-9]{2,3}$")) { mMncStr = mncStr; - } else if (mncStr.isEmpty() || mncStr.equals(String.valueOf(Integer.MAX_VALUE))) { - // If the mncStr is empty or unknown, set it as null. + } else if (mncStr.isEmpty()) { + // If the mncStr parsed from Parcel is empty, set it as null. mMncStr = null; } else { throw new IllegalArgumentException("invalid MNC format"); @@ -136,7 +135,7 @@ public final class CellIdentityWcdma implements Parcelable { mAlphaLong = alphal; mAlphaShort = alphas; } - + private CellIdentityWcdma(CellIdentityWcdma cid) { this(cid.mLac, cid.mCid, cid.mPsc, cid.mUarfcn, cid.mMccStr, cid.mMncStr, cid.mAlphaLong, cid.mAlphaShort); diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml index 9caf9d0f6e26..ebf5f6854c6f 100644 --- a/tests/HwAccelerationTest/AndroidManifest.xml +++ b/tests/HwAccelerationTest/AndroidManifest.xml @@ -282,6 +282,15 @@ <category android:name="com.android.test.hwui.TEST" /> </intent-filter> </activity> + + <activity + android:name="ColoredShadowsActivity" + android:label="View/ColoredShadows"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="com.android.test.hwui.TEST" /> + </intent-filter> + </activity> <activity android:name="OpaqueActivity" diff --git a/tests/HwAccelerationTest/res/layout/colored_shadows_activity.xml b/tests/HwAccelerationTest/res/layout/colored_shadows_activity.xml new file mode 100644 index 000000000000..18633250cfcb --- /dev/null +++ b/tests/HwAccelerationTest/res/layout/colored_shadows_activity.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +** +** Copyright 2017, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:id="@+id/colored_grid"> + <include layout="@layout/colored_shadows_row" /> + <include layout="@layout/colored_shadows_row" /> + <include layout="@layout/colored_shadows_row" /> + <include layout="@layout/colored_shadows_row" /> + <include layout="@layout/colored_shadows_row" /> + <include layout="@layout/colored_shadows_row" /> + <include layout="@layout/colored_shadows_row" /> +</LinearLayout> diff --git a/tests/HwAccelerationTest/res/layout/colored_shadows_row.xml b/tests/HwAccelerationTest/res/layout/colored_shadows_row.xml new file mode 100644 index 000000000000..61b075974926 --- /dev/null +++ b/tests/HwAccelerationTest/res/layout/colored_shadows_row.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +** +** Copyright 2017, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="horizontal" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="25dp" + android:paddingBottom="25dp" + android:clipToPadding="false" > + <View android:id="@+id/grey" + android:layout_width="50dp" + android:layout_height="50dp" + android:elevation="16dp" + android:background="#3C4043" + android:layout_marginLeft="20dp" /> + <View android:id="@+id/blue" + android:layout_width="50dp" + android:layout_height="50dp" + android:elevation="16dp" + android:background="#185ABC" + android:layout_marginLeft="20dp"/> + <View android:id="@+id/red" + android:layout_width="50dp" + android:layout_height="50dp" + android:elevation="16dp" + android:background="#B31412" + android:layout_marginLeft="20dp"/> + <View android:id="@+id/yellow" + android:layout_width="50dp" + android:layout_height="50dp" + android:elevation="16dp" + android:background="#EA8600" + android:layout_marginLeft="20dp"/> + <View android:id="@+id/green" + android:layout_width="50dp" + android:layout_height="50dp" + android:elevation="16dp" + android:background="#137333" + android:layout_marginLeft="20dp"/> +</LinearLayout> diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ColoredShadowsActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ColoredShadowsActivity.java new file mode 100644 index 000000000000..135c93c97af2 --- /dev/null +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ColoredShadowsActivity.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2017 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.test.hwui; + +import android.app.Activity; +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; + +public class ColoredShadowsActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.colored_shadows_activity); + ViewGroup grid = findViewById(R.id.colored_grid); + for (int i = 0; i < grid.getChildCount(); i++) { + setShadowColors((ViewGroup) grid.getChildAt(i), i); + } + } + + private void setShadowColors(ViewGroup row, int rowIndex) { + for (int i = 0; i < row.getChildCount(); i++) { + View view = row.getChildAt(i); + view.setShadowColor(shadowColorFor(view)); + view.setElevation(6.0f * (rowIndex + 1)); + } + } + + private int shadowColorFor(View view) { + switch (view.getId()) { + case R.id.grey: return 0xFF3C4043; + case R.id.blue: return 0xFF185ABC; + case R.id.red: return 0xFFB31412; + case R.id.yellow: return 0xFFEA8600; + case R.id.green: return 0xFF137333; + default: return 0xFF000000; + } + } + +} diff --git a/tests/net/java/com/android/server/IpSecServiceTest.java b/tests/net/java/com/android/server/IpSecServiceTest.java index 7b0703851441..8e579aa68eae 100644 --- a/tests/net/java/com/android/server/IpSecServiceTest.java +++ b/tests/net/java/com/android/server/IpSecServiceTest.java @@ -23,7 +23,11 @@ import static android.system.OsConstants.SOCK_DGRAM; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -46,6 +50,8 @@ import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; import org.junit.Before; import org.junit.Test; @@ -57,6 +63,8 @@ import org.junit.runner.RunWith; public class IpSecServiceTest { private static final int DROID_SPI = 0xD1201D; + private static final int MAX_NUM_ENCAP_SOCKETS = 100; + private static final int MAX_NUM_SPIS = 100; private static final int TEST_UDP_ENCAP_INVALID_PORT = 100; private static final int TEST_UDP_ENCAP_PORT_OUT_RANGE = 100000; @@ -260,4 +268,115 @@ public class IpSecServiceTest { } } } + + /** + * This function checks if the number of encap UDP socket that one UID can reserve + * has a reasonable limit. + */ + @Test + public void testSocketResourceTrackerLimitation() throws Exception { + List<IpSecUdpEncapResponse> openUdpEncapSockets = new ArrayList<IpSecUdpEncapResponse>(); + // Reserve sockets until it fails. + for (int i = 0; i < MAX_NUM_ENCAP_SOCKETS; i++) { + IpSecUdpEncapResponse newUdpEncapSocket = + mIpSecService.openUdpEncapsulationSocket(0, new Binder()); + assertNotNull(newUdpEncapSocket); + if (IpSecManager.Status.OK != newUdpEncapSocket.status) { + break; + } + openUdpEncapSockets.add(newUdpEncapSocket); + } + // Assert that the total sockets quota has a reasonable limit. + assertTrue( + openUdpEncapSockets.size() > 0 + && openUdpEncapSockets.size() < MAX_NUM_ENCAP_SOCKETS); + + // Try to reserve one more UDP encapsulation socket, and should fail. + IpSecUdpEncapResponse extraUdpEncapSocket = + mIpSecService.openUdpEncapsulationSocket(0, new Binder()); + assertNotNull(extraUdpEncapSocket); + assertEquals(IpSecManager.Status.RESOURCE_UNAVAILABLE, extraUdpEncapSocket.status); + + // Close one of the open UDP encapsulation scokets. + mIpSecService.closeUdpEncapsulationSocket(openUdpEncapSockets.get(0).resourceId); + openUdpEncapSockets.get(0).fileDescriptor.close(); + openUdpEncapSockets.remove(0); + + // Try to reserve one more UDP encapsulation socket, and should be successful. + extraUdpEncapSocket = mIpSecService.openUdpEncapsulationSocket(0, new Binder()); + assertNotNull(extraUdpEncapSocket); + assertEquals(IpSecManager.Status.OK, extraUdpEncapSocket.status); + openUdpEncapSockets.add(extraUdpEncapSocket); + + // Close open UDP sockets. + for (IpSecUdpEncapResponse openSocket : openUdpEncapSockets) { + mIpSecService.closeUdpEncapsulationSocket(openSocket.resourceId); + openSocket.fileDescriptor.close(); + } + } + + /** + * This function checks if the number of SPI that one UID can reserve + * has a reasonable limit. + * This test does not test for both address families or duplicate SPIs because resource + * tracking code does not depend on them. + */ + @Test + public void testSpiResourceTrackerLimitation() throws Exception { + List<IpSecSpiResponse> reservedSpis = new ArrayList<IpSecSpiResponse>(); + // Return the same SPI for all SPI allocation since IpSecService only + // tracks the resource ID. + when(mMockNetd.ipSecAllocateSpi( + anyInt(), + eq(IpSecTransform.DIRECTION_OUT), + anyString(), + eq(InetAddress.getLoopbackAddress().getHostAddress()), + anyInt())) + .thenReturn(DROID_SPI); + // Reserve spis until it fails. + for (int i = 0; i < MAX_NUM_SPIS; i++) { + IpSecSpiResponse newSpi = + mIpSecService.reserveSecurityParameterIndex( + 0x1, + InetAddress.getLoopbackAddress().getHostAddress(), + DROID_SPI + i, + new Binder()); + assertNotNull(newSpi); + if (IpSecManager.Status.OK != newSpi.status) { + break; + } + reservedSpis.add(newSpi); + } + // Assert that the SPI quota has a reasonable limit. + assertTrue(reservedSpis.size() > 0 && reservedSpis.size() < MAX_NUM_SPIS); + + // Try to reserve one more SPI, and should fail. + IpSecSpiResponse extraSpi = + mIpSecService.reserveSecurityParameterIndex( + 0x1, + InetAddress.getLoopbackAddress().getHostAddress(), + DROID_SPI + MAX_NUM_SPIS, + new Binder()); + assertNotNull(extraSpi); + assertEquals(IpSecManager.Status.RESOURCE_UNAVAILABLE, extraSpi.status); + + // Release one reserved spi. + mIpSecService.releaseSecurityParameterIndex(reservedSpis.get(0).resourceId); + reservedSpis.remove(0); + + // Should successfully reserve one more spi. + extraSpi = + mIpSecService.reserveSecurityParameterIndex( + 0x1, + InetAddress.getLoopbackAddress().getHostAddress(), + DROID_SPI + MAX_NUM_SPIS, + new Binder()); + assertNotNull(extraSpi); + assertEquals(IpSecManager.Status.OK, extraSpi.status); + + // Release reserved SPIs. + for (IpSecSpiResponse spiResp : reservedSpis) { + mIpSecService.releaseSecurityParameterIndex(spiResp.resourceId); + } + } } diff --git a/tools/streaming_proto/cpp/main.cpp b/tools/streaming_proto/cpp/main.cpp index 9aef56270ee2..477902065f99 100644 --- a/tools/streaming_proto/cpp/main.cpp +++ b/tools/streaming_proto/cpp/main.cpp @@ -31,7 +31,7 @@ write_enum(stringstream& text, const EnumDescriptorProto& enu, const string& ind text << indent << "// enum " << enu.name() << endl; for (int i=0; i<N; i++) { const EnumValueDescriptorProto& value = enu.value(i); - text << indent << "const uint32_t " + text << indent << "const int " << make_constant_name(value.name()) << " = " << value.number() << ";" << endl; } @@ -45,7 +45,7 @@ write_enum(stringstream& text, const EnumDescriptorProto& enu, const string& ind text << indent << INDENT << "\"" << stripPrefix(enu.value(i).name(), prefix) << "\"," << endl; } text << indent << "};" << endl; - text << indent << "const uint32_t _ENUM_" << name << "_VALUES[" << N << "] = {" << endl; + text << indent << "const int _ENUM_" << name << "_VALUES[" << N << "] = {" << endl; for (int i=0; i<N; i++) { text << indent << INDENT << make_constant_name(enu.value(i).name()) << "," << endl; } diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 26a2bdde40fc..c2f11d96b9f2 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -102,7 +102,7 @@ interface IWifiManager int getWifiEnabledState(); - void setCountryCode(String country, boolean persist); + void setCountryCode(String country); String getCountryCode(); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 68e6203867b6..66fabf33ddbb 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -16,6 +16,7 @@ package android.net.wifi; +import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SdkConstant; @@ -1748,13 +1749,12 @@ public class WifiManager { /** * Set the country code. * @param countryCode country code in ISO 3166 format. - * @param persist {@code true} if this needs to be remembered * * @hide */ - public void setCountryCode(String country, boolean persist) { + public void setCountryCode(@NonNull String country) { try { - mService.setCountryCode(country, persist); + mService.setCountryCode(country); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java index 1364224c443d..3cad59053308 100644 --- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java +++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java @@ -59,6 +59,7 @@ public class WifiManagerTest { private static final int ERROR_NOT_SET = -1; private static final int ERROR_TEST_REASON = 5; private static final String TEST_PACKAGE_NAME = "TestPackage"; + private static final String TEST_COUNTRY_CODE = "US"; @Mock Context mContext; @Mock IWifiManager mWifiService; @@ -777,4 +778,23 @@ public class WifiManagerTest { mWifiManager.unregisterLocalOnlyHotspotObserver(); verify(mWifiService).stopWatchLocalOnlyHotspot(); } + + /** + * Verify that calls WifiServiceImpl to set country code when no exception happens. + */ + @Test + public void testSetWifiCountryCode() throws Exception { + mWifiManager.setCountryCode(TEST_COUNTRY_CODE); + verify(mWifiService).setCountryCode(TEST_COUNTRY_CODE); + } + + /** + * Verify that WifiManager.setCountryCode() rethrows exceptions if caller does not + * have necessary permissions. + */ + @Test(expected = SecurityException.class) + public void testSetWifiCountryCodeFailedOnSecurityException() throws Exception { + doThrow(new SecurityException()).when(mWifiService).setCountryCode(anyString()); + mWifiManager.setCountryCode(TEST_COUNTRY_CODE); + } } |