diff options
601 files changed, 14036 insertions, 5638 deletions
diff --git a/Android.mk b/Android.mk index bb37fa21c463..66c9529317f2 100644 --- a/Android.mk +++ b/Android.mk @@ -867,23 +867,67 @@ LOCAL_ERROR_PRONE_FLAGS := -XepDisableAllChecks include $(BUILD_STATIC_JAVA_LIBRARY) # ==== hiddenapi lists ======================================= +include $(CLEAR_VARS) + +# File names of final API lists +LOCAL_LIGHT_GREYLIST := $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) +LOCAL_DARK_GREYLIST := $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) +LOCAL_BLACKLIST := $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST) + +# File names of source files we will use to generate the final API lists. +LOCAL_SRC_GREYLIST := frameworks/base/config/hiddenapi-light-greylist.txt +LOCAL_SRC_VENDOR_LIST := frameworks/base/config/hiddenapi-vendor-list.txt +LOCAL_SRC_FORCE_BLACKLIST := frameworks/base/config/hiddenapi-force-blacklist.txt +LOCAL_SRC_PRIVATE_API := $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE) +LOCAL_SRC_REMOVED_API := $(INTERNAL_PLATFORM_REMOVED_DEX_API_FILE) + +LOCAL_SRC_ALL := \ + $(LOCAL_SRC_GREYLIST) \ + $(LOCAL_SRC_VENDOR_LIST) \ + $(LOCAL_SRC_FORCE_BLACKLIST) \ + $(LOCAL_SRC_PRIVATE_API) \ + $(LOCAL_SRC_REMOVED_API) + +define assert-has-no-overlap +if [ ! -z "`comm -12 <(sort $(1)) <(sort $(2))`" ]; then \ + echo "$(1) and $(2) should not overlap" 1>&2; \ + comm -12 <(sort $(1)) <(sort $(2)) 1>&2; \ + exit 1; \ +fi +endef + +define assert-is-subset +if [ ! -z "`comm -23 <(sort $(1)) <(sort $(2))`" ]; then \ + echo "$(1) must be a subset of $(2)" 1>&2; \ + comm -23 <(sort $(1)) <(sort $(2)) 1>&2; \ + exit 1; \ +fi +endef + +define assert-has-no-duplicates +if [ ! -z "`sort $(1) | uniq -D`" ]; then \ + echo "$(1) has duplicate entries" 1>&2; \ + sort $(1) | uniq -D 1>&2; \ + exit 1; \ +fi +endef -# Copy light and dark greylist over into the build folder. -# This is for ART buildbots which need to mock these lists and have alternative -# rules for building them. Other rules in the build system should depend on the -# files in the build folder. +# The following rules build API lists in the build folder. +# By not using files from the source tree, ART buildbots can mock these lists +# or have alternative rules for building them. Other rules in the build system +# should depend on the files in the build folder. # Merge light greylist from multiple files: -# (1) manual light greylist -# (2) list of usages from vendor apps -# (3) list of removed APIs +# (1) manual greylist LOCAL_SRC_GREYLIST +# (2) list of usages from vendor apps LOCAL_SRC_VENDOR_LIST +# (3) list of removed APIs in LOCAL_SRC_REMOVED_API # @removed does not imply private in Doclava. We must take the subset also -# in PRIVATE_API. +# in LOCAL_SRC_PRIVATE_API. # (4) list of serialization APIs # Automatically adds all methods which match the signatures in # REGEX_SERIALIZATION. These are greylisted in order to allow applications # to write their own serializers. -$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): REGEX_SERIALIZATION := \ +$(LOCAL_LIGHT_GREYLIST): REGEX_SERIALIZATION := \ "readObject\(Ljava/io/ObjectInputStream;\)V" \ "readObjectNoData\(\)V" \ "readResolve\(\)Ljava/lang/Object;" \ @@ -891,43 +935,48 @@ $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): REGEX_SERIALIZATION := \ "serialPersistentFields:\[Ljava/io/ObjectStreamField;" \ "writeObject\(Ljava/io/ObjectOutputStream;\)V" \ "writeReplace\(\)Ljava/lang/Object;" -$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): PRIVATE_API := $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE) -$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): REMOVED_API := $(INTERNAL_PLATFORM_REMOVED_DEX_API_FILE) -$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): frameworks/base/config/hiddenapi-light-greylist.txt \ - frameworks/base/config/hiddenapi-vendor-list.txt \ - $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE) \ - $(INTERNAL_PLATFORM_REMOVED_DEX_API_FILE) - sort frameworks/base/config/hiddenapi-light-greylist.txt \ - frameworks/base/config/hiddenapi-vendor-list.txt \ - <(grep -E "\->("$(subst $(space),"|",$(REGEX_SERIALIZATION))")$$" $(PRIVATE_API)) \ - <(comm -12 <(sort $(REMOVED_API)) <(sort $(PRIVATE_API))) \ - > $@ - -$(eval $(call copy-one-file,frameworks/base/config/hiddenapi-dark-greylist.txt,\ - $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST))) - -# Generate dark greylist as private API minus (blacklist plus light greylist). - -$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST): PRIVATE_API := $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE) -$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST): LIGHT_GREYLIST := $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) -$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST): DARK_GREYLIST := $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) -$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST): $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE) \ - $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \ - $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) - if [ ! -z "`comm -12 <(sort $(LIGHT_GREYLIST)) <(sort $(DARK_GREYLIST))`" ]; then \ - echo "There should be no overlap between $(LIGHT_GREYLIST) and $(DARK_GREYLIST)" 1>&2; \ - comm -12 <(sort $(LIGHT_GREYLIST)) <(sort $(DARK_GREYLIST)) 1>&2; \ - exit 1; \ - elif [ ! -z "`comm -13 <(sort $(PRIVATE_API)) <(sort $(LIGHT_GREYLIST))`" ]; then \ - echo "$(LIGHT_GREYLIST) must be a subset of $(PRIVATE_API)" 1>&2; \ - comm -13 <(sort $(PRIVATE_API)) <(sort $(LIGHT_GREYLIST)) 1>&2; \ - exit 2; \ - elif [ ! -z "`comm -13 <(sort $(PRIVATE_API)) <(sort $(DARK_GREYLIST))`" ]; then \ - echo "$(DARK_GREYLIST) must be a subset of $(PRIVATE_API)" 1>&2; \ - comm -13 <(sort $(PRIVATE_API)) <(sort $(DARK_GREYLIST)) 1>&2; \ - exit 3; \ - fi - comm -23 <(sort $(PRIVATE_API)) <(sort $(LIGHT_GREYLIST) $(DARK_GREYLIST)) > $@ +$(LOCAL_LIGHT_GREYLIST): $(LOCAL_SRC_ALL) + sort $(LOCAL_SRC_GREYLIST) $(LOCAL_SRC_VENDOR_LIST) \ + <(grep -E "\->("$(subst $(space),"|",$(REGEX_SERIALIZATION))")$$" \ + $(LOCAL_SRC_PRIVATE_API)) \ + <(comm -12 <(sort $(LOCAL_SRC_REMOVED_API)) <(sort $(LOCAL_SRC_PRIVATE_API))) \ + > $@ + $(call assert-has-no-duplicates,$@) + $(call assert-is-subset,$@,$(LOCAL_SRC_PRIVATE_API)) + $(call assert-has-no-overlap,$@,$(LOCAL_SRC_FORCE_BLACKLIST)) + +# Generate dark greylist as remaining classes and class members in the same +# package as classes listed in the light greylist. +# The algorithm is as follows: +# (1) extract the class descriptor from each entry in LOCAL_LIGHT_GREYLIST +# (2) strip everything after the last forward-slash, +# e.g. 'Lpackage/subpackage/class$inner;' turns into 'Lpackage/subpackage/' +# (3) insert all entries from LOCAL_SRC_PRIVATE_API which begin with the package +# name but do not contain another forward-slash in the class name, e.g. +# matching '^Lpackage/subpackage/[^/;]*;' +# (4) subtract entries shared with LOCAL_LIGHT_GREYLIST +$(LOCAL_DARK_GREYLIST): $(LOCAL_SRC_ALL) $(LOCAL_LIGHT_GREYLIST) + comm -13 <(sort $(LOCAL_LIGHT_GREYLIST) $(LOCAL_SRC_FORCE_BLACKLIST)) \ + <(sed 's/\->.*//' $(LOCAL_LIGHT_GREYLIST) | sed 's/\(.*\/\).*/\1/' | sort | uniq | \ + while read PKG_NAME; do \ + grep -E "^$${PKG_NAME}[^/;]*;" $(LOCAL_SRC_PRIVATE_API); \ + done | sort | uniq) \ + > $@ + $(call assert-is-subset,$@,$(LOCAL_SRC_PRIVATE_API)) + $(call assert-has-no-duplicates,$@) + $(call assert-has-no-overlap,$@,$(LOCAL_LIGHT_GREYLIST)) + $(call assert-has-no-overlap,$@,$(LOCAL_SRC_FORCE_BLACKLIST)) + +# Generate blacklist as private API minus (light greylist plus dark greylist). +$(LOCAL_BLACKLIST): $(LOCAL_SRC_ALL) $(LOCAL_LIGHT_GREYLIST) $(LOCAL_DARK_GREYLIST) + comm -13 <(sort $(LOCAL_LIGHT_GREYLIST) $(LOCAL_DARK_GREYLIST)) \ + <(sort $(LOCAL_SRC_PRIVATE_API)) \ + > $@ + $(call assert-is-subset,$@,$(LOCAL_SRC_PRIVATE_API)) + $(call assert-has-no-duplicates,$@) + $(call assert-has-no-overlap,$@,$(LOCAL_LIGHT_GREYLIST)) + $(call assert-has-no-overlap,$@,$(LOCAL_DARK_GREYLIST)) + $(call assert-is-subset,$(LOCAL_SRC_FORCE_BLACKLIST),$@) # Include subdirectory makefiles # ============================================================ @@ -939,4 +988,3 @@ include $(call first-makefiles-under,$(LOCAL_PATH)) endif endif # ANDROID_BUILD_EMBEDDED - diff --git a/api/current.txt b/api/current.txt index 8703bf41438b..557d5365a92c 100644 --- a/api/current.txt +++ b/api/current.txt @@ -11274,6 +11274,7 @@ package android.content.pm { field public static final java.lang.String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash"; field public static final java.lang.String FEATURE_CAMERA_FRONT = "android.hardware.camera.front"; field public static final java.lang.String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full"; + field public static final java.lang.String FEATURE_CANT_SAVE_STATE = "android.software.cant_save_state"; field public static final java.lang.String FEATURE_COMPANION_DEVICE_SETUP = "android.software.companion_device_setup"; field public static final java.lang.String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice"; field public static final java.lang.String FEATURE_CONSUMER_IR = "android.hardware.consumerir"; @@ -41426,6 +41427,7 @@ package android.telecom { method public void addNewIncomingCall(android.telecom.PhoneAccountHandle, android.os.Bundle); method public void cancelMissedCallsNotification(); method public android.content.Intent createManageBlockedNumbersIntent(); + method public boolean endCall(); method public android.net.Uri getAdnUriForPhoneAccount(android.telecom.PhoneAccountHandle); method public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts(); method public java.lang.String getDefaultDialerPackage(); diff --git a/api/system-current.txt b/api/system-current.txt index e54d2f6264a6..20f0ba86c00f 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3663,6 +3663,7 @@ package android.os { } public final class ConfigUpdate { + field public static final java.lang.String ACTION_UPDATE_CARRIER_ID_DB = "android.os.action.UPDATE_CARRIER_ID_DB"; field public static final java.lang.String ACTION_UPDATE_CARRIER_PROVISIONING_URLS = "android.intent.action.UPDATE_CARRIER_PROVISIONING_URLS"; field public static final java.lang.String ACTION_UPDATE_CT_LOGS = "android.intent.action.UPDATE_CT_LOGS"; field public static final java.lang.String ACTION_UPDATE_INTENT_FIREWALL = "android.intent.action.UPDATE_INTENT_FIREWALL"; diff --git a/cmds/incidentd/src/Reporter.cpp b/cmds/incidentd/src/Reporter.cpp index 297a0711f686..b3bab0cfb4dc 100644 --- a/cmds/incidentd/src/Reporter.cpp +++ b/cmds/incidentd/src/Reporter.cpp @@ -22,6 +22,7 @@ #include "report_directory.h" #include "section_list.h" +#include <android-base/properties.h> #include <android/os/DropBoxManager.h> #include <private/android_filesystem_config.h> #include <utils/SystemClock.h> @@ -31,6 +32,7 @@ #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> +#include <string> /** * The directory where the incident reports are stored. @@ -129,6 +131,8 @@ Reporter::run_report_status_t Reporter::runReport(size_t* reportByteSize) { int mainDest = -1; HeaderSection headers; MetadataSection metadataSection; + std::string buildType = android::base::GetProperty("ro.build.type", ""); + const bool isUserdebugOrEng = buildType == "userdebug" || buildType == "eng"; // See if we need the main file for (ReportRequestSet::iterator it = batch.begin(); it != batch.end(); it++) { @@ -175,6 +179,11 @@ Reporter::run_report_status_t Reporter::runReport(size_t* reportByteSize) { // and report to those that care that we're doing it. for (const Section** section = SECTION_LIST; *section; section++) { const int id = (*section)->id; + if ((*section)->userdebugAndEngOnly && !isUserdebugOrEng) { + ALOGD("Skipping incident report section %d '%s' because it's limited to userdebug/eng", + id, (*section)->name.string()); + continue; + } if (this->batch.containsSection(id)) { ALOGD("Taking incident report section %d '%s'", id, (*section)->name.string()); for (ReportRequestSet::iterator it = batch.begin(); it != batch.end(); it++) { diff --git a/cmds/incidentd/src/Section.cpp b/cmds/incidentd/src/Section.cpp index e5bde0d83cf7..4bbe04204a54 100644 --- a/cmds/incidentd/src/Section.cpp +++ b/cmds/incidentd/src/Section.cpp @@ -151,8 +151,11 @@ DONE: } // ================================================================================ -Section::Section(int i, int64_t timeoutMs, bool deviceSpecific) - : id(i), timeoutMs(timeoutMs), deviceSpecific(deviceSpecific) {} +Section::Section(int i, int64_t timeoutMs, bool userdebugAndEngOnly, bool deviceSpecific) + : id(i), + timeoutMs(timeoutMs), + userdebugAndEngOnly(userdebugAndEngOnly), + deviceSpecific(deviceSpecific) {} Section::~Section() {} @@ -239,7 +242,7 @@ static inline bool isSysfs(const char* filename) { return strncmp(filename, "/sy FileSection::FileSection(int id, const char* filename, const bool deviceSpecific, const int64_t timeoutMs) - : Section(id, timeoutMs, deviceSpecific), mFilename(filename) { + : Section(id, timeoutMs, false, deviceSpecific), mFilename(filename) { name = filename; mIsSysfs = isSysfs(filename); } @@ -417,8 +420,8 @@ WorkerThreadData::WorkerThreadData(const WorkerThreadSection* sec) WorkerThreadData::~WorkerThreadData() {} // ================================================================================ -WorkerThreadSection::WorkerThreadSection(int id, const int64_t timeoutMs) - : Section(id, timeoutMs) {} +WorkerThreadSection::WorkerThreadSection(int id, const int64_t timeoutMs, bool userdebugAndEngOnly) + : Section(id, timeoutMs, userdebugAndEngOnly) {} WorkerThreadSection::~WorkerThreadSection() {} @@ -615,8 +618,8 @@ status_t CommandSection::Execute(ReportRequestSet* requests) const { } // ================================================================================ -DumpsysSection::DumpsysSection(int id, const char* service, ...) - : WorkerThreadSection(id), mService(service) { +DumpsysSection::DumpsysSection(int id, bool userdebugAndEngOnly, const char* service, ...) + : WorkerThreadSection(id, REMOTE_CALL_TIMEOUT_MS, userdebugAndEngOnly), mService(service) { name = "dumpsys "; name += service; diff --git a/cmds/incidentd/src/Section.h b/cmds/incidentd/src/Section.h index 577892ef3a38..a031a15fe7c9 100644 --- a/cmds/incidentd/src/Section.h +++ b/cmds/incidentd/src/Section.h @@ -40,10 +40,12 @@ class Section { public: const int id; const int64_t timeoutMs; // each section must have a timeout + const bool userdebugAndEngOnly; const bool deviceSpecific; String8 name; - Section(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS, bool deviceSpecific = false); + Section(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS, bool userdebugAndEngOnly = false, + bool deviceSpecific = false); virtual ~Section(); virtual status_t Execute(ReportRequestSet* requests) const = 0; @@ -107,7 +109,8 @@ private: */ class WorkerThreadSection : public Section { public: - WorkerThreadSection(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); + WorkerThreadSection(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS, + bool userdebugAndEngOnly = false); virtual ~WorkerThreadSection(); virtual status_t Execute(ReportRequestSet* requests) const; @@ -137,7 +140,7 @@ private: */ class DumpsysSection : public WorkerThreadSection { public: - DumpsysSection(int id, const char* service, ...); + DumpsysSection(int id, bool userdebugAndEngOnly, const char* service, ...); virtual ~DumpsysSection(); virtual status_t BlockingCall(int pipeWriteFd) const; diff --git a/cmds/media/src/com/android/commands/media/Media.java b/cmds/media/src/com/android/commands/media/Media.java index 66761960e0ae..2fc580805a62 100644 --- a/cmds/media/src/com/android/commands/media/Media.java +++ b/cmds/media/src/com/android/commands/media/Media.java @@ -46,6 +46,8 @@ import java.io.PrintStream; import java.util.List; public class Media extends BaseCommand { + // This doesn't belongs to any package. Setting the package name to empty string. + private static final String PACKAGE_NAME = ""; private ISessionManager mSessionService; /** @@ -104,7 +106,7 @@ public class Media extends BaseCommand { private void sendMediaKey(KeyEvent event) { try { - mSessionService.dispatchMediaKeyEvent(event, false); + mSessionService.dispatchMediaKeyEvent(PACKAGE_NAME, false, event, false); } catch (RemoteException e) { } } @@ -264,13 +266,13 @@ public class Media extends BaseCommand { } else if ("q".equals(line) || "quit".equals(line)) { break; } else if ("play".equals(line)) { - mController.play(""); + mController.play(PACKAGE_NAME); } else if ("pause".equals(line)) { - mController.pause(""); + mController.pause(PACKAGE_NAME); } else if ("next".equals(line)) { - mController.next(""); + mController.next(PACKAGE_NAME); } else if ("previous".equals(line)) { - mController.previous(""); + mController.previous(PACKAGE_NAME); } else { System.out.println("Invalid command: " + line); } diff --git a/cmds/statsd/benchmark/metric_util.cpp b/cmds/statsd/benchmark/metric_util.cpp index e6272edf7dcc..50ed18d3e2b0 100644 --- a/cmds/statsd/benchmark/metric_util.cpp +++ b/cmds/statsd/benchmark/metric_util.cpp @@ -366,7 +366,7 @@ sp<StatsLogProcessor> CreateStatsLogProcessor(const long timeBaseSec, const Stat sp<AlarmMonitor> periodicAlarmMonitor; sp<StatsLogProcessor> processor = new StatsLogProcessor( uidMap, anomalyAlarmMonitor, periodicAlarmMonitor, timeBaseSec * NS_PER_SEC, - [](const ConfigKey&){}); + [](const ConfigKey&){return true;}); processor->OnConfigUpdated(timeBaseSec * NS_PER_SEC, key, config); return processor; } diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp index ed07acc6317b..8487e6794873 100644 --- a/cmds/statsd/src/StatsLogProcessor.cpp +++ b/cmds/statsd/src/StatsLogProcessor.cpp @@ -75,7 +75,7 @@ StatsLogProcessor::StatsLogProcessor(const sp<UidMap>& uidMap, const sp<AlarmMonitor>& anomalyAlarmMonitor, const sp<AlarmMonitor>& periodicAlarmMonitor, const int64_t timeBaseNs, - const std::function<void(const ConfigKey&)>& sendBroadcast) + const std::function<bool(const ConfigKey&)>& sendBroadcast) : mUidMap(uidMap), mAnomalyAlarmMonitor(anomalyAlarmMonitor), mPeriodicAlarmMonitor(periodicAlarmMonitor), @@ -382,10 +382,13 @@ void StatsLogProcessor::onConfigMetricsReportLocked(const ConfigKey& key, it->second->onDumpReport(dumpTimeStampNs, include_current_partial_bucket, &str_set, proto); - // Fill in UidMap. - uint64_t uidMapToken = proto->start(FIELD_TYPE_MESSAGE | FIELD_ID_UID_MAP); - mUidMap->appendUidMap(dumpTimeStampNs, key, &str_set, proto); - proto->end(uidMapToken); + // Fill in UidMap if there is at least one metric to report. + // This skips the uid map if it's an empty config. + if (it->second->getNumMetrics() > 0) { + uint64_t uidMapToken = proto->start(FIELD_TYPE_MESSAGE | FIELD_ID_UID_MAP); + mUidMap->appendUidMap(dumpTimeStampNs, key, &str_set, proto); + proto->end(uidMapToken); + } // Fill in the timestamps. proto->write(FIELD_TYPE_INT64 | FIELD_ID_LAST_REPORT_ELAPSED_NANOS, @@ -465,12 +468,21 @@ void StatsLogProcessor::flushIfNecessaryLocked( // We suspect that the byteSize() computation is expensive, so we set a rate limit. size_t totalBytes = metricsManager.byteSize(); mLastByteSizeTimes[key] = timestampNs; + bool requestDump = false; if (totalBytes > StatsdStats::kMaxMetricsBytesPerConfig) { // Too late. We need to start clearing data. metricsManager.dropData(timestampNs); StatsdStats::getInstance().noteDataDropped(key); VLOG("StatsD had to toss out metrics for %s", key.ToString().c_str()); - } else if (totalBytes > StatsdStats::kBytesPerConfigTriggerGetData) { + } else if ((totalBytes > StatsdStats::kBytesPerConfigTriggerGetData) || + (mOnDiskDataConfigs.find(key) != mOnDiskDataConfigs.end())) { + // Request to send a broadcast if: + // 1. in memory data > threshold OR + // 2. config has old data report on disk. + requestDump = true; + } + + if (requestDump) { // Send broadcast so that receivers can pull data. auto lastBroadcastTime = mLastBroadcastTimes.find(key); if (lastBroadcastTime != mLastBroadcastTimes.end()) { @@ -479,17 +491,20 @@ void StatsLogProcessor::flushIfNecessaryLocked( return; } } - mLastBroadcastTimes[key] = timestampNs; - VLOG("StatsD requesting broadcast for %s", key.ToString().c_str()); - mSendBroadcast(key); - StatsdStats::getInstance().noteBroadcastSent(key); + if (mSendBroadcast(key)) { + mOnDiskDataConfigs.erase(key); + VLOG("StatsD triggered data fetch for %s", key.ToString().c_str()); + mLastBroadcastTimes[key] = timestampNs; + StatsdStats::getInstance().noteBroadcastSent(key); + } } } void StatsLogProcessor::WriteDataToDiskLocked(const ConfigKey& key, const int64_t timestampNs, const DumpReportReason dumpReportReason) { - if (mMetricsManagers.find(key) == mMetricsManagers.end()) { + if (mMetricsManagers.find(key) == mMetricsManagers.end() || + !mMetricsManagers.find(key)->second->shouldWriteToDisk()) { return; } ProtoOutputStream proto; @@ -505,6 +520,8 @@ void StatsLogProcessor::WriteDataToDiskLocked(const ConfigKey& key, return; } proto.flush(fd.get()); + // We were able to write the ConfigMetricsReport to disk, so we should trigger collection ASAP. + mOnDiskDataConfigs.insert(key); } void StatsLogProcessor::WriteDataToDiskLocked(const DumpReportReason dumpReportReason) { @@ -533,6 +550,11 @@ int64_t StatsLogProcessor::getLastReportTimeNs(const ConfigKey& key) { } } +void StatsLogProcessor::noteOnDiskData(const ConfigKey& key) { + std::lock_guard<std::mutex> lock(mMetricsMutex); + mOnDiskDataConfigs.insert(key); +} + } // namespace statsd } // namespace os } // namespace android diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h index 8de0f4124841..d6fb8de801bf 100644 --- a/cmds/statsd/src/StatsLogProcessor.h +++ b/cmds/statsd/src/StatsLogProcessor.h @@ -48,7 +48,7 @@ public: StatsLogProcessor(const sp<UidMap>& uidMap, const sp<AlarmMonitor>& anomalyAlarmMonitor, const sp<AlarmMonitor>& subscriberTriggerAlarmMonitor, const int64_t timeBaseNs, - const std::function<void(const ConfigKey&)>& sendBroadcast); + const std::function<bool(const ConfigKey&)>& sendBroadcast); virtual ~StatsLogProcessor(); void OnLogEvent(LogEvent* event, bool reconnectionStarts); @@ -99,6 +99,9 @@ public: #endif } + // Add a specific config key to the possible configs to dump ASAP. + void noteOnDiskData(const ConfigKey& key); + private: // For testing only. inline sp<AlarmMonitor> getAnomalyAlarmMonitor() const { @@ -118,6 +121,9 @@ private: // Tracks when we last checked the bytes consumed for each config key. std::unordered_map<ConfigKey, long> mLastByteSizeTimes; + // Tracks which config keys has metric reports on disk + std::set<ConfigKey> mOnDiskDataConfigs; + sp<UidMap> mUidMap; // Reference to the UidMap to lookup app name and version for each uid. StatsPullerManager mStatsPullerManager; @@ -159,7 +165,7 @@ private: // Function used to send a broadcast so that receiver for the config key can call getData // to retrieve the stored data. - std::function<void(const ConfigKey& key)> mSendBroadcast; + std::function<bool(const ConfigKey& key)> mSendBroadcast; const int64_t mTimeBaseNs; diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index e823f6884b29..acf3ad25ba1e 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -158,11 +158,14 @@ StatsService::StatsService(const sp<Looper>& handlerLooper) auto receiver = mConfigManager->GetConfigReceiver(key); if (sc == nullptr) { VLOG("Could not find StatsCompanionService"); + return false; } else if (receiver == nullptr) { VLOG("Statscompanion could not find a broadcast receiver for %s", key.ToString().c_str()); + return false; } else { sc->sendDataBroadcast(receiver, mProcessor->getLastReportTimeNs(key)); + return true; } } ); @@ -948,6 +951,11 @@ Status StatsService::setDataFetchOperation(int64_t key, IPCThreadState* ipc = IPCThreadState::self(); ConfigKey configKey(ipc->getCallingUid(), key); mConfigManager->SetConfigReceiver(configKey, intentSender); + if (StorageManager::hasConfigMetricsReport(configKey)) { + VLOG("StatsService::setDataFetchOperation marking configKey %s to dump reports on disk", + configKey.ToString().c_str()); + mProcessor->noteOnDiskData(configKey); + } return Status::ok(); } @@ -988,6 +996,15 @@ Status StatsService::unsetBroadcastSubscriber(int64_t configId, return Status::ok(); } +Status StatsService::sendAppBreadcrumbAtom(int32_t label, int32_t state) { + // Permission check not necessary as it's meant for applications to write to + // statsd. + android::util::stats_write(util::APP_BREADCRUMB_REPORTED, + IPCThreadState::self()->getCallingUid(), label, + state); + return Status::ok(); +} + void StatsService::binderDied(const wp <IBinder>& who) { ALOGW("statscompanion service died"); StatsdStats::getInstance().noteSystemServerRestart(getWallClockSec()); diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h index 67fc7709103a..b3a477645b73 100644 --- a/cmds/statsd/src/StatsService.h +++ b/cmds/statsd/src/StatsService.h @@ -139,6 +139,11 @@ public: /** Inform statsCompanion that statsd is ready. */ virtual void sayHiToStatsCompanion(); + /** + * Binder call to get AppBreadcrumbReported atom. + */ + virtual Status sendAppBreadcrumbAtom(int32_t label, int32_t state) override; + /** IBinder::DeathRecipient */ virtual void binderDied(const wp<IBinder>& who) override; diff --git a/cmds/statsd/src/external/StatsPullerManagerImpl.cpp b/cmds/statsd/src/external/StatsPullerManagerImpl.cpp index 610faad85d94..c020f9c12b87 100644 --- a/cmds/statsd/src/external/StatsPullerManagerImpl.cpp +++ b/cmds/statsd/src/external/StatsPullerManagerImpl.cpp @@ -20,8 +20,8 @@ #include <android/os/IStatsCompanionService.h> #include <cutils/log.h> #include <math.h> +#include <stdint.h> #include <algorithm> -#include <climits> #include "../StatsService.h" #include "../logd/LogEvent.h" #include "../stats_log_util.h" @@ -46,6 +46,9 @@ namespace android { namespace os { namespace statsd { +// Values smaller than this may require to update the alarm. +const int64_t NO_ALARM_UPDATE = INT64_MAX; + const std::map<int, PullAtomInfo> StatsPullerManagerImpl::kAllPullAtomInfo = { // wifi_bytes_transfer {android::util::WIFI_BYTES_TRANSFER, @@ -170,7 +173,7 @@ const std::map<int, PullAtomInfo> StatsPullerManagerImpl::kAllPullAtomInfo = { // temperature {android::util::TEMPERATURE, {{}, {}, 1, new ResourceThermalManagerPuller()}}}; -StatsPullerManagerImpl::StatsPullerManagerImpl() : mNextPullTimeNs(LONG_MAX) { +StatsPullerManagerImpl::StatsPullerManagerImpl() : mNextPullTimeNs(NO_ALARM_UPDATE) { } bool StatsPullerManagerImpl::Pull(const int tagId, const int64_t timeNs, @@ -197,7 +200,7 @@ bool StatsPullerManagerImpl::PullerForMatcherExists(int tagId) const { } void StatsPullerManagerImpl::updateAlarmLocked() { - if (mNextPullTimeNs == LONG_MAX) { + if (mNextPullTimeNs == NO_ALARM_UPDATE) { VLOG("No need to set alarms. Skipping"); return; } @@ -278,7 +281,7 @@ void StatsPullerManagerImpl::UnRegisterReceiver(int tagId, wp<PullDataReceiver> void StatsPullerManagerImpl::OnAlarmFired(const int64_t currentTimeNs) { AutoMutex _l(mLock); - int64_t minNextPullTimeNs = LONG_MAX; + int64_t minNextPullTimeNs = NO_ALARM_UPDATE; vector<pair<int, vector<ReceiverInfo*>>> needToPull = vector<pair<int, vector<ReceiverInfo*>>>(); @@ -322,6 +325,8 @@ void StatsPullerManagerImpl::OnAlarmFired(const int64_t currentTimeNs) { } } + VLOG("mNextPullTimeNs: %lld updated to %lld", (long long)mNextPullTimeNs, + (long long)minNextPullTimeNs); mNextPullTimeNs = minNextPullTimeNs; updateAlarmLocked(); } diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp index a940d58b7c4d..55dde103902d 100644 --- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp +++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp @@ -186,7 +186,6 @@ void GaugeMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, flushIfNeededLocked(dumpTimeNs); } - flushIfNeededLocked(dumpTimeNs); if (mPastBuckets.empty()) { return; } @@ -324,6 +323,10 @@ void GaugeMetricProducer::pullLocked(const int64_t timestampNs) { triggerPuller = true; break; } + case GaugeMetric::CONDITION_CHANGE_TO_TRUE: { + triggerPuller = mCondition; + break; + } default: break; } @@ -348,7 +351,7 @@ void GaugeMetricProducer::onConditionChangedLocked(const bool conditionMet, flushIfNeededLocked(eventTimeNs); mCondition = conditionMet; - if (mPullTagId != -1 && mCondition) { + if (mPullTagId != -1) { pullLocked(eventTimeNs); } // else: Push mode. No need to proactively pull the gauge data. } @@ -538,7 +541,14 @@ void GaugeMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) { size_t GaugeMetricProducer::byteSizeLocked() const { size_t totalSize = 0; for (const auto& pair : mPastBuckets) { - totalSize += pair.second.size() * kBucketSize; + for (const auto& bucket : pair.second) { + totalSize += bucket.mGaugeAtoms.size() * sizeof(GaugeAtom); + for (const auto& atom : bucket.mGaugeAtoms) { + if (atom.mFields != nullptr) { + totalSize += atom.mFields->size() * sizeof(FieldValue); + } + } + } } return totalSize; } diff --git a/cmds/statsd/src/metrics/MetricsManager.cpp b/cmds/statsd/src/metrics/MetricsManager.cpp index bf0f7206174b..2d14b05c8f5b 100644 --- a/cmds/statsd/src/metrics/MetricsManager.cpp +++ b/cmds/statsd/src/metrics/MetricsManager.cpp @@ -62,7 +62,7 @@ MetricsManager::MetricsManager(const ConfigKey& key, const StatsdConfig& config, : mConfigKey(key), mUidMap(uidMap), mTtlNs(config.has_ttl_in_seconds() ? config.ttl_in_seconds() * NS_PER_SEC : -1), mTtlEndNs(-1), - mLastReportTimeNs(timeBaseNs), + mLastReportTimeNs(currentTimeNs), mLastReportWallClockNs(getWallClockNs()) { // Init the ttl end timestamp. refreshTtl(timeBaseNs); @@ -247,16 +247,6 @@ void MetricsManager::onLogEvent(const LogEvent& event) { return; } - // Label is 2nd from last field and must be from [0, 15]. - long appHookLabel = event.GetLong(event.size()-1, &err); - if (err != NO_ERROR ) { - VLOG("APP_BREADCRUMB_REPORTED had error when parsing the label field"); - return; - } else if (appHookLabel < 0 || appHookLabel > 15) { - VLOG("APP_BREADCRUMB_REPORTED does not have valid label %ld", appHookLabel); - return; - } - // The state must be from 0,3. This part of code must be manually updated. long appHookState = event.GetLong(event.size(), &err); if (err != NO_ERROR ) { diff --git a/cmds/statsd/src/metrics/MetricsManager.h b/cmds/statsd/src/metrics/MetricsManager.h index 170d6a7eacae..e143b5a582dd 100644 --- a/cmds/statsd/src/metrics/MetricsManager.h +++ b/cmds/statsd/src/metrics/MetricsManager.h @@ -67,6 +67,10 @@ public: return !mAllowedPkg.empty(); } + bool shouldWriteToDisk() const { + return mNoReportMetricIds.size() != mAllMetricProducers.size(); + } + void dumpStates(FILE* out, bool verbose); inline bool isInTtl(const int64_t timestampNs) const { @@ -79,7 +83,8 @@ public: } }; - // Returns the elapsed realtime when this metric manager last reported metrics. + // Returns the elapsed realtime when this metric manager last reported metrics. If this config + // has not yet dumped any reports, this is the time the metricsmanager was initialized. inline int64_t getLastReportTimeNs() const { return mLastReportTimeNs; }; @@ -88,6 +93,10 @@ public: return mLastReportWallClockNs; }; + inline size_t getNumMetrics() const { + return mAllMetricProducers.size(); + } + virtual void dropData(const int64_t dropTimeNs); virtual void onDumpReport(const int64_t dumpTimeNs, diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp index 69330ba2a0c7..df8763cda244 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp +++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp @@ -396,7 +396,7 @@ void ValueMetricProducer::onMatchedLogEventInternalLocked( // If not, there was a reset event. We take the absolute value as // diff in this case. if (interval.startUpdated) { - if (value > interval.start) { + if (value >= interval.start) { interval.sum += (value - interval.start); } else { interval.sum += value; diff --git a/cmds/statsd/src/statsd_config.proto b/cmds/statsd/src/statsd_config.proto index fd365602427d..9b5d72bf56dc 100644 --- a/cmds/statsd/src/statsd_config.proto +++ b/cmds/statsd/src/statsd_config.proto @@ -234,6 +234,7 @@ message GaugeMetric { enum SamplingType { RANDOM_ONE_SAMPLE = 1; ALL_CONDITION_CHANGES = 2; + CONDITION_CHANGE_TO_TRUE = 3; } optional SamplingType sampling_type = 9 [default = RANDOM_ONE_SAMPLE] ; diff --git a/cmds/statsd/src/storage/StorageManager.cpp b/cmds/statsd/src/storage/StorageManager.cpp index ea8da1408017..1f8181266b65 100644 --- a/cmds/statsd/src/storage/StorageManager.cpp +++ b/cmds/statsd/src/storage/StorageManager.cpp @@ -160,6 +160,34 @@ void StorageManager::sendBroadcast(const char* path, } } +bool StorageManager::hasConfigMetricsReport(const ConfigKey& key) { + unique_ptr<DIR, decltype(&closedir)> dir(opendir(STATS_DATA_DIR), closedir); + if (dir == NULL) { + VLOG("Path %s does not exist", STATS_DATA_DIR); + return false; + } + + string suffix = StringPrintf("%d_%lld", key.GetUid(), (long long)key.GetId()); + + dirent* de; + while ((de = readdir(dir.get()))) { + char* name = de->d_name; + if (name[0] == '.') continue; + + size_t nameLen = strlen(name); + size_t suffixLen = suffix.length(); + if (suffixLen <= nameLen && + strncmp(name + nameLen - suffixLen, suffix.c_str(), suffixLen) == 0) { + // Check again that the file name is parseable. + int64_t result[3]; + parseFileName(name, result); + if (result[0] == -1) continue; + return true; + } + } + return false; +} + void StorageManager::appendConfigMetricsReport(const ConfigKey& key, ProtoOutputStream* proto) { unique_ptr<DIR, decltype(&closedir)> dir(opendir(STATS_DATA_DIR), closedir); if (dir == NULL) { diff --git a/cmds/statsd/src/storage/StorageManager.h b/cmds/statsd/src/storage/StorageManager.h index 8953be97aeaf..4840f3c4fa34 100644 --- a/cmds/statsd/src/storage/StorageManager.h +++ b/cmds/statsd/src/storage/StorageManager.h @@ -63,6 +63,11 @@ public: const std::function<void(const ConfigKey&)>& sendBroadcast); /** + * Returns true if there's at least one report on disk. + */ + static bool hasConfigMetricsReport(const ConfigKey& key); + + /** * Appends ConfigMetricsReport found on disk to the specific proto and * delete it. */ diff --git a/cmds/statsd/tests/StatsLogProcessor_test.cpp b/cmds/statsd/tests/StatsLogProcessor_test.cpp index 9fdf7a33a7d0..3395aa639aab 100644 --- a/cmds/statsd/tests/StatsLogProcessor_test.cpp +++ b/cmds/statsd/tests/StatsLogProcessor_test.cpp @@ -24,6 +24,8 @@ #include <gmock/gmock.h> #include <gtest/gtest.h> +#include "tests/statsd_test_util.h" + #include <stdio.h> using namespace android; @@ -62,7 +64,7 @@ TEST(StatsLogProcessorTest, TestRateLimitByteSize) { sp<AlarmMonitor> periodicAlarmMonitor; // Construct the processor with a dummy sendBroadcast function that does nothing. StatsLogProcessor p(m, anomalyAlarmMonitor, periodicAlarmMonitor, 0, - [](const ConfigKey& key) {}); + [](const ConfigKey& key) {return true;}); MockMetricsManager mockMetricsManager; @@ -81,7 +83,7 @@ TEST(StatsLogProcessorTest, TestRateLimitBroadcast) { sp<AlarmMonitor> subscriberAlarmMonitor; int broadcastCount = 0; StatsLogProcessor p(m, anomalyAlarmMonitor, subscriberAlarmMonitor, 0, - [&broadcastCount](const ConfigKey& key) { broadcastCount++; }); + [&broadcastCount](const ConfigKey& key) { broadcastCount++; return true;}); MockMetricsManager mockMetricsManager; @@ -107,7 +109,7 @@ TEST(StatsLogProcessorTest, TestDropWhenByteSizeTooLarge) { sp<AlarmMonitor> subscriberAlarmMonitor; int broadcastCount = 0; StatsLogProcessor p(m, anomalyAlarmMonitor, subscriberAlarmMonitor, 0, - [&broadcastCount](const ConfigKey& key) { broadcastCount++; }); + [&broadcastCount](const ConfigKey& key) { broadcastCount++; return true;}); MockMetricsManager mockMetricsManager; @@ -123,6 +125,21 @@ TEST(StatsLogProcessorTest, TestDropWhenByteSizeTooLarge) { EXPECT_EQ(0, broadcastCount); } +StatsdConfig MakeConfig(bool includeMetric) { + StatsdConfig config; + config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root. + + if (includeMetric) { + auto appCrashMatcher = CreateProcessCrashAtomMatcher(); + *config.add_atom_matcher() = appCrashMatcher; + auto countMetric = config.add_count_metric(); + countMetric->set_id(StringToId("AppCrashes")); + countMetric->set_what(appCrashMatcher.id()); + countMetric->set_bucket(FIVE_MINUTES); + } + return config; +} + TEST(StatsLogProcessorTest, TestUidMapHasSnapshot) { // Setup simple config key corresponding to empty config. sp<UidMap> m = new UidMap(); @@ -131,10 +148,9 @@ TEST(StatsLogProcessorTest, TestUidMapHasSnapshot) { sp<AlarmMonitor> subscriberAlarmMonitor; int broadcastCount = 0; StatsLogProcessor p(m, anomalyAlarmMonitor, subscriberAlarmMonitor, 0, - [&broadcastCount](const ConfigKey& key) { broadcastCount++; }); + [&broadcastCount](const ConfigKey& key) { broadcastCount++; return true;}); ConfigKey key(3, 4); - StatsdConfig config; - config.add_allowed_log_source("AID_ROOT"); + StatsdConfig config = MakeConfig(true); p.OnConfigUpdated(0, key, config); // Expect to get no metrics, but snapshot specified above in uidmap. @@ -149,6 +165,29 @@ TEST(StatsLogProcessorTest, TestUidMapHasSnapshot) { EXPECT_EQ(2, uidmap.snapshots(0).package_info_size()); } +TEST(StatsLogProcessorTest, TestEmptyConfigHasNoUidMap) { + // Setup simple config key corresponding to empty config. + sp<UidMap> m = new UidMap(); + m->updateMap(1, {1, 2}, {1, 2}, {String16("p1"), String16("p2")}); + sp<AlarmMonitor> anomalyAlarmMonitor; + sp<AlarmMonitor> subscriberAlarmMonitor; + int broadcastCount = 0; + StatsLogProcessor p(m, anomalyAlarmMonitor, subscriberAlarmMonitor, 0, + [&broadcastCount](const ConfigKey& key) { broadcastCount++; return true;}); + ConfigKey key(3, 4); + StatsdConfig config = MakeConfig(false); + p.OnConfigUpdated(0, key, config); + + // Expect to get no metrics, but snapshot specified above in uidmap. + vector<uint8_t> bytes; + p.onDumpReport(key, 1, false, true, ADB_DUMP, &bytes); + + ConfigMetricsReportList output; + output.ParseFromArray(bytes.data(), bytes.size()); + EXPECT_TRUE(output.reports_size() > 0); + EXPECT_FALSE(output.reports(0).has_uid_map()); +} + TEST(StatsLogProcessorTest, TestReportIncludesSubConfig) { // Setup simple config key corresponding to empty config. sp<UidMap> m = new UidMap(); @@ -156,7 +195,7 @@ TEST(StatsLogProcessorTest, TestReportIncludesSubConfig) { sp<AlarmMonitor> subscriberAlarmMonitor; int broadcastCount = 0; StatsLogProcessor p(m, anomalyAlarmMonitor, subscriberAlarmMonitor, 0, - [&broadcastCount](const ConfigKey& key) { broadcastCount++; }); + [&broadcastCount](const ConfigKey& key) { broadcastCount++; return true;}); ConfigKey key(3, 4); StatsdConfig config; auto annotation = config.add_annotation(); @@ -185,7 +224,7 @@ TEST(StatsLogProcessorTest, TestOutOfOrderLogs) { sp<AlarmMonitor> subscriberAlarmMonitor; int broadcastCount = 0; StatsLogProcessor p(m, anomalyAlarmMonitor, subscriberAlarmMonitor, 0, - [&broadcastCount](const ConfigKey& key) { broadcastCount++; }); + [&broadcastCount](const ConfigKey& key) { broadcastCount++; return true;}); LogEvent event1(0, 1 /*logd timestamp*/, 1001 /*elapsedRealtime*/); event1.init(); diff --git a/cmds/statsd/tests/UidMap_test.cpp b/cmds/statsd/tests/UidMap_test.cpp index dde50c2597da..e23131d7b45d 100644 --- a/cmds/statsd/tests/UidMap_test.cpp +++ b/cmds/statsd/tests/UidMap_test.cpp @@ -44,7 +44,7 @@ TEST(UidMapTest, TestIsolatedUID) { sp<AlarmMonitor> subscriberAlarmMonitor; // Construct the processor with a dummy sendBroadcast function that does nothing. StatsLogProcessor p(m, anomalyAlarmMonitor, subscriberAlarmMonitor, 0, - [](const ConfigKey& key) {}); + [](const ConfigKey& key) {return true;}); LogEvent addEvent(android::util::ISOLATED_UID_CHANGED, 1); addEvent.write(100); // parent UID addEvent.write(101); // isolated UID diff --git a/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp b/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp index 6a69100b83b0..7c0736611452 100644 --- a/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp +++ b/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp @@ -66,6 +66,7 @@ TEST(GaugeMetricE2eTest, TestRandomSamplePulledEvents) { baseTimeNs, configAddedTimeNs, config, cfgKey); EXPECT_EQ(processor->mMetricsManagers.size(), 1u); EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid()); + processor->mStatsPullerManager.ForceClearPullerCache(); int startBucketNum = processor->mMetricsManagers.begin()->second-> mAllMetricProducers[0]->getCurrentBucketNum(); @@ -211,6 +212,7 @@ TEST(GaugeMetricE2eTest, TestAllConditionChangesSamplePulledEvents) { baseTimeNs, configAddedTimeNs, config, cfgKey); EXPECT_EQ(processor->mMetricsManagers.size(), 1u); EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid()); + processor->mStatsPullerManager.ForceClearPullerCache(); int startBucketNum = processor->mMetricsManagers.begin()->second-> mAllMetricProducers[0]->getCurrentBucketNum(); @@ -311,6 +313,7 @@ TEST(GaugeMetricE2eTest, TestRandomSamplePulledEvent_LateAlarm) { baseTimeNs, configAddedTimeNs, config, cfgKey); EXPECT_EQ(processor->mMetricsManagers.size(), 1u); EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid()); + processor->mStatsPullerManager.ForceClearPullerCache(); int startBucketNum = processor->mMetricsManagers.begin()->second-> mAllMetricProducers[0]->getCurrentBucketNum(); diff --git a/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp b/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp index 545fa015b3ec..ad0256916d8f 100644 --- a/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp +++ b/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp @@ -110,8 +110,8 @@ StatsdConfig MakeGaugeMetricConfig(int64_t minTime) { TEST(PartialBucketE2eTest, TestCountMetricWithoutSplit) { StatsService service(nullptr); SendConfig(service, MakeConfig()); - const long start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are - // initialized with. + int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are + // initialized with. service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get()); service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 2).get()); @@ -124,8 +124,8 @@ TEST(PartialBucketE2eTest, TestCountMetricWithoutSplit) { TEST(PartialBucketE2eTest, TestCountMetricNoSplitOnNewApp) { StatsService service(nullptr); SendConfig(service, MakeConfig()); - const long start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are - // initialized with. + int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are + // initialized with. // Force the uidmap to update at timestamp 2. service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get()); @@ -142,8 +142,8 @@ TEST(PartialBucketE2eTest, TestCountMetricNoSplitOnNewApp) { TEST(PartialBucketE2eTest, TestCountMetricSplitOnUpgrade) { StatsService service(nullptr); SendConfig(service, MakeConfig()); - const long start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are - // initialized with. + int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are + // initialized with. service.mUidMap->updateMap(start, {1}, {1}, {String16(kApp1.c_str())}); // Force the uidmap to update at timestamp 2. @@ -165,8 +165,8 @@ TEST(PartialBucketE2eTest, TestCountMetricSplitOnUpgrade) { TEST(PartialBucketE2eTest, TestCountMetricSplitOnRemoval) { StatsService service(nullptr); SendConfig(service, MakeConfig()); - const long start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are - // initialized with. + int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are + // initialized with. service.mUidMap->updateMap(start, {1}, {1}, {String16(kApp1.c_str())}); // Force the uidmap to update at timestamp 2. @@ -190,8 +190,8 @@ TEST(PartialBucketE2eTest, TestValueMetricWithoutMinPartialBucket) { // Partial buckets don't occur when app is first installed. service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1); SendConfig(service, MakeValueMetricConfig(0)); - const long start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are - // initialized with. + int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are + // initialized with. service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start); service.mUidMap->updateApp(5 * 60 * NS_PER_SEC + start + 2, String16(kApp1.c_str()), 1, 2); @@ -207,8 +207,8 @@ TEST(PartialBucketE2eTest, TestValueMetricWithMinPartialBucket) { // Partial buckets don't occur when app is first installed. service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1); SendConfig(service, MakeValueMetricConfig(60 * NS_PER_SEC /* One minute */)); - const long start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are - // initialized with. + int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are + // initialized with. const int64_t endSkipped = 5 * 60 * NS_PER_SEC + start + 2; service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start); @@ -230,8 +230,8 @@ TEST(PartialBucketE2eTest, TestGaugeMetricWithoutMinPartialBucket) { // Partial buckets don't occur when app is first installed. service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1); SendConfig(service, MakeGaugeMetricConfig(0)); - const long start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are - // initialized with. + int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are + // initialized with. service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start); service.mUidMap->updateApp(5 * 60 * NS_PER_SEC + start + 2, String16(kApp1.c_str()), 1, 2); @@ -247,8 +247,8 @@ TEST(PartialBucketE2eTest, TestGaugeMetricWithMinPartialBucket) { // Partial buckets don't occur when app is first installed. service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1); SendConfig(service, MakeGaugeMetricConfig(60 * NS_PER_SEC /* One minute */)); - const long start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are - // initialized with. + int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are + // initialized with. const int64_t endSkipped = 5 * 60 * NS_PER_SEC + start + 2; service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start); diff --git a/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp b/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp index 98a312f7ded6..febc958b235e 100644 --- a/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp +++ b/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp @@ -66,6 +66,7 @@ TEST(ValueMetricE2eTest, TestPulledEvents) { baseTimeNs, configAddedTimeNs, config, cfgKey); EXPECT_EQ(processor->mMetricsManagers.size(), 1u); EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid()); + processor->mStatsPullerManager.ForceClearPullerCache(); int startBucketNum = processor->mMetricsManagers.begin()->second-> mAllMetricProducers[0]->getCurrentBucketNum(); @@ -172,6 +173,7 @@ TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm) { baseTimeNs, configAddedTimeNs, config, cfgKey); EXPECT_EQ(processor->mMetricsManagers.size(), 1u); EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid()); + processor->mStatsPullerManager.ForceClearPullerCache(); int startBucketNum = processor->mMetricsManagers.begin()->second-> mAllMetricProducers[0]->getCurrentBucketNum(); diff --git a/cmds/statsd/tests/statsd_test_util.cpp b/cmds/statsd/tests/statsd_test_util.cpp index 590399312b88..e0c98cb9735b 100644 --- a/cmds/statsd/tests/statsd_test_util.cpp +++ b/cmds/statsd/tests/statsd_test_util.cpp @@ -459,7 +459,7 @@ sp<StatsLogProcessor> CreateStatsLogProcessor(const int64_t timeBaseNs, const in new AlarmMonitor(1, [](const sp<IStatsCompanionService>&, int64_t){}, [](const sp<IStatsCompanionService>&){}); sp<StatsLogProcessor> processor = new StatsLogProcessor( - uidMap, anomalyAlarmMonitor, periodicAlarmMonitor, timeBaseNs, [](const ConfigKey&){}); + uidMap, anomalyAlarmMonitor, periodicAlarmMonitor, timeBaseNs, [](const ConfigKey&){return true;}); processor->OnConfigUpdated(currentTimeNs, key, config); return processor; } diff --git a/config/hiddenapi-dark-greylist.txt b/config/hiddenapi-dark-greylist.txt deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/config/hiddenapi-dark-greylist.txt +++ /dev/null diff --git a/config/hiddenapi-force-blacklist.txt b/config/hiddenapi-force-blacklist.txt new file mode 100644 index 000000000000..0c689e82eb4b --- /dev/null +++ b/config/hiddenapi-force-blacklist.txt @@ -0,0 +1,37 @@ +Ldalvik/system/VMRuntime;->setHiddenApiExemptions([Ljava/lang/String;)V +Ljava/lang/invoke/VarHandle;->acquireFence()V +Ljava/lang/invoke/VarHandle;->compareAndExchange([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->compareAndExchangeAcquire([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->compareAndExchangeRelease([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->compareAndSet([[Ljava/lang/Object;)Z +Ljava/lang/invoke/VarHandle;->fullFence()V +Ljava/lang/invoke/VarHandle;->get([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAcquire([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndAdd([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndAddAcquire([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndAddRelease([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndBitwiseAnd([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndBitwiseAndAcquire([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndBitwiseAndRelease([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndBitwiseOr([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndBitwiseOrAcquire([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndBitwiseOrRelease([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndBitwiseXor([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndBitwiseXorAcquire([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndBitwiseXorRelease([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndSet([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndSetAcquire([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getAndSetRelease([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getOpaque([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->getVolatile([[Ljava/lang/Object;)Ljava/lang/Object; +Ljava/lang/invoke/VarHandle;->loadLoadFence()V +Ljava/lang/invoke/VarHandle;->releaseFence()V +Ljava/lang/invoke/VarHandle;->set([[Ljava/lang/Object;)V +Ljava/lang/invoke/VarHandle;->setOpaque([[Ljava/lang/Object;)V +Ljava/lang/invoke/VarHandle;->setRelease([[Ljava/lang/Object;)V +Ljava/lang/invoke/VarHandle;->setVolatile([[Ljava/lang/Object;)V +Ljava/lang/invoke/VarHandle;->storeStoreFence()V +Ljava/lang/invoke/VarHandle;->weakCompareAndSet([[Ljava/lang/Object;)Z +Ljava/lang/invoke/VarHandle;->weakCompareAndSetAcquire([[Ljava/lang/Object;)Z +Ljava/lang/invoke/VarHandle;->weakCompareAndSetPlain([[Ljava/lang/Object;)Z +Ljava/lang/invoke/VarHandle;->weakCompareAndSetRelease([[Ljava/lang/Object;)Z diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt index 29d7a21b8b77..b9ead8bf8965 100644 --- a/config/hiddenapi-light-greylist.txt +++ b/config/hiddenapi-light-greylist.txt @@ -1,10 +1,33 @@ +Landroid/accessibilityservice/AccessibilityService;->mInfo:Landroid/accessibilityservice/AccessibilityServiceInfo; +Landroid/accessibilityservice/AccessibilityService;->mWindowToken:Landroid/os/IBinder; +Landroid/accessibilityservice/AccessibilityServiceInfo;->setCapabilities(I)V +Landroid/accessibilityservice/IAccessibilityServiceConnection$Stub;-><init>()V +Landroid/accessibilityservice/IAccessibilityServiceConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accessibilityservice/IAccessibilityServiceConnection; +Landroid/accounts/Account;->accessId:Ljava/lang/String; +Landroid/accounts/Account;->TAG:Ljava/lang/String; +Landroid/accounts/AccountAndUser;-><init>(Landroid/accounts/Account;I)V +Landroid/accounts/AccountAndUser;->account:Landroid/accounts/Account; +Landroid/accounts/AccountAndUser;->userId:I +Landroid/accounts/AccountAuthenticatorResponse;-><init>(Landroid/accounts/IAccountAuthenticatorResponse;)V +Landroid/accounts/AccountManager$AmsTask;->mActivity:Landroid/app/Activity; +Landroid/accounts/AccountManager$AmsTask;->mHandler:Landroid/os/Handler; +Landroid/accounts/AccountManager$AmsTask;->mResponse:Landroid/accounts/IAccountManagerResponse; +Landroid/accounts/AccountManager$GetAuthTokenByTypeAndFeaturesTask;->mAuthTokenType:Ljava/lang/String; +Landroid/accounts/AccountManager$GetAuthTokenByTypeAndFeaturesTask;->mLoginOptions:Landroid/os/Bundle; +Landroid/accounts/AccountManager$GetAuthTokenByTypeAndFeaturesTask;->mMyCallback:Landroid/accounts/AccountManagerCallback; +Landroid/accounts/AccountManager;-><init>(Landroid/content/Context;Landroid/accounts/IAccountManager;)V +Landroid/accounts/AccountManager;->confirmCredentialsAsUser(Landroid/accounts/Account;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;Landroid/os/UserHandle;)Landroid/accounts/AccountManagerFuture; +Landroid/accounts/AccountManager;->getAccountsByTypeAsUser(Ljava/lang/String;Landroid/os/UserHandle;)[Landroid/accounts/Account; Landroid/accounts/AccountManager;->mContext:Landroid/content/Context; Landroid/accounts/IAccountAuthenticator$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/accounts/IAccountAuthenticator$Stub$Proxy;->mRemote:Landroid/os/IBinder; +Landroid/accounts/IAccountAuthenticator$Stub;-><init>()V Landroid/accounts/IAccountAuthenticator$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountAuthenticator; Landroid/accounts/IAccountAuthenticator;->addAccount(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)V +Landroid/accounts/IAccountAuthenticator;->addAccountFromCredentials(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)V Landroid/accounts/IAccountAuthenticator;->confirmCredentials(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)V Landroid/accounts/IAccountAuthenticator;->editProperties(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;)V +Landroid/accounts/IAccountAuthenticator;->getAccountCredentialsForCloning(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;)V Landroid/accounts/IAccountAuthenticator;->getAccountRemovalAllowed(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;)V Landroid/accounts/IAccountAuthenticator;->getAuthToken(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V Landroid/accounts/IAccountAuthenticator;->getAuthTokenLabel(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;)V @@ -14,7 +37,11 @@ Landroid/accounts/IAccountAuthenticatorResponse$Stub$Proxy;-><init>(Landroid/os/ Landroid/accounts/IAccountAuthenticatorResponse$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/accounts/IAccountAuthenticatorResponse$Stub;-><init>()V Landroid/accounts/IAccountAuthenticatorResponse$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountAuthenticatorResponse; +Landroid/accounts/IAccountAuthenticatorResponse;->onError(ILjava/lang/String;)V +Landroid/accounts/IAccountAuthenticatorResponse;->onRequestContinued()V +Landroid/accounts/IAccountAuthenticatorResponse;->onResult(Landroid/os/Bundle;)V Landroid/accounts/IAccountManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/accounts/IAccountManager$Stub;-><init>()V Landroid/accounts/IAccountManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountManager; Landroid/accounts/IAccountManagerResponse$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/accounts/IAccountManagerResponse$Stub$Proxy;->mRemote:Landroid/os/IBinder; @@ -22,43 +49,88 @@ Landroid/accounts/IAccountManagerResponse$Stub;-><init>()V Landroid/accounts/IAccountManagerResponse$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountManagerResponse; Landroid/accounts/IAccountManagerResponse;->onError(ILjava/lang/String;)V Landroid/accounts/IAccountManagerResponse;->onResult(Landroid/os/Bundle;)V +Landroid/animation/Animator;->reverse()V +Landroid/animation/ArgbEvaluator;->getInstance()Landroid/animation/ArgbEvaluator; Landroid/animation/LayoutTransition;->cancel()V Landroid/animation/LayoutTransition;->cancel(I)V Landroid/animation/ValueAnimator;->animateValue(F)V +Landroid/animation/ValueAnimator;->mDuration:J Landroid/animation/ValueAnimator;->sDurationScale:F +Landroid/app/ActionBar;->collapseActionView()Z +Landroid/app/ActionBar;->DISPLAY_TITLE_MULTIPLE_LINES:I Landroid/app/ActionBar;->setShowHideAnimationEnabled(Z)V +Landroid/app/Activity;->attach(Landroid/content/Context;Landroid/app/ActivityThread;Landroid/app/Instrumentation;Landroid/os/IBinder;ILandroid/app/Application;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/CharSequence;Landroid/app/Activity;Ljava/lang/String;Landroid/app/Activity$NonConfigurationInstances;Landroid/content/res/Configuration;Ljava/lang/String;Lcom/android/internal/app/IVoiceInteractor;Landroid/view/Window;Landroid/view/ViewRootImpl$ActivityConfigCallback;)V +Landroid/app/Activity;->dispatchActivityResult(Ljava/lang/String;IILandroid/content/Intent;Ljava/lang/String;)V +Landroid/app/Activity;->finish(I)V +Landroid/app/Activity;->FRAGMENTS_TAG:Ljava/lang/String; Landroid/app/Activity;->getActivityOptions()Landroid/app/ActivityOptions; Landroid/app/Activity;->getActivityToken()Landroid/os/IBinder; Landroid/app/Activity;->isResumed()Z Landroid/app/Activity;->mActivityInfo:Landroid/content/pm/ActivityInfo; +Landroid/app/Activity;->mActivityTransitionState:Landroid/app/ActivityTransitionState; Landroid/app/Activity;->mApplication:Landroid/app/Application; Landroid/app/Activity;->mCalled:Z Landroid/app/Activity;->mComponent:Landroid/content/ComponentName; Landroid/app/Activity;->mConfigChangeFlags:I Landroid/app/Activity;->mCurrentConfig:Landroid/content/res/Configuration; +Landroid/app/Activity;->mDestroyed:Z +Landroid/app/Activity;->mEmbeddedID:Ljava/lang/String; Landroid/app/Activity;->mFinished:Z Landroid/app/Activity;->mFragments:Landroid/app/FragmentController; Landroid/app/Activity;->mHandler:Landroid/os/Handler; +Landroid/app/Activity;->mIdent:I Landroid/app/Activity;->mInstrumentation:Landroid/app/Instrumentation; +Landroid/app/Activity;->mIntent:Landroid/content/Intent; +Landroid/app/Activity;->mLastNonConfigurationInstances:Landroid/app/Activity$NonConfigurationInstances; Landroid/app/Activity;->mMainThread:Landroid/app/ActivityThread; +Landroid/app/Activity;->mParent:Landroid/app/Activity; Landroid/app/Activity;->mReferrer:Ljava/lang/String; Landroid/app/Activity;->mResultCode:I Landroid/app/Activity;->mResultData:Landroid/content/Intent; Landroid/app/Activity;->mResumed:Z +Landroid/app/Activity;->mStopped:Z Landroid/app/Activity;->mTitle:Ljava/lang/CharSequence; Landroid/app/Activity;->mToken:Landroid/os/IBinder; +Landroid/app/Activity;->mVisibleFromClient:Z Landroid/app/Activity;->mWindow:Landroid/view/Window; +Landroid/app/Activity;->mWindowAdded:Z Landroid/app/Activity;->mWindowManager:Landroid/view/WindowManager; +Landroid/app/Activity;->performCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V +Landroid/app/Activity;->saveManagedDialogs(Landroid/os/Bundle;)V Landroid/app/Activity;->setDisablePreviewScreenshots(Z)V Landroid/app/Activity;->setPersistent(Z)V +Landroid/app/Activity;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V +Landroid/app/Activity;->startActivityForResult(Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;)V +Landroid/app/Activity;->startActivityForResultAsUser(Landroid/content/Intent;ILandroid/os/UserHandle;)V Landroid/app/ActivityGroup;->mLocalActivityManager:Landroid/app/LocalActivityManager; +Landroid/app/ActivityManager$MemoryInfo;->foregroundAppThreshold:J +Landroid/app/ActivityManager$MemoryInfo;->hiddenAppThreshold:J +Landroid/app/ActivityManager$MemoryInfo;->secondaryServerThreshold:J +Landroid/app/ActivityManager$MemoryInfo;->visibleAppThreshold:J +Landroid/app/ActivityManager$RecentTaskInfo;->affiliatedTaskColor:I Landroid/app/ActivityManager$RecentTaskInfo;->firstActiveTime:J Landroid/app/ActivityManager$RecentTaskInfo;->lastActiveTime:J Landroid/app/ActivityManager$RecentTaskInfo;->resizeMode:I +Landroid/app/ActivityManager$RecentTaskInfo;->stackId:I Landroid/app/ActivityManager$RecentTaskInfo;->supportsSplitScreenMultiWindow:Z Landroid/app/ActivityManager$RecentTaskInfo;->userId:I Landroid/app/ActivityManager$RunningAppProcessInfo;->flags:I +Landroid/app/ActivityManager$RunningAppProcessInfo;->FLAG_HAS_ACTIVITIES:I +Landroid/app/ActivityManager$RunningAppProcessInfo;->FLAG_PERSISTENT:I Landroid/app/ActivityManager$RunningAppProcessInfo;->processState:I +Landroid/app/ActivityManager$RunningAppProcessInfo;->procStateToImportance(I)I +Landroid/app/ActivityManager$StackInfo;->bounds:Landroid/graphics/Rect; +Landroid/app/ActivityManager$StackInfo;->displayId:I +Landroid/app/ActivityManager$StackInfo;->position:I +Landroid/app/ActivityManager$StackInfo;->stackId:I +Landroid/app/ActivityManager$StackInfo;->taskBounds:[Landroid/graphics/Rect; +Landroid/app/ActivityManager$StackInfo;->taskIds:[I +Landroid/app/ActivityManager$StackInfo;->taskNames:[Ljava/lang/String; +Landroid/app/ActivityManager$StackInfo;->taskUserIds:[I +Landroid/app/ActivityManager$StackInfo;->topActivity:Landroid/content/ComponentName; +Landroid/app/ActivityManager$StackInfo;->toString(Ljava/lang/String;)Ljava/lang/String; +Landroid/app/ActivityManager$StackInfo;->userId:I +Landroid/app/ActivityManager$StackInfo;->visible:Z Landroid/app/ActivityManager$TaskDescription;->getBackgroundColor()I Landroid/app/ActivityManager$TaskDescription;->getInMemoryIcon()Landroid/graphics/Bitmap; Landroid/app/ActivityManager$TaskSnapshot;->getContentInsets()Landroid/graphics/Rect; @@ -66,19 +138,33 @@ Landroid/app/ActivityManager$TaskSnapshot;->getOrientation()I Landroid/app/ActivityManager$TaskSnapshot;->getScale()F Landroid/app/ActivityManager$TaskSnapshot;->isRealSnapshot()Z Landroid/app/ActivityManager$TaskSnapshot;->isReducedResolution()Z +Landroid/app/ActivityManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V +Landroid/app/ActivityManager;->checkComponentPermission(Ljava/lang/String;IIZ)I Landroid/app/ActivityManager;->clearApplicationUserData(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)Z +Landroid/app/ActivityManager;->forceStopPackageAsUser(Ljava/lang/String;I)V Landroid/app/ActivityManager;->getMaxRecentTasksStatic()I Landroid/app/ActivityManager;->getService()Landroid/app/IActivityManager; Landroid/app/ActivityManager;->IActivityManagerSingleton:Landroid/util/Singleton; +Landroid/app/ActivityManager;->INTENT_SENDER_ACTIVITY:I Landroid/app/ActivityManager;->isHighEndGfx()Z Landroid/app/ActivityManager;->isLowRamDeviceStatic()Z Landroid/app/ActivityManager;->isUserRunning(I)Z Landroid/app/ActivityManager;->mContext:Landroid/content/Context; +Landroid/app/ActivityManager;->PROCESS_STATE_BOUND_FOREGROUND_SERVICE:I +Landroid/app/ActivityManager;->PROCESS_STATE_CACHED_ACTIVITY:I +Landroid/app/ActivityManager;->PROCESS_STATE_FOREGROUND_SERVICE:I +Landroid/app/ActivityManager;->PROCESS_STATE_HOME:I Landroid/app/ActivityManager;->PROCESS_STATE_IMPORTANT_BACKGROUND:I +Landroid/app/ActivityManager;->PROCESS_STATE_RECEIVER:I +Landroid/app/ActivityManager;->PROCESS_STATE_SERVICE:I Landroid/app/ActivityManager;->PROCESS_STATE_TOP:I Landroid/app/ActivityManager;->setPersistentVrThread(I)V +Landroid/app/ActivityManager;->staticGetMemoryClass()I +Landroid/app/ActivityManagerNative;-><init>()V Landroid/app/ActivityManagerNative;->asInterface(Landroid/os/IBinder;)Landroid/app/IActivityManager; Landroid/app/ActivityManagerNative;->getDefault()Landroid/app/IActivityManager; +Landroid/app/ActivityManagerNative;->isSystemReady()Z +Landroid/app/ActivityOptions;->makeCustomAnimation(Landroid/content/Context;IILandroid/os/Handler;Landroid/app/ActivityOptions$OnAnimationStartedListener;)Landroid/app/ActivityOptions; Landroid/app/ActivityOptions;->makeMultiThumbFutureAspectScaleAnimation(Landroid/content/Context;Landroid/os/Handler;Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/app/ActivityOptions$OnAnimationStartedListener;Z)Landroid/app/ActivityOptions; Landroid/app/ActivityThread$ActivityClientRecord;->activity:Landroid/app/Activity; Landroid/app/ActivityThread$ActivityClientRecord;->activityInfo:Landroid/content/pm/ActivityInfo; @@ -90,6 +176,7 @@ Landroid/app/ActivityThread$ActivityClientRecord;->paused:Z Landroid/app/ActivityThread$ActivityClientRecord;->stopped:Z Landroid/app/ActivityThread$ActivityClientRecord;->token:Landroid/os/IBinder; Landroid/app/ActivityThread$AppBindData;->appInfo:Landroid/content/pm/ApplicationInfo; +Landroid/app/ActivityThread$AppBindData;->compatInfo:Landroid/content/res/CompatibilityInfo; Landroid/app/ActivityThread$AppBindData;->info:Landroid/app/LoadedApk; Landroid/app/ActivityThread$AppBindData;->instrumentationArgs:Landroid/os/Bundle; Landroid/app/ActivityThread$AppBindData;->persistent:Z @@ -124,6 +211,10 @@ Landroid/app/ActivityThread$ReceiverData;->info:Landroid/content/pm/ActivityInfo Landroid/app/ActivityThread$ReceiverData;->intent:Landroid/content/Intent; Landroid/app/ActivityThread$ServiceArgsData;->args:Landroid/content/Intent; Landroid/app/ActivityThread$ServiceArgsData;->token:Landroid/os/IBinder; +Landroid/app/ActivityThread;-><init>()V +Landroid/app/ActivityThread;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider; +Landroid/app/ActivityThread;->acquireProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider; +Landroid/app/ActivityThread;->attach(ZJ)V Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread; Landroid/app/ActivityThread;->currentApplication()Landroid/app/Application; Landroid/app/ActivityThread;->currentPackageName()Ljava/lang/String; @@ -133,16 +224,21 @@ Landroid/app/ActivityThread;->getApplication()Landroid/app/Application; Landroid/app/ActivityThread;->getApplicationThread()Landroid/app/ActivityThread$ApplicationThread; Landroid/app/ActivityThread;->getHandler()Landroid/os/Handler; Landroid/app/ActivityThread;->getInstrumentation()Landroid/app/Instrumentation; +Landroid/app/ActivityThread;->getLooper()Landroid/os/Looper; Landroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;I)Landroid/app/LoadedApk; +Landroid/app/ActivityThread;->getPackageInfo(Ljava/lang/String;Landroid/content/res/CompatibilityInfo;I)Landroid/app/LoadedApk; Landroid/app/ActivityThread;->getPackageInfoNoCheck(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;)Landroid/app/LoadedApk; Landroid/app/ActivityThread;->getPackageManager()Landroid/content/pm/IPackageManager; Landroid/app/ActivityThread;->getProcessName()Ljava/lang/String; Landroid/app/ActivityThread;->getSystemContext()Landroid/app/ContextImpl; Landroid/app/ActivityThread;->handleBindApplication(Landroid/app/ActivityThread$AppBindData;)V +Landroid/app/ActivityThread;->handleUnstableProviderDied(Landroid/os/IBinder;Z)V Landroid/app/ActivityThread;->installContentProviders(Landroid/content/Context;Ljava/util/List;)V Landroid/app/ActivityThread;->installProvider(Landroid/content/Context;Landroid/app/ContentProviderHolder;Landroid/content/pm/ProviderInfo;ZZZ)Landroid/app/ContentProviderHolder; +Landroid/app/ActivityThread;->installSystemProviders(Ljava/util/List;)V Landroid/app/ActivityThread;->mActivities:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->mAllApplications:Ljava/util/ArrayList; +Landroid/app/ActivityThread;->mAppThread:Landroid/app/ActivityThread$ApplicationThread; Landroid/app/ActivityThread;->mBoundApplication:Landroid/app/ActivityThread$AppBindData; Landroid/app/ActivityThread;->mConfiguration:Landroid/content/res/Configuration; Landroid/app/ActivityThread;->mCurDefaultDisplayDpi:I @@ -150,8 +246,11 @@ Landroid/app/ActivityThread;->mDensityCompatMode:Z Landroid/app/ActivityThread;->mH:Landroid/app/ActivityThread$H; Landroid/app/ActivityThread;->mInitialApplication:Landroid/app/Application; Landroid/app/ActivityThread;->mInstrumentation:Landroid/app/Instrumentation; +Landroid/app/ActivityThread;->mInstrumentationAppDir:Ljava/lang/String; +Landroid/app/ActivityThread;->mInstrumentedAppDir:Ljava/lang/String; Landroid/app/ActivityThread;->mLocalProviders:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->mLocalProvidersByName:Landroid/util/ArrayMap; +Landroid/app/ActivityThread;->mLooper:Landroid/os/Looper; Landroid/app/ActivityThread;->mNumVisibleActivities:I Landroid/app/ActivityThread;->mPackages:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->mPendingConfiguration:Landroid/content/res/Configuration; @@ -159,29 +258,61 @@ Landroid/app/ActivityThread;->mProviderMap:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->mResourcePackages:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->mResourcesManager:Landroid/app/ResourcesManager; Landroid/app/ActivityThread;->mServices:Landroid/util/ArrayMap; +Landroid/app/ActivityThread;->mSystemContext:Landroid/app/ContextImpl; +Landroid/app/ActivityThread;->peekPackageInfo(Ljava/lang/String;Z)Landroid/app/LoadedApk; Landroid/app/ActivityThread;->performNewIntents(Landroid/os/IBinder;Ljava/util/List;Z)V Landroid/app/ActivityThread;->performStopActivity(Landroid/os/IBinder;ZLjava/lang/String;)V +Landroid/app/ActivityThread;->releaseProvider(Landroid/content/IContentProvider;Z)Z +Landroid/app/ActivityThread;->scheduleGcIdler()V Landroid/app/ActivityThread;->sCurrentActivityThread:Landroid/app/ActivityThread; Landroid/app/ActivityThread;->sendActivityResult(Landroid/os/IBinder;Ljava/lang/String;IILandroid/content/Intent;)V +Landroid/app/ActivityThread;->sMainThreadHandler:Landroid/os/Handler; Landroid/app/ActivityThread;->sPackageManager:Landroid/content/pm/IPackageManager; Landroid/app/ActivityThread;->startActivityNow(Landroid/app/Activity;Ljava/lang/String;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/os/IBinder;Landroid/os/Bundle;Landroid/app/Activity$NonConfigurationInstances;)Landroid/app/Activity; +Landroid/app/ActivityThread;->systemMain()Landroid/app/ActivityThread; +Landroid/app/admin/DeviceAdminInfo$PolicyInfo;->tag:Ljava/lang/String; +Landroid/app/admin/DeviceAdminInfo;->getUsedPolicies()Ljava/util/ArrayList; +Landroid/app/admin/DevicePolicyManager;->ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED:Ljava/lang/String; +Landroid/app/admin/DevicePolicyManager;->getActiveAdminsAsUser(I)Ljava/util/List; +Landroid/app/admin/DevicePolicyManager;->getCameraDisabled(Landroid/content/ComponentName;I)Z +Landroid/app/admin/DevicePolicyManager;->getCurrentFailedPasswordAttempts(I)I +Landroid/app/admin/DevicePolicyManager;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;I)I Landroid/app/admin/DevicePolicyManager;->getMandatoryBackupTransport()Landroid/content/ComponentName; +Landroid/app/admin/DevicePolicyManager;->getMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;I)I +Landroid/app/admin/DevicePolicyManager;->getMaximumTimeToLock(Landroid/content/ComponentName;I)J +Landroid/app/admin/DevicePolicyManager;->getPasswordHistoryLength(Landroid/content/ComponentName;I)I +Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumLength(Landroid/content/ComponentName;I)I +Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumLetters(Landroid/content/ComponentName;I)I +Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumLowerCase(Landroid/content/ComponentName;I)I +Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumNonLetter(Landroid/content/ComponentName;I)I +Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumNumeric(Landroid/content/ComponentName;I)I +Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumSymbols(Landroid/content/ComponentName;I)I +Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumUpperCase(Landroid/content/ComponentName;I)I +Landroid/app/admin/DevicePolicyManager;->getPasswordQuality(Landroid/content/ComponentName;I)I Landroid/app/admin/DevicePolicyManager;->getProfileOwnerAsUser(I)Landroid/content/ComponentName; +Landroid/app/admin/DevicePolicyManager;->getRequiredStrongAuthTimeout(Landroid/content/ComponentName;I)J +Landroid/app/admin/DevicePolicyManager;->getStorageEncryptionStatus(I)I Landroid/app/admin/DevicePolicyManager;->getTrustAgentConfiguration(Landroid/content/ComponentName;Landroid/content/ComponentName;I)Ljava/util/List; Landroid/app/admin/DevicePolicyManager;->packageHasActiveAdmins(Ljava/lang/String;I)Z +Landroid/app/admin/DevicePolicyManager;->reportFailedPasswordAttempt(I)V +Landroid/app/admin/DevicePolicyManager;->reportSuccessfulPasswordAttempt(I)V Landroid/app/admin/DevicePolicyManager;->setActiveAdmin(Landroid/content/ComponentName;Z)V Landroid/app/admin/DevicePolicyManager;->setActiveAdmin(Landroid/content/ComponentName;ZI)V +Landroid/app/admin/DevicePolicyManager;->setActivePasswordState(Landroid/app/admin/PasswordMetrics;I)V Landroid/app/admin/DevicePolicyManager;->setDefaultSmsApplication(Landroid/content/ComponentName;Ljava/lang/String;)V +Landroid/app/admin/DevicePolicyManager;->setGlobalProxy(Landroid/content/ComponentName;Ljava/net/Proxy;Ljava/util/List;)Landroid/content/ComponentName; Landroid/app/admin/DevicePolicyManager;->throwIfParentInstance(Ljava/lang/String;)V Landroid/app/admin/IDevicePolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/admin/IDevicePolicyManager; Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_packageHasActiveAdmins:I Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_removeActiveAdmin:I +Landroid/app/admin/IDevicePolicyManager;->packageHasActiveAdmins(Ljava/lang/String;I)Z Landroid/app/admin/SecurityLog$SecurityEvent;-><init>([B)V Landroid/app/AlarmManager;->FLAG_ALLOW_WHILE_IDLE_UNRESTRICTED:I Landroid/app/AlarmManager;->FLAG_IDLE_UNTIL:I Landroid/app/AlarmManager;->FLAG_STANDALONE:I Landroid/app/AlarmManager;->FLAG_WAKE_FROM_IDLE:I Landroid/app/AlarmManager;->mService:Landroid/app/IAlarmManager; +Landroid/app/AlarmManager;->set(IJJJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;Landroid/os/WorkSource;)V Landroid/app/AlarmManager;->WINDOW_EXACT:J Landroid/app/AlarmManager;->WINDOW_HEURISTIC:J Landroid/app/AlertDialog$Builder;->P:Lcom/android/internal/app/AlertController$AlertParams; @@ -200,6 +331,8 @@ Landroid/app/Application;->dispatchActivityResumed(Landroid/app/Activity;)V Landroid/app/Application;->dispatchActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V Landroid/app/Application;->dispatchActivityStarted(Landroid/app/Activity;)V Landroid/app/Application;->dispatchActivityStopped(Landroid/app/Activity;)V +Landroid/app/Application;->mActivityLifecycleCallbacks:Ljava/util/ArrayList; +Landroid/app/Application;->mAssistCallbacks:Ljava/util/ArrayList; Landroid/app/Application;->mComponentCallbacks:Ljava/util/ArrayList; Landroid/app/Application;->mLoadedApk:Landroid/app/LoadedApk; Landroid/app/ApplicationLoaders;->getDefault()Landroid/app/ApplicationLoaders; @@ -214,30 +347,102 @@ Landroid/app/ApplicationPackageManager;->shouldShowRequestPermissionRationale(Lj Landroid/app/AppOpsManager$OpEntry;->getDuration()I Landroid/app/AppOpsManager$OpEntry;->getMode()I Landroid/app/AppOpsManager$OpEntry;->getRejectTime()J +Landroid/app/AppOpsManager$PackageOps;-><init>(Ljava/lang/String;ILjava/util/List;)V +Landroid/app/AppOpsManager$PackageOps;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/app/AppOpsManager;->checkOp(IILjava/lang/String;)I Landroid/app/AppOpsManager;->checkOpNoThrow(IILjava/lang/String;)I Landroid/app/AppOpsManager;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List; Landroid/app/AppOpsManager;->mService:Lcom/android/internal/app/IAppOpsService; Landroid/app/AppOpsManager;->noteOp(I)I Landroid/app/AppOpsManager;->noteOp(IILjava/lang/String;)I +Landroid/app/AppOpsManager;->noteOpNoThrow(IILjava/lang/String;)I +Landroid/app/AppOpsManager;->noteProxyOp(ILjava/lang/String;)I +Landroid/app/AppOpsManager;->opToName(I)Ljava/lang/String; +Landroid/app/AppOpsManager;->opToPermission(I)Ljava/lang/String; +Landroid/app/AppOpsManager;->opToSwitch(I)I +Landroid/app/AppOpsManager;->OP_ACCEPT_HANDOVER:I +Landroid/app/AppOpsManager;->OP_ACCESS_NOTIFICATIONS:I +Landroid/app/AppOpsManager;->OP_ACTIVATE_VPN:I +Landroid/app/AppOpsManager;->OP_ADD_VOICEMAIL:I +Landroid/app/AppOpsManager;->OP_ANSWER_PHONE_CALLS:I +Landroid/app/AppOpsManager;->OP_ASSIST_SCREENSHOT:I +Landroid/app/AppOpsManager;->OP_ASSIST_STRUCTURE:I +Landroid/app/AppOpsManager;->OP_AUDIO_ACCESSIBILITY_VOLUME:I +Landroid/app/AppOpsManager;->OP_AUDIO_ALARM_VOLUME:I +Landroid/app/AppOpsManager;->OP_AUDIO_BLUETOOTH_VOLUME:I +Landroid/app/AppOpsManager;->OP_AUDIO_MASTER_VOLUME:I +Landroid/app/AppOpsManager;->OP_AUDIO_MEDIA_VOLUME:I Landroid/app/AppOpsManager;->OP_AUDIO_NOTIFICATION_VOLUME:I +Landroid/app/AppOpsManager;->OP_AUDIO_RING_VOLUME:I +Landroid/app/AppOpsManager;->OP_AUDIO_VOICE_VOLUME:I +Landroid/app/AppOpsManager;->OP_BIND_ACCESSIBILITY_SERVICE:I +Landroid/app/AppOpsManager;->OP_BLUETOOTH_SCAN:I +Landroid/app/AppOpsManager;->OP_BODY_SENSORS:I +Landroid/app/AppOpsManager;->OP_CALL_PHONE:I +Landroid/app/AppOpsManager;->OP_CAMERA:I +Landroid/app/AppOpsManager;->OP_CHANGE_WIFI_STATE:I Landroid/app/AppOpsManager;->OP_COARSE_LOCATION:I Landroid/app/AppOpsManager;->OP_FINE_LOCATION:I +Landroid/app/AppOpsManager;->OP_GET_ACCOUNTS:I Landroid/app/AppOpsManager;->OP_GET_USAGE_STATS:I +Landroid/app/AppOpsManager;->OP_GPS:I +Landroid/app/AppOpsManager;->OP_INSTANT_APP_START_FOREGROUND:I +Landroid/app/AppOpsManager;->OP_MANAGE_IPSEC_TUNNELS:I +Landroid/app/AppOpsManager;->OP_MOCK_LOCATION:I +Landroid/app/AppOpsManager;->OP_MONITOR_HIGH_POWER_LOCATION:I +Landroid/app/AppOpsManager;->OP_MONITOR_LOCATION:I +Landroid/app/AppOpsManager;->OP_MUTE_MICROPHONE:I +Landroid/app/AppOpsManager;->OP_NEIGHBORING_CELLS:I +Landroid/app/AppOpsManager;->OP_NONE:I +Landroid/app/AppOpsManager;->OP_PICTURE_IN_PICTURE:I +Landroid/app/AppOpsManager;->OP_PLAY_AUDIO:I Landroid/app/AppOpsManager;->OP_POST_NOTIFICATION:I +Landroid/app/AppOpsManager;->OP_PROCESS_OUTGOING_CALLS:I Landroid/app/AppOpsManager;->OP_PROJECT_MEDIA:I +Landroid/app/AppOpsManager;->OP_READ_CALENDAR:I +Landroid/app/AppOpsManager;->OP_READ_CALL_LOG:I +Landroid/app/AppOpsManager;->OP_READ_CELL_BROADCASTS:I +Landroid/app/AppOpsManager;->OP_READ_CLIPBOARD:I Landroid/app/AppOpsManager;->OP_READ_CONTACTS:I +Landroid/app/AppOpsManager;->OP_READ_EXTERNAL_STORAGE:I +Landroid/app/AppOpsManager;->OP_READ_ICC_SMS:I +Landroid/app/AppOpsManager;->OP_READ_PHONE_NUMBERS:I Landroid/app/AppOpsManager;->OP_READ_PHONE_STATE:I Landroid/app/AppOpsManager;->OP_READ_SMS:I +Landroid/app/AppOpsManager;->OP_RECEIVE_EMERGECY_SMS:I +Landroid/app/AppOpsManager;->OP_RECEIVE_MMS:I +Landroid/app/AppOpsManager;->OP_RECEIVE_SMS:I +Landroid/app/AppOpsManager;->OP_RECEIVE_WAP_PUSH:I +Landroid/app/AppOpsManager;->OP_REQUEST_DELETE_PACKAGES:I +Landroid/app/AppOpsManager;->OP_REQUEST_INSTALL_PACKAGES:I +Landroid/app/AppOpsManager;->OP_RUN_ANY_IN_BACKGROUND:I Landroid/app/AppOpsManager;->OP_RUN_IN_BACKGROUND:I +Landroid/app/AppOpsManager;->OP_SEND_SMS:I +Landroid/app/AppOpsManager;->OP_START_FOREGROUND:I +Landroid/app/AppOpsManager;->OP_TAKE_AUDIO_FOCUS:I +Landroid/app/AppOpsManager;->OP_TAKE_MEDIA_BUTTONS:I +Landroid/app/AppOpsManager;->OP_TOAST_WINDOW:I +Landroid/app/AppOpsManager;->OP_TURN_SCREEN_ON:I +Landroid/app/AppOpsManager;->OP_USE_FINGERPRINT:I +Landroid/app/AppOpsManager;->OP_USE_SIP:I Landroid/app/AppOpsManager;->OP_VIBRATE:I +Landroid/app/AppOpsManager;->OP_WAKE_LOCK:I Landroid/app/AppOpsManager;->OP_WIFI_SCAN:I +Landroid/app/AppOpsManager;->OP_WRITE_CALENDAR:I +Landroid/app/AppOpsManager;->OP_WRITE_CALL_LOG:I +Landroid/app/AppOpsManager;->OP_WRITE_CLIPBOARD:I Landroid/app/AppOpsManager;->OP_WRITE_CONTACTS:I +Landroid/app/AppOpsManager;->OP_WRITE_EXTERNAL_STORAGE:I +Landroid/app/AppOpsManager;->OP_WRITE_ICC_SMS:I +Landroid/app/AppOpsManager;->OP_WRITE_SETTINGS:I Landroid/app/AppOpsManager;->OP_WRITE_SMS:I +Landroid/app/AppOpsManager;->OP_WRITE_WALLPAPER:I Landroid/app/AppOpsManager;->permissionToOpCode(Ljava/lang/String;)I +Landroid/app/AppOpsManager;->resetAllModes()V Landroid/app/AppOpsManager;->setRestriction(III[Ljava/lang/String;)V Landroid/app/AppOpsManager;->sOpPerms:[Ljava/lang/String; Landroid/app/AppOpsManager;->strOpToOp(Ljava/lang/String;)I +Landroid/app/AppOpsManager;->_NUM_OP:I Landroid/app/backup/BackupDataInput$EntityHeader;->dataSize:I Landroid/app/backup/BackupDataInput$EntityHeader;->key:Ljava/lang/String; Landroid/app/backup/BackupDataInputStream;->dataSize:I @@ -245,28 +450,52 @@ Landroid/app/backup/BackupDataInputStream;->key:Ljava/lang/String; Landroid/app/backup/BackupDataOutput;->mBackupWriter:J Landroid/app/backup/BackupHelperDispatcher$Header;->chunkSize:I Landroid/app/backup/BackupHelperDispatcher$Header;->keyPrefix:Ljava/lang/String; +Landroid/app/backup/BackupManager;->checkServiceBinder()V +Landroid/app/backup/BackupManager;->sService:Landroid/app/backup/IBackupManager; Landroid/app/backup/FileBackupHelperBase;->writeNewStateDescription(Landroid/os/ParcelFileDescriptor;)V Landroid/app/backup/FullBackup;->backupToTar(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/backup/FullBackupDataOutput;)I Landroid/app/backup/FullBackupDataOutput;-><init>(Landroid/os/ParcelFileDescriptor;)V Landroid/app/backup/FullBackupDataOutput;->addSize(J)V +Landroid/app/backup/FullBackupDataOutput;->getData()Landroid/app/backup/BackupDataOutput; Landroid/app/backup/FullBackupDataOutput;->mData:Landroid/app/backup/BackupDataOutput; Landroid/app/backup/IBackupManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupManager; +Landroid/app/backup/IBackupManager;->acknowledgeFullBackupOrRestore(IZLjava/lang/String;Ljava/lang/String;Landroid/app/backup/IFullBackupRestoreObserver;)V +Landroid/app/backup/IBackupManager;->clearBackupData(Ljava/lang/String;Ljava/lang/String;)V +Landroid/app/backup/IBackupManager;->dataChanged(Ljava/lang/String;)V +Landroid/app/backup/IBackupManager;->getCurrentTransport()Ljava/lang/String; +Landroid/app/backup/IBackupManager;->isBackupEnabled()Z +Landroid/app/backup/IBackupManager;->isBackupServiceActive(I)Z +Landroid/app/backup/IBackupManager;->listAllTransports()[Ljava/lang/String; +Landroid/app/backup/IBackupManager;->selectBackupTransport(Ljava/lang/String;)Ljava/lang/String; +Landroid/app/backup/IBackupManager;->setAutoRestore(Z)V +Landroid/app/backup/IBackupManager;->setBackupEnabled(Z)V +Landroid/app/backup/IFullBackupRestoreObserver$Stub;-><init>()V +Landroid/app/backup/IRestoreObserver$Stub;-><init>()V Landroid/app/ContentProviderHolder;-><init>(Landroid/content/pm/ProviderInfo;)V +Landroid/app/ContentProviderHolder;-><init>(Landroid/os/Parcel;)V Landroid/app/ContentProviderHolder;->info:Landroid/content/pm/ProviderInfo; +Landroid/app/ContentProviderHolder;->noReleaseNeeded:Z Landroid/app/ContentProviderHolder;->provider:Landroid/content/IContentProvider; +Landroid/app/ContextImpl$ApplicationContentResolver;->mMainThread:Landroid/app/ActivityThread; Landroid/app/ContextImpl;->createActivityContext(Landroid/app/ActivityThread;Landroid/app/LoadedApk;Landroid/content/pm/ActivityInfo;Landroid/os/IBinder;ILandroid/content/res/Configuration;)Landroid/app/ContextImpl; +Landroid/app/ContextImpl;->createAppContext(Landroid/app/ActivityThread;Landroid/app/LoadedApk;)Landroid/app/ContextImpl; +Landroid/app/ContextImpl;->createSystemContext(Landroid/app/ActivityThread;)Landroid/app/ContextImpl; Landroid/app/ContextImpl;->getActivityToken()Landroid/os/IBinder; Landroid/app/ContextImpl;->getDisplay()Landroid/view/Display; +Landroid/app/ContextImpl;->getImpl(Landroid/content/Context;)Landroid/app/ContextImpl; +Landroid/app/ContextImpl;->getOuterContext()Landroid/content/Context; Landroid/app/ContextImpl;->getPreferencesDir()Ljava/io/File; Landroid/app/ContextImpl;->getReceiverRestrictedContext()Landroid/content/Context; Landroid/app/ContextImpl;->mBasePackageName:Ljava/lang/String; Landroid/app/ContextImpl;->mClassLoader:Ljava/lang/ClassLoader; Landroid/app/ContextImpl;->mContentResolver:Landroid/app/ContextImpl$ApplicationContentResolver; +Landroid/app/ContextImpl;->mFlags:I Landroid/app/ContextImpl;->mMainThread:Landroid/app/ActivityThread; Landroid/app/ContextImpl;->mOpPackageName:Ljava/lang/String; Landroid/app/ContextImpl;->mOuterContext:Landroid/content/Context; Landroid/app/ContextImpl;->mPackageInfo:Landroid/app/LoadedApk; Landroid/app/ContextImpl;->mPackageManager:Landroid/content/pm/PackageManager; +Landroid/app/ContextImpl;->mPreferencesDir:Ljava/io/File; Landroid/app/ContextImpl;->mResources:Landroid/content/res/Resources; Landroid/app/ContextImpl;->mServiceCache:[Ljava/lang/Object; Landroid/app/ContextImpl;->mSharedPrefsPaths:Landroid/util/ArrayMap; @@ -279,84 +508,219 @@ Landroid/app/DatePickerDialog;->mDatePicker:Landroid/widget/DatePicker; Landroid/app/Dialog;->CANCEL:I Landroid/app/Dialog;->dismissDialog()V Landroid/app/Dialog;->mCancelMessage:Landroid/os/Message; +Landroid/app/Dialog;->mContext:Landroid/content/Context; Landroid/app/Dialog;->mDismissMessage:Landroid/os/Message; +Landroid/app/Dialog;->mHandler:Landroid/os/Handler; Landroid/app/Dialog;->mListenersHandler:Landroid/os/Handler; +Landroid/app/Dialog;->mOnKeyListener:Landroid/content/DialogInterface$OnKeyListener; Landroid/app/Dialog;->mOwnerActivity:Landroid/app/Activity; +Landroid/app/Dialog;->mShowing:Z Landroid/app/Dialog;->mShowMessage:Landroid/os/Message; +Landroid/app/Dialog;->mWindow:Landroid/view/Window; +Landroid/app/DialogFragment;->mDismissed:Z +Landroid/app/DialogFragment;->mShownByMe:Z Landroid/app/DialogFragment;->showAllowingStateLoss(Landroid/app/FragmentManager;Ljava/lang/String;)V +Landroid/app/DownloadManager$Query;->orderBy(Ljava/lang/String;I)Landroid/app/DownloadManager$Query; +Landroid/app/DownloadManager$Query;->setOnlyIncludeVisibleInDownloadsUi(Z)Landroid/app/DownloadManager$Query; Landroid/app/DownloadManager$Request;->mUri:Landroid/net/Uri; +Landroid/app/DownloadManager;->getWhereArgsForIds([J)[Ljava/lang/String; +Landroid/app/DownloadManager;->getWhereClauseForIds([J)Ljava/lang/String; +Landroid/app/DownloadManager;->restartDownload([[J)V +Landroid/app/DownloadManager;->setAccessAllDownloads(Z)V Landroid/app/DownloadManager;->setAccessFilename(Z)V +Landroid/app/DownloadManager;->UNDERLYING_COLUMNS:[Ljava/lang/String; +Landroid/app/Fragment;->mAdded:Z Landroid/app/Fragment;->mChildFragmentManager:Landroid/app/FragmentManagerImpl; +Landroid/app/Fragment;->mFragmentId:I +Landroid/app/Fragment;->mFragmentManager:Landroid/app/FragmentManagerImpl; +Landroid/app/Fragment;->mHost:Landroid/app/FragmentHostCallback; +Landroid/app/Fragment;->mIndex:I +Landroid/app/Fragment;->mLoadersStarted:Z +Landroid/app/Fragment;->mSavedFragmentState:Landroid/os/Bundle; +Landroid/app/Fragment;->mView:Landroid/view/View; Landroid/app/Fragment;->mWho:Ljava/lang/String; +Landroid/app/Fragment;->sClassMap:Landroid/util/ArrayMap; +Landroid/app/FragmentController;->mHost:Landroid/app/FragmentHostCallback; +Landroid/app/FragmentHostCallback;->mLoadersStarted:Z Landroid/app/FragmentManagerImpl;->loadAnimator(Landroid/app/Fragment;IZI)Landroid/animation/Animator; +Landroid/app/FragmentManagerImpl;->mActive:Landroid/util/SparseArray; Landroid/app/FragmentManagerImpl;->mAdded:Ljava/util/ArrayList; Landroid/app/FragmentManagerImpl;->mStateSaved:Z Landroid/app/FragmentManagerImpl;->noteStateNotSaved()V +Landroid/app/IActivityController;->activityResuming(Ljava/lang/String;)Z +Landroid/app/IActivityController;->activityStarting(Landroid/content/Intent;Ljava/lang/String;)Z +Landroid/app/IActivityController;->appNotResponding(Ljava/lang/String;ILjava/lang/String;)I Landroid/app/IActivityManager$Stub$Proxy;->getConfiguration()Landroid/content/res/Configuration; Landroid/app/IActivityManager$Stub$Proxy;->getLaunchedFromUid(Landroid/os/IBinder;)I Landroid/app/IActivityManager$Stub$Proxy;->getProcessLimit()I Landroid/app/IActivityManager$Stub$Proxy;->getProcessPss([I)[J Landroid/app/IActivityManager$Stub$Proxy;->isAppForeground(I)Z Landroid/app/IActivityManager$Stub$Proxy;->mRemote:Landroid/os/IBinder; +Landroid/app/IActivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IActivityManager; Landroid/app/IActivityManager;->bindService(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/lang/String;I)I Landroid/app/IActivityManager;->broadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I +Landroid/app/IActivityManager;->checkPermission(Ljava/lang/String;II)I +Landroid/app/IActivityManager;->enterSafeMode()V Landroid/app/IActivityManager;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z Landroid/app/IActivityManager;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V Landroid/app/IActivityManager;->forceStopPackage(Ljava/lang/String;I)V +Landroid/app/IActivityManager;->getAllStackInfos()Ljava/util/List; Landroid/app/IActivityManager;->getConfiguration()Landroid/content/res/Configuration; +Landroid/app/IActivityManager;->getIntentForIntentSender(Landroid/content/IIntentSender;)Landroid/content/Intent; Landroid/app/IActivityManager;->getIntentSender(ILjava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)Landroid/content/IIntentSender; Landroid/app/IActivityManager;->getLaunchedFromPackage(Landroid/os/IBinder;)Ljava/lang/String; +Landroid/app/IActivityManager;->getLaunchedFromUid(Landroid/os/IBinder;)I +Landroid/app/IActivityManager;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V Landroid/app/IActivityManager;->getPackageProcessState(Ljava/lang/String;Ljava/lang/String;)I +Landroid/app/IActivityManager;->getProcessLimit()I +Landroid/app/IActivityManager;->getProcessPss([I)[J Landroid/app/IActivityManager;->getProviderMimeType(Landroid/net/Uri;I)Ljava/lang/String; +Landroid/app/IActivityManager;->getServices(II)Ljava/util/List; +Landroid/app/IActivityManager;->getTaskBounds(I)Landroid/graphics/Rect; Landroid/app/IActivityManager;->getTaskForActivity(Landroid/os/IBinder;Z)I +Landroid/app/IActivityManager;->handleApplicationStrictModeViolation(Landroid/os/IBinder;ILandroid/os/StrictMode$ViolationInfo;)V +Landroid/app/IActivityManager;->hang(Landroid/os/IBinder;Z)V +Landroid/app/IActivityManager;->isInLockTaskMode()Z +Landroid/app/IActivityManager;->isIntentSenderAnActivity(Landroid/content/IIntentSender;)Z +Landroid/app/IActivityManager;->isTopOfTask(Landroid/os/IBinder;)Z +Landroid/app/IActivityManager;->isUserRunning(II)Z +Landroid/app/IActivityManager;->killAllBackgroundProcesses()V +Landroid/app/IActivityManager;->killApplicationProcess(Ljava/lang/String;I)V +Landroid/app/IActivityManager;->killBackgroundProcesses(Ljava/lang/String;I)V Landroid/app/IActivityManager;->moveActivityTaskToBack(Landroid/os/IBinder;Z)Z Landroid/app/IActivityManager;->moveTaskToFront(IILandroid/os/Bundle;)V +Landroid/app/IActivityManager;->moveTaskToStack(IIZ)V +Landroid/app/IActivityManager;->moveTopActivityToPinnedStack(ILandroid/graphics/Rect;)Z +Landroid/app/IActivityManager;->positionTaskInStack(III)V +Landroid/app/IActivityManager;->profileControl(Ljava/lang/String;IZLandroid/app/ProfilerInfo;I)Z Landroid/app/IActivityManager;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V +Landroid/app/IActivityManager;->registerProcessObserver(Landroid/app/IProcessObserver;)V +Landroid/app/IActivityManager;->registerReceiver(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent; +Landroid/app/IActivityManager;->registerUserSwitchObserver(Landroid/app/IUserSwitchObserver;Ljava/lang/String;)V +Landroid/app/IActivityManager;->removeContentProviderExternal(Ljava/lang/String;Landroid/os/IBinder;)V +Landroid/app/IActivityManager;->removeStack(I)V Landroid/app/IActivityManager;->requestBugReport(I)V +Landroid/app/IActivityManager;->resizeDockedStack(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V +Landroid/app/IActivityManager;->resizeStack(ILandroid/graphics/Rect;ZZZI)V +Landroid/app/IActivityManager;->resizeTask(ILandroid/graphics/Rect;I)V +Landroid/app/IActivityManager;->restart()V Landroid/app/IActivityManager;->resumeAppSwitches()V +Landroid/app/IActivityManager;->sendIdleJobTrigger()V +Landroid/app/IActivityManager;->serviceDoneExecuting(Landroid/os/IBinder;III)V Landroid/app/IActivityManager;->setActivityController(Landroid/app/IActivityController;Z)V +Landroid/app/IActivityManager;->setAlwaysFinish(Z)V +Landroid/app/IActivityManager;->setDebugApp(Ljava/lang/String;ZZ)V +Landroid/app/IActivityManager;->setDumpHeapDebugLimit(Ljava/lang/String;IJLjava/lang/String;)V +Landroid/app/IActivityManager;->setPackageScreenCompatMode(Ljava/lang/String;I)V +Landroid/app/IActivityManager;->setProcessImportant(Landroid/os/IBinder;IZLjava/lang/String;)V +Landroid/app/IActivityManager;->setProcessLimit(I)V +Landroid/app/IActivityManager;->setProcessMemoryTrimLevel(Ljava/lang/String;II)Z Landroid/app/IActivityManager;->setRequestedOrientation(Landroid/os/IBinder;I)V Landroid/app/IActivityManager;->setTaskResizeable(II)V +Landroid/app/IActivityManager;->shutdown(I)Z +Landroid/app/IActivityManager;->startBinderTracking()Z +Landroid/app/IActivityManager;->startInstrumentation(Landroid/content/ComponentName;Ljava/lang/String;ILandroid/os/Bundle;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;ILjava/lang/String;)Z +Landroid/app/IActivityManager;->startSystemLockTaskMode(I)V +Landroid/app/IActivityManager;->startUserInBackground(I)Z +Landroid/app/IActivityManager;->stopAppSwitches()V +Landroid/app/IActivityManager;->stopBinderTrackingAndDump(Landroid/os/ParcelFileDescriptor;)Z Landroid/app/IActivityManager;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I +Landroid/app/IActivityManager;->stopUser(IZLandroid/app/IStopUserCallback;)I +Landroid/app/IActivityManager;->suppressResizeConfigChanges(Z)V +Landroid/app/IActivityManager;->switchUser(I)Z +Landroid/app/IActivityManager;->unbindBackupAgent(Landroid/content/pm/ApplicationInfo;)V Landroid/app/IActivityManager;->unbindService(Landroid/app/IServiceConnection;)Z +Landroid/app/IActivityManager;->unhandledBack()V +Landroid/app/IActivityManager;->unlockUser(I[B[BLandroid/os/IProgressListener;)Z +Landroid/app/IActivityManager;->unregisterProcessObserver(Landroid/app/IProcessObserver;)V +Landroid/app/IActivityManager;->unregisterReceiver(Landroid/content/IIntentReceiver;)V Landroid/app/IActivityManager;->unstableProviderDied(Landroid/os/IBinder;)V +Landroid/app/IActivityManager;->updateConfiguration(Landroid/content/res/Configuration;)Z +Landroid/app/IActivityManager;->updatePersistentConfiguration(Landroid/content/res/Configuration;)V Landroid/app/IAlarmManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/app/IAlarmManager$Stub;-><init>()V Landroid/app/IAlarmManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IAlarmManager; Landroid/app/IAlarmManager$Stub;->TRANSACTION_remove:I Landroid/app/IAlarmManager$Stub;->TRANSACTION_set:I +Landroid/app/IAlarmManager;->getNextAlarmClock(I)Landroid/app/AlarmManager$AlarmClockInfo; +Landroid/app/IAlarmManager;->set(Ljava/lang/String;IJJJILandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;Landroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;)V +Landroid/app/IApplicationThread;->processInBackground()V +Landroid/app/IApplicationThread;->scheduleBindService(Landroid/os/IBinder;Landroid/content/Intent;ZI)V +Landroid/app/IApplicationThread;->scheduleCreateService(Landroid/os/IBinder;Landroid/content/pm/ServiceInfo;Landroid/content/res/CompatibilityInfo;I)V +Landroid/app/IApplicationThread;->scheduleExit()V +Landroid/app/IApplicationThread;->scheduleLowMemory()V +Landroid/app/IApplicationThread;->scheduleStopService(Landroid/os/IBinder;)V +Landroid/app/IApplicationThread;->scheduleSuicide()V Landroid/app/IApplicationThread;->scheduleTrimMemory(I)V +Landroid/app/IApplicationThread;->scheduleUnbindService(Landroid/os/IBinder;Landroid/content/Intent;)V +Landroid/app/IApplicationThread;->updateTimeZone()V Landroid/app/IAppTask;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo; +Landroid/app/IBackupAgent$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IBackupAgent; +Landroid/app/IInputForwarder;->forwardEvent(Landroid/view/InputEvent;)Z +Landroid/app/IInstrumentationWatcher$Stub;-><init>()V +Landroid/app/IInstrumentationWatcher$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IInstrumentationWatcher; +Landroid/app/IInstrumentationWatcher;->instrumentationFinished(Landroid/content/ComponentName;ILandroid/os/Bundle;)V +Landroid/app/IInstrumentationWatcher;->instrumentationStatus(Landroid/content/ComponentName;ILandroid/os/Bundle;)V Landroid/app/INotificationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/app/INotificationManager$Stub$Proxy;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z +Landroid/app/INotificationManager$Stub;-><init>()V Landroid/app/INotificationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/INotificationManager; +Landroid/app/INotificationManager;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z Landroid/app/INotificationManager;->cancelAllNotifications(Ljava/lang/String;I)V Landroid/app/INotificationManager;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;II)V Landroid/app/INotificationManager;->cancelToast(Ljava/lang/String;Landroid/app/ITransientNotification;)V Landroid/app/INotificationManager;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;I)V +Landroid/app/INotificationManager;->getActiveNotifications(Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification; +Landroid/app/INotificationManager;->getHistoricalNotifications(Ljava/lang/String;I)[Landroid/service/notification/StatusBarNotification; +Landroid/app/INotificationManager;->getZenMode()I +Landroid/app/INotificationManager;->getZenModeConfig()Landroid/service/notification/ZenModeConfig; +Landroid/app/Instrumentation;->callActivityOnNewIntent(Landroid/app/Activity;Lcom/android/internal/content/ReferrerIntent;)V +Landroid/app/Instrumentation;->checkStartActivityResult(ILjava/lang/Object;)V Landroid/app/Instrumentation;->execStartActivities(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/Activity;[Landroid/content/Intent;Landroid/os/Bundle;)V Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/Instrumentation$ActivityResult; Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/Instrumentation$ActivityResult; Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/Instrumentation$ActivityResult; +Landroid/app/Instrumentation;->execStartActivityAsCaller(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;ZI)Landroid/app/Instrumentation$ActivityResult; +Landroid/app/Instrumentation;->execStartActivityFromAppTask(Landroid/content/Context;Landroid/os/IBinder;Landroid/app/IAppTask;Landroid/content/Intent;Landroid/os/Bundle;)V +Landroid/app/IntentReceiverLeaked;-><init>(Ljava/lang/String;)V Landroid/app/IntentService;->mServiceHandler:Landroid/app/IntentService$ServiceHandler; Landroid/app/IProcessObserver$Stub;-><init>()V Landroid/app/ISearchManager$Stub$Proxy;->getGlobalSearchActivity()Landroid/content/ComponentName; Landroid/app/ISearchManager$Stub$Proxy;->getWebSearchActivity()Landroid/content/ComponentName; +Landroid/app/ISearchManager$Stub;-><init>()V Landroid/app/ISearchManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/ISearchManager; +Landroid/app/ISearchManager;->getGlobalSearchActivity()Landroid/content/ComponentName; Landroid/app/IServiceConnection$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/IServiceConnection$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/IServiceConnection$Stub;-><init>()V Landroid/app/IServiceConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IServiceConnection; +Landroid/app/IServiceConnection;->connected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V Landroid/app/IStopUserCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/IStopUserCallback$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/IStopUserCallback$Stub;-><init>()V Landroid/app/IStopUserCallback;->userStopped(I)V +Landroid/app/ITransientNotification$Stub;-><init>()V +Landroid/app/ITransientNotification;->hide()V +Landroid/app/ITransientNotification;->show(Landroid/os/IBinder;)V Landroid/app/IUiModeManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/app/IUserSwitchObserver$Stub;-><init>()V +Landroid/app/IWallpaperManager$Stub;-><init>()V +Landroid/app/IWallpaperManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IWallpaperManager; +Landroid/app/IWallpaperManager;->getHeightHint()I Landroid/app/IWallpaperManager;->getWallpaper(Ljava/lang/String;Landroid/app/IWallpaperManagerCallback;ILandroid/os/Bundle;I)Landroid/os/ParcelFileDescriptor; +Landroid/app/IWallpaperManager;->getWallpaperInfo(I)Landroid/app/WallpaperInfo; +Landroid/app/IWallpaperManager;->getWidthHint()I +Landroid/app/IWallpaperManager;->setWallpaperComponent(Landroid/content/ComponentName;)V +Landroid/app/IWallpaperManagerCallback$Stub;-><init>()V +Landroid/app/IWallpaperManagerCallback;->onWallpaperChanged()V Landroid/app/job/IJobCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/job/IJobCallback$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/job/IJobCallback$Stub;-><init>()V Landroid/app/job/IJobCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobCallback; Landroid/app/job/IJobCallback;->acknowledgeStartMessage(IZ)V Landroid/app/job/IJobCallback;->acknowledgeStopMessage(IZ)V +Landroid/app/job/IJobCallback;->completeWork(II)Z +Landroid/app/job/IJobCallback;->dequeueWork(I)Landroid/app/job/JobWorkItem; Landroid/app/job/IJobCallback;->jobFinished(IZ)V Landroid/app/job/IJobScheduler$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/job/IJobScheduler$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobScheduler; @@ -366,11 +730,17 @@ Landroid/app/job/IJobService$Stub;-><init>()V Landroid/app/job/IJobService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobService; Landroid/app/job/IJobService;->startJob(Landroid/app/job/JobParameters;)V Landroid/app/job/IJobService;->stopJob(Landroid/app/job/JobParameters;)V +Landroid/app/job/JobInfo$Builder;->setFlags(I)Landroid/app/job/JobInfo$Builder; +Landroid/app/job/JobInfo$Builder;->setPriority(I)Landroid/app/job/JobInfo$Builder; Landroid/app/job/JobInfo;->flags:I +Landroid/app/job/JobInfo;->FLAG_WILL_BE_FOREGROUND:I Landroid/app/job/JobInfo;->jobId:I +Landroid/app/job/JobInfo;->PRIORITY_FOREGROUND_APP:I Landroid/app/job/JobInfo;->service:Landroid/content/ComponentName; Landroid/app/job/JobParameters;->callback:Landroid/os/IBinder; +Landroid/app/job/JobParameters;->getCallback()Landroid/app/job/IJobCallback; Landroid/app/job/JobParameters;->jobId:I +Landroid/app/KeyguardManager;->isDeviceSecure(I)Z Landroid/app/LoadedApk$ReceiverDispatcher;->getIIntentReceiver()Landroid/content/IIntentReceiver; Landroid/app/LoadedApk$ReceiverDispatcher;->getIntentReceiver()Landroid/content/BroadcastReceiver; Landroid/app/LoadedApk$ReceiverDispatcher;->mContext:Landroid/content/Context; @@ -380,11 +750,17 @@ Landroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnec Landroid/app/LoadedApk$ServiceDispatcher;->getIServiceConnection()Landroid/app/IServiceConnection; Landroid/app/LoadedApk$ServiceDispatcher;->mConnection:Landroid/content/ServiceConnection; Landroid/app/LoadedApk$ServiceDispatcher;->mContext:Landroid/content/Context; +Landroid/app/LoadedApk;->getApplicationInfo()Landroid/content/pm/ApplicationInfo; Landroid/app/LoadedApk;->getAssets()Landroid/content/res/AssetManager; Landroid/app/LoadedApk;->getClassLoader()Ljava/lang/ClassLoader; Landroid/app/LoadedApk;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo; Landroid/app/LoadedApk;->getDataDirFile()Ljava/io/File; +Landroid/app/LoadedApk;->getOverlayDirs()[Ljava/lang/String; +Landroid/app/LoadedApk;->getPackageName()Ljava/lang/String; +Landroid/app/LoadedApk;->getResDir()Ljava/lang/String; Landroid/app/LoadedApk;->getResources()Landroid/content/res/Resources; +Landroid/app/LoadedApk;->getServiceDispatcher(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;I)Landroid/app/IServiceConnection; +Landroid/app/LoadedApk;->getSplitResDirs()[Ljava/lang/String; Landroid/app/LoadedApk;->mActivityThread:Landroid/app/ActivityThread; Landroid/app/LoadedApk;->makeApplication(ZLandroid/app/Instrumentation;)Landroid/app/Application; Landroid/app/LoadedApk;->mAppDir:Ljava/lang/String; @@ -405,43 +781,94 @@ Landroid/app/LoadedApk;->mSplitResDirs:[Ljava/lang/String; Landroid/app/LoadedApk;->rewriteRValues(Ljava/lang/ClassLoader;Ljava/lang/String;I)V Landroid/app/LocalActivityManager;->mActivities:Ljava/util/Map; Landroid/app/LocalActivityManager;->mActivityArray:Ljava/util/ArrayList; +Landroid/app/LocalActivityManager;->moveToState(Landroid/app/LocalActivityManager$LocalActivityRecord;I)V Landroid/app/LocalActivityManager;->mParent:Landroid/app/Activity; Landroid/app/LocalActivityManager;->mResumed:Landroid/app/LocalActivityManager$LocalActivityRecord; Landroid/app/LocalActivityManager;->mSingleMode:Z Landroid/app/NativeActivity;->hideIme(I)V +Landroid/app/NativeActivity;->loadNativeCode(Ljava/lang/String;Ljava/lang/String;Landroid/os/MessageQueue;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/content/res/AssetManager;[BLjava/lang/ClassLoader;Ljava/lang/String;)J +Landroid/app/NativeActivity;->mNativeHandle:J Landroid/app/NativeActivity;->setWindowFlags(II)V Landroid/app/NativeActivity;->setWindowFormat(I)V Landroid/app/NativeActivity;->showIme(I)V Landroid/app/Notification$Action;->mIcon:Landroid/graphics/drawable/Icon; +Landroid/app/Notification$Builder;->getBaseLayoutResource()I +Landroid/app/Notification$Builder;->loadHeaderAppName()Ljava/lang/String; Landroid/app/Notification$Builder;->mActions:Ljava/util/ArrayList; Landroid/app/Notification$Builder;->makePublicContentView()Landroid/widget/RemoteViews; +Landroid/app/Notification$MediaStyle;->buildStyled(Landroid/app/Notification;)Landroid/app/Notification; Landroid/app/Notification;-><init>(Landroid/content/Context;ILjava/lang/CharSequence;JLjava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/content/Intent;)V +Landroid/app/Notification;->allPendingIntents:Landroid/util/ArraySet; +Landroid/app/Notification;->isGroupChild()Z Landroid/app/Notification;->isGroupSummary()Z Landroid/app/Notification;->mChannelId:Ljava/lang/String; Landroid/app/Notification;->mGroupKey:Ljava/lang/String; Landroid/app/Notification;->mLargeIcon:Landroid/graphics/drawable/Icon; Landroid/app/Notification;->mSmallIcon:Landroid/graphics/drawable/Icon; Landroid/app/Notification;->setSmallIcon(Landroid/graphics/drawable/Icon;)V +Landroid/app/NotificationChannel;->mId:Ljava/lang/String; +Landroid/app/NotificationChannel;->setBlockableSystem(Z)V +Landroid/app/NotificationChannelGroup;->mId:Ljava/lang/String; +Landroid/app/NotificationManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V +Landroid/app/NotificationManager;->from(Landroid/content/Context;)Landroid/app/NotificationManager; Landroid/app/NotificationManager;->getService()Landroid/app/INotificationManager; +Landroid/app/NotificationManager;->getZenModeConfig()Landroid/service/notification/ZenModeConfig; Landroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V +Landroid/app/NotificationManager;->setZenMode(ILandroid/net/Uri;Ljava/lang/String;)V Landroid/app/NotificationManager;->sService:Landroid/app/INotificationManager; +Landroid/app/PackageDeleteObserver;-><init>()V +Landroid/app/PackageInstallObserver;-><init>()V +Landroid/app/PackageInstallObserver;->onPackageInstalled(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V Landroid/app/PendingIntent;->getActivityAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent; +Landroid/app/PendingIntent;->getBroadcastAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/UserHandle;)Landroid/app/PendingIntent; Landroid/app/PendingIntent;->getIntent()Landroid/content/Intent; Landroid/app/PendingIntent;->isActivity()Z +Landroid/app/PendingIntent;->setOnMarshaledListener(Landroid/app/PendingIntent$OnMarshaledListener;)V +Landroid/app/PictureInPictureArgs;-><init>()V +Landroid/app/PictureInPictureArgs;->setActions(Ljava/util/List;)V +Landroid/app/PictureInPictureArgs;->setAspectRatio(F)V Landroid/app/PictureInPictureParams;->getAspectRatio()F Landroid/app/Presentation;->createPresentationContext(Landroid/content/Context;Landroid/view/Display;I)Landroid/content/Context; +Landroid/app/ProgressDialog;->mMessageView:Landroid/widget/TextView; +Landroid/app/ProgressDialog;->mProgress:Landroid/widget/ProgressBar; Landroid/app/ProgressDialog;->mProgressNumber:Landroid/widget/TextView; Landroid/app/QueuedWork;->addFinisher(Ljava/lang/Runnable;)V Landroid/app/QueuedWork;->removeFinisher(Ljava/lang/Runnable;)V Landroid/app/QueuedWork;->sFinishers:Ljava/util/LinkedList; +Landroid/app/ResourcesManager;-><init>()V Landroid/app/ResourcesManager;->appendLibAssetForMainAssetPath(Ljava/lang/String;Ljava/lang/String;)V +Landroid/app/ResourcesManager;->createAssetManager(Landroid/content/res/ResourcesKey;)Landroid/content/res/AssetManager; Landroid/app/ResourcesManager;->getInstance()Landroid/app/ResourcesManager; Landroid/app/ResourcesManager;->mActivityResourceReferences:Ljava/util/WeakHashMap; Landroid/app/ResourcesManager;->mResConfiguration:Landroid/content/res/Configuration; Landroid/app/ResourcesManager;->mResourceImpls:Landroid/util/ArrayMap; Landroid/app/ResourcesManager;->mResourceReferences:Ljava/util/ArrayList; +Landroid/app/ResultInfo;-><init>(Ljava/lang/String;IILandroid/content/Intent;)V +Landroid/app/ResultInfo;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/app/ResultInfo;->mData:Landroid/content/Intent; +Landroid/app/ResultInfo;->mRequestCode:I Landroid/app/ResultInfo;->mResultWho:Ljava/lang/String; +Landroid/app/SearchableInfo$ActionKeyInfo;->getQueryActionMsg()Ljava/lang/String; +Landroid/app/SearchableInfo$ActionKeyInfo;->getSuggestActionMsg()Ljava/lang/String; +Landroid/app/SearchableInfo$ActionKeyInfo;->getSuggestActionMsgColumn()Ljava/lang/String; +Landroid/app/SearchableInfo;->findActionKey(I)Landroid/app/SearchableInfo$ActionKeyInfo; +Landroid/app/SearchableInfo;->getActivityContext(Landroid/content/Context;)Landroid/content/Context; +Landroid/app/SearchableInfo;->getIconId()I +Landroid/app/SearchableInfo;->getLabelId()I +Landroid/app/SearchableInfo;->getProviderContext(Landroid/content/Context;Landroid/content/Context;)Landroid/content/Context; +Landroid/app/SearchDialog;->isLandscapeMode(Landroid/content/Context;)Z +Landroid/app/SearchDialog;->launchQuerySearch()V +Landroid/app/SearchDialog;->launchQuerySearch(ILjava/lang/String;)V +Landroid/app/SearchDialog;->setWorking(Z)V +Landroid/app/SearchManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V +Landroid/app/SearchManager;->DISABLE_VOICE_SEARCH:Ljava/lang/String; +Landroid/app/SearchManager;->getSuggestions(Landroid/app/SearchableInfo;Ljava/lang/String;)Landroid/database/Cursor; +Landroid/app/SearchManager;->getSuggestions(Landroid/app/SearchableInfo;Ljava/lang/String;I)Landroid/database/Cursor; +Landroid/app/SearchManager;->getWebSearchActivity()Landroid/content/ComponentName; +Landroid/app/SearchManager;->isVisible()Z +Landroid/app/SearchManager;->launchAssist(Landroid/os/Bundle;)V +Landroid/app/SearchManager;->mSearchDialog:Landroid/app/SearchDialog; +Landroid/app/SearchManager;->startSearch(Ljava/lang/String;ZLandroid/content/ComponentName;Landroid/os/Bundle;ZLandroid/graphics/Rect;)V Landroid/app/Service;->attach(Landroid/content/Context;Landroid/app/ActivityThread;Ljava/lang/String;Landroid/os/IBinder;Landroid/app/Application;Ljava/lang/Object;)V Landroid/app/Service;->mActivityManager:Landroid/app/IActivityManager; Landroid/app/Service;->mApplication:Landroid/app/Application; @@ -450,22 +877,43 @@ Landroid/app/Service;->mStartCompatibility:Z Landroid/app/Service;->mThread:Landroid/app/ActivityThread; Landroid/app/Service;->mToken:Landroid/os/IBinder; Landroid/app/Service;->setForeground(Z)V +Landroid/app/ServiceConnectionLeaked;-><init>(Ljava/lang/String;)V Landroid/app/SharedPreferencesImpl;-><init>(Ljava/io/File;I)V Landroid/app/SharedPreferencesImpl;->mFile:Ljava/io/File; Landroid/app/SharedPreferencesImpl;->startReloadIfChangedUnexpectedly()V +Landroid/app/StatusBarManager;-><init>(Landroid/content/Context;)V Landroid/app/StatusBarManager;->collapsePanels()V Landroid/app/StatusBarManager;->disable(I)V +Landroid/app/StatusBarManager;->DISABLE_EXPAND:I +Landroid/app/StatusBarManager;->DISABLE_NONE:I +Landroid/app/StatusBarManager;->DISABLE_NOTIFICATION_TICKER:I Landroid/app/StatusBarManager;->expandNotificationsPanel()V Landroid/app/StatusBarManager;->expandSettingsPanel()V Landroid/app/StatusBarManager;->expandSettingsPanel(Ljava/lang/String;)V Landroid/app/StatusBarManager;->getService()Lcom/android/internal/statusbar/IStatusBarService; +Landroid/app/StatusBarManager;->mContext:Landroid/content/Context; +Landroid/app/StatusBarManager;->mToken:Landroid/os/IBinder; +Landroid/app/StatusBarManager;->setIconVisibility(Ljava/lang/String;Z)V Landroid/app/TaskStackListener;-><init>()V Landroid/app/TimePickerDialog;->mTimePicker:Landroid/widget/TimePicker; Landroid/app/trust/ITrustManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/app/trust/TrustManager;->reportUnlockAttempt(ZI)V +Landroid/app/UiAutomation;-><init>(Landroid/os/Looper;Landroid/app/IUiAutomationConnection;)V +Landroid/app/UiAutomation;->connect()V +Landroid/app/UiAutomation;->disconnect()V +Landroid/app/UiAutomationConnection;-><init>()V +Landroid/app/UiModeManager;-><init>()V +Landroid/app/usage/IUsageStatsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/IUsageStatsManager; +Landroid/app/usage/IUsageStatsManager;->isAppInactive(Ljava/lang/String;I)Z +Landroid/app/usage/IUsageStatsManager;->queryConfigurationStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice; +Landroid/app/usage/IUsageStatsManager;->queryUsageStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice; +Landroid/app/usage/IUsageStatsManager;->setAppInactive(Ljava/lang/String;ZI)V +Landroid/app/usage/NetworkStatsManager;-><init>(Landroid/content/Context;)V Landroid/app/usage/UsageStats;->mLastEvent:I Landroid/app/usage/UsageStats;->mLaunchCount:I Landroid/app/usage/UsageStats;->mTotalTimeInForeground:J Landroid/app/usage/UsageStatsManager;->mService:Landroid/app/usage/IUsageStatsManager; +Landroid/app/UserSwitchObserver;-><init>()V Landroid/app/Vr2dDisplayProperties$Builder;-><init>()V Landroid/app/Vr2dDisplayProperties$Builder;->build()Landroid/app/Vr2dDisplayProperties; Landroid/app/Vr2dDisplayProperties$Builder;->setEnabled(Z)Landroid/app/Vr2dDisplayProperties$Builder; @@ -476,20 +924,35 @@ Landroid/app/VrManager;->registerVrStateCallback(Landroid/app/VrStateCallback;La Landroid/app/VrManager;->setVr2dDisplayProperties(Landroid/app/Vr2dDisplayProperties;)V Landroid/app/VrManager;->unregisterVrStateCallback(Landroid/app/VrStateCallback;)V Landroid/app/WallpaperColors;->getColorHints()I +Landroid/app/WallpaperManager;->addOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/os/Handler;I)V Landroid/app/WallpaperManager;->getBitmap()Landroid/graphics/Bitmap; Landroid/app/WallpaperManager;->getBitmap(Z)Landroid/graphics/Bitmap; Landroid/app/WallpaperManager;->getIWallpaperManager()Landroid/app/IWallpaperManager; +Landroid/app/WallpaperManager;->getWallpaperColors(II)Landroid/app/WallpaperColors; +Landroid/app/WallpaperManager;->getWallpaperFile(II)Landroid/os/ParcelFileDescriptor; Landroid/app/WallpaperManager;->openDefaultWallpaper(Landroid/content/Context;I)Ljava/io/InputStream; Landroid/app/WallpaperManager;->setBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;ZII)I +Landroid/app/WallpaperManager;->setWallpaperComponent(Landroid/content/ComponentName;I)Z Landroid/app/WallpaperManager;->sGlobals:Landroid/app/WallpaperManager$Globals; +Landroid/appwidget/AppWidgetHost;-><init>(Landroid/content/Context;ILandroid/widget/RemoteViews$OnClickHandler;Landroid/os/Looper;)V +Landroid/appwidget/AppWidgetHost;->HANDLE_VIEW_DATA_CHANGED:I +Landroid/appwidget/AppWidgetHost;->mHandler:Landroid/os/Handler; Landroid/appwidget/AppWidgetHost;->sService:Lcom/android/internal/appwidget/IAppWidgetService; +Landroid/appwidget/AppWidgetHostView;->getDefaultPaddingForWidget(Landroid/content/Context;Landroid/content/pm/ApplicationInfo;Landroid/graphics/Rect;)Landroid/graphics/Rect; +Landroid/appwidget/AppWidgetHostView;->mAppWidgetId:I +Landroid/appwidget/AppWidgetHostView;->mInfo:Landroid/appwidget/AppWidgetProviderInfo; +Landroid/appwidget/AppWidgetHostView;->updateAppWidgetSize(Landroid/os/Bundle;IIIIZ)V Landroid/appwidget/AppWidgetManager;->bindAppWidgetId(ILandroid/content/ComponentName;)V Landroid/appwidget/AppWidgetManager;->bindAppWidgetId(ILandroid/content/ComponentName;Landroid/os/Bundle;)V Landroid/appwidget/AppWidgetManager;->bindAppWidgetIdIfAllowed(IILandroid/content/ComponentName;Landroid/os/Bundle;)Z +Landroid/appwidget/AppWidgetManager;->bindRemoteViewsService(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/IServiceConnection;I)Z +Landroid/appwidget/AppWidgetManager;->getInstalledProviders(I)Ljava/util/List; +Landroid/appwidget/AppWidgetManager;->getInstalledProvidersForProfile(ILandroid/os/UserHandle;Ljava/lang/String;)Ljava/util/List; Landroid/appwidget/AppWidgetManager;->mService:Lcom/android/internal/appwidget/IAppWidgetService; Landroid/appwidget/AppWidgetProviderInfo;->providerInfo:Landroid/content/pm/ActivityInfo; Landroid/bluetooth/BluetoothA2dp;->ACTION_ACTIVE_DEVICE_CHANGED:Ljava/lang/String; Landroid/bluetooth/BluetoothA2dp;->ACTION_CODEC_CONFIG_CHANGED:Ljava/lang/String; +Landroid/bluetooth/BluetoothA2dp;->close()V Landroid/bluetooth/BluetoothA2dp;->connect(Landroid/bluetooth/BluetoothDevice;)Z Landroid/bluetooth/BluetoothA2dp;->disableOptionalCodecs(Landroid/bluetooth/BluetoothDevice;)V Landroid/bluetooth/BluetoothA2dp;->disconnect(Landroid/bluetooth/BluetoothDevice;)Z @@ -497,6 +960,7 @@ Landroid/bluetooth/BluetoothA2dp;->enableOptionalCodecs(Landroid/bluetooth/Bluet Landroid/bluetooth/BluetoothA2dp;->getActiveDevice()Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothA2dp;->getCodecStatus(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothCodecStatus; Landroid/bluetooth/BluetoothA2dp;->getOptionalCodecsEnabled(Landroid/bluetooth/BluetoothDevice;)I +Landroid/bluetooth/BluetoothA2dp;->getPriority(Landroid/bluetooth/BluetoothDevice;)I Landroid/bluetooth/BluetoothA2dp;->OPTIONAL_CODECS_NOT_SUPPORTED:I Landroid/bluetooth/BluetoothA2dp;->OPTIONAL_CODECS_PREF_DISABLED:I Landroid/bluetooth/BluetoothA2dp;->OPTIONAL_CODECS_PREF_ENABLED:I @@ -506,14 +970,26 @@ Landroid/bluetooth/BluetoothA2dp;->OPTIONAL_CODECS_SUPPORT_UNKNOWN:I Landroid/bluetooth/BluetoothA2dp;->setActiveDevice(Landroid/bluetooth/BluetoothDevice;)Z Landroid/bluetooth/BluetoothA2dp;->setCodecConfigPreference(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothCodecConfig;)V Landroid/bluetooth/BluetoothA2dp;->setOptionalCodecsEnabled(Landroid/bluetooth/BluetoothDevice;I)V +Landroid/bluetooth/BluetoothA2dp;->stateToString(I)Ljava/lang/String; Landroid/bluetooth/BluetoothA2dp;->supportsOptionalCodecs(Landroid/bluetooth/BluetoothDevice;)I Landroid/bluetooth/BluetoothAdapter;->disable(Z)Z Landroid/bluetooth/BluetoothAdapter;->factoryReset()Z +Landroid/bluetooth/BluetoothAdapter;->getBluetoothManager()Landroid/bluetooth/IBluetoothManager; +Landroid/bluetooth/BluetoothAdapter;->getBluetoothService(Landroid/bluetooth/IBluetoothManagerCallback;)Landroid/bluetooth/IBluetooth; +Landroid/bluetooth/BluetoothAdapter;->getConnectionState()I Landroid/bluetooth/BluetoothAdapter;->getDiscoverableTimeout()I Landroid/bluetooth/BluetoothAdapter;->getLeState()I +Landroid/bluetooth/BluetoothAdapter;->getUuids()[Landroid/os/ParcelUuid; +Landroid/bluetooth/BluetoothAdapter;->listenUsingEncryptedRfcommWithServiceRecord(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket; +Landroid/bluetooth/BluetoothAdapter;->listenUsingRfcommOn(IZZ)Landroid/bluetooth/BluetoothServerSocket; Landroid/bluetooth/BluetoothAdapter;->mService:Landroid/bluetooth/IBluetooth; +Landroid/bluetooth/BluetoothAdapter;->setDiscoverableTimeout(I)V Landroid/bluetooth/BluetoothAdapter;->setScanMode(I)Z Landroid/bluetooth/BluetoothAdapter;->setScanMode(II)Z +Landroid/bluetooth/BluetoothClass;-><init>(I)V +Landroid/bluetooth/BluetoothClass;->doesClassMatch(I)Z +Landroid/bluetooth/BluetoothClass;->PROFILE_A2DP:I +Landroid/bluetooth/BluetoothClass;->PROFILE_HEADSET:I Landroid/bluetooth/BluetoothCodecConfig; Landroid/bluetooth/BluetoothCodecConfig;-><init>(IIIIIJJJJ)V Landroid/bluetooth/BluetoothCodecConfig;->BITS_PER_SAMPLE_16:I @@ -555,24 +1031,79 @@ Landroid/bluetooth/BluetoothCodecStatus;->EXTRA_CODEC_STATUS:Ljava/lang/String; Landroid/bluetooth/BluetoothCodecStatus;->getCodecConfig()Landroid/bluetooth/BluetoothCodecConfig; Landroid/bluetooth/BluetoothCodecStatus;->getCodecsLocalCapabilities()[Landroid/bluetooth/BluetoothCodecConfig; Landroid/bluetooth/BluetoothCodecStatus;->getCodecsSelectableCapabilities()[Landroid/bluetooth/BluetoothCodecConfig; +Landroid/bluetooth/BluetoothDevice;-><init>(Ljava/lang/String;)V +Landroid/bluetooth/BluetoothDevice;->ACTION_ALIAS_CHANGED:Ljava/lang/String; +Landroid/bluetooth/BluetoothDevice;->ACTION_DISAPPEARED:Ljava/lang/String; +Landroid/bluetooth/BluetoothDevice;->ACTION_PAIRING_CANCEL:Ljava/lang/String; +Landroid/bluetooth/BluetoothDevice;->ACTION_SDP_RECORD:Ljava/lang/String; +Landroid/bluetooth/BluetoothDevice;->cancelPairingUserInput()Z +Landroid/bluetooth/BluetoothDevice;->connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;IZILandroid/os/Handler;)Landroid/bluetooth/BluetoothGatt; +Landroid/bluetooth/BluetoothDevice;->convertPinToBytes(Ljava/lang/String;)[B Landroid/bluetooth/BluetoothDevice;->createBond(I)Z +Landroid/bluetooth/BluetoothDevice;->createInsecureRfcommSocket(I)Landroid/bluetooth/BluetoothSocket; +Landroid/bluetooth/BluetoothDevice;->createRfcommSocket(I)Landroid/bluetooth/BluetoothSocket; +Landroid/bluetooth/BluetoothDevice;->createScoSocket()Landroid/bluetooth/BluetoothSocket; +Landroid/bluetooth/BluetoothDevice;->EXTRA_REASON:Ljava/lang/String; +Landroid/bluetooth/BluetoothDevice;->EXTRA_SDP_SEARCH_STATUS:Ljava/lang/String; Landroid/bluetooth/BluetoothDevice;->getAlias()Ljava/lang/String; Landroid/bluetooth/BluetoothDevice;->getAliasName()Ljava/lang/String; +Landroid/bluetooth/BluetoothDevice;->getMessageAccessPermission()I +Landroid/bluetooth/BluetoothDevice;->getPhonebookAccessPermission()I +Landroid/bluetooth/BluetoothDevice;->getService()Landroid/bluetooth/IBluetooth; +Landroid/bluetooth/BluetoothDevice;->isBluetoothDock()Z +Landroid/bluetooth/BluetoothDevice;->isBondingInitiatedLocally()Z +Landroid/bluetooth/BluetoothDevice;->setAlias(Ljava/lang/String;)Z +Landroid/bluetooth/BluetoothDevice;->setMessageAccessPermission(I)Z +Landroid/bluetooth/BluetoothDevice;->setPasskey(I)Z +Landroid/bluetooth/BluetoothDevice;->setSimAccessPermission(I)Z +Landroid/bluetooth/BluetoothDevice;->UNBOND_REASON_AUTH_FAILED:I +Landroid/bluetooth/BluetoothDevice;->UNBOND_REASON_AUTH_REJECTED:I +Landroid/bluetooth/BluetoothDevice;->UNBOND_REASON_AUTH_TIMEOUT:I +Landroid/bluetooth/BluetoothDevice;->UNBOND_REASON_DISCOVERY_IN_PROGRESS:I +Landroid/bluetooth/BluetoothDevice;->UNBOND_REASON_REMOTE_AUTH_CANCELED:I +Landroid/bluetooth/BluetoothDevice;->UNBOND_REASON_REMOTE_DEVICE_DOWN:I +Landroid/bluetooth/BluetoothDevice;->UNBOND_REASON_REPEATED_ATTEMPTS:I +Landroid/bluetooth/BluetoothGatt;->connect(Ljava/lang/Boolean;Landroid/bluetooth/BluetoothGattCallback;Landroid/os/Handler;)Z Landroid/bluetooth/BluetoothGatt;->mAuthRetryState:I +Landroid/bluetooth/BluetoothGatt;->mAutoConnect:Z +Landroid/bluetooth/BluetoothGatt;->mCallback:Landroid/bluetooth/BluetoothGattCallback; Landroid/bluetooth/BluetoothGatt;->mClientIf:I +Landroid/bluetooth/BluetoothGatt;->mDeviceBusy:Ljava/lang/Boolean; +Landroid/bluetooth/BluetoothGatt;->mService:Landroid/bluetooth/IBluetoothGatt; +Landroid/bluetooth/BluetoothGatt;->mTransport:I Landroid/bluetooth/BluetoothGatt;->refresh()Z +Landroid/bluetooth/BluetoothGatt;->unregisterApp()V Landroid/bluetooth/BluetoothGattCharacteristic;->mInstance:I Landroid/bluetooth/BluetoothGattCharacteristic;->mService:Landroid/bluetooth/BluetoothGattService; +Landroid/bluetooth/BluetoothGattCharacteristic;->setKeySize(I)V +Landroid/bluetooth/BluetoothGattCharacteristic;->setService(Landroid/bluetooth/BluetoothGattService;)V Landroid/bluetooth/BluetoothGattDescriptor;->mCharacteristic:Landroid/bluetooth/BluetoothGattCharacteristic; Landroid/bluetooth/BluetoothGattDescriptor;->mInstance:I +Landroid/bluetooth/BluetoothGattDescriptor;->setCharacteristic(Landroid/bluetooth/BluetoothGattCharacteristic;)V +Landroid/bluetooth/BluetoothGattService;->mDevice:Landroid/bluetooth/BluetoothDevice; +Landroid/bluetooth/BluetoothGattService;->setAdvertisePreferred(Z)V +Landroid/bluetooth/BluetoothGattService;->setInstanceId(I)V Landroid/bluetooth/BluetoothHeadset;->ACTION_ACTIVE_DEVICE_CHANGED:Ljava/lang/String; Landroid/bluetooth/BluetoothHeadset;->close()V Landroid/bluetooth/BluetoothHeadset;->connectAudio()Z Landroid/bluetooth/BluetoothHeadset;->disconnectAudio()Z Landroid/bluetooth/BluetoothHeadset;->getActiveDevice()Landroid/bluetooth/BluetoothDevice; +Landroid/bluetooth/BluetoothHeadset;->getAudioState(Landroid/bluetooth/BluetoothDevice;)I +Landroid/bluetooth/BluetoothHeadset;->getPriority(Landroid/bluetooth/BluetoothDevice;)I +Landroid/bluetooth/BluetoothHeadset;->isEnabled()Z Landroid/bluetooth/BluetoothHeadset;->setActiveDevice(Landroid/bluetooth/BluetoothDevice;)Z -Landroid/bluetooth/BluetoothHeadset;->startScoUsingVirtualVoiceCall(Landroid/bluetooth/BluetoothDevice;)Z -Landroid/bluetooth/BluetoothHeadset;->stopScoUsingVirtualVoiceCall(Landroid/bluetooth/BluetoothDevice;)Z +Landroid/bluetooth/BluetoothHeadset;->startScoUsingVirtualVoiceCall()Z +Landroid/bluetooth/BluetoothHeadset;->stopScoUsingVirtualVoiceCall()Z +Landroid/bluetooth/BluetoothHeadsetClient;->acceptCall(Landroid/bluetooth/BluetoothDevice;I)Z +Landroid/bluetooth/BluetoothHeadsetClient;->connect(Landroid/bluetooth/BluetoothDevice;)Z +Landroid/bluetooth/BluetoothHeadsetClient;->disconnect(Landroid/bluetooth/BluetoothDevice;)Z +Landroid/bluetooth/BluetoothHeadsetClient;->getAudioState(Landroid/bluetooth/BluetoothDevice;)I +Landroid/bluetooth/BluetoothHeadsetClient;->rejectCall(Landroid/bluetooth/BluetoothDevice;)Z +Landroid/bluetooth/BluetoothHeadsetClientCall;->getId()I +Landroid/bluetooth/BluetoothHeadsetClientCall;->getNumber()Ljava/lang/String; +Landroid/bluetooth/BluetoothHeadsetClientCall;->getState()I +Landroid/bluetooth/BluetoothHeadsetClientCall;->isMultiParty()Z +Landroid/bluetooth/BluetoothHeadsetClientCall;->isOutgoing()Z Landroid/bluetooth/BluetoothHearingAid;->ACTION_ACTIVE_DEVICE_CHANGED:Ljava/lang/String; Landroid/bluetooth/BluetoothHearingAid;->getActiveDevices()Ljava/util/List; Landroid/bluetooth/BluetoothHearingAid;->setActiveDevice(Landroid/bluetooth/BluetoothDevice;)Z @@ -587,17 +1118,72 @@ Landroid/bluetooth/BluetoothPan;->isTetheringOn()Z Landroid/bluetooth/BluetoothPan;->isValidDevice(Landroid/bluetooth/BluetoothDevice;)Z Landroid/bluetooth/BluetoothPan;->log(Ljava/lang/String;)V Landroid/bluetooth/BluetoothPan;->setBluetoothTethering(Z)V +Landroid/bluetooth/BluetoothProfile;->A2DP_SINK:I +Landroid/bluetooth/BluetoothProfile;->AVRCP_CONTROLLER:I Landroid/bluetooth/BluetoothProfile;->PAN:I +Landroid/bluetooth/BluetoothProfile;->PRIORITY_AUTO_CONNECT:I +Landroid/bluetooth/BluetoothProfile;->PRIORITY_UNDEFINED:I +Landroid/bluetooth/BluetoothServerSocket;->mSocket:Landroid/bluetooth/BluetoothSocket; +Landroid/bluetooth/BluetoothSocket;->EADDRINUSE:I +Landroid/bluetooth/BluetoothSocket;->flush()V Landroid/bluetooth/BluetoothSocket;->mPfd:Landroid/os/ParcelFileDescriptor; +Landroid/bluetooth/BluetoothSocket;->mPort:I +Landroid/bluetooth/BluetoothSocket;->mSocket:Landroid/net/LocalSocket; +Landroid/bluetooth/BluetoothUuid;->AdvAudioDist:Landroid/os/ParcelUuid; +Landroid/bluetooth/BluetoothUuid;->AudioSink:Landroid/os/ParcelUuid; +Landroid/bluetooth/BluetoothUuid;->containsAnyUuid([Landroid/os/ParcelUuid;[Landroid/os/ParcelUuid;)Z +Landroid/bluetooth/BluetoothUuid;->Handsfree:Landroid/os/ParcelUuid; +Landroid/bluetooth/BluetoothUuid;->Hogp:Landroid/os/ParcelUuid; +Landroid/bluetooth/BluetoothUuid;->HSP:Landroid/os/ParcelUuid; +Landroid/bluetooth/BluetoothUuid;->is16BitUuid(Landroid/os/ParcelUuid;)Z +Landroid/bluetooth/BluetoothUuid;->is32BitUuid(Landroid/os/ParcelUuid;)Z +Landroid/bluetooth/BluetoothUuid;->isAdvAudioDist(Landroid/os/ParcelUuid;)Z +Landroid/bluetooth/BluetoothUuid;->isAudioSource(Landroid/os/ParcelUuid;)Z +Landroid/bluetooth/BluetoothUuid;->isAvrcpTarget(Landroid/os/ParcelUuid;)Z +Landroid/bluetooth/BluetoothUuid;->isUuidPresent([Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Z +Landroid/bluetooth/BluetoothUuid;->NAP:Landroid/os/ParcelUuid; +Landroid/bluetooth/BluetoothUuid;->ObexObjectPush:Landroid/os/ParcelUuid; +Landroid/bluetooth/BluetoothUuid;->PBAP_PSE:Landroid/os/ParcelUuid; Landroid/bluetooth/BluetoothUuid;->RESERVED_UUIDS:[Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetooth$Stub$Proxy;->getAddress()Ljava/lang/String; Landroid/bluetooth/IBluetooth$Stub$Proxy;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I +Landroid/bluetooth/IBluetooth$Stub;-><init>()V Landroid/bluetooth/IBluetooth$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetooth; Landroid/bluetooth/IBluetooth;->getAddress()Ljava/lang/String; +Landroid/bluetooth/IBluetooth;->getRemoteAlias(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String; +Landroid/bluetooth/IBluetooth;->isEnabled()Z +Landroid/bluetooth/IBluetoothA2dp$Stub;-><init>()V +Landroid/bluetooth/IBluetoothA2dp$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothA2dp; +Landroid/bluetooth/IBluetoothA2dp;->connect(Landroid/bluetooth/BluetoothDevice;)Z +Landroid/bluetooth/IBluetoothA2dp;->disconnect(Landroid/bluetooth/BluetoothDevice;)Z +Landroid/bluetooth/IBluetoothA2dp;->getConnectedDevices()Ljava/util/List; +Landroid/bluetooth/IBluetoothA2dp;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I +Landroid/bluetooth/IBluetoothA2dp;->getDevicesMatchingConnectionStates([I)Ljava/util/List; +Landroid/bluetooth/IBluetoothA2dp;->getPriority(Landroid/bluetooth/BluetoothDevice;)I +Landroid/bluetooth/IBluetoothCallback$Stub;-><init>()V +Landroid/bluetooth/IBluetoothGatt;->registerClient(Landroid/os/ParcelUuid;Landroid/bluetooth/IBluetoothGattCallback;)V +Landroid/bluetooth/IBluetoothGatt;->unregisterClient(I)V +Landroid/bluetooth/IBluetoothGattCallback$Stub;-><init>()V +Landroid/bluetooth/IBluetoothGattCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothGattCallback; +Landroid/bluetooth/IBluetoothHeadset$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothHeadset; +Landroid/bluetooth/IBluetoothHeadset;->connect(Landroid/bluetooth/BluetoothDevice;)Z +Landroid/bluetooth/IBluetoothHeadset;->disconnect(Landroid/bluetooth/BluetoothDevice;)Z +Landroid/bluetooth/IBluetoothHeadset;->getConnectedDevices()Ljava/util/List; +Landroid/bluetooth/IBluetoothHeadset;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I +Landroid/bluetooth/IBluetoothHeadset;->getPriority(Landroid/bluetooth/BluetoothDevice;)I +Landroid/bluetooth/IBluetoothHeadset;->setPriority(Landroid/bluetooth/BluetoothDevice;I)Z +Landroid/bluetooth/IBluetoothHidDeviceCallback$Stub;-><init>()V Landroid/bluetooth/IBluetoothManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/bluetooth/IBluetoothManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothManager; +Landroid/bluetooth/IBluetoothManager;->getBluetoothGatt()Landroid/bluetooth/IBluetoothGatt; +Landroid/bluetooth/IBluetoothManager;->registerStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V +Landroid/bluetooth/IBluetoothManager;->unregisterStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V +Landroid/bluetooth/IBluetoothManagerCallback$Stub;-><init>()V +Landroid/bluetooth/IBluetoothPbap$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothPbap; +Landroid/bluetooth/IBluetoothStateChangeCallback$Stub;-><init>()V Landroid/bluetooth/le/ScanRecord;->parseFromBytes([B)Landroid/bluetooth/le/ScanRecord; Landroid/content/AsyncTaskLoader;->mExecutor:Ljava/util/concurrent/Executor; +Landroid/content/AsyncTaskLoader;->waitForLoader()V Landroid/content/BroadcastReceiver$PendingResult;-><init>(ILjava/lang/String;Landroid/os/Bundle;IZZLandroid/os/IBinder;II)V Landroid/content/BroadcastReceiver$PendingResult;->mAbortBroadcast:Z Landroid/content/BroadcastReceiver$PendingResult;->mFinished:Z @@ -611,9 +1197,18 @@ Landroid/content/BroadcastReceiver$PendingResult;->mSendingUser:I Landroid/content/BroadcastReceiver$PendingResult;->mToken:Landroid/os/IBinder; Landroid/content/BroadcastReceiver$PendingResult;->mType:I Landroid/content/BroadcastReceiver;->getPendingResult()Landroid/content/BroadcastReceiver$PendingResult; +Landroid/content/BroadcastReceiver;->mPendingResult:Landroid/content/BroadcastReceiver$PendingResult; Landroid/content/BroadcastReceiver;->setPendingResult(Landroid/content/BroadcastReceiver$PendingResult;)V +Landroid/content/ClipboardManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V +Landroid/content/ClipboardManager;->reportPrimaryClipChanged()V Landroid/content/ClipData$Item;->mUri:Landroid/net/Uri; +Landroid/content/ClipData;->getIcon()Landroid/graphics/Bitmap; +Landroid/content/ComponentName;->appendShortString(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V +Landroid/content/ComponentName;->printShortString(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)V Landroid/content/ContentProvider;->coerceToLocalContentProvider(Landroid/content/IContentProvider;)Landroid/content/ContentProvider; +Landroid/content/ContentProvider;->mAuthorities:[Ljava/lang/String; +Landroid/content/ContentProvider;->mAuthority:Ljava/lang/String; +Landroid/content/ContentProvider;->maybeAddUserId(Landroid/net/Uri;I)Landroid/net/Uri; Landroid/content/ContentProvider;->mContext:Landroid/content/Context; Landroid/content/ContentProvider;->mPathPermissions:[Landroid/content/pm/PathPermission; Landroid/content/ContentProvider;->mReadPermission:Ljava/lang/String; @@ -621,75 +1216,157 @@ Landroid/content/ContentProvider;->mWritePermission:Ljava/lang/String; Landroid/content/ContentProvider;->setAppOps(II)V Landroid/content/ContentProviderClient;->mContentProvider:Landroid/content/IContentProvider; Landroid/content/ContentProviderClient;->mPackageName:Ljava/lang/String; +Landroid/content/ContentProviderNative;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentProvider; +Landroid/content/ContentProviderOperation;->getType()I Landroid/content/ContentProviderOperation;->mSelection:Ljava/lang/String; Landroid/content/ContentProviderOperation;->mType:I Landroid/content/ContentProviderOperation;->mUri:Landroid/net/Uri; Landroid/content/ContentProviderOperation;->TYPE_DELETE:I Landroid/content/ContentProviderOperation;->TYPE_INSERT:I Landroid/content/ContentProviderOperation;->TYPE_UPDATE:I +Landroid/content/ContentResolver$OpenResourceIdResult;->id:I +Landroid/content/ContentResolver$OpenResourceIdResult;->r:Landroid/content/res/Resources; Landroid/content/ContentResolver;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider; +Landroid/content/ContentResolver;->acquireExistingProvider(Landroid/net/Uri;)Landroid/content/IContentProvider; Landroid/content/ContentResolver;->acquireProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider; Landroid/content/ContentResolver;->acquireProvider(Landroid/net/Uri;)Landroid/content/IContentProvider; Landroid/content/ContentResolver;->acquireProvider(Ljava/lang/String;)Landroid/content/IContentProvider; Landroid/content/ContentResolver;->acquireUnstableProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider; +Landroid/content/ContentResolver;->acquireUnstableProvider(Ljava/lang/String;)Landroid/content/IContentProvider; Landroid/content/ContentResolver;->getContentService()Landroid/content/IContentService; +Landroid/content/ContentResolver;->getPackageName()Ljava/lang/String; +Landroid/content/ContentResolver;->getResourceId(Landroid/net/Uri;)Landroid/content/ContentResolver$OpenResourceIdResult; Landroid/content/ContentResolver;->getSyncStatus(Landroid/accounts/Account;Ljava/lang/String;)Landroid/content/SyncStatusInfo; +Landroid/content/ContentResolver;->getSyncStatusAsUser(Landroid/accounts/Account;Ljava/lang/String;I)Landroid/content/SyncStatusInfo; Landroid/content/ContentResolver;->mContext:Landroid/content/Context; Landroid/content/ContentResolver;->mPackageName:Ljava/lang/String; Landroid/content/ContentResolver;->releaseProvider(Landroid/content/IContentProvider;)Z Landroid/content/ContentResolver;->releaseUnstableProvider(Landroid/content/IContentProvider;)Z +Landroid/content/ContentResolver;->sContentService:Landroid/content/IContentService; +Landroid/content/ContentResolver;->SYNC_ERROR_SYNC_ALREADY_IN_PROGRESS:I +Landroid/content/ContentResolver;->SYNC_OBSERVER_TYPE_STATUS:I Landroid/content/ContentResolver;->takePersistableUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V Landroid/content/ContentResolver;->unstableProviderDied(Landroid/content/IContentProvider;)V Landroid/content/ContentValues;-><init>(Ljava/util/HashMap;)V Landroid/content/ContentValues;->mValues:Ljava/util/HashMap; +Landroid/content/Context;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/Handler;Landroid/os/UserHandle;)Z +Landroid/content/Context;->canStartActivityForResult()Z +Landroid/content/Context;->checkPermission(Ljava/lang/String;IILandroid/os/IBinder;)I +Landroid/content/Context;->COUNTRY_DETECTOR:Ljava/lang/String; +Landroid/content/Context;->createApplicationContext(Landroid/content/pm/ApplicationInfo;I)Landroid/content/Context; Landroid/content/Context;->getBasePackageName()Ljava/lang/String; +Landroid/content/Context;->getDisplay()Landroid/view/Display; Landroid/content/Context;->getSharedPrefsFile(Ljava/lang/String;)Ljava/io/File; Landroid/content/Context;->getThemeResId()I +Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;I)V Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;I)V +Landroid/content/Context;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;ILandroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V Landroid/content/Context;->sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;ILandroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V Landroid/content/Context;->sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;ILandroid/os/Bundle;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V +Landroid/content/Context;->startActivityAsUser(Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/UserHandle;)V +Landroid/content/Context;->startActivityForResult(Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;)V +Landroid/content/Context;->STATUS_BAR_SERVICE:Ljava/lang/String; +Landroid/content/ContextWrapper;->getBasePackageName()Ljava/lang/String; Landroid/content/ContextWrapper;->getDisplay()Landroid/view/Display; Landroid/content/ContextWrapper;->mBase:Landroid/content/Context; +Landroid/content/ContextWrapper;->registerReceiverAsUser(Landroid/content/BroadcastReceiver;Landroid/os/UserHandle;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent; +Landroid/content/ContextWrapper;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V +Landroid/content/ContextWrapper;->startForegroundServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName; +Landroid/content/ContextWrapper;->startServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName; +Landroid/content/CursorEntityIterator;-><init>(Landroid/database/Cursor;)V Landroid/content/CursorLoader;->mCancellationSignal:Landroid/os/CancellationSignal; Landroid/content/CursorLoader;->mObserver:Landroid/content/Loader$ForceLoadContentObserver; Landroid/content/IClipboard$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/IClipboard$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IClipboard; +Landroid/content/IContentProvider;->bulkInsert(Ljava/lang/String;Landroid/net/Uri;[Landroid/content/ContentValues;)I Landroid/content/IContentProvider;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle; +Landroid/content/IContentProvider;->delete(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I +Landroid/content/IContentProvider;->descriptor:Ljava/lang/String; +Landroid/content/IContentProvider;->insert(Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri; +Landroid/content/IContentProvider;->update(Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I Landroid/content/IContentService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/content/IContentService$Stub;-><init>()V Landroid/content/IContentService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentService; Landroid/content/IContentService;->cancelSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)V +Landroid/content/IContentService;->getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I Landroid/content/IContentService;->getMasterSyncAutomatically()Z +Landroid/content/IContentService;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType; +Landroid/content/IContentService;->isSyncActive(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Z Landroid/content/IContentService;->setMasterSyncAutomatically(Z)V Landroid/content/IIntentReceiver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/IIntentReceiver$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/IIntentReceiver$Stub;-><init>()V +Landroid/content/IIntentReceiver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentReceiver; Landroid/content/IIntentReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V +Landroid/content/IIntentSender$Stub;-><init>()V +Landroid/content/IIntentSender$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentSender; Landroid/content/Intent;->ACTION_ALARM_CHANGED:Ljava/lang/String; +Landroid/content/Intent;->ACTION_USER_SWITCHED:Ljava/lang/String; +Landroid/content/Intent;->FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT:I +Landroid/content/Intent;->getExtra(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; +Landroid/content/Intent;->isExcludingStopped()Z Landroid/content/Intent;->mExtras:Landroid/os/Bundle; +Landroid/content/Intent;->parseCommandArgs(Landroid/os/ShellCommand;Landroid/content/Intent$CommandOptionHandler;)Landroid/content/Intent; Landroid/content/Intent;->prepareToLeaveProcess(Landroid/content/Context;)V +Landroid/content/Intent;->printIntentArgsHelp(Ljava/io/PrintWriter;Ljava/lang/String;)V Landroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/IBinder;)Landroid/content/Intent; Landroid/content/Intent;->setAllowFds(Z)V Landroid/content/Intent;->toInsecureString()Ljava/lang/String; +Landroid/content/IntentFilter;->hasDataAuthority(Landroid/content/IntentFilter$AuthorityEntry;)Z +Landroid/content/IntentFilter;->hasDataPath(Landroid/os/PatternMatcher;)Z +Landroid/content/IntentFilter;->hasDataSchemeSpecificPart(Landroid/os/PatternMatcher;)Z +Landroid/content/IntentFilter;->hasExactDataType(Ljava/lang/String;)Z +Landroid/content/IntentFilter;->isVerified()Z Landroid/content/IntentFilter;->mActions:Ljava/util/ArrayList; +Landroid/content/IntentFilter;->mOrder:I Landroid/content/IntentSender;-><init>(Landroid/content/IIntentSender;)V +Landroid/content/IntentSender;->getTarget()Landroid/content/IIntentSender; Landroid/content/IntentSender;->mTarget:Landroid/content/IIntentSender; +Landroid/content/IOnPrimaryClipChangedListener$Stub;-><init>()V +Landroid/content/IOnPrimaryClipChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IOnPrimaryClipChangedListener; Landroid/content/IRestrictionsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IRestrictionsManager; Landroid/content/ISyncAdapter$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/ISyncAdapter$Stub$Proxy;->mRemote:Landroid/os/IBinder; +Landroid/content/ISyncAdapter$Stub;-><init>()V +Landroid/content/ISyncAdapter$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncAdapter; +Landroid/content/ISyncAdapter;->cancelSync(Landroid/content/ISyncContext;)V +Landroid/content/ISyncAdapter;->startSync(Landroid/content/ISyncContext;Ljava/lang/String;Landroid/accounts/Account;Landroid/os/Bundle;)V Landroid/content/ISyncContext$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/ISyncContext$Stub$Proxy;->mRemote:Landroid/os/IBinder; +Landroid/content/ISyncContext$Stub;-><init>()V Landroid/content/ISyncContext$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncContext; +Landroid/content/ISyncServiceAdapter$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncServiceAdapter; +Landroid/content/ISyncServiceAdapter;->cancelSync(Landroid/content/ISyncContext;)V +Landroid/content/ISyncServiceAdapter;->startSync(Landroid/content/ISyncContext;Landroid/os/Bundle;)V Landroid/content/ISyncStatusObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/ISyncStatusObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder; +Landroid/content/ISyncStatusObserver$Stub;-><init>()V +Landroid/content/ISyncStatusObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncStatusObserver; +Landroid/content/ISyncStatusObserver;->onStatusChanged(I)V +Landroid/content/om/IOverlayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/om/IOverlayManager; +Landroid/content/om/IOverlayManager;->getAllOverlays(I)Ljava/util/Map; +Landroid/content/om/IOverlayManager;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo; +Landroid/content/om/OverlayInfo;->isEnabled()Z +Landroid/content/om/OverlayInfo;->packageName:Ljava/lang/String; +Landroid/content/om/OverlayInfo;->state:I +Landroid/content/om/OverlayInfo;->targetPackageName:Ljava/lang/String; +Landroid/content/pm/ActivityInfo;->activityInfoConfigJavaToNative(I)I Landroid/content/pm/ActivityInfo;->isResizeableMode(I)Z Landroid/content/pm/ActivityInfo;->resizeMode:I Landroid/content/pm/ActivityInfo;->supportsPictureInPicture()Z +Landroid/content/pm/ApplicationInfo;->disableCompatibilityMode()V Landroid/content/pm/ApplicationInfo;->enabledSetting:I +Landroid/content/pm/ApplicationInfo;->fullBackupContent:I Landroid/content/pm/ApplicationInfo;->getBaseResourcePath()Ljava/lang/String; +Landroid/content/pm/ApplicationInfo;->getCodePath()Ljava/lang/String; +Landroid/content/pm/ApplicationInfo;->hasRtlSupport()Z Landroid/content/pm/ApplicationInfo;->installLocation:I Landroid/content/pm/ApplicationInfo;->isForwardLocked()Z +Landroid/content/pm/ApplicationInfo;->nativeLibraryRootDir:Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->primaryCpuAbi:Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->privateFlags:I +Landroid/content/pm/ApplicationInfo;->PRIVATE_FLAG_PRIVILEGED:I +Landroid/content/pm/ApplicationInfo;->resourceDirs:[Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->scanPublicSourceDir:Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->scanSourceDir:Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->secondaryCpuAbi:Ljava/lang/String; @@ -721,27 +1398,71 @@ Landroid/content/pm/IPackageInstallerSession$Stub;->asInterface(Landroid/os/IBin Landroid/content/pm/IPackageInstallObserver2$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageInstallObserver2$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageInstallObserver2$Stub;-><init>()V +Landroid/content/pm/IPackageInstallObserver2$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallObserver2; Landroid/content/pm/IPackageInstallObserver2;->onPackageInstalled(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V +Landroid/content/pm/IPackageInstallObserver2;->onUserActionRequired(Landroid/content/Intent;)V +Landroid/content/pm/IPackageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageManager$Stub$Proxy;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice; +Landroid/content/pm/IPackageManager$Stub$Proxy;->getInstallLocation()I Landroid/content/pm/IPackageManager$Stub$Proxy;->getPackageInfo(Ljava/lang/String;II)Landroid/content/pm/PackageInfo; Landroid/content/pm/IPackageManager$Stub$Proxy;->getPackagesForUid(I)[Ljava/lang/String; Landroid/content/pm/IPackageManager$Stub$Proxy;->getSystemSharedLibraryNames()[Ljava/lang/String; +Landroid/content/pm/IPackageManager$Stub;-><init>()V Landroid/content/pm/IPackageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageManager; Landroid/content/pm/IPackageManager;->addPermission(Landroid/content/pm/PermissionInfo;)Z Landroid/content/pm/IPackageManager;->addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z +Landroid/content/pm/IPackageManager;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String; +Landroid/content/pm/IPackageManager;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I +Landroid/content/pm/IPackageManager;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I +Landroid/content/pm/IPackageManager;->checkUidPermission(Ljava/lang/String;I)I +Landroid/content/pm/IPackageManager;->checkUidSignatures(II)I +Landroid/content/pm/IPackageManager;->clearPackagePreferredActivities(Ljava/lang/String;)V +Landroid/content/pm/IPackageManager;->currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String; +Landroid/content/pm/IPackageManager;->deleteApplicationCacheFiles(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V +Landroid/content/pm/IPackageManager;->enterSafeMode()V +Landroid/content/pm/IPackageManager;->getApplicationEnabledSetting(Ljava/lang/String;I)I +Landroid/content/pm/IPackageManager;->getBlockUninstallForUser(Ljava/lang/String;I)Z Landroid/content/pm/IPackageManager;->getComponentEnabledSetting(Landroid/content/ComponentName;I)I +Landroid/content/pm/IPackageManager;->getFlagsForUid(I)I +Landroid/content/pm/IPackageManager;->getInstalledApplications(II)Landroid/content/pm/ParceledListSlice; Landroid/content/pm/IPackageManager;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice; Landroid/content/pm/IPackageManager;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String; Landroid/content/pm/IPackageManager;->getInstallLocation()I +Landroid/content/pm/IPackageManager;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo; Landroid/content/pm/IPackageManager;->getLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo; +Landroid/content/pm/IPackageManager;->getNameForUid(I)Ljava/lang/String; Landroid/content/pm/IPackageManager;->getPackagesForUid(I)[Ljava/lang/String; +Landroid/content/pm/IPackageManager;->getPackageUid(Ljava/lang/String;II)I +Landroid/content/pm/IPackageManager;->getPermissionControllerPackageName()Ljava/lang/String; +Landroid/content/pm/IPackageManager;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo; +Landroid/content/pm/IPackageManager;->getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I Landroid/content/pm/IPackageManager;->getProviderInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ProviderInfo; Landroid/content/pm/IPackageManager;->getReceiverInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo; Landroid/content/pm/IPackageManager;->getServiceInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ServiceInfo; +Landroid/content/pm/IPackageManager;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String; +Landroid/content/pm/IPackageManager;->getSharedSystemSharedLibraryPackageName()Ljava/lang/String; +Landroid/content/pm/IPackageManager;->getSystemSharedLibraryNames()[Ljava/lang/String; +Landroid/content/pm/IPackageManager;->getUidForSharedUser(Ljava/lang/String;)I +Landroid/content/pm/IPackageManager;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V +Landroid/content/pm/IPackageManager;->hasSystemUidErrors()Z +Landroid/content/pm/IPackageManager;->isPackageAvailable(Ljava/lang/String;I)Z +Landroid/content/pm/IPackageManager;->isProtectedBroadcast(Ljava/lang/String;)Z +Landroid/content/pm/IPackageManager;->isSafeMode()Z +Landroid/content/pm/IPackageManager;->isStorageLow()Z +Landroid/content/pm/IPackageManager;->isUidPrivileged(I)Z +Landroid/content/pm/IPackageManager;->queryInstrumentation(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice; +Landroid/content/pm/IPackageManager;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice; +Landroid/content/pm/IPackageManager;->querySyncProviders(Ljava/util/List;Ljava/util/List;)V +Landroid/content/pm/IPackageManager;->removePermission(Ljava/lang/String;)V +Landroid/content/pm/IPackageManager;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V +Landroid/content/pm/IPackageManager;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo; Landroid/content/pm/IPackageManager;->setApplicationEnabledSetting(Ljava/lang/String;IIILjava/lang/String;)V +Landroid/content/pm/IPackageManager;->setApplicationHiddenSettingAsUser(Ljava/lang/String;ZI)Z Landroid/content/pm/IPackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V Landroid/content/pm/IPackageManager;->setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V Landroid/content/pm/IPackageManager;->setLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;ILandroid/content/IntentFilter;ILandroid/content/ComponentName;)V +Landroid/content/pm/IPackageManager;->setPackageStoppedState(Ljava/lang/String;ZI)V +Landroid/content/pm/IPackageManager;->systemReady()V Landroid/content/pm/IPackageMoveObserver$Stub;-><init>()V Landroid/content/pm/IPackageMoveObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageMoveObserver; Landroid/content/pm/IPackageStatsObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V @@ -752,8 +1473,12 @@ Landroid/content/pm/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IShortcutService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IShortcutService; Landroid/content/pm/LauncherActivityInfo;->mActivityInfo:Landroid/content/pm/ActivityInfo; Landroid/content/pm/LauncherApps;->mPm:Landroid/content/pm/PackageManager; +Landroid/content/pm/LauncherApps;->mService:Landroid/content/pm/ILauncherApps; Landroid/content/pm/LauncherApps;->startShortcut(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;I)V +Landroid/content/pm/PackageInfo;->coreApp:Z Landroid/content/pm/PackageInfo;->INSTALL_LOCATION_UNSPECIFIED:I +Landroid/content/pm/PackageInfo;->overlayTarget:Ljava/lang/String; +Landroid/content/pm/PackageInstaller$Session;->addProgress(F)V Landroid/content/pm/PackageInstaller$SessionInfo;-><init>()V Landroid/content/pm/PackageInstaller$SessionInfo;->active:Z Landroid/content/pm/PackageInstaller$SessionInfo;->appIcon:Landroid/graphics/Bitmap; @@ -771,29 +1496,76 @@ Landroid/content/pm/PackageInstaller$SessionParams;->appLabel:Ljava/lang/String; Landroid/content/pm/PackageInstaller$SessionParams;->appPackageName:Ljava/lang/String; Landroid/content/pm/PackageInstaller$SessionParams;->installFlags:I Landroid/content/pm/PackageInstaller$SessionParams;->mode:I +Landroid/content/pm/PackageInstaller$SessionParams;->originatingUid:I Landroid/content/pm/PackageInstaller$SessionParams;->sizeBytes:J Landroid/content/pm/PackageItemInfo;->setForceSafeLabels(Z)V +Landroid/content/pm/PackageManager;->addCrossProfileIntentFilter(Landroid/content/IntentFilter;III)V +Landroid/content/pm/PackageManager;->addPreferredActivityAsUser(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V Landroid/content/pm/PackageManager;->buildRequestPermissionsIntent([Ljava/lang/String;)Landroid/content/Intent; +Landroid/content/pm/PackageManager;->clearApplicationUserData(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V +Landroid/content/pm/PackageManager;->clearCrossProfileIntentFilters(I)V +Landroid/content/pm/PackageManager;->deleteApplicationCacheFiles(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V +Landroid/content/pm/PackageManager;->deleteApplicationCacheFilesAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageDataObserver;)V Landroid/content/pm/PackageManager;->deletePackage(Ljava/lang/String;Landroid/content/pm/IPackageDeleteObserver;I)V +Landroid/content/pm/PackageManager;->deletePackageAsUser(Ljava/lang/String;Landroid/content/pm/IPackageDeleteObserver;II)V +Landroid/content/pm/PackageManager;->deleteStatusToString(I)Ljava/lang/String; +Landroid/content/pm/PackageManager;->flushPackageRestrictionsAsUser(I)V Landroid/content/pm/PackageManager;->freeStorage(JLandroid/content/IntentSender;)V Landroid/content/pm/PackageManager;->freeStorage(Ljava/lang/String;JLandroid/content/IntentSender;)V Landroid/content/pm/PackageManager;->freeStorageAndNotify(JLandroid/content/pm/IPackageDataObserver;)V Landroid/content/pm/PackageManager;->freeStorageAndNotify(Ljava/lang/String;JLandroid/content/pm/IPackageDataObserver;)V +Landroid/content/pm/PackageManager;->getApplicationHiddenSettingAsUser(Ljava/lang/String;Landroid/os/UserHandle;)Z Landroid/content/pm/PackageManager;->getApplicationInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo; Landroid/content/pm/PackageManager;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName; +Landroid/content/pm/PackageManager;->getKeySetByAlias(Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/KeySet; +Landroid/content/pm/PackageManager;->getMoveStatus(I)I Landroid/content/pm/PackageManager;->getPackageCandidateVolumes(Landroid/content/pm/ApplicationInfo;)Ljava/util/List; +Landroid/content/pm/PackageManager;->getPackageCurrentVolume(Landroid/content/pm/ApplicationInfo;)Landroid/os/storage/VolumeInfo; Landroid/content/pm/PackageManager;->getPackageInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/PackageInfo; Landroid/content/pm/PackageManager;->getPackageSizeInfo(Ljava/lang/String;Landroid/content/pm/IPackageStatsObserver;)V +Landroid/content/pm/PackageManager;->getPackageSizeInfoAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageStatsObserver;)V +Landroid/content/pm/PackageManager;->getPackageUidAsUser(Ljava/lang/String;I)I +Landroid/content/pm/PackageManager;->getPackageUidAsUser(Ljava/lang/String;II)I Landroid/content/pm/PackageManager;->getResourcesForApplicationAsUser(Ljava/lang/String;I)Landroid/content/res/Resources; +Landroid/content/pm/PackageManager;->getSigningKeySet(Ljava/lang/String;)Landroid/content/pm/KeySet; +Landroid/content/pm/PackageManager;->getUidForSharedUser(Ljava/lang/String;)I +Landroid/content/pm/PackageManager;->getUserBadgeForDensity(Landroid/os/UserHandle;I)Landroid/graphics/drawable/Drawable; +Landroid/content/pm/PackageManager;->getUserBadgeForDensityNoBackground(Landroid/os/UserHandle;I)Landroid/graphics/drawable/Drawable; +Landroid/content/pm/PackageManager;->installExistingPackageAsUser(Ljava/lang/String;I)I +Landroid/content/pm/PackageManager;->installStatusToString(I)Ljava/lang/String; +Landroid/content/pm/PackageManager;->installStatusToString(ILjava/lang/String;)Ljava/lang/String; +Landroid/content/pm/PackageManager;->INSTALL_REPLACE_EXISTING:I +Landroid/content/pm/PackageManager;->isPackageAvailable(Ljava/lang/String;)Z +Landroid/content/pm/PackageManager;->isPackageSuspendedForUser(Ljava/lang/String;I)Z +Landroid/content/pm/PackageManager;->isSignedBy(Ljava/lang/String;Landroid/content/pm/KeySet;)Z +Landroid/content/pm/PackageManager;->isSignedByExactly(Ljava/lang/String;Landroid/content/pm/KeySet;)Z +Landroid/content/pm/PackageManager;->isUpgrade()Z +Landroid/content/pm/PackageManager;->loadItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable; +Landroid/content/pm/PackageManager;->loadUnbadgedItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable; Landroid/content/pm/PackageManager;->movePackage(Ljava/lang/String;Landroid/os/storage/VolumeInfo;)I +Landroid/content/pm/PackageManager;->MOVE_EXTERNAL_MEDIA:I +Landroid/content/pm/PackageManager;->MOVE_INTERNAL:I Landroid/content/pm/PackageManager;->NO_NATIVE_LIBRARIES:I Landroid/content/pm/PackageManager;->queryBroadcastReceivers(Landroid/content/Intent;II)Ljava/util/List; +Landroid/content/pm/PackageManager;->queryBroadcastReceiversAsUser(Landroid/content/Intent;II)Ljava/util/List; +Landroid/content/pm/PackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;II)Ljava/util/List; +Landroid/content/pm/PackageManager;->queryIntentContentProvidersAsUser(Landroid/content/Intent;II)Ljava/util/List; +Landroid/content/pm/PackageManager;->queryIntentServicesAsUser(Landroid/content/Intent;II)Ljava/util/List; +Landroid/content/pm/PackageManager;->registerMoveCallback(Landroid/content/pm/PackageManager$MoveCallback;Landroid/os/Handler;)V +Landroid/content/pm/PackageManager;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;)V +Landroid/content/pm/PackageManager;->replacePreferredActivityAsUser(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V +Landroid/content/pm/PackageManager;->resolveActivityAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo; +Landroid/content/pm/PackageManager;->resolveContentProviderAsUser(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo; +Landroid/content/pm/PackageManager;->setApplicationHiddenSettingAsUser(Ljava/lang/String;ZLandroid/os/UserHandle;)Z +Landroid/content/pm/PackageManager;->shouldShowRequestPermissionRationale(Ljava/lang/String;)Z +Landroid/content/pm/PackageManager;->unregisterMoveCallback(Landroid/content/pm/PackageManager$MoveCallback;)V Landroid/content/pm/PackageParser$Activity;->info:Landroid/content/pm/ActivityInfo; Landroid/content/pm/PackageParser$ActivityIntentInfo;->activity:Landroid/content/pm/PackageParser$Activity; Landroid/content/pm/PackageParser$Component;->className:Ljava/lang/String; Landroid/content/pm/PackageParser$Component;->getComponentName()Landroid/content/ComponentName; Landroid/content/pm/PackageParser$Component;->intents:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Component;->metaData:Landroid/os/Bundle; +Landroid/content/pm/PackageParser$Component;->owner:Landroid/content/pm/PackageParser$Package; Landroid/content/pm/PackageParser$Instrumentation;->info:Landroid/content/pm/InstrumentationInfo; Landroid/content/pm/PackageParser$IntentInfo;-><init>()V Landroid/content/pm/PackageParser$IntentInfo;->banner:I @@ -802,11 +1574,16 @@ Landroid/content/pm/PackageParser$IntentInfo;->icon:I Landroid/content/pm/PackageParser$IntentInfo;->labelRes:I Landroid/content/pm/PackageParser$IntentInfo;->logo:I Landroid/content/pm/PackageParser$IntentInfo;->nonLocalizedLabel:Ljava/lang/CharSequence; +Landroid/content/pm/PackageParser$NewPermissionInfo;->name:Ljava/lang/String; +Landroid/content/pm/PackageParser$NewPermissionInfo;->sdkVersion:I +Landroid/content/pm/PackageParser$Package;-><init>(Ljava/lang/String;)V Landroid/content/pm/PackageParser$Package;->activities:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->applicationInfo:Landroid/content/pm/ApplicationInfo; Landroid/content/pm/PackageParser$Package;->configPreferences:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$Package;->installLocation:I Landroid/content/pm/PackageParser$Package;->instrumentation:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->mAppMetaData:Landroid/os/Bundle; +Landroid/content/pm/PackageParser$Package;->mExtras:Ljava/lang/Object; Landroid/content/pm/PackageParser$Package;->mKeySetMapping:Landroid/util/ArrayMap; Landroid/content/pm/PackageParser$Package;->mPreferredOrder:I Landroid/content/pm/PackageParser$Package;->mSharedUserId:Ljava/lang/String; @@ -817,14 +1594,26 @@ Landroid/content/pm/PackageParser$Package;->mVersionName:Ljava/lang/String; Landroid/content/pm/PackageParser$Package;->packageName:Ljava/lang/String; Landroid/content/pm/PackageParser$Package;->permissionGroups:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->permissions:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$Package;->protectedBroadcasts:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->providers:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->receivers:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->reqFeatures:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->requestedPermissions:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->services:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$Package;->setPackageName(Ljava/lang/String;)V Landroid/content/pm/PackageParser$Package;->usesLibraries:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$Package;->usesLibraryFiles:[Ljava/lang/String; Landroid/content/pm/PackageParser$Package;->usesOptionalLibraries:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$PackageLite;->installLocation:I +Landroid/content/pm/PackageParser$PackageLite;->packageName:Ljava/lang/String; +Landroid/content/pm/PackageParser$Permission;-><init>(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PermissionInfo;)V +Landroid/content/pm/PackageParser$Permission;->group:Landroid/content/pm/PackageParser$PermissionGroup; +Landroid/content/pm/PackageParser$Permission;->info:Landroid/content/pm/PermissionInfo; +Landroid/content/pm/PackageParser$Permission;->tree:Z +Landroid/content/pm/PackageParser$PermissionGroup;->info:Landroid/content/pm/PermissionGroupInfo; +Landroid/content/pm/PackageParser$Provider;-><init>(Landroid/content/pm/PackageParser$Provider;)V Landroid/content/pm/PackageParser$Provider;->info:Landroid/content/pm/ProviderInfo; +Landroid/content/pm/PackageParser$Provider;->syncable:Z Landroid/content/pm/PackageParser$ProviderIntentInfo;->provider:Landroid/content/pm/PackageParser$Provider; Landroid/content/pm/PackageParser$Service;->info:Landroid/content/pm/ServiceInfo; Landroid/content/pm/PackageParser$ServiceIntentInfo;->service:Landroid/content/pm/PackageParser$Service; @@ -841,35 +1630,76 @@ Landroid/content/pm/PackageParser;->generatePermissionGroupInfo(Landroid/content Landroid/content/pm/PackageParser;->generatePermissionInfo(Landroid/content/pm/PackageParser$Permission;I)Landroid/content/pm/PermissionInfo; Landroid/content/pm/PackageParser;->generateProviderInfo(Landroid/content/pm/PackageParser$Provider;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ProviderInfo; Landroid/content/pm/PackageParser;->generateServiceInfo(Landroid/content/pm/PackageParser$Service;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ServiceInfo; +Landroid/content/pm/PackageParser;->mCallback:Landroid/content/pm/PackageParser$Callback; +Landroid/content/pm/PackageParser;->NEW_PERMISSIONS:[Landroid/content/pm/PackageParser$NewPermissionInfo; Landroid/content/pm/PackageParser;->parseBaseApk(Ljava/lang/String;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Landroid/content/pm/PackageParser$Package; Landroid/content/pm/PackageParser;->parseMonolithicPackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package; Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package; Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;IZ)Landroid/content/pm/PackageParser$Package; +Landroid/content/pm/PackageParser;->parsePackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite; +Landroid/content/pm/PackageParser;->setCompatibilityModeEnabled(Z)V +Landroid/content/pm/PackageParser;->setSeparateProcesses([Ljava/lang/String;)V Landroid/content/pm/PackageUserState;-><init>()V Landroid/content/pm/ParceledListSlice;-><init>(Ljava/util/List;)V +Landroid/content/pm/PermissionInfo;->protectionToString(I)Ljava/lang/String; +Landroid/content/pm/RegisteredServicesCache$ServiceInfo;->componentName:Landroid/content/ComponentName; +Landroid/content/pm/RegisteredServicesCache$ServiceInfo;->type:Ljava/lang/Object; +Landroid/content/pm/RegisteredServicesCache$ServiceInfo;->uid:I +Landroid/content/pm/RegisteredServicesCache;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/XmlSerializerAndParser;)V +Landroid/content/pm/ResolveInfo;->getComponentInfo()Landroid/content/pm/ComponentInfo; +Landroid/content/pm/ResolveInfo;->handleAllWebDataURI:Z +Landroid/content/pm/ResolveInfo;->system:Z +Landroid/content/pm/ResolveInfo;->targetUserId:I +Landroid/content/pm/ShortcutInfo;->getIcon()Landroid/graphics/drawable/Icon; Landroid/content/pm/ShortcutManager;->mService:Landroid/content/pm/IShortcutService; Landroid/content/pm/Signature;->getPublicKey()Ljava/security/PublicKey; Landroid/content/pm/UserInfo;-><init>(ILjava/lang/String;I)V +Landroid/content/pm/UserInfo;-><init>(ILjava/lang/String;Ljava/lang/String;I)V +Landroid/content/pm/UserInfo;->creationTime:J +Landroid/content/pm/UserInfo;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/content/pm/UserInfo;->flags:I Landroid/content/pm/UserInfo;->FLAG_PRIMARY:I Landroid/content/pm/UserInfo;->getUserHandle()Landroid/os/UserHandle; +Landroid/content/pm/UserInfo;->guestToRemove:Z +Landroid/content/pm/UserInfo;->iconPath:Ljava/lang/String; Landroid/content/pm/UserInfo;->id:I +Landroid/content/pm/UserInfo;->isAdmin()Z +Landroid/content/pm/UserInfo;->isEnabled()Z +Landroid/content/pm/UserInfo;->isGuest()Z +Landroid/content/pm/UserInfo;->isManagedProfile()Z Landroid/content/pm/UserInfo;->isPrimary()Z +Landroid/content/pm/UserInfo;->isRestricted()Z +Landroid/content/pm/UserInfo;->lastLoggedInTime:J +Landroid/content/pm/UserInfo;->name:Ljava/lang/String; +Landroid/content/pm/UserInfo;->partial:Z +Landroid/content/pm/UserInfo;->profileGroupId:I Landroid/content/pm/UserInfo;->serialNumber:I +Landroid/content/pm/VerifierInfo;-><init>(Ljava/lang/String;Ljava/security/PublicKey;)V +Landroid/content/pm/XmlSerializerAndParser;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Ljava/lang/Object; +Landroid/content/pm/XmlSerializerAndParser;->writeAsXml(Ljava/lang/Object;Lorg/xmlpull/v1/XmlSerializer;)V Landroid/content/res/AssetFileDescriptor;->mFd:Landroid/os/ParcelFileDescriptor; Landroid/content/res/AssetFileDescriptor;->mLength:J Landroid/content/res/AssetFileDescriptor;->mStartOffset:J +Landroid/content/res/AssetManager$AssetInputStream;->getAssetInt()I +Landroid/content/res/AssetManager$AssetInputStream;->getNativeAsset()J Landroid/content/res/AssetManager;-><init>()V Landroid/content/res/AssetManager;->addAssetPath(Ljava/lang/String;)I Landroid/content/res/AssetManager;->addAssetPathAsSharedLibrary(Ljava/lang/String;)I +Landroid/content/res/AssetManager;->addOverlayPath(Ljava/lang/String;)I Landroid/content/res/AssetManager;->applyStyle(JIILandroid/content/res/XmlBlock$Parser;[IJJ)V Landroid/content/res/AssetManager;->createTheme()J Landroid/content/res/AssetManager;->getAssignedPackageIdentifiers()Landroid/util/SparseArray; +Landroid/content/res/AssetManager;->getGlobalAssetCount()I +Landroid/content/res/AssetManager;->getGlobalAssetManagerCount()I Landroid/content/res/AssetManager;->getResourceBagText(II)Ljava/lang/CharSequence; Landroid/content/res/AssetManager;->getResourceEntryName(I)Ljava/lang/String; Landroid/content/res/AssetManager;->getResourceIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I Landroid/content/res/AssetManager;->getResourceName(I)Ljava/lang/String; Landroid/content/res/AssetManager;->getResourcePackageName(I)Ljava/lang/String; +Landroid/content/res/AssetManager;->getResourceText(I)Ljava/lang/CharSequence; Landroid/content/res/AssetManager;->getResourceTypeName(I)Ljava/lang/String; +Landroid/content/res/AssetManager;->getResourceValue(IILandroid/util/TypedValue;Z)Z +Landroid/content/res/AssetManager;->getSystem()Landroid/content/res/AssetManager; Landroid/content/res/AssetManager;->isUpToDate()Z Landroid/content/res/AssetManager;->mObject:J Landroid/content/res/AssetManager;->openNonAsset(ILjava/lang/String;)Ljava/io/InputStream; @@ -879,21 +1709,53 @@ Landroid/content/res/AssetManager;->openNonAsset(Ljava/lang/String;I)Ljava/io/In Landroid/content/res/AssetManager;->resolveAttrs(JII[I[I[I[I)Z Landroid/content/res/AssetManager;->retrieveAttributes(Landroid/content/res/XmlBlock$Parser;[I[I[I)Z Landroid/content/res/AssetManager;->setConfiguration(IILjava/lang/String;IIIIIIIIIIIIIII)V +Landroid/content/res/AssetManager;->sSystem:Landroid/content/res/AssetManager; Landroid/content/res/ColorStateList$ColorStateListFactory;-><init>(Landroid/content/res/ColorStateList;)V +Landroid/content/res/ColorStateList;->canApplyTheme()Z Landroid/content/res/ColorStateList;->getColors()[I +Landroid/content/res/ColorStateList;->getStates()[[I Landroid/content/res/ColorStateList;->mColors:[I Landroid/content/res/ColorStateList;->mDefaultColor:I Landroid/content/res/ColorStateList;->mFactory:Landroid/content/res/ColorStateList$ColorStateListFactory; Landroid/content/res/ColorStateList;->mStateSpecs:[[I +Landroid/content/res/ColorStateList;->obtainForTheme(Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList; Landroid/content/res/ColorStateList;->onColorsChanged()V +Landroid/content/res/CompatibilityInfo$Translator;->applicationInvertedScale:F +Landroid/content/res/CompatibilityInfo$Translator;->applicationScale:F +Landroid/content/res/CompatibilityInfo$Translator;->getTranslatedContentInsets(Landroid/graphics/Rect;)Landroid/graphics/Rect; +Landroid/content/res/CompatibilityInfo$Translator;->translateCanvas(Landroid/graphics/Canvas;)V +Landroid/content/res/CompatibilityInfo$Translator;->translateEventInScreenToAppWindow(Landroid/view/MotionEvent;)V +Landroid/content/res/CompatibilityInfo$Translator;->translateRectInAppWindowToScreen(Landroid/graphics/Rect;)V +Landroid/content/res/CompatibilityInfo$Translator;->translateRectInScreenToAppWindow(Landroid/graphics/Rect;)V +Landroid/content/res/CompatibilityInfo$Translator;->translateRectInScreenToAppWinFrame(Landroid/graphics/Rect;)V +Landroid/content/res/CompatibilityInfo$Translator;->translateRegionInWindowToScreen(Landroid/graphics/Region;)V +Landroid/content/res/CompatibilityInfo$Translator;->translateWindowLayout(Landroid/view/WindowManager$LayoutParams;)V Landroid/content/res/CompatibilityInfo;-><init>(Landroid/content/pm/ApplicationInfo;IIZ)V Landroid/content/res/CompatibilityInfo;->applicationScale:F +Landroid/content/res/CompatibilityInfo;->computeCompatibleScaling(Landroid/util/DisplayMetrics;Landroid/util/DisplayMetrics;)F +Landroid/content/res/CompatibilityInfo;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/content/res/CompatibilityInfo;->DEFAULT_COMPATIBILITY_INFO:Landroid/content/res/CompatibilityInfo; +Landroid/content/res/CompatibilityInfo;->getTranslator()Landroid/content/res/CompatibilityInfo$Translator; +Landroid/content/res/CompatibilityInfo;->isScalingRequired()Z +Landroid/content/res/CompatibilityInfo;->supportsScreen()Z +Landroid/content/res/Configuration;->generateDelta(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Landroid/content/res/Configuration; +Landroid/content/res/Configuration;->makeDefault()V +Landroid/content/res/Configuration;->resourceQualifierString(Landroid/content/res/Configuration;)Ljava/lang/String; +Landroid/content/res/Configuration;->seq:I +Landroid/content/res/Configuration;->userSetLocale:Z Landroid/content/res/DrawableCache;-><init>()V Landroid/content/res/DrawableCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; Landroid/content/res/ObbInfo;->salt:[B Landroid/content/res/Resources$Theme;->mThemeImpl:Landroid/content/res/ResourcesImpl$ThemeImpl; +Landroid/content/res/Resources$Theme;->resolveAttributes([I[I)Landroid/content/res/TypedArray; +Landroid/content/res/Resources;-><init>(Ljava/lang/ClassLoader;)V Landroid/content/res/Resources;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo; +Landroid/content/res/Resources;->getDisplayAdjustments()Landroid/view/DisplayAdjustments; +Landroid/content/res/Resources;->getDrawableInflater()Landroid/graphics/drawable/DrawableInflater; +Landroid/content/res/Resources;->getFloat(I)F +Landroid/content/res/Resources;->getImpl()Landroid/content/res/ResourcesImpl; +Landroid/content/res/Resources;->getPreloadedDrawables()Landroid/util/LongSparseArray; +Landroid/content/res/Resources;->loadDrawable(Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; Landroid/content/res/Resources;->loadXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser; Landroid/content/res/Resources;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser; Landroid/content/res/Resources;->mClassLoader:Ljava/lang/ClassLoader; @@ -904,7 +1766,9 @@ Landroid/content/res/Resources;->mTmpValue:Landroid/util/TypedValue; Landroid/content/res/Resources;->mTypedArrayPool:Landroid/util/Pools$SynchronizedPool; Landroid/content/res/Resources;->selectDefaultTheme(II)I Landroid/content/res/Resources;->setCompatibilityInfo(Landroid/content/res/CompatibilityInfo;)V +Landroid/content/res/Resources;->setImpl(Landroid/content/res/ResourcesImpl;)V Landroid/content/res/Resources;->updateSystemConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V +Landroid/content/res/ResourcesImpl;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;Landroid/view/DisplayAdjustments;)V Landroid/content/res/ResourcesImpl;->getAssets()Landroid/content/res/AssetManager; Landroid/content/res/ResourcesImpl;->getValue(ILandroid/util/TypedValue;Z)V Landroid/content/res/ResourcesImpl;->mAccessLock:Ljava/lang/Object; @@ -920,10 +1784,14 @@ Landroid/content/res/ResourcesImpl;->sPreloadedComplexColors:Landroid/util/LongS Landroid/content/res/ResourcesImpl;->sPreloadedDrawables:[Landroid/util/LongSparseArray; Landroid/content/res/ResourcesImpl;->TRACE_FOR_MISS_PRELOAD:Z Landroid/content/res/ResourcesImpl;->TRACE_FOR_PRELOAD:Z +Landroid/content/res/ResourcesKey;-><init>(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)V +Landroid/content/res/ResourcesKey;->mResDir:Ljava/lang/String; Landroid/content/res/ResourcesKey;->mSplitResDirs:[Ljava/lang/String; Landroid/content/res/StringBlock;-><init>(JZ)V +Landroid/content/res/StringBlock;->get(I)Ljava/lang/CharSequence; Landroid/content/res/ThemedResourceCache;->onConfigurationChange(I)V Landroid/content/res/TypedArray;->extractThemeAttrs()[I +Landroid/content/res/TypedArray;->extractThemeAttrs([I)[I Landroid/content/res/TypedArray;->getNonConfigurationString(II)Ljava/lang/String; Landroid/content/res/TypedArray;->getValueAt(ILandroid/util/TypedValue;)Z Landroid/content/res/TypedArray;->mAssets:Landroid/content/res/AssetManager; @@ -942,20 +1810,26 @@ Landroid/content/res/XmlBlock;-><init>([B)V Landroid/content/res/XmlBlock;->newParser()Landroid/content/res/XmlResourceParser; Landroid/content/RestrictionsManager;->mService:Landroid/content/IRestrictionsManager; Landroid/content/SearchRecentSuggestionsProvider;->mSuggestionProjection:[Ljava/lang/String; +Landroid/content/SyncAdaptersCache;-><init>(Landroid/content/Context;)V Landroid/content/SyncAdapterType;->allowParallelSyncs:Z Landroid/content/SyncAdapterType;->isAlwaysSyncable:Z Landroid/content/SyncAdapterType;->settingsActivity:Ljava/lang/String; +Landroid/content/SyncContext;-><init>(Landroid/content/ISyncContext;)V Landroid/content/SyncContext;->setStatusText(Ljava/lang/String;)V Landroid/content/SyncInfo;-><init>(ILandroid/accounts/Account;Ljava/lang/String;J)V +Landroid/content/SyncInfo;->authorityId:I Landroid/content/SyncRequest;->mAccountToSync:Landroid/accounts/Account; Landroid/content/SyncRequest;->mAuthority:Ljava/lang/String; Landroid/content/SyncRequest;->mExtras:Landroid/os/Bundle; Landroid/content/SyncRequest;->mIsPeriodic:Z Landroid/content/SyncRequest;->mSyncRunTimeSecs:J +Landroid/content/SyncStatusInfo;-><init>(I)V Landroid/content/SyncStatusInfo;-><init>(Landroid/os/Parcel;)V Landroid/content/SyncStatusInfo;->authorityId:I Landroid/content/SyncStatusInfo;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/content/SyncStatusInfo;->ensurePeriodicSyncTimeSize(I)V +Landroid/content/SyncStatusInfo;->getLastFailureMesgAsInt(I)I +Landroid/content/SyncStatusInfo;->getPeriodicSyncTime(I)J Landroid/content/SyncStatusInfo;->initialFailureTime:J Landroid/content/SyncStatusInfo;->initialize:Z Landroid/content/SyncStatusInfo;->lastFailureMesg:Ljava/lang/String; @@ -965,34 +1839,149 @@ Landroid/content/SyncStatusInfo;->lastSuccessSource:I Landroid/content/SyncStatusInfo;->lastSuccessTime:J Landroid/content/SyncStatusInfo;->pending:Z Landroid/content/SyncStatusInfo;->periodicSyncTimes:Ljava/util/ArrayList; +Landroid/content/SyncStatusInfo;->removePeriodicSyncTime(I)V +Landroid/content/SyncStatusInfo;->setPeriodicSyncTime(IJ)V +Landroid/content/UndoManager;-><init>()V +Landroid/content/UndoManager;->addOperation(Landroid/content/UndoOperation;I)V +Landroid/content/UndoManager;->beginUpdate(Ljava/lang/CharSequence;)V +Landroid/content/UndoManager;->commitState(Landroid/content/UndoOwner;)I +Landroid/content/UndoManager;->countRedos([Landroid/content/UndoOwner;)I +Landroid/content/UndoManager;->countUndos([Landroid/content/UndoOwner;)I +Landroid/content/UndoManager;->endUpdate()V +Landroid/content/UndoManager;->forgetRedos([Landroid/content/UndoOwner;I)I +Landroid/content/UndoManager;->forgetUndos([Landroid/content/UndoOwner;I)I +Landroid/content/UndoManager;->getLastOperation(Ljava/lang/Class;Landroid/content/UndoOwner;I)Landroid/content/UndoOperation; +Landroid/content/UndoManager;->getOwner(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/UndoOwner; +Landroid/content/UndoManager;->isInUndo()Z +Landroid/content/UndoManager;->redo([Landroid/content/UndoOwner;I)I +Landroid/content/UndoManager;->restoreInstanceState(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V +Landroid/content/UndoManager;->saveInstanceState(Landroid/os/Parcel;)V +Landroid/content/UndoManager;->setUndoLabel(Ljava/lang/CharSequence;)V +Landroid/content/UndoManager;->undo([Landroid/content/UndoOwner;I)I +Landroid/content/UndoOperation;-><init>(Landroid/content/UndoOwner;)V +Landroid/content/UndoOperation;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V Landroid/content/UriMatcher;->mChildren:Ljava/util/ArrayList; Landroid/content/UriMatcher;->mText:Ljava/lang/String; Landroid/database/AbstractCursor;->mExtras:Landroid/os/Bundle; Landroid/database/AbstractCursor;->mNotifyUri:Landroid/net/Uri; Landroid/database/AbstractWindowedCursor;->clearOrCreateWindow(Ljava/lang/String;)V Landroid/database/AbstractWindowedCursor;->closeWindow()V +Landroid/database/AbstractWindowedCursor;->onDeactivateOrClose()V +Landroid/database/ContentObserver;->releaseContentObserver()Landroid/database/IContentObserver; Landroid/database/CursorWindow;->mWindowPtr:J +Landroid/database/CursorWindow;->printStats()Ljava/lang/String; Landroid/database/CursorWindow;->sCursorWindowSize:I Landroid/database/CursorWindow;->sWindowToPidMap:Landroid/util/LongSparseArray; Landroid/database/CursorWrapper;->mCursor:Landroid/database/Cursor; +Landroid/database/DatabaseUtils;->cursorPickFillWindowStartPosition(II)I +Landroid/database/DatabaseUtils;->getTypeOfObject(Ljava/lang/Object;)I +Landroid/database/IContentObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/database/IContentObserver; +Landroid/database/IContentObserver;->onChange(ZLandroid/net/Uri;I)V +Landroid/database/MatrixCursor;->data:[Ljava/lang/Object; Landroid/database/MatrixCursor;->get(I)Ljava/lang/Object; +Landroid/database/MatrixCursor;->rowCount:I +Landroid/database/sqlite/DatabaseObjectNotClosedException;-><init>()V +Landroid/database/sqlite/SQLiteClosable;->mReferenceCount:I +Landroid/database/sqlite/SQLiteCursor;->fillWindow(I)V +Landroid/database/sqlite/SQLiteCursor;->mEditTable:Ljava/lang/String; +Landroid/database/sqlite/SQLiteCursor;->mQuery:Landroid/database/sqlite/SQLiteQuery; Landroid/database/sqlite/SQLiteCustomFunction;->dispatchCallback([Ljava/lang/String;)V Landroid/database/sqlite/SQLiteCustomFunction;->name:Ljava/lang/String; Landroid/database/sqlite/SQLiteCustomFunction;->numArgs:I +Landroid/database/sqlite/SQLiteDatabase;->beginTransaction(Landroid/database/sqlite/SQLiteTransactionListener;Z)V +Landroid/database/sqlite/SQLiteDatabase;->collectDbStats(Ljava/util/ArrayList;)V Landroid/database/sqlite/SQLiteDatabase;->CONFLICT_VALUES:[Ljava/lang/String; +Landroid/database/sqlite/SQLiteDatabase;->getActiveDatabases()Ljava/util/ArrayList; Landroid/database/sqlite/SQLiteDatabase;->getThreadSession()Landroid/database/sqlite/SQLiteSession; Landroid/database/sqlite/SQLiteDatabase;->mConfigurationLocked:Landroid/database/sqlite/SQLiteDatabaseConfiguration; Landroid/database/sqlite/SQLiteDatabase;->mConnectionPoolLocked:Landroid/database/sqlite/SQLiteConnectionPool; +Landroid/database/sqlite/SQLiteDatabase;->mThreadSession:Ljava/lang/ThreadLocal; +Landroid/database/sqlite/SQLiteDatabase;->openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase; Landroid/database/sqlite/SQLiteDatabase;->reopenReadWrite()V Landroid/database/sqlite/SQLiteDatabaseConfiguration;->maxSqlCacheSize:I Landroid/database/sqlite/SQLiteDebug$PagerStats;->largestMemAlloc:I Landroid/database/sqlite/SQLiteDebug$PagerStats;->memoryUsed:I Landroid/database/sqlite/SQLiteDebug$PagerStats;->pageCacheOverflow:I Landroid/database/sqlite/SQLiteOpenHelper;->mName:Ljava/lang/String; +Landroid/database/sqlite/SQLiteProgram;->mBindArgs:[Ljava/lang/Object; +Landroid/database/sqlite/SQLiteProgram;->mSql:Ljava/lang/String; +Landroid/database/sqlite/SQLiteQueryBuilder;->computeProjection([Ljava/lang/String;)[Ljava/lang/String; +Landroid/database/sqlite/SQLiteQueryBuilder;->mDistinct:Z +Landroid/database/sqlite/SQLiteQueryBuilder;->mTables:Ljava/lang/String; +Landroid/database/sqlite/SQLiteQueryBuilder;->mWhereClause:Ljava/lang/StringBuilder; Landroid/database/sqlite/SQLiteSession;->beginTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V Landroid/database/sqlite/SQLiteStatement;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V +Landroid/database/sqlite/SqliteWrapper;->checkSQLiteException(Landroid/content/Context;Landroid/database/sqlite/SQLiteException;)V +Landroid/database/sqlite/SqliteWrapper;->delete(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I +Landroid/database/sqlite/SqliteWrapper;->update(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I Landroid/ddm/DdmHandleAppName;->getAppName()Ljava/lang/String; Landroid/ddm/DdmHandleAppName;->setAppName(Ljava/lang/String;I)V +Landroid/filterfw/core/Filter;-><init>(Ljava/lang/String;)V +Landroid/filterfw/core/Filter;->isAvailable(Ljava/lang/String;)Z +Landroid/filterfw/core/Filter;->setInputValue(Ljava/lang/String;Ljava/lang/Object;)V +Landroid/filterfw/core/FilterContext;->getFrameManager()Landroid/filterfw/core/FrameManager; +Landroid/filterfw/core/FilterContext;->getGLEnvironment()Landroid/filterfw/core/GLEnvironment; +Landroid/filterfw/core/FilterGraph;->getFilter(Ljava/lang/String;)Landroid/filterfw/core/Filter; +Landroid/filterfw/core/FilterGraph;->tearDown(Landroid/filterfw/core/FilterContext;)V +Landroid/filterfw/core/Frame;->getBitmap()Landroid/graphics/Bitmap; +Landroid/filterfw/core/Frame;->getFormat()Landroid/filterfw/core/FrameFormat; +Landroid/filterfw/core/Frame;->getTimestamp()J +Landroid/filterfw/core/Frame;->release()Landroid/filterfw/core/Frame; +Landroid/filterfw/core/Frame;->setInts([I)V +Landroid/filterfw/core/Frame;->setTimestamp(J)V +Landroid/filterfw/core/FrameFormat;->getHeight()I +Landroid/filterfw/core/FrameFormat;->getTarget()I +Landroid/filterfw/core/FrameFormat;->getWidth()I +Landroid/filterfw/core/FrameFormat;->mutableCopy()Landroid/filterfw/core/MutableFrameFormat; +Landroid/filterfw/core/FrameManager;->duplicateFrame(Landroid/filterfw/core/Frame;)Landroid/filterfw/core/Frame; +Landroid/filterfw/core/FrameManager;->newBoundFrame(Landroid/filterfw/core/FrameFormat;IJ)Landroid/filterfw/core/Frame; +Landroid/filterfw/core/FrameManager;->newFrame(Landroid/filterfw/core/FrameFormat;)Landroid/filterfw/core/Frame; +Landroid/filterfw/core/GLEnvironment;->activate()V +Landroid/filterfw/core/GLEnvironment;->activateSurfaceWithId(I)V +Landroid/filterfw/core/GLEnvironment;->deactivate()V +Landroid/filterfw/core/GLEnvironment;->isActive()Z +Landroid/filterfw/core/GLEnvironment;->registerSurfaceFromMediaRecorder(Landroid/media/MediaRecorder;)I +Landroid/filterfw/core/GLEnvironment;->setSurfaceTimestamp(J)V +Landroid/filterfw/core/GLEnvironment;->swapBuffers()V +Landroid/filterfw/core/GLEnvironment;->unregisterSurfaceId(I)V +Landroid/filterfw/core/GLFrame;->generateMipMap()V +Landroid/filterfw/core/GLFrame;->getTextureId()I +Landroid/filterfw/core/GLFrame;->setBitmap(Landroid/graphics/Bitmap;)V +Landroid/filterfw/core/GLFrame;->setTextureParameter(II)V +Landroid/filterfw/core/GraphRunner;->getError()Ljava/lang/Exception; +Landroid/filterfw/core/GraphRunner;->getGraph()Landroid/filterfw/core/FilterGraph; +Landroid/filterfw/core/GraphRunner;->run()V +Landroid/filterfw/core/GraphRunner;->setDoneCallback(Landroid/filterfw/core/GraphRunner$OnRunnerDoneListener;)V +Landroid/filterfw/core/GraphRunner;->stop()V +Landroid/filterfw/core/MutableFrameFormat;-><init>(II)V +Landroid/filterfw/core/MutableFrameFormat;->setBytesPerSample(I)V +Landroid/filterfw/core/MutableFrameFormat;->setDimensions(II)V +Landroid/filterfw/core/Program;->process(Landroid/filterfw/core/Frame;Landroid/filterfw/core/Frame;)V +Landroid/filterfw/core/Program;->process([Landroid/filterfw/core/Frame;Landroid/filterfw/core/Frame;)V +Landroid/filterfw/core/Program;->setHostValue(Ljava/lang/String;Ljava/lang/Object;)V +Landroid/filterfw/core/ShaderProgram;-><init>(Landroid/filterfw/core/FilterContext;Ljava/lang/String;)V +Landroid/filterfw/core/ShaderProgram;->createIdentity(Landroid/filterfw/core/FilterContext;)Landroid/filterfw/core/ShaderProgram; +Landroid/filterfw/core/ShaderProgram;->process([Landroid/filterfw/core/Frame;Landroid/filterfw/core/Frame;)V +Landroid/filterfw/core/ShaderProgram;->setHostValue(Ljava/lang/String;Ljava/lang/Object;)V +Landroid/filterfw/core/ShaderProgram;->setMaximumTileSize(I)V +Landroid/filterfw/core/ShaderProgram;->setSourceRect(FFFF)V +Landroid/filterfw/core/ShaderProgram;->setSourceRegion(Landroid/filterfw/geometry/Quad;)V +Landroid/filterfw/format/ImageFormat;->create(I)Landroid/filterfw/core/MutableFrameFormat; +Landroid/filterfw/format/ImageFormat;->create(II)Landroid/filterfw/core/MutableFrameFormat; +Landroid/filterfw/format/ImageFormat;->create(IIII)Landroid/filterfw/core/MutableFrameFormat; +Landroid/filterfw/geometry/Point;-><init>()V +Landroid/filterfw/geometry/Point;-><init>(FF)V +Landroid/filterfw/geometry/Point;->x:F +Landroid/filterfw/geometry/Point;->y:F +Landroid/filterfw/geometry/Quad;-><init>()V +Landroid/filterfw/geometry/Quad;-><init>(Landroid/filterfw/geometry/Point;Landroid/filterfw/geometry/Point;Landroid/filterfw/geometry/Point;Landroid/filterfw/geometry/Point;)V +Landroid/filterfw/geometry/Quad;->p0:Landroid/filterfw/geometry/Point; +Landroid/filterfw/geometry/Quad;->p1:Landroid/filterfw/geometry/Point; +Landroid/filterfw/geometry/Quad;->p2:Landroid/filterfw/geometry/Point; +Landroid/filterfw/geometry/Quad;->p3:Landroid/filterfw/geometry/Point; +Landroid/filterfw/GraphEnvironment;-><init>()V +Landroid/filterfw/GraphEnvironment;->getRunner(II)Landroid/filterfw/core/GraphRunner; +Landroid/filterfw/GraphEnvironment;->loadGraph(Landroid/content/Context;I)I Landroid/graphics/BaseCanvas;->mNativeCanvasWrapper:J Landroid/graphics/Bitmap$Config;->nativeInt:I Landroid/graphics/Bitmap$Config;->nativeToConfig(I)Landroid/graphics/Bitmap$Config; @@ -1000,41 +1989,71 @@ Landroid/graphics/Bitmap;-><init>(JIIIZZ[BLandroid/graphics/NinePatch$InsetStruc Landroid/graphics/Bitmap;->createAshmemBitmap()Landroid/graphics/Bitmap; Landroid/graphics/Bitmap;->createAshmemBitmap(Landroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap; Landroid/graphics/Bitmap;->getDefaultDensity()I +Landroid/graphics/Bitmap;->mHeight:I +Landroid/graphics/Bitmap;->mIsMutable:Z Landroid/graphics/Bitmap;->mNativePtr:J Landroid/graphics/Bitmap;->mNinePatchChunk:[B Landroid/graphics/Bitmap;->mNinePatchInsets:Landroid/graphics/NinePatch$InsetStruct; +Landroid/graphics/Bitmap;->mWidth:I +Landroid/graphics/Bitmap;->nativeReconfigure(JIIIZ)V Landroid/graphics/Bitmap;->reinit(IIZ)V +Landroid/graphics/Bitmap;->scaleFromDensity(III)I Landroid/graphics/Bitmap;->setDefaultDensity(I)V +Landroid/graphics/Bitmap;->setNinePatchChunk([B)V Landroid/graphics/BitmapFactory;->nativeDecodeAsset(JLandroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap; Landroid/graphics/BitmapFactory;->nativeDecodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap; Landroid/graphics/BitmapFactory;->nativeDecodeFileDescriptor(Ljava/io/FileDescriptor;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap; Landroid/graphics/BitmapFactory;->nativeDecodeStream(Ljava/io/InputStream;[BLandroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap; Landroid/graphics/BitmapRegionDecoder;-><init>(J)V +Landroid/graphics/BitmapRegionDecoder;->nativeNewInstance([BIIZ)Landroid/graphics/BitmapRegionDecoder; +Landroid/graphics/BitmapShader;->mBitmap:Landroid/graphics/Bitmap; +Landroid/graphics/BitmapShader;->mTileX:I +Landroid/graphics/BitmapShader;->mTileY:I Landroid/graphics/Camera;->native_instance:J Landroid/graphics/Canvas;-><init>(J)V +Landroid/graphics/Canvas;->freeCaches()V +Landroid/graphics/Canvas;->freeTextLayoutCaches()V +Landroid/graphics/Canvas;->getGL()Ljavax/microedition/khronos/opengles/GL; +Landroid/graphics/Canvas;->getNativeCanvasWrapper()J +Landroid/graphics/Canvas;->mBitmap:Landroid/graphics/Bitmap; Landroid/graphics/Canvas;->release()V +Landroid/graphics/Canvas;->setScreenDensity(I)V +Landroid/graphics/ColorMatrixColorFilter;->mMatrix:Landroid/graphics/ColorMatrix; Landroid/graphics/ColorMatrixColorFilter;->setColorMatrix(Landroid/graphics/ColorMatrix;)V Landroid/graphics/drawable/AnimatedImageDrawable;->onAnimationEnd()V +Landroid/graphics/drawable/AnimatedRotateDrawable;->setFramesCount(I)V +Landroid/graphics/drawable/AnimatedRotateDrawable;->setFramesDuration(I)V Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->mStateIds:Landroid/util/SparseIntArray; Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->mTransitions:Landroid/util/LongSparseLongArray; Landroid/graphics/drawable/AnimatedStateListDrawable;->mState:Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState; Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->callOnFinished(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V +Landroid/graphics/drawable/AnimatedVectorDrawable;->forceAnimationOnUI()V +Landroid/graphics/drawable/AnimatedVectorDrawable;->getOpticalInsets()Landroid/graphics/Insets; Landroid/graphics/drawable/AnimationDrawable;->mCurFrame:I Landroid/graphics/drawable/BitmapDrawable;->getOpticalInsets()Landroid/graphics/Insets; Landroid/graphics/drawable/BitmapDrawable;->getTint()Landroid/content/res/ColorStateList; Landroid/graphics/drawable/BitmapDrawable;->getTintMode()Landroid/graphics/PorterDuff$Mode; +Landroid/graphics/drawable/BitmapDrawable;->mBitmapState:Landroid/graphics/drawable/BitmapDrawable$BitmapState; Landroid/graphics/drawable/BitmapDrawable;->mTargetDensity:I Landroid/graphics/drawable/BitmapDrawable;->setBitmap(Landroid/graphics/Bitmap;)V +Landroid/graphics/drawable/ClipDrawable;->mState:Landroid/graphics/drawable/ClipDrawable$ClipState; Landroid/graphics/drawable/ColorDrawable$ColorState;->mUseColor:I +Landroid/graphics/drawable/ColorDrawable;->mPaint:Landroid/graphics/Paint; Landroid/graphics/drawable/Drawable;->getOpticalInsets()Landroid/graphics/Insets; Landroid/graphics/drawable/Drawable;->inflateWithAttributes(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/TypedArray;I)V Landroid/graphics/drawable/Drawable;->mCallback:Ljava/lang/ref/WeakReference; +Landroid/graphics/drawable/Drawable;->mSrcDensityOverride:I Landroid/graphics/drawable/Drawable;->parseTintMode(ILandroid/graphics/PorterDuff$Mode;)Landroid/graphics/PorterDuff$Mode; +Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;-><init>(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/DrawableContainer;Landroid/content/res/Resources;)V Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;->mConstantPadding:Landroid/graphics/Rect; Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;->mDrawables:[Landroid/graphics/drawable/Drawable; +Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;->mHasColorFilter:Z Landroid/graphics/drawable/DrawableContainer;->getOpticalInsets()Landroid/graphics/Insets; Landroid/graphics/drawable/DrawableContainer;->mDrawableContainerState:Landroid/graphics/drawable/DrawableContainer$DrawableContainerState; +Landroid/graphics/drawable/DrawableContainer;->mLastDrawable:Landroid/graphics/drawable/Drawable; Landroid/graphics/drawable/DrawableInflater;->mClassLoader:Ljava/lang/ClassLoader; +Landroid/graphics/drawable/DrawableWrapper;->getOpticalInsets()Landroid/graphics/Insets; +Landroid/graphics/drawable/DrawableWrapper;->mState:Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState; Landroid/graphics/drawable/GradientDrawable$GradientState;->mAngle:I Landroid/graphics/drawable/GradientDrawable$GradientState;->mGradient:I Landroid/graphics/drawable/GradientDrawable$GradientState;->mGradientColors:[I @@ -1055,8 +2074,10 @@ Landroid/graphics/drawable/GradientDrawable$GradientState;->mThickness:I Landroid/graphics/drawable/GradientDrawable$GradientState;->mThicknessRatio:F Landroid/graphics/drawable/GradientDrawable$GradientState;->mWidth:I Landroid/graphics/drawable/GradientDrawable;->getOpticalInsets()Landroid/graphics/Insets; +Landroid/graphics/drawable/GradientDrawable;->mFillPaint:Landroid/graphics/Paint; Landroid/graphics/drawable/GradientDrawable;->mGradientState:Landroid/graphics/drawable/GradientDrawable$GradientState; Landroid/graphics/drawable/GradientDrawable;->mPadding:Landroid/graphics/Rect; +Landroid/graphics/drawable/GradientDrawable;->mStrokePaint:Landroid/graphics/Paint; Landroid/graphics/drawable/Icon;->createWithResource(Landroid/content/res/Resources;I)Landroid/graphics/drawable/Icon; Landroid/graphics/drawable/Icon;->getBitmap()Landroid/graphics/Bitmap; Landroid/graphics/drawable/Icon;->getDataBytes()[B @@ -1066,14 +2087,23 @@ Landroid/graphics/drawable/Icon;->getResources()Landroid/content/res/Resources; Landroid/graphics/drawable/Icon;->hasTint()Z Landroid/graphics/drawable/Icon;->mString1:Ljava/lang/String; Landroid/graphics/drawable/Icon;->mType:I +Landroid/graphics/drawable/InsetDrawable;->getOpticalInsets()Landroid/graphics/Insets; Landroid/graphics/drawable/InsetDrawable;->mState:Landroid/graphics/drawable/InsetDrawable$InsetState; Landroid/graphics/drawable/LayerDrawable$ChildDrawable;->mDrawable:Landroid/graphics/drawable/Drawable; Landroid/graphics/drawable/LayerDrawable$LayerState;->mChildren:[Landroid/graphics/drawable/LayerDrawable$ChildDrawable; +Landroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;)I +Landroid/graphics/drawable/LayerDrawable;->ensurePadding()V Landroid/graphics/drawable/LayerDrawable;->mLayerState:Landroid/graphics/drawable/LayerDrawable$LayerState; Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;->mNinePatch:Landroid/graphics/NinePatch; +Landroid/graphics/drawable/NinePatchDrawable;->getOpticalInsets()Landroid/graphics/Insets; Landroid/graphics/drawable/NinePatchDrawable;->mNinePatchState:Landroid/graphics/drawable/NinePatchDrawable$NinePatchState; Landroid/graphics/drawable/RippleDrawable$RippleState;->mColor:Landroid/content/res/ColorStateList; +Landroid/graphics/drawable/RippleDrawable;->getRipplePaint()Landroid/graphics/Paint; +Landroid/graphics/drawable/RippleDrawable;->mDensity:I Landroid/graphics/drawable/RippleDrawable;->mState:Landroid/graphics/drawable/RippleDrawable$RippleState; +Landroid/graphics/drawable/RippleDrawable;->setForceSoftware(Z)V +Landroid/graphics/drawable/ScaleDrawable;->mState:Landroid/graphics/drawable/ScaleDrawable$ScaleState; +Landroid/graphics/drawable/StateListDrawable$StateListState;->addStateSet([ILandroid/graphics/drawable/Drawable;)I Landroid/graphics/drawable/StateListDrawable;->extractStateSet(Landroid/util/AttributeSet;)[I Landroid/graphics/drawable/StateListDrawable;->getStateCount()I Landroid/graphics/drawable/StateListDrawable;->getStateDrawable(I)Landroid/graphics/drawable/Drawable; @@ -1081,7 +2111,11 @@ Landroid/graphics/drawable/StateListDrawable;->getStateDrawableIndex([I)I Landroid/graphics/drawable/StateListDrawable;->getStateSet(I)[I Landroid/graphics/drawable/StateListDrawable;->mStateListState:Landroid/graphics/drawable/StateListDrawable$StateListState; Landroid/graphics/drawable/StateListDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V +Landroid/graphics/drawable/TransitionDrawable;->mAlpha:I +Landroid/graphics/drawable/TransitionDrawable;->mCrossFade:Z +Landroid/graphics/drawable/TransitionDrawable;->mTo:I Landroid/graphics/drawable/VectorDrawable$VGroup;->setRotation(F)V +Landroid/graphics/drawable/VectorDrawable;->getOpticalInsets()Landroid/graphics/Insets; Landroid/graphics/drawable/VectorDrawable;->getTargetByName(Ljava/lang/String;)Ljava/lang/Object; Landroid/graphics/drawable/VectorDrawable;->mTintFilter:Landroid/graphics/PorterDuffColorFilter; Landroid/graphics/drawable/VectorDrawable;->setAllowCaching(Z)V @@ -1099,32 +2133,120 @@ Landroid/graphics/GraphicBuffer;->mNativeObject:J Landroid/graphics/ImageDecoder;->postProcessAndRelease(Landroid/graphics/Canvas;)I Landroid/graphics/Insets;->bottom:I Landroid/graphics/Insets;->left:I +Landroid/graphics/Insets;->NONE:Landroid/graphics/Insets; +Landroid/graphics/Insets;->of(IIII)Landroid/graphics/Insets; +Landroid/graphics/Insets;->of(Landroid/graphics/Rect;)Landroid/graphics/Insets; Landroid/graphics/Insets;->right:I Landroid/graphics/Insets;->top:I +Landroid/graphics/LinearGradient;->mColor0:I +Landroid/graphics/LinearGradient;->mColor1:I Landroid/graphics/LinearGradient;->mColors:[I +Landroid/graphics/LinearGradient;->mPositions:[F +Landroid/graphics/LinearGradient;->mTileMode:Landroid/graphics/Shader$TileMode; +Landroid/graphics/LinearGradient;->mX0:F +Landroid/graphics/LinearGradient;->mX1:F +Landroid/graphics/LinearGradient;->mY0:F +Landroid/graphics/LinearGradient;->mY1:F +Landroid/graphics/Matrix;->IDENTITY_MATRIX:Landroid/graphics/Matrix; Landroid/graphics/Matrix;->native_instance:J Landroid/graphics/Movie;-><init>(J)V Landroid/graphics/Movie;->mNativeMovie:J Landroid/graphics/NinePatch$InsetStruct;-><init>(IIIIIIIIFIF)V Landroid/graphics/NinePatch;->mBitmap:Landroid/graphics/Bitmap; +Landroid/graphics/Paint;->getNativeInstance()J +Landroid/graphics/Paint;->getTextRunAdvances([CIIIIZ[FI)F +Landroid/graphics/Paint;->getTextRunCursor([CIIIII)I +Landroid/graphics/Paint;->setCompatibilityScaling(F)V +Landroid/graphics/Paint;->setHyphenEdit(I)V +Landroid/graphics/Path;->isSimplePath:Z +Landroid/graphics/Path;->rects:Landroid/graphics/Region; +Landroid/graphics/pdf/PdfRenderer;->doClose()V +Landroid/graphics/pdf/PdfRenderer;->mCurrentPage:Landroid/graphics/pdf/PdfRenderer$Page; Landroid/graphics/Picture;->mNativePicture:J +Landroid/graphics/PorterDuff$Mode;->nativeInt:I Landroid/graphics/PorterDuffColorFilter;->getColor()I +Landroid/graphics/PorterDuffColorFilter;->getMode()Landroid/graphics/PorterDuff$Mode; Landroid/graphics/PorterDuffColorFilter;->setColor(I)V Landroid/graphics/PorterDuffColorFilter;->setMode(Landroid/graphics/PorterDuff$Mode;)V +Landroid/graphics/RadialGradient;->mCenterColor:I +Landroid/graphics/RadialGradient;->mColors:[I +Landroid/graphics/RadialGradient;->mEdgeColor:I +Landroid/graphics/RadialGradient;->mPositions:[F +Landroid/graphics/RadialGradient;->mRadius:F +Landroid/graphics/RadialGradient;->mTileMode:Landroid/graphics/Shader$TileMode; +Landroid/graphics/RadialGradient;->mX:F +Landroid/graphics/RadialGradient;->mY:F +Landroid/graphics/Rect;->printShortString(Ljava/io/PrintWriter;)V Landroid/graphics/Rect;->scale(F)V +Landroid/graphics/Region$Op;->nativeInt:I Landroid/graphics/Region;-><init>(JI)V Landroid/graphics/Region;->mNativeRegion:J +Landroid/graphics/Region;->recycle()V +Landroid/graphics/Region;->scale(F)V +Landroid/graphics/Shader$TileMode;->nativeInt:I Landroid/graphics/SurfaceTexture;->mFrameAvailableListener:J Landroid/graphics/SurfaceTexture;->mProducer:J Landroid/graphics/SurfaceTexture;->mSurfaceTexture:J Landroid/graphics/SurfaceTexture;->nativeDetachFromGLContext()I Landroid/graphics/SurfaceTexture;->postEventFromNative(Ljava/lang/ref/WeakReference;)V +Landroid/graphics/SweepGradient;->mColor0:I +Landroid/graphics/SweepGradient;->mColor1:I +Landroid/graphics/SweepGradient;->mColors:[I +Landroid/graphics/SweepGradient;->mCx:F +Landroid/graphics/SweepGradient;->mCy:F +Landroid/graphics/SweepGradient;->mPositions:[F +Landroid/graphics/TableMaskFilter;->CreateClipTable(II)Landroid/graphics/TableMaskFilter; +Landroid/graphics/TemporaryBuffer;->obtain(I)[C +Landroid/graphics/TemporaryBuffer;->recycle([C)V +Landroid/graphics/Typeface;->createFromFamilies([Landroid/graphics/FontFamily;)Landroid/graphics/Typeface; Landroid/graphics/Typeface;->createFromFamiliesWithDefault([Landroid/graphics/FontFamily;II)Landroid/graphics/Typeface; Landroid/graphics/Typeface;->createFromFamiliesWithDefault([Landroid/graphics/FontFamily;Ljava/lang/String;II)Landroid/graphics/Typeface; Landroid/graphics/Typeface;->mStyle:I +Landroid/graphics/Typeface;->nativeCreateWeightAlias(JI)J +Landroid/graphics/Typeface;->native_instance:J Landroid/graphics/Typeface;->sDefaults:[Landroid/graphics/Typeface; Landroid/graphics/Typeface;->setDefault(Landroid/graphics/Typeface;)V Landroid/graphics/Typeface;->sSystemFontMap:Ljava/util/Map; +Landroid/graphics/Xfermode;->porterDuffMode:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ACQUIRED_GOOD:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ACQUIRED_IMAGER_DIRTY:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ACQUIRED_INSUFFICIENT:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ACQUIRED_PARTIAL:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ACQUIRED_TOO_FAST:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ACQUIRED_TOO_SLOW:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_CANCELED:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_HW_NOT_PRESENT:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_HW_UNAVAILABLE:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_LOCKOUT:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_LOCKOUT_PERMANENT:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_NO_BIOMETRICS:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_NO_SPACE:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_TIMEOUT:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_UNABLE_TO_PROCESS:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_USER_CANCELED:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_VENDOR:I +Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_VENDOR_BASE:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ACQUIRED_GOOD:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ACQUIRED_IMAGER_DIRTY:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ACQUIRED_INSUFFICIENT:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ACQUIRED_PARTIAL:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ACQUIRED_TOO_FAST:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ACQUIRED_TOO_SLOW:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_CANCELED:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_HW_NOT_PRESENT:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_HW_UNAVAILABLE:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_LOCKOUT:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_LOCKOUT_PERMANENT:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_NO_FINGERPRINTS:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_NO_SPACE:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_TIMEOUT:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_UNABLE_TO_PROCESS:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_USER_CANCELED:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_VENDOR:I +Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_VENDOR_BASE:I +Landroid/hardware/Camera$Parameters;->copyFrom(Landroid/hardware/Camera$Parameters;)V +Landroid/hardware/Camera$Parameters;->dump()V +Landroid/hardware/Camera$Parameters;->splitArea(Ljava/lang/String;)Ljava/util/ArrayList; Landroid/hardware/camera2/CameraCharacteristics$Key;-><init>(Ljava/lang/String;Landroid/hardware/camera2/utils/TypeReference;)V Landroid/hardware/camera2/CameraCharacteristics$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;)V Landroid/hardware/camera2/CameraCharacteristics$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;J)V @@ -1153,6 +2275,7 @@ Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_PROCESSED_MIN Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_PROCESSED_SIZES:Landroid/hardware/camera2/CameraCharacteristics$Key; Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_STALL_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key; Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_STREAM_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key; +Landroid/hardware/camera2/CaptureRequest$Builder;->setPartOfCHSRequestList(Z)V Landroid/hardware/camera2/CaptureRequest$Key;-><init>(Ljava/lang/String;Landroid/hardware/camera2/utils/TypeReference;)V Landroid/hardware/camera2/CaptureRequest$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;J)V Landroid/hardware/camera2/CaptureRequest$Key;->getNativeKey()Landroid/hardware/camera2/impl/CameraMetadataNative$Key; @@ -1191,74 +2314,155 @@ Landroid/hardware/camera2/CaptureResult;->TONEMAP_CURVE_GREEN:Landroid/hardware/ Landroid/hardware/camera2/CaptureResult;->TONEMAP_CURVE_RED:Landroid/hardware/camera2/CaptureResult$Key; Landroid/hardware/camera2/impl/CameraMetadataNative$Key;->getTag()I Landroid/hardware/camera2/impl/CameraMetadataNative;->mMetadataPtr:J +Landroid/hardware/camera2/utils/TypeReference;-><init>()V Landroid/hardware/camera2/utils/TypeReference;->createSpecializedTypeReference(Ljava/lang/reflect/Type;)Landroid/hardware/camera2/utils/TypeReference; Landroid/hardware/Camera;->addCallbackBuffer([BI)V +Landroid/hardware/Camera;->addRawImageCallbackBuffer([B)V +Landroid/hardware/Camera;->CAMERA_HAL_API_VERSION_1_0:I +Landroid/hardware/Camera;->getEmptyParameters()Landroid/hardware/Camera$Parameters; Landroid/hardware/Camera;->mNativeContext:J +Landroid/hardware/Camera;->native_getParameters()Ljava/lang/String; +Landroid/hardware/Camera;->native_setParameters(Ljava/lang/String;)V Landroid/hardware/Camera;->native_setup(Ljava/lang/Object;IILjava/lang/String;)I Landroid/hardware/Camera;->openLegacy(II)Landroid/hardware/Camera; Landroid/hardware/Camera;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V +Landroid/hardware/Camera;->previewEnabled()Z +Landroid/hardware/display/DisplayManager;->ACTION_WIFI_DISPLAY_STATUS_CHANGED:Ljava/lang/String; +Landroid/hardware/display/DisplayManager;->connectWifiDisplay(Ljava/lang/String;)V +Landroid/hardware/display/DisplayManager;->disconnectWifiDisplay()V +Landroid/hardware/display/DisplayManager;->EXTRA_WIFI_DISPLAY_STATUS:Ljava/lang/String; +Landroid/hardware/display/DisplayManager;->forgetWifiDisplay(Ljava/lang/String;)V +Landroid/hardware/display/DisplayManager;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus; +Landroid/hardware/display/DisplayManager;->pauseWifiDisplay()V +Landroid/hardware/display/DisplayManager;->renameWifiDisplay(Ljava/lang/String;Ljava/lang/String;)V +Landroid/hardware/display/DisplayManager;->resumeWifiDisplay()V +Landroid/hardware/display/DisplayManager;->startWifiDisplayScan()V +Landroid/hardware/display/DisplayManager;->stopWifiDisplayScan()V +Landroid/hardware/display/DisplayManagerGlobal;->disconnectWifiDisplay()V +Landroid/hardware/display/DisplayManagerGlobal;->getDisplayIds()[I +Landroid/hardware/display/DisplayManagerGlobal;->getDisplayInfo(I)Landroid/view/DisplayInfo; +Landroid/hardware/display/DisplayManagerGlobal;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus; Landroid/hardware/display/DisplayManagerGlobal;->mDm:Landroid/hardware/display/IDisplayManager; Landroid/hardware/display/DisplayManagerGlobal;->sInstance:Landroid/hardware/display/DisplayManagerGlobal; Landroid/hardware/display/IDisplayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/display/IDisplayManager; +Landroid/hardware/display/IDisplayManager;->getDisplayInfo(I)Landroid/view/DisplayInfo; +Landroid/hardware/display/WifiDisplay;->canConnect()Z +Landroid/hardware/display/WifiDisplay;->equals(Landroid/hardware/display/WifiDisplay;)Z +Landroid/hardware/display/WifiDisplay;->getDeviceAddress()Ljava/lang/String; +Landroid/hardware/display/WifiDisplay;->getDeviceAlias()Ljava/lang/String; +Landroid/hardware/display/WifiDisplay;->getDeviceName()Ljava/lang/String; +Landroid/hardware/display/WifiDisplay;->isAvailable()Z +Landroid/hardware/display/WifiDisplay;->isRemembered()Z +Landroid/hardware/display/WifiDisplayStatus;->DISPLAY_STATE_CONNECTED:I +Landroid/hardware/display/WifiDisplayStatus;->DISPLAY_STATE_CONNECTING:I +Landroid/hardware/display/WifiDisplayStatus;->DISPLAY_STATE_NOT_CONNECTED:I +Landroid/hardware/display/WifiDisplayStatus;->FEATURE_STATE_ON:I +Landroid/hardware/display/WifiDisplayStatus;->getActiveDisplay()Landroid/hardware/display/WifiDisplay; +Landroid/hardware/display/WifiDisplayStatus;->getActiveDisplayState()I +Landroid/hardware/display/WifiDisplayStatus;->getDisplays()[Landroid/hardware/display/WifiDisplay; +Landroid/hardware/display/WifiDisplayStatus;->getFeatureState()I +Landroid/hardware/display/WifiDisplayStatus;->getScanState()I Landroid/hardware/display/WifiDisplayStatus;->mActiveDisplay:Landroid/hardware/display/WifiDisplay; Landroid/hardware/display/WifiDisplayStatus;->mDisplays:[Landroid/hardware/display/WifiDisplay; +Landroid/hardware/display/WifiDisplayStatus;->SCAN_STATE_NOT_SCANNING:I Landroid/hardware/fingerprint/Fingerprint;->getFingerId()I Landroid/hardware/fingerprint/Fingerprint;->getName()Ljava/lang/CharSequence; +Landroid/hardware/fingerprint/FingerprintManager;->getAuthenticatorId()J Landroid/hardware/fingerprint/FingerprintManager;->getEnrolledFingerprints()Ljava/util/List; +Landroid/hardware/fingerprint/FingerprintManager;->getEnrolledFingerprints(I)Ljava/util/List; Landroid/hardware/fingerprint/IFingerprintService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/hardware/fingerprint/IFingerprintService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/fingerprint/IFingerprintService; Landroid/hardware/HardwareBuffer;-><init>(J)V Landroid/hardware/HardwareBuffer;->mNativeObject:J Landroid/hardware/ICameraService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/ICameraService; Landroid/hardware/input/IInputManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/hardware/input/IInputManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputManager; +Landroid/hardware/input/IInputManager$Stub;->TRANSACTION_injectInputEvent:I +Landroid/hardware/input/IInputManager;->injectInputEvent(Landroid/view/InputEvent;I)Z +Landroid/hardware/input/InputManager;->createInputForwarder(I)Landroid/app/IInputForwarder; Landroid/hardware/input/InputManager;->getInstance()Landroid/hardware/input/InputManager; Landroid/hardware/input/InputManager;->injectInputEvent(Landroid/view/InputEvent;I)Z Landroid/hardware/input/InputManager;->INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH:I Landroid/hardware/input/InputManager;->mIm:Landroid/hardware/input/IInputManager; +Landroid/hardware/input/InputManager;->setPointerIconType(I)V Landroid/hardware/location/IActivityRecognitionHardwareClient$Stub;-><init>()V Landroid/hardware/location/IContextHubService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubService; +Landroid/hardware/Sensor;->getHandle()I +Landroid/hardware/Sensor;->mFlags:I +Landroid/hardware/Sensor;->TYPE_DEVICE_ORIENTATION:I +Landroid/hardware/Sensor;->TYPE_PICK_UP_GESTURE:I +Landroid/hardware/SensorEvent;-><init>(I)V +Landroid/hardware/SensorManager;-><init>()V +Landroid/hardware/SerialManager;->getSerialPorts()[Ljava/lang/String; +Landroid/hardware/SerialManager;->openSerialPort(Ljava/lang/String;I)Landroid/hardware/SerialPort; +Landroid/hardware/SerialPort;->close()V Landroid/hardware/SerialPort;->mNativeContext:I +Landroid/hardware/SerialPort;->write(Ljava/nio/ByteBuffer;I)V Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;-><init>(II)V Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;->confidenceLevel:I Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;->userId:I Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;-><init>(IIZIIIZLandroid/media/AudioFormat;[B)V Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;-><init>(Ljava/util/UUID;Ljava/util/UUID;[B)V +Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;-><init>(IILjava/lang/String;Ljava/lang/String;[I)V Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->id:I Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->locale:Ljava/lang/String; Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->recognitionModes:I Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->text:Ljava/lang/String; Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->users:[I Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;-><init>(IIZIIIZLandroid/media/AudioFormat;[B[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;)V +Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;->keyphraseExtras:[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra; Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;-><init>(III[Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;)V Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->coarseConfidenceLevel:I Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->confidenceLevels:[Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel; Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->id:I Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->recognitionModes:I +Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;-><init>(Ljava/util/UUID;Ljava/util/UUID;[B[Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;)V Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;->keyphrases:[Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase; Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIIZIZIZ)V +Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->id:I +Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->maxSoundModels:I +Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->uuid:Ljava/util/UUID; Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;-><init>(ZZ[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;[B)V Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;->captureRequested:Z Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;->data:[B Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;->keyphrases:[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra; Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;-><init>(IIZIIIZLandroid/media/AudioFormat;[B)V +Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;->captureAvailable:Z Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;->captureSession:I Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;->data:[B +Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;->soundModelHandle:I +Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;->status:I Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;->data:[B Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;->uuid:Ljava/util/UUID; Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;->vendorUuid:Ljava/util/UUID; Landroid/hardware/soundtrigger/SoundTrigger$SoundModelEvent;-><init>(II[B)V +Landroid/hardware/soundtrigger/SoundTrigger;->attachModule(ILandroid/hardware/soundtrigger/SoundTrigger$StatusListener;Landroid/os/Handler;)Landroid/hardware/soundtrigger/SoundTriggerModule; +Landroid/hardware/soundtrigger/SoundTrigger;->listModules(Ljava/util/ArrayList;)I +Landroid/hardware/soundtrigger/SoundTriggerModule;->detach()V +Landroid/hardware/soundtrigger/SoundTriggerModule;->loadSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;[I)I Landroid/hardware/soundtrigger/SoundTriggerModule;->mId:I Landroid/hardware/soundtrigger/SoundTriggerModule;->mNativeContext:J Landroid/hardware/soundtrigger/SoundTriggerModule;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V +Landroid/hardware/soundtrigger/SoundTriggerModule;->startRecognition(ILandroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I +Landroid/hardware/soundtrigger/SoundTriggerModule;->stopRecognition(I)I +Landroid/hardware/soundtrigger/SoundTriggerModule;->unloadSoundModel(I)I Landroid/hardware/SystemSensorManager$BaseEventQueue;->dispatchAdditionalInfoEvent(III[F[I)V Landroid/hardware/SystemSensorManager$BaseEventQueue;->dispatchFlushCompleteEvent(I)V Landroid/hardware/SystemSensorManager$BaseEventQueue;->dispatchSensorEvent(I[FIJ)V Landroid/hardware/usb/IUsbManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/hardware/usb/IUsbManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/usb/IUsbManager; +Landroid/hardware/usb/UsbDevice;->mInterfaces:[Landroid/hardware/usb/UsbInterface; Landroid/hardware/usb/UsbDeviceConnection;->mNativeContext:J +Landroid/hardware/usb/UsbManager;-><init>(Landroid/content/Context;Landroid/hardware/usb/IUsbManager;)V +Landroid/hardware/usb/UsbManager;->ACTION_USB_STATE:Ljava/lang/String; Landroid/hardware/usb/UsbManager;->getPorts()[Landroid/hardware/usb/UsbPort; Landroid/hardware/usb/UsbManager;->getPortStatus(Landroid/hardware/usb/UsbPort;)Landroid/hardware/usb/UsbPortStatus; +Landroid/hardware/usb/UsbManager;->isFunctionEnabled(Ljava/lang/String;)Z Landroid/hardware/usb/UsbManager;->setCurrentFunction(Ljava/lang/String;Z)V Landroid/hardware/usb/UsbManager;->setPortRoles(Landroid/hardware/usb/UsbPort;II)V +Landroid/hardware/usb/UsbManager;->USB_CONNECTED:Ljava/lang/String; +Landroid/hardware/usb/UsbManager;->USB_DATA_UNLOCKED:Ljava/lang/String; +Landroid/hardware/usb/UsbManager;->USB_FUNCTION_NONE:Ljava/lang/String; Landroid/hardware/usb/UsbPortStatus;->getCurrentDataRole()I Landroid/hardware/usb/UsbPortStatus;->getCurrentMode()I Landroid/hardware/usb/UsbPortStatus;->getCurrentPowerRole()I @@ -1269,10 +2473,12 @@ Landroid/hardware/usb/UsbRequest;->mBuffer:Ljava/nio/ByteBuffer; Landroid/hardware/usb/UsbRequest;->mLength:I Landroid/hardware/usb/UsbRequest;->mNativeContext:J Landroid/icu/impl/CurrencyData;-><init>()V +Landroid/icu/text/ArabicShaping;-><init>(I)V Landroid/icu/text/ArabicShaping;->isAlefMaksouraChar(C)Z Landroid/icu/text/ArabicShaping;->isSeenTailFamilyChar(C)I Landroid/icu/text/ArabicShaping;->isTailChar(C)Z Landroid/icu/text/ArabicShaping;->isYehHamzaChar(C)Z +Landroid/icu/text/ArabicShaping;->shape(Ljava/lang/String;)Ljava/lang/String; Landroid/icu/text/DateFormatSymbols;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale; Landroid/icu/text/DateIntervalFormat;-><init>()V Landroid/icu/text/DateTimePatternGenerator$DistanceInfo;-><init>()V @@ -1285,32 +2491,79 @@ Landroid/icu/text/SpoofChecker$ScriptSet;->setAll()V Landroid/icu/text/TimeZoneNames$DefaultTimeZoneNames$FactoryImpl;-><init>()V Landroid/icu/text/Transliterator;->createFromRules(Ljava/lang/String;Ljava/lang/String;I)Landroid/icu/text/Transliterator; Landroid/icu/text/Transliterator;->getInstance(Ljava/lang/String;)Landroid/icu/text/Transliterator; +Landroid/icu/text/Transliterator;->getInstance(Ljava/lang/String;I)Landroid/icu/text/Transliterator; +Landroid/icu/text/Transliterator;->transliterate(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;Ljava/lang/String;)V Landroid/icu/text/Transliterator;->transliterate(Ljava/lang/String;)Ljava/lang/String; Landroid/icu/text/UFormat;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale; +Landroid/icu/text/UForwardCharacterIterator;->DONE:I Landroid/icu/util/Calendar;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale; +Landroid/icu/util/PersianCalendar;-><init>(Ljava/util/Locale;)V +Landroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/UResourceBundle; +Landroid/icu/util/UResourceBundle;->getKey()Ljava/lang/String; +Landroid/icu/util/UResourceBundle;->getString()Ljava/lang/String; +Landroid/icu/util/UResourceBundle;->getType()I +Landroid/icu/util/UResourceBundleIterator;->hasNext()Z +Landroid/icu/util/UResourceBundleIterator;->next()Landroid/icu/util/UResourceBundle; Landroid/inputmethodservice/InputMethodService$SettingsObserver;->shouldShowImeWithHardKeyboard()Z Landroid/inputmethodservice/InputMethodService;->mExtractEditText:Landroid/inputmethodservice/ExtractEditText; +Landroid/inputmethodservice/InputMethodService;->mExtractView:Landroid/view/View; Landroid/inputmethodservice/InputMethodService;->mRootView:Landroid/view/View; Landroid/inputmethodservice/InputMethodService;->mSettingsObserver:Landroid/inputmethodservice/InputMethodService$SettingsObserver; +Landroid/inputmethodservice/InputMethodService;->mTheme:I +Landroid/inputmethodservice/InputMethodService;->mTmpInsets:Landroid/inputmethodservice/InputMethodService$Insets; +Landroid/inputmethodservice/InputMethodService;->onExtractedDeleteText(II)V +Landroid/inputmethodservice/InputMethodService;->onExtractedReplaceText(IILjava/lang/CharSequence;)V +Landroid/inputmethodservice/InputMethodService;->onExtractedSetSpan(Ljava/lang/Object;III)V +Landroid/inputmethodservice/Keyboard;->mModifierKeys:Ljava/util/List; +Landroid/inputmethodservice/Keyboard;->mTotalHeight:I +Landroid/inputmethodservice/Keyboard;->mTotalWidth:I +Landroid/inputmethodservice/KeyboardView;->mKeyBackground:Landroid/graphics/drawable/Drawable; +Landroid/inputmethodservice/KeyboardView;->mLabelTextSize:I +Landroid/inputmethodservice/KeyboardView;->mPreviewText:Landroid/widget/TextView; +Landroid/inputmethodservice/KeyboardView;->openPopupIfRequired(Landroid/view/MotionEvent;)Z +Landroid/inputmethodservice/KeyboardView;->repeatKey()Z +Landroid/inputmethodservice/KeyboardView;->showKey(I)V +Landroid/location/Country;-><init>(Ljava/lang/String;I)V Landroid/location/Country;->getCountryIso()Ljava/lang/String; Landroid/location/Country;->getSource()I +Landroid/location/CountryDetector;-><init>(Landroid/location/ICountryDetector;)V +Landroid/location/CountryDetector;->addCountryListener(Landroid/location/CountryListener;Landroid/os/Looper;)V Landroid/location/CountryDetector;->detectCountry()Landroid/location/Country; +Landroid/location/CountryDetector;->removeCountryListener(Landroid/location/CountryListener;)V +Landroid/location/CountryListener;->onCountryDetected(Landroid/location/Country;)V Landroid/location/GeocoderParams;->getClientPackage()Ljava/lang/String; Landroid/location/GeocoderParams;->getLocale()Ljava/util/Locale; +Landroid/location/Geofence;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/location/GpsStatus;->setTimeToFirstFix(I)V +Landroid/location/ICountryDetector$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ICountryDetector; +Landroid/location/ICountryListener$Stub;-><init>()V Landroid/location/IGeocodeProvider$Stub;-><init>()V +Landroid/location/IGeocodeProvider$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/IGeocodeProvider; Landroid/location/IGeofenceProvider$Stub;-><init>()V Landroid/location/ILocationListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/location/ILocationListener$Stub$Proxy;->mRemote:Landroid/os/IBinder; +Landroid/location/ILocationListener$Stub;-><init>()V +Landroid/location/ILocationListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationListener; Landroid/location/ILocationListener;->onLocationChanged(Landroid/location/Location;)V +Landroid/location/ILocationListener;->onProviderDisabled(Ljava/lang/String;)V +Landroid/location/ILocationListener;->onProviderEnabled(Ljava/lang/String;)V +Landroid/location/ILocationListener;->onStatusChanged(Ljava/lang/String;ILandroid/os/Bundle;)V Landroid/location/ILocationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/location/ILocationManager$Stub;-><init>()V Landroid/location/ILocationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationManager; +Landroid/location/ILocationManager;->getAllProviders()Ljava/util/List; Landroid/location/Location;->mElapsedRealtimeNanos:J +Landroid/location/Location;->mProvider:Ljava/lang/String; Landroid/location/LocationManager;->mService:Landroid/location/ILocationManager; +Landroid/location/LocationManager;->requestLocationUpdates(Landroid/location/LocationRequest;Landroid/location/LocationListener;Landroid/os/Looper;Landroid/app/PendingIntent;)V Landroid/location/LocationRequest;->mHideFromAppOps:Z Landroid/location/LocationRequest;->mInterval:J Landroid/location/LocationRequest;->mProvider:Ljava/lang/String; Landroid/location/LocationRequest;->mWorkSource:Landroid/os/WorkSource; +Landroid/media/AmrInputStream;-><init>(Ljava/io/InputStream;)V +Landroid/media/AsyncPlayer;->setUsesWakeLock(Landroid/content/Context;)V Landroid/media/AudioAttributes$Builder;->addTag(Ljava/lang/String;)Landroid/media/AudioAttributes$Builder; +Landroid/media/AudioAttributes$Builder;->setInternalLegacyStreamType(I)Landroid/media/AudioAttributes$Builder; Landroid/media/AudioAttributes;->mContentType:I Landroid/media/AudioAttributes;->mFlags:I Landroid/media/AudioAttributes;->mFormattedTags:Ljava/lang/String; @@ -1318,16 +2571,19 @@ Landroid/media/AudioAttributes;->mSource:I Landroid/media/AudioAttributes;->mUsage:I Landroid/media/AudioAttributes;->toLegacyStreamType(Landroid/media/AudioAttributes;)I Landroid/media/AudioDevicePort;-><init>(Landroid/media/AudioHandle;Ljava/lang/String;[I[I[I[I[Landroid/media/AudioGain;ILjava/lang/String;)V +Landroid/media/AudioDevicePort;->type()I Landroid/media/AudioDevicePortConfig;-><init>(Landroid/media/AudioDevicePort;IIILandroid/media/AudioGainConfig;)V Landroid/media/AudioFormat;-><init>(IIII)V Landroid/media/AudioFormat;->mChannelMask:I Landroid/media/AudioFormat;->mEncoding:I Landroid/media/AudioFormat;->mSampleRate:I Landroid/media/audiofx/AudioEffect;-><init>(Ljava/util/UUID;Ljava/util/UUID;II)V +Landroid/media/audiofx/AudioEffect;->checkState(Ljava/lang/String;)V Landroid/media/audiofx/AudioEffect;->command(I[B[B)I Landroid/media/audiofx/AudioEffect;->getParameter([I[B)I Landroid/media/audiofx/AudioEffect;->getParameter([I[I)I Landroid/media/audiofx/AudioEffect;->setParameter([I[S)I +Landroid/media/audiofx/Visualizer;->mId:I Landroid/media/AudioGain;-><init>(IIIIIIIII)V Landroid/media/AudioGainConfig;-><init>(ILandroid/media/AudioGain;II[II)V Landroid/media/AudioGainConfig;->mChannelMask:I @@ -1338,20 +2594,53 @@ Landroid/media/AudioGainConfig;->mValues:[I Landroid/media/AudioHandle;-><init>(I)V Landroid/media/AudioHandle;->mId:I Landroid/media/AudioManager;-><init>(Landroid/content/Context;)V +Landroid/media/AudioManager;->abandonAudioFocusForCall()V +Landroid/media/AudioManager;->createAudioPatch([Landroid/media/AudioPatch;[Landroid/media/AudioPortConfig;[Landroid/media/AudioPortConfig;)I +Landroid/media/AudioManager;->DEVICE_OUT_ANLG_DOCK_HEADSET:I +Landroid/media/AudioManager;->DEVICE_OUT_BLUETOOTH_A2DP:I +Landroid/media/AudioManager;->DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES:I +Landroid/media/AudioManager;->DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER:I +Landroid/media/AudioManager;->DEVICE_OUT_BLUETOOTH_SCO_HEADSET:I +Landroid/media/AudioManager;->DEVICE_OUT_DGTL_DOCK_HEADSET:I +Landroid/media/AudioManager;->DEVICE_OUT_EARPIECE:I +Landroid/media/AudioManager;->DEVICE_OUT_HDMI:I +Landroid/media/AudioManager;->DEVICE_OUT_SPEAKER:I +Landroid/media/AudioManager;->DEVICE_OUT_WIRED_HEADPHONE:I +Landroid/media/AudioManager;->DEVICE_OUT_WIRED_HEADSET:I +Landroid/media/AudioManager;->EXTRA_VOLUME_STREAM_TYPE:Ljava/lang/String; +Landroid/media/AudioManager;->EXTRA_VOLUME_STREAM_VALUE:Ljava/lang/String; Landroid/media/AudioManager;->forceVolumeControlStream(I)V +Landroid/media/AudioManager;->getDevicesForStream(I)I +Landroid/media/AudioManager;->getLastAudibleStreamVolume(I)I Landroid/media/AudioManager;->getOutputLatency(I)I +Landroid/media/AudioManager;->getRingerModeInternal()I Landroid/media/AudioManager;->getService()Landroid/media/IAudioService; +Landroid/media/AudioManager;->isMasterMute()Z +Landroid/media/AudioManager;->isMusicActiveRemotely()Z +Landroid/media/AudioManager;->isSilentMode()Z +Landroid/media/AudioManager;->isValidRingerMode(I)Z +Landroid/media/AudioManager;->listAudioPatches(Ljava/util/ArrayList;)I +Landroid/media/AudioManager;->listAudioPorts(Ljava/util/ArrayList;)I Landroid/media/AudioManager;->mAudioFocusIdListenerMap:Ljava/util/concurrent/ConcurrentHashMap; +Landroid/media/AudioManager;->NUM_SOUND_EFFECTS:I +Landroid/media/AudioManager;->releaseAudioPatch(Landroid/media/AudioPatch;)I +Landroid/media/AudioManager;->reloadAudioSettings()V +Landroid/media/AudioManager;->requestAudioFocusForCall(II)V Landroid/media/AudioManager;->setMasterMute(ZI)V Landroid/media/AudioManager;->setRingerModeInternal(I)V +Landroid/media/AudioManager;->setWiredDeviceConnectionState(IILjava/lang/String;Ljava/lang/String;)V Landroid/media/AudioManager;->startBluetoothScoVirtualCall()V Landroid/media/AudioManager;->STREAM_BLUETOOTH_SCO:I Landroid/media/AudioManager;->STREAM_SYSTEM_ENFORCED:I Landroid/media/AudioManager;->STREAM_TTS:I +Landroid/media/AudioManager;->VOLUME_CHANGED_ACTION:Ljava/lang/String; Landroid/media/AudioMixPort;-><init>(Landroid/media/AudioHandle;IILjava/lang/String;[I[I[I[I[Landroid/media/AudioGain;)V +Landroid/media/AudioMixPort;->ioHandle()I Landroid/media/AudioMixPortConfig;-><init>(Landroid/media/AudioMixPort;IIILandroid/media/AudioGainConfig;)V Landroid/media/AudioPatch;-><init>(Landroid/media/AudioHandle;[Landroid/media/AudioPortConfig;[Landroid/media/AudioPortConfig;)V Landroid/media/AudioPatch;->mHandle:Landroid/media/AudioHandle; +Landroid/media/AudioPatch;->sinks()[Landroid/media/AudioPortConfig; +Landroid/media/AudioPatch;->sources()[Landroid/media/AudioPortConfig; Landroid/media/audiopolicy/AudioMix;->mCallbackFlags:I Landroid/media/audiopolicy/AudioMix;->mDeviceAddress:Ljava/lang/String; Landroid/media/audiopolicy/AudioMix;->mDeviceSystemType:I @@ -1364,10 +2653,12 @@ Landroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;->mIntProp:I Landroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;->mRule:I Landroid/media/audiopolicy/AudioMixingRule;->mCriteria:Ljava/util/ArrayList; Landroid/media/AudioPort;-><init>(Landroid/media/AudioHandle;ILjava/lang/String;[I[I[I[I[Landroid/media/AudioGain;)V +Landroid/media/AudioPort;->id()I Landroid/media/AudioPort;->mActiveConfig:Landroid/media/AudioPortConfig; Landroid/media/AudioPort;->mGains:[Landroid/media/AudioGain; Landroid/media/AudioPort;->mHandle:Landroid/media/AudioHandle; Landroid/media/AudioPort;->mRole:I +Landroid/media/AudioPort;->role()I Landroid/media/AudioPortConfig;-><init>(Landroid/media/AudioPort;IIILandroid/media/AudioGainConfig;)V Landroid/media/AudioPortConfig;->mChannelMask:I Landroid/media/AudioPortConfig;->mConfigMask:I @@ -1375,24 +2666,81 @@ Landroid/media/AudioPortConfig;->mFormat:I Landroid/media/AudioPortConfig;->mGain:Landroid/media/AudioGainConfig; Landroid/media/AudioPortConfig;->mPort:Landroid/media/AudioPort; Landroid/media/AudioPortConfig;->mSamplingRate:I +Landroid/media/AudioPortConfig;->port()Landroid/media/AudioPort; Landroid/media/AudioPortEventHandler;->mJniCallback:J Landroid/media/AudioPortEventHandler;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V +Landroid/media/AudioRecord;->mAudioAttributes:Landroid/media/AudioAttributes; +Landroid/media/AudioRecord;->mInitializationLooper:Landroid/os/Looper; Landroid/media/AudioRecord;->mNativeCallbackCookie:J Landroid/media/AudioRecord;->mNativeDeviceCallback:J Landroid/media/AudioRecord;->mNativeRecorderInJavaObj:J Landroid/media/AudioRecord;->native_release()V +Landroid/media/AudioRecord;->native_setup(Ljava/lang/Object;Ljava/lang/Object;[IIIII[ILjava/lang/String;J)I Landroid/media/AudioRecord;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V Landroid/media/AudioRecordingConfiguration;->getClientPackageName()Ljava/lang/String; Landroid/media/AudioRecordingConfiguration;->getClientUid()I +Landroid/media/AudioSystem;->DEVICE_IN_AMBIENT:I +Landroid/media/AudioSystem;->DEVICE_IN_ANLG_DOCK_HEADSET:I +Landroid/media/AudioSystem;->DEVICE_IN_AUX_DIGITAL:I +Landroid/media/AudioSystem;->DEVICE_IN_BACK_MIC:I +Landroid/media/AudioSystem;->DEVICE_IN_BLUETOOTH_A2DP:I +Landroid/media/AudioSystem;->DEVICE_IN_BLUETOOTH_SCO_HEADSET:I +Landroid/media/AudioSystem;->DEVICE_IN_BUILTIN_MIC:I +Landroid/media/AudioSystem;->DEVICE_IN_COMMUNICATION:I +Landroid/media/AudioSystem;->DEVICE_IN_DEFAULT:I +Landroid/media/AudioSystem;->DEVICE_IN_DGTL_DOCK_HEADSET:I +Landroid/media/AudioSystem;->DEVICE_IN_REMOTE_SUBMIX:I +Landroid/media/AudioSystem;->DEVICE_IN_USB_ACCESSORY:I +Landroid/media/AudioSystem;->DEVICE_IN_USB_DEVICE:I +Landroid/media/AudioSystem;->DEVICE_IN_VOICE_CALL:I +Landroid/media/AudioSystem;->DEVICE_IN_WIRED_HEADSET:I +Landroid/media/AudioSystem;->DEVICE_OUT_ALL_USB:I +Landroid/media/AudioSystem;->DEVICE_OUT_ANLG_DOCK_HEADSET:I +Landroid/media/AudioSystem;->DEVICE_OUT_AUX_DIGITAL:I +Landroid/media/AudioSystem;->DEVICE_OUT_BLUETOOTH_A2DP:I +Landroid/media/AudioSystem;->DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES:I +Landroid/media/AudioSystem;->DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER:I +Landroid/media/AudioSystem;->DEVICE_OUT_BLUETOOTH_SCO:I +Landroid/media/AudioSystem;->DEVICE_OUT_BLUETOOTH_SCO_CARKIT:I +Landroid/media/AudioSystem;->DEVICE_OUT_BLUETOOTH_SCO_HEADSET:I +Landroid/media/AudioSystem;->DEVICE_OUT_DGTL_DOCK_HEADSET:I +Landroid/media/AudioSystem;->DEVICE_OUT_EARPIECE:I +Landroid/media/AudioSystem;->DEVICE_OUT_FM:I +Landroid/media/AudioSystem;->DEVICE_OUT_REMOTE_SUBMIX:I +Landroid/media/AudioSystem;->DEVICE_OUT_SPEAKER:I +Landroid/media/AudioSystem;->DEVICE_OUT_TELEPHONY_TX:I +Landroid/media/AudioSystem;->DEVICE_OUT_USB_ACCESSORY:I +Landroid/media/AudioSystem;->DEVICE_OUT_USB_DEVICE:I +Landroid/media/AudioSystem;->DEVICE_OUT_WIRED_HEADPHONE:I +Landroid/media/AudioSystem;->DEVICE_OUT_WIRED_HEADSET:I +Landroid/media/AudioSystem;->DEVICE_STATE_AVAILABLE:I +Landroid/media/AudioSystem;->DEVICE_STATE_UNAVAILABLE:I Landroid/media/AudioSystem;->dynamicPolicyCallbackFromNative(ILjava/lang/String;I)V Landroid/media/AudioSystem;->errorCallbackFromNative(I)V +Landroid/media/AudioSystem;->FORCE_ANALOG_DOCK:I +Landroid/media/AudioSystem;->FORCE_BT_CAR_DOCK:I +Landroid/media/AudioSystem;->FORCE_BT_DESK_DOCK:I +Landroid/media/AudioSystem;->FORCE_DIGITAL_DOCK:I +Landroid/media/AudioSystem;->FORCE_NONE:I +Landroid/media/AudioSystem;->getDeviceConnectionState(ILjava/lang/String;)I +Landroid/media/AudioSystem;->getDevicesForStream(I)I +Landroid/media/AudioSystem;->getMasterMute()Z +Landroid/media/AudioSystem;->getNumStreamTypes()I +Landroid/media/AudioSystem;->getOutputDeviceName(I)Ljava/lang/String; +Landroid/media/AudioSystem;->getOutputLatency(I)I Landroid/media/AudioSystem;->getPrimaryOutputFrameCount()I Landroid/media/AudioSystem;->getPrimaryOutputSamplingRate()I +Landroid/media/AudioSystem;->initStreamVolume(III)I +Landroid/media/AudioSystem;->isMicrophoneMuted()Z Landroid/media/AudioSystem;->isSourceActive(I)Z Landroid/media/AudioSystem;->isStreamActive(II)Z +Landroid/media/AudioSystem;->muteMicrophone(Z)I Landroid/media/AudioSystem;->recordingCallbackFromNative(IIII[I)V Landroid/media/AudioSystem;->setDeviceConnectionState(IILjava/lang/String;Ljava/lang/String;)I Landroid/media/AudioSystem;->setErrorCallback(Landroid/media/AudioSystem$ErrorCallback;)V +Landroid/media/AudioSystem;->setMasterMute(Z)I +Landroid/media/AudioSystem;->setPhoneState(I)I +Landroid/media/AudioSystem;->setStreamVolumeIndex(III)I Landroid/media/AudioTrack;->deferred_connect(J)V Landroid/media/AudioTrack;->getLatency()I Landroid/media/AudioTrack;->mJniData:J @@ -1400,17 +2748,37 @@ Landroid/media/AudioTrack;->mNativeTrackInJavaObj:J Landroid/media/AudioTrack;->mStreamType:I Landroid/media/AudioTrack;->native_release()V Landroid/media/AudioTrack;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V +Landroid/media/CamcorderProfile;->native_get_camcorder_profile(II)Landroid/media/CamcorderProfile; +Landroid/media/DecoderCapabilities$AudioDecoder;->AUDIO_DECODER_WMA:Landroid/media/DecoderCapabilities$AudioDecoder; +Landroid/media/DecoderCapabilities$VideoDecoder;->VIDEO_DECODER_WMV:Landroid/media/DecoderCapabilities$VideoDecoder; +Landroid/media/DecoderCapabilities;->getAudioDecoders()Ljava/util/List; +Landroid/media/DecoderCapabilities;->getVideoDecoders()Ljava/util/List; +Landroid/media/EncoderCapabilities$VideoEncoderCap;->mCodec:I +Landroid/media/EncoderCapabilities$VideoEncoderCap;->mMaxFrameHeight:I +Landroid/media/EncoderCapabilities$VideoEncoderCap;->mMaxFrameWidth:I +Landroid/media/EncoderCapabilities$VideoEncoderCap;->mMinFrameHeight:I +Landroid/media/EncoderCapabilities$VideoEncoderCap;->mMinFrameWidth:I +Landroid/media/EncoderCapabilities;->getVideoEncoders()Ljava/util/List; Landroid/media/ExifInterface;->getDateTime()J +Landroid/media/ExifInterface;->mAttributes:[Ljava/util/HashMap; +Landroid/media/IAudioFocusDispatcher;->dispatchAudioFocusChange(ILjava/lang/String;)V +Landroid/media/IAudioRoutesObserver$Stub;-><init>()V Landroid/media/IAudioService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/media/IAudioService$Stub;-><init>()V Landroid/media/IAudioService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioService; Landroid/media/IAudioService;->getStreamMaxVolume(I)I Landroid/media/IAudioService;->getStreamVolume(I)I Landroid/media/IAudioService;->setStreamVolume(IIILjava/lang/String;)V +Landroid/media/IAudioService;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo; +Landroid/media/Image$Plane;-><init>()V Landroid/media/Image;-><init>()V Landroid/media/IMediaRouterService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaRouterService; +Landroid/media/IMediaScannerListener$Stub;-><init>()V Landroid/media/IMediaScannerService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaScannerService; +Landroid/media/IMediaScannerService;->requestScanFile(Ljava/lang/String;Ljava/lang/String;Landroid/media/IMediaScannerListener;)V Landroid/media/IMediaScannerService;->scanFile(Ljava/lang/String;Ljava/lang/String;)V Landroid/media/IRemoteDisplayCallback;->onStateChanged(Landroid/media/RemoteDisplayState;)V +Landroid/media/IRingtonePlayer;->play(Landroid/os/IBinder;Landroid/net/Uri;Landroid/media/AudioAttributes;FZ)V Landroid/media/IVolumeController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IVolumeController; Landroid/media/JetPlayer;->mNativePlayerInJavaObj:J Landroid/media/JetPlayer;->postEventFromNative(Ljava/lang/Object;III)V @@ -1418,40 +2786,130 @@ Landroid/media/MediaCodec$CodecException;-><init>(IILjava/lang/String;)V Landroid/media/MediaCodec;->getBuffers(Z)[Ljava/nio/ByteBuffer; Landroid/media/MediaCodec;->mNativeContext:J Landroid/media/MediaCodec;->releaseOutputBuffer(IZZJ)V +Landroid/media/MediaCodec;->setParameters([Ljava/lang/String;[Ljava/lang/Object;)V Landroid/media/MediaFile$MediaFileType;->fileType:I Landroid/media/MediaFile$MediaFileType;->mimeType:Ljava/lang/String; Landroid/media/MediaFile;-><init>()V +Landroid/media/MediaFile;->addFileType(Ljava/lang/String;ILjava/lang/String;)V Landroid/media/MediaFile;->FIRST_AUDIO_FILE_TYPE:I +Landroid/media/MediaFile;->getFileTitle(Ljava/lang/String;)Ljava/lang/String; Landroid/media/MediaFile;->getFileType(Ljava/lang/String;)Landroid/media/MediaFile$MediaFileType; Landroid/media/MediaFile;->getFileTypeForMimeType(Ljava/lang/String;)I Landroid/media/MediaFile;->getMimeTypeForFile(Ljava/lang/String;)Ljava/lang/String; Landroid/media/MediaFile;->isAudioFileType(I)Z +Landroid/media/MediaFile;->isDrmFileType(I)Z Landroid/media/MediaFile;->isImageFileType(I)Z Landroid/media/MediaFile;->isPlayListFileType(I)Z Landroid/media/MediaFile;->isVideoFileType(I)Z Landroid/media/MediaFile;->LAST_AUDIO_FILE_TYPE:I Landroid/media/MediaFile;->sFileTypeMap:Ljava/util/HashMap; +Landroid/media/MediaFile;->sFileTypeToFormatMap:Ljava/util/HashMap; +Landroid/media/MediaFile;->sFormatToMimeTypeMap:Ljava/util/HashMap; +Landroid/media/MediaFile;->sMimeTypeToFormatMap:Ljava/util/HashMap; Landroid/media/MediaFormat;->getMap()Ljava/util/Map; +Landroid/media/MediaFormat;->mMap:Ljava/util/Map; +Landroid/media/MediaHTTPConnection;-><init>()V +Landroid/media/MediaHTTPConnection;->connect(Ljava/lang/String;Ljava/lang/String;)Landroid/os/IBinder; +Landroid/media/MediaHTTPConnection;->disconnect()V +Landroid/media/MediaHTTPConnection;->getMIMEType()Ljava/lang/String; +Landroid/media/MediaHTTPConnection;->getUri()Ljava/lang/String; +Landroid/media/MediaHTTPConnection;->mAllowCrossDomainRedirect:Z +Landroid/media/MediaHTTPConnection;->mAllowCrossProtocolRedirect:Z +Landroid/media/MediaHTTPConnection;->mConnection:Ljava/net/HttpURLConnection; +Landroid/media/MediaHTTPConnection;->mCurrentOffset:J +Landroid/media/MediaHTTPConnection;->mHeaders:Ljava/util/Map; +Landroid/media/MediaHTTPConnection;->mTotalSize:J +Landroid/media/MediaHTTPConnection;->mURL:Ljava/net/URL; +Landroid/media/MediaHTTPConnection;->readAt(JI)I Landroid/media/MediaHTTPService;->createHttpServiceBinderIfNecessary(Ljava/lang/String;)Landroid/os/IBinder; +Landroid/media/MediaInserter;->flushAll()V Landroid/media/MediaMetadataRetriever;->getEmbeddedPicture(I)[B +Landroid/media/MediaMuxer;->mCloseGuard:Ldalvik/system/CloseGuard; +Landroid/media/MediaMuxer;->mNativeObject:J +Landroid/media/MediaMuxer;->mState:I +Landroid/media/MediaMuxer;->nativeRelease(J)V +Landroid/media/MediaMuxer;->nativeSetup(Ljava/io/FileDescriptor;I)J +Landroid/media/MediaPlayer$TrackInfo;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/media/MediaPlayer2$TrackInfo;->getLanguage()Ljava/lang/String; +Landroid/media/MediaPlayer2$TrackInfo;->getTrackType()I +Landroid/media/MediaPlayer;->addSubtitleSource(Ljava/io/InputStream;Landroid/media/MediaFormat;)V +Landroid/media/MediaPlayer;->BYPASS_METADATA_FILTER:Z +Landroid/media/MediaPlayer;->getMediaTimeProvider()Landroid/media/MediaTimeProvider; Landroid/media/MediaPlayer;->getMetadata(ZZ)Landroid/media/Metadata; Landroid/media/MediaPlayer;->invoke(Landroid/os/Parcel;Landroid/os/Parcel;)V +Landroid/media/MediaPlayer;->METADATA_ALL:Z Landroid/media/MediaPlayer;->mEventHandler:Landroid/media/MediaPlayer$EventHandler; +Landroid/media/MediaPlayer;->mOnCompletionListener:Landroid/media/MediaPlayer$OnCompletionListener; +Landroid/media/MediaPlayer;->mOnErrorListener:Landroid/media/MediaPlayer$OnErrorListener; +Landroid/media/MediaPlayer;->mOnInfoListener:Landroid/media/MediaPlayer$OnInfoListener; +Landroid/media/MediaPlayer;->mOnPreparedListener:Landroid/media/MediaPlayer$OnPreparedListener; +Landroid/media/MediaPlayer;->mOnSeekCompleteListener:Landroid/media/MediaPlayer$OnSeekCompleteListener; +Landroid/media/MediaPlayer;->mOnTimedTextListener:Landroid/media/MediaPlayer$OnTimedTextListener; Landroid/media/MediaPlayer;->newRequest()Landroid/os/Parcel; Landroid/media/MediaPlayer;->setDataSource(Ljava/lang/String;Ljava/util/Map;)V Landroid/media/MediaPlayer;->setDataSource(Ljava/lang/String;Ljava/util/Map;Ljava/util/List;)V Landroid/media/MediaPlayer;->setDataSource(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/util/List;)V +Landroid/media/MediaPlayer;->setParameter(ILandroid/os/Parcel;)Z Landroid/media/MediaPlayer;->setRetransmitEndpoint(Ljava/net/InetSocketAddress;)V +Landroid/media/MediaPlayer;->setSubtitleAnchor(Landroid/media/SubtitleController;Landroid/media/SubtitleController$Anchor;)V +Landroid/media/MediaRecorder;->native_setup(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V Landroid/media/MediaRecorder;->setParameter(Ljava/lang/String;)V +Landroid/media/MediaRouter$RouteInfo;->getDeviceAddress()Ljava/lang/String; +Landroid/media/MediaRouter$RouteInfo;->getName(Landroid/content/res/Resources;)Ljava/lang/CharSequence; Landroid/media/MediaRouter$RouteInfo;->getStatusCode()I +Landroid/media/MediaRouter$RouteInfo;->isSelected()Z +Landroid/media/MediaRouter$RouteInfo;->matchesTypes(I)Z +Landroid/media/MediaRouter$RouteInfo;->mNameResId:I +Landroid/media/MediaRouter$RouteInfo;->select()V Landroid/media/MediaRouter$RouteInfo;->STATUS_CONNECTING:I Landroid/media/MediaRouter;->selectRouteInt(ILandroid/media/MediaRouter$RouteInfo;Z)V +Landroid/media/MediaScanner$FileEntry;-><init>(JLjava/lang/String;JI)V +Landroid/media/MediaScanner$FileEntry;->mLastModifiedChanged:Z +Landroid/media/MediaScanner$FileEntry;->mRowId:J +Landroid/media/MediaScanner$MyMediaScannerClient;->beginFile(Ljava/lang/String;Ljava/lang/String;JJZZ)Landroid/media/MediaScanner$FileEntry; +Landroid/media/MediaScanner$MyMediaScannerClient;->doScanFile(Ljava/lang/String;Ljava/lang/String;JJZZZ)Landroid/net/Uri; +Landroid/media/MediaScanner$MyMediaScannerClient;->endFile(Landroid/media/MediaScanner$FileEntry;ZZZZZ)Landroid/net/Uri; +Landroid/media/MediaScanner$MyMediaScannerClient;->getFileTypeFromDrm(Ljava/lang/String;)I +Landroid/media/MediaScanner$MyMediaScannerClient;->handleStringTag(Ljava/lang/String;Ljava/lang/String;)V +Landroid/media/MediaScanner$MyMediaScannerClient;->mFileType:I +Landroid/media/MediaScanner$MyMediaScannerClient;->mIsDrm:Z +Landroid/media/MediaScanner$MyMediaScannerClient;->mMimeType:Ljava/lang/String; +Landroid/media/MediaScanner$MyMediaScannerClient;->mNoMedia:Z +Landroid/media/MediaScanner$MyMediaScannerClient;->mPath:Ljava/lang/String; +Landroid/media/MediaScanner$MyMediaScannerClient;->scanFile(Ljava/lang/String;JJZZ)V +Landroid/media/MediaScanner$MyMediaScannerClient;->setMimeType(Ljava/lang/String;)V +Landroid/media/MediaScanner$MyMediaScannerClient;->toValues()Landroid/content/ContentValues; +Landroid/media/MediaScanner;-><init>(Landroid/content/Context;Ljava/lang/String;)V +Landroid/media/MediaScanner;->FILES_PRESCAN_PROJECTION:[Ljava/lang/String; +Landroid/media/MediaScanner;->isDrmEnabled()Z Landroid/media/MediaScanner;->isNoMediaPath(Ljava/lang/String;)Z +Landroid/media/MediaScanner;->makeEntryFor(Ljava/lang/String;)Landroid/media/MediaScanner$FileEntry; +Landroid/media/MediaScanner;->mAudioUri:Landroid/net/Uri; Landroid/media/MediaScanner;->mClient:Landroid/media/MediaScanner$MyMediaScannerClient; +Landroid/media/MediaScanner;->mContext:Landroid/content/Context; +Landroid/media/MediaScanner;->mDefaultAlarmAlertFilename:Ljava/lang/String; +Landroid/media/MediaScanner;->mDefaultNotificationFilename:Ljava/lang/String; +Landroid/media/MediaScanner;->mDefaultRingtoneFilename:Ljava/lang/String; +Landroid/media/MediaScanner;->mFilesUri:Landroid/net/Uri; +Landroid/media/MediaScanner;->mMediaInserter:Landroid/media/MediaInserter; +Landroid/media/MediaScanner;->mPackageName:Ljava/lang/String; +Landroid/media/MediaScanner;->postscan([Ljava/lang/String;)V +Landroid/media/MediaScanner;->prescan(Ljava/lang/String;Z)V Landroid/media/MediaScanner;->scanSingleFile(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri; +Landroid/media/MediaScanner;->setLocale(Ljava/lang/String;)V +Landroid/media/Metadata;-><init>()V Landroid/media/Metadata;->getBoolean(I)Z +Landroid/media/Metadata;->getByteArray(I)[B +Landroid/media/Metadata;->getDate(I)Ljava/util/Date; +Landroid/media/Metadata;->getDouble(I)D +Landroid/media/Metadata;->getInt(I)I +Landroid/media/Metadata;->getLong(I)J +Landroid/media/Metadata;->getString(I)Ljava/lang/String; Landroid/media/Metadata;->has(I)Z +Landroid/media/Metadata;->keySet()Ljava/util/Set; +Landroid/media/Metadata;->parse(Landroid/os/Parcel;)Z Landroid/media/Metadata;->PAUSE_AVAILABLE:I +Landroid/media/Metadata;->SEEK_AVAILABLE:I Landroid/media/Metadata;->SEEK_BACKWARD_AVAILABLE:I Landroid/media/Metadata;->SEEK_FORWARD_AVAILABLE:I Landroid/media/MicrophoneInfo;-><init>(Ljava/lang/String;ILjava/lang/String;IIILandroid/media/MicrophoneInfo$Coordinate3F;Landroid/media/MicrophoneInfo$Coordinate3F;Ljava/util/List;Ljava/util/List;FFFI)V @@ -1465,16 +2923,34 @@ Landroid/media/PlaybackParams;->SET_AUDIO_FALLBACK_MODE:I Landroid/media/PlaybackParams;->SET_AUDIO_STRETCH_MODE:I Landroid/media/PlaybackParams;->SET_PITCH:I Landroid/media/PlaybackParams;->SET_SPEED:I +Landroid/media/projection/IMediaProjectionManager;->hasProjectionPermission(ILjava/lang/String;)Z +Landroid/media/RemoteControlClient;->MEDIA_POSITION_READABLE:I +Landroid/media/RemoteControlClient;->MEDIA_POSITION_WRITABLE:I +Landroid/media/RemoteController;->getUpdateListener()Landroid/media/RemoteController$OnClientUpdateListener; +Landroid/media/RemoteController;->mCurrentSession:Landroid/media/session/MediaController; +Landroid/media/RemoteController;->setArtworkConfiguration(ZII)Z +Landroid/media/RemoteDisplay;->dispose()V Landroid/media/RemoteDisplay;->notifyDisplayConnected(Landroid/view/Surface;IIII)V Landroid/media/RemoteDisplay;->notifyDisplayDisconnected()V Landroid/media/RemoteDisplay;->notifyDisplayError(I)V Landroid/media/RemoteDisplayState;-><init>()V Landroid/media/RemoteDisplayState;->displays:Ljava/util/ArrayList; +Landroid/media/Ringtone;-><init>(Landroid/content/Context;Z)V +Landroid/media/Ringtone;->getUri()Landroid/net/Uri; +Landroid/media/Ringtone;->mLocalPlayer:Landroid/media/MediaPlayer; +Landroid/media/Ringtone;->mUri:Landroid/net/Uri; +Landroid/media/Ringtone;->setUri(Landroid/net/Uri;)V +Landroid/media/RingtoneManager;->getInternalRingtones()Landroid/database/Cursor; +Landroid/media/RingtoneManager;->getMediaRingtones(Landroid/content/Context;)Landroid/database/Cursor; Landroid/media/RingtoneManager;->getRingtone(Landroid/content/Context;Landroid/net/Uri;I)Landroid/media/Ringtone; +Landroid/media/RingtoneManager;->mCursor:Landroid/database/Cursor; Landroid/media/session/ISessionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionManager; +Landroid/media/session/MediaController;->controlsSameSession(Landroid/media/session/MediaController;)Z +Landroid/media/session/MediaSession$QueueItem;->mId:J Landroid/media/session/MediaSession;->getCallingPackage()Ljava/lang/String; Landroid/media/session/MediaSession;->mCallback:Landroid/media/session/MediaSession$CallbackMessageHandler; Landroid/media/session/MediaSessionLegacyHelper;->getHelper(Landroid/content/Context;)Landroid/media/session/MediaSessionLegacyHelper; +Landroid/media/session/MediaSessionManager;->getActiveSessionsForUser(Landroid/content/ComponentName;I)Ljava/util/List; Landroid/media/soundtrigger/SoundTriggerDetector$EventPayload;->getCaptureSession()Ljava/lang/Integer; Landroid/media/soundtrigger/SoundTriggerDetector$EventPayload;->getData()[B Landroid/media/soundtrigger/SoundTriggerManager;->isRecognitionActive(Ljava/util/UUID;)Z @@ -1483,14 +2959,98 @@ Landroid/media/soundtrigger/SoundTriggerManager;->startRecognition(Ljava/util/UU Landroid/media/soundtrigger/SoundTriggerManager;->startRecognition(Ljava/util/UUID;Landroid/os/Bundle;Landroid/content/ComponentName;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I Landroid/media/soundtrigger/SoundTriggerManager;->stopRecognition(Ljava/util/UUID;)I Landroid/media/soundtrigger/SoundTriggerManager;->unloadSoundModel(Ljava/util/UUID;)I +Landroid/media/SubtitleController;-><init>(Landroid/content/Context;Landroid/media/MediaTimeProvider;Landroid/media/SubtitleController$Listener;)V +Landroid/media/SubtitleController;->hide()V Landroid/media/SubtitleController;->mHandler:Landroid/os/Handler; +Landroid/media/SubtitleController;->registerRenderer(Landroid/media/SubtitleController$Renderer;)V +Landroid/media/SubtitleController;->reset()V +Landroid/media/SubtitleController;->show()V Landroid/media/SubtitleTrack$RenderingWidget;->draw(Landroid/graphics/Canvas;)V Landroid/media/SubtitleTrack$RenderingWidget;->onAttachedToWindow()V Landroid/media/SubtitleTrack$RenderingWidget;->onDetachedFromWindow()V Landroid/media/SubtitleTrack$RenderingWidget;->setOnChangedListener(Landroid/media/SubtitleTrack$RenderingWidget$OnChangedListener;)V Landroid/media/SubtitleTrack$RenderingWidget;->setSize(II)V Landroid/media/ThumbnailUtils;->createImageThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap; +Landroid/media/ThumbnailUtils;->TARGET_SIZE_MICRO_THUMBNAIL:I +Landroid/media/TimedText;->getObject(I)Ljava/lang/Object; Landroid/media/ToneGenerator;->mNativeContext:J +Landroid/media/TtmlRenderer;-><init>(Landroid/content/Context;)V +Landroid/media/tv/TvContract$PreviewProgramColumns;->ASPECT_RATIO_16_9:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->ASPECT_RATIO_1_1:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->ASPECT_RATIO_2_3:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->ASPECT_RATIO_3_2:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->ASPECT_RATIO_4_3:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->AVAILABILITY_AVAILABLE:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->AVAILABILITY_FREE_WITH_SUBSCRIPTION:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->AVAILABILITY_PAID_CONTENT:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_AUTHOR:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_AVAILABILITY:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_BROWSABLE:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_CONTENT_ID:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_DURATION_MILLIS:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_INTENT_URI:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_INTERACTION_COUNT:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_INTERACTION_TYPE:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_INTERNAL_PROVIDER_ID:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_ITEM_COUNT:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_LAST_PLAYBACK_POSITION_MILLIS:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_LIVE:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_LOGO_URI:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_OFFER_PRICE:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_POSTER_ART_ASPECT_RATIO:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_PREVIEW_VIDEO_URI:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_RELEASE_DATE:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_STARTING_PRICE:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_THUMBNAIL_ASPECT_RATIO:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_TRANSIENT:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->COLUMN_TYPE:Ljava/lang/String; +Landroid/media/tv/TvContract$PreviewProgramColumns;->INTERACTION_TYPE_FANS:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->INTERACTION_TYPE_FOLLOWERS:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->INTERACTION_TYPE_LIKES:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->INTERACTION_TYPE_LISTENS:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->INTERACTION_TYPE_THUMBS:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->INTERACTION_TYPE_VIEWERS:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->INTERACTION_TYPE_VIEWS:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_ALBUM:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_ARTIST:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_CHANNEL:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_CLIP:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_EVENT:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_MOVIE:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_PLAYLIST:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_STATION:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_TRACK:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_TV_EPISODE:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_TV_SEASON:I +Landroid/media/tv/TvContract$PreviewProgramColumns;->TYPE_TV_SERIES:I +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_AUDIO_LANGUAGE:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_CANONICAL_GENRE:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_CONTENT_RATING:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_EPISODE_DISPLAY_NUMBER:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_EPISODE_TITLE:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_INTERNAL_PROVIDER_DATA:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_INTERNAL_PROVIDER_FLAG1:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_INTERNAL_PROVIDER_FLAG2:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_INTERNAL_PROVIDER_FLAG3:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_INTERNAL_PROVIDER_FLAG4:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_LONG_DESCRIPTION:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_POSTER_ART_URI:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_REVIEW_RATING:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_REVIEW_RATING_STYLE:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_SEARCHABLE:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_SEASON_DISPLAY_NUMBER:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_SEASON_TITLE:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_SHORT_DESCRIPTION:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_THUMBNAIL_URI:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_TITLE:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_VERSION_NUMBER:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_VIDEO_HEIGHT:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->COLUMN_VIDEO_WIDTH:Ljava/lang/String; +Landroid/media/tv/TvContract$ProgramColumns;->REVIEW_RATING_STYLE_PERCENTAGE:I +Landroid/media/tv/TvContract$ProgramColumns;->REVIEW_RATING_STYLE_STARS:I +Landroid/media/tv/TvContract$ProgramColumns;->REVIEW_RATING_STYLE_THUMBS_UP_DOWN:I +Landroid/media/tv/TvInputInfo;->getComponent()Landroid/content/ComponentName; +Landroid/media/tv/TvInputService$Session;->mOverlayFrame:Landroid/graphics/Rect; Landroid/media/VolumeShaper$Configuration;-><init>(IIIDI[F[F)V Landroid/media/VolumeShaper$Configuration;->mDurationMs:D Landroid/media/VolumeShaper$Configuration;->mId:I @@ -1506,20 +3066,44 @@ Landroid/media/VolumeShaper$Operation;->mXOffset:F Landroid/media/VolumeShaper$State;-><init>(FF)V Landroid/media/VolumeShaper$State;->mVolume:F Landroid/media/VolumeShaper$State;->mXOffset:F +Landroid/media/WebVttRenderer;-><init>(Landroid/content/Context;)V +Landroid/mtp/MtpPropertyList;->append(IIIJ)V +Landroid/mtp/MtpPropertyList;->append(IILjava/lang/String;)V +Landroid/mtp/MtpStorage;->getPath()Ljava/lang/String; +Landroid/mtp/MtpStorage;->getStorageId()I Landroid/net/ConnectivityManager;->ACTION_TETHER_STATE_CHANGED:Ljava/lang/String; Landroid/net/ConnectivityManager;->EXTRA_ACTIVE_TETHER:Ljava/lang/String; +Landroid/net/ConnectivityManager;->EXTRA_AVAILABLE_TETHER:Ljava/lang/String; +Landroid/net/ConnectivityManager;->EXTRA_ERRORED_TETHER:Ljava/lang/String; +Landroid/net/ConnectivityManager;->from(Landroid/content/Context;)Landroid/net/ConnectivityManager; Landroid/net/ConnectivityManager;->getActiveLinkProperties()Landroid/net/LinkProperties; +Landroid/net/ConnectivityManager;->getActiveNetworkInfoForUid(I)Landroid/net/NetworkInfo; +Landroid/net/ConnectivityManager;->getDefaultNetworkCapabilitiesForUser(I)[Landroid/net/NetworkCapabilities; +Landroid/net/ConnectivityManager;->getInstance()Landroid/net/ConnectivityManager; +Landroid/net/ConnectivityManager;->getLastTetherError(Ljava/lang/String;)I Landroid/net/ConnectivityManager;->getLinkProperties(I)Landroid/net/LinkProperties; Landroid/net/ConnectivityManager;->getMobileDataEnabled()Z +Landroid/net/ConnectivityManager;->getNetworkForType(I)Landroid/net/Network; +Landroid/net/ConnectivityManager;->getNetworkTypeName(I)Ljava/lang/String; +Landroid/net/ConnectivityManager;->getTetherableBluetoothRegexs()[Ljava/lang/String; +Landroid/net/ConnectivityManager;->getTetherableIfaces()[Ljava/lang/String; Landroid/net/ConnectivityManager;->getTetherableUsbRegexs()[Ljava/lang/String; Landroid/net/ConnectivityManager;->getTetherableWifiRegexs()[Ljava/lang/String; Landroid/net/ConnectivityManager;->getTetheredIfaces()[Ljava/lang/String; +Landroid/net/ConnectivityManager;->getTetheringErroredIfaces()[Ljava/lang/String; +Landroid/net/ConnectivityManager;->INET_CONDITION_ACTION:Ljava/lang/String; Landroid/net/ConnectivityManager;->isNetworkSupported(I)Z Landroid/net/ConnectivityManager;->isNetworkTypeMobile(I)Z Landroid/net/ConnectivityManager;->mService:Landroid/net/IConnectivityManager; +Landroid/net/ConnectivityManager;->networkCapabilitiesForFeature(ILjava/lang/String;)Landroid/net/NetworkCapabilities; Landroid/net/ConnectivityManager;->registerNetworkFactory(Landroid/os/Messenger;Ljava/lang/String;)V +Landroid/net/ConnectivityManager;->removeRequestForFeature(Landroid/net/NetworkCapabilities;)Z +Landroid/net/ConnectivityManager;->requestNetworkForFeatureLocked(Landroid/net/NetworkCapabilities;)Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager;->requestRouteToHostAddress(ILjava/net/InetAddress;)Z Landroid/net/ConnectivityManager;->setBackgroundDataSetting(Z)V +Landroid/net/ConnectivityManager;->setProcessDefaultNetworkForHostResolution(Landroid/net/Network;)Z +Landroid/net/ConnectivityManager;->setUsbTethering(Z)I +Landroid/net/ConnectivityManager;->sLegacyRequests:Ljava/util/HashMap; Landroid/net/ConnectivityManager;->TYPE_MOBILE_CBS:I Landroid/net/ConnectivityManager;->TYPE_MOBILE_EMERGENCY:I Landroid/net/ConnectivityManager;->TYPE_MOBILE_FOTA:I @@ -1528,6 +3112,11 @@ Landroid/net/ConnectivityManager;->TYPE_MOBILE_IMS:I Landroid/net/ConnectivityManager;->TYPE_NONE:I Landroid/net/ConnectivityManager;->TYPE_PROXY:I Landroid/net/ConnectivityManager;->TYPE_WIFI_P2P:I +Landroid/net/ConnectivityManager;->unregisterNetworkFactory(Landroid/os/Messenger;)V +Landroid/net/http/SslCertificate;->getDigest(Ljava/security/cert/X509Certificate;Ljava/lang/String;)Ljava/lang/String; +Landroid/net/http/SslCertificate;->getSerialNumber(Ljava/security/cert/X509Certificate;)Ljava/lang/String; +Landroid/net/http/SslCertificate;->inflateCertificateView(Landroid/content/Context;)Landroid/view/View; +Landroid/net/http/SslCertificate;->mX509Certificate:Ljava/security/cert/X509Certificate; Landroid/net/http/SslError;->mCertificate:Landroid/net/http/SslCertificate; Landroid/net/IConnectivityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveLinkProperties()Landroid/net/LinkProperties; @@ -1538,24 +3127,133 @@ Landroid/net/IConnectivityManager$Stub$Proxy;->getTetherableIfaces()[Ljava/lang/ Landroid/net/IConnectivityManager$Stub$Proxy;->getTetherableUsbRegexs()[Ljava/lang/String; Landroid/net/IConnectivityManager$Stub$Proxy;->getTetheredIfaces()[Ljava/lang/String; Landroid/net/IConnectivityManager$Stub$Proxy;->mRemote:Landroid/os/IBinder; +Landroid/net/IConnectivityManager$Stub;-><init>()V Landroid/net/IConnectivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IConnectivityManager; Landroid/net/IConnectivityManager;->getActiveLinkProperties()Landroid/net/LinkProperties; Landroid/net/IConnectivityManager;->getActiveNetworkInfo()Landroid/net/NetworkInfo; Landroid/net/IConnectivityManager;->getAllNetworkInfo()[Landroid/net/NetworkInfo; +Landroid/net/IConnectivityManager;->getLastTetherError(Ljava/lang/String;)I +Landroid/net/IConnectivityManager;->getTetherableIfaces()[Ljava/lang/String; +Landroid/net/IConnectivityManager;->getTetherableUsbRegexs()[Ljava/lang/String; +Landroid/net/IConnectivityManager;->getTetherableWifiRegexs()[Ljava/lang/String; Landroid/net/IConnectivityManager;->getTetheredIfaces()[Ljava/lang/String; +Landroid/net/IConnectivityManager;->getTetheringErroredIfaces()[Ljava/lang/String; +Landroid/net/IConnectivityManager;->setAirplaneMode(Z)V +Landroid/net/IConnectivityManager;->startLegacyVpn(Lcom/android/internal/net/VpnProfile;)V +Landroid/net/INetworkManagementEventObserver$Stub;-><init>()V +Landroid/net/INetworkPolicyListener$Stub;-><init>()V Landroid/net/INetworkPolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkPolicyManager; +Landroid/net/INetworkPolicyManager;->getRestrictBackground()Z +Landroid/net/INetworkPolicyManager;->getUidPolicy(I)I +Landroid/net/INetworkPolicyManager;->setNetworkPolicies([Landroid/net/NetworkPolicy;)V +Landroid/net/INetworkPolicyManager;->setRestrictBackground(Z)V +Landroid/net/INetworkPolicyManager;->setUidPolicy(II)V +Landroid/net/INetworkPolicyManager;->snoozeLimit(Landroid/net/NetworkTemplate;)V Landroid/net/INetworkScoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkScoreService; Landroid/net/INetworkStatsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/net/INetworkStatsService$Stub$Proxy;->getMobileIfaces()[Ljava/lang/String; +Landroid/net/INetworkStatsService;->forceUpdate()V +Landroid/net/INetworkStatsService;->getMobileIfaces()[Ljava/lang/String; +Landroid/net/INetworkStatsSession;->close()V +Landroid/net/INetworkStatsSession;->getSummaryForAllUid(Landroid/net/NetworkTemplate;JJZ)Landroid/net/NetworkStats; +Landroid/net/INetworkStatsSession;->getSummaryForNetwork(Landroid/net/NetworkTemplate;JJ)Landroid/net/NetworkStats; +Landroid/net/InterfaceConfiguration;->clearFlag(Ljava/lang/String;)V +Landroid/net/InterfaceConfiguration;->getFlags()Ljava/lang/Iterable; +Landroid/net/InterfaceConfiguration;->setFlag(Ljava/lang/String;)V +Landroid/net/InterfaceConfiguration;->setInterfaceDown()V +Landroid/net/InterfaceConfiguration;->setInterfaceUp()V +Landroid/net/IpConfiguration$IpAssignment;->STATIC:Landroid/net/IpConfiguration$IpAssignment; +Landroid/net/IpConfiguration$ProxySettings;->NONE:Landroid/net/IpConfiguration$ProxySettings; +Landroid/net/IpConfiguration;-><init>(Landroid/net/IpConfiguration$IpAssignment;Landroid/net/IpConfiguration$ProxySettings;Landroid/net/StaticIpConfiguration;Landroid/net/ProxyInfo;)V Landroid/net/IpConfiguration;->httpProxy:Landroid/net/ProxyInfo; +Landroid/net/LinkAddress;->getNetworkPrefixLength()I +Landroid/net/LinkProperties;->addLinkAddress(Landroid/net/LinkAddress;)Z +Landroid/net/LinkProperties;->getAddresses()Ljava/util/List; +Landroid/net/LinkProperties;->getAllAddresses()Ljava/util/List; +Landroid/net/LinkProperties;->getAllLinkAddresses()Ljava/util/List; +Landroid/net/LinkProperties;->isIdenticalInterfaceName(Landroid/net/LinkProperties;)Z Landroid/net/LinkProperties;->setHttpProxy(Landroid/net/ProxyInfo;)V +Landroid/net/LinkQualityInfo;->setDataSampleDuration(I)V +Landroid/net/LinkQualityInfo;->setLastDataSampleTime(J)V +Landroid/net/LinkQualityInfo;->setPacketCount(J)V +Landroid/net/LinkQualityInfo;->setPacketErrorCount(J)V +Landroid/net/LocalSocket;->impl:Landroid/net/LocalSocketImpl; +Landroid/net/LocalSocketImpl;-><init>()V Landroid/net/LocalSocketImpl;->inboundFileDescriptors:[Ljava/io/FileDescriptor; Landroid/net/LocalSocketImpl;->outboundFileDescriptors:[Ljava/io/FileDescriptor; +Landroid/net/MobileLinkQualityInfo;-><init>()V +Landroid/net/MobileLinkQualityInfo;->getMobileNetworkType()I +Landroid/net/MobileLinkQualityInfo;->setCdmaDbm(I)V +Landroid/net/MobileLinkQualityInfo;->setCdmaEcio(I)V +Landroid/net/MobileLinkQualityInfo;->setEvdoDbm(I)V +Landroid/net/MobileLinkQualityInfo;->setEvdoEcio(I)V +Landroid/net/MobileLinkQualityInfo;->setEvdoSnr(I)V +Landroid/net/MobileLinkQualityInfo;->setGsmErrorRate(I)V +Landroid/net/MobileLinkQualityInfo;->setLteCqi(I)V +Landroid/net/MobileLinkQualityInfo;->setLteRsrp(I)V +Landroid/net/MobileLinkQualityInfo;->setLteRsrq(I)V +Landroid/net/MobileLinkQualityInfo;->setLteRssnr(I)V +Landroid/net/MobileLinkQualityInfo;->setLteSignalStrength(I)V +Landroid/net/MobileLinkQualityInfo;->setMobileNetworkType(I)V +Landroid/net/MobileLinkQualityInfo;->setRssi(I)V +Landroid/net/NetworkAgent;->sendNetworkInfo(Landroid/net/NetworkInfo;)V +Landroid/net/NetworkCapabilities;-><init>()V +Landroid/net/NetworkCapabilities;->addCapability(I)Landroid/net/NetworkCapabilities; +Landroid/net/NetworkCapabilities;->addTransportType(I)Landroid/net/NetworkCapabilities; Landroid/net/NetworkCapabilities;->getCapabilities()[I Landroid/net/NetworkCapabilities;->getTransportTypes()[I +Landroid/net/NetworkCapabilities;->mNetworkCapabilities:J +Landroid/net/NetworkCapabilities;->mSignalStrength:I +Landroid/net/NetworkCapabilities;->removeCapability(I)Landroid/net/NetworkCapabilities; +Landroid/net/NetworkCapabilities;->setSignalStrength(I)Landroid/net/NetworkCapabilities; +Landroid/net/NetworkFactory;-><init>(Landroid/os/Looper;Landroid/content/Context;Ljava/lang/String;Landroid/net/NetworkCapabilities;)V +Landroid/net/NetworkFactory;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V +Landroid/net/NetworkFactory;->setScoreFilter(I)V +Landroid/net/NetworkInfo;-><init>(IILjava/lang/String;Ljava/lang/String;)V +Landroid/net/NetworkInfo;-><init>(Landroid/net/NetworkInfo;)V +Landroid/net/NetworkInfo;->setDetailedState(Landroid/net/NetworkInfo$DetailedState;Ljava/lang/String;Ljava/lang/String;)V +Landroid/net/NetworkInfo;->setFailover(Z)V +Landroid/net/NetworkInfo;->setIsAvailable(Z)V +Landroid/net/NetworkInfo;->setRoaming(Z)V +Landroid/net/NetworkInfo;->setSubtype(ILjava/lang/String;)V +Landroid/net/NetworkPolicy;-><init>(Landroid/net/NetworkTemplate;ILjava/lang/String;JJJJZZ)V +Landroid/net/NetworkPolicy;->clearSnooze()V +Landroid/net/NetworkPolicy;->compareTo(Landroid/net/NetworkPolicy;)I +Landroid/net/NetworkPolicy;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/net/NetworkPolicy;->inferred:Z +Landroid/net/NetworkPolicy;->isOverLimit(J)Z +Landroid/net/NetworkPolicy;->isOverWarning(J)Z +Landroid/net/NetworkPolicy;->limitBytes:J +Landroid/net/NetworkPolicy;->metered:Z +Landroid/net/NetworkPolicy;->template:Landroid/net/NetworkTemplate; +Landroid/net/NetworkPolicy;->warningBytes:J +Landroid/net/NetworkPolicyManager;->from(Landroid/content/Context;)Landroid/net/NetworkPolicyManager; +Landroid/net/NetworkPolicyManager;->getNetworkPolicies()[Landroid/net/NetworkPolicy; +Landroid/net/NetworkPolicyManager;->getRestrictBackground()Z +Landroid/net/NetworkPolicyManager;->getUidPolicy(I)I +Landroid/net/NetworkPolicyManager;->getUidsWithPolicy(I)[I Landroid/net/NetworkPolicyManager;->mService:Landroid/net/INetworkPolicyManager; +Landroid/net/NetworkPolicyManager;->registerListener(Landroid/net/INetworkPolicyListener;)V +Landroid/net/NetworkPolicyManager;->setRestrictBackground(Z)V +Landroid/net/NetworkPolicyManager;->setUidPolicy(II)V +Landroid/net/NetworkPolicyManager;->unregisterListener(Landroid/net/INetworkPolicyListener;)V +Landroid/net/NetworkQuotaInfo;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/net/NetworkRequest$Builder;->clearCapabilities()Landroid/net/NetworkRequest$Builder; +Landroid/net/NetworkRequest;->legacyType:I +Landroid/net/NetworkRequest;->requestId:I +Landroid/net/NetworkState;-><init>(Landroid/os/Parcel;)V +Landroid/net/NetworkState;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/net/NetworkStats;-><init>(Landroid/os/Parcel;)V Landroid/net/NetworkStats;->capacity:I +Landroid/net/NetworkStats;->combineAllValues(Landroid/net/NetworkStats;)V +Landroid/net/NetworkStats;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/net/NetworkStats;->defaultNetwork:[I +Landroid/net/NetworkStats;->getTotal(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry; +Landroid/net/NetworkStats;->getTotal(Landroid/net/NetworkStats$Entry;I)Landroid/net/NetworkStats$Entry; +Landroid/net/NetworkStats;->getTotalBytes()J +Landroid/net/NetworkStats;->getTotalIncludingTags(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry; +Landroid/net/NetworkStats;->getUniqueUids()[I +Landroid/net/NetworkStats;->getValues(ILandroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry; Landroid/net/NetworkStats;->iface:[Ljava/lang/String; Landroid/net/NetworkStats;->metered:[I Landroid/net/NetworkStats;->operations:[J @@ -1563,15 +3261,45 @@ Landroid/net/NetworkStats;->roaming:[I Landroid/net/NetworkStats;->rxBytes:[J Landroid/net/NetworkStats;->rxPackets:[J Landroid/net/NetworkStats;->set:[I +Landroid/net/NetworkStats;->size()I Landroid/net/NetworkStats;->size:I Landroid/net/NetworkStats;->tag:[I Landroid/net/NetworkStats;->txBytes:[J Landroid/net/NetworkStats;->txPackets:[J Landroid/net/NetworkStats;->uid:[I +Landroid/net/NetworkStatsHistory$Entry;->bucketDuration:J +Landroid/net/NetworkStatsHistory$Entry;->bucketStart:J Landroid/net/NetworkStatsHistory$Entry;->rxBytes:J +Landroid/net/NetworkStatsHistory$Entry;->rxPackets:J +Landroid/net/NetworkStatsHistory$Entry;->txPackets:J +Landroid/net/NetworkStatsHistory;-><init>(J)V +Landroid/net/NetworkStatsHistory;-><init>(Landroid/os/Parcel;)V +Landroid/net/NetworkStatsHistory;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/net/NetworkStatsHistory;->getEnd()J +Landroid/net/NetworkStatsHistory;->getIndexBefore(J)I +Landroid/net/NetworkStatsHistory;->getValues(ILandroid/net/NetworkStatsHistory$Entry;)Landroid/net/NetworkStatsHistory$Entry; +Landroid/net/NetworkStatsHistory;->getValues(JJJLandroid/net/NetworkStatsHistory$Entry;)Landroid/net/NetworkStatsHistory$Entry; +Landroid/net/NetworkStatsHistory;->recordEntireHistory(Landroid/net/NetworkStatsHistory;)V +Landroid/net/NetworkStatsHistory;->size()I +Landroid/net/NetworkTemplate;->buildTemplateEthernet()Landroid/net/NetworkTemplate; +Landroid/net/NetworkTemplate;->buildTemplateMobileWildcard()Landroid/net/NetworkTemplate; Landroid/net/NetworkTemplate;->buildTemplateWifi()Landroid/net/NetworkTemplate; +Landroid/net/NetworkTemplate;->buildTemplateWifiWildcard()Landroid/net/NetworkTemplate; +Landroid/net/NetworkTemplate;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/net/NetworkTemplate;->getMatchRule()I +Landroid/net/NetworkTemplate;->getSubscriberId()Ljava/lang/String; +Landroid/net/NetworkTemplate;->normalize(Landroid/net/NetworkTemplate;[Ljava/lang/String;)Landroid/net/NetworkTemplate; +Landroid/net/NetworkUtils;->intToInetAddress(I)Ljava/net/InetAddress; +Landroid/net/NetworkUtils;->numericToInetAddress(Ljava/lang/String;)Ljava/net/InetAddress; +Landroid/net/NetworkUtils;->prefixLengthToNetmaskInt(I)I +Landroid/net/NetworkUtils;->trimV4AddrZeros(Ljava/lang/String;)Ljava/lang/String; +Landroid/net/nsd/INsdManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/nsd/INsdManager; +Landroid/net/nsd/INsdManager;->getMessenger()Landroid/os/Messenger; +Landroid/net/nsd/NsdServiceInfo;->setAttribute(Ljava/lang/String;[B)V Landroid/net/Proxy;->getProxy(Landroid/content/Context;Ljava/lang/String;)Ljava/net/Proxy; Landroid/net/ProxyInfo;-><init>(Ljava/lang/String;ILjava/lang/String;)V +Landroid/net/RouteInfo;-><init>(Landroid/net/LinkAddress;Ljava/net/InetAddress;Ljava/lang/String;)V +Landroid/net/RouteInfo;-><init>(Ljava/net/InetAddress;)V Landroid/net/SntpClient;-><init>()V Landroid/net/SSLCertificateSocketFactory;-><init>(ILandroid/net/SSLSessionCache;Z)V Landroid/net/SSLCertificateSocketFactory;->castToOpenSSLSocket(Ljava/net/Socket;)Lcom/android/org/conscrypt/OpenSSLSocketImpl; @@ -1604,22 +3332,79 @@ Landroid/net/TrafficStats;->getRxBytes(Ljava/lang/String;)J Landroid/net/TrafficStats;->getStatsService()Landroid/net/INetworkStatsService; Landroid/net/TrafficStats;->getTxBytes(Ljava/lang/String;)J Landroid/net/Uri;-><init>()V +Landroid/net/Uri;->getCanonicalUri()Landroid/net/Uri; +Landroid/net/Uri;->toSafeString()Ljava/lang/String; +Landroid/net/VpnService$Builder;->mAddresses:Ljava/util/List; +Landroid/net/VpnService$Builder;->mRoutes:Ljava/util/List; +Landroid/net/WebAddress;->getAuthInfo()Ljava/lang/String; +Landroid/net/WebAddress;->getHost()Ljava/lang/String; +Landroid/net/WebAddress;->getPath()Ljava/lang/String; +Landroid/net/WebAddress;->getPort()I +Landroid/net/WebAddress;->getScheme()Ljava/lang/String; +Landroid/net/WebAddress;->mHost:Ljava/lang/String; +Landroid/net/WebAddress;->mPath:Ljava/lang/String; +Landroid/net/WebAddress;->mPort:I +Landroid/net/WebAddress;->mScheme:Ljava/lang/String; +Landroid/net/WebAddress;->setHost(Ljava/lang/String;)V +Landroid/net/WebAddress;->setPath(Ljava/lang/String;)V Landroid/net/wifi/IWifiManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/net/wifi/IWifiManager$Stub;-><init>()V Landroid/net/wifi/IWifiManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiManager; +Landroid/net/wifi/IWifiManager;->getCurrentNetwork()Landroid/net/Network; +Landroid/net/wifi/IWifiManager;->getWifiApConfiguration()Landroid/net/wifi/WifiConfiguration; +Landroid/net/wifi/IWifiManager;->getWifiApEnabledState()I Landroid/net/wifi/IWifiScanner$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/net/wifi/IWifiScanner$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/net/wifi/IWifiScanner$Stub;-><init>()V Landroid/net/wifi/IWifiScanner$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiScanner; +Landroid/net/wifi/p2p/IWifiP2pManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/p2p/IWifiP2pManager; +Landroid/net/wifi/p2p/WifiP2pConfig;-><init>(Ljava/lang/String;)V +Landroid/net/wifi/p2p/WifiP2pConfig;->MIN_GROUP_OWNER_INTENT:I +Landroid/net/wifi/p2p/WifiP2pConfig;->netId:I +Landroid/net/wifi/p2p/WifiP2pDevice;-><init>(Ljava/lang/String;)V +Landroid/net/wifi/p2p/WifiP2pDevice;->deviceCapability:I +Landroid/net/wifi/p2p/WifiP2pDevice;->groupCapability:I +Landroid/net/wifi/p2p/WifiP2pDevice;->update(Landroid/net/wifi/p2p/WifiP2pDevice;)V +Landroid/net/wifi/p2p/WifiP2pDevice;->wfdInfo:Landroid/net/wifi/p2p/WifiP2pWfdInfo; +Landroid/net/wifi/p2p/WifiP2pDevice;->wpsConfigMethodsSupported:I +Landroid/net/wifi/p2p/WifiP2pDeviceList;->remove(Ljava/lang/String;)Landroid/net/wifi/p2p/WifiP2pDevice; +Landroid/net/wifi/p2p/WifiP2pDeviceList;->update(Landroid/net/wifi/p2p/WifiP2pDevice;)V +Landroid/net/wifi/p2p/WifiP2pGroup;-><init>(Ljava/lang/String;)V Landroid/net/wifi/p2p/WifiP2pGroup;->getNetworkId()I +Landroid/net/wifi/p2p/WifiP2pGroup;->isClientListEmpty()Z +Landroid/net/wifi/p2p/WifiP2pGroup;->setInterface(Ljava/lang/String;)V +Landroid/net/wifi/p2p/WifiP2pGroup;->setIsGroupOwner(Z)V +Landroid/net/wifi/p2p/WifiP2pGroup;->setNetworkId(I)V Landroid/net/wifi/p2p/WifiP2pGroup;->TEMPORARY_NET_ID:I +Landroid/net/wifi/p2p/WifiP2pGroupList;-><init>(Landroid/net/wifi/p2p/WifiP2pGroupList;Landroid/net/wifi/p2p/WifiP2pGroupList$GroupDeleteListener;)V Landroid/net/wifi/p2p/WifiP2pGroupList;->getGroupList()Ljava/util/Collection; +Landroid/net/wifi/p2p/WifiP2pGroupList;->mGroups:Landroid/util/LruCache; Landroid/net/wifi/p2p/WifiP2pManager$Channel;->mAsyncChannel:Lcom/android/internal/util/AsyncChannel; Landroid/net/wifi/p2p/WifiP2pManager$Channel;->putListener(Ljava/lang/Object;)I +Landroid/net/wifi/p2p/WifiP2pManager;-><init>(Landroid/net/wifi/p2p/IWifiP2pManager;)V Landroid/net/wifi/p2p/WifiP2pManager;->CREATE_GROUP:I Landroid/net/wifi/p2p/WifiP2pManager;->deletePersistentGroup(Landroid/net/wifi/p2p/WifiP2pManager$Channel;ILandroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V Landroid/net/wifi/p2p/WifiP2pManager;->requestPersistentGroupInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$PersistentGroupInfoListener;)V Landroid/net/wifi/p2p/WifiP2pManager;->setDeviceName(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Ljava/lang/String;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V +Landroid/net/wifi/p2p/WifiP2pManager;->setMiracastMode(I)V +Landroid/net/wifi/p2p/WifiP2pManager;->setWFDInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pWfdInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V Landroid/net/wifi/p2p/WifiP2pManager;->setWifiP2pChannels(Landroid/net/wifi/p2p/WifiP2pManager$Channel;IILandroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V +Landroid/net/wifi/p2p/WifiP2pManager;->startWps(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/WpsInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V +Landroid/net/wifi/p2p/WifiP2pProvDiscEvent;-><init>()V +Landroid/net/wifi/p2p/WifiP2pProvDiscEvent;->device:Landroid/net/wifi/p2p/WifiP2pDevice; +Landroid/net/wifi/p2p/WifiP2pProvDiscEvent;->event:I +Landroid/net/wifi/p2p/WifiP2pProvDiscEvent;->pin:Ljava/lang/String; +Landroid/net/wifi/p2p/WifiP2pWfdInfo;-><init>()V +Landroid/net/wifi/p2p/WifiP2pWfdInfo;-><init>(III)V +Landroid/net/wifi/p2p/WifiP2pWfdInfo;-><init>(Landroid/net/wifi/p2p/WifiP2pWfdInfo;)V +Landroid/net/wifi/p2p/WifiP2pWfdInfo;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/net/wifi/p2p/WifiP2pWfdInfo;->getDeviceType()I +Landroid/net/wifi/p2p/WifiP2pWfdInfo;->isWfdEnabled()Z +Landroid/net/wifi/p2p/WifiP2pWfdInfo;->setControlPort(I)V +Landroid/net/wifi/p2p/WifiP2pWfdInfo;->setDeviceType(I)Z +Landroid/net/wifi/p2p/WifiP2pWfdInfo;->setMaxThroughput(I)V +Landroid/net/wifi/p2p/WifiP2pWfdInfo;->setSessionAvailable(Z)V +Landroid/net/wifi/p2p/WifiP2pWfdInfo;->setWfdEnabled(Z)V Landroid/net/wifi/ScanResult$InformationElement;->bytes:[B Landroid/net/wifi/ScanResult$InformationElement;->EID_BSS_LOAD:I Landroid/net/wifi/ScanResult$InformationElement;->EID_ERP:I @@ -1637,52 +3422,161 @@ Landroid/net/wifi/ScanResult$InformationElement;->EID_VSA:I Landroid/net/wifi/ScanResult$InformationElement;->id:I Landroid/net/wifi/ScanResult;->anqpDomainId:I Landroid/net/wifi/ScanResult;->anqpLines:Ljava/util/List; +Landroid/net/wifi/ScanResult;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/net/wifi/ScanResult;->distanceCm:I Landroid/net/wifi/ScanResult;->distanceSdCm:I Landroid/net/wifi/ScanResult;->flags:J Landroid/net/wifi/ScanResult;->hessid:J Landroid/net/wifi/ScanResult;->informationElements:[Landroid/net/wifi/ScanResult$InformationElement; +Landroid/net/wifi/ScanResult;->is80211McRTTResponder:Z Landroid/net/wifi/ScanResult;->numUsage:I Landroid/net/wifi/ScanResult;->seen:J Landroid/net/wifi/ScanResult;->wifiSsid:Landroid/net/wifi/WifiSsid; +Landroid/net/wifi/WifiConfiguration;-><init>(Landroid/net/wifi/WifiConfiguration;)V Landroid/net/wifi/WifiConfiguration;->apBand:I Landroid/net/wifi/WifiConfiguration;->apChannel:I +Landroid/net/wifi/WifiConfiguration;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/net/wifi/WifiConfiguration;->defaultGwMacAddress:Ljava/lang/String; +Landroid/net/wifi/WifiConfiguration;->getAuthType()I +Landroid/net/wifi/WifiConfiguration;->getIpAssignment()Landroid/net/IpConfiguration$IpAssignment; +Landroid/net/wifi/WifiConfiguration;->getIpConfiguration()Landroid/net/IpConfiguration; +Landroid/net/wifi/WifiConfiguration;->getPrintableSsid()Ljava/lang/String; +Landroid/net/wifi/WifiConfiguration;->getProxySettings()Landroid/net/IpConfiguration$ProxySettings; +Landroid/net/wifi/WifiConfiguration;->getStaticIpConfiguration()Landroid/net/StaticIpConfiguration; +Landroid/net/wifi/WifiConfiguration;->INVALID_RSSI:I +Landroid/net/wifi/WifiConfiguration;->isEnterprise()Z Landroid/net/wifi/WifiConfiguration;->lastConnectUid:I Landroid/net/wifi/WifiConfiguration;->mIpConfiguration:Landroid/net/IpConfiguration; +Landroid/net/wifi/WifiConfiguration;->noInternetAccessExpected:Z +Landroid/net/wifi/WifiConfiguration;->numNoInternetAccessReports:I +Landroid/net/wifi/WifiConfiguration;->selfAdded:Z Landroid/net/wifi/WifiConfiguration;->setIpAssignment(Landroid/net/IpConfiguration$IpAssignment;)V +Landroid/net/wifi/WifiConfiguration;->setIpConfiguration(Landroid/net/IpConfiguration;)V +Landroid/net/wifi/WifiConfiguration;->setProxy(Landroid/net/IpConfiguration$ProxySettings;Landroid/net/ProxyInfo;)V +Landroid/net/wifi/WifiConfiguration;->setProxySettings(Landroid/net/IpConfiguration$ProxySettings;)V Landroid/net/wifi/WifiConfiguration;->setStaticIpConfiguration(Landroid/net/StaticIpConfiguration;)V +Landroid/net/wifi/WifiConfiguration;->shared:Z Landroid/net/wifi/WifiConfiguration;->validatedInternetAccess:Z +Landroid/net/wifi/WifiConfiguration;->wepKeyVarNames:[Ljava/lang/String; Landroid/net/wifi/WifiEnterpriseConfig;->getCaCertificateAlias()Ljava/lang/String; Landroid/net/wifi/WifiEnterpriseConfig;->getClientCertificateAlias()Ljava/lang/String; +Landroid/net/wifi/WifiEnterpriseConfig;->mFields:Ljava/util/HashMap; +Landroid/net/wifi/WifiEnterpriseConfig;->setCaCertificateAlias(Ljava/lang/String;)V +Landroid/net/wifi/WifiEnterpriseConfig;->setClientCertificateAlias(Ljava/lang/String;)V +Landroid/net/wifi/WifiInfo;-><init>()V +Landroid/net/wifi/WifiInfo;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/net/wifi/WifiInfo;->DEFAULT_MAC_ADDRESS:Ljava/lang/String; Landroid/net/wifi/WifiInfo;->getMeteredHint()Z Landroid/net/wifi/WifiInfo;->getWifiSsid()Landroid/net/wifi/WifiSsid; +Landroid/net/wifi/WifiInfo;->INVALID_RSSI:I +Landroid/net/wifi/WifiInfo;->isEphemeral()Z +Landroid/net/wifi/WifiInfo;->mIpAddress:Ljava/net/InetAddress; Landroid/net/wifi/WifiInfo;->mMacAddress:Ljava/lang/String; +Landroid/net/wifi/WifiInfo;->mWifiSsid:Landroid/net/wifi/WifiSsid; Landroid/net/wifi/WifiInfo;->removeDoubleQuotes(Ljava/lang/String;)Ljava/lang/String; +Landroid/net/wifi/WifiInfo;->setBSSID(Ljava/lang/String;)V +Landroid/net/wifi/WifiInfo;->setLinkSpeed(I)V +Landroid/net/wifi/WifiInfo;->setMacAddress(Ljava/lang/String;)V +Landroid/net/wifi/WifiInfo;->setNetworkId(I)V +Landroid/net/wifi/WifiInfo;->setRssi(I)V +Landroid/net/wifi/WifiInfo;->setSupplicantState(Landroid/net/wifi/SupplicantState;)V +Landroid/net/wifi/WifiInfo;->setSupplicantState(Ljava/lang/String;)V Landroid/net/wifi/WifiManager;->cancelLocalOnlyHotspotRequest()V Landroid/net/wifi/WifiManager;->connect(ILandroid/net/wifi/WifiManager$ActionListener;)V +Landroid/net/wifi/WifiManager;->disable(ILandroid/net/wifi/WifiManager$ActionListener;)V +Landroid/net/wifi/WifiManager;->enableVerboseLogging(I)V Landroid/net/wifi/WifiManager;->forget(ILandroid/net/wifi/WifiManager$ActionListener;)V +Landroid/net/wifi/WifiManager;->getCurrentNetwork()Landroid/net/Network; +Landroid/net/wifi/WifiManager;->getMatchingWifiConfig(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/WifiConfiguration; +Landroid/net/wifi/WifiManager;->getVerboseLoggingLevel()I +Landroid/net/wifi/WifiManager;->getWifiServiceMessenger()Landroid/os/Messenger; +Landroid/net/wifi/WifiManager;->initializeMulticastFiltering()Z Landroid/net/wifi/WifiManager;->isDualBandSupported()Z +Landroid/net/wifi/WifiManager;->LINK_CONFIGURATION_CHANGED_ACTION:Ljava/lang/String; +Landroid/net/wifi/WifiManager;->mActiveLockCount:I +Landroid/net/wifi/WifiManager;->MAX_RSSI:I +Landroid/net/wifi/WifiManager;->MIN_RSSI:I Landroid/net/wifi/WifiManager;->mService:Landroid/net/wifi/IWifiManager; +Landroid/net/wifi/WifiManager;->RSSI_LEVELS:I Landroid/net/wifi/WifiManager;->save(Landroid/net/wifi/WifiConfiguration;Landroid/net/wifi/WifiManager$ActionListener;)V +Landroid/net/wifi/WifiManager;->WIFI_FREQUENCY_BAND_2GHZ:I +Landroid/net/wifi/WifiManager;->WIFI_FREQUENCY_BAND_5GHZ:I +Landroid/net/wifi/WifiManager;->WIFI_FREQUENCY_BAND_AUTO:I +Landroid/net/wifi/WifiSsid;->createFromAsciiEncoded(Ljava/lang/String;)Landroid/net/wifi/WifiSsid; +Landroid/net/wifi/WifiSsid;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/net/wifi/WifiSsid;->getOctets()[B Landroid/net/wifi/WifiSsid;->NONE:Ljava/lang/String; +Landroid/net/wifi/WifiSsid;->octets:Ljava/io/ByteArrayOutputStream; +Landroid/nfc/cardemulation/AidGroup;-><init>(Ljava/lang/String;Ljava/lang/String;)V +Landroid/nfc/cardemulation/AidGroup;->aids:Ljava/util/List; +Landroid/nfc/cardemulation/AidGroup;->category:Ljava/lang/String; +Landroid/nfc/cardemulation/AidGroup;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/nfc/cardemulation/AidGroup; +Landroid/nfc/cardemulation/AidGroup;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/nfc/cardemulation/AidGroup;->description:Ljava/lang/String; +Landroid/nfc/cardemulation/AidGroup;->getAids()Ljava/util/List; +Landroid/nfc/cardemulation/AidGroup;->getCategory()Ljava/lang/String; +Landroid/nfc/cardemulation/AidGroup;->writeAsXml(Lorg/xmlpull/v1/XmlSerializer;)V +Landroid/nfc/cardemulation/ApduServiceInfo;-><init>(Landroid/content/pm/PackageManager;Landroid/content/pm/ResolveInfo;Z)V +Landroid/nfc/cardemulation/ApduServiceInfo;-><init>(Landroid/content/pm/ResolveInfo;ZLjava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;ZIILjava/lang/String;)V +Landroid/nfc/cardemulation/ApduServiceInfo;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/nfc/cardemulation/ApduServiceInfo;->getDescription()Ljava/lang/String; +Landroid/nfc/cardemulation/ApduServiceInfo;->getSettingsActivityName()Ljava/lang/String; +Landroid/nfc/cardemulation/ApduServiceInfo;->getUid()I +Landroid/nfc/cardemulation/ApduServiceInfo;->isOnHost()Z +Landroid/nfc/cardemulation/ApduServiceInfo;->loadBanner(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable; +Landroid/nfc/cardemulation/ApduServiceInfo;->mDynamicAidGroups:Ljava/util/HashMap; +Landroid/nfc/cardemulation/ApduServiceInfo;->mService:Landroid/content/pm/ResolveInfo; +Landroid/nfc/cardemulation/ApduServiceInfo;->mStaticAidGroups:Ljava/util/HashMap; +Landroid/nfc/cardemulation/ApduServiceInfo;->requiresUnlock()Z +Landroid/nfc/ErrorCodes;->isError(I)Z +Landroid/nfc/INfcAdapterExtras;->authenticate(Ljava/lang/String;[B)V +Landroid/nfc/INfcAdapterExtras;->close(Ljava/lang/String;Landroid/os/IBinder;)Landroid/os/Bundle; +Landroid/nfc/INfcAdapterExtras;->getCardEmulationRoute(Ljava/lang/String;)I +Landroid/nfc/INfcAdapterExtras;->open(Ljava/lang/String;Landroid/os/IBinder;)Landroid/os/Bundle; +Landroid/nfc/INfcAdapterExtras;->setCardEmulationRoute(Ljava/lang/String;I)V +Landroid/nfc/INfcAdapterExtras;->transceive(Ljava/lang/String;[B)Landroid/os/Bundle; +Landroid/nfc/NdefRecord;->mId:[B +Landroid/nfc/NfcActivityManager;->mAdapter:Landroid/nfc/NfcAdapter; +Landroid/nfc/NfcAdapter;->attemptDeadServiceRecovery(Ljava/lang/Exception;)V Landroid/nfc/NfcAdapter;->getAdapterState()I +Landroid/nfc/NfcAdapter;->getContext()Landroid/content/Context; Landroid/nfc/NfcAdapter;->getDefaultAdapter()Landroid/nfc/NfcAdapter; Landroid/nfc/NfcAdapter;->getNfcAdapter(Landroid/content/Context;)Landroid/nfc/NfcAdapter; +Landroid/nfc/NfcAdapter;->getNfcAdapterExtrasInterface()Landroid/nfc/INfcAdapterExtras; +Landroid/nfc/NfcAdapter;->getService()Landroid/nfc/INfcAdapter; Landroid/nfc/NfcAdapter;->setNdefPushMessageCallback(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback;Landroid/app/Activity;I)V +Landroid/nfc/NfcAdapter;->sService:Landroid/nfc/INfcAdapter; +Landroid/nfc/NfcManager;-><init>(Landroid/content/Context;)V +Landroid/nfc/Tag;->getServiceHandle()I +Landroid/nfc/Tag;->getTagService()Landroid/nfc/INfcTag; +Landroid/nfc/Tag;->mId:[B +Landroid/opengl/EGL14;->eglGetDisplay(J)Landroid/opengl/EGLDisplay; +Landroid/opengl/GLES20;->glGetActiveAttrib(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V +Landroid/opengl/GLES20;->glGetActiveUniform(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V Landroid/opengl/GLSurfaceView$EglHelper;->mEglContext:Ljavax/microedition/khronos/egl/EGLContext; Landroid/opengl/GLSurfaceView$GLThread;->mEglHelper:Landroid/opengl/GLSurfaceView$EglHelper; Landroid/opengl/GLSurfaceView;->mGLThread:Landroid/opengl/GLSurfaceView$GLThread; Landroid/opengl/GLSurfaceView;->mRenderer:Landroid/opengl/GLSurfaceView$Renderer; +Landroid/os/AsyncResult;->forMessage(Landroid/os/Message;)Landroid/os/AsyncResult; Landroid/os/AsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; Landroid/os/AsyncTask;->mStatus:Landroid/os/AsyncTask$Status; Landroid/os/AsyncTask;->mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; Landroid/os/AsyncTask;->mWorker:Landroid/os/AsyncTask$WorkerRunnable; Landroid/os/AsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; Landroid/os/AsyncTask;->setDefaultExecutor(Ljava/util/concurrent/Executor;)V +Landroid/os/BaseBundle;->mMap:Landroid/util/ArrayMap; +Landroid/os/BaseBundle;->mParcelledData:Landroid/os/Parcel; +Landroid/os/BaseBundle;->unparcel()V +Landroid/os/BatteryManager;->EXTRA_CHARGE_COUNTER:Ljava/lang/String; +Landroid/os/BatteryManager;->EXTRA_INVALID_CHARGER:Ljava/lang/String; +Landroid/os/BatteryManager;->EXTRA_MAX_CHARGING_CURRENT:Ljava/lang/String; +Landroid/os/BatteryManager;->EXTRA_MAX_CHARGING_VOLTAGE:Ljava/lang/String; +Landroid/os/BatteryStats$Counter;-><init>()V Landroid/os/BatteryStats$Counter;->getCountLocked(I)I +Landroid/os/BatteryStats$HistoryItem;->batteryHealth:B +Landroid/os/BatteryStats$HistoryItem;->batteryPlugType:B +Landroid/os/BatteryStats$HistoryItem;->batteryStatus:B +Landroid/os/BatteryStats$HistoryItem;->batteryVoltage:C Landroid/os/BatteryStats$HistoryItem;->CMD_UPDATE:B Landroid/os/BatteryStats$HistoryItem;->states2:I Landroid/os/BatteryStats$Timer;->getTotalTimeLocked(JI)J @@ -1701,26 +3595,46 @@ Landroid/os/BatteryStats$Uid$Proc;->getSystemTime(I)J Landroid/os/BatteryStats$Uid$Proc;->getUserTime(I)J Landroid/os/BatteryStats$Uid$Sensor;->getHandle()I Landroid/os/BatteryStats$Uid$Sensor;->getSensorTime()Landroid/os/BatteryStats$Timer; +Landroid/os/BatteryStats$Uid$Sensor;->GPS:I +Landroid/os/BatteryStats$Uid$Wakelock;-><init>()V Landroid/os/BatteryStats$Uid;->getAudioTurnedOnTimer()Landroid/os/BatteryStats$Timer; Landroid/os/BatteryStats$Uid;->getFullWifiLockTime(JI)J +Landroid/os/BatteryStats$Uid;->getMobileRadioActiveTime(I)J +Landroid/os/BatteryStats$Uid;->getNetworkActivityBytes(II)J Landroid/os/BatteryStats$Uid;->getPackageStats()Landroid/util/ArrayMap; Landroid/os/BatteryStats$Uid;->getProcessStats()Landroid/util/ArrayMap; Landroid/os/BatteryStats$Uid;->getSensorStats()Landroid/util/SparseArray; Landroid/os/BatteryStats$Uid;->getUid()I Landroid/os/BatteryStats$Uid;->getVideoTurnedOnTimer()Landroid/os/BatteryStats$Timer; +Landroid/os/BatteryStats$Uid;->getWakelockStats()Landroid/util/ArrayMap; +Landroid/os/BatteryStats$Uid;->getWifiBatchedScanTime(IJI)J Landroid/os/BatteryStats$Uid;->getWifiMulticastTime(JI)J Landroid/os/BatteryStats$Uid;->getWifiScanTime(JI)J +Landroid/os/BatteryStats;->computeBatteryTimeRemaining(J)J +Landroid/os/BatteryStats;->computeBatteryUptime(JI)J +Landroid/os/BatteryStats;->computeChargeTimeRemaining(J)J +Landroid/os/BatteryStats;->getMobileRadioActiveTime(JI)J +Landroid/os/BatteryStats;->getNetworkActivityBytes(II)J Landroid/os/BatteryStats;->getUidStats()Landroid/util/SparseArray; Landroid/os/BatteryStats;->NUM_DATA_CONNECTION_TYPES:I +Landroid/os/BatteryStats;->NUM_SCREEN_BRIGHTNESS_BINS:I Landroid/os/BatteryStats;->startIteratingHistoryLocked()Z +Landroid/os/BatteryStats;->STATS_CURRENT:I +Landroid/os/BatteryStats;->WAKE_TYPE_PARTIAL:I Landroid/os/Binder;->execTransact(IJJI)Z Landroid/os/Binder;->mObject:J Landroid/os/Build$VERSION;->ACTIVE_CODENAMES:[Ljava/lang/String; +Landroid/os/Build;->getLong(Ljava/lang/String;)J Landroid/os/Build;->getString(Ljava/lang/String;)Ljava/lang/String; Landroid/os/Build;->IS_DEBUGGABLE:Z Landroid/os/Build;->IS_EMULATOR:Z +Landroid/os/Bundle;->filterValues()Landroid/os/Bundle; +Landroid/os/Bundle;->forPair(Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle; Landroid/os/Bundle;->getIBinder(Ljava/lang/String;)Landroid/os/IBinder; +Landroid/os/Bundle;->getSize()I Landroid/os/Bundle;->putIBinder(Ljava/lang/String;Landroid/os/IBinder;)V +Landroid/os/Bundle;->putParcelableList(Ljava/lang/String;Ljava/util/List;)V +Landroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)Landroid/os/Bundle; Landroid/os/Debug$MemoryInfo;->dalvikPrivateClean:I Landroid/os/Debug$MemoryInfo;->dalvikRss:I Landroid/os/Debug$MemoryInfo;->dalvikSharedClean:I @@ -1732,6 +3646,13 @@ Landroid/os/Debug$MemoryInfo;->getOtherPrivate(I)I Landroid/os/Debug$MemoryInfo;->getOtherPrivateDirty(I)I Landroid/os/Debug$MemoryInfo;->getOtherPss(I)I Landroid/os/Debug$MemoryInfo;->getOtherSharedDirty(I)I +Landroid/os/Debug$MemoryInfo;->getSummaryCode()I +Landroid/os/Debug$MemoryInfo;->getSummaryGraphics()I +Landroid/os/Debug$MemoryInfo;->getSummaryJavaHeap()I +Landroid/os/Debug$MemoryInfo;->getSummaryNativeHeap()I +Landroid/os/Debug$MemoryInfo;->getSummaryPrivateOther()I +Landroid/os/Debug$MemoryInfo;->getSummaryStack()I +Landroid/os/Debug$MemoryInfo;->getSummarySystem()I Landroid/os/Debug$MemoryInfo;->getTotalUss()I Landroid/os/Debug$MemoryInfo;->hasSwappedOutPss:Z Landroid/os/Debug$MemoryInfo;->nativePrivateClean:I @@ -1751,17 +3672,39 @@ Landroid/os/Debug$MemoryInfo;->otherSwappedOut:I Landroid/os/Debug$MemoryInfo;->otherSwappedOutPss:I Landroid/os/Debug;-><init>()V Landroid/os/Debug;->countInstancesOfClass(Ljava/lang/Class;)J +Landroid/os/Debug;->dumpNativeHeap(Ljava/io/FileDescriptor;)V Landroid/os/Debug;->dumpReferenceTables()V +Landroid/os/Debug;->getCaller()Ljava/lang/String; +Landroid/os/Debug;->getCallers(I)Ljava/lang/String; +Landroid/os/Debug;->getMemInfo([J)V +Landroid/os/Debug;->getMemoryInfo(ILandroid/os/Debug$MemoryInfo;)V Landroid/os/DropBoxManager;->mService:Lcom/android/internal/os/IDropBoxManagerService; +Landroid/os/Environment$UserEnvironment;-><init>(I)V +Landroid/os/Environment$UserEnvironment;->getExternalDirs()[Ljava/io/File; +Landroid/os/Environment$UserEnvironment;->getExternalStorageDirectory()Ljava/io/File; +Landroid/os/Environment$UserEnvironment;->getExternalStoragePublicDirectory(Ljava/lang/String;)Ljava/io/File; +Landroid/os/Environment;->buildExternalStorageAndroidDataDirs()[Ljava/io/File; +Landroid/os/Environment;->buildExternalStorageAppCacheDirs(Ljava/lang/String;)[Ljava/io/File; Landroid/os/Environment;->buildExternalStorageAppDataDirs(Ljava/lang/String;)[Ljava/io/File; +Landroid/os/Environment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File; +Landroid/os/Environment;->buildExternalStorageAppMediaDirs(Ljava/lang/String;)[Ljava/io/File; +Landroid/os/Environment;->buildExternalStorageAppObbDirs(Ljava/lang/String;)[Ljava/io/File; +Landroid/os/Environment;->getLegacyExternalStorageObbDirectory()Ljava/io/File; +Landroid/os/Environment;->getOemDirectory()Ljava/io/File; Landroid/os/Environment;->getStorageDirectory()Ljava/io/File; Landroid/os/Environment;->getVendorDirectory()Ljava/io/File; +Landroid/os/Environment;->initForCurrentUser()V Landroid/os/Environment;->maybeTranslateEmulatedPathToInternal(Ljava/io/File;)Ljava/io/File; +Landroid/os/Environment;->sCurrentUser:Landroid/os/Environment$UserEnvironment; Landroid/os/FileObserver$ObserverThread;->onEvent(IILjava/lang/String;)V +Landroid/os/FileObserver;->s_observerThread:Landroid/os/FileObserver$ObserverThread; +Landroid/os/FileUtils;-><init>()V Landroid/os/FileUtils;->checksumCrc32(Ljava/io/File;)J Landroid/os/FileUtils;->copyFile(Ljava/io/File;Ljava/io/File;)Z Landroid/os/FileUtils;->copyToFile(Ljava/io/InputStream;Ljava/io/File;)Z +Landroid/os/FileUtils;->deleteContents(Ljava/io/File;)Z Landroid/os/FileUtils;->deleteOlderFiles(Ljava/io/File;IJ)Z +Landroid/os/FileUtils;->isFilenameSafe(Ljava/io/File;)Z Landroid/os/FileUtils;->readTextFile(Ljava/io/File;ILjava/lang/String;)Ljava/lang/String; Landroid/os/FileUtils;->setPermissions(Ljava/io/File;III)I Landroid/os/FileUtils;->setPermissions(Ljava/io/FileDescriptor;III)I @@ -1771,6 +3714,7 @@ Landroid/os/FileUtils;->stringToFile(Ljava/lang/String;Ljava/lang/String;)V Landroid/os/FileUtils;->sync(Ljava/io/FileOutputStream;)Z Landroid/os/Handler;-><init>(Z)V Landroid/os/Handler;->getIMessenger()Landroid/os/IMessenger; +Landroid/os/Handler;->getPostMessage(Ljava/lang/Runnable;Ljava/lang/Object;)Landroid/os/Message; Landroid/os/Handler;->hasCallbacks(Ljava/lang/Runnable;)Z Landroid/os/Handler;->mCallback:Landroid/os/Handler$Callback; Landroid/os/Handler;->mMessenger:Landroid/os/IMessenger; @@ -1786,39 +3730,75 @@ Landroid/os/health/HealthStatsWriter;->addStats(ILjava/lang/String;Landroid/os/h Landroid/os/health/HealthStatsWriter;->addTimer(IIJ)V Landroid/os/health/HealthStatsWriter;->addTimers(ILjava/lang/String;Landroid/os/health/TimerStat;)V Landroid/os/health/HealthStatsWriter;->flattenToParcel(Landroid/os/Parcel;)V +Landroid/os/health/SystemHealthManager;-><init>()V Landroid/os/health/SystemHealthManager;->from(Landroid/content/Context;)Landroid/os/health/SystemHealthManager; Landroid/os/HwParcel;-><init>(Z)V Landroid/os/HwRemoteBinder;-><init>()V Landroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/os/IBinder;->SYSPROPS_TRANSACTION:I +Landroid/os/IDeviceIdentifiersPolicyService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IDeviceIdentifiersPolicyService; +Landroid/os/IDeviceIdleController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IDeviceIdleController; +Landroid/os/IDeviceIdleController;->addPowerSaveTempWhitelistApp(Ljava/lang/String;JILjava/lang/String;)V Landroid/os/IDeviceIdleController;->getAppIdTempWhitelist()[I +Landroid/os/IDeviceIdleController;->getFullPowerWhitelistExceptIdle()[Ljava/lang/String; +Landroid/os/INetworkManagementService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/os/INetworkManagementService;->disableNat(Ljava/lang/String;Ljava/lang/String;)V +Landroid/os/INetworkManagementService;->enableNat(Ljava/lang/String;Ljava/lang/String;)V +Landroid/os/INetworkManagementService;->getInterfaceConfig(Ljava/lang/String;)Landroid/net/InterfaceConfiguration; +Landroid/os/INetworkManagementService;->getIpForwardingEnabled()Z +Landroid/os/INetworkManagementService;->isTetheringStarted()Z +Landroid/os/INetworkManagementService;->listTetheredInterfaces()[Ljava/lang/String; +Landroid/os/INetworkManagementService;->setIpForwardingEnabled(Z)V +Landroid/os/INetworkManagementService;->startTethering([Ljava/lang/String;)V +Landroid/os/INetworkManagementService;->stopTethering()V +Landroid/os/INetworkManagementService;->tetherInterface(Ljava/lang/String;)V +Landroid/os/INetworkManagementService;->untetherInterface(Ljava/lang/String;)V Landroid/os/IPermissionController$Stub$Proxy;->checkPermission(Ljava/lang/String;II)Z +Landroid/os/IPermissionController$Stub;-><init>()V Landroid/os/IPermissionController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPermissionController; Landroid/os/IPowerManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/os/IPowerManager$Stub$Proxy;->isLightDeviceIdleMode()Z +Landroid/os/IPowerManager$Stub;-><init>()V Landroid/os/IPowerManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPowerManager; +Landroid/os/IPowerManager$Stub;->TRANSACTION_goToSleep:I +Landroid/os/IPowerManager;->isInteractive()Z +Landroid/os/IPowerManager;->nap(J)V Landroid/os/IPowerManager;->releaseWakeLock(Landroid/os/IBinder;I)V Landroid/os/IPowerManager;->userActivity(JII)V +Landroid/os/IPowerManager;->wakeUp(JLjava/lang/String;Ljava/lang/String;)V Landroid/os/IRecoverySystem$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IRecoverySystem; +Landroid/os/IRemoteCallback;->sendResult(Landroid/os/Bundle;)V Landroid/os/IServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder; Landroid/os/IServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder; +Landroid/os/IUpdateEngine$Stub;-><init>()V +Landroid/os/IUpdateEngineCallback;->onStatusUpdate(IF)V Landroid/os/IUserManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/os/IUserManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IUserManager; +Landroid/os/IUserManager;->getUserInfo(I)Landroid/content/pm/UserInfo; Landroid/os/IVibratorService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IVibratorService; Landroid/os/LocaleList;->setDefault(Landroid/os/LocaleList;I)V +Landroid/os/Looper;->mLogging:Landroid/util/Printer; Landroid/os/Looper;->mQueue:Landroid/os/MessageQueue; Landroid/os/Looper;->setTraceTag(J)V +Landroid/os/Looper;->sMainLooper:Landroid/os/Looper; Landroid/os/Looper;->sThreadLocal:Ljava/lang/ThreadLocal; +Landroid/os/MemoryFile;->deactivate()V Landroid/os/MemoryFile;->getFileDescriptor()Ljava/io/FileDescriptor; +Landroid/os/MemoryFile;->getSize(Ljava/io/FileDescriptor;)I +Landroid/os/MemoryFile;->native_get_size(Ljava/io/FileDescriptor;)I Landroid/os/Message;->callback:Ljava/lang/Runnable; Landroid/os/Message;->flags:I Landroid/os/Message;->markInUse()V Landroid/os/Message;->next:Landroid/os/Message; Landroid/os/Message;->recycleUnchecked()V Landroid/os/Message;->target:Landroid/os/Handler; +Landroid/os/Message;->toString(J)Ljava/lang/String; Landroid/os/Message;->when:J Landroid/os/MessageQueue;->dispatchEvents(II)I +Landroid/os/MessageQueue;->hasMessages(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;)Z Landroid/os/MessageQueue;->mIdleHandlers:Ljava/util/ArrayList; Landroid/os/MessageQueue;->mMessages:Landroid/os/Message; +Landroid/os/MessageQueue;->mNextBarrierToken:I Landroid/os/MessageQueue;->mPtr:J Landroid/os/MessageQueue;->mQuitAllowed:Z Landroid/os/MessageQueue;->nativePollOnce(JI)V @@ -1826,37 +3806,104 @@ Landroid/os/MessageQueue;->next()Landroid/os/Message; Landroid/os/MessageQueue;->postSyncBarrier()I Landroid/os/MessageQueue;->removeSyncBarrier(I)V Landroid/os/Parcel$ReadWriteHelper;-><init>()V +Landroid/os/Parcel;->getGlobalAllocCount()J +Landroid/os/Parcel;->getGlobalAllocSize()J +Landroid/os/Parcel;->mCreators:Ljava/util/HashMap; Landroid/os/Parcel;->mNativePtr:J Landroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;Ljava/lang/ClassLoader;)V +Landroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet; +Landroid/os/Parcel;->readCharSequence()Ljava/lang/CharSequence; +Landroid/os/Parcel;->readCreator(Landroid/os/Parcelable$Creator;Ljava/lang/ClassLoader;)Landroid/os/Parcelable; +Landroid/os/Parcel;->readExceptionCode()I +Landroid/os/Parcel;->readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator; Landroid/os/Parcel;->readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List; +Landroid/os/Parcel;->readRawFileDescriptor()Ljava/io/FileDescriptor; Landroid/os/Parcel;->writeArrayMap(Landroid/util/ArrayMap;)V +Landroid/os/Parcel;->writeArraySet(Landroid/util/ArraySet;)V +Landroid/os/Parcel;->writeCharSequence(Ljava/lang/CharSequence;)V +Landroid/os/Parcel;->writeParcelableCreator(Landroid/os/Parcelable;)V Landroid/os/Parcel;->writeParcelableList(Ljava/util/List;I)V +Landroid/os/ParcelableParcel;-><init>(Ljava/lang/ClassLoader;)V +Landroid/os/ParcelableParcel;->CREATOR:Landroid/os/Parcelable$ClassLoaderCreator; +Landroid/os/ParcelableParcel;->getClassLoader()Ljava/lang/ClassLoader; +Landroid/os/ParcelableParcel;->getParcel()Landroid/os/Parcel; Landroid/os/ParcelFileDescriptor;-><init>(Ljava/io/FileDescriptor;)V Landroid/os/ParcelFileDescriptor;->fromData([BLjava/lang/String;)Landroid/os/ParcelFileDescriptor; +Landroid/os/ParcelFileDescriptor;->getFile(Ljava/io/FileDescriptor;)Ljava/io/File; +Landroid/os/ParcelFileDescriptor;->seekTo(J)J +Landroid/os/PerformanceCollector;-><init>()V +Landroid/os/PerformanceCollector;->beginSnapshot(Ljava/lang/String;)V +Landroid/os/PerformanceCollector;->endSnapshot()Landroid/os/Bundle; +Landroid/os/PerformanceCollector;->startTiming(Ljava/lang/String;)V +Landroid/os/PerformanceCollector;->stopTiming(Ljava/lang/String;)Landroid/os/Bundle; +Landroid/os/PowerManager;->ACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED:Ljava/lang/String; +Landroid/os/PowerManager;->ACTION_POWER_SAVE_MODE_CHANGING:Ljava/lang/String; +Landroid/os/PowerManager;->BRIGHTNESS_ON:I +Landroid/os/PowerManager;->EXTRA_POWER_SAVE_MODE:Ljava/lang/String; Landroid/os/PowerManager;->getDefaultScreenBrightnessSetting()I Landroid/os/PowerManager;->getMaximumScreenBrightnessSetting()I Landroid/os/PowerManager;->getMinimumScreenBrightnessSetting()I +Landroid/os/PowerManager;->goToSleep(JII)V +Landroid/os/PowerManager;->GO_TO_SLEEP_REASON_TIMEOUT:I Landroid/os/PowerManager;->isLightDeviceIdleMode()Z +Landroid/os/PowerManager;->mHandler:Landroid/os/Handler; Landroid/os/PowerManager;->mService:Landroid/os/IPowerManager; +Landroid/os/PowerManager;->setPowerSaveMode(Z)Z Landroid/os/PowerManager;->validateWakeLockParameters(ILjava/lang/String;)V Landroid/os/PowerManager;->wakeUp(JLjava/lang/String;)V +Landroid/os/Process;->BLUETOOTH_UID:I +Landroid/os/Process;->DRM_UID:I Landroid/os/Process;->getFreeMemory()J Landroid/os/Process;->getParentPid(I)I Landroid/os/Process;->getPids(Ljava/lang/String;[I)[I +Landroid/os/Process;->getPidsForCommands([Ljava/lang/String;)[I +Landroid/os/Process;->getPss(I)J Landroid/os/Process;->getTotalMemory()J Landroid/os/Process;->getUidForPid(I)I Landroid/os/Process;->isIsolated(I)Z +Landroid/os/Process;->LOG_UID:I +Landroid/os/Process;->MEDIA_UID:I +Landroid/os/Process;->myPpid()I +Landroid/os/Process;->NFC_UID:I Landroid/os/Process;->parseProcLine([BII[I[Ljava/lang/String;[J[F)Z +Landroid/os/Process;->PROC_COMBINE:I +Landroid/os/Process;->PROC_OUT_FLOAT:I +Landroid/os/Process;->PROC_OUT_LONG:I +Landroid/os/Process;->PROC_OUT_STRING:I +Landroid/os/Process;->PROC_PARENS:I +Landroid/os/Process;->PROC_QUOTES:I +Landroid/os/Process;->PROC_SPACE_TERM:I +Landroid/os/Process;->PROC_TAB_TERM:I +Landroid/os/Process;->PROC_TERM_MASK:I +Landroid/os/Process;->PROC_ZERO_TERM:I Landroid/os/Process;->readProcFile(Ljava/lang/String;[I[Ljava/lang/String;[J[F)Z Landroid/os/Process;->readProcLines(Ljava/lang/String;[Ljava/lang/String;[J)V +Landroid/os/Process;->ROOT_UID:I Landroid/os/Process;->setArgV0(Ljava/lang/String;)V +Landroid/os/Process;->setProcessGroup(II)V +Landroid/os/Process;->SHELL_UID:I +Landroid/os/Process;->VPN_UID:I +Landroid/os/Process;->WIFI_UID:I +Landroid/os/RecoverySystem;->verifyPackageCompatibility(Ljava/io/InputStream;)Z +Landroid/os/Registrant;->getHandler()Landroid/os/Handler; +Landroid/os/Registrant;->messageForRegistrant()Landroid/os/Message; +Landroid/os/Registrant;->notifyResult(Ljava/lang/Object;)V +Landroid/os/RegistrantList;->add(Landroid/os/Handler;ILjava/lang/Object;)V +Landroid/os/RegistrantList;->get(I)Ljava/lang/Object; +Landroid/os/RegistrantList;->notifyResult(Ljava/lang/Object;)V +Landroid/os/RegistrantList;->size()I +Landroid/os/RemoteCallback;->mHandler:Landroid/os/Handler; +Landroid/os/RemoteCallbackList;->mCallbacks:Landroid/util/ArrayMap; Landroid/os/SELinux;->checkSELinuxAccess(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z +Landroid/os/SELinux;->getContext()Ljava/lang/String; Landroid/os/SELinux;->getFileContext(Ljava/lang/String;)Ljava/lang/String; Landroid/os/SELinux;->getPidContext(I)Ljava/lang/String; Landroid/os/SELinux;->isSELinuxEnabled()Z Landroid/os/SELinux;->isSELinuxEnforced()Z +Landroid/os/SELinux;->restoreconRecursive(Ljava/io/File;)Z Landroid/os/ServiceManager;-><init>()V Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;)V +Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;ZI)V Landroid/os/ServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder; Landroid/os/ServiceManager;->getIServiceManager()Landroid/os/IServiceManager; Landroid/os/ServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder; @@ -1864,62 +3911,134 @@ Landroid/os/ServiceManager;->listServices()[Ljava/lang/String; Landroid/os/ServiceManager;->sCache:Ljava/util/HashMap; Landroid/os/ServiceManager;->sServiceManager:Landroid/os/IServiceManager; Landroid/os/ServiceManagerNative;->asInterface(Landroid/os/IBinder;)Landroid/os/IServiceManager; +Landroid/os/ServiceSpecificException;-><init>(ILjava/lang/String;)V Landroid/os/SharedMemory;->getFd()I +Landroid/os/ShellCommand;->peekNextArg()Ljava/lang/String; +Landroid/os/storage/DiskInfo;-><init>(Landroid/os/Parcel;)V +Landroid/os/storage/DiskInfo;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/os/storage/DiskInfo;->flags:I Landroid/os/storage/DiskInfo;->getDescription()Ljava/lang/String; +Landroid/os/storage/DiskInfo;->isAdoptable()Z +Landroid/os/storage/DiskInfo;->isDefaultPrimary()Z Landroid/os/storage/DiskInfo;->isSd()Z Landroid/os/storage/DiskInfo;->isUsb()Z +Landroid/os/storage/DiskInfo;->label:Ljava/lang/String; +Landroid/os/storage/DiskInfo;->size:J +Landroid/os/storage/IObbActionListener$Stub;-><init>()V +Landroid/os/storage/IObbActionListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/storage/IObbActionListener; Landroid/os/storage/IStorageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/os/storage/IStorageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/storage/IStorageManager; +Landroid/os/storage/StorageEventListener;->onDiskDestroyed(Landroid/os/storage/DiskInfo;)V +Landroid/os/storage/StorageEventListener;->onDiskScanned(Landroid/os/storage/DiskInfo;I)V +Landroid/os/storage/StorageEventListener;->onStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Landroid/os/storage/StorageEventListener;->onUsbMassStorageConnectionChanged(Z)V +Landroid/os/storage/StorageEventListener;->onVolumeForgotten(Ljava/lang/String;)V +Landroid/os/storage/StorageEventListener;->onVolumeRecordChanged(Landroid/os/storage/VolumeRecord;)V +Landroid/os/storage/StorageEventListener;->onVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V +Landroid/os/storage/StorageManager;-><init>(Landroid/content/Context;Landroid/os/Looper;)V +Landroid/os/storage/StorageManager;->CRYPT_TYPE_DEFAULT:I +Landroid/os/storage/StorageManager;->CRYPT_TYPE_PASSWORD:I +Landroid/os/storage/StorageManager;->disableUsbMassStorage()V +Landroid/os/storage/StorageManager;->enableUsbMassStorage()V +Landroid/os/storage/StorageManager;->ENCRYPTION_STATE_NONE:I +Landroid/os/storage/StorageManager;->findDiskById(Ljava/lang/String;)Landroid/os/storage/DiskInfo; +Landroid/os/storage/StorageManager;->findEmulatedForPrivate(Landroid/os/storage/VolumeInfo;)Landroid/os/storage/VolumeInfo; Landroid/os/storage/StorageManager;->findVolumeByUuid(Ljava/lang/String;)Landroid/os/storage/VolumeInfo; +Landroid/os/storage/StorageManager;->format(Ljava/lang/String;)V Landroid/os/storage/StorageManager;->getBestVolumeDescription(Landroid/os/storage/VolumeInfo;)Ljava/lang/String; Landroid/os/storage/StorageManager;->getDisks()Ljava/util/List; +Landroid/os/storage/StorageManager;->getPrimaryPhysicalVolume()Landroid/os/storage/VolumeInfo; Landroid/os/storage/StorageManager;->getStorageBytesUntilLow(Ljava/io/File;)J Landroid/os/storage/StorageManager;->getStorageFullBytes(Ljava/io/File;)J Landroid/os/storage/StorageManager;->getStorageLowBytes(Ljava/io/File;)J +Landroid/os/storage/StorageManager;->getStorageVolume([Landroid/os/storage/StorageVolume;Ljava/io/File;)Landroid/os/storage/StorageVolume; Landroid/os/storage/StorageManager;->getVolumeList(II)[Landroid/os/storage/StorageVolume; Landroid/os/storage/StorageManager;->getVolumePaths()[Ljava/lang/String; Landroid/os/storage/StorageManager;->getVolumes()Ljava/util/List; Landroid/os/storage/StorageManager;->getVolumeState(Ljava/lang/String;)Ljava/lang/String; +Landroid/os/storage/StorageManager;->isFileEncryptedNativeOnly()Z +Landroid/os/storage/StorageManager;->isUsbMassStorageEnabled()Z +Landroid/os/storage/StorageManager;->unmount(Ljava/lang/String;)V Landroid/os/storage/StorageVolume;->allowMassStorage()Z +Landroid/os/storage/StorageVolume;->getFatVolumeId()I Landroid/os/storage/StorageVolume;->getMaxFileSize()J +Landroid/os/storage/StorageVolume;->getOwner()Landroid/os/UserHandle; Landroid/os/storage/StorageVolume;->getPath()Ljava/lang/String; Landroid/os/storage/StorageVolume;->getPathFile()Ljava/io/File; Landroid/os/storage/StorageVolume;->getUserLabel()Ljava/lang/String; Landroid/os/storage/StorageVolume;->mPath:Ljava/io/File; Landroid/os/storage/StorageVolume;->mRemovable:Z +Landroid/os/storage/VolumeInfo;-><init>(Landroid/os/Parcel;)V +Landroid/os/storage/VolumeInfo;->buildBrowseIntent()Landroid/content/Intent; +Landroid/os/storage/VolumeInfo;->buildStableMtpStorageId(Ljava/lang/String;)I Landroid/os/storage/VolumeInfo;->buildStorageVolume(Landroid/content/Context;IZ)Landroid/os/storage/StorageVolume; +Landroid/os/storage/VolumeInfo;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/os/storage/VolumeInfo;->disk:Landroid/os/storage/DiskInfo; +Landroid/os/storage/VolumeInfo;->fsLabel:Ljava/lang/String; +Landroid/os/storage/VolumeInfo;->fsUuid:Ljava/lang/String; +Landroid/os/storage/VolumeInfo;->getDescription()Ljava/lang/String; Landroid/os/storage/VolumeInfo;->getDisk()Landroid/os/storage/DiskInfo; +Landroid/os/storage/VolumeInfo;->getDiskId()Ljava/lang/String; Landroid/os/storage/VolumeInfo;->getEnvironmentForState(I)Ljava/lang/String; Landroid/os/storage/VolumeInfo;->getFsUuid()Ljava/lang/String; +Landroid/os/storage/VolumeInfo;->getInternalPathForUser(I)Ljava/io/File; +Landroid/os/storage/VolumeInfo;->getMountUserId()I Landroid/os/storage/VolumeInfo;->getPath()Ljava/io/File; +Landroid/os/storage/VolumeInfo;->getPathForUser(I)Ljava/io/File; Landroid/os/storage/VolumeInfo;->getState()I Landroid/os/storage/VolumeInfo;->getType()I +Landroid/os/storage/VolumeInfo;->internalPath:Ljava/lang/String; +Landroid/os/storage/VolumeInfo;->isMountedReadable()Z +Landroid/os/storage/VolumeInfo;->isMountedWritable()Z Landroid/os/storage/VolumeInfo;->isPrimary()Z +Landroid/os/storage/VolumeInfo;->isPrimaryPhysical()Z Landroid/os/storage/VolumeInfo;->isVisible()Z +Landroid/os/storage/VolumeInfo;->isVisibleForWrite(I)Z +Landroid/os/storage/VolumeInfo;->path:Ljava/lang/String; +Landroid/os/storage/VolumeInfo;->state:I +Landroid/os/storage/VolumeInfo;->type:I Landroid/os/storage/VolumeInfo;->TYPE_EMULATED:I Landroid/os/storage/VolumeInfo;->TYPE_PUBLIC:I +Landroid/os/storage/VolumeRecord;-><init>(Landroid/os/Parcel;)V +Landroid/os/storage/VolumeRecord;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/os/StrictMode$Span;->finish()V +Landroid/os/StrictMode$ThreadPolicy;->mask:I +Landroid/os/StrictMode$VmPolicy$Builder;->mMask:I +Landroid/os/StrictMode$VmPolicy;->mask:I Landroid/os/StrictMode;->conditionallyCheckInstanceCounts()V Landroid/os/StrictMode;->disableDeathOnFileUriExposure()V +Landroid/os/StrictMode;->enableDeathOnFileUriExposure()V Landroid/os/StrictMode;->enterCriticalSpan(Ljava/lang/String;)Landroid/os/StrictMode$Span; Landroid/os/StrictMode;->getThreadPolicyMask()I +Landroid/os/StrictMode;->incrementExpectedActivityCount(Ljava/lang/Class;)V Landroid/os/StrictMode;->onBinderStrictModePolicyChange(I)V +Landroid/os/StrictMode;->onWebViewMethodCalledOnWrongThread(Ljava/lang/Throwable;)V Landroid/os/StrictMode;->sLastVmViolationTime:Ljava/util/HashMap; Landroid/os/StrictMode;->violationsBeingTimed:Ljava/lang/ThreadLocal; +Landroid/os/SystemClock;->currentThreadTimeMicro()J +Landroid/os/SystemClock;->currentTimeMicro()J Landroid/os/SystemProperties;-><init>()V Landroid/os/SystemProperties;->addChangeCallback(Ljava/lang/Runnable;)V Landroid/os/SystemProperties;->native_get(Ljava/lang/String;)Ljava/lang/String; Landroid/os/SystemProperties;->PROP_NAME_MAX:I Landroid/os/SystemProperties;->set(Ljava/lang/String;Ljava/lang/String;)V +Landroid/os/SystemVibrator;-><init>(Landroid/content/Context;)V Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V Landroid/os/Trace;->isTagEnabled(J)Z +Landroid/os/Trace;->nativeGetEnabledTags()J +Landroid/os/Trace;->sEnabledTags:J Landroid/os/Trace;->setAppTracingAllowed(Z)V Landroid/os/Trace;->traceBegin(JLjava/lang/String;)V Landroid/os/Trace;->traceCounter(JLjava/lang/String;I)V Landroid/os/Trace;->traceEnd(J)V Landroid/os/Trace;->TRACE_TAG_APP:J Landroid/os/Trace;->TRACE_TAG_VIEW:J +Landroid/os/UEventObserver$UEvent;->get(Ljava/lang/String;)Ljava/lang/String; +Landroid/os/UEventObserver$UEvent;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Landroid/os/UEventObserver;-><init>()V +Landroid/os/UEventObserver;->startObserving(Ljava/lang/String;)V +Landroid/os/UEventObserver;->stopObserving()V Landroid/os/UpdateLock;->acquire()V Landroid/os/UpdateLock;->isHeld()Z Landroid/os/UpdateLock;->NOW_IS_CONVENIENT:Ljava/lang/String; @@ -1940,6 +4059,8 @@ Landroid/os/UserHandle;->getAppIdFromSharedAppGid(I)I Landroid/os/UserHandle;->getCallingUserId()I Landroid/os/UserHandle;->getUid(II)I Landroid/os/UserHandle;->getUserId(I)I +Landroid/os/UserHandle;->isApp(I)Z +Landroid/os/UserHandle;->isIsolated(I)Z Landroid/os/UserHandle;->MU_ENABLED:Z Landroid/os/UserHandle;->OWNER:Landroid/os/UserHandle; Landroid/os/UserHandle;->PER_USER_RANGE:I @@ -1950,21 +4071,32 @@ Landroid/os/UserHandle;->USER_NULL:I Landroid/os/UserHandle;->USER_OWNER:I Landroid/os/UserHandle;->USER_SERIAL_SYSTEM:I Landroid/os/UserHandle;->USER_SYSTEM:I +Landroid/os/UserManager;->createProfileForUser(Ljava/lang/String;II)Landroid/content/pm/UserInfo; +Landroid/os/UserManager;->createUser(Ljava/lang/String;I)Landroid/content/pm/UserInfo; +Landroid/os/UserManager;->DISALLOW_RECORD_AUDIO:Ljava/lang/String; Landroid/os/UserManager;->get(Landroid/content/Context;)Landroid/os/UserManager; +Landroid/os/UserManager;->getEnabledProfiles(I)Ljava/util/List; Landroid/os/UserManager;->getMaxSupportedUsers()I +Landroid/os/UserManager;->getProfileIdsWithDisabled(I)[I +Landroid/os/UserManager;->getProfileParent(I)Landroid/content/pm/UserInfo; Landroid/os/UserManager;->getProfiles(I)Ljava/util/List; Landroid/os/UserManager;->getUserHandle()I Landroid/os/UserManager;->getUserHandle(I)I Landroid/os/UserManager;->getUserIcon(I)Landroid/graphics/Bitmap; Landroid/os/UserManager;->getUserInfo(I)Landroid/content/pm/UserInfo; Landroid/os/UserManager;->getUsers()Ljava/util/List; +Landroid/os/UserManager;->getUsers(Z)Ljava/util/List; Landroid/os/UserManager;->getUserSerialNumber(I)I Landroid/os/UserManager;->getUserStartRealtime()J Landroid/os/UserManager;->getUserUnlockRealtime()J Landroid/os/UserManager;->hasBaseUserRestriction(Ljava/lang/String;Landroid/os/UserHandle;)Z +Landroid/os/UserManager;->isGuestUser(I)Z Landroid/os/UserManager;->isLinkedUser()Z +Landroid/os/UserManager;->isUserAdmin(I)Z Landroid/os/UserManager;->isUserUnlocked(I)Z Landroid/os/UserManager;->mService:Landroid/os/IUserManager; +Landroid/os/UserManager;->removeUser(I)Z +Landroid/os/Vibrator;-><init>()V Landroid/os/VintfObject;->getHalNamesAndVersions()[Ljava/lang/String; Landroid/os/VintfObject;->getSepolicyVersion()Ljava/lang/String; Landroid/os/VintfObject;->getTargetFrameworkCompatibilityMatrixVersion()Ljava/lang/Long; @@ -1978,6 +4110,7 @@ Landroid/os/VintfRuntimeInfo;->getOsName()Ljava/lang/String; Landroid/os/VintfRuntimeInfo;->getOsRelease()Ljava/lang/String; Landroid/os/VintfRuntimeInfo;->getOsVersion()Ljava/lang/String; Landroid/os/WorkSource;-><init>(I)V +Landroid/os/WorkSource;-><init>(Landroid/os/Parcel;)V Landroid/os/WorkSource;->add(I)Z Landroid/os/WorkSource;->add(ILjava/lang/String;)Z Landroid/os/WorkSource;->addReturningNewbs(Landroid/os/WorkSource;)Landroid/os/WorkSource; @@ -1997,39 +4130,106 @@ Landroid/preference/DialogPreference;->mDialogTitle:Ljava/lang/CharSequence; Landroid/preference/DialogPreference;->mNegativeButtonText:Ljava/lang/CharSequence; Landroid/preference/DialogPreference;->mPositiveButtonText:Ljava/lang/CharSequence; Landroid/preference/DialogPreference;->mWhichButtonClicked:I +Landroid/preference/EditTextPreference;->mEditText:Landroid/widget/EditText; Landroid/preference/ListPreference;->mClickedDialogEntryIndex:I +Landroid/preference/Preference;->getId()J +Landroid/preference/Preference;->mLayoutResId:I +Landroid/preference/Preference;->mSummary:Ljava/lang/CharSequence; +Landroid/preference/Preference;->mWidgetLayoutResId:I Landroid/preference/Preference;->onKey(Landroid/view/View;ILandroid/view/KeyEvent;)Z Landroid/preference/Preference;->performClick(Landroid/preference/PreferenceScreen;)V +Landroid/preference/Preference;->registerDependent(Landroid/preference/Preference;)V +Landroid/preference/Preference;->setOnPreferenceChangeInternalListener(Landroid/preference/Preference$OnPreferenceChangeInternalListener;)V +Landroid/preference/PreferenceActivity;->getHeaders()Ljava/util/List; Landroid/preference/PreferenceActivity;->mPreferenceManager:Landroid/preference/PreferenceManager; Landroid/preference/PreferenceActivity;->mPrefsContainer:Landroid/view/ViewGroup; +Landroid/preference/PreferenceActivity;->postBindPreferences()V +Landroid/preference/PreferenceActivity;->requirePreferenceManager()V +Landroid/preference/PreferenceFragment;->getListView()Landroid/widget/ListView; +Landroid/preference/PreferenceFragment;->mPreferenceManager:Landroid/preference/PreferenceManager; Landroid/preference/PreferenceManager;-><init>(Landroid/app/Activity;I)V Landroid/preference/PreferenceManager;-><init>(Landroid/content/Context;)V Landroid/preference/PreferenceManager;->dispatchActivityDestroy()V Landroid/preference/PreferenceManager;->dispatchActivityResult(IILandroid/content/Intent;)V Landroid/preference/PreferenceManager;->dispatchActivityStop()V +Landroid/preference/PreferenceManager;->getActivity()Landroid/app/Activity; Landroid/preference/PreferenceManager;->getEditor()Landroid/content/SharedPreferences$Editor; +Landroid/preference/PreferenceManager;->getFragment()Landroid/preference/PreferenceFragment; +Landroid/preference/PreferenceManager;->getNextRequestCode()I Landroid/preference/PreferenceManager;->getPreferenceScreen()Landroid/preference/PreferenceScreen; Landroid/preference/PreferenceManager;->inflateFromIntent(Landroid/content/Intent;Landroid/preference/PreferenceScreen;)Landroid/preference/PreferenceScreen; Landroid/preference/PreferenceManager;->inflateFromResource(Landroid/content/Context;ILandroid/preference/PreferenceScreen;)Landroid/preference/PreferenceScreen; Landroid/preference/PreferenceManager;->mActivityDestroyListeners:Ljava/util/List; +Landroid/preference/PreferenceManager;->mFragment:Landroid/preference/PreferenceFragment; Landroid/preference/PreferenceManager;->mOnPreferenceTreeClickListener:Landroid/preference/PreferenceManager$OnPreferenceTreeClickListener; Landroid/preference/PreferenceManager;->mSharedPreferences:Landroid/content/SharedPreferences; Landroid/preference/PreferenceManager;->registerOnActivityDestroyListener(Landroid/preference/PreferenceManager$OnActivityDestroyListener;)V +Landroid/preference/PreferenceManager;->registerOnActivityResultListener(Landroid/preference/PreferenceManager$OnActivityResultListener;)V Landroid/preference/PreferenceManager;->registerOnActivityStopListener(Landroid/preference/PreferenceManager$OnActivityStopListener;)V Landroid/preference/PreferenceManager;->setFragment(Landroid/preference/PreferenceFragment;)V +Landroid/preference/PreferenceManager;->setNoCommit(Z)V Landroid/preference/PreferenceManager;->setPreferences(Landroid/preference/PreferenceScreen;)Z Landroid/preference/PreferenceManager;->shouldCommit()Z Landroid/preference/PreferenceManager;->unregisterOnActivityDestroyListener(Landroid/preference/PreferenceManager$OnActivityDestroyListener;)V +Landroid/preference/PreferenceManager;->unregisterOnActivityResultListener(Landroid/preference/PreferenceManager$OnActivityResultListener;)V Landroid/preference/PreferenceManager;->unregisterOnActivityStopListener(Landroid/preference/PreferenceManager$OnActivityStopListener;)V +Landroid/preference/PreferenceScreen;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V +Landroid/preference/PreferenceScreen;->mListView:Landroid/widget/ListView; Landroid/preference/PreferenceScreen;->mRootAdapter:Landroid/widget/ListAdapter; +Landroid/preference/RingtonePreference;->mRequestCode:I +Landroid/preference/SeekBarDialogPreference;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V +Landroid/preference/SeekBarPreference;-><init>(Landroid/content/Context;)V +Landroid/preference/SeekBarPreference;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V +Landroid/preference/SeekBarPreference;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V +Landroid/preference/SeekBarVolumizer;-><init>(Landroid/content/Context;ILandroid/net/Uri;Landroid/preference/SeekBarVolumizer$Callback;)V +Landroid/preference/SeekBarVolumizer;->mAudioManager:Landroid/media/AudioManager; +Landroid/preference/SeekBarVolumizer;->mContext:Landroid/content/Context; +Landroid/preference/SeekBarVolumizer;->mLastProgress:I +Landroid/preference/SeekBarVolumizer;->mOriginalStreamVolume:I +Landroid/preference/SeekBarVolumizer;->mRingtone:Landroid/media/Ringtone; +Landroid/preference/SeekBarVolumizer;->mSeekBar:Landroid/widget/SeekBar; +Landroid/preference/SeekBarVolumizer;->mStreamType:I +Landroid/preference/SeekBarVolumizer;->stop()V +Landroid/preference/SwitchPreference;->mListener:Landroid/preference/SwitchPreference$Listener; +Landroid/preference/TwoStatePreference;->syncSummaryView(Landroid/view/View;)V +Landroid/preference/VolumePreference$VolumeStore;->originalVolume:I +Landroid/preference/VolumePreference$VolumeStore;->volume:I +Landroid/preference/VolumePreference;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V +Landroid/preference/VolumePreference;->mStreamType:I Landroid/print/PrinterId;->getServiceName()Landroid/content/ComponentName; Landroid/print/PrintJobInfo;->getAdvancedOptions()Landroid/os/Bundle; Landroid/print/PrintJobInfo;->getDocumentInfo()Landroid/print/PrintDocumentInfo; +Landroid/print/PrintManager;->addPrintJobStateChangeListener(Landroid/print/PrintManager$PrintJobStateChangeListener;)V Landroid/provider/Browser;->getVisitedHistory(Landroid/content/ContentResolver;)[Ljava/lang/String; Landroid/provider/Browser;->sendString(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V +Landroid/provider/BrowserContract$Accounts;->CONTENT_URI:Landroid/net/Uri; +Landroid/provider/BrowserContract$Bookmarks;->buildFolderUri(J)Landroid/net/Uri; +Landroid/provider/BrowserContract$Bookmarks;->CONTENT_URI:Landroid/net/Uri; +Landroid/provider/BrowserContract$Bookmarks;->CONTENT_URI_DEFAULT_FOLDER:Landroid/net/Uri; +Landroid/provider/BrowserContract$Combined;->CONTENT_URI:Landroid/net/Uri; +Landroid/provider/BrowserContract$History;->CONTENT_URI:Landroid/net/Uri; +Landroid/provider/BrowserContract$Images;->CONTENT_URI:Landroid/net/Uri; +Landroid/provider/BrowserContract;->AUTHORITY_URI:Landroid/net/Uri; Landroid/provider/CalendarContract$CalendarAlerts;->findNextAlarmTime(Landroid/content/ContentResolver;J)J Landroid/provider/CalendarContract$CalendarAlerts;->rescheduleMissedAlarms(Landroid/content/ContentResolver;Landroid/content/Context;Landroid/app/AlarmManager;)V +Landroid/provider/CalendarContract$CalendarAlerts;->scheduleAlarm(Landroid/content/Context;Landroid/app/AlarmManager;J)V +Landroid/provider/CallLog$Calls;->addCall(Lcom/android/internal/telephony/CallerInfo;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIILandroid/telecom/PhoneAccountHandle;JILjava/lang/Long;ZLandroid/os/UserHandle;Z)Landroid/net/Uri; +Landroid/provider/ContactsContract$ContactCounts;->EXTRA_ADDRESS_BOOK_INDEX:Ljava/lang/String; +Landroid/provider/ContactsContract$ContactCounts;->EXTRA_ADDRESS_BOOK_INDEX_COUNTS:Ljava/lang/String; +Landroid/provider/ContactsContract$ContactCounts;->EXTRA_ADDRESS_BOOK_INDEX_TITLES:Ljava/lang/String; +Landroid/provider/ContactsContract$Contacts$AggregationSuggestions;->builder()Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder; +Landroid/provider/ContactsContract$Contacts;->CORP_CONTENT_URI:Landroid/net/Uri; +Landroid/provider/ContactsContract$QuickContact;->composeQuickContactsIntent(Landroid/content/Context;Landroid/graphics/Rect;Landroid/net/Uri;I[Ljava/lang/String;)Landroid/content/Intent; +Landroid/provider/ContactsInternal;->startQuickContactWithErrorToast(Landroid/content/Context;Landroid/content/Intent;)V +Landroid/provider/DocumentsContract$Root;->FLAG_ADVANCED:I +Landroid/provider/DocumentsContract;->getDocumentThumbnail(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/graphics/Point;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap; +Landroid/provider/DocumentsContract;->METHOD_CREATE_DOCUMENT:Ljava/lang/String; +Landroid/provider/DocumentsContract;->moveDocument(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/net/Uri;Landroid/net/Uri;)Landroid/net/Uri; +Landroid/provider/DocumentsContract;->PATH_DOCUMENT:Ljava/lang/String; +Landroid/provider/DocumentsContract;->PATH_TREE:Ljava/lang/String; +Landroid/provider/DocumentsContract;->setManageMode(Landroid/net/Uri;)Landroid/net/Uri; Landroid/provider/Downloads$Impl$RequestHeaders;->INSERT_KEY_PREFIX:Ljava/lang/String; +Landroid/provider/Downloads$Impl;->ALL_DOWNLOADS_CONTENT_URI:Landroid/net/Uri; Landroid/provider/Downloads$Impl;->COLUMN_ALLOWED_NETWORK_TYPES:Ljava/lang/String; Landroid/provider/Downloads$Impl;->COLUMN_ALLOW_ROAMING:Ljava/lang/String; Landroid/provider/Downloads$Impl;->COLUMN_COOKIE_DATA:Ljava/lang/String; @@ -2051,29 +4251,108 @@ Landroid/provider/Downloads$Impl;->COLUMN_VISIBILITY:Ljava/lang/String; Landroid/provider/Downloads$Impl;->CONTENT_URI:Landroid/net/Uri; Landroid/provider/Downloads$Impl;->DESTINATION_CACHE_PARTITION_PURGEABLE:I Landroid/provider/Downloads$Impl;->DESTINATION_FILE_URI:I +Landroid/provider/Downloads$Impl;->isNotificationToBeDisplayed(I)Z +Landroid/provider/Downloads$Impl;->isStatusCompleted(I)Z +Landroid/provider/Downloads$Impl;->isStatusError(I)Z +Landroid/provider/Downloads$Impl;->isStatusSuccess(I)Z +Landroid/provider/Downloads$Impl;->PUBLICLY_ACCESSIBLE_DOWNLOADS_URI:Landroid/net/Uri; +Landroid/provider/MediaStore$Files$FileColumns;->FORMAT:Ljava/lang/String; +Landroid/provider/MediaStore$Files;->getMtpObjectsUri(Ljava/lang/String;)Landroid/net/Uri; +Landroid/provider/MediaStore$Files;->getMtpObjectsUri(Ljava/lang/String;J)Landroid/net/Uri; +Landroid/provider/MediaStore$Files;->getMtpReferencesUri(Ljava/lang/String;J)Landroid/net/Uri; +Landroid/provider/Settings$Bookmarks;->add(Landroid/content/ContentResolver;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;CI)Landroid/net/Uri; +Landroid/provider/Settings$Bookmarks;->CONTENT_URI:Landroid/net/Uri; Landroid/provider/Settings$ContentProviderHolder;->mContentProvider:Landroid/content/IContentProvider; Landroid/provider/Settings$Global;->ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED:Ljava/lang/String; +Landroid/provider/Settings$Global;->HEADS_UP_NOTIFICATIONS_ENABLED:Ljava/lang/String; +Landroid/provider/Settings$Global;->HEADS_UP_OFF:I +Landroid/provider/Settings$Global;->HEADS_UP_ON:I +Landroid/provider/Settings$Global;->MOBILE_DATA:Ljava/lang/String; +Landroid/provider/Settings$Global;->MULTI_SIM_VOICE_PROMPT:Ljava/lang/String; +Landroid/provider/Settings$Global;->NETWORK_SCORER_APP:Ljava/lang/String; Landroid/provider/Settings$Global;->PACKAGE_VERIFIER_ENABLE:Ljava/lang/String; +Landroid/provider/Settings$Global;->PREFERRED_NETWORK_MODE:Ljava/lang/String; +Landroid/provider/Settings$Global;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z +Landroid/provider/Settings$Global;->REQUIRE_PASSWORD_TO_DECRYPT:Ljava/lang/String; Landroid/provider/Settings$Global;->sNameValueCache:Landroid/provider/Settings$NameValueCache; +Landroid/provider/Settings$Global;->WEBVIEW_PROVIDER:Ljava/lang/String; +Landroid/provider/Settings$Global;->WIFI_SAVED_STATE:Ljava/lang/String; +Landroid/provider/Settings$Global;->WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED:Ljava/lang/String; +Landroid/provider/Settings$Global;->ZEN_MODE:Ljava/lang/String; +Landroid/provider/Settings$Global;->ZEN_MODE_ALARMS:I +Landroid/provider/Settings$Global;->ZEN_MODE_CONFIG_ETAG:Ljava/lang/String; +Landroid/provider/Settings$Global;->ZEN_MODE_IMPORTANT_INTERRUPTIONS:I +Landroid/provider/Settings$Global;->ZEN_MODE_NO_INTERRUPTIONS:I +Landroid/provider/Settings$Global;->ZEN_MODE_OFF:I Landroid/provider/Settings$NameValueCache;->mProviderHolder:Landroid/provider/Settings$ContentProviderHolder; Landroid/provider/Settings$Secure;->ACCESSIBILITY_AUTOCLICK_ENABLED:Ljava/lang/String; +Landroid/provider/Settings$Secure;->ACCESSIBILITY_CAPTIONING_TYPEFACE:Ljava/lang/String; Landroid/provider/Settings$Secure;->ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED:Ljava/lang/String; Landroid/provider/Settings$Secure;->ACCESSIBILITY_LARGE_POINTER_ICON:Ljava/lang/String; +Landroid/provider/Settings$Secure;->ANR_SHOW_BACKGROUND:Ljava/lang/String; +Landroid/provider/Settings$Secure;->ASSISTANT:Ljava/lang/String; +Landroid/provider/Settings$Secure;->BACKUP_AUTO_RESTORE:Ljava/lang/String; +Landroid/provider/Settings$Secure;->BACKUP_ENABLED:Ljava/lang/String; +Landroid/provider/Settings$Secure;->BACKUP_PROVISIONED:Ljava/lang/String; +Landroid/provider/Settings$Secure;->BACKUP_TRANSPORT:Ljava/lang/String; +Landroid/provider/Settings$Secure;->DIALER_DEFAULT_APPLICATION:Ljava/lang/String; +Landroid/provider/Settings$Secure;->DOZE_ENABLED:Ljava/lang/String; Landroid/provider/Settings$Secure;->ENABLED_NOTIFICATION_LISTENERS:Ljava/lang/String; +Landroid/provider/Settings$Secure;->ENABLED_PRINT_SERVICES:Ljava/lang/String; +Landroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I +Landroid/provider/Settings$Secure;->getLongForUser(Landroid/content/ContentResolver;Ljava/lang/String;JI)J Landroid/provider/Settings$Secure;->INCALL_POWER_BUTTON_BEHAVIOR:Ljava/lang/String; +Landroid/provider/Settings$Secure;->LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS:Ljava/lang/String; +Landroid/provider/Settings$Secure;->LOCK_SCREEN_LOCK_AFTER_TIMEOUT:Ljava/lang/String; +Landroid/provider/Settings$Secure;->LOCK_SCREEN_OWNER_INFO_ENABLED:Ljava/lang/String; +Landroid/provider/Settings$Secure;->LOCK_SCREEN_SHOW_NOTIFICATIONS:Ljava/lang/String; Landroid/provider/Settings$Secure;->LONG_PRESS_TIMEOUT:Ljava/lang/String; +Landroid/provider/Settings$Secure;->NFC_PAYMENT_DEFAULT_COMPONENT:Ljava/lang/String; Landroid/provider/Settings$Secure;->PACKAGE_VERIFIER_USER_CONSENT:Ljava/lang/String; Landroid/provider/Settings$Secure;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z +Landroid/provider/Settings$Secure;->putLongForUser(Landroid/content/ContentResolver;Ljava/lang/String;JI)Z +Landroid/provider/Settings$Secure;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z +Landroid/provider/Settings$Secure;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Z +Landroid/provider/Settings$Secure;->SELECTED_SPELL_CHECKER:Ljava/lang/String; +Landroid/provider/Settings$Secure;->SELECTED_SPELL_CHECKER_SUBTYPE:Ljava/lang/String; +Landroid/provider/Settings$Secure;->SETTINGS_TO_BACKUP:[Ljava/lang/String; +Landroid/provider/Settings$Secure;->SMS_DEFAULT_APPLICATION:Ljava/lang/String; Landroid/provider/Settings$Secure;->sNameValueCache:Landroid/provider/Settings$NameValueCache; +Landroid/provider/Settings$Secure;->VOICE_RECOGNITION_SERVICE:Ljava/lang/String; Landroid/provider/Settings$System;->AIRPLANE_MODE_TOGGLEABLE_RADIOS:Ljava/lang/String; +Landroid/provider/Settings$System;->CAR_DOCK_SOUND:Ljava/lang/String; +Landroid/provider/Settings$System;->CAR_UNDOCK_SOUND:Ljava/lang/String; +Landroid/provider/Settings$System;->DESK_DOCK_SOUND:Ljava/lang/String; +Landroid/provider/Settings$System;->DESK_UNDOCK_SOUND:Ljava/lang/String; +Landroid/provider/Settings$System;->DOCK_SOUNDS_ENABLED:Ljava/lang/String; +Landroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)I +Landroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I Landroid/provider/Settings$System;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String; Landroid/provider/Settings$System;->HEARING_AID:Ljava/lang/String; +Landroid/provider/Settings$System;->HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY:Ljava/lang/String; +Landroid/provider/Settings$System;->LOCKSCREEN_SOUNDS_ENABLED:Ljava/lang/String; +Landroid/provider/Settings$System;->LOCK_SOUND:Ljava/lang/String; Landroid/provider/Settings$System;->MASTER_MONO:Ljava/lang/String; +Landroid/provider/Settings$System;->POINTER_LOCATION:Ljava/lang/String; +Landroid/provider/Settings$System;->POINTER_SPEED:Ljava/lang/String; +Landroid/provider/Settings$System;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z Landroid/provider/Settings$System;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z Landroid/provider/Settings$System;->SCREEN_AUTO_BRIGHTNESS_ADJ:Ljava/lang/String; +Landroid/provider/Settings$System;->SETTINGS_TO_BACKUP:[Ljava/lang/String; +Landroid/provider/Settings$System;->SHOW_TOUCHES:Ljava/lang/String; Landroid/provider/Settings$System;->sNameValueCache:Landroid/provider/Settings$NameValueCache; +Landroid/provider/Settings$System;->TTY_MODE:Ljava/lang/String; +Landroid/provider/Settings$System;->UNLOCK_SOUND:Ljava/lang/String; +Landroid/provider/Settings$System;->VIBRATE_IN_SILENT:Ljava/lang/String; +Landroid/provider/Settings;->ACTION_TRUSTED_CREDENTIALS_USER:Ljava/lang/String; +Landroid/provider/Settings;->ACTION_USER_DICTIONARY_INSERT:Ljava/lang/String; Landroid/provider/Settings;->isCallingPackageAllowedToDrawOverlays(Landroid/content/Context;ILjava/lang/String;Z)Z +Landroid/provider/Settings;->isCallingPackageAllowedToPerformAppOpsProtectedOperation(Landroid/content/Context;ILjava/lang/String;ZI[Ljava/lang/String;Z)Z Landroid/provider/Settings;->isCallingPackageAllowedToWriteSettings(Landroid/content/Context;ILjava/lang/String;Z)Z +Landroid/provider/Telephony$Mms;->extractAddrSpec(Ljava/lang/String;)Ljava/lang/String; +Landroid/provider/Telephony$Mms;->isPhoneNumber(Ljava/lang/String;)Z +Landroid/provider/Telephony$Mms;->NAME_ADDR_EMAIL_PATTERN:Ljava/util/regex/Pattern; +Landroid/provider/Telephony$Sms$Draft;->addMessage(ILandroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;)Landroid/net/Uri; Landroid/provider/Telephony$Sms$Inbox;->addMessage(ILandroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Z)Landroid/net/Uri; Landroid/provider/Telephony$Sms$Inbox;->addMessage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Z)Landroid/net/Uri; Landroid/provider/Telephony$Sms$Sent;->addMessage(ILandroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;)Landroid/net/Uri; @@ -2082,6 +4361,9 @@ Landroid/provider/Telephony$Sms;->addMessageToUri(ILandroid/content/ContentResol Landroid/provider/Telephony$Sms;->addMessageToUri(ILandroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZJ)Landroid/net/Uri; Landroid/provider/Telephony$Sms;->addMessageToUri(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZ)Landroid/net/Uri; Landroid/provider/Telephony$Sms;->addMessageToUri(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZJ)Landroid/net/Uri; +Landroid/provider/Telephony$Sms;->isOutgoingFolder(I)Z +Landroid/provider/Telephony$Sms;->moveMessageToFolder(Landroid/content/Context;Landroid/net/Uri;II)Z +Landroid/provider/Telephony$Sms;->query(Landroid/content/ContentResolver;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; Landroid/R$styleable;->ActionBar:[I Landroid/R$styleable;->ActionBar_background:I Landroid/R$styleable;->ActionBar_backgroundSplit:I @@ -2104,7 +4386,13 @@ Landroid/R$styleable;->CheckedTextView:[I Landroid/R$styleable;->CheckedTextView_checkMark:I Landroid/R$styleable;->CompoundButton:[I Landroid/R$styleable;->CompoundButton_button:I +Landroid/R$styleable;->ContactsDataKind:[I +Landroid/R$styleable;->DatePicker:[I +Landroid/R$styleable;->DialogPreference:[I Landroid/R$styleable;->DrawableStates:[I +Landroid/R$styleable;->ExpandableListView:[I +Landroid/R$styleable;->FrameLayout_Layout:[I +Landroid/R$styleable;->HorizontalScrollView:[I Landroid/R$styleable;->ImageView:[I Landroid/R$styleable;->ImageView_adjustViewBounds:I Landroid/R$styleable;->ImageView_baselineAlignBottom:I @@ -2114,13 +4402,47 @@ Landroid/R$styleable;->ImageView_maxWidth:I Landroid/R$styleable;->ImageView_scaleType:I Landroid/R$styleable;->ImageView_src:I Landroid/R$styleable;->ImageView_tint:I +Landroid/R$styleable;->Keyboard:[I +Landroid/R$styleable;->Keyboard_horizontalGap:I +Landroid/R$styleable;->Keyboard_Key:[I +Landroid/R$styleable;->Keyboard_keyHeight:I +Landroid/R$styleable;->Keyboard_keyWidth:I +Landroid/R$styleable;->Keyboard_Key_codes:I +Landroid/R$styleable;->Keyboard_Key_iconPreview:I +Landroid/R$styleable;->Keyboard_Key_isModifier:I +Landroid/R$styleable;->Keyboard_Key_isRepeatable:I +Landroid/R$styleable;->Keyboard_Key_isSticky:I +Landroid/R$styleable;->Keyboard_Key_keyEdgeFlags:I +Landroid/R$styleable;->Keyboard_Key_keyIcon:I +Landroid/R$styleable;->Keyboard_Key_keyLabel:I +Landroid/R$styleable;->Keyboard_Key_keyOutputText:I +Landroid/R$styleable;->Keyboard_Key_popupCharacters:I +Landroid/R$styleable;->Keyboard_Key_popupKeyboard:I +Landroid/R$styleable;->Keyboard_Row:[I +Landroid/R$styleable;->Keyboard_Row_keyboardMode:I +Landroid/R$styleable;->Keyboard_Row_rowEdgeFlags:I +Landroid/R$styleable;->Keyboard_verticalGap:I Landroid/R$styleable;->LinearLayout:[I +Landroid/R$styleable;->LinearLayout_baselineAligned:I +Landroid/R$styleable;->LinearLayout_baselineAlignedChildIndex:I Landroid/R$styleable;->LinearLayout_divider:I Landroid/R$styleable;->LinearLayout_dividerPadding:I +Landroid/R$styleable;->LinearLayout_gravity:I +Landroid/R$styleable;->LinearLayout_Layout:[I +Landroid/R$styleable;->LinearLayout_Layout_layout_gravity:I +Landroid/R$styleable;->LinearLayout_Layout_layout_height:I +Landroid/R$styleable;->LinearLayout_Layout_layout_weight:I +Landroid/R$styleable;->LinearLayout_Layout_layout_width:I +Landroid/R$styleable;->LinearLayout_measureWithLargestChild:I +Landroid/R$styleable;->LinearLayout_orientation:I Landroid/R$styleable;->LinearLayout_showDividers:I Landroid/R$styleable;->ListView:[I Landroid/R$styleable;->ListView_divider:I Landroid/R$styleable;->ListView_dividerHeight:I +Landroid/R$styleable;->LockPatternView:[I +Landroid/R$styleable;->NumberPicker:[I +Landroid/R$styleable;->NumberPicker_solidColor:I +Landroid/R$styleable;->PopupWindow:[I Landroid/R$styleable;->ProgressBar:[I Landroid/R$styleable;->ProgressBar_indeterminateDrawable:I Landroid/R$styleable;->ProgressBar_indeterminateDuration:I @@ -2129,9 +4451,19 @@ Landroid/R$styleable;->ProgressBar_maxWidth:I Landroid/R$styleable;->ProgressBar_minHeight:I Landroid/R$styleable;->ProgressBar_minWidth:I Landroid/R$styleable;->ProgressBar_progressDrawable:I +Landroid/R$styleable;->RingtonePreference:[I +Landroid/R$styleable;->ScrollView:[I Landroid/R$styleable;->SeekBar:[I Landroid/R$styleable;->SeekBar_thumb:I Landroid/R$styleable;->SeekBar_thumbOffset:I +Landroid/R$styleable;->SlidingDrawer:[I +Landroid/R$styleable;->SlidingDrawer_allowSingleTap:I +Landroid/R$styleable;->SlidingDrawer_animateOnClick:I +Landroid/R$styleable;->SlidingDrawer_bottomOffset:I +Landroid/R$styleable;->SlidingDrawer_content:I +Landroid/R$styleable;->SlidingDrawer_handle:I +Landroid/R$styleable;->SlidingDrawer_orientation:I +Landroid/R$styleable;->SlidingDrawer_topOffset:I Landroid/R$styleable;->Switch:[I Landroid/R$styleable;->Switch_showText:I Landroid/R$styleable;->Switch_splitTrack:I @@ -2222,10 +4554,21 @@ Landroid/R$styleable;->TextView_textSize:I Landroid/R$styleable;->TextView_textStyle:I Landroid/R$styleable;->TextView_typeface:I Landroid/R$styleable;->TextView_width:I +Landroid/R$styleable;->Theme:[I Landroid/R$styleable;->View:[I Landroid/R$styleable;->ViewDrawableStates:[I Landroid/R$styleable;->ViewGroup_Layout:[I +Landroid/R$styleable;->ViewGroup_Layout_layout_height:I +Landroid/R$styleable;->ViewGroup_Layout_layout_width:I Landroid/R$styleable;->ViewGroup_MarginLayout:[I +Landroid/R$styleable;->ViewGroup_MarginLayout_layout_height:I +Landroid/R$styleable;->ViewGroup_MarginLayout_layout_margin:I +Landroid/R$styleable;->ViewGroup_MarginLayout_layout_marginBottom:I +Landroid/R$styleable;->ViewGroup_MarginLayout_layout_marginLeft:I +Landroid/R$styleable;->ViewGroup_MarginLayout_layout_marginRight:I +Landroid/R$styleable;->ViewGroup_MarginLayout_layout_marginTop:I +Landroid/R$styleable;->ViewGroup_MarginLayout_layout_width:I +Landroid/R$styleable;->View_alpha:I Landroid/R$styleable;->View_background:I Landroid/R$styleable;->View_clickable:I Landroid/R$styleable;->View_contentDescription:I @@ -2256,7 +4599,12 @@ Landroid/R$styleable;->View_paddingLeft:I Landroid/R$styleable;->View_paddingRight:I Landroid/R$styleable;->View_paddingStart:I Landroid/R$styleable;->View_paddingTop:I +Landroid/R$styleable;->View_rotation:I +Landroid/R$styleable;->View_rotationX:I +Landroid/R$styleable;->View_rotationY:I Landroid/R$styleable;->View_saveEnabled:I +Landroid/R$styleable;->View_scaleX:I +Landroid/R$styleable;->View_scaleY:I Landroid/R$styleable;->View_scrollbarDefaultDelayBeforeFade:I Landroid/R$styleable;->View_scrollbarFadeDuration:I Landroid/R$styleable;->View_scrollbars:I @@ -2270,18 +4618,177 @@ Landroid/R$styleable;->View_scrollX:I Landroid/R$styleable;->View_scrollY:I Landroid/R$styleable;->View_soundEffectsEnabled:I Landroid/R$styleable;->View_tag:I +Landroid/R$styleable;->View_transformPivotX:I +Landroid/R$styleable;->View_transformPivotY:I +Landroid/R$styleable;->View_translationX:I +Landroid/R$styleable;->View_translationY:I Landroid/R$styleable;->View_visibility:I Landroid/R$styleable;->Window:[I Landroid/R$styleable;->Window_windowBackground:I Landroid/R$styleable;->Window_windowFrame:I +Landroid/renderscript/BaseObj;->mRS:Landroid/renderscript/RenderScript; +Landroid/renderscript/Element;->createUser(Landroid/renderscript/RenderScript;Landroid/renderscript/Element$DataType;)Landroid/renderscript/Element; +Landroid/renderscript/FileA3D$EntryType;->MESH:Landroid/renderscript/FileA3D$EntryType; +Landroid/renderscript/FileA3D$IndexEntry;->getEntryType()Landroid/renderscript/FileA3D$EntryType; +Landroid/renderscript/FileA3D$IndexEntry;->getObject()Landroid/renderscript/BaseObj; +Landroid/renderscript/FileA3D;->createFromResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;I)Landroid/renderscript/FileA3D; +Landroid/renderscript/FileA3D;->getIndexEntry(I)Landroid/renderscript/FileA3D$IndexEntry; +Landroid/renderscript/Font$Style;->ITALIC:Landroid/renderscript/Font$Style; +Landroid/renderscript/Font;->create(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;Landroid/renderscript/Font$Style;F)Landroid/renderscript/Font; +Landroid/renderscript/Matrix4f;->mMat:[F +Landroid/renderscript/Mesh$AllocationBuilder;-><init>(Landroid/renderscript/RenderScript;)V +Landroid/renderscript/Mesh$AllocationBuilder;->addIndexSetAllocation(Landroid/renderscript/Allocation;Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$AllocationBuilder; +Landroid/renderscript/Mesh$AllocationBuilder;->addIndexSetType(Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$AllocationBuilder; +Landroid/renderscript/Mesh$AllocationBuilder;->addVertexAllocation(Landroid/renderscript/Allocation;)Landroid/renderscript/Mesh$AllocationBuilder; +Landroid/renderscript/Mesh$AllocationBuilder;->create()Landroid/renderscript/Mesh; +Landroid/renderscript/Mesh$Primitive;->POINT:Landroid/renderscript/Mesh$Primitive; +Landroid/renderscript/Mesh$Primitive;->TRIANGLE:Landroid/renderscript/Mesh$Primitive; +Landroid/renderscript/Mesh$TriangleMeshBuilder;-><init>(Landroid/renderscript/RenderScript;II)V +Landroid/renderscript/Mesh$TriangleMeshBuilder;->addTriangle(III)Landroid/renderscript/Mesh$TriangleMeshBuilder; +Landroid/renderscript/Mesh$TriangleMeshBuilder;->addVertex(FF)Landroid/renderscript/Mesh$TriangleMeshBuilder; +Landroid/renderscript/Mesh$TriangleMeshBuilder;->create(Z)Landroid/renderscript/Mesh; +Landroid/renderscript/Mesh;->getVertexAllocation(I)Landroid/renderscript/Allocation; +Landroid/renderscript/Program$BaseProgramBuilder;-><init>(Landroid/renderscript/RenderScript;)V +Landroid/renderscript/Program$BaseProgramBuilder;->mConstantCount:I +Landroid/renderscript/Program$BaseProgramBuilder;->mConstants:[Landroid/renderscript/Type; +Landroid/renderscript/Program$BaseProgramBuilder;->mInputCount:I +Landroid/renderscript/Program$BaseProgramBuilder;->mInputs:[Landroid/renderscript/Element; +Landroid/renderscript/Program$BaseProgramBuilder;->mOutputCount:I +Landroid/renderscript/Program$BaseProgramBuilder;->mOutputs:[Landroid/renderscript/Element; +Landroid/renderscript/Program$BaseProgramBuilder;->mRS:Landroid/renderscript/RenderScript; +Landroid/renderscript/Program$BaseProgramBuilder;->mShader:Ljava/lang/String; +Landroid/renderscript/Program$BaseProgramBuilder;->mTextureCount:I +Landroid/renderscript/Program$TextureType;->TEXTURE_2D:Landroid/renderscript/Program$TextureType; +Landroid/renderscript/ProgramFragment$Builder;-><init>(Landroid/renderscript/RenderScript;)V +Landroid/renderscript/ProgramFragment$Builder;->create()Landroid/renderscript/ProgramFragment; +Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;->MODULATE:Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode; +Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;->REPLACE:Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode; +Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;->ALPHA:Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format; +Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;->RGB:Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format; +Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;->RGBA:Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format; +Landroid/renderscript/ProgramFragmentFixedFunction$Builder;-><init>(Landroid/renderscript/RenderScript;)V +Landroid/renderscript/ProgramFragmentFixedFunction$Builder;->create()Landroid/renderscript/ProgramFragmentFixedFunction; +Landroid/renderscript/ProgramFragmentFixedFunction$Builder;->setTexture(Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;I)Landroid/renderscript/ProgramFragmentFixedFunction$Builder; +Landroid/renderscript/ProgramFragmentFixedFunction$Builder;->setVaryingColor(Z)Landroid/renderscript/ProgramFragmentFixedFunction$Builder; +Landroid/renderscript/ProgramRaster$Builder;-><init>(Landroid/renderscript/RenderScript;)V +Landroid/renderscript/ProgramRaster$Builder;->create()Landroid/renderscript/ProgramRaster; +Landroid/renderscript/ProgramRaster$Builder;->setPointSpriteEnabled(Z)Landroid/renderscript/ProgramRaster$Builder; +Landroid/renderscript/ProgramStore$BlendDstFunc;->ONE:Landroid/renderscript/ProgramStore$BlendDstFunc; +Landroid/renderscript/ProgramStore$BlendDstFunc;->ONE_MINUS_SRC_ALPHA:Landroid/renderscript/ProgramStore$BlendDstFunc; +Landroid/renderscript/ProgramStore$BlendDstFunc;->ZERO:Landroid/renderscript/ProgramStore$BlendDstFunc; +Landroid/renderscript/ProgramStore$BlendSrcFunc;->ONE:Landroid/renderscript/ProgramStore$BlendSrcFunc; +Landroid/renderscript/ProgramStore$BlendSrcFunc;->SRC_ALPHA:Landroid/renderscript/ProgramStore$BlendSrcFunc; +Landroid/renderscript/ProgramStore$Builder;-><init>(Landroid/renderscript/RenderScript;)V +Landroid/renderscript/ProgramStore$Builder;->create()Landroid/renderscript/ProgramStore; +Landroid/renderscript/ProgramStore$Builder;->setBlendFunc(Landroid/renderscript/ProgramStore$BlendSrcFunc;Landroid/renderscript/ProgramStore$BlendDstFunc;)Landroid/renderscript/ProgramStore$Builder; +Landroid/renderscript/ProgramStore$Builder;->setDepthFunc(Landroid/renderscript/ProgramStore$DepthFunc;)Landroid/renderscript/ProgramStore$Builder; +Landroid/renderscript/ProgramStore$Builder;->setDepthMaskEnabled(Z)Landroid/renderscript/ProgramStore$Builder; +Landroid/renderscript/ProgramStore$Builder;->setDitherEnabled(Z)Landroid/renderscript/ProgramStore$Builder; +Landroid/renderscript/ProgramStore$DepthFunc;->ALWAYS:Landroid/renderscript/ProgramStore$DepthFunc; +Landroid/renderscript/ProgramStore$DepthFunc;->LESS:Landroid/renderscript/ProgramStore$DepthFunc; +Landroid/renderscript/ProgramStore;->BLEND_ALPHA_DEPTH_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore; +Landroid/renderscript/ProgramVertex$Builder;-><init>(Landroid/renderscript/RenderScript;)V +Landroid/renderscript/ProgramVertex$Builder;->addInput(Landroid/renderscript/Element;)Landroid/renderscript/ProgramVertex$Builder; +Landroid/renderscript/ProgramVertex$Builder;->create()Landroid/renderscript/ProgramVertex; +Landroid/renderscript/ProgramVertexFixedFunction$Builder;-><init>(Landroid/renderscript/RenderScript;)V +Landroid/renderscript/ProgramVertexFixedFunction$Builder;->create()Landroid/renderscript/ProgramVertexFixedFunction; +Landroid/renderscript/ProgramVertexFixedFunction$Constants;-><init>(Landroid/renderscript/RenderScript;)V +Landroid/renderscript/ProgramVertexFixedFunction$Constants;->setProjection(Landroid/renderscript/Matrix4f;)V +Landroid/renderscript/ProgramVertexFixedFunction;->bindConstants(Landroid/renderscript/ProgramVertexFixedFunction$Constants;)V Landroid/renderscript/RenderScript;->create(Landroid/content/Context;I)Landroid/renderscript/RenderScript; Landroid/renderscript/RenderScript;->create(Landroid/content/Context;ILandroid/renderscript/RenderScript$ContextType;I)Landroid/renderscript/RenderScript; Landroid/renderscript/RenderScript;->getMinorID()J +Landroid/renderscript/RenderScript;->mMessageCallback:Landroid/renderscript/RenderScript$RSMessageHandler; +Landroid/renderscript/RenderScript;->nScriptCCreate(Ljava/lang/String;Ljava/lang/String;[BI)J +Landroid/renderscript/RenderScript;->sPointerSize:I +Landroid/renderscript/RenderScript;->validate()V Landroid/renderscript/RenderScriptCacheDir;->mCacheDir:Ljava/io/File; Landroid/renderscript/RenderScriptCacheDir;->setupDiskCache(Ljava/io/File;)V +Landroid/renderscript/RenderScriptGL$SurfaceConfig;-><init>()V +Landroid/renderscript/RenderScriptGL$SurfaceConfig;->setDepth(II)V +Landroid/renderscript/RenderScriptGL;-><init>(Landroid/content/Context;Landroid/renderscript/RenderScriptGL$SurfaceConfig;)V +Landroid/renderscript/RenderScriptGL;->bindProgramRaster(Landroid/renderscript/ProgramRaster;)V +Landroid/renderscript/RenderScriptGL;->bindProgramStore(Landroid/renderscript/ProgramStore;)V +Landroid/renderscript/RenderScriptGL;->bindProgramVertex(Landroid/renderscript/ProgramVertex;)V +Landroid/renderscript/RenderScriptGL;->bindRootScript(Landroid/renderscript/Script;)V +Landroid/renderscript/RenderScriptGL;->setSurface(Landroid/view/SurfaceHolder;II)V +Landroid/renderscript/RSSurfaceView;-><init>(Landroid/content/Context;)V +Landroid/renderscript/RSSurfaceView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V +Landroid/renderscript/Script$Builder;-><init>(Landroid/renderscript/RenderScript;)V +Landroid/renderscript/Script$Builder;->mRS:Landroid/renderscript/RenderScript; +Landroid/security/Credentials;->convertToPem([[Ljava/security/cert/Certificate;)[B +Landroid/security/Credentials;->getInstance()Landroid/security/Credentials; +Landroid/security/Credentials;->install(Landroid/content/Context;Ljava/lang/String;[B)V +Landroid/security/Credentials;->install(Landroid/content/Context;Ljava/security/KeyPair;)V +Landroid/security/Credentials;->unlock(Landroid/content/Context;)V +Landroid/security/GateKeeper;->getSecureUserId()J +Landroid/security/IKeyChainService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeyChainService; +Landroid/security/IKeyChainService;->requestPrivateKey(Ljava/lang/String;)Ljava/lang/String; +Landroid/security/IKeystoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeystoreService; +Landroid/security/IKeystoreService;->clear_uid(J)I +Landroid/security/IKeystoreService;->del(Ljava/lang/String;I)I +Landroid/security/IKeystoreService;->exist(Ljava/lang/String;I)I +Landroid/security/IKeystoreService;->get(Ljava/lang/String;I)[B +Landroid/security/IKeystoreService;->getState(I)I +Landroid/security/IKeystoreService;->get_pubkey(Ljava/lang/String;)[B +Landroid/security/IKeystoreService;->import_key(Ljava/lang/String;[BII)I +Landroid/security/IKeystoreService;->insert(Ljava/lang/String;[BII)I +Landroid/security/IKeystoreService;->is_hardware_backed(Ljava/lang/String;)I +Landroid/security/IKeystoreService;->list(Ljava/lang/String;I)[Ljava/lang/String; +Landroid/security/IKeystoreService;->reset()I +Landroid/security/IKeystoreService;->sign(Ljava/lang/String;[B)[B +Landroid/security/IKeystoreService;->ungrant(Ljava/lang/String;I)I +Landroid/security/IKeystoreService;->verify(Ljava/lang/String;[B[B)I +Landroid/security/keymaster/ExportResult;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/security/keymaster/KeyCharacteristics;-><init>()V +Landroid/security/keymaster/KeyCharacteristics;->readFromParcel(Landroid/os/Parcel;)V +Landroid/security/keymaster/KeymasterArguments;-><init>()V +Landroid/security/keymaster/KeymasterArguments;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/security/keymaster/KeymasterArguments;->readFromParcel(Landroid/os/Parcel;)V +Landroid/security/keymaster/KeymasterBlob;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/security/keymaster/OperationResult;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/security/KeyStore$State;->LOCKED:Landroid/security/KeyStore$State; +Landroid/security/KeyStore$State;->UNLOCKED:Landroid/security/KeyStore$State; Landroid/security/keystore/AndroidKeyStoreProvider;->getKeyStoreOperationHandle(Ljava/lang/Object;)J +Landroid/security/keystore/KeyGenParameterSpec;->getUid()I +Landroid/security/keystore/KeyGenParameterSpec;->isUniqueIdIncluded()Z +Landroid/security/KeyStore;->delete(Ljava/lang/String;)Z +Landroid/security/KeyStore;->get(Ljava/lang/String;)[B +Landroid/security/KeyStore;->getApplicationContext()Landroid/content/Context; Landroid/security/KeyStore;->getInstance()Landroid/security/KeyStore; +Landroid/security/KeyStore;->isEmpty()Z +Landroid/security/KeyStore;->NO_ERROR:I +Landroid/security/KeyStore;->reset()Z +Landroid/security/KeyStore;->state()Landroid/security/KeyStore$State; +Landroid/security/KeyStore;->state(I)Landroid/security/KeyStore$State; +Landroid/security/KeyStore;->unlock(Ljava/lang/String;)Z +Landroid/security/KeystoreArguments;-><init>([[B)V +Landroid/security/KeystoreArguments;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/security/net/config/RootTrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List; +Landroid/service/carrier/ICarrierMessagingCallback$Stub;-><init>()V +Landroid/service/carrier/ICarrierMessagingService;->filterSms(Landroid/service/carrier/MessagePdu;Ljava/lang/String;IILandroid/service/carrier/ICarrierMessagingCallback;)V +Landroid/service/dreams/DreamService;->getDozeScreenBrightness()I +Landroid/service/dreams/DreamService;->setDozeScreenBrightness(I)V +Landroid/service/dreams/DreamService;->setDozeScreenState(I)V +Landroid/service/dreams/DreamService;->setWindowless(Z)V +Landroid/service/dreams/IDreamManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/dreams/IDreamManager; +Landroid/service/dreams/IDreamManager;->awaken()V +Landroid/service/dreams/IDreamManager;->dream()V +Landroid/service/dreams/IDreamManager;->getDreamComponents()[Landroid/content/ComponentName; +Landroid/service/dreams/IDreamManager;->isDreaming()Z +Landroid/service/dreams/IDreamManager;->setDreamComponents([Landroid/content/ComponentName;)V +Landroid/service/euicc/IDeleteSubscriptionCallback;->onComplete(I)V +Landroid/service/euicc/IDownloadSubscriptionCallback;->onComplete(I)V +Landroid/service/euicc/IEraseSubscriptionsCallback;->onComplete(I)V +Landroid/service/euicc/IEuiccService$Stub;-><init>()V +Landroid/service/euicc/IGetDefaultDownloadableSubscriptionListCallback;->onComplete(Landroid/service/euicc/GetDefaultDownloadableSubscriptionListResult;)V +Landroid/service/euicc/IGetDownloadableSubscriptionMetadataCallback;->onComplete(Landroid/service/euicc/GetDownloadableSubscriptionMetadataResult;)V +Landroid/service/euicc/IGetEidCallback;->onSuccess(Ljava/lang/String;)V +Landroid/service/euicc/IGetEuiccInfoCallback;->onSuccess(Landroid/telephony/euicc/EuiccInfo;)V +Landroid/service/euicc/IGetEuiccProfileInfoListCallback;->onComplete(Landroid/service/euicc/GetEuiccProfileInfoListResult;)V +Landroid/service/euicc/IRetainSubscriptionsForFactoryResetCallback;->onComplete(I)V +Landroid/service/euicc/ISwitchToSubscriptionCallback;->onComplete(I)V +Landroid/service/euicc/IUpdateSubscriptionNicknameCallback;->onComplete(I)V Landroid/service/media/IMediaBrowserServiceCallbacks$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/media/IMediaBrowserServiceCallbacks; Landroid/service/media/IMediaBrowserServiceCallbacks;->onConnect(Ljava/lang/String;Landroid/media/session/MediaSession$Token;Landroid/os/Bundle;)V Landroid/service/media/IMediaBrowserServiceCallbacks;->onConnectFailed()V @@ -2289,16 +4796,57 @@ Landroid/service/media/IMediaBrowserServiceCallbacks;->onLoadChildren(Ljava/lang Landroid/service/media/IMediaBrowserServiceCallbacks;->onLoadChildrenWithOptions(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;Landroid/os/Bundle;)V Landroid/service/media/MediaBrowserService$Result;->mFlags:I Landroid/service/media/MediaBrowserService;->KEY_MEDIA_ITEM:Ljava/lang/String; +Landroid/service/notification/INotificationListener$Stub;-><init>()V +Landroid/service/notification/NotificationListenerService$Ranking;->getVisibilityOverride()I Landroid/service/notification/NotificationListenerService;->isBound()Z Landroid/service/notification/NotificationListenerService;->mHandler:Landroid/os/Handler; Landroid/service/notification/StatusBarNotification;->getInitialPid()I +Landroid/service/notification/StatusBarNotification;->getOpPkg()Ljava/lang/String; +Landroid/service/notification/StatusBarNotification;->getPackageContext(Landroid/content/Context;)Landroid/content/Context; Landroid/service/notification/StatusBarNotification;->getUid()I +Landroid/service/notification/StatusBarNotification;->uid:I +Landroid/service/notification/ZenModeConfig$ScheduleInfo;->days:[I +Landroid/service/notification/ZenModeConfig$ScheduleInfo;->endHour:I +Landroid/service/notification/ZenModeConfig$ScheduleInfo;->endMinute:I +Landroid/service/notification/ZenModeConfig$ScheduleInfo;->startHour:I +Landroid/service/notification/ZenModeConfig$ScheduleInfo;->startMinute:I +Landroid/service/notification/ZenModeConfig$ZenRule;->conditionId:Landroid/net/Uri; +Landroid/service/notification/ZenModeConfig$ZenRule;->creationTime:J +Landroid/service/notification/ZenModeConfig$ZenRule;->enabled:Z +Landroid/service/notification/ZenModeConfig$ZenRule;->name:Ljava/lang/String; +Landroid/service/notification/ZenModeConfig$ZenRule;->snoozing:Z +Landroid/service/notification/ZenModeConfig$ZenRule;->zenMode:I +Landroid/service/notification/ZenModeConfig;-><init>()V +Landroid/service/notification/ZenModeConfig;->allowAlarms:Z +Landroid/service/notification/ZenModeConfig;->automaticRules:Landroid/util/ArrayMap; +Landroid/service/notification/ZenModeConfig;->tryParseScheduleConditionId(Landroid/net/Uri;)Landroid/service/notification/ZenModeConfig$ScheduleInfo; Landroid/service/persistentdata/IPersistentDataBlockService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/persistentdata/IPersistentDataBlockService; Landroid/service/voice/AlwaysOnHotwordDetector$EventPayload;->getCaptureSession()Ljava/lang/Integer; Landroid/service/voice/VoiceInteractionService;->isKeyphraseAndLocaleSupportedForHotword(Ljava/lang/String;Ljava/util/Locale;)Z +Landroid/service/vr/IVrManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/vr/IVrManager; Landroid/service/vr/IVrManager;->getVr2dDisplayId()I +Landroid/service/vr/IVrManager;->getVrModeState()Z +Landroid/service/wallpaper/IWallpaperConnection$Stub;-><init>()V +Landroid/service/wallpaper/IWallpaperEngine;->destroy()V +Landroid/service/wallpaper/IWallpaperEngine;->dispatchPointer(Landroid/view/MotionEvent;)V +Landroid/service/wallpaper/IWallpaperEngine;->dispatchWallpaperCommand(Ljava/lang/String;IIILandroid/os/Bundle;)V +Landroid/service/wallpaper/IWallpaperEngine;->setDesiredSize(II)V +Landroid/service/wallpaper/IWallpaperEngine;->setVisibility(Z)V +Landroid/service/wallpaper/IWallpaperService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/wallpaper/IWallpaperService; +Landroid/service/wallpaper/WallpaperService$Engine;->mPendingXOffset:F Landroid/service/wallpaper/WallpaperService$Engine;->setFixedSizeAllowed(Z)V +Landroid/service/wallpaper/WallpaperService;->MSG_WINDOW_RESIZED:I Landroid/speech/tts/TextToSpeech;->getCurrentEngine()Ljava/lang/String; +Landroid/speech/tts/TextToSpeech;->mConnectingServiceConnection:Landroid/speech/tts/TextToSpeech$Connection; +Landroid/speech/tts/TextToSpeech;->mCurrentEngine:Ljava/lang/String; +Landroid/speech/tts/TextToSpeech;->mInitListener:Landroid/speech/tts/TextToSpeech$OnInitListener; +Landroid/speech/tts/TtsEngines;-><init>(Landroid/content/Context;)V +Landroid/speech/tts/TtsEngines;->getEngines()Ljava/util/List; +Landroid/speech/tts/TtsEngines;->getLocalePrefForEngine(Ljava/lang/String;)Ljava/util/Locale; +Landroid/speech/tts/TtsEngines;->getSettingsIntent(Ljava/lang/String;)Landroid/content/Intent; +Landroid/speech/tts/TtsEngines;->normalizeTTSLocale(Ljava/util/Locale;)Ljava/util/Locale; +Landroid/speech/tts/TtsEngines;->parseLocaleString(Ljava/lang/String;)Ljava/util/Locale; +Landroid/speech/tts/TtsEngines;->updateLocalePrefForEngine(Ljava/lang/String;Ljava/util/Locale;)V Landroid/system/Int32Ref;->value:I Landroid/system/OsConstants;-><init>()V Landroid/system/OsConstants;->AF_NETLINK:I @@ -2356,12 +4904,69 @@ Landroid/system/OsConstants;->XATTR_REPLACE:I Landroid/system/OsConstants;->_LINUX_CAPABILITY_VERSION_3:I Landroid/system/StructTimeval;->fromMillis(J)Landroid/system/StructTimeval; Landroid/telecom/AudioState;->isMuted:Z +Landroid/telecom/AudioState;->route:I +Landroid/telecom/AudioState;->supportedRouteMask:I +Landroid/telecom/Call$Details;->CAPABILITY_CAN_UPGRADE_TO_VIDEO:I +Landroid/telecom/Connection$VideoProvider;-><init>(Landroid/os/Looper;)V +Landroid/telecom/Phone;->setProximitySensorOff(Z)V +Landroid/telecom/Phone;->setProximitySensorOn()V Landroid/telecom/TelecomManager;->EXTRA_IS_HANDOVER:Ljava/lang/String; +Landroid/telecom/TelecomManager;->getCallCapablePhoneAccounts(Z)Ljava/util/List; +Landroid/telecom/TelecomManager;->getCurrentTtyMode()I +Landroid/telecom/TelecomManager;->getSimCallManager(I)Landroid/telecom/PhoneAccountHandle; +Landroid/telecom/TelecomManager;->getSystemDialerPackage()Ljava/lang/String; Landroid/telecom/TelecomManager;->getUserSelectedOutgoingPhoneAccount()Landroid/telecom/PhoneAccountHandle; +Landroid/telecom/TelecomManager;->setDefaultDialer(Ljava/lang/String;)Z Landroid/telecom/TelecomManager;->setUserSelectedOutgoingPhoneAccount(Landroid/telecom/PhoneAccountHandle;)V +Landroid/telecom/TelecomManager;->TTY_MODE_OFF:I +Landroid/telecom/VideoCallImpl;->destroy()V +Landroid/telephony/CarrierConfigManager;->KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY:Ljava/lang/String; +Landroid/telephony/CarrierConfigManager;->KEY_DISABLE_VOICE_BARRING_NOTIFICATION_BOOL:Ljava/lang/String; +Landroid/telephony/CarrierMessagingServiceManager;-><init>()V +Landroid/telephony/CellBroadcastMessage;-><init>(Landroid/telephony/SmsCbMessage;)V +Landroid/telephony/CellBroadcastMessage;->createFromCursor(Landroid/database/Cursor;)Landroid/telephony/CellBroadcastMessage; +Landroid/telephony/CellBroadcastMessage;->getContentValues()Landroid/content/ContentValues; +Landroid/telephony/CellBroadcastMessage;->getDeliveryTime()J +Landroid/telephony/CellBroadcastMessage;->getEtwsWarningInfo()Landroid/telephony/SmsCbEtwsInfo; +Landroid/telephony/CellBroadcastMessage;->getLanguageCode()Ljava/lang/String; +Landroid/telephony/CellBroadcastMessage;->getMessageBody()Ljava/lang/String; +Landroid/telephony/CellBroadcastMessage;->getSerialNumber()I +Landroid/telephony/CellBroadcastMessage;->getServiceCategory()I +Landroid/telephony/CellBroadcastMessage;->getSpokenDateString(Landroid/content/Context;)Ljava/lang/String; +Landroid/telephony/CellBroadcastMessage;->isCmasMessage()Z +Landroid/telephony/CellBroadcastMessage;->isEmergencyAlertMessage()Z +Landroid/telephony/CellBroadcastMessage;->isEtwsMessage()Z +Landroid/telephony/CellBroadcastMessage;->isRead()Z +Landroid/telephony/CellIdentityCdma;-><init>(IIIII)V +Landroid/telephony/CellIdentityGsm;-><init>()V +Landroid/telephony/CellIdentityGsm;->mArfcn:I Landroid/telephony/CellIdentityGsm;->mBsic:I +Landroid/telephony/CellIdentityLte;-><init>()V +Landroid/telephony/CellIdentityLte;-><init>(IIIII)V +Landroid/telephony/CellIdentityLte;->mEarfcn:I +Landroid/telephony/CellIdentityWcdma;->mUarfcn:I +Landroid/telephony/CellInfo;->getTimeStampType()I +Landroid/telephony/CellInfo;->timeStampTypeToString(I)Ljava/lang/String; +Landroid/telephony/CellInfo;->TIMESTAMP_TYPE_ANTENNA:I +Landroid/telephony/CellInfo;->TIMESTAMP_TYPE_JAVA_RIL:I +Landroid/telephony/CellInfo;->TIMESTAMP_TYPE_MODEM:I +Landroid/telephony/CellInfo;->TIMESTAMP_TYPE_OEM_RIL:I +Landroid/telephony/CellInfo;->TIMESTAMP_TYPE_UNKNOWN:I +Landroid/telephony/CellInfoCdma;-><init>()V +Landroid/telephony/CellInfoCdma;-><init>(Landroid/telephony/CellInfoCdma;)V +Landroid/telephony/CellInfoCdma;->setCellIdentity(Landroid/telephony/CellIdentityCdma;)V +Landroid/telephony/CellInfoGsm;-><init>()V +Landroid/telephony/CellInfoLte;-><init>()V +Landroid/telephony/CellInfoLte;->setCellIdentity(Landroid/telephony/CellIdentityLte;)V +Landroid/telephony/CellInfoLte;->setCellSignalStrength(Landroid/telephony/CellSignalStrengthLte;)V +Landroid/telephony/CellLocation;->fillInNotifierBundle(Landroid/os/Bundle;)V +Landroid/telephony/CellLocation;->isEmpty()Z +Landroid/telephony/CellLocation;->newFromBundle(Landroid/os/Bundle;)Landroid/telephony/CellLocation; +Landroid/telephony/CellSignalStrengthGsm;-><init>()V Landroid/telephony/CellSignalStrengthGsm;->mBitErrorRate:I Landroid/telephony/CellSignalStrengthGsm;->mSignalStrength:I +Landroid/telephony/CellSignalStrengthGsm;->mTimingAdvance:I +Landroid/telephony/CellSignalStrengthLte;-><init>()V Landroid/telephony/CellSignalStrengthLte;->mCqi:I Landroid/telephony/CellSignalStrengthLte;->mRsrp:I Landroid/telephony/CellSignalStrengthLte;->mRsrq:I @@ -2370,39 +4975,151 @@ Landroid/telephony/CellSignalStrengthLte;->mSignalStrength:I Landroid/telephony/CellSignalStrengthLte;->mTimingAdvance:I Landroid/telephony/CellSignalStrengthWcdma;->mBitErrorRate:I Landroid/telephony/CellSignalStrengthWcdma;->mSignalStrength:I +Landroid/telephony/DisconnectCause;->toString(I)Ljava/lang/String; +Landroid/telephony/euicc/EuiccInfo;->osVersion:Ljava/lang/String; +Landroid/telephony/gsm/GsmCellLocation;->setPsc(I)V +Landroid/telephony/PhoneNumberFormattingTextWatcher;->mFormatter:Lcom/android/i18n/phonenumbers/AsYouTypeFormatter; +Landroid/telephony/PhoneNumberUtils;->cdmaCheckAndProcessPlusCode(Ljava/lang/String;)Ljava/lang/String; +Landroid/telephony/PhoneNumberUtils;->compare(Ljava/lang/String;Ljava/lang/String;Z)Z +Landroid/telephony/PhoneNumberUtils;->compareLoosely(Ljava/lang/String;Ljava/lang/String;)Z +Landroid/telephony/PhoneNumberUtils;->compareStrictly(Ljava/lang/String;Ljava/lang/String;)Z +Landroid/telephony/PhoneNumberUtils;->compareStrictly(Ljava/lang/String;Ljava/lang/String;Z)Z +Landroid/telephony/PhoneNumberUtils;->convertPreDial(Ljava/lang/String;)Ljava/lang/String; +Landroid/telephony/PhoneNumberUtils;->extractNetworkPortionAlt(Ljava/lang/String;)Ljava/lang/String; +Landroid/telephony/PhoneNumberUtils;->getUsernameFromUriNumber(Ljava/lang/String;)Ljava/lang/String; +Landroid/telephony/PhoneNumberUtils;->isEmergencyNumber(Ljava/lang/String;Ljava/lang/String;)Z Landroid/telephony/PhoneNumberUtils;->isLocalEmergencyNumber(Landroid/content/Context;ILjava/lang/String;)Z +Landroid/telephony/PhoneNumberUtils;->isNanp(Ljava/lang/String;)Z +Landroid/telephony/PhoneNumberUtils;->isUriNumber(Ljava/lang/String;)Z +Landroid/telephony/PhoneNumberUtils;->isVoiceMailNumber(Landroid/content/Context;ILjava/lang/String;)Z +Landroid/telephony/PhoneNumberUtils;->MIN_MATCH:I +Landroid/telephony/PhoneNumberUtils;->ttsSpanAsPhoneNumber(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; +Landroid/telephony/PhoneStateListener;-><init>(Landroid/os/Looper;)V +Landroid/telephony/PhoneStateListener;->LISTEN_PRECISE_CALL_STATE:I Landroid/telephony/PhoneStateListener;->mSubId:Ljava/lang/Integer; +Landroid/telephony/PhoneStateListener;->onDataConnectionRealTimeInfoChanged(Landroid/telephony/DataConnectionRealTimeInfo;)V +Landroid/telephony/PhoneStateListener;->onOemHookRawEvent([B)V +Landroid/telephony/PhoneStateListener;->onOtaspChanged(I)V +Landroid/telephony/PhoneStateListener;->onPreciseCallStateChanged(Landroid/telephony/PreciseCallState;)V +Landroid/telephony/PhoneStateListener;->onPreciseDataConnectionStateChanged(Landroid/telephony/PreciseDataConnectionState;)V +Landroid/telephony/PhoneStateListener;->onVoLteServiceStateChanged(Landroid/telephony/VoLteServiceState;)V +Landroid/telephony/PreciseCallState;-><init>(IIIII)V +Landroid/telephony/PreciseCallState;->getDisconnectCause()I +Landroid/telephony/PreciseCallState;->getPreciseDisconnectCause()I +Landroid/telephony/PreciseCallState;->getRingingCallState()I +Landroid/telephony/PreciseDataConnectionState;-><init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Ljava/lang/String;)V +Landroid/telephony/PreciseDataConnectionState;->getDataConnectionAPN()Ljava/lang/String; +Landroid/telephony/PreciseDataConnectionState;->getDataConnectionAPNType()Ljava/lang/String; +Landroid/telephony/PreciseDataConnectionState;->getDataConnectionChangeReason()Ljava/lang/String; +Landroid/telephony/PreciseDataConnectionState;->getDataConnectionFailCause()Ljava/lang/String; +Landroid/telephony/PreciseDataConnectionState;->getDataConnectionLinkProperties()Landroid/net/LinkProperties; +Landroid/telephony/PreciseDataConnectionState;->getDataConnectionNetworkType()I +Landroid/telephony/PreciseDataConnectionState;->getDataConnectionState()I +Landroid/telephony/RadioAccessFamily;->getNetworkTypeFromRaf(I)I +Landroid/telephony/RadioAccessFamily;->getPhoneId()I +Landroid/telephony/RadioAccessFamily;->getRadioAccessFamily()I +Landroid/telephony/Rlog;->d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I +Landroid/telephony/Rlog;->i(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I Landroid/telephony/Rlog;->v(Ljava/lang/String;Ljava/lang/String;)I +Landroid/telephony/Rlog;->w(Ljava/lang/String;Ljava/lang/String;)I +Landroid/telephony/Rlog;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I +Landroid/telephony/ServiceState;->bearerBitmapHasCdma(I)Z +Landroid/telephony/ServiceState;->fillInNotifierBundle(Landroid/os/Bundle;)V +Landroid/telephony/ServiceState;->getCdmaDefaultRoamingIndicator()I +Landroid/telephony/ServiceState;->getCdmaEriIconIndex()I +Landroid/telephony/ServiceState;->getCdmaEriIconMode()I +Landroid/telephony/ServiceState;->getCdmaRoamingIndicator()I +Landroid/telephony/ServiceState;->getCssIndicator()I +Landroid/telephony/ServiceState;->getDataNetworkType()I +Landroid/telephony/ServiceState;->getDataOperatorAlphaShort()Ljava/lang/String; +Landroid/telephony/ServiceState;->getDataOperatorNumeric()Ljava/lang/String; +Landroid/telephony/ServiceState;->getDataRoamingType()I +Landroid/telephony/ServiceState;->getRadioTechnology()I +Landroid/telephony/ServiceState;->getRilVoiceRadioTechnology()I +Landroid/telephony/ServiceState;->getVoiceOperatorAlphaLong()Ljava/lang/String; +Landroid/telephony/ServiceState;->getVoiceOperatorAlphaShort()Ljava/lang/String; +Landroid/telephony/ServiceState;->getVoiceOperatorNumeric()Ljava/lang/String; +Landroid/telephony/ServiceState;->getVoiceRoaming()Z +Landroid/telephony/ServiceState;->getVoiceRoamingType()I Landroid/telephony/ServiceState;->newFromBundle(Landroid/os/Bundle;)Landroid/telephony/ServiceState; +Landroid/telephony/ServiceState;->RIL_RADIO_TECHNOLOGY_IWLAN:I +Landroid/telephony/ServiceState;->setCdmaDefaultRoamingIndicator(I)V +Landroid/telephony/ServiceState;->setCdmaEriIconIndex(I)V +Landroid/telephony/ServiceState;->setCdmaEriIconMode(I)V +Landroid/telephony/ServiceState;->setCdmaRoamingIndicator(I)V +Landroid/telephony/ServiceState;->setCssIndicator(I)V +Landroid/telephony/ServiceState;->setDataRegState(I)V +Landroid/telephony/ServiceState;->setDataRoaming(Z)V +Landroid/telephony/ServiceState;->setDataRoamingFromRegistration(Z)V +Landroid/telephony/ServiceState;->setDataRoamingType(I)V +Landroid/telephony/ServiceState;->setEmergencyOnly(Z)V +Landroid/telephony/ServiceState;->setOperatorAlphaLong(Ljava/lang/String;)V +Landroid/telephony/ServiceState;->setVoiceRegState(I)V +Landroid/telephony/ServiceState;->setVoiceRoaming(Z)V +Landroid/telephony/ServiceState;->setVoiceRoamingType(I)V Landroid/telephony/SignalStrength;-><init>()V +Landroid/telephony/SignalStrength;-><init>(Landroid/telephony/SignalStrength;)V +Landroid/telephony/SignalStrength;-><init>(Z)V +Landroid/telephony/SignalStrength;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/telephony/SignalStrength;->fillInNotifierBundle(Landroid/os/Bundle;)V Landroid/telephony/SignalStrength;->getAsuLevel()I +Landroid/telephony/SignalStrength;->getCdmaAsuLevel()I Landroid/telephony/SignalStrength;->getCdmaLevel()I Landroid/telephony/SignalStrength;->getDbm()I +Landroid/telephony/SignalStrength;->getEvdoAsuLevel()I +Landroid/telephony/SignalStrength;->getEvdoLevel()I +Landroid/telephony/SignalStrength;->getGsmAsuLevel()I Landroid/telephony/SignalStrength;->getGsmDbm()I +Landroid/telephony/SignalStrength;->getGsmLevel()I +Landroid/telephony/SignalStrength;->getLteAsuLevel()I Landroid/telephony/SignalStrength;->getLteCqi()I Landroid/telephony/SignalStrength;->getLteDbm()I +Landroid/telephony/SignalStrength;->getLteLevel()I Landroid/telephony/SignalStrength;->getLteRsrp()I Landroid/telephony/SignalStrength;->getLteRsrq()I Landroid/telephony/SignalStrength;->getLteRssnr()I Landroid/telephony/SignalStrength;->getLteSignalStrength()I +Landroid/telephony/SignalStrength;->getTdScdmaAsuLevel()I +Landroid/telephony/SignalStrength;->getTdScdmaDbm()I +Landroid/telephony/SignalStrength;->getTdScdmaLevel()I Landroid/telephony/SignalStrength;->mGsmBitErrorRate:I Landroid/telephony/SignalStrength;->mGsmSignalStrength:I Landroid/telephony/SignalStrength;->mLteCqi:I Landroid/telephony/SignalStrength;->mLteRsrp:I +Landroid/telephony/SignalStrength;->mLteRsrpBoost:I Landroid/telephony/SignalStrength;->mLteRsrq:I Landroid/telephony/SignalStrength;->mLteRssnr:I Landroid/telephony/SignalStrength;->mLteSignalStrength:I +Landroid/telephony/SignalStrength;->mTdScdmaRscp:I +Landroid/telephony/SignalStrength;->mWcdmaRscp:I +Landroid/telephony/SignalStrength;->newFromBundle(Landroid/os/Bundle;)Landroid/telephony/SignalStrength; +Landroid/telephony/SignalStrength;->NUM_SIGNAL_STRENGTH_BINS:I Landroid/telephony/SignalStrength;->SIGNAL_STRENGTH_GOOD:I Landroid/telephony/SignalStrength;->SIGNAL_STRENGTH_GREAT:I Landroid/telephony/SignalStrength;->SIGNAL_STRENGTH_MODERATE:I Landroid/telephony/SignalStrength;->SIGNAL_STRENGTH_NONE_OR_UNKNOWN:I Landroid/telephony/SignalStrength;->SIGNAL_STRENGTH_POOR:I +Landroid/telephony/SignalStrength;->validateInput()V +Landroid/telephony/SmsManager;->copyMessageToIcc([B[BI)Z Landroid/telephony/SmsManager;->deleteMessageFromIcc(I)Z +Landroid/telephony/SmsManager;->disableCellBroadcastRange(III)Z +Landroid/telephony/SmsManager;->enableCellBroadcastRange(III)Z Landroid/telephony/SmsManager;->getAllMessagesFromIcc()Ljava/util/ArrayList; +Landroid/telephony/SmsManager;->isSMSPromptEnabled()Z Landroid/telephony/SmsManager;->sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;IZI)V Landroid/telephony/SmsManager;->sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;IZI)V +Landroid/telephony/SmsManager;->sendTextMessageWithoutPersisting(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;IZI)V +Landroid/telephony/SmsManager;->updateMessageOnIcc(II[B)Z +Landroid/telephony/SmsMessage;->fragmentText(Ljava/lang/String;)Ljava/util/ArrayList; Landroid/telephony/SmsMessage;->getSubId()I +Landroid/telephony/SmsMessage;->mSubId:I Landroid/telephony/SmsMessage;->mWrappedSmsMessage:Lcom/android/internal/telephony/SmsMessageBase; +Landroid/telephony/SmsMessage;->setSubId(I)V +Landroid/telephony/SmsMessage;->useCdmaFormatForMoSms()Z +Landroid/telephony/SmsMessage;->useCdmaFormatForMoSms(I)Z +Landroid/telephony/SubscriptionManager;-><init>(Landroid/content/Context;)V +Landroid/telephony/SubscriptionManager;->CONTENT_URI:Landroid/net/Uri; +Landroid/telephony/SubscriptionManager;->DEFAULT_SUBSCRIPTION_ID:I Landroid/telephony/SubscriptionManager;->getActiveSubscriptionIdList()[I Landroid/telephony/SubscriptionManager;->getAllSubscriptionInfoCount()I Landroid/telephony/SubscriptionManager;->getAllSubscriptionInfoList()Ljava/util/List; @@ -2413,37 +5130,75 @@ Landroid/telephony/SubscriptionManager;->getDefaultVoiceSubscriptionInfo()Landro Landroid/telephony/SubscriptionManager;->getPhoneId(I)I Landroid/telephony/SubscriptionManager;->getSlotIndex(I)I Landroid/telephony/SubscriptionManager;->getSubId(I)[I +Landroid/telephony/SubscriptionManager;->NAME_SOURCE_USER_INPUT:I +Landroid/telephony/SubscriptionManager;->setDataRoaming(II)I Landroid/telephony/SubscriptionManager;->setDefaultDataSubId(I)V Landroid/telephony/SubscriptionManager;->setDefaultSmsSubId(I)V +Landroid/telephony/TelephonyManager$MultiSimVariants;->TSTS:Landroid/telephony/TelephonyManager$MultiSimVariants; +Landroid/telephony/TelephonyManager$MultiSimVariants;->UNKNOWN:Landroid/telephony/TelephonyManager$MultiSimVariants; +Landroid/telephony/TelephonyManager$MultiSimVariants;->values()[Landroid/telephony/TelephonyManager$MultiSimVariants; Landroid/telephony/TelephonyManager;-><init>()V Landroid/telephony/TelephonyManager;-><init>(Landroid/content/Context;)V +Landroid/telephony/TelephonyManager;->ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED:Ljava/lang/String; Landroid/telephony/TelephonyManager;->from(Landroid/content/Context;)Landroid/telephony/TelephonyManager; Landroid/telephony/TelephonyManager;->getCallState(I)I +Landroid/telephony/TelephonyManager;->getCdmaEriIconIndex(I)I +Landroid/telephony/TelephonyManager;->getCdmaEriIconMode(I)I +Landroid/telephony/TelephonyManager;->getCdmaEriText(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getCompleteVoiceMailNumber()Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getCompleteVoiceMailNumber(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getDataNetworkType(I)I Landroid/telephony/TelephonyManager;->getDefault()Landroid/telephony/TelephonyManager; +Landroid/telephony/TelephonyManager;->getDeviceSoftwareVersion(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getGroupIdLevel1(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getIccAuthentication(IIILjava/lang/String;)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getIsimImpi()Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getIsimImpu()[Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getIsimPcscf()[Ljava/lang/String; Landroid/telephony/TelephonyManager;->getITelephony()Lcom/android/internal/telephony/ITelephony; +Landroid/telephony/TelephonyManager;->getLine1AlphaTag(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getLine1Number(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getLteOnCdmaMode()I +Landroid/telephony/TelephonyManager;->getLteOnCdmaMode(I)I +Landroid/telephony/TelephonyManager;->getLteOnCdmaModeStatic()I +Landroid/telephony/TelephonyManager;->getMergedSubscriberIds()[Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getMsisdn()Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getMsisdn(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getMultiSimConfiguration()Landroid/telephony/TelephonyManager$MultiSimVariants; Landroid/telephony/TelephonyManager;->getNai(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getNetworkClass(I)I Landroid/telephony/TelephonyManager;->getNetworkCountryIso(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getNetworkCountryIsoForPhone(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getNetworkOperator(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getNetworkOperatorForPhone(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getNetworkOperatorName(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getNetworkType(I)I Landroid/telephony/TelephonyManager;->getNetworkTypeName(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getOtaSpNumberSchemaForPhone(ILjava/lang/String;)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getPhoneId(I)I Landroid/telephony/TelephonyManager;->getPhoneType(I)I +Landroid/telephony/TelephonyManager;->getPhoneTypeFromProperty(I)I +Landroid/telephony/TelephonyManager;->getProcCmdLine()Ljava/lang/String; Landroid/telephony/TelephonyManager;->getSimCount()I +Landroid/telephony/TelephonyManager;->getSimCountryIso(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getSimCountryIsoForPhone(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getSimOperator(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getSimOperatorName(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getSimOperatorNameForPhone(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getSimOperatorNumeric()Ljava/lang/String; Landroid/telephony/TelephonyManager;->getSimOperatorNumeric(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getSimOperatorNumericForPhone(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getSimSerialNumber(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getSlotIndex()I +Landroid/telephony/TelephonyManager;->getSubId(I)I Landroid/telephony/TelephonyManager;->getSubIdForPhoneAccount(Landroid/telecom/PhoneAccount;)I Landroid/telephony/TelephonyManager;->getSubscriberId(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getSubscriberInfo()Lcom/android/internal/telephony/IPhoneSubInfo; +Landroid/telephony/TelephonyManager;->getTelephonyProperty(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getTelephonyProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getVoiceMailAlphaTag(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getVoiceMailNumber(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getVoiceMessageCount(I)I Landroid/telephony/TelephonyManager;->hasIccCard(I)Z Landroid/telephony/TelephonyManager;->isMultiSimEnabled()Z Landroid/telephony/TelephonyManager;->isNetworkRoaming(I)Z @@ -2451,16 +5206,85 @@ Landroid/telephony/TelephonyManager;->isVideoTelephonyAvailable()Z Landroid/telephony/TelephonyManager;->isVolteAvailable()Z Landroid/telephony/TelephonyManager;->isWifiCallingAvailable()Z Landroid/telephony/TelephonyManager;->mSubscriptionManager:Landroid/telephony/SubscriptionManager; +Landroid/telephony/TelephonyManager;->NETWORK_CLASS_2_G:I +Landroid/telephony/TelephonyManager;->NETWORK_CLASS_3_G:I +Landroid/telephony/TelephonyManager;->NETWORK_CLASS_4_G:I +Landroid/telephony/TelephonyManager;->NETWORK_TYPE_LTE_CA:I +Landroid/telephony/TelephonyManager;->nvReadItem(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->setBasebandVersionForPhone(ILjava/lang/String;)V +Landroid/telephony/TelephonyManager;->setDataNetworkTypeForPhone(II)V +Landroid/telephony/TelephonyManager;->setImsRegistrationState(Z)V +Landroid/telephony/TelephonyManager;->setNetworkCountryIso(Ljava/lang/String;)V +Landroid/telephony/TelephonyManager;->setNetworkCountryIsoForPhone(ILjava/lang/String;)V +Landroid/telephony/TelephonyManager;->setNetworkOperatorNameForPhone(ILjava/lang/String;)V +Landroid/telephony/TelephonyManager;->setNetworkOperatorNumericForPhone(ILjava/lang/String;)V +Landroid/telephony/TelephonyManager;->setNetworkRoamingForPhone(IZ)V +Landroid/telephony/TelephonyManager;->setPhoneType(II)V +Landroid/telephony/TelephonyManager;->setRoamingOverride(Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Z +Landroid/telephony/TelephonyManager;->setSimCountryIsoForPhone(ILjava/lang/String;)V +Landroid/telephony/TelephonyManager;->setSimOperatorNameForPhone(ILjava/lang/String;)V +Landroid/telephony/TelephonyManager;->setSimOperatorNumericForPhone(ILjava/lang/String;)V +Landroid/telephony/TelephonyManager;->setSimStateForPhone(ILjava/lang/String;)V +Landroid/telephony/TelephonyManager;->setTelephonyProperty(ILjava/lang/String;Ljava/lang/String;)V +Landroid/telephony/VoLteServiceState;-><init>(I)V Landroid/text/AndroidBidi;->bidi(I[C[B)I Landroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;Landroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics; Landroid/text/DynamicLayout;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZIIILandroid/text/TextUtils$TruncateAt;I)V +Landroid/text/DynamicLayout;->getBlockEndLines()[I +Landroid/text/DynamicLayout;->getBlockIndices()[I +Landroid/text/DynamicLayout;->getIndexFirstChangedBlock()I +Landroid/text/DynamicLayout;->getNumberOfBlocks()I +Landroid/text/DynamicLayout;->setIndexFirstChangedBlock(I)V Landroid/text/DynamicLayout;->sStaticLayout:Landroid/text/StaticLayout; +Landroid/text/format/DateFormat;->getTimeFormatString(Landroid/content/Context;)Ljava/lang/String; +Landroid/text/format/DateFormat;->getTimeFormatString(Landroid/content/Context;I)Ljava/lang/String; +Landroid/text/format/DateFormat;->hasDesignator(Ljava/lang/CharSequence;C)Z +Landroid/text/format/DateFormat;->hasSeconds(Ljava/lang/CharSequence;)Z +Landroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;I)Z +Landroid/text/format/DateUtils;->formatDuration(J)Ljava/lang/CharSequence; +Landroid/text/format/DateUtils;->formatDuration(JI)Ljava/lang/CharSequence; +Landroid/text/format/Formatter;->formatBytes(Landroid/content/res/Resources;JI)Landroid/text/format/Formatter$BytesResult; +Landroid/text/format/Formatter;->formatShortElapsedTime(Landroid/content/Context;J)Ljava/lang/String; +Landroid/text/format/Formatter;->formatShortElapsedTimeRoundingUpToMinutes(Landroid/content/Context;J)Ljava/lang/String; Landroid/text/Html;->withinStyle(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;II)V +Landroid/text/InputFilter$LengthFilter;->mMax:I Landroid/text/Layout$Alignment;->ALIGN_LEFT:Landroid/text/Layout$Alignment; Landroid/text/Layout$Alignment;->ALIGN_RIGHT:Landroid/text/Layout$Alignment; Landroid/text/Layout;->DIRS_ALL_LEFT_TO_RIGHT:Landroid/text/Layout$Directions; +Landroid/text/Layout;->DIRS_ALL_RIGHT_TO_LEFT:Landroid/text/Layout$Directions; +Landroid/text/Layout;->DIR_REQUEST_DEFAULT_LTR:I +Landroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;III)V +Landroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)V +Landroid/text/Layout;->getLineRangeForDraw(Landroid/graphics/Canvas;)J Landroid/text/Layout;->getPrimaryHorizontal(IZ)F +Landroid/text/Layout;->getSecondaryHorizontal(IZ)F +Landroid/text/Layout;->isLevelBoundary(I)Z +Landroid/text/Layout;->mPaint:Landroid/text/TextPaint; +Landroid/text/Layout;->shouldClampCursor(I)Z +Landroid/text/method/AllCapsTransformationMethod;-><init>(Landroid/content/Context;)V Landroid/text/method/LinkMovementMethod;->sInstance:Landroid/text/method/LinkMovementMethod; +Landroid/text/method/MetaKeyKeyListener;->startSelecting(Landroid/view/View;Landroid/text/Spannable;)V +Landroid/text/method/MetaKeyKeyListener;->stopSelecting(Landroid/view/View;Landroid/text/Spannable;)V +Landroid/text/method/PasswordTransformationMethod;->sInstance:Landroid/text/method/PasswordTransformationMethod; +Landroid/text/method/TransformationMethod2;->setLengthChangesAllowed(Z)V +Landroid/text/method/WordIterator;-><init>(Ljava/util/Locale;)V +Landroid/text/method/WordIterator;->following(I)I +Landroid/text/method/WordIterator;->getBeginning(I)I +Landroid/text/method/WordIterator;->getEnd(I)I +Landroid/text/method/WordIterator;->getNextWordEndOnTwoWordBoundary(I)I +Landroid/text/method/WordIterator;->getPrevWordBeginningOnTwoWordsBoundary(I)I +Landroid/text/method/WordIterator;->getPunctuationBeginning(I)I +Landroid/text/method/WordIterator;->getPunctuationEnd(I)I +Landroid/text/method/WordIterator;->isAfterPunctuation(I)Z +Landroid/text/method/WordIterator;->isBoundary(I)Z +Landroid/text/method/WordIterator;->isOnPunctuation(I)Z +Landroid/text/method/WordIterator;->nextBoundary(I)I +Landroid/text/method/WordIterator;->preceding(I)I +Landroid/text/method/WordIterator;->prevBoundary(I)I +Landroid/text/method/WordIterator;->setCharSequence(Ljava/lang/CharSequence;II)V +Landroid/text/Selection;->moveToFollowing(Landroid/text/Spannable;Landroid/text/Selection$PositionIterator;Z)Z +Landroid/text/Selection;->moveToPreceding(Landroid/text/Spannable;Landroid/text/Selection$PositionIterator;Z)Z +Landroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;Z)[Ljava/lang/Object; Landroid/text/SpannableStringBuilder;->mGapLength:I Landroid/text/SpannableStringBuilder;->mGapStart:I Landroid/text/SpannableStringBuilder;->mSpanCount:I @@ -2468,6 +5292,9 @@ Landroid/text/SpannableStringBuilder;->mSpanEnds:[I Landroid/text/SpannableStringBuilder;->mSpanFlags:[I Landroid/text/SpannableStringBuilder;->mSpans:[Ljava/lang/Object; Landroid/text/SpannableStringBuilder;->mSpanStarts:[I +Landroid/text/SpannableStringBuilder;->mText:[C +Landroid/text/SpannableStringBuilder;->sendToSpanWatchers(III)V +Landroid/text/SpannableStringBuilder;->substring(II)Ljava/lang/String; Landroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;II)V Landroid/text/SpannableStringInternal;->charAt(I)C Landroid/text/SpannableStringInternal;->checkRange(Ljava/lang/String;II)V @@ -2505,11 +5332,30 @@ Landroid/text/StaticLayout$LineBreaks;->descents:[F Landroid/text/StaticLayout$LineBreaks;->flags:[I Landroid/text/StaticLayout$LineBreaks;->widths:[F Landroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZLandroid/text/TextUtils$TruncateAt;II)V +Landroid/text/StaticLayout;->ELLIPSIS_START:I Landroid/text/StaticLayout;->getHeight(Z)I Landroid/text/StaticLayout;->mColumns:I Landroid/text/StaticLayout;->mLineCount:I +Landroid/text/StaticLayout;->mLineDirections:[Landroid/text/Layout$Directions; Landroid/text/StaticLayout;->mLines:[I Landroid/text/StaticLayout;->mMaximumVisibleLineCount:I +Landroid/text/style/DynamicDrawableSpan;->mDrawableRef:Ljava/lang/ref/WeakReference; +Landroid/text/style/EasyEditSpan;->getPendingIntent()Landroid/app/PendingIntent; +Landroid/text/style/EasyEditSpan;->isDeleteEnabled()Z +Landroid/text/style/EasyEditSpan;->setDeleteEnabled(Z)V +Landroid/text/style/ImageSpan;->mDrawable:Landroid/graphics/drawable/Drawable; +Landroid/text/style/SpellCheckSpan;-><init>()V +Landroid/text/style/SpellCheckSpan;-><init>(Landroid/os/Parcel;)V +Landroid/text/style/SpellCheckSpan;->isSpellCheckInProgress()Z +Landroid/text/style/SpellCheckSpan;->setSpellCheckInProgress(Z)V +Landroid/text/style/SuggestionRangeSpan;-><init>()V +Landroid/text/style/SuggestionRangeSpan;-><init>(Landroid/os/Parcel;)V +Landroid/text/style/SuggestionRangeSpan;->setBackgroundColor(I)V +Landroid/text/style/SuggestionSpan;->getNotificationTargetClassName()Ljava/lang/String; +Landroid/text/style/SuggestionSpan;->getUnderlineColor()I +Landroid/text/style/SuggestionSpan;->mEasyCorrectUnderlineColor:I +Landroid/text/style/SuggestionSpan;->mEasyCorrectUnderlineThickness:F +Landroid/text/style/SuggestionSpan;->notifySelection(Landroid/content/Context;Ljava/lang/String;I)V Landroid/text/TextLine;->mCharacterStyleSpanSet:Landroid/text/SpanSet; Landroid/text/TextLine;->mMetricAffectingSpanSpanSet:Landroid/text/SpanSet; Landroid/text/TextLine;->mReplacementSpanSpanSet:Landroid/text/SpanSet; @@ -2518,33 +5364,69 @@ Landroid/text/TextLine;->mText:Ljava/lang/CharSequence; Landroid/text/TextLine;->obtain()Landroid/text/TextLine; Landroid/text/TextLine;->sCached:[Landroid/text/TextLine; Landroid/text/TextPaint;->setUnderlineText(IF)V +Landroid/text/TextPaint;->underlineColor:I +Landroid/text/TextPaint;->underlineThickness:F Landroid/text/TextUtils$TruncateAt;->END_SMALL:Landroid/text/TextUtils$TruncateAt; +Landroid/text/TextUtils;->packRangeInLong(II)J +Landroid/text/TextUtils;->unpackRangeEndFromLong(J)I +Landroid/text/TextUtils;->unpackRangeStartFromLong(J)I Landroid/transition/ChangeBounds;->BOTTOM_RIGHT_ONLY_PROPERTY:Landroid/util/Property; Landroid/transition/ChangeBounds;->POSITION_PROPERTY:Landroid/util/Property; Landroid/transition/Scene;->mEnterAction:Ljava/lang/Runnable; Landroid/transition/Scene;->mExitAction:Ljava/lang/Runnable; Landroid/transition/Scene;->setCurrentScene(Landroid/view/View;Landroid/transition/Scene;)V +Landroid/transition/Transition;->cancel()V +Landroid/transition/Transition;->end()V +Landroid/transition/TransitionManager;->getRunningTransitions()Landroid/util/ArrayMap; +Landroid/transition/TransitionManager;->sPendingTransitions:Ljava/util/ArrayList; Landroid/transition/TransitionManager;->sRunningTransitions:Ljava/lang/ThreadLocal; Landroid/util/ArrayMap;->append(Ljava/lang/Object;Ljava/lang/Object;)V +Landroid/util/ArrayMap;->CACHE_SIZE:I +Landroid/util/ArrayMap;->indexOf(Ljava/lang/Object;I)I +Landroid/util/ArrayMap;->indexOfNull()I +Landroid/util/ArrayMap;->indexOfValue(Ljava/lang/Object;)I +Landroid/util/ArrayMap;->mArray:[Ljava/lang/Object; +Landroid/util/ArrayMap;->mBaseCache:[Ljava/lang/Object; Landroid/util/ArrayMap;->mBaseCacheSize:I +Landroid/util/ArrayMap;->mSize:I +Landroid/util/ArrayMap;->mTwiceBaseCache:[Ljava/lang/Object; Landroid/util/ArrayMap;->mTwiceBaseCacheSize:I Landroid/util/ArraySet;-><init>(Ljava/util/Collection;)V +Landroid/util/ArraySet;->mArray:[Ljava/lang/Object; +Landroid/util/ArraySet;->mSize:I +Landroid/util/Base64;-><init>()V +Landroid/util/Base64OutputStream;-><init>(Ljava/io/OutputStream;IZ)V +Landroid/util/DebugUtils;->buildShortClassTag(Ljava/lang/Object;Ljava/lang/StringBuilder;)V Landroid/util/DisplayMetrics;->DENSITY_DEVICE:I +Landroid/util/DisplayMetrics;->noncompatDensityDpi:I Landroid/util/DisplayMetrics;->noncompatHeightPixels:I Landroid/util/DisplayMetrics;->noncompatWidthPixels:I Landroid/util/EventLog$Event;-><init>([B)V +Landroid/util/IconDrawableFactory;->getBadgedIcon(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable; +Landroid/util/LocalLog;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V +Landroid/util/Log;->println_native(IILjava/lang/String;Ljava/lang/String;)I Landroid/util/Log;->wtf(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ZZ)I +Landroid/util/LogWriter;-><init>(ILjava/lang/String;)V Landroid/util/LongSparseLongArray;->mKeys:[J Landroid/util/LongSparseLongArray;->mSize:I Landroid/util/LongSparseLongArray;->mValues:[J +Landroid/util/LruCache;->map:Ljava/util/LinkedHashMap; +Landroid/util/MathUtils;->abs(F)F +Landroid/util/MathUtils;->constrain(FFF)F Landroid/util/MathUtils;->constrain(III)I +Landroid/util/MathUtils;->lerp(FFF)F Landroid/util/NtpTrustedTime;->forceRefresh()Z Landroid/util/NtpTrustedTime;->getCachedNtpTime()J Landroid/util/NtpTrustedTime;->getCachedNtpTimeReference()J Landroid/util/NtpTrustedTime;->getInstance(Landroid/content/Context;)Landroid/util/NtpTrustedTime; Landroid/util/NtpTrustedTime;->hasCache()Z Landroid/util/PathParser;->createPathFromPathData(Ljava/lang/String;)Landroid/graphics/Path; +Landroid/util/Pools$Pool;->acquire()Ljava/lang/Object; +Landroid/util/Pools$Pool;->release(Ljava/lang/Object;)Z +Landroid/util/Pools$SimplePool;-><init>(I)V +Landroid/util/Pools$SimplePool;->acquire()Ljava/lang/Object; Landroid/util/Pools$SimplePool;->mPool:[Ljava/lang/Object; +Landroid/util/Pools$SimplePool;->release(Ljava/lang/Object;)Z Landroid/util/Pools$SynchronizedPool;-><init>(I)V Landroid/util/Pools$SynchronizedPool;->acquire()Ljava/lang/Object; Landroid/util/Pools$SynchronizedPool;->release(Ljava/lang/Object;)Z @@ -2554,36 +5436,89 @@ Landroid/util/Singleton;-><init>()V Landroid/util/Singleton;->get()Ljava/lang/Object; Landroid/util/Singleton;->mInstance:Ljava/lang/Object; Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I +Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I +Landroid/util/Slog;->i(Ljava/lang/String;Ljava/lang/String;)I +Landroid/util/Slog;->v(Ljava/lang/String;Ljava/lang/String;)I Landroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;)I +Landroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I +Landroid/util/Slog;->wtf(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I +Landroid/util/SparseArray;->mKeys:[I +Landroid/util/SparseArray;->mSize:I +Landroid/util/SparseArray;->mValues:[Ljava/lang/Object; +Landroid/util/SparseBooleanArray;->mKeys:[I +Landroid/util/SparseBooleanArray;->mSize:I +Landroid/util/SparseBooleanArray;->mValues:[Z Landroid/util/SparseIntArray;->mKeys:[I Landroid/util/SparseIntArray;->mSize:I Landroid/util/SparseIntArray;->mValues:[I +Landroid/util/TimeUtils;->logTimeOfDay(J)Ljava/lang/String; +Landroid/util/TrustedTime;->currentTimeMillis()J +Landroid/util/TrustedTime;->forceRefresh()Z +Landroid/util/TrustedTime;->getCacheAge()J +Landroid/util/TrustedTime;->hasCache()Z +Landroid/view/accessibility/AccessibilityEvent;->mAction:I +Landroid/view/accessibility/AccessibilityEvent;->mEventType:I Landroid/view/accessibility/AccessibilityInteractionClient;->clearCache()V Landroid/view/accessibility/AccessibilityInteractionClient;->getInstance()Landroid/view/accessibility/AccessibilityInteractionClient; +Landroid/view/accessibility/AccessibilityInteractionClient;->setSameThreadMessage(Landroid/os/Message;)V Landroid/view/accessibility/AccessibilityManager;->getInstance(Landroid/content/Context;)Landroid/view/accessibility/AccessibilityManager; Landroid/view/accessibility/AccessibilityManager;->isHighTextContrastEnabled()Z Landroid/view/accessibility/AccessibilityManager;->mAccessibilityStateChangeListeners:Landroid/util/ArrayMap; +Landroid/view/accessibility/AccessibilityManager;->mHandler:Landroid/os/Handler; Landroid/view/accessibility/AccessibilityManager;->mIsEnabled:Z Landroid/view/accessibility/AccessibilityManager;->mIsHighTextContrastEnabled:Z +Landroid/view/accessibility/AccessibilityManager;->mLock:Ljava/lang/Object; +Landroid/view/accessibility/AccessibilityManager;->mService:Landroid/view/accessibility/IAccessibilityManager; +Landroid/view/accessibility/AccessibilityManager;->mUserId:I +Landroid/view/accessibility/AccessibilityManager;->setStateLocked(I)V Landroid/view/accessibility/AccessibilityManager;->sInstance:Landroid/view/accessibility/AccessibilityManager; Landroid/view/accessibility/AccessibilityManager;->sInstanceSync:Ljava/lang/Object; +Landroid/view/accessibility/AccessibilityNodeInfo;->getAccessibilityViewId(J)I +Landroid/view/accessibility/AccessibilityNodeInfo;->getSourceNodeId()J +Landroid/view/accessibility/AccessibilityNodeInfo;->getVirtualDescendantId(J)I Landroid/view/accessibility/AccessibilityNodeInfo;->isSealed()Z Landroid/view/accessibility/AccessibilityNodeInfo;->mChildNodeIds:Landroid/util/LongArray; Landroid/view/accessibility/AccessibilityNodeInfo;->mSealed:Z +Landroid/view/accessibility/AccessibilityNodeInfo;->mSourceNodeId:J Landroid/view/accessibility/AccessibilityNodeInfo;->refresh(Landroid/os/Bundle;Z)Z Landroid/view/accessibility/AccessibilityNodeInfo;->setSealed(Z)V Landroid/view/accessibility/AccessibilityRecord;->getSourceNodeId()J +Landroid/view/accessibility/AccessibilityRecord;->mSealed:Z +Landroid/view/accessibility/AccessibilityRecord;->mSourceNodeId:J +Landroid/view/accessibility/CaptioningManager$CaptionStyle;->PRESETS:[Landroid/view/accessibility/CaptioningManager$CaptionStyle; +Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;->setFindAccessibilityNodeInfoResult(Landroid/view/accessibility/AccessibilityNodeInfo;I)V +Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;->setFindAccessibilityNodeInfosResult(Ljava/util/List;I)V +Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;->setPerformAccessibilityActionResult(ZI)V Landroid/view/accessibility/IAccessibilityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/view/accessibility/IAccessibilityManager$Stub;-><init>()V Landroid/view/accessibility/IAccessibilityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/accessibility/IAccessibilityManager; Landroid/view/accessibility/IAccessibilityManager;->getEnabledAccessibilityServiceList(II)Ljava/util/List; +Landroid/view/AccessibilityIterators$AbstractTextSegmentIterator;-><init>()V +Landroid/view/AccessibilityIterators$AbstractTextSegmentIterator;->mText:Ljava/lang/String; +Landroid/view/ActionProvider;->reset()V +Landroid/view/ActionProvider;->setSubUiVisibilityListener(Landroid/view/ActionProvider$SubUiVisibilityListener;)V Landroid/view/animation/Animation;->detach()V Landroid/view/animation/Animation;->initializeInvalidateRegion(IIII)V Landroid/view/animation/Animation;->mListener:Landroid/view/animation/Animation$AnimationListener; +Landroid/view/animation/Animation;->mPreviousRegion:Landroid/graphics/RectF; +Landroid/view/animation/Animation;->mPreviousTransformation:Landroid/view/animation/Transformation; +Landroid/view/animation/Animation;->mRegion:Landroid/graphics/RectF; +Landroid/view/animation/Animation;->mTransformation:Landroid/view/animation/Transformation; +Landroid/view/animation/AnimationUtils;->createAnimationFromXml(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;Landroid/view/animation/AnimationSet;Landroid/util/AttributeSet;)Landroid/view/animation/Animation; +Landroid/view/animation/Transformation;->printShortString(Ljava/io/PrintWriter;)V +Landroid/view/animation/TranslateAnimation;->mFromXValue:F +Landroid/view/animation/TranslateAnimation;->mFromYValue:F +Landroid/view/animation/TranslateAnimation;->mToXValue:F +Landroid/view/animation/TranslateAnimation;->mToYValue:F +Landroid/view/animation/TranslateYAnimation;-><init>(IFIF)V Landroid/view/autofill/IAutoFillManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/view/Choreographer$CallbackQueue;->addCallbackLocked(JLjava/lang/Object;Ljava/lang/Object;)V +Landroid/view/Choreographer$CallbackRecord;->run(J)V Landroid/view/Choreographer;->doFrame(JI)V Landroid/view/Choreographer;->getFrameTime()J +Landroid/view/Choreographer;->getFrameTimeNanos()J Landroid/view/Choreographer;->mCallbackQueues:[Landroid/view/Choreographer$CallbackQueue; +Landroid/view/Choreographer;->mDisplayEventReceiver:Landroid/view/Choreographer$FrameDisplayEventReceiver; Landroid/view/Choreographer;->mFrameIntervalNanos:J Landroid/view/Choreographer;->mLastFrameTimeNanos:J Landroid/view/Choreographer;->mLock:Ljava/lang/Object; @@ -2596,78 +5531,178 @@ Landroid/view/ContextThemeWrapper;->mResources:Landroid/content/res/Resources; Landroid/view/ContextThemeWrapper;->mTheme:Landroid/content/res/Resources$Theme; Landroid/view/ContextThemeWrapper;->mThemeResource:I Landroid/view/Display$HdrCapabilities;-><init>([IFFF)V +Landroid/view/Display$Mode;-><init>(IIIF)V +Landroid/view/Display;->getAddress()Ljava/lang/String; Landroid/view/Display;->getDisplayAdjustments()Landroid/view/DisplayAdjustments; Landroid/view/Display;->getDisplayInfo(Landroid/view/DisplayInfo;)Z +Landroid/view/Display;->getMaximumSizeDimension()I +Landroid/view/Display;->getOwnerPackageName()Ljava/lang/String; +Landroid/view/Display;->getType()I +Landroid/view/Display;->mDisplayInfo:Landroid/view/DisplayInfo; +Landroid/view/Display;->TYPE_HDMI:I +Landroid/view/Display;->TYPE_UNKNOWN:I +Landroid/view/Display;->TYPE_VIRTUAL:I +Landroid/view/Display;->TYPE_WIFI:I +Landroid/view/DisplayAdjustments;-><init>()V Landroid/view/DisplayAdjustments;->getConfiguration()Landroid/content/res/Configuration; Landroid/view/DisplayAdjustments;->setCompatibilityInfo(Landroid/content/res/CompatibilityInfo;)V +Landroid/view/DisplayEventReceiver;-><init>(Landroid/os/Looper;)V Landroid/view/DisplayEventReceiver;->dispatchHotplug(JIZ)V Landroid/view/DisplayEventReceiver;->dispatchVsync(JII)V +Landroid/view/DisplayEventReceiver;->mReceiverPtr:J +Landroid/view/DisplayEventReceiver;->onHotplug(JIZ)V +Landroid/view/DisplayEventReceiver;->onVsync(JII)V +Landroid/view/DisplayEventReceiver;->scheduleVsync()V Landroid/view/DisplayInfo;-><init>()V Landroid/view/DisplayInfo;->displayCutout:Landroid/view/DisplayCutout; +Landroid/view/DisplayInfo;->logicalHeight:I +Landroid/view/DisplayInfo;->logicalWidth:I +Landroid/view/DisplayInfo;->rotation:I Landroid/view/DisplayListCanvas;->callDrawGLFunction2(J)V Landroid/view/DisplayListCanvas;->drawGLFunctor2(JLjava/lang/Runnable;)V +Landroid/view/DragEvent;->mClipData:Landroid/content/ClipData; +Landroid/view/DragEvent;->mClipDescription:Landroid/content/ClipDescription; +Landroid/view/DragEvent;->obtain(Landroid/view/DragEvent;)Landroid/view/DragEvent; Landroid/view/FrameMetrics;->mTimingData:[J Landroid/view/FrameMetricsObserver;->mFrameMetrics:Landroid/view/FrameMetrics; Landroid/view/FrameMetricsObserver;->mMessageQueue:Landroid/os/MessageQueue; Landroid/view/FrameMetricsObserver;->notifyDataAvailable(I)V +Landroid/view/GestureDetector;->LONGPRESS_TIMEOUT:I +Landroid/view/GestureDetector;->mAlwaysInTapRegion:Z +Landroid/view/GestureDetector;->mListener:Landroid/view/GestureDetector$OnGestureListener; Landroid/view/GestureDetector;->mMinimumFlingVelocity:I Landroid/view/GestureDetector;->mTouchSlopSquare:I +Landroid/view/GhostView;->addGhost(Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/GhostView; Landroid/view/GhostView;->addGhost(Landroid/view/View;Landroid/view/ViewGroup;Landroid/graphics/Matrix;)Landroid/view/GhostView; Landroid/view/GhostView;->removeGhost(Landroid/view/View;)V +Landroid/view/IApplicationToken$Stub;-><init>()V +Landroid/view/IDockedStackListener$Stub;-><init>()V Landroid/view/IGraphicsStats$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/view/IGraphicsStats$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IGraphicsStats; Landroid/view/InputChannel;-><init>()V +Landroid/view/InputChannel;->CREATOR:Landroid/os/Parcelable$Creator; Landroid/view/InputChannel;->mPtr:J Landroid/view/InputDevice;-><init>(IIILjava/lang/String;IILjava/lang/String;ZIILandroid/view/KeyCharacterMap;ZZZ)V Landroid/view/InputDevice;->addMotionRange(IIFFFFF)V Landroid/view/InputDevice;->isExternal()Z +Landroid/view/InputDevice;->mIsExternal:Z Landroid/view/InputEvent;->getSequenceNumber()I +Landroid/view/InputEventConsistencyVerifier;-><init>(Ljava/lang/Object;I)V +Landroid/view/InputEventConsistencyVerifier;->isInstrumentationEnabled()Z +Landroid/view/InputEventConsistencyVerifier;->onTouchEvent(Landroid/view/MotionEvent;I)V +Landroid/view/InputEventConsistencyVerifier;->onUnhandledEvent(Landroid/view/InputEvent;I)V Landroid/view/InputEventReceiver;->dispatchBatchedInputEventPending()V Landroid/view/InputEventReceiver;->dispatchInputEvent(ILandroid/view/InputEvent;I)V Landroid/view/InputEventSender;->dispatchInputEventFinished(IZ)V +Landroid/view/InputFilter;-><init>(Landroid/os/Looper;)V +Landroid/view/InputFilter;->onInputEvent(Landroid/view/InputEvent;I)V Landroid/view/inputmethod/InputMethodInfo;->mSubtypes:Landroid/view/inputmethod/InputMethodSubtypeArray; +Landroid/view/inputmethod/InputMethodManager;->checkFocus()V +Landroid/view/inputmethod/InputMethodManager;->closeCurrentInput()V Landroid/view/inputmethod/InputMethodManager;->finishInputLocked()V Landroid/view/inputmethod/InputMethodManager;->focusIn(Landroid/view/View;)V Landroid/view/inputmethod/InputMethodManager;->focusOut(Landroid/view/View;)V Landroid/view/inputmethod/InputMethodManager;->getClient()Lcom/android/internal/view/IInputMethodClient; +Landroid/view/inputmethod/InputMethodManager;->getInputContext()Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/InputMethodManager;->getInputMethodWindowVisibleHeight()I Landroid/view/inputmethod/InputMethodManager;->getInstance()Landroid/view/inputmethod/InputMethodManager; +Landroid/view/inputmethod/InputMethodManager;->isCursorAnchorInfoEnabled()Z Landroid/view/inputmethod/InputMethodManager;->mCurId:Ljava/lang/String; Landroid/view/inputmethod/InputMethodManager;->mCurRootView:Landroid/view/View; +Landroid/view/inputmethod/InputMethodManager;->mCursorRect:Landroid/graphics/Rect; Landroid/view/inputmethod/InputMethodManager;->mH:Landroid/view/inputmethod/InputMethodManager$H; Landroid/view/inputmethod/InputMethodManager;->mNextServedView:Landroid/view/View; Landroid/view/inputmethod/InputMethodManager;->mServedInputConnectionWrapper:Landroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper; Landroid/view/inputmethod/InputMethodManager;->mServedView:Landroid/view/View; Landroid/view/inputmethod/InputMethodManager;->mService:Lcom/android/internal/view/IInputMethodManager; +Landroid/view/inputmethod/InputMethodManager;->mTmpCursorRect:Landroid/graphics/Rect; +Landroid/view/inputmethod/InputMethodManager;->notifySuggestionPicked(Landroid/text/style/SuggestionSpan;Ljava/lang/String;I)V Landroid/view/inputmethod/InputMethodManager;->notifyUserAction()V +Landroid/view/inputmethod/InputMethodManager;->onPreWindowFocus(Landroid/view/View;Z)V Landroid/view/inputmethod/InputMethodManager;->peekInstance()Landroid/view/inputmethod/InputMethodManager; +Landroid/view/inputmethod/InputMethodManager;->registerSuggestionSpansForNotification([Landroid/text/style/SuggestionSpan;)V +Landroid/view/inputmethod/InputMethodManager;->setUpdateCursorAnchorInfoMode(I)V Landroid/view/inputmethod/InputMethodManager;->showSoftInputUnchecked(ILandroid/os/ResultReceiver;)V Landroid/view/inputmethod/InputMethodManager;->sInstance:Landroid/view/inputmethod/InputMethodManager; Landroid/view/inputmethod/InputMethodManager;->windowDismissed(Landroid/os/IBinder;)V Landroid/view/inputmethod/InputMethodSubtypeArray;-><init>(Ljava/util/List;)V Landroid/view/InputQueue;->finishInputEvent(JZ)V +Landroid/view/IOnKeyguardExitResult;->onKeyguardExitResult(Z)V Landroid/view/IRecentsAnimationController;->setAnimationTargetsBehindSystemBars(Z)V +Landroid/view/IRotationWatcher$Stub;-><init>()V +Landroid/view/IRotationWatcher;->onRotationChanged(I)V +Landroid/view/IWindow$Stub;-><init>()V +Landroid/view/IWindow$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindow; +Landroid/view/IWindow;->closeSystemDialogs(Ljava/lang/String;)V +Landroid/view/IWindow;->dispatchAppVisibility(Z)V +Landroid/view/IWindow;->dispatchGetNewSurface()V +Landroid/view/IWindow;->dispatchWallpaperCommand(Ljava/lang/String;IIILandroid/os/Bundle;Z)V +Landroid/view/IWindow;->dispatchWallpaperOffsets(FFFFZ)V +Landroid/view/IWindow;->windowFocusChanged(ZZ)V Landroid/view/IWindowManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/view/IWindowManager$Stub$Proxy;->getBaseDisplayDensity(I)I Landroid/view/IWindowManager$Stub$Proxy;->getDockedStackSide()I Landroid/view/IWindowManager$Stub$Proxy;->getInitialDisplayDensity(I)I Landroid/view/IWindowManager$Stub$Proxy;->hasNavigationBar()Z +Landroid/view/IWindowManager$Stub$Proxy;->watchRotation(Landroid/view/IRotationWatcher;I)I +Landroid/view/IWindowManager$Stub;-><init>()V Landroid/view/IWindowManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowManager; +Landroid/view/IWindowManager;->executeAppTransition()V +Landroid/view/IWindowManager;->freezeRotation(I)V Landroid/view/IWindowManager;->getAnimationScale(I)F +Landroid/view/IWindowManager;->getAnimationScales()[F +Landroid/view/IWindowManager;->getBaseDisplaySize(ILandroid/graphics/Point;)V +Landroid/view/IWindowManager;->getDockedStackSide()I +Landroid/view/IWindowManager;->getInitialDisplayDensity(I)I +Landroid/view/IWindowManager;->getInitialDisplaySize(ILandroid/graphics/Point;)V +Landroid/view/IWindowManager;->getPendingAppTransition()I Landroid/view/IWindowManager;->hasNavigationBar()Z +Landroid/view/IWindowManager;->inputMethodClientHasFocus(Lcom/android/internal/view/IInputMethodClient;)Z +Landroid/view/IWindowManager;->isKeyguardLocked()Z +Landroid/view/IWindowManager;->isKeyguardSecure()Z +Landroid/view/IWindowManager;->isSafeModeEnabled()Z +Landroid/view/IWindowManager;->lockNow(Landroid/os/Bundle;)V +Landroid/view/IWindowManager;->registerDockedStackListener(Landroid/view/IDockedStackListener;)V +Landroid/view/IWindowManager;->removeRotationWatcher(Landroid/view/IRotationWatcher;)V Landroid/view/IWindowManager;->setAnimationScale(IF)V Landroid/view/IWindowManager;->setAnimationScales([F)V +Landroid/view/IWindowManager;->setInTouchMode(Z)V Landroid/view/IWindowManager;->setShelfHeight(ZI)V Landroid/view/IWindowManager;->setStrictModeVisualIndicatorPreference(Ljava/lang/String;)V +Landroid/view/IWindowManager;->showStrictModeViolation(Z)V +Landroid/view/IWindowManager;->thawRotation()V Landroid/view/IWindowSession$Stub$Proxy;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/Surface;)I +Landroid/view/IWindowSession$Stub;-><init>()V +Landroid/view/IWindowSession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowSession; +Landroid/view/IWindowSession;->finishDrawing(Landroid/view/IWindow;)V +Landroid/view/IWindowSession;->getInTouchMode()Z +Landroid/view/IWindowSession;->performDrag(Landroid/view/IWindow;ILandroid/view/SurfaceControl;IFFFFLandroid/content/ClipData;)Landroid/os/IBinder; +Landroid/view/IWindowSession;->performHapticFeedback(Landroid/view/IWindow;IZ)Z +Landroid/view/IWindowSession;->remove(Landroid/view/IWindow;)V +Landroid/view/IWindowSession;->setInTouchMode(Z)V +Landroid/view/IWindowSession;->setTransparentRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V +Landroid/view/IWindowSession;->wallpaperCommandComplete(Landroid/os/IBinder;Landroid/os/Bundle;)V +Landroid/view/IWindowSession;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V Landroid/view/KeyCharacterMap$FallbackAction;->keyCode:I Landroid/view/KeyCharacterMap$FallbackAction;->metaState:I Landroid/view/KeyCharacterMap;-><init>(J)V +Landroid/view/KeyEvent;->actionToString(I)Ljava/lang/String; Landroid/view/KeyEvent;->isConfirmKey(I)Z +Landroid/view/KeyEvent;->isDown()Z Landroid/view/KeyEvent;->mAction:I Landroid/view/KeyEvent;->mCharacters:Ljava/lang/String; Landroid/view/KeyEvent;->mDeviceId:I Landroid/view/KeyEvent;->mDownTime:J +Landroid/view/KeyEvent;->META_ALL_MASK:I +Landroid/view/KeyEvent;->META_ALT_LOCKED:I +Landroid/view/KeyEvent;->META_CAP_LOCKED:I +Landroid/view/KeyEvent;->META_INVALID_MODIFIER_MASK:I +Landroid/view/KeyEvent;->META_LOCK_MASK:I +Landroid/view/KeyEvent;->META_MODIFIER_MASK:I +Landroid/view/KeyEvent;->META_SELECTING:I +Landroid/view/KeyEvent;->META_SYMBOLIC_NAMES:[Ljava/lang/String; +Landroid/view/KeyEvent;->META_SYM_LOCKED:I +Landroid/view/KeyEvent;->META_SYNTHETIC_MASK:I Landroid/view/KeyEvent;->mEventTime:J Landroid/view/KeyEvent;->mFlags:I Landroid/view/KeyEvent;->mKeyCode:I @@ -2677,25 +5712,35 @@ Landroid/view/KeyEvent;->mScanCode:I Landroid/view/KeyEvent;->mSource:I Landroid/view/KeyEvent;->obtain(JJIIIIIIIILjava/lang/String;)Landroid/view/KeyEvent; Landroid/view/KeyEvent;->recycle()V +Landroid/view/LayoutInflater;->ATTRS_THEME:[I Landroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; Landroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;Z)Landroid/view/View; Landroid/view/LayoutInflater;->mConstructorArgs:[Ljava/lang/Object; +Landroid/view/LayoutInflater;->mConstructorSignature:[Ljava/lang/Class; Landroid/view/LayoutInflater;->mContext:Landroid/content/Context; Landroid/view/LayoutInflater;->mFactory2:Landroid/view/LayoutInflater$Factory2; Landroid/view/LayoutInflater;->mFactory:Landroid/view/LayoutInflater$Factory; Landroid/view/LayoutInflater;->mFactorySet:Z Landroid/view/LayoutInflater;->mPrivateFactory:Landroid/view/LayoutInflater$Factory2; +Landroid/view/LayoutInflater;->parseInclude(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/Context;Landroid/view/View;Landroid/util/AttributeSet;)V Landroid/view/LayoutInflater;->sConstructorMap:Ljava/util/HashMap; Landroid/view/LayoutInflater;->setPrivateFactory(Landroid/view/LayoutInflater$Factory2;)V +Landroid/view/MotionEvent$PointerCoords;->createArray(I)[Landroid/view/MotionEvent$PointerCoords; Landroid/view/MotionEvent$PointerCoords;->mPackedAxisBits:J Landroid/view/MotionEvent$PointerCoords;->mPackedAxisValues:[F +Landroid/view/MotionEvent$PointerProperties;->createArray(I)[Landroid/view/MotionEvent$PointerProperties; +Landroid/view/MotionEvent;->addBatch(Landroid/view/MotionEvent;)Z +Landroid/view/MotionEvent;->copy()Landroid/view/MotionEvent; +Landroid/view/MotionEvent;->getEventTimeNano()J Landroid/view/MotionEvent;->getPointerIdBits()I Landroid/view/MotionEvent;->HISTORY_CURRENT:I Landroid/view/MotionEvent;->mNativePtr:J Landroid/view/MotionEvent;->nativeGetRawAxisValue(JIII)F Landroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent; Landroid/view/MotionEvent;->scale(F)V +Landroid/view/MotionEvent;->setDownTime(J)V Landroid/view/MotionEvent;->split(I)Landroid/view/MotionEvent; +Landroid/view/NotificationHeaderView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V Landroid/view/PointerIcon;->load(Landroid/content/Context;)Landroid/view/PointerIcon; Landroid/view/PointerIcon;->mBitmap:Landroid/graphics/Bitmap; Landroid/view/PointerIcon;->mBitmapFrames:[Landroid/graphics/Bitmap; @@ -2716,16 +5761,25 @@ Landroid/view/RemoteAnimationTarget;->sourceContainerBounds:Landroid/graphics/Re Landroid/view/RemoteAnimationTarget;->taskId:I Landroid/view/RemoteAnimationTarget;->windowConfiguration:Landroid/app/WindowConfiguration; Landroid/view/RenderNode;->discardDisplayList()V +Landroid/view/RenderNode;->offsetLeftAndRight(I)Z Landroid/view/RenderNode;->output()V +Landroid/view/RenderNode;->setHasOverlappingRendering(Z)Z Landroid/view/RenderNodeAnimator;-><init>(IF)V Landroid/view/RenderNodeAnimator;->callOnFinished(Landroid/view/RenderNodeAnimator;)V Landroid/view/RenderNodeAnimator;->mapViewPropertyToRenderProperty(I)I Landroid/view/RenderNodeAnimator;->setTarget(Landroid/view/View;)V Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener; Landroid/view/ScaleGestureDetector;->mMinSpan:I +Landroid/view/ScaleGestureDetector;->mSpanSlop:I +Landroid/view/Surface;-><init>()V Landroid/view/Surface;-><init>(J)V +Landroid/view/Surface;->copyFrom(Landroid/view/SurfaceControl;)V +Landroid/view/Surface;->destroy()V Landroid/view/Surface;->mLock:Ljava/lang/Object; +Landroid/view/Surface;->mLockedObject:J +Landroid/view/Surface;->mName:Ljava/lang/String; Landroid/view/Surface;->mNativeObject:J +Landroid/view/Surface;->nativeRelease(J)V Landroid/view/Surface;->transferFrom(Landroid/view/Surface;)V Landroid/view/SurfaceControl$PhysicalDisplayInfo;-><init>()V Landroid/view/SurfaceControl$PhysicalDisplayInfo;->appVsyncOffsetNanos:J @@ -2737,12 +5791,40 @@ Landroid/view/SurfaceControl$PhysicalDisplayInfo;->secure:Z Landroid/view/SurfaceControl$PhysicalDisplayInfo;->width:I Landroid/view/SurfaceControl$PhysicalDisplayInfo;->xDpi:F Landroid/view/SurfaceControl$PhysicalDisplayInfo;->yDpi:F +Landroid/view/SurfaceControl;->closeTransaction()V +Landroid/view/SurfaceControl;->createDisplay(Ljava/lang/String;Z)Landroid/os/IBinder; +Landroid/view/SurfaceControl;->destroyDisplay(Landroid/os/IBinder;)V +Landroid/view/SurfaceControl;->getBuiltInDisplay(I)Landroid/os/IBinder; +Landroid/view/SurfaceControl;->getDisplayConfigs(Landroid/os/IBinder;)[Landroid/view/SurfaceControl$PhysicalDisplayInfo; +Landroid/view/SurfaceControl;->HIDDEN:I +Landroid/view/SurfaceControl;->hide()V +Landroid/view/SurfaceControl;->openTransaction()V +Landroid/view/SurfaceControl;->screenshot(Landroid/graphics/Rect;IIIIZI)Landroid/graphics/Bitmap; +Landroid/view/SurfaceControl;->screenshot(Landroid/os/IBinder;Landroid/view/Surface;Landroid/graphics/Rect;IIIIZZ)V +Landroid/view/SurfaceControl;->setDisplayLayerStack(Landroid/os/IBinder;I)V +Landroid/view/SurfaceControl;->setDisplayProjection(Landroid/os/IBinder;ILandroid/graphics/Rect;Landroid/graphics/Rect;)V +Landroid/view/SurfaceControl;->setDisplaySurface(Landroid/os/IBinder;Landroid/view/Surface;)V +Landroid/view/SurfaceControl;->setLayer(I)V +Landroid/view/SurfaceControl;->setPosition(FF)V +Landroid/view/SurfaceControl;->show()V +Landroid/view/SurfaceSession;-><init>()V +Landroid/view/SurfaceSession;->kill()V Landroid/view/SurfaceSession;->mNativeClient:J Landroid/view/SurfaceView;->isFixedSize()Z Landroid/view/SurfaceView;->mCallbacks:Ljava/util/ArrayList; +Landroid/view/SurfaceView;->mDrawingStopped:Z +Landroid/view/SurfaceView;->mDrawListener:Landroid/view/ViewTreeObserver$OnPreDrawListener; Landroid/view/SurfaceView;->mFormat:I +Landroid/view/SurfaceView;->mHaveFrame:Z +Landroid/view/SurfaceView;->mIsCreating:Z +Landroid/view/SurfaceView;->mLastLockTime:J Landroid/view/SurfaceView;->mRequestedFormat:I +Landroid/view/SurfaceView;->mRequestedHeight:I +Landroid/view/SurfaceView;->mRequestedWidth:I +Landroid/view/SurfaceView;->mSurface:Landroid/view/Surface; +Landroid/view/SurfaceView;->mSurfaceFrame:Landroid/graphics/Rect; Landroid/view/SurfaceView;->mSurfaceHolder:Landroid/view/SurfaceHolder; +Landroid/view/SurfaceView;->mSurfaceLock:Ljava/util/concurrent/locks/ReentrantLock; Landroid/view/SurfaceView;->setFrame(IIII)Z Landroid/view/SurfaceView;->surfacePositionLost_uiRtSync(J)V Landroid/view/SurfaceView;->updateSurfacePosition_renderWorker(JIIII)V @@ -2759,6 +5841,10 @@ Landroid/view/textclassifier/TextClassifier;->classifyText(Ljava/lang/CharSequen Landroid/view/textclassifier/TextClassifier;->generateLinks(Ljava/lang/CharSequence;Landroid/view/textclassifier/TextLinks$Options;)Landroid/view/textclassifier/TextLinks; Landroid/view/textclassifier/TextClassifier;->suggestSelection(Ljava/lang/CharSequence;IILandroid/view/textclassifier/TextSelection$Options;)Landroid/view/textclassifier/TextSelection; Landroid/view/textclassifier/TextLinks$Options;-><init>()V +Landroid/view/textservice/TextServicesManager;->getCurrentSpellChecker()Landroid/view/textservice/SpellCheckerInfo; +Landroid/view/textservice/TextServicesManager;->getCurrentSpellCheckerSubtype(Z)Landroid/view/textservice/SpellCheckerSubtype; +Landroid/view/textservice/TextServicesManager;->getEnabledSpellCheckers()[Landroid/view/textservice/SpellCheckerInfo; +Landroid/view/textservice/TextServicesManager;->getInstance()Landroid/view/textservice/TextServicesManager; Landroid/view/textservice/TextServicesManager;->isSpellCheckerEnabled()Z Landroid/view/TextureView;->destroyHardwareLayer()V Landroid/view/TextureView;->destroyHardwareResources()V @@ -2766,6 +5852,7 @@ Landroid/view/TextureView;->mLayer:Landroid/view/TextureLayer; Landroid/view/TextureView;->mNativeWindow:J Landroid/view/TextureView;->mSurface:Landroid/graphics/SurfaceTexture; Landroid/view/TextureView;->mUpdateListener:Landroid/graphics/SurfaceTexture$OnFrameAvailableListener; +Landroid/view/TextureView;->onDetachedFromWindowInternal()V Landroid/view/ThreadedRenderer;->setupDiskCache(Ljava/io/File;)V Landroid/view/TouchDelegate;->mDelegateTargeted:Z Landroid/view/VelocityTracker$Estimator;->confidence:F @@ -2773,29 +5860,76 @@ Landroid/view/VelocityTracker$Estimator;->degree:I Landroid/view/VelocityTracker$Estimator;->xCoeff:[F Landroid/view/VelocityTracker$Estimator;->yCoeff:[F Landroid/view/VelocityTracker;->obtain(Ljava/lang/String;)Landroid/view/VelocityTracker; +Landroid/view/View$AccessibilityDelegate;->createAccessibilityNodeInfo(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeInfo; +Landroid/view/View$AttachInfo$InvalidateInfo;-><init>()V +Landroid/view/View$AttachInfo$InvalidateInfo;->bottom:I +Landroid/view/View$AttachInfo$InvalidateInfo;->left:I +Landroid/view/View$AttachInfo$InvalidateInfo;->right:I +Landroid/view/View$AttachInfo$InvalidateInfo;->target:Landroid/view/View; +Landroid/view/View$AttachInfo$InvalidateInfo;->top:I +Landroid/view/View$AttachInfo;->mApplicationScale:F Landroid/view/View$AttachInfo;->mContentInsets:Landroid/graphics/Rect; +Landroid/view/View$AttachInfo;->mDisplayState:I Landroid/view/View$AttachInfo;->mDrawingTime:J +Landroid/view/View$AttachInfo;->mGivenInternalInsets:Landroid/view/ViewTreeObserver$InternalInsetsInfo; +Landroid/view/View$AttachInfo;->mHandler:Landroid/os/Handler; +Landroid/view/View$AttachInfo;->mHasWindowFocus:Z +Landroid/view/View$AttachInfo;->mInTouchMode:Z +Landroid/view/View$AttachInfo;->mKeepScreenOn:Z +Landroid/view/View$AttachInfo;->mKeyDispatchState:Landroid/view/KeyEvent$DispatcherState; +Landroid/view/View$AttachInfo;->mRecomputeGlobalAttributes:Z +Landroid/view/View$AttachInfo;->mScalingRequired:Z +Landroid/view/View$AttachInfo;->mScrollContainers:Ljava/util/ArrayList; +Landroid/view/View$AttachInfo;->mSession:Landroid/view/IWindowSession; Landroid/view/View$AttachInfo;->mStableInsets:Landroid/graphics/Rect; +Landroid/view/View$AttachInfo;->mTreeObserver:Landroid/view/ViewTreeObserver; +Landroid/view/View$AttachInfo;->mViewScrollChanged:Z +Landroid/view/View$AttachInfo;->mViewVisibilityChanged:Z +Landroid/view/View$AttachInfo;->mVisibleInsets:Landroid/graphics/Rect; +Landroid/view/View$AttachInfo;->mWindow:Landroid/view/IWindow; +Landroid/view/View$DragShadowBuilder;->mView:Ljava/lang/ref/WeakReference; Landroid/view/View$ListenerInfo;-><init>()V Landroid/view/View$ListenerInfo;->mOnClickListener:Landroid/view/View$OnClickListener; +Landroid/view/View$ListenerInfo;->mOnCreateContextMenuListener:Landroid/view/View$OnCreateContextMenuListener; Landroid/view/View$ListenerInfo;->mOnDragListener:Landroid/view/View$OnDragListener; Landroid/view/View$ListenerInfo;->mOnFocusChangeListener:Landroid/view/View$OnFocusChangeListener; +Landroid/view/View$ListenerInfo;->mOnGenericMotionListener:Landroid/view/View$OnGenericMotionListener; +Landroid/view/View$ListenerInfo;->mOnHoverListener:Landroid/view/View$OnHoverListener; +Landroid/view/View$ListenerInfo;->mOnKeyListener:Landroid/view/View$OnKeyListener; Landroid/view/View$ListenerInfo;->mOnLongClickListener:Landroid/view/View$OnLongClickListener; Landroid/view/View$ListenerInfo;->mOnTouchListener:Landroid/view/View$OnTouchListener; +Landroid/view/View$MeasureSpec;->makeSafeMeasureSpec(II)I +Landroid/view/View$ScrollabilityCache;->host:Landroid/view/View; Landroid/view/View$ScrollabilityCache;->scrollBar:Landroid/widget/ScrollBarDrawable; +Landroid/view/View$ScrollabilityCache;->state:I +Landroid/view/View;-><init>()V Landroid/view/View;->applyDrawableToTransparentRegion(Landroid/graphics/drawable/Drawable;Landroid/graphics/Region;)V +Landroid/view/View;->assignParent(Landroid/view/ViewParent;)V +Landroid/view/View;->cancel(Landroid/view/View$SendViewScrolledAccessibilityEvent;)V Landroid/view/View;->clearAccessibilityFocus()V Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z Landroid/view/View;->computeOpaqueFlags()V Landroid/view/View;->createSnapshot(Landroid/view/ViewDebug$CanvasProvider;Z)Landroid/graphics/Bitmap; +Landroid/view/View;->debug()V +Landroid/view/View;->debug(I)V +Landroid/view/View;->DEBUG_LAYOUT_PROPERTY:Ljava/lang/String; +Landroid/view/View;->destroyHardwareResources()V Landroid/view/View;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V Landroid/view/View;->dispatchDetachedFromWindow()V +Landroid/view/View;->dispatchPointerEvent(Landroid/view/MotionEvent;)Z +Landroid/view/View;->drawBackground(Landroid/graphics/Canvas;)V +Landroid/view/View;->ensureTransformationInfo()V +Landroid/view/View;->findViewByAccessibilityId(I)Landroid/view/View; Landroid/view/View;->fitsSystemWindows()Z +Landroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z Landroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate; Landroid/view/View;->getAccessibilityViewId()I Landroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;)V +Landroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;Z)V Landroid/view/View;->getHorizontalScrollFactor()F Landroid/view/View;->getInverseMatrix()Landroid/graphics/Matrix; +Landroid/view/View;->getIterableTextForAccessibility()Ljava/lang/CharSequence; +Landroid/view/View;->getIteratorForGranularity(I)Landroid/view/AccessibilityIterators$TextSegmentIterator; Landroid/view/View;->getListenerInfo()Landroid/view/View$ListenerInfo; Landroid/view/View;->getLocationOnScreen()[I Landroid/view/View;->getRawTextAlignment()I @@ -2804,22 +5938,40 @@ Landroid/view/View;->getTransitionAlpha()F Landroid/view/View;->getVerticalScrollFactor()F Landroid/view/View;->getViewRootImpl()Landroid/view/ViewRootImpl; Landroid/view/View;->getWindowDisplayFrame(Landroid/graphics/Rect;)V +Landroid/view/View;->getWindowSession()Landroid/view/IWindowSession; +Landroid/view/View;->hasIdentityMatrix()Z +Landroid/view/View;->hasRtlSupport()Z Landroid/view/View;->includeForAccessibility()Z +Landroid/view/View;->initializeScrollbarsInternal(Landroid/content/res/TypedArray;)V Landroid/view/View;->internalSetPadding(IIII)V +Landroid/view/View;->invalidate(Z)V +Landroid/view/View;->invalidateParentCaches()V Landroid/view/View;->invalidateParentIfNeeded()V +Landroid/view/View;->invalidateViewProperty(ZZ)V +Landroid/view/View;->isDraggingScrollBar()Z +Landroid/view/View;->isInScrollingContainer()Z +Landroid/view/View;->isLayoutRtl()Z +Landroid/view/View;->isOnScrollbarThumb(FF)Z Landroid/view/View;->isPaddingResolved()Z Landroid/view/View;->isRootNamespace()Z Landroid/view/View;->isVisibleToUser()Z Landroid/view/View;->isVisibleToUser(Landroid/graphics/Rect;)Z Landroid/view/View;->mAccessibilityDelegate:Landroid/view/View$AccessibilityDelegate; +Landroid/view/View;->makeOptionalFitsSystemWindows()V Landroid/view/View;->mAttachInfo:Landroid/view/View$AttachInfo; Landroid/view/View;->mBackground:Landroid/graphics/drawable/Drawable; +Landroid/view/View;->mBackgroundResource:I Landroid/view/View;->mBottom:I +Landroid/view/View;->mCachingFailed:Z Landroid/view/View;->mContext:Landroid/content/Context; Landroid/view/View;->mDrawingCache:Landroid/graphics/Bitmap; +Landroid/view/View;->mHasPerformedLongPress:Z +Landroid/view/View;->mKeyedTags:Landroid/util/SparseArray; Landroid/view/View;->mLayoutParams:Landroid/view/ViewGroup$LayoutParams; Landroid/view/View;->mLeft:I Landroid/view/View;->mListenerInfo:Landroid/view/View$ListenerInfo; +Landroid/view/View;->mMeasuredHeight:I +Landroid/view/View;->mMeasuredWidth:I Landroid/view/View;->mMinHeight:I Landroid/view/View;->mMinWidth:I Landroid/view/View;->mPaddingBottom:I @@ -2827,10 +5979,12 @@ Landroid/view/View;->mPaddingLeft:I Landroid/view/View;->mPaddingRight:I Landroid/view/View;->mPaddingTop:I Landroid/view/View;->mParent:Landroid/view/ViewParent; +Landroid/view/View;->mPendingCheckForTap:Landroid/view/View$CheckForTap; Landroid/view/View;->mPrivateFlags2:I Landroid/view/View;->mPrivateFlags3:I Landroid/view/View;->mPrivateFlags:I Landroid/view/View;->mRecreateDisplayList:Z +Landroid/view/View;->mRenderNode:Landroid/view/RenderNode; Landroid/view/View;->mResources:Landroid/content/res/Resources; Landroid/view/View;->mRight:I Landroid/view/View;->mScrollCache:Landroid/view/View$ScrollabilityCache; @@ -2839,12 +5993,20 @@ Landroid/view/View;->mScrollY:I Landroid/view/View;->mStartActivityRequestWho:Ljava/lang/String; Landroid/view/View;->mTag:Ljava/lang/Object; Landroid/view/View;->mTop:I +Landroid/view/View;->mTransformationInfo:Landroid/view/View$TransformationInfo; Landroid/view/View;->mUnscaledDrawingCache:Landroid/graphics/Bitmap; +Landroid/view/View;->mVerticalScrollbarPosition:I Landroid/view/View;->mViewFlags:I +Landroid/view/View;->NAVIGATION_BAR_TRANSIENT:I Landroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V +Landroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V +Landroid/view/View;->onCloseSystemDialogs(Ljava/lang/String;)V Landroid/view/View;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V +Landroid/view/View;->onFocusLost()V Landroid/view/View;->performAccessibilityActionInternal(ILandroid/os/Bundle;)Z +Landroid/view/View;->pointInView(FFF)Z Landroid/view/View;->recomputePadding()V +Landroid/view/View;->removePerformClickCallback()V Landroid/view/View;->requestAccessibilityFocus()Z Landroid/view/View;->resetDisplayList()V Landroid/view/View;->resetPaddingToInitialValues()V @@ -2854,12 +6016,15 @@ Landroid/view/View;->resetResolvedPadding()V Landroid/view/View;->resetResolvedTextAlignment()V Landroid/view/View;->resetResolvedTextDirection()V Landroid/view/View;->resetRtlProperties()V +Landroid/view/View;->resolvePadding()V Landroid/view/View;->setAlphaNoInvalidation(F)Z Landroid/view/View;->setAnimationMatrix(Landroid/graphics/Matrix;)V Landroid/view/View;->setAssistBlocked(Z)V +Landroid/view/View;->setFlags(II)V Landroid/view/View;->setFrame(IIII)Z Landroid/view/View;->setIsRootNamespace(Z)V Landroid/view/View;->setLeftTopRightBottom(IIII)V +Landroid/view/View;->setTagInternal(ILjava/lang/Object;)V Landroid/view/View;->setTransitionAlpha(F)V Landroid/view/View;->startActivityForResult(Landroid/content/Intent;I)V Landroid/view/View;->STATUS_BAR_DISABLE_BACK:I @@ -2872,77 +6037,176 @@ Landroid/view/View;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V Landroid/view/View;->transformMatrixToLocal(Landroid/graphics/Matrix;)V Landroid/view/ViewConfiguration;->getDeviceGlobalActionKeyTimeout()J Landroid/view/ViewConfiguration;->getDoubleTapMinTime()I +Landroid/view/ViewConfiguration;->getDoubleTapSlop()I +Landroid/view/ViewConfiguration;->getScaledDoubleTapTouchSlop()I +Landroid/view/ViewConfiguration;->isFadingMarqueeEnabled()Z Landroid/view/ViewConfiguration;->mFadingMarqueeEnabled:Z +Landroid/view/ViewConfiguration;->sConfigurations:Landroid/util/SparseArray; +Landroid/view/ViewConfiguration;->SCROLL_FRICTION:F Landroid/view/ViewConfiguration;->sHasPermanentMenuKey:Z Landroid/view/ViewConfiguration;->sHasPermanentMenuKeySet:Z Landroid/view/ViewDebug;->dispatchCommand(Landroid/view/View;Ljava/lang/String;Ljava/lang/String;Ljava/io/OutputStream;)V Landroid/view/ViewDebug;->dump(Landroid/view/View;ZZLjava/io/OutputStream;)V +Landroid/view/ViewDebug;->getViewInstanceCount()J +Landroid/view/ViewDebug;->getViewRootImplCount()J +Landroid/view/ViewGroup$LayoutParams;-><init>()V Landroid/view/ViewGroup$MarginLayoutParams;->endMargin:I +Landroid/view/ViewGroup$MarginLayoutParams;->setMarginsRelative(IIII)V Landroid/view/ViewGroup$MarginLayoutParams;->startMargin:I +Landroid/view/ViewGroup$TouchTarget;->child:Landroid/view/View; +Landroid/view/ViewGroup;->addTransientView(Landroid/view/View;I)V +Landroid/view/ViewGroup;->cancelTouchTarget(Landroid/view/View;)V +Landroid/view/ViewGroup;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V +Landroid/view/ViewGroup;->dispatchDetachedFromWindow()V +Landroid/view/ViewGroup;->dispatchGetDisplayList()V Landroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V Landroid/view/ViewGroup;->dispatchViewRemoved(Landroid/view/View;)V +Landroid/view/ViewGroup;->FLAG_DISALLOW_INTERCEPT:I Landroid/view/ViewGroup;->FLAG_SUPPORT_STATIC_TRANSFORMATIONS:I Landroid/view/ViewGroup;->FLAG_USE_CHILD_DRAWING_ORDER:I +Landroid/view/ViewGroup;->getTransientView(I)Landroid/view/View; +Landroid/view/ViewGroup;->getTransientViewCount()I +Landroid/view/ViewGroup;->isTransformedTouchPointInView(FFLandroid/view/View;Landroid/graphics/PointF;)Z Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V Landroid/view/ViewGroup;->mChildren:[Landroid/view/View; Landroid/view/ViewGroup;->mChildrenCount:I +Landroid/view/ViewGroup;->mDisappearingChildren:Ljava/util/ArrayList; Landroid/view/ViewGroup;->mFirstTouchTarget:Landroid/view/ViewGroup$TouchTarget; Landroid/view/ViewGroup;->mGroupFlags:I Landroid/view/ViewGroup;->mOnHierarchyChangeListener:Landroid/view/ViewGroup$OnHierarchyChangeListener; Landroid/view/ViewGroup;->mPersistentDrawingCache:I Landroid/view/ViewGroup;->offsetChildrenTopAndBottom(I)V Landroid/view/ViewGroup;->onChildVisibilityChanged(Landroid/view/View;II)V +Landroid/view/ViewGroup;->removeTransientView(Landroid/view/View;)V Landroid/view/ViewGroup;->resetResolvedDrawables()V Landroid/view/ViewGroup;->resetResolvedLayoutDirection()V Landroid/view/ViewGroup;->resetResolvedPadding()V Landroid/view/ViewGroup;->resetResolvedTextAlignment()V Landroid/view/ViewGroup;->resetResolvedTextDirection()V +Landroid/view/ViewGroup;->resolvePadding()V Landroid/view/ViewGroup;->suppressLayout(Z)V +Landroid/view/ViewGroup;->transformPointToViewLocal([FLandroid/view/View;)V +Landroid/view/ViewHierarchyEncoder;->addProperty(Ljava/lang/String;I)V +Landroid/view/ViewHierarchyEncoder;->addProperty(Ljava/lang/String;Z)V +Landroid/view/ViewOverlay;->getOverlayView()Landroid/view/ViewGroup; +Landroid/view/ViewOverlay;->isEmpty()Z +Landroid/view/ViewRootImpl$CalledFromWrongThreadException;-><init>(Ljava/lang/String;)V +Landroid/view/ViewRootImpl;->addConfigCallback(Landroid/view/ViewRootImpl$ConfigChangedCallback;)V +Landroid/view/ViewRootImpl;->cancelInvalidate(Landroid/view/View;)V Landroid/view/ViewRootImpl;->detachFunctor(J)V Landroid/view/ViewRootImpl;->dispatchInputEvent(Landroid/view/InputEvent;)V Landroid/view/ViewRootImpl;->dispatchInputEvent(Landroid/view/InputEvent;Landroid/view/InputEventReceiver;)V +Landroid/view/ViewRootImpl;->dispatchKeyFromIme(Landroid/view/KeyEvent;)V +Landroid/view/ViewRootImpl;->dispatchResized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZILandroid/view/DisplayCutout$ParcelableWrapper;)V +Landroid/view/ViewRootImpl;->dispatchUnhandledInputEvent(Landroid/view/InputEvent;)V +Landroid/view/ViewRootImpl;->enableHardwareAcceleration(Landroid/view/WindowManager$LayoutParams;)V Landroid/view/ViewRootImpl;->enqueueInputEvent(Landroid/view/InputEvent;)V +Landroid/view/ViewRootImpl;->enqueueInputEvent(Landroid/view/InputEvent;Landroid/view/InputEventReceiver;IZ)V +Landroid/view/ViewRootImpl;->ensureTouchMode(Z)Z +Landroid/view/ViewRootImpl;->getAccessibilityFocusedHost()Landroid/view/View; +Landroid/view/ViewRootImpl;->getAccessibilityFocusedVirtualView()Landroid/view/accessibility/AccessibilityNodeInfo; +Landroid/view/ViewRootImpl;->getLastTouchPoint(Landroid/graphics/Point;)V +Landroid/view/ViewRootImpl;->getView()Landroid/view/View; Landroid/view/ViewRootImpl;->getWindowFlags()I +Landroid/view/ViewRootImpl;->invalidate()V Landroid/view/ViewRootImpl;->invokeFunctor(JZ)V +Landroid/view/ViewRootImpl;->mAdded:Z +Landroid/view/ViewRootImpl;->mAttachInfo:Landroid/view/View$AttachInfo; +Landroid/view/ViewRootImpl;->mContext:Landroid/content/Context; +Landroid/view/ViewRootImpl;->mDirty:Landroid/graphics/Rect; +Landroid/view/ViewRootImpl;->mFallbackEventHandler:Landroid/view/FallbackEventHandler; +Landroid/view/ViewRootImpl;->mHeight:I Landroid/view/ViewRootImpl;->mLastScrolledFocus:Ljava/lang/ref/WeakReference; Landroid/view/ViewRootImpl;->mStopped:Z Landroid/view/ViewRootImpl;->mSurface:Landroid/view/Surface; Landroid/view/ViewRootImpl;->mView:Landroid/view/View; +Landroid/view/ViewRootImpl;->mWidth:I +Landroid/view/ViewRootImpl;->mWindowSession:Landroid/view/IWindowSession; +Landroid/view/ViewRootImpl;->scheduleTraversals()V +Landroid/view/ViewRootImpl;->setLocalDragState(Ljava/lang/Object;)V +Landroid/view/ViewTreeObserver$InternalInsetsInfo;-><init>()V +Landroid/view/ViewTreeObserver$InternalInsetsInfo;->contentInsets:Landroid/graphics/Rect; +Landroid/view/ViewTreeObserver$InternalInsetsInfo;->mTouchableInsets:I +Landroid/view/ViewTreeObserver$InternalInsetsInfo;->set(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V Landroid/view/ViewTreeObserver$InternalInsetsInfo;->setTouchableInsets(I)V Landroid/view/ViewTreeObserver$InternalInsetsInfo;->touchableRegion:Landroid/graphics/Region; Landroid/view/ViewTreeObserver$InternalInsetsInfo;->TOUCHABLE_INSETS_REGION:I +Landroid/view/ViewTreeObserver$InternalInsetsInfo;->visibleInsets:Landroid/graphics/Rect; Landroid/view/ViewTreeObserver;->addOnComputeInternalInsetsListener(Landroid/view/ViewTreeObserver$OnComputeInternalInsetsListener;)V +Landroid/view/ViewTreeObserver;->dispatchOnComputeInternalInsets(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V +Landroid/view/ViewTreeObserver;->dispatchOnGlobalFocusChange(Landroid/view/View;Landroid/view/View;)V +Landroid/view/ViewTreeObserver;->dispatchOnScrollChanged()V +Landroid/view/ViewTreeObserver;->dispatchOnTouchModeChanged(Z)V +Landroid/view/ViewTreeObserver;->hasComputeInternalInsetsListeners()Z +Landroid/view/ViewTreeObserver;->mOnComputeInternalInsetsListeners:Landroid/view/ViewTreeObserver$CopyOnWriteArray; +Landroid/view/ViewTreeObserver;->mOnGlobalLayoutListeners:Landroid/view/ViewTreeObserver$CopyOnWriteArray; +Landroid/view/ViewTreeObserver;->mOnScrollChangedListeners:Landroid/view/ViewTreeObserver$CopyOnWriteArray; +Landroid/view/ViewTreeObserver;->mOnTouchModeChangeListeners:Ljava/util/concurrent/CopyOnWriteArrayList; Landroid/view/ViewTreeObserver;->removeOnComputeInternalInsetsListener(Landroid/view/ViewTreeObserver$OnComputeInternalInsetsListener;)V Landroid/view/Window;->addPrivateFlags(I)V +Landroid/view/Window;->alwaysReadCloseOnTouchAttr()V +Landroid/view/Window;->isDestroyed()Z Landroid/view/Window;->mAppName:Ljava/lang/String; Landroid/view/Window;->mAppToken:Landroid/os/IBinder; Landroid/view/Window;->mCallback:Landroid/view/Window$Callback; Landroid/view/Window;->mContext:Landroid/content/Context; +Landroid/view/Window;->mDestroyed:Z +Landroid/view/Window;->mFeatures:I Landroid/view/Window;->mHardwareAccelerated:Z +Landroid/view/Window;->mLocalFeatures:I +Landroid/view/Window;->mWindowAttributes:Landroid/view/WindowManager$LayoutParams; Landroid/view/Window;->mWindowStyle:Landroid/content/res/TypedArray; +Landroid/view/Window;->setCloseOnTouchOutside(Z)V +Landroid/view/Window;->setCloseOnTouchOutsideIfNotSet(Z)V Landroid/view/Window;->setNeedsMenuKey(I)V Landroid/view/WindowAnimationFrameStats;->init(J[J)V Landroid/view/WindowContentFrameStats;->init(J[J[J[J)V +Landroid/view/WindowInsets;-><init>(Landroid/graphics/Rect;)V +Landroid/view/WindowInsets;->CONSUMED:Landroid/view/WindowInsets; +Landroid/view/WindowInsets;->getSystemWindowInsets()Landroid/graphics/Rect; +Landroid/view/WindowLeaked;-><init>(Ljava/lang/String;)V +Landroid/view/WindowManager$LayoutParams;->backup()V +Landroid/view/WindowManager$LayoutParams;->FLAG_SLIPPERY:I +Landroid/view/WindowManager$LayoutParams;->hasSystemUiListeners:Z Landroid/view/WindowManager$LayoutParams;->hideTimeoutMilliseconds:J +Landroid/view/WindowManager$LayoutParams;->inputFeatures:I +Landroid/view/WindowManager$LayoutParams;->INPUT_FEATURE_DISABLE_USER_ACTIVITY:I Landroid/view/WindowManager$LayoutParams;->needsMenuKey:I Landroid/view/WindowManager$LayoutParams;->NEEDS_MENU_SET_FALSE:I Landroid/view/WindowManager$LayoutParams;->NEEDS_MENU_SET_TRUE:I +Landroid/view/WindowManager$LayoutParams;->PRIVATE_FLAG_SHOW_FOR_ALL_USERS:I +Landroid/view/WindowManager$LayoutParams;->restore()V +Landroid/view/WindowManager$LayoutParams;->subtreeSystemUiVisibility:I +Landroid/view/WindowManager$LayoutParams;->TYPE_APPLICATION_MEDIA_OVERLAY:I +Landroid/view/WindowManager$LayoutParams;->TYPE_DISPLAY_OVERLAY:I +Landroid/view/WindowManager$LayoutParams;->TYPE_SECURE_SYSTEM_OVERLAY:I Landroid/view/WindowManager$LayoutParams;->userActivityTimeout:J Landroid/view/WindowManagerGlobal;->getInstance()Landroid/view/WindowManagerGlobal; Landroid/view/WindowManagerGlobal;->getRootView(Ljava/lang/String;)Landroid/view/View; +Landroid/view/WindowManagerGlobal;->getRootViews(Landroid/os/IBinder;)Ljava/util/ArrayList; Landroid/view/WindowManagerGlobal;->getViewRootNames()[Ljava/lang/String; Landroid/view/WindowManagerGlobal;->getWindowManagerService()Landroid/view/IWindowManager; +Landroid/view/WindowManagerGlobal;->getWindowSession()Landroid/view/IWindowSession; Landroid/view/WindowManagerGlobal;->initialize()V Landroid/view/WindowManagerGlobal;->mLock:Ljava/lang/Object; Landroid/view/WindowManagerGlobal;->mParams:Ljava/util/ArrayList; Landroid/view/WindowManagerGlobal;->mRoots:Ljava/util/ArrayList; Landroid/view/WindowManagerGlobal;->mViews:Ljava/util/ArrayList; +Landroid/view/WindowManagerGlobal;->peekWindowSession()Landroid/view/IWindowSession; +Landroid/view/WindowManagerGlobal;->removeView(Landroid/view/View;Z)V Landroid/view/WindowManagerGlobal;->sDefaultWindowManager:Landroid/view/WindowManagerGlobal; Landroid/view/WindowManagerGlobal;->sWindowManagerService:Landroid/view/IWindowManager; Landroid/view/WindowManagerGlobal;->sWindowSession:Landroid/view/IWindowSession; Landroid/view/WindowManagerGlobal;->trimMemory(I)V Landroid/view/WindowManagerImpl;->mGlobal:Landroid/view/WindowManagerGlobal; Landroid/webkit/CacheManager$CacheResult;-><init>()V +Landroid/webkit/CacheManager$CacheResult;->contentdisposition:Ljava/lang/String; +Landroid/webkit/CacheManager$CacheResult;->contentLength:J +Landroid/webkit/CacheManager$CacheResult;->crossDomain:Ljava/lang/String; +Landroid/webkit/CacheManager$CacheResult;->encoding:Ljava/lang/String; +Landroid/webkit/CacheManager$CacheResult;->etag:Ljava/lang/String; +Landroid/webkit/CacheManager$CacheResult;->expires:J +Landroid/webkit/CacheManager$CacheResult;->expiresString:Ljava/lang/String; Landroid/webkit/CacheManager$CacheResult;->getContentDisposition()Ljava/lang/String; Landroid/webkit/CacheManager$CacheResult;->getContentLength()J Landroid/webkit/CacheManager$CacheResult;->getEncoding()Ljava/lang/String; @@ -2956,24 +6220,55 @@ Landroid/webkit/CacheManager$CacheResult;->getLocalPath()Ljava/lang/String; Landroid/webkit/CacheManager$CacheResult;->getLocation()Ljava/lang/String; Landroid/webkit/CacheManager$CacheResult;->getMimeType()Ljava/lang/String; Landroid/webkit/CacheManager$CacheResult;->getOutputStream()Ljava/io/OutputStream; +Landroid/webkit/CacheManager$CacheResult;->httpStatusCode:I +Landroid/webkit/CacheManager$CacheResult;->inStream:Ljava/io/InputStream; +Landroid/webkit/CacheManager$CacheResult;->lastModified:Ljava/lang/String; +Landroid/webkit/CacheManager$CacheResult;->localPath:Ljava/lang/String; +Landroid/webkit/CacheManager$CacheResult;->location:Ljava/lang/String; +Landroid/webkit/CacheManager$CacheResult;->mimeType:Ljava/lang/String; +Landroid/webkit/CacheManager$CacheResult;->outFile:Ljava/io/File; +Landroid/webkit/CacheManager$CacheResult;->outStream:Ljava/io/OutputStream; Landroid/webkit/CacheManager$CacheResult;->setEncoding(Ljava/lang/String;)V Landroid/webkit/CacheManager$CacheResult;->setInputStream(Ljava/io/InputStream;)V Landroid/webkit/CacheManager;->cacheDisabled()Z Landroid/webkit/CacheManager;->endCacheTransaction()Z Landroid/webkit/CacheManager;->getCacheFile(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult; Landroid/webkit/CacheManager;->getCacheFileBaseDir()Ljava/io/File; +Landroid/webkit/CacheManager;->saveCacheFile(Ljava/lang/String;JLandroid/webkit/CacheManager$CacheResult;)V Landroid/webkit/CacheManager;->saveCacheFile(Ljava/lang/String;Landroid/webkit/CacheManager$CacheResult;)V Landroid/webkit/CacheManager;->startCacheTransaction()Z Landroid/webkit/IWebViewUpdateService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/webkit/IWebViewUpdateService$Stub$Proxy;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse; +Landroid/webkit/IWebViewUpdateService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/webkit/IWebViewUpdateService; +Landroid/webkit/IWebViewUpdateService;->isFallbackPackage(Ljava/lang/String;)Z +Landroid/webkit/JsResult;->mReceiver:Landroid/webkit/JsResult$ResultReceiver; +Landroid/webkit/PluginData;-><init>(Ljava/io/InputStream;JLjava/util/Map;I)V +Landroid/webkit/PluginData;->getContentLength()J +Landroid/webkit/PluginData;->getHeaders()Ljava/util/Map; +Landroid/webkit/PluginData;->getInputStream()Ljava/io/InputStream; +Landroid/webkit/PluginData;->getStatusCode()I +Landroid/webkit/UrlInterceptRegistry;->getPluginData(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/PluginData; +Landroid/webkit/UrlInterceptRegistry;->registerHandler(Landroid/webkit/UrlInterceptHandler;)Z +Landroid/webkit/UrlInterceptRegistry;->setUrlInterceptDisabled(Z)V +Landroid/webkit/UrlInterceptRegistry;->unregisterHandler(Landroid/webkit/UrlInterceptHandler;)Z +Landroid/webkit/URLUtil;->isResourceUrl(Ljava/lang/String;)Z +Landroid/webkit/URLUtil;->parseContentDisposition(Ljava/lang/String;)Ljava/lang/String; +Landroid/webkit/URLUtil;->verifyURLEncoding(Ljava/lang/String;)Z Landroid/webkit/WebResourceResponse;->mImmutable:Z +Landroid/webkit/WebResourceResponse;->mStatusCode:I Landroid/webkit/WebSettings$TextSize;->value:I Landroid/webkit/WebSyncManager;->mHandler:Landroid/os/Handler; +Landroid/webkit/WebSyncManager;->syncFromRamToFlash()V +Landroid/webkit/WebView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IILjava/util/Map;Z)V +Landroid/webkit/WebView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;ILjava/util/Map;Z)V +Landroid/webkit/WebView;->checkThread()V Landroid/webkit/WebView;->debugDump()V Landroid/webkit/WebView;->disablePlatformNotifications()V Landroid/webkit/WebView;->emulateShiftHeld()V Landroid/webkit/WebView;->enablePlatformNotifications()V +Landroid/webkit/WebView;->freeMemoryForTests()V Landroid/webkit/WebView;->getContentWidth()I +Landroid/webkit/WebView;->getFactory()Landroid/webkit/WebViewFactoryProvider; Landroid/webkit/WebView;->getTouchIconUrl()Ljava/lang/String; Landroid/webkit/WebView;->getVisibleTitleHeight()I Landroid/webkit/WebView;->isPaused()Z @@ -2984,13 +6279,16 @@ Landroid/webkit/WebView;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landr Landroid/webkit/WebView;->restorePicture(Landroid/os/Bundle;Ljava/io/File;)Z Landroid/webkit/WebView;->savePicture(Landroid/os/Bundle;Ljava/io/File;)Z Landroid/webkit/WebView;->sEnforceThreadChecking:Z +Landroid/webkit/WebView;->setFrame(IIII)Z Landroid/webkit/WebViewDelegate;-><init>()V Landroid/webkit/WebViewFactory;->getProvider()Landroid/webkit/WebViewFactoryProvider; +Landroid/webkit/WebViewFactory;->getProviderClass()Ljava/lang/Class; Landroid/webkit/WebViewFactory;->getUpdateService()Landroid/webkit/IWebViewUpdateService; Landroid/webkit/WebViewFactory;->getWebViewContextAndSetProvider()Landroid/content/Context; Landroid/webkit/WebViewFactory;->sPackageInfo:Landroid/content/pm/PackageInfo; Landroid/webkit/WebViewFactory;->sProviderInstance:Landroid/webkit/WebViewFactoryProvider; Landroid/webkit/WebViewProviderResponse;->packageInfo:Landroid/content/pm/PackageInfo; +Landroid/webkit/WebViewUpdateService;-><init>()V Landroid/widget/AbsListView$FlingRunnable;->endFling()V Landroid/widget/AbsListView$FlingRunnable;->mScroller:Landroid/widget/OverScroller; Landroid/widget/AbsListView$FlingRunnable;->start(I)V @@ -2998,9 +6296,12 @@ Landroid/widget/AbsListView$RecycleBin;->clear()V Landroid/widget/AbsListView$RecycleBin;->mRecyclerListener:Landroid/widget/AbsListView$RecyclerListener; Landroid/widget/AbsListView$SavedState;->firstId:J Landroid/widget/AbsListView$SavedState;->viewTop:I +Landroid/widget/AbsListView;->findMotionRow(I)I Landroid/widget/AbsListView;->invokeOnItemScrollListener()V Landroid/widget/AbsListView;->isVerticalScrollBarHidden()Z Landroid/widget/AbsListView;->mAdapter:Landroid/widget/ListAdapter; +Landroid/widget/AbsListView;->mChoiceActionMode:Landroid/view/ActionMode; +Landroid/widget/AbsListView;->mContextMenuInfo:Landroid/view/ContextMenu$ContextMenuInfo; Landroid/widget/AbsListView;->mDataSetObserver:Landroid/widget/AbsListView$AdapterDataSetObserver; Landroid/widget/AbsListView;->mEdgeGlowBottom:Landroid/widget/EdgeEffect; Landroid/widget/AbsListView;->mEdgeGlowTop:Landroid/widget/EdgeEffect; @@ -3010,11 +6311,18 @@ Landroid/widget/AbsListView;->mIsChildViewEnabled:Z Landroid/widget/AbsListView;->mLayoutMode:I Landroid/widget/AbsListView;->mMaximumVelocity:I Landroid/widget/AbsListView;->mMotionPosition:I +Landroid/widget/AbsListView;->mMotionY:I Landroid/widget/AbsListView;->mOnScrollListener:Landroid/widget/AbsListView$OnScrollListener; +Landroid/widget/AbsListView;->mOverflingDistance:I +Landroid/widget/AbsListView;->mOverscrollDistance:I Landroid/widget/AbsListView;->mPendingCheckForLongPress:Landroid/widget/AbsListView$CheckForLongPress; Landroid/widget/AbsListView;->mPendingCheckForTap:Landroid/widget/AbsListView$CheckForTap; +Landroid/widget/AbsListView;->mPopup:Landroid/widget/PopupWindow; +Landroid/widget/AbsListView;->mPositionScroller:Landroid/widget/AbsListView$AbsPositionScroller; Landroid/widget/AbsListView;->mRecycler:Landroid/widget/AbsListView$RecycleBin; +Landroid/widget/AbsListView;->mSelectionBottomPadding:I Landroid/widget/AbsListView;->mSelectionTopPadding:I +Landroid/widget/AbsListView;->mSelector:Landroid/graphics/drawable/Drawable; Landroid/widget/AbsListView;->mSelectorPosition:I Landroid/widget/AbsListView;->mSelectorRect:Landroid/graphics/Rect; Landroid/widget/AbsListView;->mTouchMode:I @@ -3022,46 +6330,108 @@ Landroid/widget/AbsListView;->mTouchSlop:I Landroid/widget/AbsListView;->mVelocityTracker:Landroid/view/VelocityTracker; Landroid/widget/AbsListView;->performLongPress(Landroid/view/View;IJ)Z Landroid/widget/AbsListView;->performLongPress(Landroid/view/View;IJFF)Z +Landroid/widget/AbsListView;->positionSelector(ILandroid/view/View;ZFF)V Landroid/widget/AbsListView;->reportScrollStateChange(I)V +Landroid/widget/AbsListView;->resurrectSelectionIfNeeded()Z Landroid/widget/AbsListView;->smoothScrollBy(IIZZ)V Landroid/widget/AbsListView;->trackMotionScroll(II)Z +Landroid/widget/AbsListView;->updateSelectorState()V +Landroid/widget/AbsSeekBar;->mDisabledAlpha:F Landroid/widget/AbsSeekBar;->mIsDragging:Z +Landroid/widget/AbsSeekBar;->mIsUserSeekable:Z Landroid/widget/AbsSeekBar;->mSplitTrack:Z Landroid/widget/AbsSeekBar;->mThumb:Landroid/graphics/drawable/Drawable; Landroid/widget/AbsSeekBar;->mTouchProgressOffset:F +Landroid/widget/AbsSeekBar;->trackTouchEvent(Landroid/view/MotionEvent;)V +Landroid/widget/ActionMenuPresenter;->dismissPopupMenus()Z +Landroid/widget/ActionMenuPresenter;->isOverflowMenuShowing()Z +Landroid/widget/ActionMenuPresenter;->onRestoreInstanceState(Landroid/os/Parcelable;)V +Landroid/widget/ActionMenuPresenter;->onSaveInstanceState()Landroid/os/Parcelable; +Landroid/widget/ActionMenuView$LayoutParams;->isOverflowButton:Z +Landroid/widget/ActionMenuView;->isOverflowMenuShowPending()Z +Landroid/widget/ActionMenuView;->isOverflowReserved()Z +Landroid/widget/ActionMenuView;->peekMenu()Lcom/android/internal/view/menu/MenuBuilder; +Landroid/widget/ActionMenuView;->setExpandedActionViewsExclusive(Z)V +Landroid/widget/ActionMenuView;->setMenuCallbacks(Lcom/android/internal/view/menu/MenuPresenter$Callback;Lcom/android/internal/view/menu/MenuBuilder$Callback;)V +Landroid/widget/ActivityChooserModel;->chooseActivity(I)Landroid/content/Intent; Landroid/widget/ActivityChooserModel;->get(Landroid/content/Context;Ljava/lang/String;)Landroid/widget/ActivityChooserModel; +Landroid/widget/ActivityChooserModel;->getActivity(I)Landroid/content/pm/ResolveInfo; +Landroid/widget/ActivityChooserModel;->getActivityCount()I +Landroid/widget/ActivityChooserModel;->setIntent(Landroid/content/Intent;)V +Landroid/widget/ActivityChooserModel;->setOnChooseActivityListener(Landroid/widget/ActivityChooserModel$OnChooseActivityListener;)V Landroid/widget/ActivityChooserView;->setExpandActivityOverflowButtonDrawable(Landroid/graphics/drawable/Drawable;)V Landroid/widget/AdapterView;->mDataChanged:Z Landroid/widget/AdapterView;->mFirstPosition:I Landroid/widget/AdapterView;->mNextSelectedPosition:I Landroid/widget/AdapterView;->mNextSelectedRowId:J Landroid/widget/AdapterView;->mOldSelectedPosition:I +Landroid/widget/AdapterView;->mOnItemClickListener:Landroid/widget/AdapterView$OnItemClickListener; +Landroid/widget/AdapterView;->mOnItemSelectedListener:Landroid/widget/AdapterView$OnItemSelectedListener; +Landroid/widget/AdapterView;->mSelectedPosition:I +Landroid/widget/AdapterView;->mSyncPosition:I +Landroid/widget/AdapterView;->selectionChanged()V Landroid/widget/AdapterView;->setNextSelectedPositionInt(I)V Landroid/widget/AdapterView;->setSelectedPositionInt(I)V +Landroid/widget/AnalogClock;->mDial:Landroid/graphics/drawable/Drawable; +Landroid/widget/AnalogClock;->mHourHand:Landroid/graphics/drawable/Drawable; +Landroid/widget/AnalogClock;->mMinuteHand:Landroid/graphics/drawable/Drawable; +Landroid/widget/AppSecurityPermissions;-><init>(Landroid/content/Context;Ljava/lang/String;)V +Landroid/widget/AppSecurityPermissions;->getPermissionCount()I +Landroid/widget/AppSecurityPermissions;->getPermissionsView()Landroid/view/View; +Landroid/widget/ArrayAdapter;->mLock:Ljava/lang/Object; +Landroid/widget/ArrayAdapter;->mObjects:Ljava/util/List; +Landroid/widget/ArrayAdapter;->mOriginalValues:Ljava/util/ArrayList; Landroid/widget/AutoCompleteTextView;->doAfterTextChanged()V Landroid/widget/AutoCompleteTextView;->doBeforeTextChanged()V Landroid/widget/AutoCompleteTextView;->ensureImeVisible(Z)V +Landroid/widget/AutoCompleteTextView;->isInputMethodNotNeeded()Z +Landroid/widget/AutoCompleteTextView;->mHintView:Landroid/widget/TextView; +Landroid/widget/AutoCompleteTextView;->mObserver:Landroid/widget/AutoCompleteTextView$PopupDataSetObserver; +Landroid/widget/AutoCompleteTextView;->mPassThroughClickListener:Landroid/widget/AutoCompleteTextView$PassThroughClickListener; Landroid/widget/AutoCompleteTextView;->mPopup:Landroid/widget/ListPopupWindow; Landroid/widget/AutoCompleteTextView;->setDropDownAlwaysVisible(Z)V +Landroid/widget/AutoCompleteTextView;->setDropDownAnimationStyle(I)V Landroid/widget/AutoCompleteTextView;->setForceIgnoreOutsideTouch(Z)V +Landroid/widget/AutoCompleteTextView;->showDropDownAfterLayout()V Landroid/widget/BaseAdapter;->mDataSetObservable:Landroid/database/DataSetObservable; +Landroid/widget/CalendarView;->mDelegate:Landroid/widget/CalendarView$CalendarViewDelegate; +Landroid/widget/CheckedTextView;->mCheckMarkDrawable:Landroid/graphics/drawable/Drawable; +Landroid/widget/CheckedTextView;->mCheckMarkGravity:I Landroid/widget/CompoundButton;->mBroadcasting:Z Landroid/widget/CompoundButton;->mButtonDrawable:Landroid/graphics/drawable/Drawable; Landroid/widget/CompoundButton;->mOnCheckedChangeListener:Landroid/widget/CompoundButton$OnCheckedChangeListener; Landroid/widget/CursorAdapter;->mChangeObserver:Landroid/widget/CursorAdapter$ChangeObserver; +Landroid/widget/CursorAdapter;->mContext:Landroid/content/Context; +Landroid/widget/CursorAdapter;->mCursor:Landroid/database/Cursor; Landroid/widget/CursorAdapter;->mDataSetObserver:Landroid/database/DataSetObserver; Landroid/widget/CursorAdapter;->mDataValid:Z Landroid/widget/CursorAdapter;->mRowIDColumn:I Landroid/widget/DatePicker;->mDelegate:Landroid/widget/DatePicker$DatePickerDelegate; +Landroid/widget/DatePicker;->setValidationCallback(Landroid/widget/DatePicker$ValidationCallback;)V +Landroid/widget/DateTimeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V +Landroid/widget/DateTimeView;->setTime(J)V +Landroid/widget/DateTimeView;->update()V +Landroid/widget/EdgeEffect;->mGlowScaleY:F Landroid/widget/EdgeEffect;->mPaint:Landroid/graphics/Paint; +Landroid/widget/Editor$InputContentType;->privateImeOptions:Ljava/lang/String; Landroid/widget/Editor;->invalidateTextDisplayList()V +Landroid/widget/Editor;->mCreatedWithASelection:Z Landroid/widget/Editor;->mInsertionControllerEnabled:Z Landroid/widget/Editor;->mSelectHandleLeft:Landroid/graphics/drawable/Drawable; Landroid/widget/Editor;->mSelectionControllerEnabled:Z Landroid/widget/Editor;->mShowCursor:J Landroid/widget/Editor;->mShowSoftInputOnFocus:Z +Landroid/widget/ExpandableListView;->GROUP_STATE_SETS:[[I Landroid/widget/ExpandableListView;->mChildDivider:Landroid/graphics/drawable/Drawable; +Landroid/widget/ExpandableListView;->mConnector:Landroid/widget/ExpandableListConnector; Landroid/widget/ExpandableListView;->mGroupIndicator:Landroid/graphics/drawable/Drawable; +Landroid/widget/ExpandableListView;->mIndicatorLeft:I +Landroid/widget/ExpandableListView;->mIndicatorRight:I +Landroid/widget/ExpandableListView;->mOnChildClickListener:Landroid/widget/ExpandableListView$OnChildClickListener; +Landroid/widget/ExpandableListView;->mOnGroupClickListener:Landroid/widget/ExpandableListView$OnGroupClickListener; +Landroid/widget/ExpandableListView;->mOnGroupCollapseListener:Landroid/widget/ExpandableListView$OnGroupCollapseListener; +Landroid/widget/ExpandableListView;->mOnGroupExpandListener:Landroid/widget/ExpandableListView$OnGroupExpandListener; +Landroid/widget/FastScroller;-><init>(Landroid/widget/AbsListView;I)V Landroid/widget/FastScroller;->mContainerRect:Landroid/graphics/Rect; Landroid/widget/FastScroller;->mHeaderCount:I Landroid/widget/FastScroller;->mLongList:Z @@ -3070,93 +6440,194 @@ Landroid/widget/FastScroller;->mThumbDrawable:Landroid/graphics/drawable/Drawabl Landroid/widget/FastScroller;->mThumbImage:Landroid/widget/ImageView; Landroid/widget/FastScroller;->mTrackDrawable:Landroid/graphics/drawable/Drawable; Landroid/widget/FastScroller;->mTrackImage:Landroid/widget/ImageView; +Landroid/widget/FastScroller;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z +Landroid/widget/FastScroller;->onSizeChanged(IIII)V +Landroid/widget/FastScroller;->onTouchEvent(Landroid/view/MotionEvent;)Z +Landroid/widget/FastScroller;->remove()V +Landroid/widget/FastScroller;->setState(I)V +Landroid/widget/Filter;->setDelayer(Landroid/widget/Filter$Delayer;)V +Landroid/widget/FrameLayout;->mForegroundPaddingBottom:I +Landroid/widget/FrameLayout;->mForegroundPaddingLeft:I +Landroid/widget/FrameLayout;->mForegroundPaddingRight:I +Landroid/widget/FrameLayout;->mForegroundPaddingTop:I +Landroid/widget/FrameLayout;->mMeasureAllChildren:Z Landroid/widget/Gallery$FlingRunnable;->startUsingVelocity(I)V Landroid/widget/Gallery;->fillToGalleryLeft()V Landroid/widget/Gallery;->fillToGalleryRight()V +Landroid/widget/Gallery;->getCenterOfGallery()I +Landroid/widget/Gallery;->getCenterOfView(Landroid/view/View;)I Landroid/widget/Gallery;->makeAndAddView(IIIZ)Landroid/view/View; Landroid/widget/Gallery;->mDownTouchPosition:I Landroid/widget/Gallery;->mDownTouchView:Landroid/view/View; Landroid/widget/Gallery;->mFlingRunnable:Landroid/widget/Gallery$FlingRunnable; +Landroid/widget/Gallery;->mGestureDetector:Landroid/view/GestureDetector; Landroid/widget/Gallery;->moveDirection(I)Z +Landroid/widget/Gallery;->mSelectedChild:Landroid/view/View; Landroid/widget/Gallery;->mSpacing:I +Landroid/widget/Gallery;->trackMotionScroll(I)V +Landroid/widget/GridLayout;->UNDEFINED_ALIGNMENT:Landroid/widget/GridLayout$Alignment; Landroid/widget/GridView;->fillDown(II)Landroid/view/View; Landroid/widget/GridView;->fillUp(II)Landroid/view/View; Landroid/widget/GridView;->mColumnWidth:I Landroid/widget/GridView;->mHorizontalSpacing:I Landroid/widget/GridView;->mNumColumns:I +Landroid/widget/GridView;->mRequestedColumnWidth:I +Landroid/widget/GridView;->mRequestedHorizontalSpacing:I Landroid/widget/GridView;->mRequestedNumColumns:I Landroid/widget/GridView;->mVerticalSpacing:I +Landroid/widget/GridView;->sequenceScroll(I)Z +Landroid/widget/HeaderViewListAdapter;->mAdapter:Landroid/widget/ListAdapter; +Landroid/widget/HeaderViewListAdapter;->mFooterViewInfos:Ljava/util/ArrayList; +Landroid/widget/HeaderViewListAdapter;->mHeaderViewInfos:Ljava/util/ArrayList; Landroid/widget/HorizontalScrollView;->mChildToScrollTo:Landroid/view/View; Landroid/widget/HorizontalScrollView;->mEdgeGlowLeft:Landroid/widget/EdgeEffect; Landroid/widget/HorizontalScrollView;->mEdgeGlowRight:Landroid/widget/EdgeEffect; +Landroid/widget/HorizontalScrollView;->mIsBeingDragged:Z +Landroid/widget/HorizontalScrollView;->mLastMotionX:I Landroid/widget/HorizontalScrollView;->mScroller:Landroid/widget/OverScroller; +Landroid/widget/HorizontalScrollView;->mVelocityTracker:Landroid/view/VelocityTracker; +Landroid/widget/HorizontalScrollView;->recycleVelocityTracker()V Landroid/widget/ImageView;->animateTransform(Landroid/graphics/Matrix;)V Landroid/widget/ImageView;->mAdjustViewBounds:Z Landroid/widget/ImageView;->mAlpha:I +Landroid/widget/ImageView;->mCropToPadding:Z +Landroid/widget/ImageView;->mDrawable:Landroid/graphics/drawable/Drawable; +Landroid/widget/ImageView;->mDrawableHeight:I +Landroid/widget/ImageView;->mDrawableWidth:I Landroid/widget/ImageView;->mDrawMatrix:Landroid/graphics/Matrix; Landroid/widget/ImageView;->mMaxHeight:I Landroid/widget/ImageView;->mMaxWidth:I Landroid/widget/ImageView;->mRecycleableBitmapDrawable:Landroid/graphics/drawable/BitmapDrawable; Landroid/widget/ImageView;->mResource:I Landroid/widget/ImageView;->mUri:Landroid/net/Uri; +Landroid/widget/ImageView;->resolveUri()V +Landroid/widget/ImageView;->scaleTypeToScaleToFit(Landroid/widget/ImageView$ScaleType;)Landroid/graphics/Matrix$ScaleToFit; +Landroid/widget/ImageView;->setImageResourceAsync(I)Ljava/lang/Runnable; +Landroid/widget/ImageView;->setImageURIAsync(Landroid/net/Uri;)Ljava/lang/Runnable; Landroid/widget/ImageView;->updateDrawable(Landroid/graphics/drawable/Drawable;)V +Landroid/widget/LinearLayout$LayoutParams;->encodeProperties(Landroid/view/ViewHierarchyEncoder;)V +Landroid/widget/LinearLayout;->INDEX_BOTTOM:I +Landroid/widget/LinearLayout;->INDEX_TOP:I +Landroid/widget/LinearLayout;->mDivider:Landroid/graphics/drawable/Drawable; Landroid/widget/LinearLayout;->mGravity:I +Landroid/widget/LinearLayout;->mMaxAscent:[I +Landroid/widget/LinearLayout;->mMaxDescent:[I +Landroid/widget/LinearLayout;->mTotalLength:I Landroid/widget/LinearLayout;->mUseLargestChild:Z +Landroid/widget/ListPopupWindow;->buildDropDown()I +Landroid/widget/ListPopupWindow;->mDropDownList:Landroid/widget/DropDownListView; Landroid/widget/ListPopupWindow;->mPopup:Landroid/widget/PopupWindow; Landroid/widget/ListPopupWindow;->setForceIgnoreOutsideTouch(Z)V +Landroid/widget/ListPopupWindow;->setListItemExpandMax(I)V +Landroid/widget/ListView;->arrowScroll(I)Z Landroid/widget/ListView;->fillDown(II)Landroid/view/View; Landroid/widget/ListView;->fillSpecific(II)Landroid/view/View; Landroid/widget/ListView;->fillUp(II)Landroid/view/View; +Landroid/widget/ListView;->makeAndAddView(IIZIZ)Landroid/view/View; Landroid/widget/ListView;->mAreAllItemsSelectable:Z +Landroid/widget/ListView;->mDivider:Landroid/graphics/drawable/Drawable; +Landroid/widget/ListView;->mDividerHeight:I +Landroid/widget/ListView;->measureHeightOfChildren(IIIII)I Landroid/widget/ListView;->mFooterViewInfos:Ljava/util/ArrayList; Landroid/widget/ListView;->mHeaderViewInfos:Ljava/util/ArrayList; +Landroid/widget/ListView;->scrollListItemsBy(I)V Landroid/widget/ListView;->setSelectionInt(I)V +Landroid/widget/ListView;->trackMotionScroll(II)Z Landroid/widget/MediaController;->mAnchor:Landroid/view/View; +Landroid/widget/MediaController;->mContext:Landroid/content/Context; +Landroid/widget/MediaController;->mCurrentTime:Landroid/widget/TextView; Landroid/widget/MediaController;->mDecor:Landroid/view/View; Landroid/widget/MediaController;->mDecorLayoutParams:Landroid/view/WindowManager$LayoutParams; +Landroid/widget/MediaController;->mEndTime:Landroid/widget/TextView; +Landroid/widget/MediaController;->mFfwdButton:Landroid/widget/ImageButton; +Landroid/widget/MediaController;->mFfwdListener:Landroid/view/View$OnClickListener; +Landroid/widget/MediaController;->mPauseButton:Landroid/widget/ImageButton; +Landroid/widget/MediaController;->mPlayer:Landroid/widget/MediaController$MediaPlayerControl; +Landroid/widget/MediaController;->mProgress:Landroid/widget/ProgressBar; +Landroid/widget/MediaController;->mRewButton:Landroid/widget/ImageButton; +Landroid/widget/MediaController;->mRewListener:Landroid/view/View$OnClickListener; +Landroid/widget/MediaController;->mRoot:Landroid/view/View; +Landroid/widget/MediaController;->mSeekListener:Landroid/widget/SeekBar$OnSeekBarChangeListener; +Landroid/widget/MediaController;->mShowing:Z +Landroid/widget/MediaController;->mWindow:Landroid/view/Window; Landroid/widget/MediaController;->mWindowManager:Landroid/view/WindowManager; +Landroid/widget/MediaController;->updatePausePlay()V +Landroid/widget/NumberPicker;->changeValueByOne(Z)V +Landroid/widget/NumberPicker;->getTwoDigitFormatter()Landroid/widget/NumberPicker$Formatter; Landroid/widget/NumberPicker;->initializeSelectorWheelIndices()V +Landroid/widget/NumberPicker;->mFlingScroller:Landroid/widget/Scroller; Landroid/widget/NumberPicker;->mInputText:Landroid/widget/EditText; +Landroid/widget/NumberPicker;->mMaximumFlingVelocity:I Landroid/widget/NumberPicker;->mMaxValue:I +Landroid/widget/NumberPicker;->mMinHeight:I +Landroid/widget/NumberPicker;->mMinWidth:I +Landroid/widget/NumberPicker;->mOnValueChangeListener:Landroid/widget/NumberPicker$OnValueChangeListener; Landroid/widget/NumberPicker;->mSelectionDivider:Landroid/graphics/drawable/Drawable; Landroid/widget/NumberPicker;->mSelectionDividerHeight:I +Landroid/widget/NumberPicker;->mSelectorIndices:[I Landroid/widget/NumberPicker;->mSelectorWheelPaint:Landroid/graphics/Paint; +Landroid/widget/NumberPicker;->SELECTOR_MIDDLE_ITEM_INDEX:I +Landroid/widget/NumberPicker;->SELECTOR_WHEEL_ITEM_COUNT:I Landroid/widget/OverScroller$SplineOverScroller;->mCurrVelocity:F +Landroid/widget/OverScroller;-><init>(Landroid/content/Context;Landroid/view/animation/Interpolator;Z)V +Landroid/widget/OverScroller;->extendDuration(I)V Landroid/widget/OverScroller;->isScrollingInDirection(FF)Z Landroid/widget/OverScroller;->mScrollerY:Landroid/widget/OverScroller$SplineOverScroller; +Landroid/widget/OverScroller;->setInterpolator(Landroid/view/animation/Interpolator;)V +Landroid/widget/PopupMenu;->mContext:Landroid/content/Context; Landroid/widget/PopupMenu;->mPopup:Lcom/android/internal/view/menu/MenuPopupHelper; Landroid/widget/PopupWindow;->computeAnimationResource()I Landroid/widget/PopupWindow;->createPopupLayoutParams(Landroid/os/IBinder;)Landroid/view/WindowManager$LayoutParams; Landroid/widget/PopupWindow;->invokePopup(Landroid/view/WindowManager$LayoutParams;)V Landroid/widget/PopupWindow;->mAboveAnchor:Z +Landroid/widget/PopupWindow;->mAboveAnchorBackgroundDrawable:Landroid/graphics/drawable/Drawable; Landroid/widget/PopupWindow;->mAnchor:Ljava/lang/ref/WeakReference; Landroid/widget/PopupWindow;->mAnimationStyle:I Landroid/widget/PopupWindow;->mBackgroundView:Landroid/view/View; +Landroid/widget/PopupWindow;->mBelowAnchorBackgroundDrawable:Landroid/graphics/drawable/Drawable; Landroid/widget/PopupWindow;->mContentView:Landroid/view/View; +Landroid/widget/PopupWindow;->mContext:Landroid/content/Context; +Landroid/widget/PopupWindow;->mDecorView:Landroid/widget/PopupWindow$PopupDecorView; Landroid/widget/PopupWindow;->mHeightMode:I Landroid/widget/PopupWindow;->mIsDropdown:Z Landroid/widget/PopupWindow;->mIsShowing:Z Landroid/widget/PopupWindow;->mLastHeight:I Landroid/widget/PopupWindow;->mLastWidth:I +Landroid/widget/PopupWindow;->mLayoutInScreen:Z +Landroid/widget/PopupWindow;->mNotTouchModal:Z +Landroid/widget/PopupWindow;->mOnDismissListener:Landroid/widget/PopupWindow$OnDismissListener; Landroid/widget/PopupWindow;->mOnScrollChangedListener:Landroid/view/ViewTreeObserver$OnScrollChangedListener; Landroid/widget/PopupWindow;->mOverlapAnchor:Z Landroid/widget/PopupWindow;->mTouchInterceptor:Landroid/view/View$OnTouchListener; Landroid/widget/PopupWindow;->mWidthMode:I Landroid/widget/PopupWindow;->mWindowLayoutType:I +Landroid/widget/PopupWindow;->mWindowManager:Landroid/view/WindowManager; Landroid/widget/PopupWindow;->preparePopup(Landroid/view/WindowManager$LayoutParams;)V +Landroid/widget/PopupWindow;->setAllowScrollingAnchorParent(Z)V Landroid/widget/PopupWindow;->setClipToScreenEnabled(Z)V Landroid/widget/PopupWindow;->setEpicenterBounds(Landroid/graphics/Rect;)V Landroid/widget/PopupWindow;->setLayoutInScreenEnabled(Z)V Landroid/widget/PopupWindow;->setLayoutInsetDecor(Z)V Landroid/widget/PopupWindow;->setTouchModal(Z)V Landroid/widget/PopupWindow;->showAtLocation(Landroid/os/IBinder;III)V +Landroid/widget/PopupWindow;->updateAboveAnchor(Z)V Landroid/widget/ProgressBar;->mCurrentDrawable:Landroid/graphics/drawable/Drawable; Landroid/widget/ProgressBar;->mDuration:I Landroid/widget/ProgressBar;->mIndeterminate:Z Landroid/widget/ProgressBar;->mMaxHeight:I Landroid/widget/ProgressBar;->mMinHeight:I +Landroid/widget/ProgressBar;->mMinWidth:I +Landroid/widget/ProgressBar;->mMirrorForRtl:Z Landroid/widget/ProgressBar;->mOnlyIndeterminate:Z Landroid/widget/ProgressBar;->setProgressInternal(IZZ)Z +Landroid/widget/ProgressBar;->startAnimation()V +Landroid/widget/ProgressBar;->stopAnimation()V +Landroid/widget/ProgressBar;->tileify(Landroid/graphics/drawable/Drawable;Z)Landroid/graphics/drawable/Drawable; +Landroid/widget/QuickContactBadge;->mOverlay:Landroid/graphics/drawable/Drawable; +Landroid/widget/RadioGroup;->mChildOnCheckedChangeListener:Landroid/widget/CompoundButton$OnCheckedChangeListener; +Landroid/widget/RadioGroup;->mOnCheckedChangeListener:Landroid/widget/RadioGroup$OnCheckedChangeListener; +Landroid/widget/RatingBar;->mOnRatingBarChangeListener:Landroid/widget/RatingBar$OnRatingBarChangeListener; +Landroid/widget/RelativeLayout$DependencyGraph$Node;-><init>()V Landroid/widget/RelativeLayout$LayoutParams;->mBottom:I Landroid/widget/RelativeLayout$LayoutParams;->mLeft:I Landroid/widget/RelativeLayout$LayoutParams;->mRight:I @@ -3167,11 +6638,14 @@ Landroid/widget/RemoteViews$Action;->viewId:I Landroid/widget/RemoteViews$BitmapCache;->mBitmaps:Ljava/util/ArrayList; Landroid/widget/RemoteViews$BitmapReflectionAction;->bitmap:Landroid/graphics/Bitmap; Landroid/widget/RemoteViews$BitmapReflectionAction;->methodName:Ljava/lang/String; +Landroid/widget/RemoteViews$OnClickHandler;-><init>()V +Landroid/widget/RemoteViews$OnClickHandler;->onClickHandler(Landroid/view/View;Landroid/app/PendingIntent;Landroid/content/Intent;)Z Landroid/widget/RemoteViews$ReflectionAction;->methodName:Ljava/lang/String; Landroid/widget/RemoteViews$ReflectionAction;->value:Ljava/lang/Object; Landroid/widget/RemoteViews$SetOnClickPendingIntent;->pendingIntent:Landroid/app/PendingIntent; Landroid/widget/RemoteViews$SetPendingIntentTemplate;->pendingIntentTemplate:Landroid/app/PendingIntent; Landroid/widget/RemoteViews$ViewGroupActionAdd;->mNestedViews:Landroid/widget/RemoteViews; +Landroid/widget/RemoteViews;->addView(ILandroid/widget/RemoteViews;I)V Landroid/widget/RemoteViews;->estimateMemoryUsage()I Landroid/widget/RemoteViews;->mActions:Ljava/util/ArrayList; Landroid/widget/RemoteViews;->mApplication:Landroid/content/pm/ApplicationInfo; @@ -3179,77 +6653,239 @@ Landroid/widget/RemoteViews;->mBitmapCache:Landroid/widget/RemoteViews$BitmapCac Landroid/widget/RemoteViews;->mergeRemoteViews(Landroid/widget/RemoteViews;)V Landroid/widget/RemoteViews;->mLayoutId:I Landroid/widget/RemoteViews;->mPortrait:Landroid/widget/RemoteViews; +Landroid/widget/RemoteViews;->setRemoteAdapter(ILjava/util/ArrayList;I)V +Landroid/widget/RemoteViewsAdapter;->getRemoteViewsServiceIntent()Landroid/content/Intent; +Landroid/widget/RemoteViewsAdapter;->isDataReady()Z Landroid/widget/RemoteViewsAdapter;->mCache:Landroid/widget/RemoteViewsAdapter$FixedSizeRemoteViewsCache; Landroid/widget/RemoteViewsAdapter;->mWorkerThread:Landroid/os/HandlerThread; +Landroid/widget/RemoteViewsAdapter;->saveRemoteViewsCache()V +Landroid/widget/RemoteViewsAdapter;->setRemoteViewsOnClickHandler(Landroid/widget/RemoteViews$OnClickHandler;)V +Landroid/widget/RemoteViewsAdapter;->setVisibleRangeHint(II)V Landroid/widget/ScrollBarDrawable;->mVerticalThumb:Landroid/graphics/drawable/Drawable; Landroid/widget/ScrollBarDrawable;->setHorizontalThumbDrawable(Landroid/graphics/drawable/Drawable;)V Landroid/widget/ScrollBarDrawable;->setVerticalThumbDrawable(Landroid/graphics/drawable/Drawable;)V +Landroid/widget/Scroller;->DECELERATION_RATE:F +Landroid/widget/Scroller;->INFLEXION:F +Landroid/widget/Scroller;->mDeceleration:F +Landroid/widget/Scroller;->mDuration:I Landroid/widget/Scroller;->mInterpolator:Landroid/view/animation/Interpolator; +Landroid/widget/Scroller;->mPhysicalCoeff:F +Landroid/widget/ScrollView;->canScroll()Z +Landroid/widget/ScrollView;->endDrag()V Landroid/widget/ScrollView;->mChildToScrollTo:Landroid/view/View; Landroid/widget/ScrollView;->mEdgeGlowBottom:Landroid/widget/EdgeEffect; Landroid/widget/ScrollView;->mEdgeGlowTop:Landroid/widget/EdgeEffect; +Landroid/widget/ScrollView;->mFlingStrictSpan:Landroid/os/StrictMode$Span; Landroid/widget/ScrollView;->mIsBeingDragged:Z +Landroid/widget/ScrollView;->mLastMotionY:I +Landroid/widget/ScrollView;->mLastScroll:J Landroid/widget/ScrollView;->mMinimumVelocity:I Landroid/widget/ScrollView;->mOverflingDistance:I Landroid/widget/ScrollView;->mOverscrollDistance:I Landroid/widget/ScrollView;->mScroller:Landroid/widget/OverScroller; +Landroid/widget/ScrollView;->mVelocityTracker:Landroid/view/VelocityTracker; Landroid/widget/SearchView$SearchAutoComplete;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V +Landroid/widget/SearchView;->mClearingFocus:Z Landroid/widget/SearchView;->mCloseButton:Landroid/widget/ImageView; +Landroid/widget/SearchView;->mCollapsedImeOptions:I +Landroid/widget/SearchView;->mExpandedInActionView:Z +Landroid/widget/SearchView;->mIconified:Z +Landroid/widget/SearchView;->mIconifiedByDefault:Z +Landroid/widget/SearchView;->mOnClickListener:Landroid/view/View$OnClickListener; +Landroid/widget/SearchView;->mOnItemClickListener:Landroid/widget/AdapterView$OnItemClickListener; +Landroid/widget/SearchView;->mOnQueryChangeListener:Landroid/widget/SearchView$OnQueryTextListener; Landroid/widget/SearchView;->mSearchButton:Landroid/widget/ImageView; +Landroid/widget/SearchView;->mSearchEditFrame:Landroid/view/View; +Landroid/widget/SearchView;->mSearchHintIcon:Landroid/graphics/drawable/Drawable; Landroid/widget/SearchView;->mSearchPlate:Landroid/view/View; Landroid/widget/SearchView;->mSearchSrcTextView:Landroid/widget/SearchView$SearchAutoComplete; +Landroid/widget/SearchView;->mSubmitArea:Landroid/view/View; +Landroid/widget/SearchView;->mSuggestionsAdapter:Landroid/widget/CursorAdapter; +Landroid/widget/SearchView;->mUserQuery:Ljava/lang/CharSequence; +Landroid/widget/SearchView;->mVoiceButton:Landroid/widget/ImageView; +Landroid/widget/SearchView;->mVoiceButtonEnabled:Z Landroid/widget/SearchView;->onCloseClicked()V Landroid/widget/SearchView;->setQuery(Ljava/lang/CharSequence;)V +Landroid/widget/SearchView;->updateSubmitArea()V +Landroid/widget/SearchView;->updateSubmitButton(Z)V +Landroid/widget/SearchView;->updateViewsVisibility(Z)V +Landroid/widget/SeekBar;->mOnSeekBarChangeListener:Landroid/widget/SeekBar$OnSeekBarChangeListener; +Landroid/widget/SeekBar;->onProgressRefresh(FZI)V +Landroid/widget/SimpleCursorAdapter;->mFrom:[I +Landroid/widget/SimpleCursorAdapter;->mTo:[I Landroid/widget/SlidingDrawer;->mTopOffset:I +Landroid/widget/SlidingDrawer;->mTouchDelta:I +Landroid/widget/SlidingDrawer;->mTracking:Z +Landroid/widget/SlidingDrawer;->mVelocityTracker:Landroid/view/VelocityTracker; +Landroid/widget/SlidingDrawer;->prepareContent()V +Landroid/widget/SlidingDrawer;->prepareTracking(I)V +Landroid/widget/Spinner$DialogPopup;->isShowing()Z +Landroid/widget/Spinner$SpinnerPopup;->isShowing()Z +Landroid/widget/Spinner;->mForwardingListener:Landroid/widget/ForwardingListener; Landroid/widget/Spinner;->mPopup:Landroid/widget/Spinner$SpinnerPopup; +Landroid/widget/Spinner;->setOnItemClickListenerInt(Landroid/widget/AdapterView$OnItemClickListener;)V +Landroid/widget/Switch;->cancelPositionAnimator()V +Landroid/widget/Switch;->mOffLayout:Landroid/text/Layout; +Landroid/widget/Switch;->mOnLayout:Landroid/text/Layout; +Landroid/widget/Switch;->mSwitchHeight:I +Landroid/widget/Switch;->mSwitchMinWidth:I Landroid/widget/Switch;->mThumbDrawable:Landroid/graphics/drawable/Drawable; +Landroid/widget/Switch;->mThumbWidth:I Landroid/widget/Switch;->mTrackDrawable:Landroid/graphics/drawable/Drawable; +Landroid/widget/Switch;->setThumbPosition(F)V Landroid/widget/TabHost$IntentContentStrategy;->getContentView()Landroid/view/View; Landroid/widget/TabHost$IntentContentStrategy;->tabClosed()V Landroid/widget/TabHost$TabSpec;->mContentStrategy:Landroid/widget/TabHost$ContentStrategy; Landroid/widget/TabHost$TabSpec;->mIndicatorStrategy:Landroid/widget/TabHost$IndicatorStrategy; +Landroid/widget/TabHost;->mCurrentTab:I +Landroid/widget/TabHost;->mOnTabChangeListener:Landroid/widget/TabHost$OnTabChangeListener; Landroid/widget/TabHost;->mTabSpecs:Ljava/util/List; Landroid/widget/TabWidget;->mDrawBottomStrips:Z Landroid/widget/TabWidget;->mSelectedTab:I Landroid/widget/TabWidget;->setTabSelectionListener(Landroid/widget/TabWidget$OnTabSelectionChanged;)V +Landroid/widget/TextClock;->getFormat()Ljava/lang/CharSequence; +Landroid/widget/TextClock;->onTimeChanged()V +Landroid/widget/TextView$SavedState;->text:Ljava/lang/CharSequence; Landroid/widget/TextView;->assumeLayout()V +Landroid/widget/TextView;->bringTextIntoView()Z +Landroid/widget/TextView;->checkForRelayout()V +Landroid/widget/TextView;->compressText(F)Z Landroid/widget/TextView;->createEditorIfNeeded()V +Landroid/widget/TextView;->deleteText_internal(II)V +Landroid/widget/TextView;->getHintLayout()Landroid/text/Layout; Landroid/widget/TextView;->getHorizontallyScrolling()Z +Landroid/widget/TextView;->getIterableTextForAccessibility()Ljava/lang/CharSequence; +Landroid/widget/TextView;->getLayoutAlignment()Landroid/text/Layout$Alignment; +Landroid/widget/TextView;->getLineAtCoordinate(F)I +Landroid/widget/TextView;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic; +Landroid/widget/TextView;->getTextForAccessibility()Ljava/lang/CharSequence; +Landroid/widget/TextView;->getTextServicesLocale(Z)Ljava/util/Locale; +Landroid/widget/TextView;->getUpdatedHighlightPath()Landroid/graphics/Path; +Landroid/widget/TextView;->getVerticalOffset(Z)I Landroid/widget/TextView;->isSingleLine()Z +Landroid/widget/TextView;->isTextEditable()Z Landroid/widget/TextView;->LINES:I +Landroid/widget/TextView;->makeNewLayout(IILandroid/text/BoringLayout$Metrics;Landroid/text/BoringLayout$Metrics;IZ)V +Landroid/widget/TextView;->mAllowTransformationLengthChange:Z +Landroid/widget/TextView;->mBoring:Landroid/text/BoringLayout$Metrics; +Landroid/widget/TextView;->mBufferType:Landroid/widget/TextView$BufferType; +Landroid/widget/TextView;->mChangeWatcher:Landroid/widget/TextView$ChangeWatcher; +Landroid/widget/TextView;->mCharWrapper:Landroid/widget/TextView$CharWrapper; Landroid/widget/TextView;->mCursorDrawableRes:I Landroid/widget/TextView;->mCurTextColor:I +Landroid/widget/TextView;->mDesiredHeightAtMeasure:I +Landroid/widget/TextView;->mDrawables:Landroid/widget/TextView$Drawables; +Landroid/widget/TextView;->mEditableFactory:Landroid/text/Editable$Factory; Landroid/widget/TextView;->mEditor:Landroid/widget/Editor; +Landroid/widget/TextView;->mGravity:I +Landroid/widget/TextView;->mHighlightColor:I +Landroid/widget/TextView;->mHighlightPaint:Landroid/graphics/Paint; +Landroid/widget/TextView;->mHighlightPathBogus:Z +Landroid/widget/TextView;->mHintBoring:Landroid/text/BoringLayout$Metrics; +Landroid/widget/TextView;->mHintLayout:Landroid/text/Layout; +Landroid/widget/TextView;->mHorizontallyScrolling:Z +Landroid/widget/TextView;->mIncludePad:Z +Landroid/widget/TextView;->mLayout:Landroid/text/Layout; Landroid/widget/TextView;->mListeners:Ljava/util/ArrayList; Landroid/widget/TextView;->mMarquee:Landroid/widget/TextView$Marquee; +Landroid/widget/TextView;->mMarqueeFadeMode:I Landroid/widget/TextView;->mMaximum:I Landroid/widget/TextView;->mMaxMode:I +Landroid/widget/TextView;->mMaxWidth:I +Landroid/widget/TextView;->mMaxWidthMode:I +Landroid/widget/TextView;->mMinimum:I +Landroid/widget/TextView;->mMinWidth:I +Landroid/widget/TextView;->mMinWidthMode:I +Landroid/widget/TextView;->mOldMaximum:I +Landroid/widget/TextView;->mOldMaxMode:I +Landroid/widget/TextView;->mRestartMarquee:Z +Landroid/widget/TextView;->mSavedHintLayout:Landroid/text/BoringLayout; +Landroid/widget/TextView;->mSavedLayout:Landroid/text/BoringLayout; +Landroid/widget/TextView;->mSavedMarqueeModeLayout:Landroid/text/Layout; +Landroid/widget/TextView;->mShadowDx:F +Landroid/widget/TextView;->mShadowDy:F Landroid/widget/TextView;->mShadowRadius:F Landroid/widget/TextView;->mSingleLine:Z +Landroid/widget/TextView;->mSpacingAdd:F +Landroid/widget/TextView;->mSpacingMult:F +Landroid/widget/TextView;->mSpannableFactory:Landroid/text/Spannable$Factory; Landroid/widget/TextView;->mText:Ljava/lang/CharSequence; +Landroid/widget/TextView;->mTextDir:Landroid/text/TextDirectionHeuristic; Landroid/widget/TextView;->mTextPaint:Landroid/text/TextPaint; Landroid/widget/TextView;->mTextSelectHandleLeftRes:I +Landroid/widget/TextView;->mTextSelectHandleRes:I +Landroid/widget/TextView;->mTextSelectHandleRightRes:I +Landroid/widget/TextView;->mTransformed:Ljava/lang/CharSequence; +Landroid/widget/TextView;->mUserSetTextScaleX:Z +Landroid/widget/TextView;->nullLayouts()V +Landroid/widget/TextView;->setInputType(IZ)V Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V +Landroid/widget/TextView;->startMarquee()V +Landroid/widget/TextView;->stopTextActionMode()V +Landroid/widget/TextView;->viewportToContentVerticalOffset()I +Landroid/widget/TimePicker;->mDelegate:Landroid/widget/TimePicker$TimePickerDelegate; +Landroid/widget/Toast$TN;->handleHide()V +Landroid/widget/Toast$TN;->mGravity:I Landroid/widget/Toast$TN;->mNextView:Landroid/view/View; Landroid/widget/Toast$TN;->mParams:Landroid/view/WindowManager$LayoutParams; Landroid/widget/Toast$TN;->mView:Landroid/view/View; +Landroid/widget/Toast$TN;->mY:I +Landroid/widget/Toast$TN;->show(Landroid/os/IBinder;)V Landroid/widget/Toast;->getService()Landroid/app/INotificationManager; Landroid/widget/Toast;->getWindowParams()Landroid/view/WindowManager$LayoutParams; Landroid/widget/Toast;->mDuration:I Landroid/widget/Toast;->mTN:Landroid/widget/Toast$TN; Landroid/widget/Toast;->sService:Landroid/app/INotificationManager; +Landroid/widget/Toolbar;->mNavButtonView:Landroid/widget/ImageButton; +Landroid/widget/Toolbar;->mTitleMarginBottom:I +Landroid/widget/Toolbar;->mTitleMarginEnd:I +Landroid/widget/Toolbar;->mTitleMarginStart:I +Landroid/widget/Toolbar;->mTitleMarginTop:I +Landroid/widget/Toolbar;->mTitleTextView:Landroid/widget/TextView; Landroid/widget/VideoView2$OnViewTypeChangedListener;->onViewTypeChanged(Landroid/view/View;I)V Landroid/widget/VideoView2;->getMediaController()Landroid/media/session/MediaController; Landroid/widget/VideoView2;->setOnViewTypeChangedListener(Landroid/widget/VideoView2$OnViewTypeChangedListener;)V Landroid/widget/VideoView2;->setVideoPath(Ljava/lang/String;)V Landroid/widget/VideoView;->mCurrentBufferPercentage:I +Landroid/widget/VideoView;->mCurrentState:I +Landroid/widget/VideoView;->mErrorListener:Landroid/media/MediaPlayer$OnErrorListener; +Landroid/widget/VideoView;->mHeaders:Ljava/util/Map; Landroid/widget/VideoView;->mMediaController:Landroid/widget/MediaController; +Landroid/widget/VideoView;->mMediaPlayer:Landroid/media/MediaPlayer; +Landroid/widget/VideoView;->mPreparedListener:Landroid/media/MediaPlayer$OnPreparedListener; Landroid/widget/VideoView;->mSHCallback:Landroid/view/SurfaceHolder$Callback; +Landroid/widget/VideoView;->mSurfaceHolder:Landroid/view/SurfaceHolder; +Landroid/widget/VideoView;->mTargetState:I Landroid/widget/VideoView;->mUri:Landroid/net/Uri; Landroid/widget/VideoView;->mVideoHeight:I Landroid/widget/VideoView;->mVideoWidth:I +Landroid/widget/VideoView;->release(Z)V +Landroid/widget/VideoView;->STATE_IDLE:I Landroid/widget/ViewAnimator;->mFirstTime:Z Landroid/widget/ViewAnimator;->mWhichChild:I +Landroid/widget/ViewAnimator;->showOnly(IZ)V +Landroid/widget/ViewFlipper;->mUserPresent:Z +Landroid/widget/ViewFlipper;->updateRunning(Z)V +Landroid/widget/ZoomControls;->mZoomIn:Landroid/widget/ZoomButton; +Landroid/widget/ZoomControls;->mZoomOut:Landroid/widget/ZoomButton; +Lcom/android/ims/ImsConfigListener$Stub;-><init>()V +Lcom/android/ims/internal/IImsCallSession$Stub;-><init>()V +Lcom/android/ims/internal/IImsCallSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsCallSession; +Lcom/android/ims/internal/IImsConfig$Stub;-><init>()V +Lcom/android/ims/internal/IImsEcbm$Stub;-><init>()V +Lcom/android/ims/internal/IImsRegistrationListener;->registrationConnected()V +Lcom/android/ims/internal/IImsService$Stub;-><init>()V +Lcom/android/ims/internal/IImsService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsService; +Lcom/android/ims/internal/IImsUt$Stub;-><init>()V +Lcom/android/ims/internal/IImsVideoCallCallback;->changeCallDataUsage(J)V +Lcom/android/ims/internal/IImsVideoCallCallback;->changeCameraCapabilities(Landroid/telecom/VideoProfile$CameraCapabilities;)V +Lcom/android/ims/internal/IImsVideoCallCallback;->changePeerDimensions(II)V +Lcom/android/ims/internal/IImsVideoCallCallback;->changeVideoQuality(I)V +Lcom/android/ims/internal/IImsVideoCallCallback;->handleCallSessionEvent(I)V +Lcom/android/ims/internal/IImsVideoCallCallback;->receiveSessionModifyRequest(Landroid/telecom/VideoProfile;)V +Lcom/android/ims/internal/IImsVideoCallCallback;->receiveSessionModifyResponse(ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V +Lcom/android/ims/internal/IImsVideoCallProvider$Stub;-><init>()V +Lcom/android/ims/internal/IImsVideoCallProvider;->setCallback(Lcom/android/ims/internal/IImsVideoCallCallback;)V Lcom/android/ims/internal/uce/common/CapInfo;-><init>()V Lcom/android/ims/internal/uce/common/CapInfo;->setCapTimestamp(J)V Lcom/android/ims/internal/uce/common/CapInfo;->setCdViaPresenceSupported(Z)V @@ -3318,22 +6954,119 @@ Lcom/android/ims/internal/uce/presence/PresTupleInfo;->setContactUri(Ljava/lang/ Lcom/android/ims/internal/uce/presence/PresTupleInfo;->setFeatureTag(Ljava/lang/String;)V Lcom/android/ims/internal/uce/presence/PresTupleInfo;->setTimestamp(Ljava/lang/String;)V Lcom/android/ims/internal/uce/uceservice/IUceListener$Stub;-><init>()V +Lcom/android/internal/app/AlertController$AlertParams;-><init>(Landroid/content/Context;)V +Lcom/android/internal/app/AlertController$AlertParams;->apply(Lcom/android/internal/app/AlertController;)V +Lcom/android/internal/app/AlertController$AlertParams;->mAdapter:Landroid/widget/ListAdapter; +Lcom/android/internal/app/AlertController$AlertParams;->mCancelable:Z +Lcom/android/internal/app/AlertController$AlertParams;->mCheckedItem:I +Lcom/android/internal/app/AlertController$AlertParams;->mCheckedItems:[Z +Lcom/android/internal/app/AlertController$AlertParams;->mContext:Landroid/content/Context; +Lcom/android/internal/app/AlertController$AlertParams;->mCursor:Landroid/database/Cursor; +Lcom/android/internal/app/AlertController$AlertParams;->mCustomTitleView:Landroid/view/View; +Lcom/android/internal/app/AlertController$AlertParams;->mIcon:Landroid/graphics/drawable/Drawable; +Lcom/android/internal/app/AlertController$AlertParams;->mInflater:Landroid/view/LayoutInflater; +Lcom/android/internal/app/AlertController$AlertParams;->mIsCheckedColumn:Ljava/lang/String; +Lcom/android/internal/app/AlertController$AlertParams;->mIsMultiChoice:Z +Lcom/android/internal/app/AlertController$AlertParams;->mIsSingleChoice:Z +Lcom/android/internal/app/AlertController$AlertParams;->mItems:[Ljava/lang/CharSequence; +Lcom/android/internal/app/AlertController$AlertParams;->mLabelColumn:Ljava/lang/String; +Lcom/android/internal/app/AlertController$AlertParams;->mNeutralButtonListener:Landroid/content/DialogInterface$OnClickListener; +Lcom/android/internal/app/AlertController$AlertParams;->mNeutralButtonText:Ljava/lang/CharSequence; +Lcom/android/internal/app/AlertController$AlertParams;->mOnCancelListener:Landroid/content/DialogInterface$OnCancelListener; +Lcom/android/internal/app/AlertController$AlertParams;->mOnCheckboxClickListener:Landroid/content/DialogInterface$OnMultiChoiceClickListener; +Lcom/android/internal/app/AlertController$AlertParams;->mOnClickListener:Landroid/content/DialogInterface$OnClickListener; +Lcom/android/internal/app/AlertController$AlertParams;->mOnDismissListener:Landroid/content/DialogInterface$OnDismissListener; +Lcom/android/internal/app/AlertController$AlertParams;->mOnItemSelectedListener:Landroid/widget/AdapterView$OnItemSelectedListener; +Lcom/android/internal/app/AlertController$AlertParams;->mOnKeyListener:Landroid/content/DialogInterface$OnKeyListener; +Lcom/android/internal/app/AlertController$RecycleListView;-><init>(Landroid/content/Context;)V Lcom/android/internal/app/AlertController$RecycleListView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V +Lcom/android/internal/app/AlertController;-><init>(Landroid/content/Context;Landroid/content/DialogInterface;Landroid/view/Window;)V +Lcom/android/internal/app/AlertController;->getListView()Landroid/widget/ListView; +Lcom/android/internal/app/AlertController;->installContent()V Lcom/android/internal/app/AlertController;->mCustomTitleView:Landroid/view/View; Lcom/android/internal/app/AlertController;->mForceInverseBackground:Z Lcom/android/internal/app/AlertController;->mTitle:Ljava/lang/CharSequence; Lcom/android/internal/app/AlertController;->mView:Landroid/view/View; +Lcom/android/internal/app/AlertController;->onKeyDown(ILandroid/view/KeyEvent;)Z +Lcom/android/internal/app/AlertController;->onKeyUp(ILandroid/view/KeyEvent;)Z +Lcom/android/internal/app/AlertController;->setButton(ILjava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;Landroid/os/Message;)V +Lcom/android/internal/app/AlertController;->setCustomTitle(Landroid/view/View;)V +Lcom/android/internal/app/AlertController;->setIcon(I)V +Lcom/android/internal/app/AlertController;->setIcon(Landroid/graphics/drawable/Drawable;)V +Lcom/android/internal/app/AlertController;->setMessage(Ljava/lang/CharSequence;)V +Lcom/android/internal/app/AlertController;->setTitle(Ljava/lang/CharSequence;)V +Lcom/android/internal/app/AlertController;->setView(Landroid/view/View;)V Lcom/android/internal/app/IAppOpsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Lcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperation(IILjava/lang/String;)I Lcom/android/internal/app/IAppOpsService$Stub$Proxy;->setMode(IILjava/lang/String;I)V Lcom/android/internal/app/IAppOpsService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IAppOpsService; +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_checkAudioOperation:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_checkOperation:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_checkPackage:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_finishOperation:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_getOpsForPackage:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_getPackagesForOps:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_noteOperation:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_noteProxyOperation:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_removeUser:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_resetAllModes:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_setAudioRestriction:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_setMode:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_setUidMode:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_setUserRestriction:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_setUserRestrictions:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_startOperation:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_startWatchingMode:I +Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_stopWatchingMode:I +Lcom/android/internal/app/IAppOpsService;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List; +Lcom/android/internal/app/IAppOpsService;->getPackagesForOps([I)Ljava/util/List; +Lcom/android/internal/app/IAppOpsService;->resetAllModes(ILjava/lang/String;)V +Lcom/android/internal/app/IAppOpsService;->setMode(IILjava/lang/String;I)V Lcom/android/internal/app/IBatteryStats$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Lcom/android/internal/app/IBatteryStats$Stub;-><init>()V Lcom/android/internal/app/IBatteryStats$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IBatteryStats; +Lcom/android/internal/app/IBatteryStats;->computeChargeTimeRemaining()J +Lcom/android/internal/app/IBatteryStats;->getAwakeTimeBattery()J Lcom/android/internal/app/IBatteryStats;->getStatistics()[B +Lcom/android/internal/app/IBatteryStats;->isCharging()Z +Lcom/android/internal/app/IBatteryStats;->noteFullWifiLockAcquired(I)V +Lcom/android/internal/app/IBatteryStats;->noteFullWifiLockReleased(I)V +Lcom/android/internal/app/IBatteryStats;->notePhoneDataConnectionState(IZ)V +Lcom/android/internal/app/IBatteryStats;->notePhoneOff()V +Lcom/android/internal/app/IBatteryStats;->notePhoneOn()V +Lcom/android/internal/app/IBatteryStats;->notePhoneSignalStrength(Landroid/telephony/SignalStrength;)V +Lcom/android/internal/app/IBatteryStats;->notePhoneState(I)V +Lcom/android/internal/app/IBatteryStats;->noteScreenBrightness(I)V +Lcom/android/internal/app/IBatteryStats;->noteStartSensor(II)V +Lcom/android/internal/app/IBatteryStats;->noteStopSensor(II)V +Lcom/android/internal/app/IBatteryStats;->noteUserActivity(II)V +Lcom/android/internal/app/IBatteryStats;->noteWifiMulticastDisabled(I)V +Lcom/android/internal/app/IBatteryStats;->noteWifiMulticastEnabled(I)V +Lcom/android/internal/app/IMediaContainerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IMediaContainerService; Lcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->showSessionFromSession(Landroid/os/IBinder;Landroid/os/Bundle;I)Z Lcom/android/internal/app/IVoiceInteractionManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractionManagerService; Lcom/android/internal/app/IVoiceInteractionManagerService;->getKeyphraseSoundModel(ILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel; +Lcom/android/internal/appwidget/IAppWidgetHost;->providerChanged(ILandroid/appwidget/AppWidgetProviderInfo;)V +Lcom/android/internal/appwidget/IAppWidgetHost;->updateAppWidget(ILandroid/widget/RemoteViews;)V +Lcom/android/internal/appwidget/IAppWidgetService$Stub;-><init>()V Lcom/android/internal/appwidget/IAppWidgetService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/appwidget/IAppWidgetService; +Lcom/android/internal/appwidget/IAppWidgetService$Stub;->TRANSACTION_bindAppWidgetId:I +Lcom/android/internal/appwidget/IAppWidgetService;->bindAppWidgetId(Ljava/lang/String;IILandroid/content/ComponentName;Landroid/os/Bundle;)Z +Lcom/android/internal/appwidget/IAppWidgetService;->bindRemoteViewsService(Ljava/lang/String;ILandroid/content/Intent;Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/IServiceConnection;I)Z +Lcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetIds(Landroid/content/ComponentName;)[I +Lcom/android/internal/backup/IBackupTransport$Stub;-><init>()V +Lcom/android/internal/backup/IBackupTransport$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/backup/IBackupTransport; +Lcom/android/internal/backup/IBackupTransport;->clearBackupData(Landroid/content/pm/PackageInfo;)I +Lcom/android/internal/backup/IBackupTransport;->finishBackup()I +Lcom/android/internal/backup/IBackupTransport;->finishRestore()V +Lcom/android/internal/backup/IBackupTransport;->getRestoreData(Landroid/os/ParcelFileDescriptor;)I +Lcom/android/internal/backup/IBackupTransport;->initializeDevice()I +Lcom/android/internal/backup/IBackupTransport;->requestBackupTime()J +Lcom/android/internal/backup/IBackupTransport;->startRestore(J[Landroid/content/pm/PackageInfo;)I +Lcom/android/internal/backup/IBackupTransport;->transportDirName()Ljava/lang/String; +Lcom/android/internal/content/PackageMonitor;->isPackageDisappearing(Ljava/lang/String;)I +Lcom/android/internal/content/PackageMonitor;->isPackageModified(Ljava/lang/String;)Z +Lcom/android/internal/content/PackageMonitor;->onPackageChanged(Ljava/lang/String;I[Ljava/lang/String;)Z Lcom/android/internal/content/PackageMonitor;->onPackageRemoved(Ljava/lang/String;I)V Lcom/android/internal/content/PackageMonitor;->register(Landroid/content/Context;Landroid/os/Looper;Z)V Lcom/android/internal/content/ReferrerIntent;-><init>(Landroid/content/Intent;Ljava/lang/String;)V @@ -3341,29 +7074,82 @@ Lcom/android/internal/content/ReferrerIntent;->mReferrer:Ljava/lang/String; Lcom/android/internal/location/ILocationProvider$Stub;-><init>()V Lcom/android/internal/logging/MetricsLogger;-><init>()V Lcom/android/internal/logging/MetricsLogger;->write(Landroid/metrics/LogMaker;)V +Lcom/android/internal/net/LegacyVpnInfo;-><init>()V +Lcom/android/internal/net/LegacyVpnInfo;->CREATOR:Landroid/os/Parcelable$Creator; +Lcom/android/internal/net/LegacyVpnInfo;->key:Ljava/lang/String; +Lcom/android/internal/net/LegacyVpnInfo;->state:I +Lcom/android/internal/net/VpnConfig;-><init>()V +Lcom/android/internal/net/VpnProfile;-><init>(Landroid/os/Parcel;)V +Lcom/android/internal/net/VpnProfile;->decode(Ljava/lang/String;[B)Lcom/android/internal/net/VpnProfile; +Lcom/android/internal/net/VpnProfile;->key:Ljava/lang/String; +Lcom/android/internal/net/VpnProfile;->name:Ljava/lang/String; +Lcom/android/internal/net/VpnProfile;->saveLogin:Z +Lcom/android/internal/net/VpnProfile;->server:Ljava/lang/String; +Lcom/android/internal/net/VpnProfile;->type:I +Lcom/android/internal/net/VpnProfile;->username:Ljava/lang/String; +Lcom/android/internal/os/AtomicFile;-><init>(Ljava/io/File;)V +Lcom/android/internal/os/AtomicFile;->failWrite(Ljava/io/FileOutputStream;)V +Lcom/android/internal/os/AtomicFile;->finishWrite(Ljava/io/FileOutputStream;)V +Lcom/android/internal/os/AtomicFile;->getBaseFile()Ljava/io/File; +Lcom/android/internal/os/AtomicFile;->openAppend()Ljava/io/FileOutputStream; +Lcom/android/internal/os/AtomicFile;->openRead()Ljava/io/FileInputStream; +Lcom/android/internal/os/AtomicFile;->readFully()[B +Lcom/android/internal/os/AtomicFile;->startWrite()Ljava/io/FileOutputStream; +Lcom/android/internal/os/AtomicFile;->truncate()V +Lcom/android/internal/os/BatterySipper$DrainType;->APP:Lcom/android/internal/os/BatterySipper$DrainType; +Lcom/android/internal/os/BatterySipper$DrainType;->values()[Lcom/android/internal/os/BatterySipper$DrainType; Lcom/android/internal/os/BatterySipper;-><init>(Lcom/android/internal/os/BatterySipper$DrainType;Landroid/os/BatteryStats$Uid;D)V Lcom/android/internal/os/BatterySipper;->add(Lcom/android/internal/os/BatterySipper;)V +Lcom/android/internal/os/BatterySipper;->cpuFgTimeMs:J +Lcom/android/internal/os/BatterySipper;->cpuPowerMah:D +Lcom/android/internal/os/BatterySipper;->cpuTimeMs:J Lcom/android/internal/os/BatterySipper;->drainType:Lcom/android/internal/os/BatterySipper$DrainType; +Lcom/android/internal/os/BatterySipper;->getPackages()[Ljava/lang/String; Lcom/android/internal/os/BatterySipper;->getUid()I +Lcom/android/internal/os/BatterySipper;->gpsTimeMs:J Lcom/android/internal/os/BatterySipper;->mPackages:[Ljava/lang/String; Lcom/android/internal/os/BatterySipper;->packageWithHighestDrain:Ljava/lang/String; Lcom/android/internal/os/BatterySipper;->totalPowerMah:D Lcom/android/internal/os/BatterySipper;->uidObj:Landroid/os/BatteryStats$Uid; +Lcom/android/internal/os/BatterySipper;->usageTimeMs:J +Lcom/android/internal/os/BatterySipper;->userId:I +Lcom/android/internal/os/BatterySipper;->wakeLockTimeMs:J +Lcom/android/internal/os/BatterySipper;->wifiRunningTimeMs:J +Lcom/android/internal/os/BatteryStatsHelper;-><init>(Landroid/content/Context;)V +Lcom/android/internal/os/BatteryStatsHelper;-><init>(Landroid/content/Context;Z)V Lcom/android/internal/os/BatteryStatsHelper;-><init>(Landroid/content/Context;ZZ)V +Lcom/android/internal/os/BatteryStatsHelper;->clearStats()V +Lcom/android/internal/os/BatteryStatsHelper;->create(Landroid/os/Bundle;)V +Lcom/android/internal/os/BatteryStatsHelper;->getBatteryBroadcast()Landroid/content/Intent; Lcom/android/internal/os/BatteryStatsHelper;->getMaxPower()D Lcom/android/internal/os/BatteryStatsHelper;->getStats()Landroid/os/BatteryStats; Lcom/android/internal/os/BatteryStatsHelper;->getTotalPower()D +Lcom/android/internal/os/BatteryStatsHelper;->getUsageList()Ljava/util/List; Lcom/android/internal/os/BatteryStatsHelper;->load()V Lcom/android/internal/os/BatteryStatsHelper;->mBatteryInfo:Lcom/android/internal/app/IBatteryStats; Lcom/android/internal/os/BatteryStatsHelper;->mPowerProfile:Lcom/android/internal/os/PowerProfile; Lcom/android/internal/os/BatteryStatsHelper;->mUsageList:Ljava/util/List; Lcom/android/internal/os/BatteryStatsHelper;->refreshStats(II)V +Lcom/android/internal/os/BatteryStatsHelper;->refreshStats(ILandroid/util/SparseArray;)V +Lcom/android/internal/os/BatteryStatsHelper;->refreshStats(ILjava/util/List;)V +Lcom/android/internal/os/BatteryStatsHelper;->storeState()V +Lcom/android/internal/os/BatteryStatsImpl$Counter;->mCount:Ljava/util/concurrent/atomic/AtomicInteger; +Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->detach()V Lcom/android/internal/os/BatteryStatsImpl$Timer;->getCountLocked(I)I Lcom/android/internal/os/BatteryStatsImpl$Timer;->getTotalTimeLocked(JI)J +Lcom/android/internal/os/BatteryStatsImpl$Timer;->writeTimerToParcel(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$Timer;J)V +Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->getBatteryStats()Lcom/android/internal/os/BatteryStatsImpl; +Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->startLaunchedLocked()V +Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->startRunningLocked()V +Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->stopLaunchedLocked()V +Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->stopRunningLocked()V +Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->addCpuTimeLocked(II)V +Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->addForegroundTimeLocked(J)V Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getForegroundTime(I)J Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getStarts(I)I Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getSystemTime(I)J Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getUserTime(I)J +Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->incStartsLocked()V Lcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->getHandle()I Lcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->getSensorTime()Lcom/android/internal/os/BatteryStatsImpl$Timer; Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;->getWakeTime(I)Lcom/android/internal/os/BatteryStatsImpl$Timer; @@ -3373,38 +7159,119 @@ Lcom/android/internal/os/BatteryStatsImpl$Uid;->getUid()I Lcom/android/internal/os/BatteryStatsImpl$Uid;->getWakelockStats()Landroid/util/ArrayMap; Lcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiRunningTime(JI)J Lcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanTime(JI)J +Lcom/android/internal/os/BatteryStatsImpl;-><init>(Landroid/os/Parcel;)V +Lcom/android/internal/os/BatteryStatsImpl;->commitPendingDataToDisk()V Lcom/android/internal/os/BatteryStatsImpl;->computeBatteryRealtime(JI)J +Lcom/android/internal/os/BatteryStatsImpl;->computeBatteryTimeRemaining(J)J Lcom/android/internal/os/BatteryStatsImpl;->computeBatteryUptime(JI)J Lcom/android/internal/os/BatteryStatsImpl;->CREATOR:Landroid/os/Parcelable$Creator; +Lcom/android/internal/os/BatteryStatsImpl;->getAwakeTimeBattery()J +Lcom/android/internal/os/BatteryStatsImpl;->getAwakeTimePlugged()J Lcom/android/internal/os/BatteryStatsImpl;->getBatteryRealtime(J)J Lcom/android/internal/os/BatteryStatsImpl;->getDischargeAmount(I)I +Lcom/android/internal/os/BatteryStatsImpl;->getDischargeAmountScreenOff()I +Lcom/android/internal/os/BatteryStatsImpl;->getDischargeAmountScreenOn()I Lcom/android/internal/os/BatteryStatsImpl;->getGlobalWifiRunningTime(JI)J +Lcom/android/internal/os/BatteryStatsImpl;->getKernelWakelockStats()Ljava/util/Map; +Lcom/android/internal/os/BatteryStatsImpl;->getNextHistoryLocked(Landroid/os/BatteryStats$HistoryItem;)Z +Lcom/android/internal/os/BatteryStatsImpl;->getPackageStatsLocked(ILjava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg; +Lcom/android/internal/os/BatteryStatsImpl;->getPhoneDataConnectionCount(II)I +Lcom/android/internal/os/BatteryStatsImpl;->getPhoneDataConnectionTime(IJI)J +Lcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalStrengthCount(II)I +Lcom/android/internal/os/BatteryStatsImpl;->getProcessStatsLocked(ILjava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc; Lcom/android/internal/os/BatteryStatsImpl;->getScreenOnTime(JI)J +Lcom/android/internal/os/BatteryStatsImpl;->getServiceStatsLocked(ILjava/lang/String;Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv; Lcom/android/internal/os/BatteryStatsImpl;->getUidStats()Landroid/util/SparseArray; Lcom/android/internal/os/BatteryStatsImpl;->getUidStatsLocked(I)Lcom/android/internal/os/BatteryStatsImpl$Uid; +Lcom/android/internal/os/BatteryStatsImpl;->isOnBattery()Z +Lcom/android/internal/os/BatteryStatsImpl;->mFullTimers:Ljava/util/ArrayList; +Lcom/android/internal/os/BatteryStatsImpl;->mPartialTimers:Ljava/util/ArrayList; +Lcom/android/internal/os/BatteryStatsImpl;->mWindowTimers:Ljava/util/ArrayList; +Lcom/android/internal/os/BatteryStatsImpl;->noteAudioOffLocked(I)V +Lcom/android/internal/os/BatteryStatsImpl;->noteAudioOnLocked(I)V +Lcom/android/internal/os/BatteryStatsImpl;->noteFullWifiLockAcquiredLocked(I)V +Lcom/android/internal/os/BatteryStatsImpl;->noteFullWifiLockReleasedLocked(I)V +Lcom/android/internal/os/BatteryStatsImpl;->notePhoneDataConnectionStateLocked(IZ)V +Lcom/android/internal/os/BatteryStatsImpl;->notePhoneOffLocked()V +Lcom/android/internal/os/BatteryStatsImpl;->notePhoneOnLocked()V +Lcom/android/internal/os/BatteryStatsImpl;->notePhoneSignalStrengthLocked(Landroid/telephony/SignalStrength;)V +Lcom/android/internal/os/BatteryStatsImpl;->noteScreenBrightnessLocked(I)V +Lcom/android/internal/os/BatteryStatsImpl;->noteUserActivityLocked(II)V +Lcom/android/internal/os/BatteryStatsImpl;->noteVideoOffLocked(I)V +Lcom/android/internal/os/BatteryStatsImpl;->noteVideoOnLocked(I)V +Lcom/android/internal/os/BatteryStatsImpl;->noteWifiMulticastDisabledLocked(I)V +Lcom/android/internal/os/BatteryStatsImpl;->noteWifiMulticastEnabledLocked(I)V +Lcom/android/internal/os/BatteryStatsImpl;->readLocked()V +Lcom/android/internal/os/BatteryStatsImpl;->removeUidStatsLocked(I)V +Lcom/android/internal/os/BatteryStatsImpl;->startIteratingHistoryLocked()Z Lcom/android/internal/os/FuseAppLoop;->onCommand(IJJJI[B)V Lcom/android/internal/os/FuseAppLoop;->onOpen(JJ)[B +Lcom/android/internal/os/HandlerCaller;->obtainMessage(I)Landroid/os/Message; +Lcom/android/internal/os/HandlerCaller;->obtainMessageIO(IILjava/lang/Object;)Landroid/os/Message; +Lcom/android/internal/os/HandlerCaller;->obtainMessageIOO(IILjava/lang/Object;Ljava/lang/Object;)Landroid/os/Message; +Lcom/android/internal/os/HandlerCaller;->obtainMessageO(ILjava/lang/Object;)Landroid/os/Message; +Lcom/android/internal/os/HandlerCaller;->obtainMessageOO(ILjava/lang/Object;Ljava/lang/Object;)Landroid/os/Message; +Lcom/android/internal/os/HandlerCaller;->obtainMessageOOO(ILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message; +Lcom/android/internal/os/HandlerCaller;->sendMessage(Landroid/os/Message;)V Lcom/android/internal/os/IDropBoxManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IDropBoxManagerService; +Lcom/android/internal/os/IDropBoxManagerService;->getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry; Lcom/android/internal/os/PowerProfile;-><init>(Landroid/content/Context;)V Lcom/android/internal/os/PowerProfile;->getAveragePower(Ljava/lang/String;)D Lcom/android/internal/os/PowerProfile;->getAveragePower(Ljava/lang/String;I)D Lcom/android/internal/os/PowerProfile;->getBatteryCapacity()D +Lcom/android/internal/os/PowerProfile;->getNumCpuClusters()I +Lcom/android/internal/os/PowerProfile;->getNumSpeedStepsInCpuCluster(I)I +Lcom/android/internal/os/PowerProfile;->POWER_BLUETOOTH_AT_CMD:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_BLUETOOTH_ON:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_CPU_ACTIVE:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_CPU_IDLE:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_GPS_ON:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_RADIO_ACTIVE:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_RADIO_ON:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_RADIO_SCANNING:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_SCREEN_FULL:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_SCREEN_ON:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_WIFI_ACTIVE:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_WIFI_ON:Ljava/lang/String; +Lcom/android/internal/os/PowerProfile;->POWER_WIFI_SCAN:Ljava/lang/String; Lcom/android/internal/os/SomeArgs;->arg1:Ljava/lang/Object; +Lcom/android/internal/os/SomeArgs;->argi2:I +Lcom/android/internal/os/SomeArgs;->argi3:I +Lcom/android/internal/policy/IKeyguardService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardService; +Lcom/android/internal/policy/IKeyguardService;->doKeyguardTimeout(Landroid/os/Bundle;)V +Lcom/android/internal/policy/IKeyguardService;->setKeyguardEnabled(Z)V +Lcom/android/internal/policy/IKeyguardStateCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardStateCallback; +Lcom/android/internal/R$anim;->fade_in:I Lcom/android/internal/R$array;->config_mobile_hotspot_provision_app:I +Lcom/android/internal/R$array;->config_sms_enabled_locking_shift_tables:I +Lcom/android/internal/R$array;->config_sms_enabled_single_shift_tables:I +Lcom/android/internal/R$array;->config_tether_bluetooth_regexs:I +Lcom/android/internal/R$array;->config_tether_upstream_types:I +Lcom/android/internal/R$array;->config_tether_usb_regexs:I Lcom/android/internal/R$array;->config_tether_wifi_regexs:I Lcom/android/internal/R$array;->maps_starting_lat_lng:I Lcom/android/internal/R$array;->maps_starting_zoom:I Lcom/android/internal/R$attr;->actionBarStyle:I +Lcom/android/internal/R$attr;->buttonStyle:I +Lcom/android/internal/R$attr;->description:I +Lcom/android/internal/R$attr;->editTextStyle:I Lcom/android/internal/R$attr;->mapViewStyle:I +Lcom/android/internal/R$attr;->popupWindowStyle:I +Lcom/android/internal/R$attr;->state_above_anchor:I Lcom/android/internal/R$attr;->state_focused:I Lcom/android/internal/R$attr;->state_pressed:I Lcom/android/internal/R$attr;->state_selected:I Lcom/android/internal/R$attr;->switchStyle:I +Lcom/android/internal/R$attr;->text:I +Lcom/android/internal/R$attr;->title:I +Lcom/android/internal/R$attr;->webViewStyle:I Lcom/android/internal/R$bool;->config_mms_content_disposition_support:I Lcom/android/internal/R$bool;->config_showNavigationBar:I Lcom/android/internal/R$dimen;-><init>()V +Lcom/android/internal/R$dimen;->item_touch_helper_max_drag_scroll_per_frame:I Lcom/android/internal/R$dimen;->navigation_bar_height:I Lcom/android/internal/R$dimen;->navigation_bar_height_landscape:I +Lcom/android/internal/R$dimen;->navigation_bar_width:I Lcom/android/internal/R$dimen;->status_bar_height:I Lcom/android/internal/R$dimen;->toast_y_offset:I Lcom/android/internal/R$drawable;->btn_check_off:I @@ -3416,30 +7283,120 @@ Lcom/android/internal/R$drawable;->loading_tile_android:I Lcom/android/internal/R$drawable;->maps_google_logo:I Lcom/android/internal/R$drawable;->no_tile_256:I Lcom/android/internal/R$drawable;->reticle:I +Lcom/android/internal/R$drawable;->stat_sys_download:I +Lcom/android/internal/R$id;->account_name:I +Lcom/android/internal/R$id;->account_type:I +Lcom/android/internal/R$id;->alertTitle:I +Lcom/android/internal/R$id;->allow_button:I Lcom/android/internal/R$id;->amPm:I +Lcom/android/internal/R$id;->authtoken_type:I +Lcom/android/internal/R$id;->background:I +Lcom/android/internal/R$id;->back_button:I +Lcom/android/internal/R$id;->body:I +Lcom/android/internal/R$id;->buttonPanel:I +Lcom/android/internal/R$id;->camera:I +Lcom/android/internal/R$id;->cancel:I +Lcom/android/internal/R$id;->clip_children_set_tag:I +Lcom/android/internal/R$id;->clip_children_tag:I +Lcom/android/internal/R$id;->clip_to_padding_tag:I +Lcom/android/internal/R$id;->closeButton:I +Lcom/android/internal/R$id;->content:I +Lcom/android/internal/R$id;->contentPanel:I +Lcom/android/internal/R$id;->custom:I +Lcom/android/internal/R$id;->customPanel:I +Lcom/android/internal/R$id;->datePicker:I Lcom/android/internal/R$id;->day:I +Lcom/android/internal/R$id;->deny_button:I +Lcom/android/internal/R$id;->description:I +Lcom/android/internal/R$id;->edit:I Lcom/android/internal/R$id;->edittext_container:I +Lcom/android/internal/R$id;->find_next:I +Lcom/android/internal/R$id;->find_prev:I Lcom/android/internal/R$id;->icon:I +Lcom/android/internal/R$id;->keyboard:I +Lcom/android/internal/R$id;->keyboardView:I +Lcom/android/internal/R$id;->line1:I +Lcom/android/internal/R$id;->list_item:I +Lcom/android/internal/R$id;->matches:I +Lcom/android/internal/R$id;->mediacontroller_progress:I +Lcom/android/internal/R$id;->media_actions:I Lcom/android/internal/R$id;->message:I Lcom/android/internal/R$id;->minute:I Lcom/android/internal/R$id;->month:I +Lcom/android/internal/R$id;->name:I +Lcom/android/internal/R$id;->notification_header:I +Lcom/android/internal/R$id;->ok:I +Lcom/android/internal/R$id;->overlay:I +Lcom/android/internal/R$id;->packages_list:I +Lcom/android/internal/R$id;->package_label:I +Lcom/android/internal/R$id;->parentPanel:I +Lcom/android/internal/R$id;->pause:I +Lcom/android/internal/R$id;->pending_intent_tag:I +Lcom/android/internal/R$id;->progress:I +Lcom/android/internal/R$id;->redo:I +Lcom/android/internal/R$id;->remote_input_tag:I +Lcom/android/internal/R$id;->right_icon:I +Lcom/android/internal/R$id;->search_src_text:I +Lcom/android/internal/R$id;->share:I Lcom/android/internal/R$id;->shortcut:I +Lcom/android/internal/R$id;->status_bar_latest_event_content:I +Lcom/android/internal/R$id;->tabcontent:I +Lcom/android/internal/R$id;->tabs:I +Lcom/android/internal/R$id;->text1:I +Lcom/android/internal/R$id;->text2:I Lcom/android/internal/R$id;->text:I Lcom/android/internal/R$id;->time:I Lcom/android/internal/R$id;->timePicker:I +Lcom/android/internal/R$id;->time_current:I Lcom/android/internal/R$id;->title:I +Lcom/android/internal/R$id;->titleDivider:I +Lcom/android/internal/R$id;->titleDividerTop:I Lcom/android/internal/R$id;->title_container:I +Lcom/android/internal/R$id;->title_icon:I +Lcom/android/internal/R$id;->title_template:I +Lcom/android/internal/R$id;->topPanel:I +Lcom/android/internal/R$id;->up:I Lcom/android/internal/R$id;->year:I +Lcom/android/internal/R$id;->zoomControls:I +Lcom/android/internal/R$id;->zoomMagnify:I Lcom/android/internal/R$integer;->config_screenBrightnessDim:I Lcom/android/internal/R$integer;->config_toastDefaultGravity:I +Lcom/android/internal/R$interpolator;->accelerate_cubic:I +Lcom/android/internal/R$interpolator;->decelerate_cubic:I +Lcom/android/internal/R$layout;->notification_template_material_base:I +Lcom/android/internal/R$layout;->preference_header_item:I Lcom/android/internal/R$layout;->screen_title:I +Lcom/android/internal/R$layout;->select_dialog:I +Lcom/android/internal/R$layout;->select_dialog_multichoice:I +Lcom/android/internal/R$layout;->select_dialog_singlechoice:I +Lcom/android/internal/R$layout;->webview_find:I +Lcom/android/internal/R$layout;->zoom_magnify:I +Lcom/android/internal/R$plurals;->matches_found:I +Lcom/android/internal/R$raw;->loaderror:I +Lcom/android/internal/R$raw;->nodomain:I Lcom/android/internal/R$string;->byteShort:I +Lcom/android/internal/R$string;->cancel:I +Lcom/android/internal/R$string;->enable_explore_by_touch_warning_title:I Lcom/android/internal/R$string;->gigabyteShort:I Lcom/android/internal/R$string;->kilobyteShort:I +Lcom/android/internal/R$string;->map:I Lcom/android/internal/R$string;->megabyteShort:I +Lcom/android/internal/R$string;->notification_title:I +Lcom/android/internal/R$string;->no_matches:I +Lcom/android/internal/R$string;->ok:I Lcom/android/internal/R$string;->petabyteShort:I +Lcom/android/internal/R$string;->redo:I +Lcom/android/internal/R$string;->share:I Lcom/android/internal/R$string;->terabyteShort:I +Lcom/android/internal/R$string;->whichApplication:I +Lcom/android/internal/R$style;->Animation_DropDownDown:I +Lcom/android/internal/R$style;->Animation_DropDownUp:I +Lcom/android/internal/R$style;->Animation_PopupWindow:I Lcom/android/internal/R$style;->Theme:I +Lcom/android/internal/R$style;->Theme_Dialog_Alert:I +Lcom/android/internal/R$style;->Theme_Holo_Light:I +Lcom/android/internal/R$style;->Theme_Light:I +Lcom/android/internal/R$styleable;-><init>()V Lcom/android/internal/R$styleable;->AbsListView:[I Lcom/android/internal/R$styleable;->AbsListView_cacheColorHint:I Lcom/android/internal/R$styleable;->AbsListView_choiceMode:I @@ -3452,6 +7409,7 @@ Lcom/android/internal/R$styleable;->AbsListView_smoothScrollbar:I Lcom/android/internal/R$styleable;->AbsListView_stackFromBottom:I Lcom/android/internal/R$styleable;->AbsListView_textFilterEnabled:I Lcom/android/internal/R$styleable;->AbsListView_transcriptMode:I +Lcom/android/internal/R$styleable;->AbsSpinner:[I Lcom/android/internal/R$styleable;->AccountAuthenticator:[I Lcom/android/internal/R$styleable;->AccountAuthenticator_accountPreferences:I Lcom/android/internal/R$styleable;->AccountAuthenticator_accountType:I @@ -3459,8 +7417,14 @@ Lcom/android/internal/R$styleable;->AccountAuthenticator_customTokens:I Lcom/android/internal/R$styleable;->AccountAuthenticator_icon:I Lcom/android/internal/R$styleable;->AccountAuthenticator_label:I Lcom/android/internal/R$styleable;->AccountAuthenticator_smallIcon:I +Lcom/android/internal/R$styleable;->ActionMode:[I +Lcom/android/internal/R$styleable;->AdapterViewAnimator:[I +Lcom/android/internal/R$styleable;->AdapterViewFlipper:[I +Lcom/android/internal/R$styleable;->AlertDialog:[I +Lcom/android/internal/R$styleable;->AnalogClock:[I Lcom/android/internal/R$styleable;->AndroidManifest:[I Lcom/android/internal/R$styleable;->AndroidManifestActivity:[I +Lcom/android/internal/R$styleable;->AndroidManifestActivityAlias:[I Lcom/android/internal/R$styleable;->AndroidManifestActivity_allowTaskReparenting:I Lcom/android/internal/R$styleable;->AndroidManifestActivity_configChanges:I Lcom/android/internal/R$styleable;->AndroidManifestActivity_description:I @@ -3494,18 +7458,32 @@ Lcom/android/internal/R$styleable;->AndroidManifestApplication_supportsRtl:I Lcom/android/internal/R$styleable;->AndroidManifestApplication_theme:I Lcom/android/internal/R$styleable;->AndroidManifestApplication_uiOptions:I Lcom/android/internal/R$styleable;->AndroidManifestData:[I +Lcom/android/internal/R$styleable;->AndroidManifestGrantUriPermission:[I +Lcom/android/internal/R$styleable;->AndroidManifestInstrumentation:[I Lcom/android/internal/R$styleable;->AndroidManifestIntentFilter:[I Lcom/android/internal/R$styleable;->AndroidManifestIntentFilter_priority:I Lcom/android/internal/R$styleable;->AndroidManifestMetaData:[I Lcom/android/internal/R$styleable;->AndroidManifestMetaData_name:I Lcom/android/internal/R$styleable;->AndroidManifestMetaData_resource:I Lcom/android/internal/R$styleable;->AndroidManifestMetaData_value:I +Lcom/android/internal/R$styleable;->AndroidManifestOriginalPackage:[I +Lcom/android/internal/R$styleable;->AndroidManifestPackageVerifier:[I +Lcom/android/internal/R$styleable;->AndroidManifestPathPermission:[I +Lcom/android/internal/R$styleable;->AndroidManifestPermission:[I +Lcom/android/internal/R$styleable;->AndroidManifestPermissionGroup:[I +Lcom/android/internal/R$styleable;->AndroidManifestPermissionTree:[I +Lcom/android/internal/R$styleable;->AndroidManifestProtectedBroadcast:[I +Lcom/android/internal/R$styleable;->AndroidManifestProvider:[I Lcom/android/internal/R$styleable;->AndroidManifestService:[I Lcom/android/internal/R$styleable;->AndroidManifestService_enabled:I Lcom/android/internal/R$styleable;->AndroidManifestService_exported:I Lcom/android/internal/R$styleable;->AndroidManifestService_name:I Lcom/android/internal/R$styleable;->AndroidManifestService_permission:I Lcom/android/internal/R$styleable;->AndroidManifestService_process:I +Lcom/android/internal/R$styleable;->AndroidManifestSupportsScreens:[I +Lcom/android/internal/R$styleable;->AndroidManifestUsesConfiguration:[I +Lcom/android/internal/R$styleable;->AndroidManifestUsesFeature:[I +Lcom/android/internal/R$styleable;->AndroidManifestUsesLibrary:[I Lcom/android/internal/R$styleable;->AndroidManifestUsesPermission:[I Lcom/android/internal/R$styleable;->AndroidManifestUsesPermission_name:I Lcom/android/internal/R$styleable;->AndroidManifestUsesSdk:[I @@ -3515,22 +7493,38 @@ Lcom/android/internal/R$styleable;->AndroidManifest_installLocation:I Lcom/android/internal/R$styleable;->AndroidManifest_sharedUserId:I Lcom/android/internal/R$styleable;->AndroidManifest_versionCode:I Lcom/android/internal/R$styleable;->AndroidManifest_versionName:I +Lcom/android/internal/R$styleable;->AppWidgetProviderInfo:[I +Lcom/android/internal/R$styleable;->AutoCompleteTextView:[I Lcom/android/internal/R$styleable;->CheckBoxPreference:[I Lcom/android/internal/R$styleable;->CheckBoxPreference_disableDependentsState:I Lcom/android/internal/R$styleable;->CheckBoxPreference_summaryOff:I Lcom/android/internal/R$styleable;->CheckBoxPreference_summaryOn:I +Lcom/android/internal/R$styleable;->CheckedTextView:[I +Lcom/android/internal/R$styleable;->CheckedTextView_checked:I +Lcom/android/internal/R$styleable;->CheckedTextView_checkMark:I Lcom/android/internal/R$styleable;->CompoundButton:[I Lcom/android/internal/R$styleable;->CompoundButton_button:I Lcom/android/internal/R$styleable;->CompoundButton_checked:I +Lcom/android/internal/R$styleable;->ContactsDataKind:[I +Lcom/android/internal/R$styleable;->DatePicker:[I Lcom/android/internal/R$styleable;->DialogPreference:[I Lcom/android/internal/R$styleable;->DialogPreference_dialogTitle:I +Lcom/android/internal/R$styleable;->Dream:[I Lcom/android/internal/R$styleable;->EdgeEffect:[I Lcom/android/internal/R$styleable;->EdgeEffect_colorEdgeEffect:I +Lcom/android/internal/R$styleable;->FastScroll:[I +Lcom/android/internal/R$styleable;->FrameLayout:[I +Lcom/android/internal/R$styleable;->FrameLayout_Layout:[I +Lcom/android/internal/R$styleable;->Gallery:[I Lcom/android/internal/R$styleable;->GridView:[I Lcom/android/internal/R$styleable;->IconMenuView:[I Lcom/android/internal/R$styleable;->ImageView:[I Lcom/android/internal/R$styleable;->ImageView_scaleType:I Lcom/android/internal/R$styleable;->ImageView_src:I +Lcom/android/internal/R$styleable;->Keyboard:[I +Lcom/android/internal/R$styleable;->KeyboardView:[I +Lcom/android/internal/R$styleable;->Keyboard_Key:[I +Lcom/android/internal/R$styleable;->Keyboard_Row:[I Lcom/android/internal/R$styleable;->ListPreference:[I Lcom/android/internal/R$styleable;->ListPreference_entries:I Lcom/android/internal/R$styleable;->ListView:[I @@ -3541,7 +7535,12 @@ Lcom/android/internal/R$styleable;->ListView_footerDividersEnabled:I Lcom/android/internal/R$styleable;->ListView_headerDividersEnabled:I Lcom/android/internal/R$styleable;->ListView_overScrollFooter:I Lcom/android/internal/R$styleable;->ListView_overScrollHeader:I +Lcom/android/internal/R$styleable;->MapView:[I +Lcom/android/internal/R$styleable;->MapView_apiKey:I +Lcom/android/internal/R$styleable;->MenuView:[I Lcom/android/internal/R$styleable;->PopupWindow:[I +Lcom/android/internal/R$styleable;->PopupWindow_popupAnimationStyle:I +Lcom/android/internal/R$styleable;->PopupWindow_popupBackground:I Lcom/android/internal/R$styleable;->Preference:[I Lcom/android/internal/R$styleable;->PreferenceGroup:[I Lcom/android/internal/R$styleable;->PreferenceGroup_orderingFromXml:I @@ -3559,8 +7558,16 @@ Lcom/android/internal/R$styleable;->Preference_shouldDisableView:I Lcom/android/internal/R$styleable;->Preference_summary:I Lcom/android/internal/R$styleable;->Preference_title:I Lcom/android/internal/R$styleable;->Preference_widgetLayout:I +Lcom/android/internal/R$styleable;->ProgressBar:[I +Lcom/android/internal/R$styleable;->QuickContactBadge:[I +Lcom/android/internal/R$styleable;->RingtonePreference:[I Lcom/android/internal/R$styleable;->ScrollView:[I Lcom/android/internal/R$styleable;->ScrollView_fillViewport:I +Lcom/android/internal/R$styleable;->Searchable:[I +Lcom/android/internal/R$styleable;->SearchableActionKey:[I +Lcom/android/internal/R$styleable;->SelectionModeDrawables:[I +Lcom/android/internal/R$styleable;->Switch:[I +Lcom/android/internal/R$styleable;->SwitchPreference:[I Lcom/android/internal/R$styleable;->SyncAdapter:[I Lcom/android/internal/R$styleable;->SyncAdapter_accountType:I Lcom/android/internal/R$styleable;->SyncAdapter_allowParallelSyncs:I @@ -3571,17 +7578,94 @@ Lcom/android/internal/R$styleable;->SyncAdapter_supportsUploading:I Lcom/android/internal/R$styleable;->SyncAdapter_userVisible:I Lcom/android/internal/R$styleable;->TabWidget:[I Lcom/android/internal/R$styleable;->TextAppearance:[I +Lcom/android/internal/R$styleable;->TextAppearance_fontFamily:I +Lcom/android/internal/R$styleable;->TextAppearance_textAllCaps:I +Lcom/android/internal/R$styleable;->TextAppearance_textColor:I +Lcom/android/internal/R$styleable;->TextAppearance_textColorHighlight:I +Lcom/android/internal/R$styleable;->TextAppearance_textColorHint:I +Lcom/android/internal/R$styleable;->TextAppearance_textColorLink:I +Lcom/android/internal/R$styleable;->TextAppearance_textSize:I +Lcom/android/internal/R$styleable;->TextAppearance_textStyle:I +Lcom/android/internal/R$styleable;->TextAppearance_typeface:I +Lcom/android/internal/R$styleable;->TextClock:[I Lcom/android/internal/R$styleable;->TextView:[I Lcom/android/internal/R$styleable;->TextViewAppearance:[I Lcom/android/internal/R$styleable;->TextViewAppearance_textAppearance:I +Lcom/android/internal/R$styleable;->TextView_autoLink:I +Lcom/android/internal/R$styleable;->TextView_autoText:I +Lcom/android/internal/R$styleable;->TextView_bufferType:I +Lcom/android/internal/R$styleable;->TextView_capitalize:I +Lcom/android/internal/R$styleable;->TextView_cursorVisible:I +Lcom/android/internal/R$styleable;->TextView_digits:I Lcom/android/internal/R$styleable;->TextView_drawableBottom:I +Lcom/android/internal/R$styleable;->TextView_drawableEnd:I Lcom/android/internal/R$styleable;->TextView_drawableLeft:I +Lcom/android/internal/R$styleable;->TextView_drawablePadding:I Lcom/android/internal/R$styleable;->TextView_drawableRight:I +Lcom/android/internal/R$styleable;->TextView_drawableStart:I Lcom/android/internal/R$styleable;->TextView_drawableTop:I +Lcom/android/internal/R$styleable;->TextView_editable:I +Lcom/android/internal/R$styleable;->TextView_editorExtras:I +Lcom/android/internal/R$styleable;->TextView_ellipsize:I +Lcom/android/internal/R$styleable;->TextView_ems:I +Lcom/android/internal/R$styleable;->TextView_enabled:I +Lcom/android/internal/R$styleable;->TextView_freezesText:I +Lcom/android/internal/R$styleable;->TextView_gravity:I +Lcom/android/internal/R$styleable;->TextView_height:I +Lcom/android/internal/R$styleable;->TextView_hint:I +Lcom/android/internal/R$styleable;->TextView_imeActionId:I +Lcom/android/internal/R$styleable;->TextView_imeActionLabel:I +Lcom/android/internal/R$styleable;->TextView_imeOptions:I +Lcom/android/internal/R$styleable;->TextView_includeFontPadding:I +Lcom/android/internal/R$styleable;->TextView_inputMethod:I +Lcom/android/internal/R$styleable;->TextView_inputType:I +Lcom/android/internal/R$styleable;->TextView_lines:I +Lcom/android/internal/R$styleable;->TextView_lineSpacingExtra:I +Lcom/android/internal/R$styleable;->TextView_lineSpacingMultiplier:I +Lcom/android/internal/R$styleable;->TextView_linksClickable:I +Lcom/android/internal/R$styleable;->TextView_marqueeRepeatLimit:I +Lcom/android/internal/R$styleable;->TextView_maxEms:I +Lcom/android/internal/R$styleable;->TextView_maxHeight:I +Lcom/android/internal/R$styleable;->TextView_maxLength:I Lcom/android/internal/R$styleable;->TextView_maxLines:I +Lcom/android/internal/R$styleable;->TextView_maxWidth:I +Lcom/android/internal/R$styleable;->TextView_minEms:I +Lcom/android/internal/R$styleable;->TextView_minHeight:I +Lcom/android/internal/R$styleable;->TextView_minLines:I +Lcom/android/internal/R$styleable;->TextView_minWidth:I +Lcom/android/internal/R$styleable;->TextView_numeric:I +Lcom/android/internal/R$styleable;->TextView_password:I +Lcom/android/internal/R$styleable;->TextView_phoneNumber:I +Lcom/android/internal/R$styleable;->TextView_privateImeOptions:I +Lcom/android/internal/R$styleable;->TextView_scrollHorizontally:I +Lcom/android/internal/R$styleable;->TextView_selectAllOnFocus:I +Lcom/android/internal/R$styleable;->TextView_shadowColor:I +Lcom/android/internal/R$styleable;->TextView_shadowDx:I +Lcom/android/internal/R$styleable;->TextView_shadowDy:I +Lcom/android/internal/R$styleable;->TextView_shadowRadius:I +Lcom/android/internal/R$styleable;->TextView_singleLine:I +Lcom/android/internal/R$styleable;->TextView_text:I +Lcom/android/internal/R$styleable;->TextView_textAllCaps:I +Lcom/android/internal/R$styleable;->TextView_textAppearance:I Lcom/android/internal/R$styleable;->TextView_textColor:I +Lcom/android/internal/R$styleable;->TextView_textColorHighlight:I Lcom/android/internal/R$styleable;->TextView_textColorHint:I +Lcom/android/internal/R$styleable;->TextView_textColorLink:I +Lcom/android/internal/R$styleable;->TextView_textCursorDrawable:I +Lcom/android/internal/R$styleable;->TextView_textEditSuggestionItemLayout:I +Lcom/android/internal/R$styleable;->TextView_textIsSelectable:I +Lcom/android/internal/R$styleable;->TextView_textScaleX:I +Lcom/android/internal/R$styleable;->TextView_textSelectHandle:I +Lcom/android/internal/R$styleable;->TextView_textSelectHandleLeft:I +Lcom/android/internal/R$styleable;->TextView_textSelectHandleRight:I +Lcom/android/internal/R$styleable;->TextView_textSize:I +Lcom/android/internal/R$styleable;->TextView_textStyle:I +Lcom/android/internal/R$styleable;->TextView_typeface:I +Lcom/android/internal/R$styleable;->TextView_width:I +Lcom/android/internal/R$styleable;->Theme:[I Lcom/android/internal/R$styleable;->View:[I +Lcom/android/internal/R$styleable;->ViewAnimator:[I +Lcom/android/internal/R$styleable;->ViewFlipper:[I Lcom/android/internal/R$styleable;->ViewGroup_Layout:[I Lcom/android/internal/R$styleable;->ViewGroup_Layout_layout_height:I Lcom/android/internal/R$styleable;->ViewGroup_Layout_layout_width:I @@ -3589,20 +7673,98 @@ Lcom/android/internal/R$styleable;->ViewStub:[I Lcom/android/internal/R$styleable;->ViewStub_inflatedId:I Lcom/android/internal/R$styleable;->ViewStub_layout:I Lcom/android/internal/R$styleable;->View_background:I +Lcom/android/internal/R$styleable;->View_clickable:I +Lcom/android/internal/R$styleable;->View_focusable:I Lcom/android/internal/R$styleable;->View_id:I +Lcom/android/internal/R$styleable;->View_longClickable:I +Lcom/android/internal/R$styleable;->WallpaperPreviewInfo:[I Lcom/android/internal/R$styleable;->Window:[I +Lcom/android/internal/R$styleable;->WindowAnimation:[I Lcom/android/internal/R$styleable;->Window_windowActionBarFullscreenDecorLayout:I Lcom/android/internal/R$styleable;->Window_windowIsFloating:I Lcom/android/internal/R$styleable;->Window_windowIsTranslucent:I Lcom/android/internal/R$styleable;->Window_windowShowWallpaper:I Lcom/android/internal/R$xml;->power_profile:I +Lcom/android/internal/statusbar/IStatusBar$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBar; +Lcom/android/internal/statusbar/IStatusBarService$Stub;-><init>()V +Lcom/android/internal/statusbar/IStatusBarService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBarService; +Lcom/android/internal/statusbar/IStatusBarService;->collapsePanels()V +Lcom/android/internal/statusbar/IStatusBarService;->disable(ILandroid/os/IBinder;Ljava/lang/String;)V +Lcom/android/internal/statusbar/IStatusBarService;->expandNotificationsPanel()V +Lcom/android/internal/statusbar/IStatusBarService;->handleSystemKey(I)V +Lcom/android/internal/statusbar/IStatusBarService;->removeIcon(Ljava/lang/String;)V +Lcom/android/internal/statusbar/IStatusBarService;->setIconVisibility(Ljava/lang/String;Z)V +Lcom/android/internal/telecom/ITelecomService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/ITelecomService; +Lcom/android/internal/telecom/ITelecomService;->getCallState()I +Lcom/android/internal/telephony/CallerInfo;-><init>()V +Lcom/android/internal/telephony/CallerInfo;->contactIdOrZero:J +Lcom/android/internal/telephony/CallerInfo;->getCallerInfo(Landroid/content/Context;Landroid/net/Uri;)Lcom/android/internal/telephony/CallerInfo; +Lcom/android/internal/telephony/CallerInfo;->getCallerInfo(Landroid/content/Context;Ljava/lang/String;)Lcom/android/internal/telephony/CallerInfo; +Lcom/android/internal/telephony/CallerInfo;->getCallerInfo(Landroid/content/Context;Ljava/lang/String;I)Lcom/android/internal/telephony/CallerInfo; +Lcom/android/internal/telephony/CallerInfo;->name:Ljava/lang/String; +Lcom/android/internal/telephony/CallerInfo;->numberLabel:Ljava/lang/String; +Lcom/android/internal/telephony/CallerInfo;->numberType:I +Lcom/android/internal/telephony/CallerInfo;->phoneNumber:Ljava/lang/String; +Lcom/android/internal/telephony/EncodeException;-><init>(C)V +Lcom/android/internal/telephony/EncodeException;-><init>(Ljava/lang/String;)V +Lcom/android/internal/telephony/GsmAlphabet$LanguagePairCount;-><init>(I)V +Lcom/android/internal/telephony/GsmAlphabet$LanguagePairCount;->languageCode:I +Lcom/android/internal/telephony/GsmAlphabet$LanguagePairCount;->septetCounts:[I +Lcom/android/internal/telephony/GsmAlphabet$LanguagePairCount;->unencodableCounts:[I +Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails;-><init>()V +Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails;->codeUnitCount:I +Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails;->codeUnitSize:I +Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails;->codeUnitsRemaining:I +Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails;->languageShiftTable:I +Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails;->languageTable:I +Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails;->msgCount:I +Lcom/android/internal/telephony/GsmAlphabet;->charToGsm(C)I +Lcom/android/internal/telephony/GsmAlphabet;->charToGsm(CZ)I +Lcom/android/internal/telephony/GsmAlphabet;->countGsmSeptets(CZ)I +Lcom/android/internal/telephony/GsmAlphabet;->findGsmSeptetLimitIndex(Ljava/lang/String;IIII)I +Lcom/android/internal/telephony/GsmAlphabet;->gsm7BitPackedToString([BIIIII)Ljava/lang/String; +Lcom/android/internal/telephony/GsmAlphabet;->gsm8BitUnpackedToString([BII)Ljava/lang/String; +Lcom/android/internal/telephony/GsmAlphabet;->gsm8BitUnpackedToString([BIILjava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/GsmAlphabet;->gsmToChar(I)C +Lcom/android/internal/telephony/GsmAlphabet;->packSmsChar([BII)V +Lcom/android/internal/telephony/GsmAlphabet;->sCharsToGsmTables:[Landroid/util/SparseIntArray; +Lcom/android/internal/telephony/GsmAlphabet;->sCharsToShiftTables:[Landroid/util/SparseIntArray; +Lcom/android/internal/telephony/GsmAlphabet;->sEnabledLockingShiftTables:[I +Lcom/android/internal/telephony/GsmAlphabet;->sEnabledSingleShiftTables:[I +Lcom/android/internal/telephony/GsmAlphabet;->sHighestEnabledSingleShiftCode:I +Lcom/android/internal/telephony/GsmAlphabet;->sLanguageShiftTables:[Ljava/lang/String; +Lcom/android/internal/telephony/GsmAlphabet;->sLanguageTables:[Ljava/lang/String; +Lcom/android/internal/telephony/GsmAlphabet;->stringToGsm7BitPacked(Ljava/lang/String;IZII)[B +Lcom/android/internal/telephony/GsmAlphabet;->stringToGsm7BitPackedWithHeader(Ljava/lang/String;[BII)[B +Lcom/android/internal/telephony/GsmAlphabet;->stringToGsm8BitPacked(Ljava/lang/String;)[B +Lcom/android/internal/telephony/ICarrierConfigLoader;->getConfigForSubId(I)Landroid/os/PersistableBundle; Lcom/android/internal/telephony/IMms$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IMms; +Lcom/android/internal/telephony/IPhoneStateListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IPhoneStateListener; +Lcom/android/internal/telephony/IPhoneStateListener;->onCallForwardingIndicatorChanged(Z)V +Lcom/android/internal/telephony/IPhoneStateListener;->onCallStateChanged(ILjava/lang/String;)V +Lcom/android/internal/telephony/IPhoneStateListener;->onCellLocationChanged(Landroid/os/Bundle;)V +Lcom/android/internal/telephony/IPhoneStateListener;->onDataActivity(I)V +Lcom/android/internal/telephony/IPhoneStateListener;->onDataConnectionStateChanged(II)V +Lcom/android/internal/telephony/IPhoneStateListener;->onMessageWaitingIndicatorChanged(Z)V +Lcom/android/internal/telephony/IPhoneStateListener;->onServiceStateChanged(Landroid/telephony/ServiceState;)V +Lcom/android/internal/telephony/IPhoneStateListener;->onSignalStrengthChanged(I)V +Lcom/android/internal/telephony/IPhoneStateListener;->onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Lcom/android/internal/telephony/IPhoneSubInfo$Stub;-><init>()V Lcom/android/internal/telephony/IPhoneSubInfo$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IPhoneSubInfo; +Lcom/android/internal/telephony/IPhoneSubInfo;->getIccSerialNumber(Ljava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/IPhoneSubInfo;->getSubscriberId(Ljava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/ISms$Stub;-><init>()V Lcom/android/internal/telephony/ISms$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISms; Lcom/android/internal/telephony/ISub$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Lcom/android/internal/telephony/ISub$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISub; +Lcom/android/internal/telephony/ISub;->getDefaultDataSubId()I +Lcom/android/internal/telephony/ISub;->getDefaultSubId()I +Lcom/android/internal/telephony/ISub;->setDefaultDataSubId(I)V Lcom/android/internal/telephony/ITelephony$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Lcom/android/internal/telephony/ITelephony$Stub$Proxy;->endCall()Z +Lcom/android/internal/telephony/ITelephony$Stub$Proxy;->endCallForSubscriber(I)Z +Lcom/android/internal/telephony/ITelephony$Stub$Proxy;->getDeviceId(Ljava/lang/String;)Ljava/lang/String; Lcom/android/internal/telephony/ITelephony$Stub$Proxy;->mRemote:Landroid/os/IBinder; Lcom/android/internal/telephony/ITelephony$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ITelephony; Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_call:I @@ -3612,60 +7774,219 @@ Lcom/android/internal/telephony/ITelephony;->answerRingingCall()V Lcom/android/internal/telephony/ITelephony;->call(Ljava/lang/String;Ljava/lang/String;)V Lcom/android/internal/telephony/ITelephony;->dial(Ljava/lang/String;)V Lcom/android/internal/telephony/ITelephony;->disableDataConnectivity()Z +Lcom/android/internal/telephony/ITelephony;->disableLocationUpdates()V Lcom/android/internal/telephony/ITelephony;->enableDataConnectivity()Z +Lcom/android/internal/telephony/ITelephony;->enableLocationUpdates()V Lcom/android/internal/telephony/ITelephony;->endCall()Z Lcom/android/internal/telephony/ITelephony;->endCallForSubscriber(I)Z +Lcom/android/internal/telephony/ITelephony;->getActivePhoneType()I Lcom/android/internal/telephony/ITelephony;->getCallState()I +Lcom/android/internal/telephony/ITelephony;->getDataActivity()I Lcom/android/internal/telephony/ITelephony;->getDataState()I +Lcom/android/internal/telephony/ITelephony;->getNetworkType()I +Lcom/android/internal/telephony/ITelephony;->getVoiceMessageCount()I +Lcom/android/internal/telephony/ITelephony;->handlePinMmi(Ljava/lang/String;)Z +Lcom/android/internal/telephony/ITelephony;->handlePinMmiForSubscriber(ILjava/lang/String;)Z +Lcom/android/internal/telephony/ITelephony;->hasIccCard()Z +Lcom/android/internal/telephony/ITelephony;->iccCloseLogicalChannel(II)Z +Lcom/android/internal/telephony/ITelephony;->iccTransmitApduLogicalChannel(IIIIIIILjava/lang/String;)Ljava/lang/String; Lcom/android/internal/telephony/ITelephony;->isIdle(Ljava/lang/String;)Z +Lcom/android/internal/telephony/ITelephony;->isIdleForSubscriber(ILjava/lang/String;)Z +Lcom/android/internal/telephony/ITelephony;->isRadioOnForSubscriber(ILjava/lang/String;)Z +Lcom/android/internal/telephony/ITelephony;->isRinging(Ljava/lang/String;)Z Lcom/android/internal/telephony/ITelephony;->setRadio(Z)Z Lcom/android/internal/telephony/ITelephony;->silenceRinger()V +Lcom/android/internal/telephony/ITelephony;->supplyPin(Ljava/lang/String;)Z +Lcom/android/internal/telephony/ITelephony;->toggleRadioOnOff()V +Lcom/android/internal/telephony/ITelephony;->updateServiceLocation()V Lcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Lcom/android/internal/telephony/ITelephonyRegistry$Stub;-><init>()V Lcom/android/internal/telephony/ITelephonyRegistry$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ITelephonyRegistry; +Lcom/android/internal/telephony/ITelephonyRegistry;->listen(Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZ)V Lcom/android/internal/telephony/ITelephonyRegistry;->notifyCallState(ILjava/lang/String;)V +Lcom/android/internal/telephony/IWapPushManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IWapPushManager; +Lcom/android/internal/telephony/IWapPushManager;->addPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZZ)Z +Lcom/android/internal/telephony/IWapPushManager;->deletePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z +Lcom/android/internal/telephony/IWapPushManager;->updatePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZZ)Z +Lcom/android/internal/telephony/OperatorInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lcom/android/internal/telephony/SmsAddress;->origBytes:[B +Lcom/android/internal/telephony/SmsConstants$MessageClass;->CLASS_0:Lcom/android/internal/telephony/SmsConstants$MessageClass; +Lcom/android/internal/telephony/SmsConstants$MessageClass;->CLASS_1:Lcom/android/internal/telephony/SmsConstants$MessageClass; +Lcom/android/internal/telephony/SmsConstants$MessageClass;->CLASS_2:Lcom/android/internal/telephony/SmsConstants$MessageClass; +Lcom/android/internal/telephony/SmsConstants$MessageClass;->CLASS_3:Lcom/android/internal/telephony/SmsConstants$MessageClass; +Lcom/android/internal/telephony/SmsConstants$MessageClass;->UNKNOWN:Lcom/android/internal/telephony/SmsConstants$MessageClass; +Lcom/android/internal/telephony/SmsHeader$ConcatRef;-><init>()V Lcom/android/internal/telephony/SmsHeader$ConcatRef;->msgCount:I Lcom/android/internal/telephony/SmsHeader$ConcatRef;->refNumber:I Lcom/android/internal/telephony/SmsHeader$ConcatRef;->seqNumber:I +Lcom/android/internal/telephony/SmsHeader$PortAddrs;-><init>()V +Lcom/android/internal/telephony/SmsHeader$PortAddrs;->destPort:I +Lcom/android/internal/telephony/SmsHeader$PortAddrs;->origPort:I +Lcom/android/internal/telephony/SmsHeader;-><init>()V Lcom/android/internal/telephony/SmsHeader;->concatRef:Lcom/android/internal/telephony/SmsHeader$ConcatRef; +Lcom/android/internal/telephony/SmsHeader;->fromByteArray([B)Lcom/android/internal/telephony/SmsHeader; +Lcom/android/internal/telephony/SmsHeader;->languageShiftTable:I +Lcom/android/internal/telephony/SmsHeader;->languageTable:I +Lcom/android/internal/telephony/SmsHeader;->portAddrs:Lcom/android/internal/telephony/SmsHeader$PortAddrs; +Lcom/android/internal/telephony/SmsHeader;->toByteArray(Lcom/android/internal/telephony/SmsHeader;)[B +Lcom/android/internal/telephony/SmsMessageBase$SubmitPduBase;->encodedMessage:[B +Lcom/android/internal/telephony/SmsMessageBase$SubmitPduBase;->encodedScAddress:[B +Lcom/android/internal/telephony/SmsMessageBase;-><init>()V +Lcom/android/internal/telephony/SmsMessageBase;->getDisplayMessageBody()Ljava/lang/String; +Lcom/android/internal/telephony/SmsMessageBase;->getDisplayOriginatingAddress()Ljava/lang/String; +Lcom/android/internal/telephony/SmsMessageBase;->getMessageBody()Ljava/lang/String; Lcom/android/internal/telephony/SmsMessageBase;->getOriginatingAddress()Ljava/lang/String; +Lcom/android/internal/telephony/SmsMessageBase;->getProtocolIdentifier()I Lcom/android/internal/telephony/SmsMessageBase;->getPseudoSubject()Ljava/lang/String; +Lcom/android/internal/telephony/SmsMessageBase;->getServiceCenterAddress()Ljava/lang/String; +Lcom/android/internal/telephony/SmsMessageBase;->getTimestampMillis()J +Lcom/android/internal/telephony/SmsMessageBase;->getUserData()[B +Lcom/android/internal/telephony/SmsMessageBase;->getUserDataHeader()Lcom/android/internal/telephony/SmsHeader; +Lcom/android/internal/telephony/SmsMessageBase;->isReplace()Z +Lcom/android/internal/telephony/SmsMessageBase;->isReplyPathPresent()Z +Lcom/android/internal/telephony/SmsMessageBase;->isStatusReportMessage()Z +Lcom/android/internal/telephony/SmsMessageBase;->mIsMwi:Z +Lcom/android/internal/telephony/SmsMessageBase;->mMessageBody:Ljava/lang/String; +Lcom/android/internal/telephony/SmsMessageBase;->mMessageRef:I +Lcom/android/internal/telephony/SmsMessageBase;->mMwiDontStore:Z +Lcom/android/internal/telephony/SmsMessageBase;->mMwiSense:Z +Lcom/android/internal/telephony/SmsMessageBase;->mOriginatingAddress:Lcom/android/internal/telephony/SmsAddress; +Lcom/android/internal/telephony/SmsMessageBase;->mPdu:[B +Lcom/android/internal/telephony/SmsMessageBase;->mScAddress:Ljava/lang/String; Lcom/android/internal/telephony/SmsMessageBase;->mUserDataHeader:Lcom/android/internal/telephony/SmsHeader; Lcom/android/internal/telephony/SmsRawData;-><init>([B)V Lcom/android/internal/telephony/SmsRawData;->CREATOR:Landroid/os/Parcelable$Creator; +Lcom/android/internal/telephony/SmsRawData;->getBytes()[B Lcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Lcom/android/internal/util/AsyncChannel;->cmdToString(I)Ljava/lang/String; +Lcom/android/internal/util/AsyncChannel;->CMD_CHANNEL_FULL_CONNECTION:I +Lcom/android/internal/util/AsyncChannel;->CMD_CHANNEL_HALF_CONNECTED:I +Lcom/android/internal/util/AsyncChannel;->connected(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)V +Lcom/android/internal/util/AsyncChannel;->connectSync(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)I +Lcom/android/internal/util/AsyncChannel;->disconnect()V +Lcom/android/internal/util/AsyncChannel;->replyToMessage(Landroid/os/Message;I)V +Lcom/android/internal/util/AsyncChannel;->replyToMessage(Landroid/os/Message;II)V +Lcom/android/internal/util/AsyncChannel;->replyToMessage(Landroid/os/Message;IIILjava/lang/Object;)V +Lcom/android/internal/util/AsyncChannel;->replyToMessage(Landroid/os/Message;ILjava/lang/Object;)V +Lcom/android/internal/util/AsyncChannel;->replyToMessage(Landroid/os/Message;Landroid/os/Message;)V +Lcom/android/internal/util/AsyncChannel;->sendMessage(I)V +Lcom/android/internal/util/AsyncChannel;->sendMessage(II)V Lcom/android/internal/util/AsyncChannel;->sendMessage(III)V +Lcom/android/internal/util/AsyncChannel;->sendMessage(IIILjava/lang/Object;)V +Lcom/android/internal/util/AsyncChannel;->sendMessageSynchronously(III)Landroid/os/Message; +Lcom/android/internal/util/AsyncChannel;->sendMessageSynchronously(Landroid/os/Message;)Landroid/os/Message; +Lcom/android/internal/util/AsyncChannel;->STATUS_SUCCESSFUL:I Lcom/android/internal/util/FastPrintWriter;-><init>(Ljava/io/OutputStream;)V +Lcom/android/internal/util/XmlUtils;->convertValueToBoolean(Ljava/lang/CharSequence;Z)Z +Lcom/android/internal/util/XmlUtils;->convertValueToInt(Ljava/lang/CharSequence;I)I Lcom/android/internal/util/XmlUtils;->readMapXml(Ljava/io/InputStream;)Ljava/util/HashMap; Lcom/android/internal/util/XmlUtils;->skipCurrentTag(Lorg/xmlpull/v1/XmlPullParser;)V Lcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/io/OutputStream;)V +Lcom/android/internal/view/BaseIWindow;-><init>()V Lcom/android/internal/view/IInputConnectionWrapper;->mInputConnection:Landroid/view/inputmethod/InputConnection; Lcom/android/internal/view/IInputConnectionWrapper;->mLock:Ljava/lang/Object; +Lcom/android/internal/view/IInputMethod$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethod; +Lcom/android/internal/view/IInputMethod;->attachToken(Landroid/os/IBinder;)V +Lcom/android/internal/view/IInputMethod;->bindInput(Landroid/view/inputmethod/InputBinding;)V +Lcom/android/internal/view/IInputMethod;->hideSoftInput(ILandroid/os/ResultReceiver;)V +Lcom/android/internal/view/IInputMethod;->setSessionEnabled(Lcom/android/internal/view/IInputMethodSession;Z)V +Lcom/android/internal/view/IInputMethod;->showSoftInput(ILandroid/os/ResultReceiver;)V +Lcom/android/internal/view/IInputMethod;->unbindInput()V +Lcom/android/internal/view/IInputMethodClient;->onBindMethod(Lcom/android/internal/view/InputBindResult;)V +Lcom/android/internal/view/IInputMethodClient;->setUsingInputMethod(Z)V Lcom/android/internal/view/IInputMethodManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Lcom/android/internal/view/IInputMethodManager$Stub$Proxy;->getEnabledInputMethodList()Ljava/util/List; +Lcom/android/internal/view/IInputMethodManager$Stub;-><init>()V Lcom/android/internal/view/IInputMethodManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodManager; +Lcom/android/internal/view/IInputMethodManager;->addClient(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;II)V +Lcom/android/internal/view/IInputMethodManager;->removeClient(Lcom/android/internal/view/IInputMethodClient;)V +Lcom/android/internal/view/IInputMethodSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodSession; Lcom/android/internal/view/InputBindResult;->CREATOR:Landroid/os/Parcelable$Creator; +Lcom/android/internal/view/InputBindResult;->method:Lcom/android/internal/view/IInputMethodSession; +Lcom/android/internal/view/menu/MenuBuilder$Callback;->onMenuItemSelected(Lcom/android/internal/view/menu/MenuBuilder;Landroid/view/MenuItem;)Z +Lcom/android/internal/view/menu/MenuBuilder$Callback;->onMenuModeChange(Lcom/android/internal/view/menu/MenuBuilder;)V Lcom/android/internal/view/menu/MenuBuilder;-><init>(Landroid/content/Context;)V +Lcom/android/internal/view/menu/MenuBuilder;->addMenuPresenter(Lcom/android/internal/view/menu/MenuPresenter;Landroid/content/Context;)V +Lcom/android/internal/view/menu/MenuBuilder;->collapseItemActionView(Lcom/android/internal/view/menu/MenuItemImpl;)Z +Lcom/android/internal/view/menu/MenuBuilder;->getContext()Landroid/content/Context; +Lcom/android/internal/view/menu/MenuBuilder;->getNonActionItems()Ljava/util/ArrayList; +Lcom/android/internal/view/menu/MenuBuilder;->getRootMenu()Lcom/android/internal/view/menu/MenuBuilder; +Lcom/android/internal/view/menu/MenuBuilder;->getVisibleItems()Ljava/util/ArrayList; Lcom/android/internal/view/menu/MenuBuilder;->mContext:Landroid/content/Context; +Lcom/android/internal/view/menu/MenuBuilder;->setCallback(Lcom/android/internal/view/menu/MenuBuilder$Callback;)V Lcom/android/internal/view/menu/MenuBuilder;->setCurrentMenuInfo(Landroid/view/ContextMenu$ContextMenuInfo;)V Lcom/android/internal/view/menu/MenuBuilder;->setOptionalIconsVisible(Z)V +Lcom/android/internal/view/menu/MenuItemImpl;->invoke()Z +Lcom/android/internal/view/menu/MenuItemImpl;->isActionButton()Z Lcom/android/internal/view/menu/MenuItemImpl;->mIconResId:I +Lcom/android/internal/view/menu/MenuItemImpl;->requestsActionButton()Z +Lcom/android/internal/view/menu/MenuItemImpl;->requiresActionButton()Z +Lcom/android/internal/view/menu/MenuItemImpl;->setActionViewExpanded(Z)V Lcom/android/internal/view/menu/MenuItemImpl;->setMenuInfo(Landroid/view/ContextMenu$ContextMenuInfo;)V +Lcom/android/internal/view/menu/MenuPopupHelper;-><init>(Landroid/content/Context;Lcom/android/internal/view/menu/MenuBuilder;Landroid/view/View;)V +Lcom/android/internal/view/menu/MenuPopupHelper;->dismiss()V Lcom/android/internal/view/menu/MenuPopupHelper;->mForceShowIcon:Z Lcom/android/internal/view/menu/MenuPopupHelper;->setForceShowIcon(Z)V +Lcom/android/internal/view/menu/MenuPopupHelper;->setGravity(I)V +Lcom/android/internal/view/menu/MenuPopupHelper;->show()V +Lcom/android/internal/view/menu/MenuPopupHelper;->tryShow()Z +Lcom/android/internal/view/menu/MenuPresenter$Callback;->onOpenSubMenu(Lcom/android/internal/view/menu/MenuBuilder;)Z Lcom/android/internal/view/menu/MenuView$ItemView;->getItemData()Lcom/android/internal/view/menu/MenuItemImpl; +Lcom/android/internal/view/menu/MenuView;->getWindowAnimations()I +Lcom/android/internal/view/menu/SubMenuBuilder;->getRootMenu()Lcom/android/internal/view/menu/MenuBuilder; +Lcom/android/internal/view/menu/SubMenuBuilder;->setCallback(Lcom/android/internal/view/menu/MenuBuilder$Callback;)V +Lcom/android/internal/widget/CachingIconView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V +Lcom/android/internal/widget/ILockSettings$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ILockSettings; +Lcom/android/internal/widget/ILockSettings;->getBoolean(Ljava/lang/String;ZI)Z +Lcom/android/internal/widget/ILockSettings;->getLong(Ljava/lang/String;JI)J +Lcom/android/internal/widget/ILockSettings;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String; +Lcom/android/internal/widget/ILockSettings;->havePassword(I)Z +Lcom/android/internal/widget/ILockSettings;->havePattern(I)Z +Lcom/android/internal/widget/ILockSettings;->setBoolean(Ljava/lang/String;ZI)V +Lcom/android/internal/widget/ILockSettings;->setLong(Ljava/lang/String;JI)V +Lcom/android/internal/widget/ILockSettings;->setString(Ljava/lang/String;Ljava/lang/String;I)V +Lcom/android/internal/widget/IRemoteViewsFactory$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/IRemoteViewsFactory; +Lcom/android/internal/widget/IRemoteViewsFactory;->getCount()I +Lcom/android/internal/widget/IRemoteViewsFactory;->getItemId(I)J +Lcom/android/internal/widget/IRemoteViewsFactory;->getLoadingView()Landroid/widget/RemoteViews; +Lcom/android/internal/widget/IRemoteViewsFactory;->getViewAt(I)Landroid/widget/RemoteViews; +Lcom/android/internal/widget/IRemoteViewsFactory;->getViewTypeCount()I +Lcom/android/internal/widget/IRemoteViewsFactory;->hasStableIds()Z +Lcom/android/internal/widget/IRemoteViewsFactory;->isCreated()Z +Lcom/android/internal/widget/IRemoteViewsFactory;->onDataSetChanged()V +Lcom/android/internal/widget/ScrollingTabContainerView;->setAllowCollapse(Z)V +Lcom/android/okhttp/Connection;->getSocket()Ljava/net/Socket; +Lcom/android/okhttp/ConnectionPool;->connections:Ljava/util/Deque; Lcom/android/okhttp/ConnectionPool;->keepAliveDurationNs:J Lcom/android/okhttp/ConnectionPool;->maxIdleConnections:I Lcom/android/okhttp/ConnectionPool;->systemDefault:Lcom/android/okhttp/ConnectionPool; +Lcom/android/okhttp/HttpUrl$Builder;->build()Lcom/android/okhttp/HttpUrl; Lcom/android/okhttp/HttpUrl;->encodedPath()Ljava/lang/String; +Lcom/android/okhttp/HttpUrl;->newBuilder()Lcom/android/okhttp/HttpUrl$Builder; +Lcom/android/okhttp/HttpUrl;->parse(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl; Lcom/android/okhttp/HttpUrl;->query()Ljava/lang/String; +Lcom/android/okhttp/internal/http/HttpEngine;->getConnection()Lcom/android/okhttp/Connection; +Lcom/android/okhttp/internal/http/HttpEngine;->hasResponse()Z Lcom/android/okhttp/internal/http/HttpEngine;->httpStream:Lcom/android/okhttp/internal/http/HttpStream; Lcom/android/okhttp/internal/http/HttpEngine;->networkRequest(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Request; Lcom/android/okhttp/internal/http/HttpEngine;->networkRequest:Lcom/android/okhttp/Request; Lcom/android/okhttp/internal/http/HttpEngine;->priorResponse:Lcom/android/okhttp/Response; +Lcom/android/okhttp/internal/http/HttpEngine;->readResponse()V +Lcom/android/okhttp/internal/http/HttpEngine;->sendRequest()V +Lcom/android/okhttp/internal/http/HttpEngine;->sentRequestMillis:J Lcom/android/okhttp/internal/http/HttpEngine;->userResponse:Lcom/android/okhttp/Response; +Lcom/android/okhttp/internal/http/HttpEngine;->writingRequestHeaders()V +Lcom/android/okhttp/internal/http/RouteSelector;->hasNext()Z +Lcom/android/okhttp/OkHttpClient;-><init>()V Lcom/android/okhttp/OkHttpClient;->connectionPool:Lcom/android/okhttp/ConnectionPool; Lcom/android/okhttp/OkHttpClient;->DEFAULT_PROTOCOLS:Ljava/util/List; Lcom/android/okhttp/OkHttpClient;->dns:Lcom/android/okhttp/Dns; +Lcom/android/okhttp/OkHttpClient;->getConnectionPool()Lcom/android/okhttp/ConnectionPool; +Lcom/android/okhttp/OkHttpClient;->getCookieHandler()Ljava/net/CookieHandler; +Lcom/android/okhttp/OkHttpClient;->getHostnameVerifier()Ljavax/net/ssl/HostnameVerifier; +Lcom/android/okhttp/OkHttpClient;->getProxy()Ljava/net/Proxy; +Lcom/android/okhttp/OkHttpClient;->getProxySelector()Ljava/net/ProxySelector; +Lcom/android/okhttp/OkHttpClient;->getSslSocketFactory()Ljavax/net/ssl/SSLSocketFactory; Lcom/android/okhttp/OkHttpClient;->setProtocols(Ljava/util/List;)Lcom/android/okhttp/OkHttpClient; Lcom/android/okhttp/OkHttpClient;->setRetryOnConnectionFailure(Z)V Lcom/android/okhttp/Request;->headers:Lcom/android/okhttp/Headers; @@ -3702,6 +8023,10 @@ Lcom/android/org/conscrypt/ConscryptSocketBase;->setHandshakeTimeout(I)V Lcom/android/org/conscrypt/ConscryptSocketBase;->setHostname(Ljava/lang/String;)V Lcom/android/org/conscrypt/ConscryptSocketBase;->setSoWriteTimeout(I)V Lcom/android/org/conscrypt/ConscryptSocketBase;->socket:Ljava/net/Socket; +Lcom/android/org/conscrypt/OpenSSLKey;-><init>(J)V +Lcom/android/org/conscrypt/OpenSSLKey;->fromPrivateKey(Ljava/security/PrivateKey;)Lcom/android/org/conscrypt/OpenSSLKey; +Lcom/android/org/conscrypt/OpenSSLKey;->getNativeRef()Lcom/android/org/conscrypt/NativeRef$EVP_PKEY; +Lcom/android/org/conscrypt/OpenSSLKey;->getPublicKey()Ljava/security/PublicKey; Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getChannelId()[B Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getHostname()Ljava/lang/String; @@ -3717,15 +8042,22 @@ Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setHostname(Ljava/lang/String;)V Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setNpnProtocols([B)V Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setSoWriteTimeout(I)V Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setUseSessionTickets(Z)V +Lcom/android/org/conscrypt/OpenSSLX509Certificate;->fromX509PemInputStream(Ljava/io/InputStream;)Lcom/android/org/conscrypt/OpenSSLX509Certificate; Lcom/android/org/conscrypt/OpenSSLX509Certificate;->mContext:J +Lcom/android/org/conscrypt/TrustedCertificateStore;-><init>()V +Lcom/android/org/conscrypt/TrustedCertificateStore;->getCertificateChain(Ljava/security/cert/X509Certificate;)Ljava/util/List; Lcom/android/org/conscrypt/TrustManagerImpl;-><init>(Ljava/security/KeyStore;)V Lcom/android/org/conscrypt/TrustManagerImpl;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List; Ldalvik/system/BaseDexClassLoader;->addDexPath(Ljava/lang/String;)V +Ldalvik/system/BaseDexClassLoader;->addDexPath(Ljava/lang/String;Z)V Ldalvik/system/BaseDexClassLoader;->getLdLibraryPath()Ljava/lang/String; Ldalvik/system/BaseDexClassLoader;->pathList:Ldalvik/system/DexPathList; +Ldalvik/system/BlockGuard$BlockGuardPolicyException;-><init>(IILjava/lang/String;)V Ldalvik/system/BlockGuard$Policy;->onNetwork()V Ldalvik/system/BlockGuard$Policy;->onReadFromDisk()V Ldalvik/system/BlockGuard;->getThreadPolicy()Ldalvik/system/BlockGuard$Policy; +Ldalvik/system/BlockGuard;->LAX_POLICY:Ldalvik/system/BlockGuard$Policy; +Ldalvik/system/BlockGuard;->setThreadPolicy(Ldalvik/system/BlockGuard$Policy;)V Ldalvik/system/CloseGuard;->close()V Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V @@ -3734,10 +8066,12 @@ Ldalvik/system/DexFile$DFEnum;->mNameList:[Ljava/lang/String; Ldalvik/system/DexFile;->getClassNameList(Ljava/lang/Object;)[Ljava/lang/String; Ldalvik/system/DexFile;->isBackedByOatFile()Z Ldalvik/system/DexFile;->loadClassBinaryName(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/List;)Ljava/lang/Class; +Ldalvik/system/DexFile;->loadDex(Ljava/lang/String;Ljava/lang/String;ILjava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ldalvik/system/DexFile; Ldalvik/system/DexFile;->mCookie:Ljava/lang/Object; Ldalvik/system/DexFile;->mFileName:Ljava/lang/String; Ldalvik/system/DexFile;->mInternalCookie:Ljava/lang/Object; Ldalvik/system/DexFile;->openDexFile(Ljava/lang/String;Ljava/lang/String;ILjava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ljava/lang/Object; +Ldalvik/system/DexFile;->openDexFileNative(Ljava/lang/String;Ljava/lang/String;ILjava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ljava/lang/Object; Ldalvik/system/DexPathList$Element;-><init>(Ldalvik/system/DexFile;Ljava/io/File;)V Ldalvik/system/DexPathList$Element;-><init>(Ljava/io/File;ZLjava/io/File;Ldalvik/system/DexFile;)V Ldalvik/system/DexPathList$Element;->dexFile:Ldalvik/system/DexFile; @@ -3748,6 +8082,7 @@ Ldalvik/system/DexPathList;->addDexPath(Ljava/lang/String;Ljava/io/File;)V Ldalvik/system/DexPathList;->addNativePath(Ljava/util/Collection;)V Ldalvik/system/DexPathList;->definingContext:Ljava/lang/ClassLoader; Ldalvik/system/DexPathList;->dexElements:[Ldalvik/system/DexPathList$Element; +Ldalvik/system/DexPathList;->dexElementsSuppressedExceptions:[Ljava/io/IOException; Ldalvik/system/DexPathList;->loadDexFile(Ljava/io/File;Ljava/io/File;Ljava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ldalvik/system/DexFile; Ldalvik/system/DexPathList;->makeDexElements(Ljava/util/List;Ljava/io/File;Ljava/util/List;Ljava/lang/ClassLoader;)[Ldalvik/system/DexPathList$Element; Ldalvik/system/DexPathList;->makeInMemoryDexElements([Ljava/nio/ByteBuffer;Ljava/util/List;)[Ldalvik/system/DexPathList$Element; @@ -3757,6 +8092,10 @@ Ldalvik/system/DexPathList;->nativeLibraryDirectories:Ljava/util/List; Ldalvik/system/DexPathList;->nativeLibraryPathElements:[Ldalvik/system/DexPathList$NativeLibraryElement; Ldalvik/system/DexPathList;->splitPaths(Ljava/lang/String;Z)Ljava/util/List; Ldalvik/system/DexPathList;->systemNativeLibraryDirectories:Ljava/util/List; +Ldalvik/system/SocketTagger;->get()Ldalvik/system/SocketTagger; +Ldalvik/system/SocketTagger;->tag(Ljava/net/Socket;)V +Ldalvik/system/SocketTagger;->untag(Ljava/net/Socket;)V +Ldalvik/system/VMDebug;->allowHiddenApiReflectionFrom(Ljava/lang/Class;)V Ldalvik/system/VMDebug;->dumpReferenceTables()V Ldalvik/system/VMDebug;->isDebuggerConnected()Z Ldalvik/system/VMRuntime;->addressOf(Ljava/lang/Object;)J @@ -3765,6 +8104,7 @@ Ldalvik/system/VMRuntime;->gcSoftReferences()V Ldalvik/system/VMRuntime;->getCurrentInstructionSet()Ljava/lang/String; Ldalvik/system/VMRuntime;->getExternalBytesAllocated()J Ldalvik/system/VMRuntime;->getInstructionSet(Ljava/lang/String;)Ljava/lang/String; +Ldalvik/system/VMRuntime;->getMinimumHeapSize()J Ldalvik/system/VMRuntime;->getRuntime()Ldalvik/system/VMRuntime; Ldalvik/system/VMRuntime;->is64Bit()Z Ldalvik/system/VMRuntime;->is64BitAbi(Ljava/lang/String;)Z @@ -3772,6 +8112,7 @@ Ldalvik/system/VMRuntime;->newNonMovableArray(Ljava/lang/Class;I)Ljava/lang/Obje Ldalvik/system/VMRuntime;->registerNativeAllocation(I)V Ldalvik/system/VMRuntime;->registerNativeFree(I)V Ldalvik/system/VMRuntime;->runFinalization(J)V +Ldalvik/system/VMRuntime;->runFinalizationSync()V Ldalvik/system/VMRuntime;->setMinimumHeapSize(J)J Ldalvik/system/VMRuntime;->setTargetHeapUtilization(F)F Ldalvik/system/VMRuntime;->setTargetSdkVersion(I)V @@ -3779,8 +8120,11 @@ Ldalvik/system/VMRuntime;->trackExternalAllocation(J)Z Ldalvik/system/VMRuntime;->trackExternalFree(J)V Ldalvik/system/VMRuntime;->vmInstructionSet()Ljava/lang/String; Ldalvik/system/VMRuntime;->vmLibrary()Ljava/lang/String; +Ldalvik/system/VMStack;->fillStackTraceElements(Ljava/lang/Thread;[Ljava/lang/StackTraceElement;)I Ldalvik/system/VMStack;->getCallingClassLoader()Ljava/lang/ClassLoader; Ldalvik/system/VMStack;->getStackClass2()Ljava/lang/Class; +Ldalvik/system/VMStack;->getThreadStackTrace(Ljava/lang/Thread;)[Ljava/lang/StackTraceElement; +Ljava/io/Console;->encoding()Ljava/lang/String; Ljava/io/File;->filePath:Ljava/nio/file/Path; Ljava/io/File;->fs:Ljava/io/FileSystem; Ljava/io/File;->path:Ljava/lang/String; @@ -3791,18 +8135,41 @@ Ljava/io/FileDescriptor;->getInt$()I Ljava/io/FileDescriptor;->isSocket$()Z Ljava/io/FileDescriptor;->setInt$(I)V Ljava/io/FileInputStream;->fd:Ljava/io/FileDescriptor; +Ljava/io/FileOutputStream;->channel:Ljava/nio/channels/FileChannel; Ljava/io/FileOutputStream;->fd:Ljava/io/FileDescriptor; +Ljava/io/ObjectInputStream;->bin:Ljava/io/ObjectInputStream$BlockDataInputStream; +Ljava/io/ObjectInputStream;->bytesToDoubles([BI[DII)V +Ljava/io/ObjectInputStream;->bytesToFloats([BI[FII)V +Ljava/io/ObjectOutputStream;->protocol:I +Ljava/io/ObjectStreamClass;->computeDefaultSUID(Ljava/lang/Class;)J +Ljava/io/ObjectStreamClass;->computeFieldOffsets()V +Ljava/io/ObjectStreamClass;->fields:[Ljava/io/ObjectStreamField; Ljava/io/ObjectStreamClass;->getConstructorId(Ljava/lang/Class;)J +Ljava/io/ObjectStreamClass;->getLocalDesc()Ljava/io/ObjectStreamClass; +Ljava/io/ObjectStreamClass;->getNumObjFields()I +Ljava/io/ObjectStreamClass;->getPrimDataSize()I +Ljava/io/ObjectStreamClass;->hasReadObjectMethod()Z +Ljava/io/ObjectStreamClass;->hasReadObjectNoDataMethod()Z +Ljava/io/ObjectStreamClass;->hasWriteObjectData()Z Ljava/io/ObjectStreamClass;->newInstance()Ljava/lang/Object; Ljava/io/ObjectStreamClass;->newInstance(Ljava/lang/Class;J)Ljava/lang/Object; +Ljava/io/ObjectStreamField;->getField()Ljava/lang/reflect/Field; +Ljava/io/RandomAccessFile;->fd:Ljava/io/FileDescriptor; Ljava/lang/AbstractStringBuilder;->value:[C Ljava/lang/Boolean;->value:Z +Ljava/lang/Byte;->toHexString(BZ)Ljava/lang/String; Ljava/lang/Byte;->value:B Ljava/lang/Character;->value:C +Ljava/lang/Class;-><init>()V Ljava/lang/Class;->accessFlags:I +Ljava/lang/Class;->classLoader:Ljava/lang/ClassLoader; Ljava/lang/Class;->dexCache:Ljava/lang/Object; Ljava/lang/Class;->dexClassDefIndex:I +Ljava/lang/Class;->getDeclaredMethodsUnchecked(Z)[Ljava/lang/reflect/Method; +Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;Z)Ljava/lang/reflect/Method; Ljava/lang/Class;->ifTable:[Ljava/lang/Object; +Ljava/lang/Class;->name:Ljava/lang/String; +Ljava/lang/Class;->objectSize:I Ljava/lang/ClassLoader;->parent:Ljava/lang/ClassLoader; Ljava/lang/Daemons$Daemon;->isRunning()Z Ljava/lang/Daemons$Daemon;->start()V @@ -3821,6 +8188,7 @@ Ljava/lang/Float;->value:F Ljava/lang/Integer;->value:I Ljava/lang/invoke/MethodHandles$Lookup;-><init>(Ljava/lang/Class;I)V Ljava/lang/Long;->value:J +Ljava/lang/Object;->identityHashCode(Ljava/lang/Object;)I Ljava/lang/ref/FinalizerReference;->add(Ljava/lang/Object;)V Ljava/lang/ref/FinalizerReference;->head:Ljava/lang/ref/FinalizerReference; Ljava/lang/ref/FinalizerReference;->next:Ljava/lang/ref/FinalizerReference; @@ -3829,33 +8197,55 @@ Ljava/lang/ref/FinalizerReference;->remove(Ljava/lang/ref/FinalizerReference;)V Ljava/lang/ref/Reference;->getReferent()Ljava/lang/Object; Ljava/lang/ref/Reference;->referent:Ljava/lang/Object; Ljava/lang/ref/ReferenceQueue;->add(Ljava/lang/ref/Reference;)V +Ljava/lang/reflect/AccessibleObject;->override:Z Ljava/lang/reflect/Executable;->artMethod:J Ljava/lang/reflect/Field;->accessFlags:I +Ljava/lang/reflect/Field;->getOffset()I Ljava/lang/reflect/Parameter;-><init>(Ljava/lang/String;ILjava/lang/reflect/Executable;I)V Ljava/lang/reflect/Proxy;->invoke(Ljava/lang/reflect/Proxy;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object; Ljava/lang/Runtime;->load(Ljava/lang/String;Ljava/lang/ClassLoader;)V Ljava/lang/Runtime;->loadLibrary(Ljava/lang/String;Ljava/lang/ClassLoader;)V +Ljava/lang/Runtime;->loadLibrary0(Ljava/lang/ClassLoader;Ljava/lang/String;)V Ljava/lang/Runtime;->mLibPaths:[Ljava/lang/String; Ljava/lang/Runtime;->nativeLoad(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/String; Ljava/lang/Short;->value:S +Ljava/lang/StackTraceElement;->declaringClass:Ljava/lang/String; +Ljava/lang/StackTraceElement;->fileName:Ljava/lang/String; +Ljava/lang/StackTraceElement;->lineNumber:I +Ljava/lang/StackTraceElement;->methodName:Ljava/lang/String; Ljava/lang/String;-><init>(II[C)V Ljava/lang/String;->count:I Ljava/lang/String;->getCharsNoCheck(II[CI)V +Ljava/lang/String;->hash:I +Ljava/lang/String;->indexOf([CII[CIII)I +Ljava/lang/String;->lastIndexOf([CII[CIII)I Ljava/lang/System;-><init>()V Ljava/lang/System;->arraycopy([CI[CII)V +Ljava/lang/System;->arraycopy([FI[FII)V Ljava/lang/System;->arraycopy([II[III)V +Ljava/lang/System;->arraycopy([JI[JII)V +Ljava/lang/System;->arraycopy([SI[SII)V +Ljava/lang/System;->arraycopy([ZI[ZII)V +Ljava/lang/System;->log(CLjava/lang/String;Ljava/lang/Throwable;)V +Ljava/lang/System;->logE(Ljava/lang/String;)V +Ljava/lang/System;->logE(Ljava/lang/String;Ljava/lang/Throwable;)V +Ljava/lang/System;->logW(Ljava/lang/String;Ljava/lang/Throwable;)V Ljava/lang/Thread;-><init>(Ljava/lang/ThreadGroup;Ljava/lang/String;IZ)V Ljava/lang/Thread;->contextClassLoader:Ljava/lang/ClassLoader; Ljava/lang/Thread;->daemon:Z Ljava/lang/Thread;->dispatchUncaughtException(Ljava/lang/Throwable;)V +Ljava/lang/Thread;->getUncaughtExceptionPreHandler()Ljava/lang/Thread$UncaughtExceptionHandler; Ljava/lang/Thread;->group:Ljava/lang/ThreadGroup; Ljava/lang/Thread;->inheritableThreadLocals:Ljava/lang/ThreadLocal$ThreadLocalMap; +Ljava/lang/Thread;->inheritedAccessControlContext:Ljava/security/AccessControlContext; Ljava/lang/Thread;->lock:Ljava/lang/Object; Ljava/lang/Thread;->name:Ljava/lang/String; Ljava/lang/Thread;->nativePeer:J Ljava/lang/Thread;->parkBlocker:Ljava/lang/Object; Ljava/lang/Thread;->priority:I +Ljava/lang/Thread;->target:Ljava/lang/Runnable; Ljava/lang/Thread;->threadLocals:Ljava/lang/ThreadLocal$ThreadLocalMap; +Ljava/lang/Thread;->threadSeqNumber:J Ljava/lang/ThreadGroup;->add(Ljava/lang/Thread;)V Ljava/lang/ThreadGroup;->groups:[Ljava/lang/ThreadGroup; Ljava/lang/ThreadGroup;->mainThreadGroup:Ljava/lang/ThreadGroup; @@ -3864,14 +8254,18 @@ Ljava/lang/ThreadGroup;->ngroups:I Ljava/lang/ThreadGroup;->parent:Ljava/lang/ThreadGroup; Ljava/lang/ThreadGroup;->systemThreadGroup:Ljava/lang/ThreadGroup; Ljava/lang/ThreadGroup;->threadTerminated(Ljava/lang/Thread;)V +Ljava/lang/ThreadLocal;->getMap(Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap; Ljava/lang/Throwable;->backtrace:Ljava/lang/Object; Ljava/lang/Throwable;->cause:Ljava/lang/Throwable; Ljava/lang/Throwable;->detailMessage:Ljava/lang/String; +Ljava/lang/Throwable;->getOurStackTrace()[Ljava/lang/StackTraceElement; Ljava/lang/Throwable;->nativeFillInStackTrace()Ljava/lang/Object; +Ljava/lang/Throwable;->printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V Ljava/lang/Throwable;->stackTrace:[Ljava/lang/StackTraceElement; Ljava/lang/Throwable;->suppressedExceptions:Ljava/util/List; Ljava/lang/Void;-><init>()V Ljava/net/Authenticator;->theAuthenticator:Ljava/net/Authenticator; +Ljava/net/DatagramSocket;->getFileDescriptor$()Ljava/io/FileDescriptor; Ljava/net/DatagramSocket;->impl:Ljava/net/DatagramSocketImpl; Ljava/net/HttpCookie;->assignors:Ljava/util/Map; Ljava/net/HttpCookie;->comment:Ljava/lang/String; @@ -3901,20 +8295,31 @@ Ljava/net/InetAddress$InetAddressHolder;->family:I Ljava/net/InetAddress$InetAddressHolder;->hostName:Ljava/lang/String; Ljava/net/InetAddress$InetAddressHolder;->originalHostName:Ljava/lang/String; Ljava/net/InetAddress;->clearDnsCache()V +Ljava/net/InetAddress;->getAllByNameOnNet(Ljava/lang/String;I)[Ljava/net/InetAddress; Ljava/net/InetAddress;->holder()Ljava/net/InetAddress$InetAddressHolder; Ljava/net/InetAddress;->holder:Ljava/net/InetAddress$InetAddressHolder; Ljava/net/InetAddress;->isNumeric(Ljava/lang/String;)Z Ljava/net/InetAddress;->parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress; +Ljava/net/InetSocketAddress;->holder:Ljava/net/InetSocketAddress$InetSocketAddressHolder; +Ljava/net/InterfaceAddress;-><init>()V +Ljava/net/Proxy;-><init>()V +Ljava/net/Socket;->factory:Ljava/net/SocketImplFactory; Ljava/net/Socket;->getFileDescriptor$()Ljava/io/FileDescriptor; Ljava/net/Socket;->impl:Ljava/net/SocketImpl; +Ljava/net/SocketException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V Ljava/net/SocketImpl;->serverSocket:Ljava/net/ServerSocket; Ljava/net/SocketImpl;->socket:Ljava/net/Socket; Ljava/net/URI;->fragment:Ljava/lang/String; Ljava/net/URI;->host:Ljava/lang/String; Ljava/net/URI;->port:I +Ljava/net/URI;->query:Ljava/lang/String; Ljava/net/URI;->string:Ljava/lang/String; +Ljava/net/URL;->factory:Ljava/net/URLStreamHandlerFactory; Ljava/net/URL;->handler:Ljava/net/URLStreamHandler; Ljava/net/URL;->handlers:Ljava/util/Hashtable; +Ljava/net/URL;->protocol:Ljava/lang/String; +Ljava/net/URLClassLoader;->acc:Ljava/security/AccessControlContext; +Ljava/net/URLClassLoader;->ucp:Lsun/misc/URLClassPath; Ljava/nio/Buffer;->address:J Ljava/nio/Buffer;->capacity:I Ljava/nio/Buffer;->limit:I @@ -3923,34 +8328,51 @@ Ljava/nio/Buffer;->_elementSizeShift:I Ljava/nio/ByteBuffer;->hb:[B Ljava/nio/ByteBuffer;->isReadOnly:Z Ljava/nio/ByteBuffer;->offset:I +Ljava/nio/CharBuffer;->toString(II)Ljava/lang/String; +Ljava/nio/charset/Charset;->defaultCharset:Ljava/nio/charset/Charset; Ljava/nio/charset/CharsetEncoder;->canEncode(Ljava/nio/CharBuffer;)Z Ljava/nio/DirectByteBuffer;-><init>(JI)V Ljava/nio/NIOAccess;->getBaseArray(Ljava/nio/Buffer;)Ljava/lang/Object; Ljava/nio/NIOAccess;->getBaseArrayOffset(Ljava/nio/Buffer;)I Ljava/nio/NIOAccess;->getBasePointer(Ljava/nio/Buffer;)J +Ljava/nio/NioUtils;->freeDirectBuffer(Ljava/nio/ByteBuffer;)V +Ljava/nio/NioUtils;->unsafeArray(Ljava/nio/ByteBuffer;)[B +Ljava/nio/NioUtils;->unsafeArrayOffset(Ljava/nio/ByteBuffer;)I +Ljava/security/KeyPairGenerator;->getInstance(Lsun/security/jca/GetInstance$Instance;Ljava/lang/String;)Ljava/security/KeyPairGenerator; +Ljava/security/KeyStore;->keyStoreSpi:Ljava/security/KeyStoreSpi; +Ljava/security/Signature;->getInstance(Lsun/security/jca/GetInstance$Instance;Ljava/lang/String;)Ljava/security/Signature; Ljava/security/spec/ECParameterSpec;->getCurveName()Ljava/lang/String; Ljava/security/spec/ECParameterSpec;->setCurveName(Ljava/lang/String;)V +Ljava/text/Collator;->icuColl:Landroid/icu/text/Collator; Ljava/text/DateFormat;->is24Hour:Ljava/lang/Boolean; +Ljava/text/DecimalFormatSymbols;->getPercentString()Ljava/lang/String; +Ljava/text/NumberFormat;->getInstance(Ljava/util/Locale;I)Ljava/text/NumberFormat; Ljava/time/Duration;->toSeconds()Ljava/math/BigDecimal; Ljava/time/OffsetDateTime;-><init>(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)V +Ljava/time/ZoneId;->of(Ljava/lang/String;Z)Ljava/time/ZoneId; Ljava/util/ArrayDeque;->elements:[Ljava/lang/Object; Ljava/util/ArrayDeque;->head:I Ljava/util/ArrayDeque;->tail:I +Ljava/util/ArrayList$SubList;->offset:I Ljava/util/ArrayList$SubList;->parent:Ljava/util/AbstractList; Ljava/util/ArrayList$SubList;->parentOffset:I Ljava/util/ArrayList$SubList;->size:I Ljava/util/ArrayList;->elementData:[Ljava/lang/Object; Ljava/util/ArrayList;->size:I Ljava/util/Arrays$ArrayList;->a:[Ljava/lang/Object; +Ljava/util/Arrays;->checkOffsetAndCount(III)V +Ljava/util/Arrays;->deepToString([Ljava/lang/Object;Ljava/lang/StringBuilder;Ljava/util/Set;)V Ljava/util/Calendar;->zone:Ljava/util/TimeZone; Ljava/util/Collections$EmptyList;-><init>()V Ljava/util/Collections$EmptyMap;-><init>()V Ljava/util/Collections$SynchronizedCollection;->c:Ljava/util/Collection; +Ljava/util/Collections$SynchronizedList;->list:Ljava/util/List; Ljava/util/Collections$SynchronizedMap;->m:Ljava/util/Map; Ljava/util/Collections$UnmodifiableCollection;->c:Ljava/util/Collection; Ljava/util/Collections$UnmodifiableMap;->m:Ljava/util/Map; Ljava/util/concurrent/atomic/AtomicInteger;->value:I Ljava/util/concurrent/ConcurrentHashMap$BaseIterator;->hasMoreElements()Z +Ljava/util/concurrent/CopyOnWriteArrayList;->elements:[Ljava/lang/Object; Ljava/util/concurrent/CopyOnWriteArraySet;->al:Ljava/util/concurrent/CopyOnWriteArrayList; Ljava/util/concurrent/Executors$RunnableAdapter;->task:Ljava/lang/Runnable; Ljava/util/concurrent/FutureTask;->callable:Ljava/util/concurrent/Callable; @@ -3963,26 +8385,47 @@ Ljava/util/concurrent/LinkedBlockingQueue;->capacity:I Ljava/util/concurrent/LinkedBlockingQueue;->head:Ljava/util/concurrent/LinkedBlockingQueue$Node; Ljava/util/concurrent/LinkedBlockingQueue;->putLock:Ljava/util/concurrent/locks/ReentrantLock; Ljava/util/concurrent/LinkedBlockingQueue;->takeLock:Ljava/util/concurrent/locks/ReentrantLock; +Ljava/util/concurrent/locks/ReentrantLock;->sync:Ljava/util/concurrent/locks/ReentrantLock$Sync; +Ljava/util/concurrent/PriorityBlockingQueue;->lock:Ljava/util/concurrent/locks/ReentrantLock; Ljava/util/concurrent/ThreadPoolExecutor;->allowCoreThreadTimeOut:Z +Ljava/util/concurrent/ThreadPoolExecutor;->ctl:Ljava/util/concurrent/atomic/AtomicInteger; +Ljava/util/concurrent/ThreadPoolExecutor;->defaultHandler:Ljava/util/concurrent/RejectedExecutionHandler; +Ljava/util/concurrent/ThreadPoolExecutor;->mainLock:Ljava/util/concurrent/locks/ReentrantLock; Ljava/util/EnumMap;->keyType:Ljava/lang/Class; Ljava/util/EnumSet;->elementType:Ljava/lang/Class; Ljava/util/HashMap$HashIterator;->hasNext()Z Ljava/util/HashMap$HashIterator;->remove()V +Ljava/util/HashMap$Node;->key:Ljava/lang/Object; +Ljava/util/HashMap$Node;->next:Ljava/util/HashMap$Node; +Ljava/util/HashMap$Node;->value:Ljava/lang/Object; Ljava/util/HashMap;->modCount:I Ljava/util/HashMap;->table:[Ljava/util/HashMap$Node; Ljava/util/HashSet;->map:Ljava/util/HashMap; Ljava/util/jar/JarFile;->manifest:Ljava/util/jar/Manifest; Ljava/util/LinkedHashMap$LinkedHashIterator;->hasNext()Z +Ljava/util/LinkedHashMap;->accessOrder:Z Ljava/util/LinkedHashMap;->eldest()Ljava/util/Map$Entry; +Ljava/util/LinkedList$Node;->item:Ljava/lang/Object; +Ljava/util/LinkedList$Node;->next:Ljava/util/LinkedList$Node; +Ljava/util/LinkedList;->first:Ljava/util/LinkedList$Node; Ljava/util/LinkedList;->size:I Ljava/util/Locale;->createConstant(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; +Ljava/util/Locale;->getInstance(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Ljava/util/Locale; +Ljava/util/logging/Handler;->sealed:Z +Ljava/util/logging/Logger;->treeLock:Ljava/lang/Object; +Ljava/util/logging/LogManager;->getFormatterProperty(Ljava/lang/String;Ljava/util/logging/Formatter;)Ljava/util/logging/Formatter; Ljava/util/PriorityQueue;->modCount:I +Ljava/util/PriorityQueue;->queue:[Ljava/lang/Object; Ljava/util/PriorityQueue;->size:I +Ljava/util/Properties;->saveConvert(Ljava/lang/String;ZZ)Ljava/lang/String; Ljava/util/Random;->seedUniquifier()J Ljava/util/regex/Matcher;->appendPos:I +Ljava/util/TimerTask;->period:J Ljava/util/UUID;->leastSigBits:J Ljava/util/UUID;->mostSigBits:J Ljava/util/Vector;->elementData(I)Ljava/lang/Object; +Ljava/util/zip/Adler32;->update(II)I +Ljava/util/zip/CRC32;->update(II)I Ljava/util/zip/Deflater;->buf:[B Ljava/util/zip/Deflater;->finish:Z Ljava/util/zip/Deflater;->finished:Z @@ -3996,19 +8439,79 @@ Ljava/util/zip/Inflater;->finished:Z Ljava/util/zip/Inflater;->len:I Ljava/util/zip/Inflater;->needDict:Z Ljava/util/zip/Inflater;->off:I +Ljava/util/zip/ZipConstants;->CENATT:I +Ljava/util/zip/ZipConstants;->CENATX:I +Ljava/util/zip/ZipConstants;->CENCOM:I +Ljava/util/zip/ZipConstants;->CENCRC:I +Ljava/util/zip/ZipConstants;->CENDSK:I +Ljava/util/zip/ZipConstants;->CENEXT:I +Ljava/util/zip/ZipConstants;->CENFLG:I +Ljava/util/zip/ZipConstants;->CENHDR:I +Ljava/util/zip/ZipConstants;->CENHOW:I +Ljava/util/zip/ZipConstants;->CENLEN:I +Ljava/util/zip/ZipConstants;->CENNAM:I +Ljava/util/zip/ZipConstants;->CENOFF:I +Ljava/util/zip/ZipConstants;->CENSIG:J +Ljava/util/zip/ZipConstants;->CENSIZ:I +Ljava/util/zip/ZipConstants;->CENTIM:I +Ljava/util/zip/ZipConstants;->CENVEM:I +Ljava/util/zip/ZipConstants;->CENVER:I +Ljava/util/zip/ZipConstants;->ENDCOM:I +Ljava/util/zip/ZipConstants;->ENDHDR:I +Ljava/util/zip/ZipConstants;->ENDOFF:I +Ljava/util/zip/ZipConstants;->ENDSIG:J +Ljava/util/zip/ZipConstants;->ENDSIZ:I +Ljava/util/zip/ZipConstants;->ENDSUB:I +Ljava/util/zip/ZipConstants;->ENDTOT:I +Ljava/util/zip/ZipConstants;->EXTCRC:I +Ljava/util/zip/ZipConstants;->EXTHDR:I +Ljava/util/zip/ZipConstants;->EXTLEN:I +Ljava/util/zip/ZipConstants;->EXTSIG:J +Ljava/util/zip/ZipConstants;->EXTSIZ:I +Ljava/util/zip/ZipConstants;->LOCCRC:I +Ljava/util/zip/ZipConstants;->LOCEXT:I +Ljava/util/zip/ZipConstants;->LOCFLG:I +Ljava/util/zip/ZipConstants;->LOCHDR:I +Ljava/util/zip/ZipConstants;->LOCHOW:I +Ljava/util/zip/ZipConstants;->LOCLEN:I +Ljava/util/zip/ZipConstants;->LOCNAM:I +Ljava/util/zip/ZipConstants;->LOCSIG:J +Ljava/util/zip/ZipConstants;->LOCSIZ:I +Ljava/util/zip/ZipConstants;->LOCTIM:I +Ljava/util/zip/ZipConstants;->LOCVER:I Ljava/util/zip/ZipEntry;-><init>(Ljava/lang/String;Ljava/lang/String;JJJII[BJ)V +Ljava/util/zip/ZipEntry;->method:I +Ljava/util/zip/ZipFile;->close(J)V +Ljava/util/zip/ZipFile;->getEntry(J[BZ)J Ljava/util/zip/ZipFile;->jzfile:J +Ljava/util/zip/ZipInputStream;->flag:I +Ljava/util/zip/ZipInputStream;->tmpbuf:[B +Ljava/util/zip/ZipOutputStream;->method:I +Ljava/util/zip/ZipOutputStream;->written:J +Ljavax/microedition/khronos/egl/EGL10;->eglReleaseThread()Z Ljavax/net/ssl/SSLServerSocketFactory;->defaultServerSocketFactory:Ljavax/net/ssl/SSLServerSocketFactory; +Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/net/Socket;Ljava/io/InputStream;Z)Ljava/net/Socket; Ljavax/net/ssl/SSLSocketFactory;->defaultSocketFactory:Ljavax/net/ssl/SSLSocketFactory; Llibcore/util/BasicLruCache;->map:Ljava/util/LinkedHashMap; Llibcore/util/ZoneInfo;->mTransitions:[J Lorg/apache/http/conn/ssl/SSLSocketFactory;-><init>()V Lorg/apache/http/conn/ssl/SSLSocketFactory;-><init>(Ljavax/net/ssl/SSLSocketFactory;)V +Lorg/apache/http/conn/ssl/SSLSocketFactory;->sslcontext:Ljavax/net/ssl/SSLContext; Lorg/ccil/cowan/tagsoup/AttributesImpl;->data:[Ljava/lang/String; Lorg/ccil/cowan/tagsoup/AttributesImpl;->length:I Lorg/json/JSONArray;->values:Ljava/util/List; Lorg/json/JSONObject;->append(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; Lorg/json/JSONObject;->keySet()Ljava/util/Set; +Lorg/json/JSONObject;->nameValuePairs:Ljava/util/LinkedHashMap; Lorg/json/JSONObject;->writeTo(Lorg/json/JSONStringer;)V +Lorg/w3c/dom/ls/LSSerializerFilter;->getWhatToShow()I +Lorg/w3c/dom/traversal/NodeFilter;->acceptNode(Lorg/w3c/dom/Node;)S +Lorg/w3c/dom/traversal/NodeIterator;->detach()V Lorg/w3c/dom/traversal/NodeIterator;->nextNode()Lorg/w3c/dom/Node; Lsun/misc/Unsafe;->theUnsafe:Lsun/misc/Unsafe; +Lsun/misc/Unsafe;->THE_ONE:Lsun/misc/Unsafe; +Lsun/misc/URLClassPath$JarLoader;->getJarFile()Ljava/util/jar/JarFile; +Lsun/misc/URLClassPath;->lmap:Ljava/util/HashMap; +Lsun/misc/URLClassPath;->loaders:Ljava/util/ArrayList; +Lsun/misc/URLClassPath;->urls:Ljava/util/Stack; +Lsun/security/x509/AVA;->hasRFC2253Keyword()Z diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index a183f735d74a..0ae4b7d3df66 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -857,6 +857,27 @@ public final class ActivityThread extends ClientTransactionHandler { String buildSerial, boolean autofillCompatibilityEnabled) { if (services != null) { + if (false) { + // Test code to make sure the app could see the passed-in services. + for (Object oname : services.keySet()) { + if (services.get(oname) == null) { + continue; // AM just passed in a null service. + } + String name = (String) oname; + + // See b/79378449 about the following exemption. + switch (name) { + case "package": + case Context.WINDOW_SERVICE: + continue; + } + + if (ServiceManager.getService(name) == null) { + Log.wtf(TAG, "Service " + name + " should be accessible by this app"); + } + } + } + // Setup the service cache in the ServiceManager ServiceManager.initServiceCache(services); } diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java index 7032a2fe21cf..e469098e22d5 100644 --- a/core/java/android/app/ActivityView.java +++ b/core/java/android/app/ActivityView.java @@ -24,6 +24,7 @@ import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.hardware.input.InputManager; import android.os.RemoteException; +import android.os.UserHandle; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; @@ -111,6 +112,11 @@ public class ActivityView extends ViewGroup { * @see #startActivity(Intent) */ public abstract void onActivityViewDestroyed(ActivityView view); + /** + * Called when a task is moved to the front of the stack inside the container. + * This is a filtered version of {@link TaskStackListener} + */ + public void onTaskMovedToFront(ActivityManager.StackInfo stackInfo) { } } /** @@ -155,6 +161,28 @@ public class ActivityView extends ViewGroup { /** * Launch a new activity into this container. + * <p>Activity resolved by the provided {@link Intent} must have + * {@link android.R.attr#resizeableActivity} attribute set to {@code true} in order to be + * launched here. Also, if activity is not owned by the owner of this container, it must allow + * embedding and the caller must have permission to embed. + * <p>Note: This class must finish initializing and + * {@link StateCallback#onActivityViewReady(ActivityView)} callback must be triggered before + * this method can be called. + * + * @param intent Intent used to launch an activity. + * @param user The UserHandle of the user to start this activity for. + * + * + * @see StateCallback + * @see #startActivity(PendingIntent) + */ + public void startActivity(@NonNull Intent intent, UserHandle user) { + final ActivityOptions options = prepareActivityOptions(); + getContext().startActivityAsUser(intent, options.toBundle(), user); + } + + /** + * Launch a new activity into this container. * <p>Activity resolved by the provided {@link PendingIntent} must have * {@link android.R.attr#resizeableActivity} attribute set to {@code true} in order to be * launched here. Also, if activity is not owned by the owner of this container, it must allow @@ -303,7 +331,9 @@ public class ActivityView extends ViewGroup { final DisplayManager displayManager = mContext.getSystemService(DisplayManager.class); mVirtualDisplay = displayManager.createVirtualDisplay( DISPLAY_NAME + "@" + System.identityHashCode(this), - width, height, getBaseDisplayDensity(), mSurface, 0 /* flags */); + width, height, getBaseDisplayDensity(), mSurface, + DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC + | DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY); if (mVirtualDisplay == null) { Log.e(TAG, "Failed to initialize ActivityView"); return; @@ -317,7 +347,7 @@ public class ActivityView extends ViewGroup { e.rethrowAsRuntimeException(); } mInputForwarder = InputManager.getInstance().createInputForwarder(displayId); - mTaskStackListener = new TaskBackgroundChangeListener(); + mTaskStackListener = new TaskStackListenerImpl(); try { mActivityManager.registerTaskStackListener(mTaskStackListener); } catch (RemoteException e) { @@ -403,8 +433,11 @@ public class ActivityView extends ViewGroup { * A task change listener that detects background color change of the topmost stack on our * virtual display and updates the background of the surface view. This background will be shown * when surface view is resized, but the app hasn't drawn its content in new size yet. + * It also calls StateCallback.onTaskMovedToFront to notify interested parties that the stack + * associated with the {@link ActivityView} has had a Task moved to the front. This is useful + * when needing to also bring the host Activity to the foreground at the same time. */ - private class TaskBackgroundChangeListener extends TaskStackListener { + private class TaskStackListenerImpl extends TaskStackListener { @Override public void onTaskDescriptionChanged(int taskId, ActivityManager.TaskDescription td) @@ -413,6 +446,31 @@ public class ActivityView extends ViewGroup { return; } + StackInfo stackInfo = getTopMostStackInfo(); + if (stackInfo == null) { + return; + } + // Found the topmost stack on target display. Now check if the topmost task's + // description changed. + if (taskId == stackInfo.taskIds[stackInfo.taskIds.length - 1]) { + mSurfaceView.setResizeBackgroundColor(td.getBackgroundColor()); + } + } + + @Override + public void onTaskMovedToFront(int taskId) throws RemoteException { + if (mActivityViewCallback != null) { + StackInfo stackInfo = getTopMostStackInfo(); + // if StackInfo was null or unrelated to the "move to front" then there's no use + // notifying the callback + if (stackInfo != null + && taskId == stackInfo.taskIds[stackInfo.taskIds.length - 1]) { + mActivityViewCallback.onTaskMovedToFront(stackInfo); + } + } + } + + private StackInfo getTopMostStackInfo() throws RemoteException { // Find the topmost task on our virtual display - it will define the background // color of the surface view during resizing. final int displayId = mVirtualDisplay.getDisplay().getDisplayId(); @@ -426,14 +484,10 @@ public class ActivityView extends ViewGroup { if (stackInfo.displayId != displayId) { continue; } - // Found the topmost stack on target display. Now check if the topmost task's - // description changed. - if (taskId == stackInfo.taskIds[stackInfo.taskIds.length - 1]) { - mSurfaceView.setResizeBackgroundColor(td.getBackgroundColor()); - } - break; + // Found the topmost stack on target display. + return stackInfo; } + return null; } } - } diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 07048f98d26d..21a3c0721371 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -118,6 +118,13 @@ public class AppOpsManager { */ public static final int MODE_FOREGROUND = 4; + /** + * Flag for {@link #startWatchingMode(String, String, int, OnOpChangedListener)}: + * Also get reports if the foreground state of an op's uid changes. This only works + * when watching a particular op, not when watching a package. + * @hide + */ + public static final int WATCH_FOREGROUND_CHANGES = 1 << 0; /** * @hide @@ -1900,6 +1907,21 @@ public class AppOpsManager { /** * Monitor for changes to the operating mode for the given op in the given app package. + * You can watch op changes only for your UID. + * + * @param op The operation to monitor, one of OPSTR_*. + * @param packageName The name of the application to monitor. + * @param flags Option flags: any combination of {@link #WATCH_FOREGROUND_CHANGES} or 0. + * @param callback Where to report changes. + * @hide + */ + public void startWatchingMode(String op, String packageName, int flags, + final OnOpChangedListener callback) { + startWatchingMode(strOpToOp(op), packageName, flags, callback); + } + + /** + * Monitor for changes to the operating mode for the given op in the given app package. * * <p> If you don't hold the {@link android.Manifest.permission#WATCH_APPOPS} permission * you can watch changes only for your UID. @@ -1911,6 +1933,24 @@ public class AppOpsManager { */ @RequiresPermission(value=android.Manifest.permission.WATCH_APPOPS, conditional=true) public void startWatchingMode(int op, String packageName, final OnOpChangedListener callback) { + startWatchingMode(op, packageName, 0, callback); + } + + /** + * Monitor for changes to the operating mode for the given op in the given app package. + * + * <p> If you don't hold the {@link android.Manifest.permission#WATCH_APPOPS} permission + * you can watch changes only for your UID. + * + * @param op The operation to monitor, one of OP_*. + * @param packageName The name of the application to monitor. + * @param flags Option flags: any combination of {@link #WATCH_FOREGROUND_CHANGES} or 0. + * @param callback Where to report changes. + * @hide + */ + @RequiresPermission(value=android.Manifest.permission.WATCH_APPOPS, conditional=true) + public void startWatchingMode(int op, String packageName, int flags, + final OnOpChangedListener callback) { synchronized (mModeWatchers) { IAppOpsCallback cb = mModeWatchers.get(callback); if (cb == null) { @@ -1927,7 +1967,7 @@ public class AppOpsManager { mModeWatchers.put(callback, cb); } try { - mService.startWatchingMode(op, packageName, cb); + mService.startWatchingModeWithFlags(op, packageName, flags, cb); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -2080,6 +2120,19 @@ public class AppOpsManager { } /** + * Like {@link #checkOp} but returns the <em>raw</em> mode associated with the op. + * Does not throw a security exception, does not translate {@link #MODE_FOREGROUND}. + * @hide + */ + public int unsafeCheckOpRaw(String op, int uid, String packageName) { + try { + return mService.checkOperation(strOpToOp(op), uid, packageName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Make note of an application performing an operation. Note that you must pass * in both the uid and name of the application to be checked; this function will verify * that these two match, and if not, return {@link #MODE_IGNORED}. If this call @@ -2217,7 +2270,8 @@ public class AppOpsManager { */ public int checkOpNoThrow(int op, int uid, String packageName) { try { - return mService.checkOperation(op, uid, packageName); + int mode = mService.checkOperation(op, uid, packageName); + return mode == AppOpsManager.MODE_FOREGROUND ? AppOpsManager.MODE_ALLOWED : mode; } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index 8c0cd23e5fbd..ca3257f24207 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -64,6 +64,7 @@ import java.lang.ref.WeakReference; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -668,7 +669,17 @@ public final class LoadedApk { makePaths(mActivityThread, isBundledApp, mApplicationInfo, zipPaths, libPaths); String libraryPermittedPath = mDataDir; + if (isBundledApp) { + // For bundled apps, add the base directory of the app (e.g., + // /system/app/Foo/) to the permitted paths so that it can load libraries + // embedded in module apks under the directory. For now, GmsCore is relying + // on this, but this isn't specific to the app. Also note that, we don't + // need to do this for unbundled apps as entire /data is already set to + // the permitted paths for them. + libraryPermittedPath += File.pathSeparator + + Paths.get(getAppDir()).getParent().toString(); + // This is necessary to grant bundled apps access to // libraries located in subdirectories of /system/lib libraryPermittedPath += File.pathSeparator + defaultSearchPaths; @@ -725,7 +736,13 @@ public final class LoadedApk { } if (!libPaths.isEmpty() && SystemProperties.getBoolean(PROPERTY_NAME_APPEND_NATIVE, true)) { - ApplicationLoaders.getDefault().addNative(mClassLoader, libPaths); + // Temporarily disable logging of disk reads on the Looper thread as this is necessary + StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); + try { + ApplicationLoaders.getDefault().addNative(mClassLoader, libPaths); + } finally { + StrictMode.setThreadPolicy(oldPolicy); + } } if (addedPaths != null && addedPaths.size() > 0) { diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 327d4fe7e363..f771cbd89e4b 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -7015,7 +7015,12 @@ public class Notification implements Parcelable contentView.setViewLayoutMarginEnd(R.id.notification_messaging, bindResult.getIconMarginEnd()); contentView.setInt(R.id.status_bar_latest_event_content, "setLayoutColor", - mBuilder.resolveContrastColor()); + mBuilder.isColorized() ? mBuilder.getPrimaryTextColor() + : mBuilder.resolveContrastColor()); + contentView.setInt(R.id.status_bar_latest_event_content, "setSenderTextColor", + mBuilder.getPrimaryTextColor()); + contentView.setInt(R.id.status_bar_latest_event_content, "setMessageTextColor", + mBuilder.getSecondaryTextColor()); contentView.setBoolean(R.id.status_bar_latest_event_content, "setDisplayImagesAtEnd", displayImagesAtEnd); contentView.setIcon(R.id.status_bar_latest_event_content, "setLargeIcon", diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 2feb459bcbdb..22367b21221a 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -341,7 +341,8 @@ public class DevicePolicyManager { * <li>{@link #EXTRA_PROVISIONING_WIFI_PAC_URL}, optional</li> * <li>{@link #EXTRA_PROVISIONING_SUPPORT_URL}, optional</li> * <li>{@link #EXTRA_PROVISIONING_ORGANIZATION_NAME}, optional</li> - * <li>{@link #EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE}, optional</li></ul> + * <li>{@link #EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE}, optional</li> + * <li>{@link #EXTRA_PROVISIONING_USE_MOBILE_DATA, optional </li><ul> * * @hide */ @@ -1021,6 +1022,19 @@ public class DevicePolicyManager { "android.app.extra.PROVISIONING_SKIP_USER_CONSENT"; /** + * A boolean extra indicating if mobile data should be used during NFC device owner provisioning + * for downloading the mobile device management application. If {@link + * #EXTRA_PROVISIONING_WIFI_SSID} is also specified, wifi network will be used instead. + * + * <p>Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. + * + * @hide + */ + public static final String EXTRA_PROVISIONING_USE_MOBILE_DATA = + "android.app.extra.PROVISIONING_USE_MOBILE_DATA"; + + /** * This MIME type is used for starting the device owner provisioning. * * <p>During device owner provisioning a device admin app is set as the owner of the device. @@ -3711,7 +3725,7 @@ public class DevicePolicyManager { */ public static final int PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER = DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS - | DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT; + | DevicePolicyManager.KEYGUARD_DISABLE_BIOMETRICS; /** * Called by an application that is administering the device to request that the storage system @@ -4724,12 +4738,14 @@ public class DevicePolicyManager { * <ul> * <li>{@link #KEYGUARD_DISABLE_TRUST_AGENTS}, which affects the parent user, but only if there * is no separate challenge set on the managed profile. - * <li>{@link #KEYGUARD_DISABLE_FINGERPRINT} which affects the managed profile challenge if + * <li>{@link #KEYGUARD_DISABLE_FINGERPRINT}, {@link #KEYGUARD_DISABLE_FACE} or + * {@link #KEYGUARD_DISABLE_IRIS} which affects the managed profile challenge if * there is one, or the parent user otherwise. * <li>{@link #KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS} which affects notifications generated * by applications in the managed profile. * </ul> - * {@link #KEYGUARD_DISABLE_TRUST_AGENTS} and {@link #KEYGUARD_DISABLE_FINGERPRINT} can also be + * {@link #KEYGUARD_DISABLE_TRUST_AGENTS}, {@link #KEYGUARD_DISABLE_FINGERPRINT}, + * {@link #KEYGUARD_DISABLE_FACE} and {@link #KEYGUARD_DISABLE_IRIS} can also be * set on the {@link DevicePolicyManager} instance returned by * {@link #getParentProfileInstance(ComponentName)} in order to set restrictions on the parent * profile. @@ -4740,12 +4756,16 @@ public class DevicePolicyManager { * {@link #getKeyguardDisabledFeatures(ComponentName)} * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. - * @param which {@link #KEYGUARD_DISABLE_FEATURES_NONE} (default), + * @param which The disabled features flag which can be either + * {@link #KEYGUARD_DISABLE_FEATURES_NONE} (default), + * {@link #KEYGUARD_DISABLE_FEATURES_ALL}, or a combination of * {@link #KEYGUARD_DISABLE_WIDGETS_ALL}, {@link #KEYGUARD_DISABLE_SECURE_CAMERA}, * {@link #KEYGUARD_DISABLE_SECURE_NOTIFICATIONS}, * {@link #KEYGUARD_DISABLE_TRUST_AGENTS}, * {@link #KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}, - * {@link #KEYGUARD_DISABLE_FINGERPRINT}, {@link #KEYGUARD_DISABLE_FEATURES_ALL} + * {@link #KEYGUARD_DISABLE_FINGERPRINT}, + * {@link #KEYGUARD_DISABLE_FACE}, + * {@link #KEYGUARD_DISABLE_IRIS}. * @throws SecurityException if {@code admin} is not an active administrator or does not user * {@link DeviceAdminInfo#USES_POLICY_DISABLE_KEYGUARD_FEATURES} */ diff --git a/core/java/android/app/slice/SliceManager.java b/core/java/android/app/slice/SliceManager.java index 22df6c03aee2..f682ec1c31d4 100644 --- a/core/java/android/app/slice/SliceManager.java +++ b/core/java/android/app/slice/SliceManager.java @@ -23,6 +23,7 @@ import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemService; +import android.annotation.WorkerThread; import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.Context; @@ -217,6 +218,7 @@ public class SliceManager { * @return All slices within the space. * @see SliceProvider#onGetSliceDescendants(Uri) */ + @WorkerThread public @NonNull Collection<Uri> getSliceDescendants(@NonNull Uri uri) { ContentResolver resolver = mContext.getContentResolver(); try (ContentProviderClient provider = resolver.acquireContentProviderClient(uri)) { diff --git a/core/java/android/app/slice/SliceProvider.java b/core/java/android/app/slice/SliceProvider.java index 9e4e97a011fa..6c57d81e317d 100644 --- a/core/java/android/app/slice/SliceProvider.java +++ b/core/java/android/app/slice/SliceProvider.java @@ -398,12 +398,7 @@ public abstract class SliceProvider extends ContentProvider { private Collection<Uri> handleGetDescendants(Uri uri) { mCallback = "onGetSliceDescendants"; - Handler.getMain().postDelayed(mAnr, SLICE_BIND_ANR); - try { - return onGetSliceDescendants(uri); - } finally { - Handler.getMain().removeCallbacks(mAnr); - } + return onGetSliceDescendants(uri); } private void handlePinSlice(Uri sliceUri) { diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java index 7fb97d3a0d22..1b0540230d66 100644 --- a/core/java/android/app/usage/UsageStatsManager.java +++ b/core/java/android/app/usage/UsageStatsManager.java @@ -572,13 +572,14 @@ public final class UsageStatsManager { * the sum of usages of apps in the packages array exceeds the {@code timeLimit} specified. The * observer will automatically be unregistered when the time limit is reached and the intent * is delivered. Registering an {@code observerId} that was already registered will override - * the previous one. + * the previous one. No more than 1000 unique {@code observerId} may be registered by a single + * uid at any one time. * @param observerId A unique id associated with the group of apps to be monitored. There can * be multiple groups with common packages and different time limits. * @param packages The list of packages to observe for foreground activity time. Cannot be null * and must include at least one package. * @param timeLimit The total time the set of apps can be in the foreground before the - * callbackIntent is delivered. Must be greater than 0. + * callbackIntent is delivered. Must be at least one minute. * @param timeUnit The unit for time specified in {@code timeLimit}. Cannot be null. * @param callbackIntent The PendingIntent that will be dispatched when the time limit is * exceeded by the group of apps. The delivered Intent will also contain diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java index a68f485f4374..0c91a2054b8b 100644 --- a/core/java/android/bluetooth/BluetoothHeadset.java +++ b/core/java/android/bluetooth/BluetoothHeadset.java @@ -16,6 +16,7 @@ package android.bluetooth; +import android.Manifest; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SdkConstant; @@ -633,8 +634,9 @@ public final class BluetoothHeadset implements BluetoothProfile { * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. * * @param device Bluetooth headset - * @return false if there is no headset connected of if the connected headset doesn't support - * voice recognition or on error, true otherwise + * @return false if there is no headset connected, or the connected headset doesn't support + * voice recognition, or voice recognition is already started, or audio channel is occupied, + * or on error, true otherwise */ public boolean startVoiceRecognition(BluetoothDevice device) { if (DBG) log("startVoiceRecognition()"); @@ -654,10 +656,15 @@ public final class BluetoothHeadset implements BluetoothProfile { * Stop Bluetooth Voice Recognition mode, and shut down the * Bluetooth audio path. * + * <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. + * If this function returns true, this intent will be broadcasted with + * {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_DISCONNECTED}. + * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. * * @param device Bluetooth headset - * @return false if there is no headset connected or on error, true otherwise + * @return false if there is no headset connected, or voice recognition has not started, + * or voice recognition has ended on this headset, or on error, true otherwise */ public boolean stopVoiceRecognition(BluetoothDevice device) { if (DBG) log("stopVoiceRecognition()"); @@ -798,11 +805,12 @@ public final class BluetoothHeadset implements BluetoothProfile { } /** - * Check if Bluetooth SCO audio is connected. + * Check if at least one headset's SCO audio is connected or connecting * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. * - * @return true if SCO is connected, false otherwise or on error + * @return true if at least one device's SCO audio is connected or connecting, false otherwise + * or on error * @hide */ public boolean isAudioOn() { @@ -821,11 +829,21 @@ public final class BluetoothHeadset implements BluetoothProfile { } /** - * Initiates a connection of headset audio. - * It setup SCO channel with remote connected headset device. + * Initiates a connection of headset audio to the current active device + * + * <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. + * If this function returns true, this intent will be broadcasted with + * {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_CONNECTING}. * - * @return true if successful false if there was some error such as there is no connected - * headset + * <p> {@link #EXTRA_STATE} will transition from + * {@link #STATE_AUDIO_CONNECTING} to {@link #STATE_AUDIO_CONNECTED} when + * audio connection is established and to {@link #STATE_AUDIO_DISCONNECTED} + * in case of failure to establish the audio connection. + * + * Note that this intent will not be sent if {@link BluetoothHeadset#isAudioOn()} is true + * before calling this method + * + * @return false if there was some error such as there is no active headset * @hide */ public boolean connectAudio() { @@ -844,11 +862,14 @@ public final class BluetoothHeadset implements BluetoothProfile { } /** - * Initiates a disconnection of headset audio. - * It tears down the SCO channel from remote headset device. + * Initiates a disconnection of HFP SCO audio. + * Tear down voice recognition or virtual voice call if any. + * + * <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. + * If this function returns true, this intent will be broadcasted with + * {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_DISCONNECTED}. * - * @return true if successful false if there was some error such as there is no connected SCO - * channel + * @return false if audio is not connected, or on error, true otherwise * @hide */ public boolean disconnectAudio() { @@ -867,22 +888,33 @@ public final class BluetoothHeadset implements BluetoothProfile { } /** - * Initiates a SCO channel connection with the headset (if connected). - * Also initiates a virtual voice call for Handsfree devices as many devices - * do not accept SCO audio without a call. - * This API allows the handsfree device to be used for routing non-cellular - * call audio. + * Initiates a SCO channel connection as a virtual voice call to the current active device + * Active handsfree device will be notified of incoming call and connected call. * - * @param device Remote Bluetooth Device - * @return true if successful, false if there was some error. + * <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. + * If this function returns true, this intent will be broadcasted with + * {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_CONNECTING}. + * + * <p> {@link #EXTRA_STATE} will transition from + * {@link #STATE_AUDIO_CONNECTING} to {@link #STATE_AUDIO_CONNECTED} when + * audio connection is established and to {@link #STATE_AUDIO_DISCONNECTED} + * in case of failure to establish the audio connection. + * + * @return true if successful, false if one of the following case applies + * - SCO audio is not idle (connecting or connected) + * - virtual call has already started + * - there is no active device + * - a Telecom managed call is going on + * - binder is dead or Bluetooth is disabled or other error * @hide */ - public boolean startScoUsingVirtualVoiceCall(BluetoothDevice device) { + @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN) + public boolean startScoUsingVirtualVoiceCall() { if (DBG) log("startScoUsingVirtualVoiceCall()"); final IBluetoothHeadset service = mService; - if (service != null && isEnabled() && isValidDevice(device)) { + if (service != null && isEnabled()) { try { - return service.startScoUsingVirtualVoiceCall(device); + return service.startScoUsingVirtualVoiceCall(); } catch (RemoteException e) { Log.e(TAG, e.toString()); } @@ -894,19 +926,24 @@ public final class BluetoothHeadset implements BluetoothProfile { } /** - * Terminates an ongoing SCO connection and the associated virtual - * call. + * Terminates an ongoing SCO connection and the associated virtual call. * - * @param device Remote Bluetooth Device - * @return true if successful, false if there was some error. + * <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. + * If this function returns true, this intent will be broadcasted with + * {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_DISCONNECTED}. + * + * @return true if successful, false if one of the following case applies + * - virtual voice call is not started or has ended + * - binder is dead or Bluetooth is disabled or other error * @hide */ - public boolean stopScoUsingVirtualVoiceCall(BluetoothDevice device) { + @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN) + public boolean stopScoUsingVirtualVoiceCall() { if (DBG) log("stopScoUsingVirtualVoiceCall()"); final IBluetoothHeadset service = mService; - if (service != null && isEnabled() && isValidDevice(device)) { + if (service != null && isEnabled()) { try { - return service.stopScoUsingVirtualVoiceCall(device); + return service.stopScoUsingVirtualVoiceCall(); } catch (RemoteException e) { Log.e(TAG, e.toString()); } diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index dec2cd42c5f9..ea0811086d52 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -1420,6 +1420,9 @@ public class Intent implements Parcelable, Cloneable { * Activity Action: Start Voice Command. * <p>Input: Nothing. * <p>Output: Nothing. + * <p class="note"> + * In some cases, a matching Activity may not exist, so ensure you + * safeguard against this. */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND"; @@ -5683,9 +5686,24 @@ public class Intent implements Parcelable, Cloneable { /** - * If set, resolution of this intent may take place via an instant app not - * yet on the device if there does not yet exist an app on device to - * resolve it. + * If set in an Intent passed to {@link Context#startActivity Context.startActivity()}, + * this flag will attempt to launch an instant app if no full app on the device can already + * handle the intent. + * <p> + * When attempting to resolve instant apps externally, the following {@link Intent} properties + * are supported: + * <ul> + * <li>{@link Intent#setAction(String)}</li> + * <li>{@link Intent#addCategory(String)}</li> + * <li>{@link Intent#setData(Uri)}</li> + * <li>{@link Intent#setType(String)}</li> + * <li>{@link Intent#setPackage(String)}</li> + * <li>{@link Intent#addFlags(int)}</li> + * </ul> + * <p> + * In the case that no instant app can be found, the installer will be launched to notify the + * user that the intent could not be resolved. On devices that do not support instant apps, + * the flag will be ignored. */ public static final int FLAG_ACTIVITY_MATCH_EXTERNAL = 0x00000800; diff --git a/core/java/android/content/om/OverlayInfo.java b/core/java/android/content/om/OverlayInfo.java index 6e63342698b3..edacbb0bb2b4 100644 --- a/core/java/android/content/om/OverlayInfo.java +++ b/core/java/android/content/om/OverlayInfo.java @@ -18,7 +18,6 @@ package android.content.om; import android.annotation.IntDef; import android.annotation.NonNull; -import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; @@ -39,6 +38,7 @@ public final class OverlayInfo implements Parcelable { STATE_NO_IDMAP, STATE_DISABLED, STATE_ENABLED, + STATE_ENABLED_STATIC, STATE_TARGET_UPGRADING, STATE_OVERLAY_UPGRADING, }) @@ -91,7 +91,16 @@ public final class OverlayInfo implements Parcelable { public static final int STATE_OVERLAY_UPGRADING = 5; /** - * Category for theme overlays. + * The overlay package is currently enabled because it is marked as + * 'static'. It cannot be disabled but will change state if for instance + * its target is uninstalled. + */ + public static final int STATE_ENABLED_STATIC = 6; + + /** + * Overlay category: theme. + * <p> + * Change how Android (including the status bar, dialogs, ...) looks. */ public static final String CATEGORY_THEME = "android.theme"; @@ -126,6 +135,23 @@ public final class OverlayInfo implements Parcelable { public final int userId; /** + * Priority as read from the manifest. Used if isStatic is true. Not + * intended to be exposed to 3rd party. + * + * @hide + */ + public final int priority; + + /** + * isStatic as read from the manifest. If true, the overlay is + * unconditionally loaded and cannot be unloaded. Not intended to be + * exposed to 3rd party. + * + * @hide + */ + public final boolean isStatic; + + /** * Create a new OverlayInfo based on source with an updated state. * * @param source the source OverlayInfo to base the new instance on @@ -133,17 +159,20 @@ public final class OverlayInfo implements Parcelable { */ public OverlayInfo(@NonNull OverlayInfo source, @State int state) { this(source.packageName, source.targetPackageName, source.category, source.baseCodePath, - state, source.userId); + state, source.userId, source.priority, source.isStatic); } public OverlayInfo(@NonNull String packageName, @NonNull String targetPackageName, - @Nullable String category, @NonNull String baseCodePath, int state, int userId) { + @NonNull String category, @NonNull String baseCodePath, int state, int userId, + int priority, boolean isStatic) { this.packageName = packageName; this.targetPackageName = targetPackageName; this.category = category; this.baseCodePath = baseCodePath; this.state = state; this.userId = userId; + this.priority = priority; + this.isStatic = isStatic; ensureValidState(); } @@ -154,6 +183,8 @@ public final class OverlayInfo implements Parcelable { baseCodePath = source.readString(); state = source.readInt(); userId = source.readInt(); + priority = source.readInt(); + isStatic = source.readBoolean(); ensureValidState(); } @@ -173,6 +204,7 @@ public final class OverlayInfo implements Parcelable { case STATE_NO_IDMAP: case STATE_DISABLED: case STATE_ENABLED: + case STATE_ENABLED_STATIC: case STATE_TARGET_UPGRADING: case STATE_OVERLAY_UPGRADING: break; @@ -194,6 +226,8 @@ public final class OverlayInfo implements Parcelable { dest.writeString(baseCodePath); dest.writeInt(state); dest.writeInt(userId); + dest.writeInt(priority); + dest.writeBoolean(isStatic); } public static final Parcelable.Creator<OverlayInfo> CREATOR = @@ -220,6 +254,7 @@ public final class OverlayInfo implements Parcelable { public boolean isEnabled() { switch (state) { case STATE_ENABLED: + case STATE_ENABLED_STATIC: return true; default: return false; @@ -244,6 +279,8 @@ public final class OverlayInfo implements Parcelable { return "STATE_DISABLED"; case STATE_ENABLED: return "STATE_ENABLED"; + case STATE_ENABLED_STATIC: + return "STATE_ENABLED_STATIC"; case STATE_TARGET_UPGRADING: return "STATE_TARGET_UPGRADING"; case STATE_OVERLAY_UPGRADING: @@ -261,6 +298,7 @@ public final class OverlayInfo implements Parcelable { result = prime * result + state; result = prime * result + ((packageName == null) ? 0 : packageName.hashCode()); result = prime * result + ((targetPackageName == null) ? 0 : targetPackageName.hashCode()); + result = prime * result + ((category == null) ? 0 : category.hashCode()); result = prime * result + ((baseCodePath == null) ? 0 : baseCodePath.hashCode()); return result; } diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java index 07fbfb50f193..52e28a4b4b9b 100644 --- a/core/java/android/content/pm/PackageItemInfo.java +++ b/core/java/android/content/pm/PackageItemInfo.java @@ -16,6 +16,10 @@ package android.content.pm; +import static java.lang.annotation.RetentionPolicy.SOURCE; + +import android.annotation.FloatRange; +import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.content.res.XmlResourceParser; @@ -29,7 +33,11 @@ import android.text.TextUtils; import android.util.Printer; import android.util.proto.ProtoOutputStream; +import com.android.internal.util.Preconditions; + +import java.lang.annotation.Retention; import java.text.Collator; +import java.util.BitSet; import java.util.Comparator; /** @@ -42,6 +50,47 @@ import java.util.Comparator; * in the implementation of Parcelable in subclasses. */ public class PackageItemInfo { + private static final int LINE_FEED_CODE_POINT = 10; + private static final int NBSP_CODE_POINT = 160; + + /** + * Flags for {@link #loadSafeLabel(PackageManager, float, int)} + * + * @hide + */ + @Retention(SOURCE) + @IntDef(flag = true, prefix = "SAFE_LABEL_FLAG_", + value = {SAFE_LABEL_FLAG_TRIM, SAFE_LABEL_FLAG_SINGLE_LINE, + SAFE_LABEL_FLAG_FIRST_LINE}) + public @interface SafeLabelFlags {} + + /** + * Remove {@link Character#isWhitespace(int) whitespace} and non-breaking spaces from the edges + * of the label. + * + * @see #loadSafeLabel(PackageManager, float, int) + * @hide + */ + public static final int SAFE_LABEL_FLAG_TRIM = 0x1; + + /** + * Force entire string into single line of text (no newlines). Cannot be set at the same time as + * {@link #SAFE_LABEL_FLAG_FIRST_LINE}. + * + * @see #loadSafeLabel(PackageManager, float, int) + * @hide + */ + public static final int SAFE_LABEL_FLAG_SINGLE_LINE = 0x2; + + /** + * Return only first line of text (truncate at first newline). Cannot be set at the same time as + * {@link #SAFE_LABEL_FLAG_SINGLE_LINE}. + * + * @see #loadSafeLabel(PackageManager, float, int) + * @hide + */ + public static final int SAFE_LABEL_FLAG_FIRST_LINE = 0x4; + private static final float MAX_LABEL_SIZE_PX = 500f; /** The maximum length of a safe label, in characters */ private static final int MAX_SAFE_LABEL_LENGTH = 50000; @@ -164,18 +213,7 @@ public class PackageItemInfo { } /** - * Same as {@link #loadLabel(PackageManager)} with the addition that - * the returned label is safe for being presented in the UI since it - * will not contain new lines and the length will be limited to a - * reasonable amount. This prevents a malicious party to influence UI - * layout via the app label misleading the user into performing a - * detrimental for them action. If the label is too long it will be - * truncated and ellipsized at the end. - * - * @param pm A PackageManager from which the label can be loaded; usually - * the PackageManager from which you originally retrieved this item - * @return Returns a CharSequence containing the item's label. If the - * item does not have a label, its name is returned. + * Deprecated use loadSafeLabel(PackageManager, float, int) instead * * @hide */ @@ -225,6 +263,216 @@ public class PackageItemInfo { TextUtils.TruncateAt.END); } + private static boolean isNewline(int codePoint) { + int type = Character.getType(codePoint); + return type == Character.PARAGRAPH_SEPARATOR || type == Character.LINE_SEPARATOR + || codePoint == LINE_FEED_CODE_POINT; + } + + private static boolean isWhiteSpace(int codePoint) { + return Character.isWhitespace(codePoint) || codePoint == NBSP_CODE_POINT; + } + + /** + * A special string manipulation class. Just records removals and executes the when onString() + * is called. + */ + private static class StringWithRemovedChars { + /** The original string */ + private final String mOriginal; + + /** + * One bit per char in string. If bit is set, character needs to be removed. If whole + * bit field is not initialized nothing needs to be removed. + */ + private BitSet mRemovedChars; + + StringWithRemovedChars(@NonNull String original) { + mOriginal = original; + } + + /** + * Mark all chars in a range {@code [firstRemoved - firstNonRemoved[} (not including + * firstNonRemoved) as removed. + */ + void removeRange(int firstRemoved, int firstNonRemoved) { + if (mRemovedChars == null) { + mRemovedChars = new BitSet(mOriginal.length()); + } + + mRemovedChars.set(firstRemoved, firstNonRemoved); + } + + /** + * Remove all characters before {@code firstNonRemoved}. + */ + void removeAllCharBefore(int firstNonRemoved) { + if (mRemovedChars == null) { + mRemovedChars = new BitSet(mOriginal.length()); + } + + mRemovedChars.set(0, firstNonRemoved); + } + + /** + * Remove all characters after and including {@code firstRemoved}. + */ + void removeAllCharAfter(int firstRemoved) { + if (mRemovedChars == null) { + mRemovedChars = new BitSet(mOriginal.length()); + } + + mRemovedChars.set(firstRemoved, mOriginal.length()); + } + + @Override + public String toString() { + // Common case, no chars removed + if (mRemovedChars == null) { + return mOriginal; + } + + StringBuilder sb = new StringBuilder(mOriginal.length()); + for (int i = 0; i < mOriginal.length(); i++) { + if (!mRemovedChars.get(i)) { + sb.append(mOriginal.charAt(i)); + } + } + + return sb.toString(); + } + + /** + * Return length or the original string + */ + int length() { + return mOriginal.length(); + } + + /** + * Return if a certain {@code offset} of the original string is removed + */ + boolean isRemoved(int offset) { + return mRemovedChars != null && mRemovedChars.get(offset); + } + + /** + * Return codePoint of original string at a certain {@code offset} + */ + int codePointAt(int offset) { + return mOriginal.codePointAt(offset); + } + } + + /** + * Load, clean up and truncate label before use. + * + * <p>This method is meant to remove common mistakes and nefarious formatting from strings that + * are used in sensitive parts of the UI. + * + * <p>This method first treats the string like HTML and then ... + * <ul> + * <li>Removes new lines or truncates at first new line + * <li>Trims the white-space off the end + * <li>Truncates the string to a given length + * </ul> + * ... if specified. + * + * @param ellipsizeDip Assuming maximum length of the string (in dip), assuming font size 42. + * This is roughly 50 characters for {@code ellipsizeDip == 1000}.<br /> + * Usually ellipsizing should be left to the view showing the string. If a + * string is used as an input to another string, it might be useful to + * control the length of the input string though. {@code 0} disables this + * feature. + * @return The safe label + * @hide + */ + public @NonNull CharSequence loadSafeLabel(@NonNull PackageManager pm, + @FloatRange(from = 0) float ellipsizeDip, @SafeLabelFlags int flags) { + boolean onlyKeepFirstLine = ((flags & SAFE_LABEL_FLAG_FIRST_LINE) != 0); + boolean forceSingleLine = ((flags & SAFE_LABEL_FLAG_SINGLE_LINE) != 0); + boolean trim = ((flags & SAFE_LABEL_FLAG_TRIM) != 0); + + Preconditions.checkNotNull(pm); + Preconditions.checkArgument(ellipsizeDip >= 0); + Preconditions.checkFlagsArgument(flags, SAFE_LABEL_FLAG_TRIM | SAFE_LABEL_FLAG_SINGLE_LINE + | SAFE_LABEL_FLAG_FIRST_LINE); + Preconditions.checkArgument(!(onlyKeepFirstLine && forceSingleLine), + "Cannot set SAFE_LABEL_FLAG_SINGLE_LINE and SAFE_LABEL_FLAG_FIRST_LINE at the same " + + "time"); + + // loadLabel() always returns non-null + String label = loadUnsafeLabel(pm).toString(); + + // Treat string as HTML. This + // - converts HTML symbols: e.g. ß -> ß + // - applies some HTML tags: e.g. <br> -> \n + // - removes invalid characters such as \b + // - removes html styling, such as <b> + // - applies html formatting: e.g. a<p>b</p>c -> a\n\nb\n\nc + // - replaces some html tags by "object replacement" markers: <img> -> \ufffc + // - Removes leading white space + // - Removes all trailing white space beside a single space + // - Collapses double white space + StringWithRemovedChars labelStr = new StringWithRemovedChars( + Html.fromHtml(label).toString()); + + int firstNonWhiteSpace = -1; + int firstTrailingWhiteSpace = -1; + + // Remove new lines (if requested) and control characters. + int labelLength = labelStr.length(); + for (int offset = 0; offset < labelLength; ) { + int codePoint = labelStr.codePointAt(offset); + int type = Character.getType(codePoint); + int codePointLen = Character.charCount(codePoint); + boolean isNewline = isNewline(codePoint); + + if (offset > MAX_SAFE_LABEL_LENGTH || onlyKeepFirstLine && isNewline) { + labelStr.removeAllCharAfter(offset); + break; + } else if (forceSingleLine && isNewline) { + labelStr.removeRange(offset, offset + codePointLen); + } else if (type == Character.CONTROL && !isNewline) { + labelStr.removeRange(offset, offset + codePointLen); + } else if (trim && !isWhiteSpace(codePoint)) { + // This is only executed if the code point is not removed + if (firstNonWhiteSpace == -1) { + firstNonWhiteSpace = offset; + } + firstTrailingWhiteSpace = offset + codePointLen; + } + + offset += codePointLen; + } + + if (trim) { + // Remove leading and trailing white space + if (firstNonWhiteSpace == -1) { + // No non whitespace found, remove all + labelStr.removeAllCharAfter(0); + } else { + if (firstNonWhiteSpace > 0) { + labelStr.removeAllCharBefore(firstNonWhiteSpace); + } + if (firstTrailingWhiteSpace < labelLength) { + labelStr.removeAllCharAfter(firstTrailingWhiteSpace); + } + } + } + + if (ellipsizeDip == 0) { + return labelStr.toString(); + } else { + // Truncate + final TextPaint paint = new TextPaint(); + paint.setTextSize(42); + + return TextUtils.ellipsize(labelStr.toString(), paint, ellipsizeDip, + TextUtils.TruncateAt.END); + } + } + /** * Retrieve the current graphical icon associated with this item. This * will call back on the given PackageManager to load the icon from diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 1d497c2fef6e..34ac9ae6f0f3 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -2281,6 +2281,13 @@ public abstract class PackageManager { */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_APP_WIDGETS = "android.software.app_widgets"; + /** + * Feature for {@link #getSystemAvailableFeatures} and + * {@link #hasSystemFeature}: The device supports the + * {@link android.R.attr#cantSaveState} API. + */ + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_CANT_SAVE_STATE = "android.software.cant_save_state"; /** * @hide diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index 1b80d3d5ee57..9154ce0b1455 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -1660,23 +1660,29 @@ public class Camera { * @see ShutterCallback */ public final boolean enableShutterSound(boolean enabled) { - if (!enabled) { - IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE); - IAudioService audioService = IAudioService.Stub.asInterface(b); - try { - if (audioService.isCameraSoundForced()) return false; - } catch (RemoteException e) { - Log.e(TAG, "Audio service is unavailable for queries"); + boolean canDisableShutterSound = true; + IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE); + IAudioService audioService = IAudioService.Stub.asInterface(b); + try { + if (audioService.isCameraSoundForced()) { + canDisableShutterSound = false; } + } catch (RemoteException e) { + Log.e(TAG, "Audio service is unavailable for queries"); + } + if (!enabled && !canDisableShutterSound) { + return false; } synchronized (mShutterSoundLock) { - if (enabled && mHasAppOpsPlayAudio) { - Log.i(TAG, "Shutter sound is not allowed by AppOpsManager"); - return false; - } + mShutterSoundEnabledFromApp = enabled; + // Return the result of _enableShutterSound(enabled) in all cases. + // If the shutter sound can be disabled, disable it when the device is in DnD mode. boolean ret = _enableShutterSound(enabled); - if (ret) { - mShutterSoundEnabledFromApp = enabled; + if (enabled && !mHasAppOpsPlayAudio) { + Log.i(TAG, "Shutter sound is not allowed by AppOpsManager"); + if (canDisableShutterSound) { + _enableShutterSound(false); + } } return ret; } @@ -1739,9 +1745,18 @@ public class Camera { } if (oldHasAppOpsPlayAudio != mHasAppOpsPlayAudio) { if (!mHasAppOpsPlayAudio) { + IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE); + IAudioService audioService = IAudioService.Stub.asInterface(b); + try { + if (audioService.isCameraSoundForced()) { + return; + } + } catch (RemoteException e) { + Log.e(TAG, "Audio service is unavailable for queries"); + } _enableShutterSound(false); } else { - _enableShutterSound(mShutterSoundEnabledFromApp); + enableShutterSound(mShutterSoundEnabledFromApp); } } } diff --git a/core/java/android/hardware/camera2/params/SessionConfiguration.java b/core/java/android/hardware/camera2/params/SessionConfiguration.java index 7bdb4a2f1339..8a8afb24b3f8 100644 --- a/core/java/android/hardware/camera2/params/SessionConfiguration.java +++ b/core/java/android/hardware/camera2/params/SessionConfiguration.java @@ -181,7 +181,13 @@ public final class SessionConfiguration { * to pass their initial values as part of this method. * * @param params A capture request that includes the initial values for any available - * session wide capture keys. + * session wide capture keys. Tags (see {@link CaptureRequest.Builder#setTag}) and + * output targets (see {@link CaptureRequest.Builder#addTarget}) are ignored if + * set. Parameter values not part of + * {@link CameraCharacteristics#getAvailableSessionKeys} will also be ignored. It + * is recommended to build the session parameters using the same template type as + * the initial capture request, so that the session and initial request parameters + * match as much as possible. */ public void setSessionParameters(CaptureRequest params) { mSessionParameters = params; diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 0b4b92107e42..619ec235913e 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -21,6 +21,7 @@ import android.app.job.JobParameters; import android.content.Context; import android.content.pm.ApplicationInfo; import android.server.ServerProtoEnums; +import android.service.batterystats.BatteryStatsServiceDumpHistoryProto; import android.service.batterystats.BatteryStatsServiceDumpProto; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; @@ -6030,51 +6031,51 @@ public abstract class BatteryStats implements Parcelable { } } - static void printBitDescriptions(PrintWriter pw, int oldval, int newval, HistoryTag wakelockTag, - BitDescription[] descriptions, boolean longNames) { + static void printBitDescriptions(StringBuilder sb, int oldval, int newval, + HistoryTag wakelockTag, BitDescription[] descriptions, boolean longNames) { int diff = oldval ^ newval; if (diff == 0) return; boolean didWake = false; for (int i=0; i<descriptions.length; i++) { BitDescription bd = descriptions[i]; if ((diff&bd.mask) != 0) { - pw.print(longNames ? " " : ","); + sb.append(longNames ? " " : ","); if (bd.shift < 0) { - pw.print((newval&bd.mask) != 0 ? "+" : "-"); - pw.print(longNames ? bd.name : bd.shortName); + sb.append((newval & bd.mask) != 0 ? "+" : "-"); + sb.append(longNames ? bd.name : bd.shortName); if (bd.mask == HistoryItem.STATE_WAKE_LOCK_FLAG && wakelockTag != null) { didWake = true; - pw.print("="); + sb.append("="); if (longNames) { - UserHandle.formatUid(pw, wakelockTag.uid); - pw.print(":\""); - pw.print(wakelockTag.string); - pw.print("\""); + UserHandle.formatUid(sb, wakelockTag.uid); + sb.append(":\""); + sb.append(wakelockTag.string); + sb.append("\""); } else { - pw.print(wakelockTag.poolIdx); + sb.append(wakelockTag.poolIdx); } } } else { - pw.print(longNames ? bd.name : bd.shortName); - pw.print("="); + sb.append(longNames ? bd.name : bd.shortName); + sb.append("="); int val = (newval&bd.mask)>>bd.shift; if (bd.values != null && val >= 0 && val < bd.values.length) { - pw.print(longNames? bd.values[val] : bd.shortValues[val]); + sb.append(longNames ? bd.values[val] : bd.shortValues[val]); } else { - pw.print(val); + sb.append(val); } } } } if (!didWake && wakelockTag != null) { - pw.print(longNames ? " wake_lock=" : ",w="); + sb.append(longNames ? " wake_lock=" : ",w="); if (longNames) { - UserHandle.formatUid(pw, wakelockTag.uid); - pw.print(":\""); - pw.print(wakelockTag.string); - pw.print("\""); + UserHandle.formatUid(sb, wakelockTag.uid); + sb.append(":\""); + sb.append(wakelockTag.string); + sb.append("\""); } else { - pw.print(wakelockTag.poolIdx); + sb.append(wakelockTag.poolIdx); } } } @@ -6108,339 +6109,360 @@ public abstract class BatteryStats implements Parcelable { public void printNextItem(PrintWriter pw, HistoryItem rec, long baseTime, boolean checkin, boolean verbose) { + pw.print(printNextItem(rec, baseTime, checkin, verbose)); + } + + /** Print the next history item to proto. */ + public void printNextItem(ProtoOutputStream proto, HistoryItem rec, long baseTime, + boolean verbose) { + String item = printNextItem(rec, baseTime, true, verbose); + for (String line : item.split("\n")) { + proto.write(BatteryStatsServiceDumpHistoryProto.CSV_LINES, line); + } + } + + private String printNextItem(HistoryItem rec, long baseTime, boolean checkin, + boolean verbose) { + StringBuilder item = new StringBuilder(); if (!checkin) { - pw.print(" "); - TimeUtils.formatDuration(rec.time - baseTime, pw, TimeUtils.HUNDRED_DAY_FIELD_LEN); - pw.print(" ("); - pw.print(rec.numReadInts); - pw.print(") "); + item.append(" "); + TimeUtils.formatDuration( + rec.time - baseTime, item, TimeUtils.HUNDRED_DAY_FIELD_LEN); + item.append(" ("); + item.append(rec.numReadInts); + item.append(") "); } else { - pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(','); - pw.print(HISTORY_DATA); pw.print(','); + item.append(BATTERY_STATS_CHECKIN_VERSION); item.append(','); + item.append(HISTORY_DATA); item.append(','); if (lastTime < 0) { - pw.print(rec.time - baseTime); + item.append(rec.time - baseTime); } else { - pw.print(rec.time - lastTime); + item.append(rec.time - lastTime); } lastTime = rec.time; } if (rec.cmd == HistoryItem.CMD_START) { if (checkin) { - pw.print(":"); + item.append(":"); } - pw.println("START"); + item.append("START\n"); reset(); } else if (rec.cmd == HistoryItem.CMD_CURRENT_TIME || rec.cmd == HistoryItem.CMD_RESET) { if (checkin) { - pw.print(":"); + item.append(":"); } if (rec.cmd == HistoryItem.CMD_RESET) { - pw.print("RESET:"); + item.append("RESET:"); reset(); } - pw.print("TIME:"); + item.append("TIME:"); if (checkin) { - pw.println(rec.currentTime); + item.append(rec.currentTime); + item.append("\n"); } else { - pw.print(" "); - pw.println(DateFormat.format("yyyy-MM-dd-HH-mm-ss", + item.append(" "); + item.append(DateFormat.format("yyyy-MM-dd-HH-mm-ss", rec.currentTime).toString()); + item.append("\n"); } } else if (rec.cmd == HistoryItem.CMD_SHUTDOWN) { if (checkin) { - pw.print(":"); + item.append(":"); } - pw.println("SHUTDOWN"); + item.append("SHUTDOWN\n"); } else if (rec.cmd == HistoryItem.CMD_OVERFLOW) { if (checkin) { - pw.print(":"); + item.append(":"); } - pw.println("*OVERFLOW*"); + item.append("*OVERFLOW*\n"); } else { if (!checkin) { - if (rec.batteryLevel < 10) pw.print("00"); - else if (rec.batteryLevel < 100) pw.print("0"); - pw.print(rec.batteryLevel); + if (rec.batteryLevel < 10) item.append("00"); + else if (rec.batteryLevel < 100) item.append("0"); + item.append(rec.batteryLevel); if (verbose) { - pw.print(" "); + item.append(" "); if (rec.states < 0) ; - else if (rec.states < 0x10) pw.print("0000000"); - else if (rec.states < 0x100) pw.print("000000"); - else if (rec.states < 0x1000) pw.print("00000"); - else if (rec.states < 0x10000) pw.print("0000"); - else if (rec.states < 0x100000) pw.print("000"); - else if (rec.states < 0x1000000) pw.print("00"); - else if (rec.states < 0x10000000) pw.print("0"); - pw.print(Integer.toHexString(rec.states)); + else if (rec.states < 0x10) item.append("0000000"); + else if (rec.states < 0x100) item.append("000000"); + else if (rec.states < 0x1000) item.append("00000"); + else if (rec.states < 0x10000) item.append("0000"); + else if (rec.states < 0x100000) item.append("000"); + else if (rec.states < 0x1000000) item.append("00"); + else if (rec.states < 0x10000000) item.append("0"); + item.append(Integer.toHexString(rec.states)); } } else { if (oldLevel != rec.batteryLevel) { oldLevel = rec.batteryLevel; - pw.print(",Bl="); pw.print(rec.batteryLevel); + item.append(",Bl="); item.append(rec.batteryLevel); } } if (oldStatus != rec.batteryStatus) { oldStatus = rec.batteryStatus; - pw.print(checkin ? ",Bs=" : " status="); + item.append(checkin ? ",Bs=" : " status="); switch (oldStatus) { case BatteryManager.BATTERY_STATUS_UNKNOWN: - pw.print(checkin ? "?" : "unknown"); + item.append(checkin ? "?" : "unknown"); break; case BatteryManager.BATTERY_STATUS_CHARGING: - pw.print(checkin ? "c" : "charging"); + item.append(checkin ? "c" : "charging"); break; case BatteryManager.BATTERY_STATUS_DISCHARGING: - pw.print(checkin ? "d" : "discharging"); + item.append(checkin ? "d" : "discharging"); break; case BatteryManager.BATTERY_STATUS_NOT_CHARGING: - pw.print(checkin ? "n" : "not-charging"); + item.append(checkin ? "n" : "not-charging"); break; case BatteryManager.BATTERY_STATUS_FULL: - pw.print(checkin ? "f" : "full"); + item.append(checkin ? "f" : "full"); break; default: - pw.print(oldStatus); + item.append(oldStatus); break; } } if (oldHealth != rec.batteryHealth) { oldHealth = rec.batteryHealth; - pw.print(checkin ? ",Bh=" : " health="); + item.append(checkin ? ",Bh=" : " health="); switch (oldHealth) { case BatteryManager.BATTERY_HEALTH_UNKNOWN: - pw.print(checkin ? "?" : "unknown"); + item.append(checkin ? "?" : "unknown"); break; case BatteryManager.BATTERY_HEALTH_GOOD: - pw.print(checkin ? "g" : "good"); + item.append(checkin ? "g" : "good"); break; case BatteryManager.BATTERY_HEALTH_OVERHEAT: - pw.print(checkin ? "h" : "overheat"); + item.append(checkin ? "h" : "overheat"); break; case BatteryManager.BATTERY_HEALTH_DEAD: - pw.print(checkin ? "d" : "dead"); + item.append(checkin ? "d" : "dead"); break; case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: - pw.print(checkin ? "v" : "over-voltage"); + item.append(checkin ? "v" : "over-voltage"); break; case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: - pw.print(checkin ? "f" : "failure"); + item.append(checkin ? "f" : "failure"); break; case BatteryManager.BATTERY_HEALTH_COLD: - pw.print(checkin ? "c" : "cold"); + item.append(checkin ? "c" : "cold"); break; default: - pw.print(oldHealth); + item.append(oldHealth); break; } } if (oldPlug != rec.batteryPlugType) { oldPlug = rec.batteryPlugType; - pw.print(checkin ? ",Bp=" : " plug="); + item.append(checkin ? ",Bp=" : " plug="); switch (oldPlug) { case 0: - pw.print(checkin ? "n" : "none"); + item.append(checkin ? "n" : "none"); break; case BatteryManager.BATTERY_PLUGGED_AC: - pw.print(checkin ? "a" : "ac"); + item.append(checkin ? "a" : "ac"); break; case BatteryManager.BATTERY_PLUGGED_USB: - pw.print(checkin ? "u" : "usb"); + item.append(checkin ? "u" : "usb"); break; case BatteryManager.BATTERY_PLUGGED_WIRELESS: - pw.print(checkin ? "w" : "wireless"); + item.append(checkin ? "w" : "wireless"); break; default: - pw.print(oldPlug); + item.append(oldPlug); break; } } if (oldTemp != rec.batteryTemperature) { oldTemp = rec.batteryTemperature; - pw.print(checkin ? ",Bt=" : " temp="); - pw.print(oldTemp); + item.append(checkin ? ",Bt=" : " temp="); + item.append(oldTemp); } if (oldVolt != rec.batteryVoltage) { oldVolt = rec.batteryVoltage; - pw.print(checkin ? ",Bv=" : " volt="); - pw.print(oldVolt); + item.append(checkin ? ",Bv=" : " volt="); + item.append(oldVolt); } final int chargeMAh = rec.batteryChargeUAh / 1000; if (oldChargeMAh != chargeMAh) { oldChargeMAh = chargeMAh; - pw.print(checkin ? ",Bcc=" : " charge="); - pw.print(oldChargeMAh); + item.append(checkin ? ",Bcc=" : " charge="); + item.append(oldChargeMAh); } - printBitDescriptions(pw, oldState, rec.states, rec.wakelockTag, + printBitDescriptions(item, oldState, rec.states, rec.wakelockTag, HISTORY_STATE_DESCRIPTIONS, !checkin); - printBitDescriptions(pw, oldState2, rec.states2, null, + printBitDescriptions(item, oldState2, rec.states2, null, HISTORY_STATE2_DESCRIPTIONS, !checkin); if (rec.wakeReasonTag != null) { if (checkin) { - pw.print(",wr="); - pw.print(rec.wakeReasonTag.poolIdx); + item.append(",wr="); + item.append(rec.wakeReasonTag.poolIdx); } else { - pw.print(" wake_reason="); - pw.print(rec.wakeReasonTag.uid); - pw.print(":\""); - pw.print(rec.wakeReasonTag.string); - pw.print("\""); + item.append(" wake_reason="); + item.append(rec.wakeReasonTag.uid); + item.append(":\""); + item.append(rec.wakeReasonTag.string); + item.append("\""); } } if (rec.eventCode != HistoryItem.EVENT_NONE) { - pw.print(checkin ? "," : " "); + item.append(checkin ? "," : " "); if ((rec.eventCode&HistoryItem.EVENT_FLAG_START) != 0) { - pw.print("+"); + item.append("+"); } else if ((rec.eventCode&HistoryItem.EVENT_FLAG_FINISH) != 0) { - pw.print("-"); + item.append("-"); } String[] eventNames = checkin ? HISTORY_EVENT_CHECKIN_NAMES : HISTORY_EVENT_NAMES; int idx = rec.eventCode & ~(HistoryItem.EVENT_FLAG_START | HistoryItem.EVENT_FLAG_FINISH); if (idx >= 0 && idx < eventNames.length) { - pw.print(eventNames[idx]); + item.append(eventNames[idx]); } else { - pw.print(checkin ? "Ev" : "event"); - pw.print(idx); + item.append(checkin ? "Ev" : "event"); + item.append(idx); } - pw.print("="); + item.append("="); if (checkin) { - pw.print(rec.eventTag.poolIdx); + item.append(rec.eventTag.poolIdx); } else { - pw.append(HISTORY_EVENT_INT_FORMATTERS[idx] + item.append(HISTORY_EVENT_INT_FORMATTERS[idx] .applyAsString(rec.eventTag.uid)); - pw.print(":\""); - pw.print(rec.eventTag.string); - pw.print("\""); + item.append(":\""); + item.append(rec.eventTag.string); + item.append("\""); } } - pw.println(); + item.append("\n"); if (rec.stepDetails != null) { if (!checkin) { - pw.print(" Details: cpu="); - pw.print(rec.stepDetails.userTime); - pw.print("u+"); - pw.print(rec.stepDetails.systemTime); - pw.print("s"); + item.append(" Details: cpu="); + item.append(rec.stepDetails.userTime); + item.append("u+"); + item.append(rec.stepDetails.systemTime); + item.append("s"); if (rec.stepDetails.appCpuUid1 >= 0) { - pw.print(" ("); - printStepCpuUidDetails(pw, rec.stepDetails.appCpuUid1, + item.append(" ("); + printStepCpuUidDetails(item, rec.stepDetails.appCpuUid1, rec.stepDetails.appCpuUTime1, rec.stepDetails.appCpuSTime1); if (rec.stepDetails.appCpuUid2 >= 0) { - pw.print(", "); - printStepCpuUidDetails(pw, rec.stepDetails.appCpuUid2, + item.append(", "); + printStepCpuUidDetails(item, rec.stepDetails.appCpuUid2, rec.stepDetails.appCpuUTime2, rec.stepDetails.appCpuSTime2); } if (rec.stepDetails.appCpuUid3 >= 0) { - pw.print(", "); - printStepCpuUidDetails(pw, rec.stepDetails.appCpuUid3, + item.append(", "); + printStepCpuUidDetails(item, rec.stepDetails.appCpuUid3, rec.stepDetails.appCpuUTime3, rec.stepDetails.appCpuSTime3); } - pw.print(')'); + item.append(')'); } - pw.println(); - pw.print(" /proc/stat="); - pw.print(rec.stepDetails.statUserTime); - pw.print(" usr, "); - pw.print(rec.stepDetails.statSystemTime); - pw.print(" sys, "); - pw.print(rec.stepDetails.statIOWaitTime); - pw.print(" io, "); - pw.print(rec.stepDetails.statIrqTime); - pw.print(" irq, "); - pw.print(rec.stepDetails.statSoftIrqTime); - pw.print(" sirq, "); - pw.print(rec.stepDetails.statIdlTime); - pw.print(" idle"); + item.append("\n"); + item.append(" /proc/stat="); + item.append(rec.stepDetails.statUserTime); + item.append(" usr, "); + item.append(rec.stepDetails.statSystemTime); + item.append(" sys, "); + item.append(rec.stepDetails.statIOWaitTime); + item.append(" io, "); + item.append(rec.stepDetails.statIrqTime); + item.append(" irq, "); + item.append(rec.stepDetails.statSoftIrqTime); + item.append(" sirq, "); + item.append(rec.stepDetails.statIdlTime); + item.append(" idle"); int totalRun = rec.stepDetails.statUserTime + rec.stepDetails.statSystemTime + rec.stepDetails.statIOWaitTime + rec.stepDetails.statIrqTime + rec.stepDetails.statSoftIrqTime; int total = totalRun + rec.stepDetails.statIdlTime; if (total > 0) { - pw.print(" ("); + item.append(" ("); float perc = ((float)totalRun) / ((float)total) * 100; - pw.print(String.format("%.1f%%", perc)); - pw.print(" of "); + item.append(String.format("%.1f%%", perc)); + item.append(" of "); StringBuilder sb = new StringBuilder(64); formatTimeMsNoSpace(sb, total*10); - pw.print(sb); - pw.print(")"); + item.append(sb); + item.append(")"); } - pw.print(", PlatformIdleStat "); - pw.print(rec.stepDetails.statPlatformIdleState); - pw.println(); + item.append(", PlatformIdleStat "); + item.append(rec.stepDetails.statPlatformIdleState); + item.append("\n"); - pw.print(", SubsystemPowerState "); - pw.print(rec.stepDetails.statSubsystemPowerState); - pw.println(); + item.append(", SubsystemPowerState "); + item.append(rec.stepDetails.statSubsystemPowerState); + item.append("\n"); } else { - pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(','); - pw.print(HISTORY_DATA); pw.print(",0,Dcpu="); - pw.print(rec.stepDetails.userTime); - pw.print(":"); - pw.print(rec.stepDetails.systemTime); + item.append(BATTERY_STATS_CHECKIN_VERSION); item.append(','); + item.append(HISTORY_DATA); item.append(",0,Dcpu="); + item.append(rec.stepDetails.userTime); + item.append(":"); + item.append(rec.stepDetails.systemTime); if (rec.stepDetails.appCpuUid1 >= 0) { - printStepCpuUidCheckinDetails(pw, rec.stepDetails.appCpuUid1, + printStepCpuUidCheckinDetails(item, rec.stepDetails.appCpuUid1, rec.stepDetails.appCpuUTime1, rec.stepDetails.appCpuSTime1); if (rec.stepDetails.appCpuUid2 >= 0) { - printStepCpuUidCheckinDetails(pw, rec.stepDetails.appCpuUid2, + printStepCpuUidCheckinDetails(item, rec.stepDetails.appCpuUid2, rec.stepDetails.appCpuUTime2, rec.stepDetails.appCpuSTime2); } if (rec.stepDetails.appCpuUid3 >= 0) { - printStepCpuUidCheckinDetails(pw, rec.stepDetails.appCpuUid3, + printStepCpuUidCheckinDetails(item, rec.stepDetails.appCpuUid3, rec.stepDetails.appCpuUTime3, rec.stepDetails.appCpuSTime3); } } - pw.println(); - pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(','); - pw.print(HISTORY_DATA); pw.print(",0,Dpst="); - pw.print(rec.stepDetails.statUserTime); - pw.print(','); - pw.print(rec.stepDetails.statSystemTime); - pw.print(','); - pw.print(rec.stepDetails.statIOWaitTime); - pw.print(','); - pw.print(rec.stepDetails.statIrqTime); - pw.print(','); - pw.print(rec.stepDetails.statSoftIrqTime); - pw.print(','); - pw.print(rec.stepDetails.statIdlTime); - pw.print(','); + item.append("\n"); + item.append(BATTERY_STATS_CHECKIN_VERSION); item.append(','); + item.append(HISTORY_DATA); item.append(",0,Dpst="); + item.append(rec.stepDetails.statUserTime); + item.append(','); + item.append(rec.stepDetails.statSystemTime); + item.append(','); + item.append(rec.stepDetails.statIOWaitTime); + item.append(','); + item.append(rec.stepDetails.statIrqTime); + item.append(','); + item.append(rec.stepDetails.statSoftIrqTime); + item.append(','); + item.append(rec.stepDetails.statIdlTime); + item.append(','); if (rec.stepDetails.statPlatformIdleState != null) { - pw.print(rec.stepDetails.statPlatformIdleState); + item.append(rec.stepDetails.statPlatformIdleState); if (rec.stepDetails.statSubsystemPowerState != null) { - pw.print(','); + item.append(','); } } if (rec.stepDetails.statSubsystemPowerState != null) { - pw.print(rec.stepDetails.statSubsystemPowerState); + item.append(rec.stepDetails.statSubsystemPowerState); } - pw.println(); + item.append("\n"); } } oldState = rec.states; oldState2 = rec.states2; } + + return item.toString(); } - private void printStepCpuUidDetails(PrintWriter pw, int uid, int utime, int stime) { - UserHandle.formatUid(pw, uid); - pw.print("="); - pw.print(utime); - pw.print("u+"); - pw.print(stime); - pw.print("s"); + private void printStepCpuUidDetails(StringBuilder sb, int uid, int utime, int stime) { + UserHandle.formatUid(sb, uid); + sb.append("="); + sb.append(utime); + sb.append("u+"); + sb.append(stime); + sb.append("s"); } - private void printStepCpuUidCheckinDetails(PrintWriter pw, int uid, int utime, int stime) { - pw.print('/'); - pw.print(uid); - pw.print(":"); - pw.print(utime); - pw.print(":"); - pw.print(stime); + private void printStepCpuUidCheckinDetails(StringBuilder sb, int uid, int utime, + int stime) { + sb.append('/'); + sb.append(uid); + sb.append(":"); + sb.append(utime); + sb.append(":"); + sb.append(stime); } } @@ -7046,21 +7068,30 @@ public abstract class BatteryStats implements Parcelable { } } - /** Dump #STATS_SINCE_CHARGED batterystats data to a proto. @hide */ + /** + * Dump #STATS_SINCE_CHARGED batterystats data to a proto. If the flags include + * DUMP_INCLUDE_HISTORY or DUMP_HISTORY_ONLY, only the history will be dumped. + * @hide + */ public void dumpProtoLocked(Context context, FileDescriptor fd, List<ApplicationInfo> apps, - int flags) { + int flags, long histStart) { final ProtoOutputStream proto = new ProtoOutputStream(fd); - final long bToken = proto.start(BatteryStatsServiceDumpProto.BATTERYSTATS); prepareForDumpLocked(); + if ((flags & (DUMP_INCLUDE_HISTORY | DUMP_HISTORY_ONLY)) != 0) { + dumpProtoHistoryLocked(proto, flags, histStart); + proto.flush(); + return; + } + + final long bToken = proto.start(BatteryStatsServiceDumpProto.BATTERYSTATS); + proto.write(BatteryStatsProto.REPORT_VERSION, CHECKIN_VERSION); proto.write(BatteryStatsProto.PARCEL_VERSION, getParcelVersion()); proto.write(BatteryStatsProto.START_PLATFORM_VERSION, getStartPlatformVersion()); proto.write(BatteryStatsProto.END_PLATFORM_VERSION, getEndPlatformVersion()); - // History intentionally not included in proto dump. - - if ((flags & (DUMP_HISTORY_ONLY | DUMP_DAILY_ONLY)) == 0) { + if ((flags & DUMP_DAILY_ONLY) == 0) { final BatteryStatsHelper helper = new BatteryStatsHelper(context, false, (flags & DUMP_DEVICE_WIFI_ONLY) != 0); helper.create(this); @@ -7530,6 +7561,108 @@ public abstract class BatteryStats implements Parcelable { } } + private void dumpProtoHistoryLocked(ProtoOutputStream proto, int flags, long histStart) { + if (!startIteratingHistoryLocked()) { + return; + } + + proto.write(BatteryStatsServiceDumpHistoryProto.REPORT_VERSION, CHECKIN_VERSION); + proto.write(BatteryStatsServiceDumpHistoryProto.PARCEL_VERSION, getParcelVersion()); + proto.write(BatteryStatsServiceDumpHistoryProto.START_PLATFORM_VERSION, + getStartPlatformVersion()); + proto.write(BatteryStatsServiceDumpHistoryProto.END_PLATFORM_VERSION, + getEndPlatformVersion()); + try { + long token; + // History string pool (HISTORY_STRING_POOL) + for (int i = 0; i < getHistoryStringPoolSize(); ++i) { + token = proto.start(BatteryStatsServiceDumpHistoryProto.KEYS); + proto.write(BatteryStatsServiceDumpHistoryProto.Key.INDEX, i); + proto.write(BatteryStatsServiceDumpHistoryProto.Key.UID, getHistoryTagPoolUid(i)); + proto.write(BatteryStatsServiceDumpHistoryProto.Key.TAG, + getHistoryTagPoolString(i)); + proto.end(token); + } + + // History data (HISTORY_DATA) + final HistoryPrinter hprinter = new HistoryPrinter(); + final HistoryItem rec = new HistoryItem(); + long lastTime = -1; + long baseTime = -1; + boolean printed = false; + HistoryEventTracker tracker = null; + while (getNextHistoryLocked(rec)) { + lastTime = rec.time; + if (baseTime < 0) { + baseTime = lastTime; + } + if (rec.time >= histStart) { + if (histStart >= 0 && !printed) { + if (rec.cmd == HistoryItem.CMD_CURRENT_TIME + || rec.cmd == HistoryItem.CMD_RESET + || rec.cmd == HistoryItem.CMD_START + || rec.cmd == HistoryItem.CMD_SHUTDOWN) { + printed = true; + hprinter.printNextItem(proto, rec, baseTime, + (flags & DUMP_VERBOSE) != 0); + rec.cmd = HistoryItem.CMD_UPDATE; + } else if (rec.currentTime != 0) { + printed = true; + byte cmd = rec.cmd; + rec.cmd = HistoryItem.CMD_CURRENT_TIME; + hprinter.printNextItem(proto, rec, baseTime, + (flags & DUMP_VERBOSE) != 0); + rec.cmd = cmd; + } + if (tracker != null) { + if (rec.cmd != HistoryItem.CMD_UPDATE) { + hprinter.printNextItem(proto, rec, baseTime, + (flags & DUMP_VERBOSE) != 0); + rec.cmd = HistoryItem.CMD_UPDATE; + } + int oldEventCode = rec.eventCode; + HistoryTag oldEventTag = rec.eventTag; + rec.eventTag = new HistoryTag(); + for (int i = 0; i < HistoryItem.EVENT_COUNT; i++) { + HashMap<String, SparseIntArray> active = + tracker.getStateForEvent(i); + if (active == null) { + continue; + } + for (HashMap.Entry<String, SparseIntArray> ent + : active.entrySet()) { + SparseIntArray uids = ent.getValue(); + for (int j = 0; j < uids.size(); j++) { + rec.eventCode = i; + rec.eventTag.string = ent.getKey(); + rec.eventTag.uid = uids.keyAt(j); + rec.eventTag.poolIdx = uids.valueAt(j); + hprinter.printNextItem(proto, rec, baseTime, + (flags & DUMP_VERBOSE) != 0); + rec.wakeReasonTag = null; + rec.wakelockTag = null; + } + } + } + rec.eventCode = oldEventCode; + rec.eventTag = oldEventTag; + tracker = null; + } + } + hprinter.printNextItem(proto, rec, baseTime, + (flags & DUMP_VERBOSE) != 0); + } + } + if (histStart >= 0) { + commitCurrentHistoryBatchLocked(); + proto.write(BatteryStatsServiceDumpHistoryProto.CSV_LINES, + "NEXT: " + (lastTime + 1)); + } + } finally { + finishIteratingHistoryLocked(); + } + } + private void dumpProtoSystemLocked(ProtoOutputStream proto, BatteryStatsHelper helper) { final long sToken = proto.start(BatteryStatsProto.SYSTEM); final long rawUptimeUs = SystemClock.uptimeMillis() * 1000; diff --git a/core/java/android/os/ConfigUpdate.java b/core/java/android/os/ConfigUpdate.java index dda0ed8a5e20..53b1c5183f1a 100644 --- a/core/java/android/os/ConfigUpdate.java +++ b/core/java/android/os/ConfigUpdate.java @@ -90,6 +90,14 @@ public final class ConfigUpdate { public static final String ACTION_UPDATE_NETWORK_WATCHLIST = "android.intent.action.UPDATE_NETWORK_WATCHLIST"; + /** + * Update carrier id config file. + * @hide + */ + @SystemApi + public static final String ACTION_UPDATE_CARRIER_ID_DB + = "android.os.action.UPDATE_CARRIER_ID_DB"; + private ConfigUpdate() { } } diff --git a/core/java/android/os/IStatsManager.aidl b/core/java/android/os/IStatsManager.aidl index 8c256be20479..124f2072933e 100644 --- a/core/java/android/os/IStatsManager.aidl +++ b/core/java/android/os/IStatsManager.aidl @@ -152,4 +152,10 @@ interface IStatsManager { * Requires Manifest.permission.DUMP. */ void unsetBroadcastSubscriber(long configKey, long subscriberId, in String packageName); + + /** + * Apps can send an atom via this application breadcrumb with the specified label and state for + * this label. This allows building custom metrics and predicates. + */ + void sendAppBreadcrumbAtom(int label, int state); } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 803abf3f5f0d..10ee728dfc89 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -123,6 +123,10 @@ public final class Settings { * Input: Nothing. * <p> * Output: Nothing. + * + * <p class="note"> + * In some cases, a matching Activity may not exist, so ensure you + * safeguard against this. */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_APN_SETTINGS = "android.settings.APN_SETTINGS"; @@ -882,6 +886,10 @@ public final class Settings { * Applications can also use {@link android.net.ConnectivityManager#getRestrictBackgroundStatus * ConnectivityManager#getRestrictBackgroundStatus()} to determine the * status of the background data restrictions for them. + * + * <p class="note"> + * In some cases, a matching Activity may not exist, so ensure you + * safeguard against this. */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS = @@ -1148,6 +1156,10 @@ public final class Settings { * Input: Nothing. * <p> * Output: Nothing. + * + * <p class="note"> + * In some cases, a matching Activity may not exist, so ensure you + * safeguard against this. */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS @@ -8902,6 +8914,14 @@ public final class Settings { public static final String PRIV_APP_OOB_ENABLED = "priv_app_oob_enabled"; /** + * Comma separated list of privileged package names, which will be running out-of-box APK. + * Default: "ALL" + * + * @hide + */ + public static final String PRIV_APP_OOB_LIST = "priv_app_oob_list"; + + /** * The interval in milliseconds at which location requests will be throttled when they are * coming from the background. * @@ -10417,6 +10437,25 @@ public final class Settings { public static final String ACTIVITY_MANAGER_CONSTANTS = "activity_manager_constants"; /** + * App ops specific settings. + * This is encoded as a key=value list, separated by commas. Ex: + * + * "state_settle_time=10000" + * + * The following keys are supported: + * + * <pre> + * state_settle_time (long) + * </pre> + * + * <p> + * Type: string + * @hide + * @see com.android.server.AppOpsService.Constants + */ + public static final String APP_OPS_CONSTANTS = "app_ops_constants"; + + /** * Device Idle (Doze) specific settings. * This is encoded as a key=value list, separated by commas. Ex: * @@ -12429,7 +12468,7 @@ public final class Settings { */ public static final String MULTI_SIM_SMS_SUBSCRIPTION = "multi_sim_sms"; - /** + /** * Used to provide option to user to select subscription during send SMS. * The value 1 - enable, 0 - disable * @hide @@ -12571,6 +12610,28 @@ public final class Settings { "notification_snooze_options"; /** + * Settings key for the ratio of notification dismissals to notification views - one of the + * criteria for showing the notification blocking helper. + * + * <p>The value is a float ranging from 0.0 to 1.0 (the closer to 0.0, the more intrusive + * the blocking helper will be). + * + * @hide + */ + public static final String BLOCKING_HELPER_DISMISS_TO_VIEW_RATIO_LIMIT = + "blocking_helper_dismiss_to_view_ratio"; + + /** + * Settings key for the longest streak of dismissals - one of the criteria for showing the + * notification blocking helper. + * + * <p>The value is an integer greater than 0. + * + * @hide + */ + public static final String BLOCKING_HELPER_STREAK_LIMIT = "blocking_helper_streak_limit"; + + /** * Configuration flags for SQLite Compatibility WAL. Encoded as a key-value list, separated * by commas. E.g.: compatibility_wal_supported=true, wal_syncmode=OFF * diff --git a/core/java/android/se/omapi/SEService.java b/core/java/android/se/omapi/SEService.java index 14727f027897..00060ab8ef4a 100644 --- a/core/java/android/se/omapi/SEService.java +++ b/core/java/android/se/omapi/SEService.java @@ -253,7 +253,7 @@ public final class SEService { * @return String containing the OpenMobile API version (e.g. "3.0"). */ public @NonNull String getVersion() { - return "3.2"; + return "3.3"; } @NonNull ISecureElementListener getListener() { diff --git a/core/java/android/security/keystore/recovery/TrustedRootCertificates.java b/core/java/android/security/keystore/recovery/TrustedRootCertificates.java index a96dab68003b..c5f82c15858e 100644 --- a/core/java/android/security/keystore/recovery/TrustedRootCertificates.java +++ b/core/java/android/security/keystore/recovery/TrustedRootCertificates.java @@ -73,34 +73,34 @@ public final class TrustedRootCertificates { "INSECURE_PSWD_"; private static final String GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_BASE64 = "" - + "MIIFJjCCAw6gAwIBAgIJAIobXsJlzhNdMA0GCSqGSIb3DQEBDQUAMCAxHjAcBgNV" - + "BAMMFUdvb2dsZSBDcnlwdEF1dGhWYXVsdDAeFw0xODAyMDIxOTM5MTRaFw0zODAx" - + "MjgxOTM5MTRaMCAxHjAcBgNVBAMMFUdvb2dsZSBDcnlwdEF1dGhWYXVsdDCCAiIw" - + "DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2OT5i40/H7LINg/lq/0G0hR65P" - + "Q4Mud3OnuVt6UIYV2T18+v6qW1yJd5FcnND/ZKPau4aUAYklqJuSVjOXQD0BjgS2" - + "98Xa4dSn8Ci1rUR+5tdmrxqbYUdT2ZvJIUMMR6fRoqi+LlAbKECrV+zYQTyLU68w" - + "V66hQpAButjJKiZzkXjmKLfJ5IWrNEn17XM988rk6qAQn/BYCCQGf3rQuJeksGmA" - + "N1lJOwNYxmWUyouVwqwZthNEWqTuEyBFMkAT+99PXW7oVDc7oU5cevuihxQWNTYq" - + "viGB8cck6RW3cmqrDSaJF/E+N0cXFKyYC7FDcggt6k3UrxNKTuySdDEa8+2RTQqU" - + "Y9npxBlQE+x9Ig56OI1BG3bSBsGdPgjpyHadZeh2tgk+oqlGsSsum24YxaxuSysT" - + "Qfcu/XhyfUXavfmGrBOXerTzIl5oBh/F5aHTV85M2tYEG0qsPPvSpZAWtdJ/2rca" - + "OxvhwOL+leZKr8McjXVR00lBsRuKXX4nTUMwya09CO3QHFPFZtZvqjy2HaMOnVLQ" - + "I6b6dHEfmsHybzVOe3yPEoFQSU9UhUdmi71kwwoanPD3j9fJHmXTx4PzYYBRf1ZE" - + "o+uPgMPk7CDKQFZLjnR40z1uzu3O8aZ3AKZzP+j7T4XQKJLQLmllKtPgLgNdJyib" - + "2Glg7QhXH/jBTL6hAgMBAAGjYzBhMB0GA1UdDgQWBBSbZfrqOYH54EJpkdKMZjMc" - + "z/Hp+DAfBgNVHSMEGDAWgBSbZfrqOYH54EJpkdKMZjMcz/Hp+DAPBgNVHRMBAf8E" - + "BTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQ0FAAOCAgEAKh9nm/vW" - + "glMWp3vcCwWwJW286ecREDlI+CjGh5h+f2N4QRrXd/tKE3qQJWCqGx8sFfIUjmI7" - + "KYdsC2gyQ2cA2zl0w7pB2QkuqE6zVbnh1D17Hwl19IMyAakFaM9ad4/EoH7oQmqX" - + "nF/f5QXGZw4kf1HcgKgoCHWXjqR8MqHOcXR8n6WFqxjzJf1jxzi6Yo2dZ7PJbnE6" - + "+kHIJuiCpiHL75v5g1HM41gT3ddFFSrn88ThNPWItT5Z8WpFjryVzank2Yt02LLl" - + "WqZg9IC375QULc5B58NMnaiVJIDJQ8zoNgj1yaxqtUMnJX570lotO2OXe4ec9aCQ" - + "DIJ84YLM/qStFdeZ9416E80dchskbDG04GuVJKlzWjxAQNMRFhyaPUSBTLLg+kwP" - + "t9+AMmc+A7xjtFQLZ9fBYHOBsndJOmeSQeYeckl+z/1WQf7DdwXn/yijon7mxz4z" - + "cCczfKwTJTwBh3wR5SQr2vQm7qaXM87qxF8PCAZrdZaw5I80QwkgTj0WTZ2/GdSw" - + "d3o5SyzzBAjpwtG+4bO/BD9h9wlTsHpT6yWOZs4OYAKU5ykQrncI8OyavMggArh3" - + "/oM58v0orUWINtIc2hBlka36PhATYQiLf+AiWKnwhCaaHExoYKfQlMtXBodNvOK8" - + "xqx69x05q/qbHKEcTHrsss630vxrp1niXvA="; + + "MIIFDzCCAvegAwIBAgIQbNdueU2o0vM9gGq4N6bhjzANBgkqhkiG9w0BAQsFADAx" + + "MS8wLQYDVQQDEyZHb29nbGUgQ2xvdWQgS2V5IFZhdWx0IFNlcnZpY2UgUm9vdCBD" + + "QTAeFw0xODA1MDcxODI0MDJaFw0zODA1MDgxOTI0MDJaMDExLzAtBgNVBAMTJkdv" + + "b2dsZSBDbG91ZCBLZXkgVmF1bHQgU2VydmljZSBSb290IENBMIICIjANBgkqhkiG" + + "9w0BAQEFAAOCAg8AMIICCgKCAgEArUgzu+4o9yl22eql1BiGBq3gWXooh2ql3J+v" + + "Vuzf/ThjzdIg0xkkkw/NAFxYFi49Eo1fa/hf8wCIoAqCEs1lD6tE3cCD3T3+EQPq" + + "uh6CB2KmZDJ6mPnXvVUlUuFr0O2MwZkwylqBETzK0x5NCHgL/p47vkjhHx6LqVao" + + "bigKlHxszvVi4fkt/qq7KW3YTVxhwdLGEab+OqSfwMxdBLhMfE0K0dvFt8bs8yJA" + + "F04DJsMbRChFFBpT17Z0u53iIAAu5qVQhKrQXiIAwgboZqd+JkHLXU1fJeVT5WJO" + + "JgoJFWHkdWkHta4mSYlS72J1Q927JD1JdET1kFtH+EDtYAtx7x7F9xAAbb2tMITw" + + "s/wwd2rAzZTX/kxRbDlXVLToU05LFYPr+dFV1wvXmi0jlkIxnhdaVBqWC93p528U" + + "iUcLpib+HVzMWGdYI3G1NOa/lTp0c8LcbJjapiiVneRQJ3cIqDPOSEnEq40hyZd1" + + "jx3JnOxJMwHs8v4s9GIlb3BcOmDvA/Mu09xEMKwpHBm4TFDKXeGHOWha7ccWEECb" + + "yO5ncu6XuN2iyz9S+TuMyjZBE552p6Pu5gEC2xk+qab0NGDTHdLKLbyWn3IxdmBH" + + "yTr7iPCqmpyHngkC/pbGfvGusc5BpBugsBtlz67m4RWLJ72yAeVPO/ly/8w4orNs" + + "GWjn3s0CAwEAAaMjMCEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w" + + "DQYJKoZIhvcNAQELBQADggIBAGiWlu+4qyxgPb6RsA0mwR7V21UJ9rEpYhSN+ARp" + + "TWGiI22RCJSGK0ZrPGeFQzE2BpnVRdmLTV5jf9JUStjHoPvNYFnwLTJ0E2e9Olj8" + + "MrHrAucAUFLhl4woWz0kU/X0EB1j6Y2SXrAaZPiMMpq8BKj3mH1MbV4stZ0kiHUp" + + "Zu6PEmrojYG7FKKN30na2xXfiOfl2JusVsyHDqmUn/HjTh6zASKqE6hxE+FJRl2V" + + "Q4dcr4SviHtdbimMy2LghLnZ4FE4XhJgRnw9TeRV5C9Sn7pmnAA5X0C8ZXhXvfvr" + + "dx4fL3UKlk1Lqlb5skxoK1R9wwr+aNIO+cuR8JA5DmEDWFw5Budh/uWWZlBTyVW2" + + "ybbTB6tkmOc8c08XOgxBaKrsXALmJcluabjmN1jp81ae1epeN31jJ4N5IE5aq7Xb" + + "TFmKkwpgTTvJmqCR2XzWujlvdbdjfiABliWsnLzLQCP8eZwcM4LA5UK3f1ktHolr" + + "1OI9etSOkebE2py8LPYBJWlX36tRAagZhU/NoyOtvhRzq9rb3rbf96APEHKUFsXG" + + "9nBEd2BUKZghLKPf+JNCU/2pOGx0jdMcf+K+a1DeG0YzGYMRkFvpN3hvHYrJdByL" + + "3kSP3UtD0H2g8Ps7gRLELG2HODxbSn8PV3XtuSvxVanA6uyaaS3AZ6SxeVLvmw50" + + "7aYI"; private static final String TEST_ONLY_INSECURE_CERTIFICATE_BASE64 = "" + "MIIFMDCCAxigAwIBAgIJAIZ9/G8KQie9MA0GCSqGSIb3DQEBDQUAMCUxIzAhBgNV" @@ -134,8 +134,6 @@ public final class TrustedRootCertificates { /** * The X509 certificate of the trusted root CA cert for the recoverable key store service. - * - * TODO: Change it to the production certificate root CA before the final launch. */ private static final X509Certificate GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_CERTIFICATE = parseBase64Certificate(GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_BASE64); diff --git a/core/java/android/service/notification/NotificationAssistantService.java b/core/java/android/service/notification/NotificationAssistantService.java index 8e52bfa80eda..18e0ab00a78b 100644 --- a/core/java/android/service/notification/NotificationAssistantService.java +++ b/core/java/android/service/notification/NotificationAssistantService.java @@ -48,7 +48,10 @@ public abstract class NotificationAssistantService extends NotificationListenerS public static final String SERVICE_INTERFACE = "android.service.notification.NotificationAssistantService"; - private Handler mHandler; + /** + * @hide + */ + protected Handler mHandler; @Override protected void attachBaseContext(Context base) { diff --git a/core/java/android/service/notification/ScheduleCalendar.java b/core/java/android/service/notification/ScheduleCalendar.java index 01287104f9b2..8b7946ce7651 100644 --- a/core/java/android/service/notification/ScheduleCalendar.java +++ b/core/java/android/service/notification/ScheduleCalendar.java @@ -135,6 +135,24 @@ public class ScheduleCalendar { } /** + * @param alarm milliseconds since Epoch + * @param now milliseconds since Epoch + * @return true if alarm and now is within the schedule, else false + */ + public boolean isAlarmInSchedule(long alarm, long now) { + if (mSchedule == null || mDays.size() == 0) return false; + final long start = getTime(alarm, mSchedule.startHour, mSchedule.startMinute); + long end = getTime(alarm, mSchedule.endHour, mSchedule.endMinute); + if (end <= start) { + end = addDays(end, 1); + } + return (isInSchedule(-1, alarm, start, end) + && isInSchedule(-1, now, start, end)) + || (isInSchedule(0, alarm, start, end) + && isInSchedule(0, now, start, end)); + } + + /** * @param time milliseconds since Epoch * @return true if should exit at time for next alarm, else false */ @@ -145,7 +163,7 @@ public class ScheduleCalendar { return mSchedule.exitAtAlarm && mSchedule.nextAlarm != 0 && time >= mSchedule.nextAlarm - && isInSchedule(mSchedule.nextAlarm); + && isAlarmInSchedule(mSchedule.nextAlarm, time); } private boolean isInSchedule(int daysOffset, long time, long start, long end) { diff --git a/core/java/android/speech/RecognizerIntent.java b/core/java/android/speech/RecognizerIntent.java index ce94315c4225..362b94b83c3f 100644 --- a/core/java/android/speech/RecognizerIntent.java +++ b/core/java/android/speech/RecognizerIntent.java @@ -141,6 +141,10 @@ public class RecognizerIntent { * <ul> * <li>{@link #EXTRA_SECURE} * </ul> + * + * <p class="note"> + * In some cases, a matching Activity may not exist, so ensure you + * safeguard against this. */ public static final String ACTION_VOICE_SEARCH_HANDS_FREE = "android.speech.action.VOICE_SEARCH_HANDS_FREE"; diff --git a/core/java/android/util/StatsLog.java b/core/java/android/util/StatsLog.java index e8b4197259ce..e3de30713652 100644 --- a/core/java/android/util/StatsLog.java +++ b/core/java/android/util/StatsLog.java @@ -16,59 +16,101 @@ package android.util; -import android.os.Process; +import android.os.IStatsManager; +import android.os.RemoteException; +import android.os.ServiceManager; /** * StatsLog provides an API for developers to send events to statsd. The events can be used to * define custom metrics inside statsd. */ public final class StatsLog extends StatsLogInternal { - private static final String TAG = "StatsManager"; + private static final String TAG = "StatsLog"; + private static final boolean DEBUG = false; + + private static IStatsManager sService; private StatsLog() {} /** * Logs a start event. * - * @param label developer-chosen label that is from [0, 16). + * @param label developer-chosen label. * @return True if the log request was sent to statsd. */ public static boolean logStart(int label) { - if (label >= 0 && label < 16) { - StatsLog.write(APP_BREADCRUMB_REPORTED, Process.myUid(), - label, APP_BREADCRUMB_REPORTED__STATE__START); - return true; + synchronized (StatsLog.class) { + try { + IStatsManager service = getIStatsManagerLocked(); + if (service == null) { + if (DEBUG) Slog.d(TAG, "Failed to find statsd when logging start"); + return false; + } + service.sendAppBreadcrumbAtom(label, + StatsLog.APP_BREADCRUMB_REPORTED__STATE__START); + return true; + } catch (RemoteException e) { + sService = null; + if (DEBUG) Slog.d(TAG, "Failed to connect to statsd when logging start"); + return false; + } } - return false; } /** * Logs a stop event. * - * @param label developer-chosen label that is from [0, 16). + * @param label developer-chosen label. * @return True if the log request was sent to statsd. */ public static boolean logStop(int label) { - if (label >= 0 && label < 16) { - StatsLog.write(APP_BREADCRUMB_REPORTED, Process.myUid(), - label, APP_BREADCRUMB_REPORTED__STATE__STOP); - return true; + synchronized (StatsLog.class) { + try { + IStatsManager service = getIStatsManagerLocked(); + if (service == null) { + if (DEBUG) Slog.d(TAG, "Failed to find statsd when logging stop"); + return false; + } + service.sendAppBreadcrumbAtom(label, StatsLog.APP_BREADCRUMB_REPORTED__STATE__STOP); + return true; + } catch (RemoteException e) { + sService = null; + if (DEBUG) Slog.d(TAG, "Failed to connect to statsd when logging stop"); + return false; + } } - return false; } /** * Logs an event that does not represent a start or stop boundary. * - * @param label developer-chosen label that is from [0, 16). + * @param label developer-chosen label. * @return True if the log request was sent to statsd. */ public static boolean logEvent(int label) { - if (label >= 0 && label < 16) { - StatsLog.write(APP_BREADCRUMB_REPORTED, Process.myUid(), label, - APP_BREADCRUMB_REPORTED__STATE__UNSPECIFIED); - return true; + synchronized (StatsLog.class) { + try { + IStatsManager service = getIStatsManagerLocked(); + if (service == null) { + if (DEBUG) Slog.d(TAG, "Failed to find statsd when logging event"); + return false; + } + service.sendAppBreadcrumbAtom( + label, StatsLog.APP_BREADCRUMB_REPORTED__STATE__UNSPECIFIED); + return true; + } catch (RemoteException e) { + sService = null; + if (DEBUG) Slog.d(TAG, "Failed to connect to statsd when logging event"); + return false; + } + } + } + + private static IStatsManager getIStatsManagerLocked() throws RemoteException { + if (sService != null) { + return sService; } - return false; + sService = IStatsManager.Stub.asInterface(ServiceManager.getService("stats")); + return sService; } } diff --git a/core/java/android/util/TimeUtils.java b/core/java/android/util/TimeUtils.java index 84ae20b92f3c..05b613c3c7c7 100644 --- a/core/java/android/util/TimeUtils.java +++ b/core/java/android/util/TimeUtils.java @@ -240,6 +240,14 @@ public class TimeUtils { } /** @hide Just for debugging; not internationalized. */ + public static void formatDuration(long duration, StringBuilder builder, int fieldLen) { + synchronized (sFormatSync) { + int len = formatDurationLocked(duration, fieldLen); + builder.append(sFormatStr, 0, len); + } + } + + /** @hide Just for debugging; not internationalized. */ public static void formatDuration(long duration, PrintWriter pw, int fieldLen) { synchronized (sFormatSync) { int len = formatDurationLocked(duration, fieldLen); diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index 88300dbda1c4..4c7dc116d167 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -1132,8 +1132,7 @@ public final class AutofillManager { if (mSaveTriggerId != null && mSaveTriggerId.equals(id)) { if (sDebug) Log.d(TAG, "triggering commit by click of " + id); commitLocked(); - mMetricsLogger.action(MetricsEvent.AUTOFILL_SAVE_EXPLICITLY_TRIGGERED, - mContext.getPackageName()); + mMetricsLogger.write(newLog(MetricsEvent.AUTOFILL_SAVE_EXPLICITLY_TRIGGERED)); } } } @@ -1893,14 +1892,19 @@ public final class AutofillManager { } } - final LogMaker log = new LogMaker(MetricsEvent.AUTOFILL_DATASET_APPLIED) - .setPackageName(mContext.getPackageName()) + mMetricsLogger.write(newLog(MetricsEvent.AUTOFILL_DATASET_APPLIED) .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_VALUES, itemCount) - .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_VIEWS_FILLED, numApplied); - mMetricsLogger.write(log); + .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_VIEWS_FILLED, numApplied)); } } + private LogMaker newLog(int category) { + return new LogMaker(category) + .setPackageName(mContext.getPackageName()) + .addTaggedData(MetricsEvent.FIELD_AUTOFILL_COMPAT_MODE, + isCompatibilityModeEnabledLocked() ? 1 : 0); + } + /** * Set the tracked views. * diff --git a/core/java/android/view/textclassifier/SelectionSessionLogger.java b/core/java/android/view/textclassifier/SelectionSessionLogger.java index f2fb63eb01f3..cdacdd504eeb 100644 --- a/core/java/android/view/textclassifier/SelectionSessionLogger.java +++ b/core/java/android/view/textclassifier/SelectionSessionLogger.java @@ -86,8 +86,10 @@ public final class SelectionSessionLogger { .addTaggedData(SMART_START, event.getSmartStart()) .addTaggedData(SMART_END, event.getSmartEnd()) .addTaggedData(EVENT_START, event.getStart()) - .addTaggedData(EVENT_END, event.getEnd()) - .addTaggedData(SESSION_ID, event.getSessionId().flattenToString()); + .addTaggedData(EVENT_END, event.getEnd()); + if (event.getSessionId() != null) { + log.addTaggedData(SESSION_ID, event.getSessionId().flattenToString()); + } mMetricsLogger.write(log); debugLog(log); } diff --git a/core/java/android/view/textclassifier/SystemTextClassifier.java b/core/java/android/view/textclassifier/SystemTextClassifier.java index da86b559c5db..10191e0edbf7 100644 --- a/core/java/android/view/textclassifier/SystemTextClassifier.java +++ b/core/java/android/view/textclassifier/SystemTextClassifier.java @@ -129,6 +129,18 @@ public final class SystemTextClassifier implements TextClassifier { return mFallback.generateLinks(request); } + @Override + public void onSelectionEvent(SelectionEvent event) { + Preconditions.checkNotNull(event); + Utils.checkMainThread(); + + try { + mManagerService.onSelectionEvent(mSessionId, event); + } catch (RemoteException e) { + Log.e(LOG_TAG, "Error reporting selection event.", e); + } + } + /** * @inheritDoc */ diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 7b9ecca075ff..48775adc83cf 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -2284,7 +2284,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * Sets the key listener to be used with this TextView. This can be null * to disallow user input. Note that this method has significant and * subtle interactions with soft keyboards and other input method: - * see {@link KeyListener#getInputType() KeyListener.getContentType()} + * see {@link KeyListener#getInputType() KeyListener.getInputType()} * for important details. Calling this method will replace the current * content type of the text view with the content type returned by the * key listener. diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl index 2505ea5d448b..0ed972477123 100644 --- a/core/java/com/android/internal/app/IAppOpsService.aidl +++ b/core/java/com/android/internal/app/IAppOpsService.aidl @@ -54,4 +54,6 @@ interface IAppOpsService { void startWatchingActive(in int[] ops, IAppOpsActiveCallback callback); void stopWatchingActive(IAppOpsActiveCallback callback); boolean isOperationActive(int code, int uid, String packageName); + + void startWatchingModeWithFlags(int op, String packageName, int flags, IAppOpsCallback callback); } diff --git a/core/java/com/android/internal/globalactions/SinglePressAction.java b/core/java/com/android/internal/globalactions/SinglePressAction.java index 0b8cd0b2c266..c1c6cf225968 100644 --- a/core/java/com/android/internal/globalactions/SinglePressAction.java +++ b/core/java/com/android/internal/globalactions/SinglePressAction.java @@ -77,21 +77,27 @@ public abstract class SinglePressAction implements Action { TextView statusView = v.findViewById(R.id.status); final String status = getStatus(); - if (!TextUtils.isEmpty(status)) { - statusView.setText(status); - } else { - statusView.setVisibility(View.GONE); + if (statusView != null) { + if (!TextUtils.isEmpty(status)) { + statusView.setText(status); + } else { + statusView.setVisibility(View.GONE); + } } - if (mIcon != null) { - icon.setImageDrawable(mIcon); - icon.setScaleType(ImageView.ScaleType.CENTER_CROP); - } else if (mIconResId != 0) { - icon.setImageDrawable(context.getDrawable(mIconResId)); + if (icon != null) { + if (mIcon != null) { + icon.setImageDrawable(mIcon); + icon.setScaleType(ImageView.ScaleType.CENTER_CROP); + } else if (mIconResId != 0) { + icon.setImageDrawable(context.getDrawable(mIconResId)); + } } - if (mMessage != null) { - messageView.setText(mMessage); - } else { - messageView.setText(mMessageResId); + if (messageView != null) { + if (mMessage != null) { + messageView.setText(mMessage); + } else { + messageView.setText(mMessageResId); + } } return v; diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 7703052bc327..4cc91ec3ae72 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -5072,7 +5072,8 @@ public class BatteryStatsImpl extends BatteryStats { + Integer.toHexString(mHistoryCur.states)); addHistoryRecordLocked(elapsedRealtime, uptime); mMobileRadioPowerState = powerState; - StatsLog.write(StatsLog.MOBILE_RADIO_POWER_STATE_CHANGED, uid, powerState); + StatsLog.write_non_chained(StatsLog.MOBILE_RADIO_POWER_STATE_CHANGED, uid, null, + powerState); if (active) { mMobileRadioActiveTimer.startRunningLocked(elapsedRealtime); mMobileRadioActivePerAppTimer.startRunningLocked(elapsedRealtime); @@ -5825,7 +5826,8 @@ public class BatteryStatsImpl extends BatteryStats { + Integer.toHexString(mHistoryCur.states)); addHistoryRecordLocked(elapsedRealtime, uptime); mWifiRadioPowerState = powerState; - StatsLog.write(StatsLog.WIFI_RADIO_POWER_STATE_CHANGED, uid, powerState); + StatsLog.write_non_chained(StatsLog.WIFI_RADIO_POWER_STATE_CHANGED, uid, null, + powerState); } } diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java index cbd3ad5980f5..4ee950aa2beb 100644 --- a/core/java/com/android/internal/os/Zygote.java +++ b/core/java/com/android/internal/os/Zygote.java @@ -68,6 +68,10 @@ public final class Zygote { */ public static final int API_ENFORCEMENT_POLICY_SHIFT = Integer.numberOfTrailingZeros(API_ENFORCEMENT_POLICY_MASK); + /** + * Enable system server ART profiling. + */ + public static final int PROFILE_SYSTEM_SERVER = 1 << 14; /** No external storage should be mounted. */ public static final int MOUNT_EXTERNAL_NONE = IVold.REMOUNT_MODE_NONE; diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 33049be4b8ed..da195601f725 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -702,6 +702,12 @@ public class ZygoteInit { ZygoteConnection.applyDebuggerSystemProperty(parsedArgs); ZygoteConnection.applyInvokeWithSystemProperty(parsedArgs); + boolean profileSystemServer = SystemProperties.getBoolean( + "dalvik.vm.profilesystemserver", false); + if (profileSystemServer) { + parsedArgs.runtimeFlags |= Zygote.PROFILE_SYSTEM_SERVER; + } + /* Request to fork the system server process */ pid = Zygote.forkSystemServer( parsedArgs.uid, parsedArgs.gid, diff --git a/core/java/com/android/internal/policy/DividerSnapAlgorithm.java b/core/java/com/android/internal/policy/DividerSnapAlgorithm.java index a3c7a9ef6f91..fbf690fa1457 100644 --- a/core/java/com/android/internal/policy/DividerSnapAlgorithm.java +++ b/core/java/com/android/internal/policy/DividerSnapAlgorithm.java @@ -370,6 +370,14 @@ public class DividerSnapAlgorithm { return snapTarget; } + /** + * @return whether or not there are more than 1 split targets that do not include the two + * dismiss targets, used in deciding to display the middle target for accessibility + */ + public boolean showMiddleSplitTargetForAccessibility() { + return (mTargets.size() - 2) > 1; + } + public boolean isFirstSplitTargetAvailable() { return mFirstSplitTarget != mMiddleTarget; } diff --git a/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java b/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java index ebc2c716493a..19593011e751 100644 --- a/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java +++ b/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java @@ -23,7 +23,7 @@ import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.media.AudioManager; -import android.media.session.MediaSessionLegacyHelper; +import android.media.session.MediaSessionManager; import android.os.UserHandle; import android.provider.Settings; import android.telephony.TelephonyManager; @@ -48,6 +48,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler { KeyguardManager mKeyguardManager; SearchManager mSearchManager; TelephonyManager mTelephonyManager; + MediaSessionManager mMediaSessionManager; public PhoneFallbackEventHandler(Context context) { mContext = context; @@ -84,8 +85,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler { case KeyEvent.KEYCODE_VOLUME_UP: case KeyEvent.KEYCODE_VOLUME_DOWN: case KeyEvent.KEYCODE_VOLUME_MUTE: { - MediaSessionLegacyHelper.getHelper(mContext).sendVolumeKeyEvent( - event, AudioManager.USE_DEFAULT_STREAM_TYPE, false); + handleVolumeKeyEvent(event); return true; } @@ -216,8 +216,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler { case KeyEvent.KEYCODE_VOLUME_DOWN: case KeyEvent.KEYCODE_VOLUME_MUTE: { if (!event.isCanceled()) { - MediaSessionLegacyHelper.getHelper(mContext).sendVolumeKeyEvent( - event, AudioManager.USE_DEFAULT_STREAM_TYPE, false); + handleVolumeKeyEvent(event); } return true; } @@ -306,12 +305,25 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler { return mAudioManager; } + MediaSessionManager getMediaSessionManager() { + if (mMediaSessionManager == null) { + mMediaSessionManager = + (MediaSessionManager) mContext.getSystemService(Context.MEDIA_SESSION_SERVICE); + } + return mMediaSessionManager; + } + void sendCloseSystemWindows() { PhoneWindow.sendCloseSystemWindows(mContext, null); } + private void handleVolumeKeyEvent(KeyEvent keyEvent) { + getMediaSessionManager().dispatchVolumeKeyEventAsSystemService(keyEvent, + AudioManager.USE_DEFAULT_STREAM_TYPE); + } + private void handleMediaKeyEvent(KeyEvent keyEvent) { - MediaSessionLegacyHelper.getHelper(mContext).sendMediaButtonEvent(keyEvent, false); + getMediaSessionManager().dispatchMediaKeyEventAsSystemService(keyEvent); } private boolean isUserSetupComplete() { diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index 7ea023eb50b2..3fe8f85aeaa9 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -23,6 +23,7 @@ import static android.view.WindowManager.LayoutParams.*; import android.app.ActivityManager; import android.app.SearchManager; +import android.media.session.MediaSessionManager; import android.os.UserHandle; import android.text.TextUtils; @@ -74,7 +75,6 @@ import android.graphics.Color; import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.session.MediaController; -import android.media.session.MediaSessionLegacyHelper; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -252,6 +252,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { private AudioManager mAudioManager; private KeyguardManager mKeyguardManager; + private MediaSessionManager mMediaSessionManager; private int mUiOptions = 0; @@ -1873,22 +1874,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { // If we have a session send it the volume command, otherwise // use the suggested stream. if (mMediaController != null) { - int direction = 0; - switch (keyCode) { - case KeyEvent.KEYCODE_VOLUME_UP: - direction = AudioManager.ADJUST_RAISE; - break; - case KeyEvent.KEYCODE_VOLUME_DOWN: - direction = AudioManager.ADJUST_LOWER; - break; - case KeyEvent.KEYCODE_VOLUME_MUTE: - direction = AudioManager.ADJUST_TOGGLE_MUTE; - break; - } - mMediaController.adjustVolume(direction, AudioManager.FLAG_SHOW_UI); + mMediaController.dispatchVolumeButtonEventAsSystemService(event); } else { - MediaSessionLegacyHelper.getHelper(getContext()).sendVolumeKeyEvent( - event, mVolumeControlStreamType, false); + getMediaSessionManager().dispatchVolumeKeyEventAsSystemService(event, + mVolumeControlStreamType); } return true; } @@ -1906,7 +1895,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { case KeyEvent.KEYCODE_MEDIA_RECORD: case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: { if (mMediaController != null) { - if (mMediaController.dispatchMediaButtonEvent(event)) { + if (mMediaController.dispatchMediaButtonEventAsSystemService(event)) { return true; } } @@ -1948,6 +1937,14 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { return mAudioManager; } + private MediaSessionManager getMediaSessionManager() { + if (mMediaSessionManager == null) { + mMediaSessionManager = (MediaSessionManager) getContext().getSystemService( + Context.MEDIA_SESSION_SERVICE); + } + return mMediaSessionManager; + } + /** * A key was released and not handled by anything else in the window. * @@ -1969,12 +1966,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { // If we have a session send it the volume command, otherwise // use the suggested stream. if (mMediaController != null) { - final int flags = AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_VIBRATE - | AudioManager.FLAG_FROM_KEY; - mMediaController.adjustVolume(0, flags); + mMediaController.dispatchVolumeButtonEventAsSystemService(event); } else { - MediaSessionLegacyHelper.getHelper(getContext()).sendVolumeKeyEvent( - event, mVolumeControlStreamType, false); + getMediaSessionManager().dispatchVolumeKeyEventAsSystemService( + event, mVolumeControlStreamType); } return true; } @@ -1983,8 +1978,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { // doesn't have one of these. In this case, we execute it here and // eat the event instead, because we have mVolumeControlStreamType // and they don't. - MediaSessionLegacyHelper.getHelper(getContext()).sendVolumeKeyEvent( - event, AudioManager.USE_DEFAULT_STREAM_TYPE, false); + getMediaSessionManager().dispatchVolumeKeyEventAsSystemService( + event, AudioManager.USE_DEFAULT_STREAM_TYPE); return true; } // These are all the recognized media key codes in @@ -2001,7 +1996,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { case KeyEvent.KEYCODE_MEDIA_RECORD: case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: { if (mMediaController != null) { - if (mMediaController.dispatchMediaButtonEvent(event)) { + if (mMediaController.dispatchMediaButtonEventAsSystemService(event)) { return true; } } diff --git a/core/java/com/android/internal/util/NotificationColorUtil.java b/core/java/com/android/internal/util/NotificationColorUtil.java index 0f1307873f28..318bccf68f57 100644 --- a/core/java/com/android/internal/util/NotificationColorUtil.java +++ b/core/java/com/android/internal/util/NotificationColorUtil.java @@ -418,10 +418,23 @@ public class NotificationColorUtil { * * @param isBgDarker {@code true} if {@code bg} is darker than {@code color}. */ - private static int ensureTextContrast(int color, int bg, boolean isBgDarker) { + public static int ensureTextContrast(int color, int bg, boolean isBgDarker) { + return ensureContrast(color, bg, isBgDarker, 4.5); + } + + /** + * Finds a color with sufficient contrast over bg that has the same or darker hue as the + * original color, depending on the value of {@code isBgDarker}. + * + * @param color the color to start searching from + * @param bg the color to ensure contrast against + * @param isBgDarker {@code true} if {@code bg} is darker than {@code color} + * @param minRatio the minimum contrast ratio required + */ + public static int ensureContrast(int color, int bg, boolean isBgDarker, double minRatio) { return isBgDarker - ? findContrastColorAgainstDark(color, bg, true, 4.5) - : findContrastColor(color, bg, true, 4.5); + ? findContrastColorAgainstDark(color, bg, true, minRatio) + : findContrastColor(color, bg, true, minRatio); } /** Finds a background color for a text view with given text color and hint text color, that diff --git a/core/java/com/android/internal/widget/MessagingGroup.java b/core/java/com/android/internal/widget/MessagingGroup.java index 15b2718bea42..7116f3a92576 100644 --- a/core/java/com/android/internal/widget/MessagingGroup.java +++ b/core/java/com/android/internal/widget/MessagingGroup.java @@ -147,9 +147,7 @@ public class MessagingGroup extends LinearLayout implements MessagingLinearLayou setAvatar(sender.getIcon()); } mAvatarView.setVisibility(VISIBLE); - mSenderName.setVisibility(VISIBLE); - mTextColor = getNormalTextColor(); - mSendingTextColor = calculateSendingTextColor(); + mSenderName.setVisibility(TextUtils.isEmpty(nameOverride) ? GONE : VISIBLE); } public void setSending(boolean sending) { @@ -160,10 +158,6 @@ public class MessagingGroup extends LinearLayout implements MessagingLinearLayou } } - private int getNormalTextColor() { - return mContext.getColor(R.color.notification_secondary_text_color_light); - } - private int calculateSendingTextColor() { TypedValue alphaValue = new TypedValue(); mContext.getResources().getValue( @@ -363,6 +357,13 @@ public class MessagingGroup extends LinearLayout implements MessagingLinearLayou } } + public void setTextColors(int senderTextColor, int messageTextColor) { + mTextColor = messageTextColor; + mSendingTextColor = calculateSendingTextColor(); + updateMessageColor(); + mSenderName.setTextColor(senderTextColor); + } + public void setLayoutColor(int layoutColor) { if (layoutColor != mLayoutColor){ mLayoutColor = layoutColor; diff --git a/core/java/com/android/internal/widget/MessagingLayout.java b/core/java/com/android/internal/widget/MessagingLayout.java index af9aae3c318d..79576bd60044 100644 --- a/core/java/com/android/internal/widget/MessagingLayout.java +++ b/core/java/com/android/internal/widget/MessagingLayout.java @@ -73,6 +73,8 @@ public class MessagingLayout extends FrameLayout { private ArrayList<MessagingGroup> mGroups = new ArrayList<>(); private TextView mTitleView; private int mLayoutColor; + private int mSenderTextColor; + private int mMessageTextColor; private int mAvatarSize; private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); private Paint mTextPaint = new Paint(); @@ -301,6 +303,16 @@ public class MessagingLayout extends FrameLayout { mIsOneToOne = oneToOne; } + @RemotableViewMethod + public void setSenderTextColor(int color) { + mSenderTextColor = color; + } + + @RemotableViewMethod + public void setMessageTextColor(int color) { + mMessageTextColor = color; + } + public void setUser(Person user) { mUser = user; if (mUser.getIcon() == null) { @@ -344,6 +356,7 @@ public class MessagingLayout extends FrameLayout { } newGroup.setDisplayImagesAtEnd(mDisplayImagesAtEnd); newGroup.setLayoutColor(mLayoutColor); + newGroup.setTextColors(mSenderTextColor, mMessageTextColor); Person sender = senders.get(groupIndex); CharSequence nameOverride = null; if (sender != mUser && mNameReplacement != null) { @@ -436,10 +449,29 @@ public class MessagingLayout extends FrameLayout { } private void updateHistoricMessageVisibility() { - for (int i = 0; i < mHistoricMessages.size(); i++) { + int numHistoric = mHistoricMessages.size(); + for (int i = 0; i < numHistoric; i++) { MessagingMessage existing = mHistoricMessages.get(i); existing.setVisibility(mShowHistoricMessages ? VISIBLE : GONE); } + int numGroups = mGroups.size(); + for (int i = 0; i < numGroups; i++) { + MessagingGroup group = mGroups.get(i); + int visibleChildren = 0; + List<MessagingMessage> messages = group.getMessages(); + int numGroupMessages = messages.size(); + for (int j = 0; j < numGroupMessages; j++) { + MessagingMessage message = messages.get(j); + if (message.getVisibility() != GONE) { + visibleChildren++; + } + } + if (visibleChildren > 0 && group.getVisibility() == GONE) { + group.setVisibility(VISIBLE); + } else if (visibleChildren == 0 && group.getVisibility() != GONE) { + group.setVisibility(GONE); + } + } } @Override diff --git a/core/java/com/android/internal/widget/MessagingMessage.java b/core/java/com/android/internal/widget/MessagingMessage.java index d2b670fa2d66..ffcb50309feb 100644 --- a/core/java/com/android/internal/widget/MessagingMessage.java +++ b/core/java/com/android/internal/widget/MessagingMessage.java @@ -145,4 +145,6 @@ public interface MessagingMessage extends MessagingLinearLayout.MessagingChild { MessagingMessageState getState(); void setVisibility(int visibility); + + int getVisibility(); } diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index f8dd7ac82255..9da3b21a613e 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -747,6 +747,12 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote) jittransitionweightOptBuf, "-Xjittransitionweight:"); + property_get("dalvik.vm.profilebootimage", propBuf, ""); + if (strcmp(propBuf, "true") == 0) { + addOption("-Xps-profile-boot-class-path"); + addOption("-Xps-profile-aot-code"); + } + /* * Madvise related options. */ diff --git a/core/jni/android/graphics/ImageDecoder.cpp b/core/jni/android/graphics/ImageDecoder.cpp index 3ea604985500..df735ae12feb 100644 --- a/core/jni/android/graphics/ImageDecoder.cpp +++ b/core/jni/android/graphics/ImageDecoder.cpp @@ -139,18 +139,9 @@ static jobject ImageDecoder_nCreateFd(JNIEnv* env, jobject /*clazz*/, return throw_exception(env, ImageDecoder::kSourceMalformedData, "Could not open file", nullptr, source); } - std::unique_ptr<SkFILEStream> fileStream(new SkFILEStream(file)); - - if (::lseek(descriptor, 0, SEEK_CUR) == 0) { - return native_create(env, std::move(fileStream), source); - } - // FIXME: This allows us to pretend the current location is the beginning, - // but it would be better if SkFILEStream allowed treating its starting - // point as the beginning. - std::unique_ptr<SkStream> stream(SkFrontBufferedStream::Make(std::move(fileStream), - SkCodec::MinBufferedBytesNeeded())); - return native_create(env, std::move(stream), source); + std::unique_ptr<SkFILEStream> fileStream(new SkFILEStream(file)); + return native_create(env, std::move(fileStream), source); } static jobject ImageDecoder_nCreateInputStream(JNIEnv* env, jobject /*clazz*/, diff --git a/core/jni/android/graphics/Utils.cpp b/core/jni/android/graphics/Utils.cpp index dd9bafe3b411..462d052cbf10 100644 --- a/core/jni/android/graphics/Utils.cpp +++ b/core/jni/android/graphics/Utils.cpp @@ -49,6 +49,38 @@ SkStreamRewindable* AssetStreamAdaptor::onDuplicate() const { return NULL; } +bool AssetStreamAdaptor::hasPosition() const { + return fAsset->seek(0, SEEK_CUR) != -1; +} + +size_t AssetStreamAdaptor::getPosition() const { + const off64_t offset = fAsset->seek(0, SEEK_CUR); + if (offset == -1) { + SkDebugf("---- fAsset->seek(0, SEEK_CUR) failed\n"); + return 0; + } + + return offset; +} + +bool AssetStreamAdaptor::seek(size_t position) { + if (fAsset->seek(position, SEEK_SET) == -1) { + SkDebugf("---- fAsset->seek(0, SEEK_SET) failed\n"); + return false; + } + + return true; +} + +bool AssetStreamAdaptor::move(long offset) { + if (fAsset->seek(offset, SEEK_CUR) == -1) { + SkDebugf("---- fAsset->seek(%i, SEEK_CUR) failed\n", offset); + return false; + } + + return true; +} + size_t AssetStreamAdaptor::read(void* buffer, size_t size) { ssize_t amount; diff --git a/core/jni/android/graphics/Utils.h b/core/jni/android/graphics/Utils.h index 2f2ee9654489..ac291ea77f62 100644 --- a/core/jni/android/graphics/Utils.h +++ b/core/jni/android/graphics/Utils.h @@ -34,6 +34,10 @@ public: virtual size_t read(void* buffer, size_t size); virtual bool hasLength() const { return true; } virtual size_t getLength() const; + virtual bool hasPosition() const; + virtual size_t getPosition() const; + virtual bool seek(size_t position); + virtual bool move(long offset); virtual bool isAtEnd() const; protected: diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index 7fa224757fd2..fa9f44557d3f 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -75,9 +75,8 @@ static struct assetfiledescriptor_offsets_t { jfieldID mLength; } gAssetFileDescriptorOffsets; -static struct assetmanager_offsets_t { - jfieldID mObject; -} gAssetManagerOffsets; +// This is also used by asset_manager.cpp. +assetmanager_offsets_t gAssetManagerOffsets; static struct { jfieldID native_ptr; diff --git a/core/jni/include/android_runtime/android_util_AssetManager.h b/core/jni/include/android_runtime/android_util_AssetManager.h index 2c1e3579eb92..ac734a908bed 100644 --- a/core/jni/include/android_runtime/android_util_AssetManager.h +++ b/core/jni/include/android_runtime/android_util_AssetManager.h @@ -27,6 +27,11 @@ namespace android { extern AAssetManager* NdkAssetManagerForJavaObject(JNIEnv* env, jobject jassetmanager); extern Guarded<AssetManager2>* AssetManagerForJavaObject(JNIEnv* env, jobject jassetmanager); extern Guarded<AssetManager2>* AssetManagerForNdkAssetManager(AAssetManager* assetmanager); +struct assetmanager_offsets_t +{ + jfieldID mObject; +}; +extern assetmanager_offsets_t gAssetManagerOffsets; } // namespace android diff --git a/core/proto/android/os/incident.proto b/core/proto/android/os/incident.proto index 64e1239f36f6..3aea3a767f46 100644 --- a/core/proto/android/os/incident.proto +++ b/core/proto/android/os/incident.proto @@ -18,6 +18,7 @@ syntax = "proto2"; option java_multiple_files = true; import "frameworks/base/core/proto/android/os/backtrace.proto"; +import "frameworks/base/core/proto/android/os/batterystats.proto"; import "frameworks/base/core/proto/android/os/batterytype.proto"; import "frameworks/base/core/proto/android/os/cpufreq.proto"; import "frameworks/base/core/proto/android/os/cpuinfo.proto"; @@ -289,6 +290,14 @@ message IncidentProto { (section).args = "usb --proto" ]; + // The history can be large and may cause issues in consumers, so put the + // history in a separate section to compensate. + optional android.service.batterystats.BatteryStatsServiceDumpHistoryProto battery_history = 3022 [ + (section).type = SECTION_DUMPSYS, + (section).args = "batterystats --proto --history", + (section).userdebug_and_eng_only = true + ]; + // Reserved for OEMs. extensions 50000 to 100000; } diff --git a/core/proto/android/server/jobscheduler.proto b/core/proto/android/server/jobscheduler.proto index 0a10cece0cab..54f0934457e3 100644 --- a/core/proto/android/server/jobscheduler.proto +++ b/core/proto/android/server/jobscheduler.proto @@ -40,6 +40,7 @@ message JobSchedulerServiceDumpProto { repeated int32 next_heartbeat = 15; optional int64 last_heartbeat_time_millis = 16; optional int64 next_heartbeat_time_millis = 17; + optional bool in_parole = 18; repeated int32 started_users = 2; diff --git a/core/proto/android/service/batterystats.proto b/core/proto/android/service/batterystats.proto index 5586263d0fac..25b47d3f88f2 100644 --- a/core/proto/android/service/batterystats.proto +++ b/core/proto/android/service/batterystats.proto @@ -23,8 +23,34 @@ option java_outer_classname = "BatteryStatsServiceProto"; import "frameworks/base/core/proto/android/os/batterystats.proto"; import "frameworks/base/libs/incident/proto/android/privacy.proto"; +// Dump of batterystats aggregate data (dumpsys batterystats --proto). message BatteryStatsServiceDumpProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; optional android.os.BatteryStatsProto batterystats = 1; } + +// Dump of batterystats history data (dumpsys batterystats --proto --history). +message BatteryStatsServiceDumpHistoryProto { + option (android.msg_privacy).dest = DEST_AUTOMATIC; + + optional int32 report_version = 1; + optional int64 parcel_version = 2; + optional string start_platform_version = 3; + optional string end_platform_version = 4; + + // HistoryStringPool data + message Key { + option (android.msg_privacy).dest = DEST_AUTOMATIC; + + optional int32 index = 1; + // Not valid for all keys. + optional int32 uid = 2; + optional string tag = 3; + } + repeated Key keys = 5; + + // Dump of battery history in csv format (equivalent of + // 'batterystats -c --history', with the hsp lines extracted). + repeated string csv_lines = 6; +} diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 1f8d43cb8a8c..87d891539a02 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -4262,7 +4262,7 @@ <receiver android:name="com.android.server.updates.CarrierIdInstallReceiver" android:permission="android.permission.UPDATE_CONFIG"> <intent-filter> - <action android:name="com.android.internal.intent.action.UPDATE_CARRIER_ID_DB" /> + <action android:name="android.os.action.UPDATE_CARRIER_ID_DB" /> <data android:scheme="content" android:host="*" android:mimeType="*/*" /> </intent-filter> </receiver> diff --git a/core/res/res/layout-watch/global_actions.xml b/core/res/res/layout-watch/global_actions.xml new file mode 100644 index 000000000000..c50d3f771d1a --- /dev/null +++ b/core/res/res/layout-watch/global_actions.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2018 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="center_vertical" + android:paddingTop="?attr/dialogPreferredPadding" + android:paddingBottom="?attr/dialogPreferredPadding" + android:orientation="vertical"/> diff --git a/core/res/res/layout-watch/global_actions_item.xml b/core/res/res/layout-watch/global_actions_item.xml index 025d45e84dbb..ae87e63c4821 100644 --- a/core/res/res/layout-watch/global_actions_item.xml +++ b/core/res/res/layout-watch/global_actions_item.xml @@ -13,46 +13,52 @@ See the License for the specific language governing permissions and limitations under the License. --> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:gravity="center" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:minHeight="?attr/listPreferredItemHeightSmall" - android:gravity="center_vertical" - android:paddingStart="?attr/listPreferredItemPaddingStart" - android:paddingEnd="?attr/listPreferredItemPaddingEnd" - android:background="?attr/activatedBackgroundIndicator" - android:clipToPadding="false"> - <ImageView android:id="@+id/icon" - android:background="@drawable/global_action_icon_background" - android:scaleType="centerInside" - android:layout_width="40dp" - android:layout_height="40dp" - android:padding="8dp" - android:gravity="center" - android:orientation="horizontal" - android:layout_marginEnd="8dp" - android:layout_marginTop="8dp" - android:layout_marginBottom="8dp"/> - - <RelativeLayout - android:layout_width="wrap_content" + android:layout_height="wrap_content"> + <LinearLayout + android:duplicateParentState="true" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_weight="1" - android:layout_marginTop="8dp" - android:layout_marginBottom="8dp"> + android:maxHeight="?attr/listPreferredItemHeightSmall" + android:gravity="center_vertical" + android:paddingStart="?attr/listPreferredItemPaddingStart" + android:paddingEnd="?attr/listPreferredItemPaddingEnd" + android:background="?attr/selectableItemBackground" + android:clipToPadding="false"> + + <ImageView android:id="@+id/icon" + android:duplicateParentState="true" + android:background="@drawable/global_action_icon_background" + android:scaleType="centerInside" + android:padding="8dp" + android:gravity="center" + android:layout_marginEnd="8dp" + android:layout_marginTop="4dp" + android:layout_marginBottom="4dp" + android:layout_width="40dp" + android:layout_height="40dp"/> + + <FrameLayout android:id="@+id/widget_frame" + android:duplicateParentState="true" + android:gravity="center" + android:visibility="gone" + android:orientation="horizontal" + android:layout_marginEnd="8dp" + android:layout_marginTop="4dp" + android:layout_marginBottom="4dp" + android:layout_width="40dp" + android:layout_height="40dp"/> <TextView android:id="@+id/message" - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:duplicateParentState="true" android:textAppearance="?attr/textAppearanceListItem" - android:ellipsize="end" /> - - <TextView android:id="@+id/status" + android:ellipsize="end" + android:layout_weight="1" + android:layout_marginTop="4dp" + android:layout_marginBottom="4dp" android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@id/message" - android:layout_alignStart="@id/message" - android:textAppearance="?attr/textAppearanceListItemSecondary" - android:textColor="?attr/textColorSecondary"/> - </RelativeLayout> -</LinearLayout> + android:layout_height="wrap_content"/> + </LinearLayout> +</FrameLayout> diff --git a/core/res/res/layout/notification_template_header.xml b/core/res/res/layout/notification_template_header.xml index b7395cdabe09..0697c9758f3c 100644 --- a/core/res/res/layout/notification_template_header.xml +++ b/core/res/res/layout/notification_template_header.xml @@ -126,7 +126,6 @@ android:visibility="gone" android:contentDescription="@string/notification_work_profile_content_description" /> - <LinearLayout android:id="@+id/app_ops" android:layout_height="match_parent" @@ -140,6 +139,8 @@ android:src="@drawable/ic_camera" android:background="?android:selectableItemBackgroundBorderless" android:visibility="gone" + android:clickable="false" + android:contentDescription="@string/notification_appops_camera_active" /> <ImageButton android:id="@+id/mic" @@ -149,6 +150,8 @@ android:background="?android:selectableItemBackgroundBorderless" android:layout_marginStart="4dp" android:visibility="gone" + android:clickable="false" + android:contentDescription="@string/notification_appops_microphone_active" /> <ImageButton android:id="@+id/overlay" @@ -158,6 +161,8 @@ android:background="?android:selectableItemBackgroundBorderless" android:layout_marginStart="4dp" android:visibility="gone" + android:clickable="false" + android:contentDescription="@string/notification_appops_overlay_active" /> </LinearLayout> </NotificationHeaderView> diff --git a/core/res/res/layout/notification_template_material_ambient.xml b/core/res/res/layout/notification_template_material_ambient.xml index fdc9f0176dba..c8864c2f829d 100644 --- a/core/res/res/layout/notification_template_material_ambient.xml +++ b/core/res/res/layout/notification_template_material_ambient.xml @@ -59,7 +59,7 @@ android:singleLine="true" android:ellipsize="marquee" android:fadingEdge="horizontal" - android:textSize="24sp" + android:textSize="@dimen/notification_ambient_title_text_size" android:textColor="#ffffffff" /> <TextView android:id="@+id/text" @@ -70,7 +70,7 @@ android:layout_weight="1" android:gravity="top|center_horizontal" android:visibility="gone" - android:textSize="16sp" + android:textSize="@dimen/notification_ambient_text_size" android:textColor="#eeffffff" android:layout_marginTop="4dp" android:ellipsize="end" diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index e62466c4f812..68ef9a4826e4 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"foto\'s en video te neem"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Laat <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toe om foto\'s te neem en video\'s op te neem?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Oproeprekords"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"lees en skryf foonoproeprekord"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Gee <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang tot jou foonoproeprekords?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Foon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"foonoproepe te maak en te bestuur"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Laat <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toe om foonoproepe te maak en te bestuur?"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 3d7a92df7640..fd5e0a68301f 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"ካሜራ"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ስዕሎች ያንሱ እና ቪዲዮ ይቅረጹ"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ስዕሎችን እንዲያነሳ እና ቪዲዮን እንዲቀርጽ ይፈቀድለት?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"የጥሪ ምዝገባ ማስታወሻዎች"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"የስልክ ጥሪ ምዝግባ ማስታወሻን ያንብቡ እና ይጻፉ"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"የእርስዎን ስልክ የጥሪ ምዝግብ ማስታወሻዎች <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> እንዲደርስበት ይፈቀድ?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"ስልክ"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"የስልክ ጥሪዎች ያድርጉ እና ያስተዳድሩ"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> የስልክ ጥሪዎችን እንዲያደርግ እና እንዲያቀናብር ይፈቀድለት?"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 20cf515f95a3..9d39cc8ef82a 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -303,12 +303,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"الكاميرا"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"التقاط صور وتسجيل فيديو"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالتقاط الصور وتسجيل الفيديو؟"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"سجلّ المكالمات"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"قراءة سجلّ المكالمات الهاتفية والكتابة إليه"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالدخول إلى سجلات مكالماتك الهاتفية؟"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"الهاتف"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"إجراء مكالمات هاتفية وإدارتها"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بإجراء المكالمات الهاتفية وإدارتها؟"</string> @@ -429,8 +426,8 @@ <string name="permdesc_recordAudio" msgid="4245930455135321433">"يمكن لهذا التطبيق تسجيل الصوت باستخدام الميكروفون في أي وقت."</string> <string name="permlab_sim_communication" msgid="2935852302216852065">"إرسال أوامر إلى شريحة SIM"</string> <string name="permdesc_sim_communication" msgid="5725159654279639498">"السماح للتطبيق بإرسال أوامر إلى شريحة SIM. وهذا أمر بالغ الخطورة."</string> - <string name="permlab_camera" msgid="3616391919559751192">"التقاط صور ومقاطع فيديو"</string> - <string name="permdesc_camera" msgid="5392231870049240670">"يمكن لهذا التطبيق التقاط صور وتسجيل مقاطع فيديو باستخدام الكاميرا في أي وقت."</string> + <string name="permlab_camera" msgid="3616391919559751192">"التقاط صور وفيديوهات"</string> + <string name="permdesc_camera" msgid="5392231870049240670">"يمكن لهذا التطبيق التقاط صور وتسجيل فيديوهات باستخدام الكاميرا في أي وقت."</string> <string name="permlab_vibrate" msgid="7696427026057705834">"التحكم في الاهتزاز"</string> <string name="permdesc_vibrate" msgid="6284989245902300945">"للسماح للتطبيق بالتحكم في الهزّاز."</string> <string name="permlab_callPhone" msgid="3925836347681847954">"اتصال مباشر بأرقام الهواتف"</string> @@ -536,12 +533,12 @@ <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"للسماح للتطبيق بتعديل إعدادات المزامنة لحساب ما. على سبيل المثال، يمكن استخدام ذلك لتمكين مزامنة تطبيق \"الأشخاص\" مع حساب ما."</string> <string name="permlab_readSyncStats" msgid="7396577451360202448">"قراءة إحصاءات المزامنة"</string> <string name="permdesc_readSyncStats" msgid="1510143761757606156">"للسماح للتطبيق بقراءة إحصائيات المزامنة لحساب ما، بما في ذلك سجل الأحداث المتزامنة ومقدار البيانات التي تمت مزامنتها."</string> - <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"قراءة محتويات وحدة تخزين USB"</string> - <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"قراءة محتويات بطاقة SD"</string> - <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"للسماح للتطبيق بقراءة محتويات وحدة تخزين USB."</string> - <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"للسماح للتطبيق بقراءة محتويات بطاقة SD."</string> - <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"تعديل محتويات وحدة تخزين USB أو حذفها"</string> - <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"تعديل محتويات بطاقة SD أو حذفها"</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"قراءة محتوى وحدة تخزين USB"</string> + <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"قراءة محتوى بطاقة SD"</string> + <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"للسماح للتطبيق بقراءة محتوى وحدة تخزين USB."</string> + <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"للسماح للتطبيق بقراءة محتوى بطاقة SD."</string> + <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"تعديل محتوى وحدة تخزين USB أو حذفها"</string> + <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"تعديل محتوى بطاقة SD أو حذفها"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"للسماح للتطبيق بالكتابة إلى وحدة تخزين USB."</string> <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"للسماح للتطبيق بالكتابة إلى بطاقة SD."</string> <string name="permlab_use_sip" msgid="2052499390128979920">"إجراء/تلقي مكالمات SIP"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 5a4fb04a9d67..5ca6cdaaccda 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"şəkil çəkin və video yazın"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tətbiqinə şəkil və video çəkmək icazəsi verilsin?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Zənd qeydləri"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"telefonun zəng qeydini oxuyun və yazın"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tətbiqinə telefonun zəng qeydlərinə daxil olmaq icazəsi verilsin?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefon zəngləri edin və onları idarə edin"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tətbiqinə telefon zəngləri etmək və onları idarə etmək icazəsi verilsin?"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 3096c1d20542..da227d00d201 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -294,12 +294,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"snima slike i video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Želite li da omogućite da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> snima slike i video snimke?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Evidencije poziva"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"čitanje i pisanje evidencije poziva na telefonu"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Želite li da omogućite da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristupa evidencijama poziva na telefonu?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"upućuje telefonske pozive i upravlja njima"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Želite li da omogućite da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> upućuje pozive i upravlja njima?"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index bd95fd47d5f9..a02eb079aeed 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -297,12 +297,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"рабіць фатаздымкі і запісваць відэа"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Дазволіць праграме <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> рабіць фота і запісваць відэа?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Журналы выклікаў"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"Чытанне і запіс журнала тэлефонных выклікаў"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Адкрыць праграме <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ да журналаў выклікаў вашага тэлефона?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Тэлефон"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"рабіць тэлефонныя выклікі і кіраваць імі"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Дазволіць праграме <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> рабіць тэлефонныя выклікі і кіраваць імі?"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 23f4017e702a..0784fe1c9544 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"да прави снимки и записва видеоклипове"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Да се разреши ли на <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да прави снимки и да записва видеоклипове?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Списъци с обажданията"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"четене и запис на списъка с телефонните обаждания"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Да се разреши ли на <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да осъществява достъп до списъците с телефонните ви обаждания?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"да извършва телефонни обаждания и да ги управлява"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Да се разреши ли на <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да извършва и управлява телефонни обаждания?"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 790fa21f768a..19af38c87074 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -294,12 +294,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"slika i snima videozapise"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> snimanje slika i videozapisa?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Zapisnici poziva"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"čitanje i pisanje zapisnika telefonskih poziva"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristup zapisnicima poziva?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"poziva i upravlja pozivima"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uspostavljanje poziva i njihovo upravljanje?"</string> @@ -856,7 +853,7 @@ <string name="autofill_zip_code" msgid="8697544592627322946">"Poštanski broj"</string> <string name="autofill_county" msgid="237073771020362891">"Okrug"</string> <string name="autofill_island" msgid="4020100875984667025">"Ostrvo"</string> - <string name="autofill_district" msgid="8400735073392267672">"Oblast"</string> + <string name="autofill_district" msgid="8400735073392267672">"Distrikt"</string> <string name="autofill_department" msgid="5343279462564453309">"Odsjek"</string> <string name="autofill_prefecture" msgid="2028499485065800419">"Prefektura"</string> <string name="autofill_parish" msgid="8202206105468820057">"Parohija"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 4c408d816596..7bd556fb90d7 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Càmera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"fer fotos i vídeos"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> faci fotos i vídeos?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Registres de trucades"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"llegir i editar el registre de trucades del telèfon"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> accedeixi als registres de trucades del telèfon?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telèfon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"fer i gestionar trucades telefòniques"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> faci trucades i les gestioni?"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index e8deca53973b..8ddd32d84997 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -297,12 +297,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparát"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"pořizování fotografií a nahrávání videa"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Povolit aplikaci <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> fotit a nahrávat video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Seznamy hovorů"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"čtení a zápis do seznamu telefonních hovorů"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Povolit aplikaci <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> přístup k seznamu telefonních hovorů?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"uskutečňování a spravování telefonních hovorů"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Povolit aplikaci <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uskutečňovat a spravovat telefonní hovory?"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index c18f376ea2fc..89cef70ccfcb 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"tage billeder og optage video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Vil du give <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tilladelse til at tage billeder og optage video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Opkaldslister"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"læse og skrive til opkaldslisten"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Vil du give <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> adgang til dine opkaldslister?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"foretage og administrere telefonopkald"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Vil du give <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tilladelse til at foretage og administrere telefonopkald?"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 32d9ea92a5bd..1ef1f975294d 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"Bilder und Videos aufnehmen"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> erlauben, Bilder und Videos aufzunehmen?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Anruflisten"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"Schreib- und Lesezugriff auf Anrufliste"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> den Zugriff auf deine Anruflisten erlauben?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"Telefonanrufe tätigen und verwalten"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> erlauben, Anrufe zu tätigen und zu verwalten?"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 868323e9094e..d98997b86e52 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Κάμερα"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"γίνεται λήψη φωτογραφιών και εγγραφή βίντεο"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Να επιτρέπεται στην εφαρμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> η λήψη φωτογραφιών και η εγγραφή βίντεο;"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Αρχεία καταγραφής κλήσεων"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"ανάγνωση και εγγραφή αρχείου καταγραφής τηλεφωνικών κλήσεων"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Να επιτρέπεται στην εφαρμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> να έχει πρόσβαση στα αρχεία καταγραφής τηλεφωνικών κλήσεών σας;"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Τηλέφωνο"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"πραγματοποιεί και να διαχειρίζεται τηλ/κές κλήσεις"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Να επιτρέπεται στην εφαρμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> η πραγματοποίηση και η διαχείριση τηλεφωνικών κλήσεων;"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index ae441b6cf641..c6f310e758b6 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"take pictures and record video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to take pictures and record video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Call logs"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"read and write phone call log"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your phone call logs?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telephone"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"make and manage phone calls"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to make and manage phone calls?"</string> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index caad05c0c53e..1bc6c856c1e9 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"take pictures and record video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to take pictures and record video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Call logs"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"read and write phone call log"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your phone call logs?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telephone"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"make and manage phone calls"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to make and manage phone calls?"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index ae441b6cf641..c6f310e758b6 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"take pictures and record video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to take pictures and record video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Call logs"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"read and write phone call log"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your phone call logs?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telephone"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"make and manage phone calls"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to make and manage phone calls?"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index ae441b6cf641..c6f310e758b6 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"take pictures and record video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to take pictures and record video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Call logs"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"read and write phone call log"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your phone call logs?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telephone"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"make and manage phone calls"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to make and manage phone calls?"</string> diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml index 25e7cd1d386b..67cb6cccceec 100644 --- a/core/res/res/values-en-rXC/strings.xml +++ b/core/res/res/values-en-rXC/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"take pictures and record video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to take pictures and record video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Call logs"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"read and write phone call log"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your phone call logs?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Phone"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"make and manage phone calls"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to make and manage phone calls?"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 60652cc9dee8..d3e84f26a69d 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Cámara"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"tomar fotografías y grabar videos"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"¿Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tome fotos y grabe videos?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Registro de llamadas"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"leer y escribir el registro de llamadas telefónicas"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"¿Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda al registro de las llamadas telefónicas?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Teléfono"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"realizar y administrar llamadas telefónicas"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"¿Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> haga y administre las llamadas telefónicas?"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 9413b3efedd3..fdc52eefa863 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Cámara"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"hacer fotos y grabar vídeos"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> haga fotos y grabe vídeos?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Registros de llamadas"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"leer y editar el registro de llamadas del teléfono"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a los registros de llamadas del teléfono?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Teléfono"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"hacer y administrar llamadas telefónicas"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> haga y gestione llamadas?"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 2cf33c179a25..975d6e386e2b 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kaamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"pildistamine ja video salvestamine"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Kas lubada rakendusel <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> jäädvustada pilte ja salvestada videoid?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Kõnelogid"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"telefoni kõnelogi lugemine ja kirjutamine"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Kas lubada rakendusel <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pääseda juurde teie telefoni kõnelogidele?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"helistamine ja telefonikõnede haldamine"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Kas lubada rakendusel <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> teha ja hallata telefonikõnesid?"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index d27b461af771..ad5a14af28b9 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"atera argazkiak eta grabatu bideoak"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari argazkiak ateratzea eta bideoak grabatzea baimendu nahi diozu?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Deien erregistroa"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"irakurri telefonoko deien erregistroa eta idatzi bertan"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari telefonoko deien erregistroa atzitzea baimendu nahi diozu?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefonoa"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"egin eta kudeatu telefono-deiak"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari telefono-deiak egitea eta kudeatzea baimendu nahi diozu?"</string> @@ -367,7 +364,7 @@ <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Beren zati batzuk memoria modu iraunkorrean ezartzeko baimena ematen die aplikazioei. Horrela, beste aplikazioek erabilgarri duten memoria murritz daiteke eta telefonoa motel daiteke."</string> <string name="permlab_foregroundService" msgid="3310786367649133115">"Exekutatu zerbitzuak aurreko planoan"</string> <string name="permdesc_foregroundService" msgid="6471634326171344622">"Aurreko planoko zerbitzuak erabiltzea baimentzen dio aplikazioari."</string> - <string name="permlab_getPackageSize" msgid="7472921768357981986">"neurtu aplikazioen biltegiratze-tokia"</string> + <string name="permlab_getPackageSize" msgid="7472921768357981986">"neurtu aplikazioen biltegiratzeko tokia"</string> <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Bere kodea, datuak eta cache-tamainak eskuratzea baimentzen die aplikazioei."</string> <string name="permlab_writeSettings" msgid="2226195290955224730">"aldatu sistemaren ezarpenak"</string> <string name="permdesc_writeSettings" msgid="7775723441558907181">"Sistemaren ezarpenen datuak aldatzea baimentzen die aplikazioei. Aplikazio gaiztoek sistemaren konfigurazioa hondatzeko erabil dezakete."</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 2865f3a40d59..b7052ecc31e3 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"دوربین"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"عکس گرفتن و فیلمبرداری"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"به <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> اجازه داده شود عکس بگیرد و ویدیو ضبط کند؟"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"گزارشهای تماس"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"خواندن و نوشتن گزارش تماس تلفنی"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"به <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> اجازه میدهید به گزارش تماسهای تلفنی شما دسترسی داشته باشد؟"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"تلفن"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"برقراری و مدیریت تماسهای تلفنی"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"به <b><xliff:g id="APP_NAME">%1$s</xliff:g><b> اجازه داده شود تماسهای تلفنی برقرار کند و آنها را مدیریت کند؟"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 9c94ffcd99a9..6cf688a894b4 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ottaa kuvia ja videoita"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Saako <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ottaa kuvia ja nauhoittaa videoita?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Puhelulokit"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"lukea puhelulokia ja kirjoittaa siihen"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Saako <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> puhelulokien käyttöoikeuden?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Puhelin"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"soittaa ja hallinnoida puheluita"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Saako <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> soittaa ja hallinnoida puheluita?"</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index e077b5f087ed..2ebcfca26a1d 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Appareil photo"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"prendre des photos et filmer des vidéos"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Autoriser « <xliff:g id="APP_NAME">%1$s</xliff:g> » à prendre des photos et à filmer des vidéos?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Journaux d\'appels"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"lire et écrire le journal des appels téléphoniques"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à accéder à vos journaux d\'appels?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Téléphone"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"faire et gérer des appels téléphoniques"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Autoriser « <xliff:g id="APP_NAME">%1$s</xliff:g> » à faire et à gérer les appels téléphoniques?"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index c62d8f6a60e9..85b0c7948183 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Appareil photo"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"prendre des photos et enregistrer des vidéos"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Permettre à <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> de prendre des photos et de filmer des vidéos ?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Journaux d\'appels"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"Lire et écrire les journaux d\'appels du téléphone"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à accéder aux journaux d\'appels de votre téléphone ?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Téléphone"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"effectuer et gérer des appels téléphoniques"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Permettre à <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> de passer et gérer des appels téléphoniques ?"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index 120517d3a4ce..550e677b11b5 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Cámara"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"tirar fotos e gravar vídeos"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Queres permitir que a aplicación <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> realice fotos e grave vídeos?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Rexistros de chamadas"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"ler e editar o rexistro de chamadas do teléfono"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Queres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda aos rexistros de chamadas do teléfono?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Teléfono"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"facer e xestionar chamadas telefónicas"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Queres permitir que a aplicación <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> realice e xestione chamadas telefónicas?"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 8d6ef5e24f30..f1497e422f07 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -294,12 +294,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparat"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"snimati fotografije i videozapise"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Želite li dopustiti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> da snima fotografije i videozapise?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Zapisnici poziva"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"čitati i pisati zapisnik poziva telefona"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Želite li dopustiti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> da pristupa zapisnicima poziva vašeg telefona?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"uspostavljati telefonske pozive i upravljati njima"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Želite li dopustiti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> da upućuje telefonske pozive i upravlja njima?"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index f56af6b5624f..591de3cb94b8 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fényképezőgép"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotók és videók készítése"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Engedélyezi a(z) <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> számára, hogy képeket és videókat készíthessen?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Hívásnaplók"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"hívásnapló olvasása és írása"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Engedélyezi, hogy a(z) <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> hozzáférjen az Ön hívásnaplóihoz?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefonhívások kezdeményezése és kezelése"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Engedélyezi a(z) <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> számára, hogy hívásokat indíthasson és kezelhessen?"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index 44b47880ee49..ff59114f3b70 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Տեսախցիկ"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"լուսանկարել և տեսագրել"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Թույլ տա՞լ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> հավելվածին լուսանկարել և տեսանկարել:"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Զանգերի մատյան"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"հեռախոսազանգերի մատյանի դիտում և գրանցում"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Թույլ տա՞լ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> հավելվածին օգտագործել ձեր հեռախոսազանգերի մատյանները:"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Հեռախոս"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"կատարել զանգեր և կառավարել զանգերը"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Թույլ տա՞լ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> հավելվածին կատարել հեռախոսազանգեր և կառավարել դրանք:"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index eaffb6eaf0d7..4eb2be2a7b3c 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"mengambil gambar dan merekam video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Izinkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengambil gambar dan merekam video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Log panggilan"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"membaca dan menulis log panggilan telepon"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Izinkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengakses log panggilan telepon?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telepon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"melakukan dan mengelola panggilan telepon"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Izinkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> melakukan dan mengelola panggilan telepon?"</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index 9c10370c047c..a7778415d6b1 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Myndavél"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"taka myndir og taka upp myndskeið"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Viltu leyfa <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> að taka myndir og myndskeið?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Símtalaskrár"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"lesa og skrifa símtalaskrá síma"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Viltu veita <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aðgang að símtalaskrám símans?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Sími"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"hringja og stjórna símtölum"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Viltu leyfa <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> að hringja og stjórna símtölum?"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index d4ddd5038bf4..3a46a3cb9af5 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotocamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"scattare foto e registrare video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Consentire a <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di scattare foto e registrare video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Registri chiamate"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"leggere e scrivere il registro chiamate del telefono"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Vuoi consentire all\'app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere ai registri chiamate del tuo telefono?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefono"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"eseguire e gestire le telefonate"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Consentire a <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di effettuare e gestire telefonate?"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 9cc77cb15bf4..229fb828430a 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -297,12 +297,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"מצלמה"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"צילום תמונות והקלטת וידאו"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"לתת לאפליקציה <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> הרשאה לצלם תמונות וסרטונים?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"יומני שיחות"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"קריאה וכתיבה של יומן השיחות של הטלפון"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"לתת לאפליקציה <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> הרשאת גישה ליומני השיחות של הטלפון?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"טלפון"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"התקשרות וניהול של שיחות טלפון"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"לתת לאפליקציה <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> הרשאה להתקשרות ולניהול של שיחות טלפון?"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 1ee5cd998031..1a452a3b0cc2 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"カメラ"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"写真と動画の撮影"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"写真と動画の撮影を <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可しますか?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"通話履歴"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"通話履歴の読み取りと書き込み"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"通話履歴へのアクセスを <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可しますか?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"電話"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"電話の発信と管理"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"電話の発信と管理を <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可しますか?"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index a736caa32058..bb2b1a3abc4d 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"კამერა"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ფოტოებისა და ვიდეოების გადაღება"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"გსურთ, მიანიჭოთ <b><xliff:g id="APP_NAME">%1$s</xliff:g>-ს</b> სურათების გადაღების და ვიდეოების ჩაწერის ნებართვა?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"ზარების ჟურნალები"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"ზარების ჟურნალის წაკითხვა და მასში ჩაწერა"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"გსურთ, მიანიჭოთ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-ს თქვენს ზარების ჟურნალებზე წვდომის ნებართვა?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"ტელეფონი"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"სატელეფონო ზარების განხორციელება და მართვა"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"გსურთ, მიანიჭოთ <b><xliff:g id="APP_NAME">%1$s</xliff:g>-ს</b> სატელეფონო ზარების განხორციელების და მართვის ნებართვა?"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 24a9034b33e1..3301b0a14d17 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"суретке түсіріп, бейне жазу"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасына суретке түсіруге және бейне жазуға рұқсат берілсін бе?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Қоңырау журналдары"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"телефонның қоңыраулар журналын оқу және жазу"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасына телефонның қоңыраулар журналына кіруге рұқсат етілсін бе?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"қоңырау шалу және телефон қоңырауларын басқару"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасына қоңыраулар шалуға және басқаруға рұқсат берілсін бе?"</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index ac641dd33041..556b19c9ac08 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"កាមេរ៉ា"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ថតរូប និងថតវីដេអូ"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"អនុញ្ញាតឱ្យ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ថតរូប និងថតវីដេអូ?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"កំណត់ហេតុហៅទូរសព្ទ"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"អាន និងសរសេរកំណត់ហេតុហៅទូរសព្ទ"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"អនុញ្ញាតឱ្យ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ចូលប្រើកំណត់ហេតុហៅទូរសព្ទរបស់អ្នក?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"ទូរសព្ទ"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"ហៅទូរស័ព្ទ និងគ្រប់គ្រងការហៅទូរស័ព្ទ"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"អនុញ្ញាតឱ្យ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> គ្រប់គ្រង និងធ្វើការហៅទូរសព្ទ?"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 7c9ed6d4735f..0659f769b95e 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"카메라"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"사진 및 동영상 촬영"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>에서 사진을 촬영하고 동영상을 녹화하도록 허용하시겠습니까?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"통화 기록"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"통화 기록 읽고 쓰기"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>이(가) 통화 기록에 액세스하도록 허용하시겠습니까?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"전화"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"전화 걸기 및 관리"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>에서 전화를 걸고 관리하도록 허용하시겠습니까?"</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index dc515ea047f4..a6eb2546fbe5 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"сүрөт жана видео тартууга"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> колдонмосуна сүрөттөрдү тартып, видеолорду жаздырууга уруксат берилсинби?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Чалуулар тизмелери"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"телефондогу чалуулар тизмесин окуу жана жазуу"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> колдонмосуна телефондогу чалуулар тизмесин пайдаланууга уруксат берилсинби?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"телефон чалуу жана аларды башкаруу"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> колдонмосуна телефон чалууга жана чалууларды башкарууга уруксат берилсинби?"</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index 4f8f73489265..19a9a721a9a3 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"ກ້ອງ"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ຖ່າຍຮູບ ແລະບັນທຶກວິດີໂອ"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"ອະນຸຍາດ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ໃຫ້ຖ່າຍຮູບ ແລະ ບັນທຶກວິດີໂອບໍ?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"ບັນທຶກການໂທ"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"ອ່ານ ແລະ ຂຽນບັນທຶກການໂທ"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"ອະນຸຍາດໃຫ້ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ເຂົ້າເຖິງບັນທຶກການໂທທັງໝົດຂອງທ່ານໄດ້ບໍ?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"ໂທລະສັບ"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"ໂທ ແລະຈັດການການໂທລະສັບ"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"ອະນຸຍາດ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ໃຫ້ໂທ ແລະ ຈັດການການໂທບໍ?"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 1cb327516f84..45208076ed48 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -297,12 +297,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparatas"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotografuoti ir filmuoti"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Leisti <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> fotografuoti ir įrašyti vaizdo įrašus?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Skambučių žurnalai"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"skaityti ir rašyti telefono skambučių žurnalą"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Leisti <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pasiekti jūsų telefono skambučių žurnalus?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefonas"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"skambinti ir tvarkyti telefonų skambučius"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Leisti <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> skambinti ir tvarkyti telefono skambučius?"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index b7b4a8fd5036..f7c5ef4c8334 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -294,12 +294,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"uzņemt attēlus un ierakstīt videoklipus"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Vai atļaut lietotnei <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uzņemt fotoattēlus un ierakstīt videoklipus?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Zvanu žurnāli"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"lasīt un rakstīt tālruņa zvanu žurnālu"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Vai atļaut lietotnei <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> piekļūt jūsu tālruņa zvanu žurnāliem?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Tālrunis"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"veikt un pārvaldīt tālruņa zvanus"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Vai atļaut lietotnei <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> veikt un pārvaldīt tālruņa zvanus?"</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index ea0233fc4b47..04da462e85ce 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"фотографира и снима видео"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Дали да се дозволи <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да фотографира и да снима видео?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Евиденција на повици"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"чита и пишува евиденција на повици во телефонот"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Дали да се дозволи <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> до евиденцијата на повици на телефонот?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"упатува и управува со телефонски повици"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Дали да се дозволи <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да повикува и да управува со телефонските повици?"</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index 1dedd939b092..b04874bbab7a 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камер"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"зураг авах, бичлэг хийх"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-д зураг авах, видео хийхийг зөвшөөрөх үү?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Дуудлагын жагсаалт"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"утасны дуудлагын жагсаалтыг унших болон бичих"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-д таны утасны дуудлагын жагсаалтад хандахыг зөвшөөрөх үү?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Утас"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"утасны дуудлага хийх, дуудлага удирдах"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-д утасны дуудлага хийх, дуудлагад хариулахыг зөвшөөрөх үү?"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index f0fdf5f31808..873f4f624d9c 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ambil gambar dan rakam video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Benarkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengambil gambar dan merakam video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Log panggilan"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"baca dan tulis log panggilan telefon"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Benarkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengakses log panggilan telefon anda?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"membuat dan mengurus panggilan telefon"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Benarkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> membuat dan mengurus panggilan telefon?"</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index 7c270365c80b..595c2372d3c4 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"ကင်မရာ"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ဓာတ်ပုံ ရိုက်ပြီးနောက် ဗွီဒီယို မှတ်တမ်းတင်ရန်"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> အား ဓာတ်ပုံနှင့် ဗီဒီယိုရိုက်ကူးခွင့် ပေးလိုပါသလား။"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"ခေါ်ဆိုထားသော မှတ်တမ်းများ"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"ဖုန်းခေါ်ဆိုထားသော မှတ်တမ်း ဖတ်ပြီး ရေးရန်"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> အား သင်၏ခေါ်ဆိုထားသော မှတ်တမ်းများကို သုံးခွင့်ပေးလိုပါသလား။"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"ဖုန်း"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"ဖုန်းခေါ်ဆိုမှုများ ပြုလုပ်ရန်နှင့် စီမံရန်"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> အား ဖုန်းခေါ်ဆိုမှုများ ပြုလုပ်ခွင့်နှင့် စီမံခွင့်ပေးလိုပါသလား။"</string> @@ -747,7 +744,7 @@ <string name="faceunlock_multiple_failures" msgid="754137583022792429">"မျက်မှာမှတ် သော့ဖွင့်ခြင်း ခွင့်ပြုသော အကြိမ်ရေထက် ကျော်လွန်သွားပါပြီ"</string> <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"ဆင်းကဒ် မရှိပါ"</string> <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"တက်ပလက်ထဲတွင်း ဆင်းကဒ် မရှိပါ"</string> - <string name="lockscreen_missing_sim_message" product="tv" msgid="1943633865476989599">"တီဗွီတွင် SIM ကဒ် မရှိပါ။"</string> + <string name="lockscreen_missing_sim_message" product="tv" msgid="1943633865476989599">"တီဗွီတွင် SIM ကတ် မရှိပါ။"</string> <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"ဖုန်းထဲတွင် ဆင်းကဒ် မရှိပါ"</string> <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"ဆင်းမ်ကဒ် ထည့်ပါ"</string> <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"ဆင်းမ်ကဒ် မရှိဘူး သို့မဟုတ် ဖတ်မရပါ။ ဆင်းမ်ကဒ် တစ်ခုကို ထည့်ပါ။"</string> @@ -1387,7 +1384,7 @@ </plurals> <string name="action_mode_done" msgid="7217581640461922289">"ပြီးပါပြီ"</string> <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"USB သိုလှောင်မှု အချက်အလက်များ ဖျက်နေစဉ်…"</string> - <string name="progress_erasing" product="default" msgid="6596988875507043042">"SD ကဒ် အား ဖျက်နေစဉ်…"</string> + <string name="progress_erasing" product="default" msgid="6596988875507043042">"SD ကတ် အား ဖျက်နေစဉ်…"</string> <string name="share" msgid="1778686618230011964">"မျှဝေခြင်း"</string> <string name="find" msgid="4808270900322985960">"ရှာဖွေရန်"</string> <string name="websearch" msgid="4337157977400211589">"ဝဘ်တွင် ရှာရန်"</string> @@ -1443,8 +1440,8 @@ <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s ၊ %2$s"</string> <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s ၊ %2$s ၊ %3$s"</string> <string name="storage_internal" msgid="3570990907910199483">"စက်တွင်းမျှဝေထားသည့် သိုလှောင်ခန်း"</string> - <string name="storage_sd_card" msgid="3282948861378286745">"SD ကဒ်"</string> - <string name="storage_sd_card_label" msgid="6347111320774379257">"<xliff:g id="MANUFACTURER">%s</xliff:g> SD ကဒ်"</string> + <string name="storage_sd_card" msgid="3282948861378286745">"SD ကတ်"</string> + <string name="storage_sd_card_label" msgid="6347111320774379257">"<xliff:g id="MANUFACTURER">%s</xliff:g> SD ကတ်"</string> <string name="storage_usb_drive" msgid="6261899683292244209">"USB ဒရိုက်ဗ်"</string> <string name="storage_usb_drive_label" msgid="4501418548927759953">"<xliff:g id="MANUFACTURER">%s</xliff:g> USB ဒရိုက်ဗ်"</string> <string name="storage_usb" msgid="3017954059538517278">"USBဖြင့် သိမ်းဆည်း"</string> @@ -1613,9 +1610,9 @@ <string name="mediasize_na_junior_legal" msgid="3309324162155085904">"ဂျူနီယာ လီဂယ်လ်"</string> <string name="mediasize_na_ledger" msgid="5567030340509075333">"လယ်ဂျာ"</string> <string name="mediasize_na_tabloid" msgid="4571735038501661757">"တက်ဘလွိုက်"</string> - <string name="mediasize_na_index_3x5" msgid="5182901917818625126">"အက္ခရာစဥ် အညွှန်း ကဒ် ၃x၅"</string> - <string name="mediasize_na_index_4x6" msgid="7687620625422312396">"အက္ခရာစဥ် အညွှန်း ကဒ် ၄x၆"</string> - <string name="mediasize_na_index_5x8" msgid="8834215284646872800">"အက္ခရာစဥ် အညွှန်း ကဒ် ၅x၈"</string> + <string name="mediasize_na_index_3x5" msgid="5182901917818625126">"အက္ခရာစဥ် အညွှန်း ကတ် ၃x၅"</string> + <string name="mediasize_na_index_4x6" msgid="7687620625422312396">"အက္ခရာစဥ် အညွှန်း ကတ် ၄x၆"</string> + <string name="mediasize_na_index_5x8" msgid="8834215284646872800">"အက္ခရာစဥ် အညွှန်း ကတ် ၅x၈"</string> <string name="mediasize_na_monarch" msgid="213639906956550754">"မိုနာချ့်"</string> <string name="mediasize_na_quarto" msgid="835778493593023223">"ကွာတို"</string> <string name="mediasize_na_foolscap" msgid="1573911237983677138">"ဖူးစကဒ်"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index b7658447ce6c..b1987fb5ec88 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ta bilder og ta opp video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Vil du la <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ta bilder og spille inn video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Samtalelogger"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"lese og skrive samtaleloggen"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Vil du gi <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tilgang til samtaleloggene dine?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"ring og administrer anrop"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Vil du la <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ringe og administrere telefonsamtaler?"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index cfd59ce839ad..cf2c19bb2fad 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"foto\'s maken en video opnemen"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toestaan om foto\'s te maken en video op te nemen?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Gesprekkenlijsten"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"gesprekkenlijst lezen en schrijven"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Wil je <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang tot je gesprekkenlijsten geven?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefoon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefoneren en oproepen beheren"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toestaan om telefoongesprekken te starten en te beheren?"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 717d05402210..ec93be4d7b21 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -297,12 +297,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Aparat"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"robienie zdjęć i nagrywanie filmów"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Zezwolić aplikacji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na robienie zdjęć i nagrywanie filmów?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Rejestry połączeń"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"odczytywanie i zapisywanie rejestru połączeń telefonicznych"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Pozwolić aplikacji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na dostęp do rejestrów połączeń?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"nawiązywanie połączeń telefonicznych i zarządzanie nimi"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Zezwolić aplikacji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na wykonywanie połączeń telefonicznych i zarządzanie nimi?"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 961a988cbbb8..656c9576353d 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"tire fotos e grave vídeos"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tire fotos e grave vídeos?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Registro de chamadas"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"ler e gravar o registro de chamadas telefônicas"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse seu registro de chamadas telefônicas?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefone"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"faça e gerencie chamadas telefônicas"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> faça e gerencie chamadas telefônicas?"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 138e1be88235..ae0d3e17ee3c 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmara"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"tirar fotos e gravar vídeos"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Pretende permitir que a aplicação <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tire fotos e grave vídeo?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Registos de chamadas"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"ler e escrever o registo de chamadas do telemóvel"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Pretende permitir que a aplicação <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aceda aos registos de chamadas do seu telemóvel?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telemóvel"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"fazer e gerir chamadas"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Pretende permitir que a aplicação <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> faça e gira chamadas telefónicas?"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 961a988cbbb8..656c9576353d 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"tire fotos e grave vídeos"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tire fotos e grave vídeos?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Registro de chamadas"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"ler e gravar o registro de chamadas telefônicas"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse seu registro de chamadas telefônicas?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefone"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"faça e gerencie chamadas telefônicas"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> faça e gerencie chamadas telefônicas?"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 0d815bcbc74b..c8d7b035fe95 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -294,12 +294,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera foto"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotografieze și să înregistreze videoclipuri"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Permiteți <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> să facă fotografii și să înregistreze videoclipuri?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Jurnale de apeluri"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"să citească și să scrie jurnalul de apeluri telefonice"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Permiteți <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> să vă acceseze jurnalele de apeluri?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"inițieze și să gestioneze apeluri telefonice"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Permiteți <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> să inițieze și să gestioneze apeluri telefonice?"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 38342f8fb091..ddcd81d872aa 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -297,12 +297,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"снимать фото и видео"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Разрешить приложению <b>\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"</b> снимать фото и видео?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Список вызовов"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"чтение и запись телефонных звонков"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Разрешить приложению <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ к списку вызовов?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"осуществлять вызовы и управлять ими"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Разрешить приложению <b>\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"</b> совершать звонки и управлять ими?"</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 4b22557f0541..dcd262749d23 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"කැමරාව"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"පින්තූර ගැනීම සහ වීඩියෝ පටිගත කිරීම"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g><b> වෙත පින්තූර සහ වීඩියෝ ගැනීමට ඉඩ දෙන්නද?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"ඇමතුම් ලොග"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"දුරකථන ඇමතුම් ලොගය කියවන්න සහ ලියන්න"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g><b> ඔබේ ඇමතුම් ලොග වෙත පිවිසීමට ඉඩ දෙන්නද?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"දුරකථනය"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"දුරකථන ඇමතුම් සිදු කිරීම සහ කළමනාකරණය කිරීම"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g><b> වෙත දුරකථන ඇමතුම් ලබා ගැනීමට සහ කළමනාකරණය කිරීමට ඉඩ දෙන්නද?"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 80dd144796be..e22d34cfbd71 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -297,12 +297,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparát"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotenie a natáčanie videí"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Povoliť aplikácii <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> snímať fotky a zaznamenávať video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Denníky hovorov"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"čítanie a zapisovanie do denníka hovorov telefónu"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Povoliť aplikácii <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> prístup k denníku hovorov telefónu?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefón"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefonovanie a správu hovorov"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Povoliť aplikácii <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uskutočňovať a spravovať telefonické hovory?"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index d5c466e6f3a3..4021ba7edccc 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -297,12 +297,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparat"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotografiranje in snemanje videoposnetkov"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Želite aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> omogočiti fotografiranje in snemanje videoposnetkov?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Dnevniki klicev"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"branje in zapisovanje dnevnika klicev v telefonu"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Želite aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> omogočiti dostop do dnevnikov klicev v telefonu?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"opravljanje in upravljanje telefonskih klicev"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Želite aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> omogočiti opravljanje in upravljanje telefonskih klicev?"</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index 62a6d69e7d96..eb2f2ef8a1fb 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"bëj fotografi dhe regjistro video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Të lejohet që <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> të nxjerrë fotografi dhe të regjistrojë video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Ditarët e telefonatave"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"lexo dhe shkruaj ditarin e telefonatave"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Dëshiron të lejosh që <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> të ketë qasje në ditarët e tu të telefonatave?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefoni"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"kryej dhe menaxho telefonata"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Të lejohet që <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> të kryejë dhe të menaxhojë telefonata?"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 47d042094ff2..a7e7a17d7d48 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -294,12 +294,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"снима слике и видео"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Желите ли да омогућите да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> снима слике и видео снимке?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Евиденције позива"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"читање и писање евиденције позива на телефону"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Желите ли да омогућите да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> приступа евиденцијама позива на телефону?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"упућује телефонске позиве и управља њима"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Желите ли да омогућите да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> упућује позиве и управља њима?"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 862f513985a9..b58a7c152e0c 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ta bilder och spela in video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Vill du ge <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> behörighet att ta bilder och spela in video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Samtalsloggar"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"läsa och skriva samtalslogg"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Vill du ge <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> åtkomst till samtalsloggarna?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"ringa och hantera telefonsamtal"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Vill du ge <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> behörighet att ringa och hantera telefonsamtal?"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index a8a37b3c9a69..c9cab70e4cb1 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -289,12 +289,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ipige picha na kurekodi video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ipige picha na kurekodi video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Rekodi ya nambari za simu"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"kusoma na kuandika rekodi ya nambari za simu"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Ungependa kuruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie rekodi zako za nambari za simu?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Simu"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"piga na udhibiti simu"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ipige na kudhibiti simu?"</string> @@ -904,7 +901,7 @@ </plurals> <string name="last_month" msgid="3959346739979055432">"Mwezi uliopita"</string> <string name="older" msgid="5211975022815554840">"Kuukuu zaidi"</string> - <string name="preposition_for_date" msgid="9093949757757445117">"tarehe <xliff:g id="DATE">%s</xliff:g>"</string> + <string name="preposition_for_date" msgid="9093949757757445117">"mnamo <xliff:g id="DATE">%s</xliff:g>"</string> <string name="preposition_for_time" msgid="5506831244263083793">"Saa <xliff:g id="TIME">%s</xliff:g>"</string> <string name="preposition_for_year" msgid="5040395640711867177">"ndani ya <xliff:g id="YEAR">%s</xliff:g>"</string> <string name="day" msgid="8144195776058119424">"siku"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index a04cbf9726aa..9608f874f1a0 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"กล้องถ่ายรูป"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"ถ่ายภาพและบันทึกวิดีโอ"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"อนุญาตให้ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ถ่ายรูปและบันทึกวิดีโอไหม"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"ประวัติการโทร"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"อ่านและเขียนประวัติการโทรของโทรศัพท์"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"อนุญาตให้ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> เข้าถึงประวัติการโทรในโทรศัพท์ไหม"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"โทรศัพท์"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"โทรและจัดการการโทร"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"อนุญาตให้ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> โทรและจัดการการโทรไหม"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index cd00438127ed..72579b1e0030 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"kumuha ng mga larawan at mag-record ng video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Payagan ang <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na kumuha ng mga larawan at mag-record ng video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Mga log ng tawag"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"binabasa at sinusulat ang log ng tawag sa telepono"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Payagan ang <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na i-access ang iyong mga log ng tawag sa telepono?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telepono"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"tumawag at mamahala ng mga tawag sa telepono"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Payagan ang <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na tumawag at mamahala ng mga tawag sa telepono?"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index d55021cc7e1f..da22c2edc200 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotoğraf çekme ve video kaydetme"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasının resim çekmesine ve video kaydı yapmasına izin verilsin mi?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Arama kayıtları"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"telefon arama kaydını okuma ve yazma"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Telefon arama kayıtlarınıza erişmek için <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasına izin verilsin mi?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefon çağrıları yapma ve yönetme"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasının telefon etmesine ve çağrıları yönetmesine izin verilsin mi?"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index c7d69eef449e..0bf81642fcab 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -297,12 +297,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"фотографувати та записувати відео"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Дозволити додатку <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> робити знімки та записувати відео?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Журнали викликів"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"перегляд і запис журналу викликів телефона"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Надати додатку <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ до журналів викликів телефона?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"телефонувати та керувати дзвінками"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Дозволити додатку <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> здійснювати телефонні дзвінки та керувати ними?"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index c8b97fdbe84c..ea6a0f2b0d4c 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"suratga olish va video yozib olish"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun surat va videoga olishga ruxsat berilsinmi?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Chaqiruvlar jurnali"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"telefon chaqiruvlari jurnalini o‘qish va unga yozish"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchn telefon chaqiruvlari tarixiga ruxsat berilsinmi?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefon qo‘ng‘iroqlarini amalga oshirish va boshqarish"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun telefon chaqiruvlarini amalga oshirish va boshqarishga ruxsat berilsinmi?"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index abd9cc03eac6..53c8c4ad2df0 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Máy ảnh"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"chụp ảnh và quay video"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Cho phép <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> chụp ảnh và quay video?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Nhật ký cuộc gọi"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"đọc và ghi nhật ký cuộc gọi điện thoại"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Cho phép <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> truy cập vào nhật ký cuộc gọi điện thoại của bạn?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Điện thoại"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"thực hiện và quản lý cuộc gọi điện thoại"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Cho phép <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> thực hiện và quản lý cuộc gọi điện thoại?"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 5d3c57127891..1343bc49f8bc 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"相机"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"拍摄照片和录制视频"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>拍摄照片和录制视频吗?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"通话记录"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"读取和写入手机通话记录"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>访问您的手机通话记录吗?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"电话"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"拨打电话和管理通话"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>拨打电话和管理通话吗?"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 22eb01023a81..2da48d8c9a35 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"相機"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"拍照和錄製影片"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>拍照和錄製影片嗎?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"通話記錄"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"讀取及寫入手機通話記錄"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>存取您的手機通話記錄嗎?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"電話"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"撥打電話及管理通話"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>撥打電話和管理通話嗎?"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 20fe48530ad8..be13ab9985d6 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"相機"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"拍照及錄製影片"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」拍攝相片及錄製影片嗎?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"通話記錄"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"讀取及寫入通話記錄"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>存取你的通話記錄嗎?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"電話"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"撥打電話及管理通話"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」撥打電話及管理通話嗎?"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index e10c03ba1d41..89ea735ec963 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -291,12 +291,9 @@ <string name="permgrouplab_camera" msgid="4820372495894586615">"Ikhamela"</string> <string name="permgroupdesc_camera" msgid="3250611594678347720">"thatha izithombe uphinde urekhode ividiyo"</string> <string name="permgrouprequest_camera" msgid="1299833592069671756">"Vumela i-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ukuthatha izithombe iphinde irekhode ividiyo?"</string> - <!-- no translation found for permgrouplab_calllog (8798646184930388160) --> - <skip /> - <!-- no translation found for permgroupdesc_calllog (3006237336748283775) --> - <skip /> - <!-- no translation found for permgrouprequest_calllog (8487355309583773267) --> - <skip /> + <string name="permgrouplab_calllog" msgid="8798646184930388160">"Amarekhodi wamakholi"</string> + <string name="permgroupdesc_calllog" msgid="3006237336748283775">"funda futhi ubhale irekhodi lamakholi efoni"</string> + <string name="permgrouprequest_calllog" msgid="8487355309583773267">"Vumela i-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ukufinyelela irekhodi lakho lamakholi wefoni?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"Ifoni"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"yenza uphinde uphathe amakholi wefoni"</string> <string name="permgrouprequest_phone" msgid="9166979577750581037">"Vumela i-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ukuthi yenze iphinde iphathe amakholi efoni?"</string> diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml index 095a632c4acd..79a7b903f82f 100644 --- a/core/res/res/values/colors.xml +++ b/core/res/res/values/colors.xml @@ -137,7 +137,7 @@ <color name="notification_primary_text_color_light">@color/primary_text_default_material_light</color> <color name="notification_primary_text_color_dark">@color/primary_text_default_material_dark</color> <color name="notification_secondary_text_color_light">@color/primary_text_default_material_light</color> - <item name="notification_secondary_text_disabled_alpha" format="float" type="dimen">0.30</item> + <item name="notification_secondary_text_disabled_alpha" format="float" type="dimen">0.38</item> <color name="notification_secondary_text_color_dark">@color/primary_text_default_material_dark</color> <color name="notification_default_color_dark">@color/primary_text_default_material_light</color> <color name="notification_default_color_light">#a3202124</color> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 780cda2fb882..bc43d91d9d19 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -506,11 +506,11 @@ <!-- String containing the apn value for tethering. May be overriden by secure settings TETHER_DUN_APN. Value is a comma separated series of strings: "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type", - Or string format of ApnSettingV3. + Or string format of ApnSettingV3 or higher. note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" Multiple entries are separated by using string-array: "<item>[ApnSettingV3]Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,14,,,,,,,spn,testspn</item> - <item>[ApnSettingV3]Name1,apn2,,,,,,,,,123,46,,mms|*,IPV6,IP,true,12,,,,,,,,</item>" --> + <item>[ApnSettingV5]Name1,apn2,,,,,,,,,123,46,,mms|*,IPV6,IP,true,12,,,,,,,,,,</item>" --> <string-array translatable="false" name="config_tether_apndata"> </string-array> @@ -665,7 +665,7 @@ <!-- Wifi driver supports IEEE80211AC for softap --> <bool translatable="false" name="config_wifi_softap_ieee80211ac_supported">false</bool> - + <!-- Flag indicating whether the we should enable the automatic brightness in Settings. Software implementation will be used if config_hardware_auto_brightness_available is not set --> <bool name="config_automatic_brightness_available">false</bool> @@ -3423,4 +3423,8 @@ <!-- Package name for ManagedProvisioning which is responsible for provisioning work profiles. --> <string name="config_managed_provisioning_package" translatable="false">com.android.managedprovisioning</string> + + <!-- Whether or not swipe up gesture is enabled by default --> + <bool name="config_swipe_up_gesture_default">false</bool> + </resources> diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index 791f7c68369f..2e8c7f9fc402 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -374,6 +374,10 @@ <dimen name="notification_title_text_size">14sp</dimen> <!-- Size of smaller notification text (see TextAppearance.StatusBar.EventContent.Line2, Info, Time) --> <dimen name="notification_subtext_size">12sp</dimen> + <!-- Size of notification text (see TextAppearance.StatusBar.EventContent) --> + <dimen name="notification_ambient_text_size">16sp</dimen> + <!-- Size of notification text titles (see TextAppearance.StatusBar.EventContent.Title) --> + <dimen name="notification_ambient_title_text_size">24sp</dimen> <!-- Top padding for notifications in the standard layout. --> <dimen name="notification_top_pad">10dp</dimen> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index bf7ca524c93e..3c5159c89bf6 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -4714,11 +4714,11 @@ <!-- Menu item in the locale menu [CHAR LIMIT=30] --> <string name="locale_search_menu">Search</string> - <!-- Title of the dialog that is shown when the user tries to launch a suspended application [CHAR LIMIT=30] --> - <string name="app_suspended_title">Can\u2019t open app</string> + <!-- Title of the dialog that is shown when the user tries to launch a suspended application [CHAR LIMIT=50] --> + <string name="app_suspended_title">App isn\u2019t available</string> <!-- Default message shown in the dialog that is shown when the user tries to launch a suspended application [CHAR LIMIT=NONE] --> <string name="app_suspended_default_message"> - The app <xliff:g id="app_name" example="Gmail">%1$s</xliff:g> isn\u2019t available right now. This is managed by <xliff:g id="app_name" example="Settings">%2$s</xliff:g>. + <xliff:g id="app_name" example="Gmail">%1$s</xliff:g> isn\u2019t available right now. This is managed by <xliff:g id="app_name" example="Settings">%2$s</xliff:g>. </string> <!-- Title of the button to show users more details about why the app has been suspended [CHAR LIMIT=50]--> <string name="app_suspended_more_details">Learn more</string> @@ -4969,6 +4969,14 @@ <!-- Application name displayed in notifications [CHAR LIMIT=60] --> <string name="notification_app_name_settings">Settings</string> + <!-- Active Permission - accessibility support --> + <!-- Content description of the camera icon in the notification. [CHAR LIMIT=NONE] --> + <string name="notification_appops_camera_active">Camera</string> + <!-- Content description of the mic icon in the notification. [CHAR LIMIT=NONE] --> + <string name="notification_appops_microphone_active">Microphone</string> + <!-- Content description of the overlay icon in the notification. [CHAR LIMIT=NONE] --> + <string name="notification_appops_overlay_active">displaying over other apps on your screen</string> + <!-- Strings for car --> <!-- String displayed when loading a user in the car [CHAR LIMIT=30] --> <string name="car_loading_profile">Loading</string> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 5edafecca841..db2aa8ecb16b 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1732,6 +1732,7 @@ <java-symbol type="integer" name="config_lidNavigationAccessibility" /> <java-symbol type="integer" name="config_lidOpenRotation" /> <java-symbol type="integer" name="config_longPressOnHomeBehavior" /> + <java-symbol type="layout" name="global_actions" /> <java-symbol type="layout" name="global_actions_item" /> <java-symbol type="layout" name="global_actions_silent_mode" /> <java-symbol type="layout" name="recent_apps_dialog" /> @@ -3300,6 +3301,8 @@ <java-symbol type="string" name="shortcut_restore_signature_mismatch" /> <java-symbol type="string" name="shortcut_restore_unknown_issue" /> + <java-symbol type="bool" name="config_swipe_up_gesture_default" /> + <!-- From media projection --> <java-symbol type="string" name="config_mediaProjectionPermissionDialogComponent" /> <java-symbol type="string" name="config_batterySaverDeviceSpecificConfig" /> diff --git a/core/tests/coretests/src/android/os/VintfObjectTest.java b/core/tests/coretests/src/android/os/VintfObjectTest.java index 821ee806743d..44510c2379f5 100644 --- a/core/tests/coretests/src/android/os/VintfObjectTest.java +++ b/core/tests/coretests/src/android/os/VintfObjectTest.java @@ -20,6 +20,9 @@ import junit.framework.Assert; import junit.framework.TestCase; public class VintfObjectTest extends TestCase { + /** + * Sanity check for {@link VintfObject#report VintfObject.report()}. + */ public void testReport() { String[] xmls = VintfObject.report(); assertTrue(xmls.length > 0); @@ -28,6 +31,6 @@ public class VintfObjectTest extends TestCase { "<manifest version=\"1.0\" type=\"framework\">")); // From /system/compatibility-matrix.xml assertTrue(String.join("", xmls).contains( - "<compatibility-matrix version=\"1.0\" type=\"framework\">")); + "<compatibility-matrix version=\"1.0\" type=\"framework\"")); } } diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java index db221cd7d8b9..18bc20c03475 100644 --- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java +++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java @@ -115,6 +115,7 @@ public class SettingsBackupTest { Settings.Global.APN_DB_UPDATE_CONTENT_URL, Settings.Global.APN_DB_UPDATE_METADATA_URL, Settings.Global.APP_IDLE_CONSTANTS, + Settings.Global.APP_OPS_CONSTANTS, Settings.Global.APP_STANDBY_ENABLED, Settings.Global.ASSISTED_GPS_ENABLED, Settings.Global.AUDIO_SAFE_VOLUME_STATE, @@ -131,6 +132,8 @@ public class SettingsBackupTest { Settings.Global.BLE_SCAN_LOW_LATENCY_WINDOW_MS, Settings.Global.BLE_SCAN_LOW_LATENCY_INTERVAL_MS, Settings.Global.BLE_SCAN_BACKGROUND_MODE, + Settings.Global.BLOCKING_HELPER_DISMISS_TO_VIEW_RATIO_LIMIT, + Settings.Global.BLOCKING_HELPER_STREAK_LIMIT, Settings.Global.BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX, Settings.Global.BLUETOOTH_A2DP_SRC_PRIORITY_PREFIX, Settings.Global.BLUETOOTH_A2DP_SUPPORTS_OPTIONAL_CODECS_PREFIX, @@ -355,6 +358,7 @@ public class SettingsBackupTest { Settings.Global.POWER_MANAGER_CONSTANTS, Settings.Global.PREFERRED_NETWORK_MODE, Settings.Global.PRIV_APP_OOB_ENABLED, + Settings.Global.PRIV_APP_OOB_LIST, Settings.Global.PROVISIONING_APN_ALARM_DELAY_IN_MS, Settings.Global.RADIO_BLUETOOTH, Settings.Global.RADIO_CELL, diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp index b3a3f455bac0..298b699055a5 100644 --- a/libs/androidfw/ResourceTypes.cpp +++ b/libs/androidfw/ResourceTypes.cpp @@ -7367,222 +7367,238 @@ void ResTable::print(bool inclValues) const printf("\n"); } - int packageId = pg->id; - size_t pkgCount = pg->packages.size(); - for (size_t pkgIndex=0; pkgIndex<pkgCount; pkgIndex++) { - const Package* pkg = pg->packages[pkgIndex]; - // Use a package's real ID, since the ID may have been assigned - // if this package is a shared library. - packageId = pkg->package->id; - char16_t tmpName[sizeof(pkg->package->name)/sizeof(pkg->package->name[0])]; - strcpy16_dtoh(tmpName, pkg->package->name, sizeof(pkg->package->name)/sizeof(pkg->package->name[0])); - printf(" Package %d id=0x%02x name=%s\n", (int)pkgIndex, - pkg->package->id, String8(tmpName).string()); - } - - for (size_t typeIndex=0; typeIndex < pg->types.size(); typeIndex++) { - const TypeList& typeList = pg->types[typeIndex]; - if (typeList.isEmpty()) { - continue; - } - const Type* typeConfigs = typeList[0]; - const size_t NTC = typeConfigs->configs.size(); - printf(" type %d configCount=%d entryCount=%d\n", - (int)typeIndex, (int)NTC, (int)typeConfigs->entryCount); - if (typeConfigs->typeSpecFlags != NULL) { - for (size_t entryIndex=0; entryIndex<typeConfigs->entryCount; entryIndex++) { - uint32_t resID = (0xff000000 & ((packageId)<<24)) - | (0x00ff0000 & ((typeIndex+1)<<16)) - | (0x0000ffff & (entryIndex)); - // Since we are creating resID without actually - // iterating over them, we have no idea which is a - // dynamic reference. We must check. - if (packageId == 0) { - pg->dynamicRefTable.lookupResourceId(&resID); - } - - resource_name resName; - if (this->getResourceName(resID, true, &resName)) { - String8 type8; - String8 name8; - if (resName.type8 != NULL) { - type8 = String8(resName.type8, resName.typeLen); - } else { - type8 = String8(resName.type, resName.typeLen); - } - if (resName.name8 != NULL) { - name8 = String8(resName.name8, resName.nameLen); - } else { - name8 = String8(resName.name, resName.nameLen); - } - printf(" spec resource 0x%08x %s:%s/%s: flags=0x%08x\n", - resID, - CHAR16_TO_CSTR(resName.package, resName.packageLen), - type8.string(), name8.string(), - dtohl(typeConfigs->typeSpecFlags[entryIndex])); - } else { - printf(" INVALID TYPE CONFIG FOR RESOURCE 0x%08x\n", resID); - } - } - } - for (size_t configIndex=0; configIndex<NTC; configIndex++) { - const ResTable_type* type = typeConfigs->configs[configIndex]; - if ((((uint64_t)type)&0x3) != 0) { - printf(" NON-INTEGER ResTable_type ADDRESS: %p\n", type); - continue; - } - - // Always copy the config, as fields get added and we need to - // set the defaults. - ResTable_config thisConfig; - thisConfig.copyFromDtoH(type->config); - - String8 configStr = thisConfig.toString(); - printf(" config %s", configStr.size() > 0 - ? configStr.string() : "(default)"); - if (type->flags != 0u) { - printf(" flags=0x%02x", type->flags); - if (type->flags & ResTable_type::FLAG_SPARSE) { - printf(" [sparse]"); - } - } - - printf(":\n"); + // Determine the number of resource splits for the resource types in this package. + // It needs to be done outside of the loop below so all of the information for a + // is displayed in a single block. Otherwise, a resource split's resource types + // would be interleaved with other splits. + size_t splitCount = 0; + for (size_t typeIndex = 0; typeIndex < pg->types.size(); typeIndex++) { + splitCount = max(splitCount, pg->types[typeIndex].size()); + } - size_t entryCount = dtohl(type->entryCount); - uint32_t entriesStart = dtohl(type->entriesStart); - if ((entriesStart&0x3) != 0) { - printf(" NON-INTEGER ResTable_type entriesStart OFFSET: 0x%x\n", entriesStart); - continue; - } - uint32_t typeSize = dtohl(type->header.size); - if ((typeSize&0x3) != 0) { - printf(" NON-INTEGER ResTable_type header.size: 0x%x\n", typeSize); + int packageId = pg->id; + for (size_t splitIndex = 0; splitIndex < splitCount; splitIndex++) { + size_t pkgCount = pg->packages.size(); + for (size_t pkgIndex=0; pkgIndex<pkgCount; pkgIndex++) { + const Package* pkg = pg->packages[pkgIndex]; + // Use a package's real ID, since the ID may have been assigned + // if this package is a shared library. + packageId = pkg->package->id; + char16_t tmpName[sizeof(pkg->package->name)/sizeof(pkg->package->name[0])]; + strcpy16_dtoh(tmpName, pkg->package->name, + sizeof(pkg->package->name)/sizeof(pkg->package->name[0])); + printf(" Package %d id=0x%02x name=%s\n", (int)pkgIndex, + pkg->package->id, String8(tmpName).string()); + } + + for (size_t typeIndex = 0; typeIndex < pg->types.size(); typeIndex++) { + const TypeList& typeList = pg->types[typeIndex]; + if (splitIndex >= typeList.size() || typeList.isEmpty()) { + // Only dump if the split exists and contains entries for this type continue; } - - const uint32_t* const eindex = (const uint32_t*) - (((const uint8_t*)type) + dtohs(type->header.headerSize)); - for (size_t entryIndex=0; entryIndex<entryCount; entryIndex++) { - size_t entryId; - uint32_t thisOffset; - if (type->flags & ResTable_type::FLAG_SPARSE) { - const ResTable_sparseTypeEntry* entry = - reinterpret_cast<const ResTable_sparseTypeEntry*>( - eindex + entryIndex); - entryId = dtohs(entry->idx); - // Offsets are encoded as divided by 4. - thisOffset = static_cast<uint32_t>(dtohs(entry->offset)) * 4u; - } else { - entryId = entryIndex; - thisOffset = dtohl(eindex[entryIndex]); - if (thisOffset == ResTable_type::NO_ENTRY) { - continue; + const Type* typeConfigs = typeList[splitIndex]; + const size_t NTC = typeConfigs->configs.size(); + printf(" type %d configCount=%d entryCount=%d\n", + (int)typeIndex, (int)NTC, (int)typeConfigs->entryCount); + if (typeConfigs->typeSpecFlags != NULL) { + for (size_t entryIndex=0; entryIndex<typeConfigs->entryCount; entryIndex++) { + uint32_t resID = (0xff000000 & ((packageId)<<24)) + | (0x00ff0000 & ((typeIndex+1)<<16)) + | (0x0000ffff & (entryIndex)); + // Since we are creating resID without actually + // iterating over them, we have no idea which is a + // dynamic reference. We must check. + if (packageId == 0) { + pg->dynamicRefTable.lookupResourceId(&resID); } - } - uint32_t resID = (0xff000000 & ((packageId)<<24)) - | (0x00ff0000 & ((typeIndex+1)<<16)) - | (0x0000ffff & (entryId)); - if (packageId == 0) { - pg->dynamicRefTable.lookupResourceId(&resID); - } - resource_name resName; - if (this->getResourceName(resID, true, &resName)) { - String8 type8; - String8 name8; - if (resName.type8 != NULL) { - type8 = String8(resName.type8, resName.typeLen); - } else { - type8 = String8(resName.type, resName.typeLen); - } - if (resName.name8 != NULL) { - name8 = String8(resName.name8, resName.nameLen); + resource_name resName; + if (this->getResourceName(resID, true, &resName)) { + String8 type8; + String8 name8; + if (resName.type8 != NULL) { + type8 = String8(resName.type8, resName.typeLen); + } else { + type8 = String8(resName.type, resName.typeLen); + } + if (resName.name8 != NULL) { + name8 = String8(resName.name8, resName.nameLen); + } else { + name8 = String8(resName.name, resName.nameLen); + } + printf(" spec resource 0x%08x %s:%s/%s: flags=0x%08x\n", + resID, + CHAR16_TO_CSTR(resName.package, resName.packageLen), + type8.string(), name8.string(), + dtohl(typeConfigs->typeSpecFlags[entryIndex])); } else { - name8 = String8(resName.name, resName.nameLen); + printf(" INVALID TYPE CONFIG FOR RESOURCE 0x%08x\n", resID); } - printf(" resource 0x%08x %s:%s/%s: ", resID, - CHAR16_TO_CSTR(resName.package, resName.packageLen), - type8.string(), name8.string()); - } else { - printf(" INVALID RESOURCE 0x%08x: ", resID); - } - if ((thisOffset&0x3) != 0) { - printf("NON-INTEGER OFFSET: 0x%x\n", thisOffset); - continue; } - if ((thisOffset+sizeof(ResTable_entry)) > typeSize) { - printf("OFFSET OUT OF BOUNDS: 0x%x+0x%x (size is 0x%x)\n", - entriesStart, thisOffset, typeSize); + } + for (size_t configIndex=0; configIndex<NTC; configIndex++) { + const ResTable_type* type = typeConfigs->configs[configIndex]; + if ((((uint64_t)type)&0x3) != 0) { + printf(" NON-INTEGER ResTable_type ADDRESS: %p\n", type); continue; } - const ResTable_entry* ent = (const ResTable_entry*) - (((const uint8_t*)type) + entriesStart + thisOffset); - if (((entriesStart + thisOffset)&0x3) != 0) { - printf("NON-INTEGER ResTable_entry OFFSET: 0x%x\n", - (entriesStart + thisOffset)); - continue; + // Always copy the config, as fields get added and we need to + // set the defaults. + ResTable_config thisConfig; + thisConfig.copyFromDtoH(type->config); + + String8 configStr = thisConfig.toString(); + printf(" config %s", configStr.size() > 0 + ? configStr.string() : "(default)"); + if (type->flags != 0u) { + printf(" flags=0x%02x", type->flags); + if (type->flags & ResTable_type::FLAG_SPARSE) { + printf(" [sparse]"); + } } - uintptr_t esize = dtohs(ent->size); - if ((esize&0x3) != 0) { - printf("NON-INTEGER ResTable_entry SIZE: %p\n", (void *)esize); + printf(":\n"); + + size_t entryCount = dtohl(type->entryCount); + uint32_t entriesStart = dtohl(type->entriesStart); + if ((entriesStart&0x3) != 0) { + printf(" NON-INTEGER ResTable_type entriesStart OFFSET: 0x%x\n", + entriesStart); continue; } - if ((thisOffset+esize) > typeSize) { - printf("ResTable_entry OUT OF BOUNDS: 0x%x+0x%x+%p (size is 0x%x)\n", - entriesStart, thisOffset, (void *)esize, typeSize); + uint32_t typeSize = dtohl(type->header.size); + if ((typeSize&0x3) != 0) { + printf(" NON-INTEGER ResTable_type header.size: 0x%x\n", typeSize); continue; } - const Res_value* valuePtr = NULL; - const ResTable_map_entry* bagPtr = NULL; - Res_value value; - if ((dtohs(ent->flags)&ResTable_entry::FLAG_COMPLEX) != 0) { - printf("<bag>"); - bagPtr = (const ResTable_map_entry*)ent; - } else { - valuePtr = (const Res_value*) - (((const uint8_t*)ent) + esize); - value.copyFrom_dtoh(*valuePtr); - printf("t=0x%02x d=0x%08x (s=0x%04x r=0x%02x)", - (int)value.dataType, (int)value.data, - (int)value.size, (int)value.res0); - } + const uint32_t* const eindex = (const uint32_t*) + (((const uint8_t*)type) + dtohs(type->header.headerSize)); + for (size_t entryIndex=0; entryIndex<entryCount; entryIndex++) { + size_t entryId; + uint32_t thisOffset; + if (type->flags & ResTable_type::FLAG_SPARSE) { + const ResTable_sparseTypeEntry* entry = + reinterpret_cast<const ResTable_sparseTypeEntry*>( + eindex + entryIndex); + entryId = dtohs(entry->idx); + // Offsets are encoded as divided by 4. + thisOffset = static_cast<uint32_t>(dtohs(entry->offset)) * 4u; + } else { + entryId = entryIndex; + thisOffset = dtohl(eindex[entryIndex]); + if (thisOffset == ResTable_type::NO_ENTRY) { + continue; + } + } - if ((dtohs(ent->flags)&ResTable_entry::FLAG_PUBLIC) != 0) { - printf(" (PUBLIC)"); - } - printf("\n"); - - if (inclValues) { - if (valuePtr != NULL) { - printf(" "); - print_value(typeConfigs->package, value); - } else if (bagPtr != NULL) { - const int N = dtohl(bagPtr->count); - const uint8_t* baseMapPtr = (const uint8_t*)ent; - size_t mapOffset = esize; - const ResTable_map* mapPtr = (ResTable_map*)(baseMapPtr+mapOffset); - const uint32_t parent = dtohl(bagPtr->parent.ident); - uint32_t resolvedParent = parent; - if (Res_GETPACKAGE(resolvedParent) + 1 == 0) { - status_t err = pg->dynamicRefTable.lookupResourceId(&resolvedParent); - if (err != NO_ERROR) { - resolvedParent = 0; - } + uint32_t resID = (0xff000000 & ((packageId)<<24)) + | (0x00ff0000 & ((typeIndex+1)<<16)) + | (0x0000ffff & (entryId)); + if (packageId == 0) { + pg->dynamicRefTable.lookupResourceId(&resID); + } + resource_name resName; + if (this->getResourceName(resID, true, &resName)) { + String8 type8; + String8 name8; + if (resName.type8 != NULL) { + type8 = String8(resName.type8, resName.typeLen); + } else { + type8 = String8(resName.type, resName.typeLen); } - printf(" Parent=0x%08x(Resolved=0x%08x), Count=%d\n", - parent, resolvedParent, N); - for (int i=0; i<N && mapOffset < (typeSize-sizeof(ResTable_map)); i++) { - printf(" #%i (Key=0x%08x): ", - i, dtohl(mapPtr->name.ident)); - value.copyFrom_dtoh(mapPtr->value); + if (resName.name8 != NULL) { + name8 = String8(resName.name8, resName.nameLen); + } else { + name8 = String8(resName.name, resName.nameLen); + } + printf(" resource 0x%08x %s:%s/%s: ", resID, + CHAR16_TO_CSTR(resName.package, resName.packageLen), + type8.string(), name8.string()); + } else { + printf(" INVALID RESOURCE 0x%08x: ", resID); + } + if ((thisOffset&0x3) != 0) { + printf("NON-INTEGER OFFSET: 0x%x\n", thisOffset); + continue; + } + if ((thisOffset+sizeof(ResTable_entry)) > typeSize) { + printf("OFFSET OUT OF BOUNDS: 0x%x+0x%x (size is 0x%x)\n", + entriesStart, thisOffset, typeSize); + continue; + } + + const ResTable_entry* ent = (const ResTable_entry*) + (((const uint8_t*)type) + entriesStart + thisOffset); + if (((entriesStart + thisOffset)&0x3) != 0) { + printf("NON-INTEGER ResTable_entry OFFSET: 0x%x\n", + (entriesStart + thisOffset)); + continue; + } + + uintptr_t esize = dtohs(ent->size); + if ((esize&0x3) != 0) { + printf("NON-INTEGER ResTable_entry SIZE: %p\n", (void *)esize); + continue; + } + if ((thisOffset+esize) > typeSize) { + printf("ResTable_entry OUT OF BOUNDS: 0x%x+0x%x+%p (size is 0x%x)\n", + entriesStart, thisOffset, (void *)esize, typeSize); + continue; + } + + const Res_value* valuePtr = NULL; + const ResTable_map_entry* bagPtr = NULL; + Res_value value; + if ((dtohs(ent->flags)&ResTable_entry::FLAG_COMPLEX) != 0) { + printf("<bag>"); + bagPtr = (const ResTable_map_entry*)ent; + } else { + valuePtr = (const Res_value*) + (((const uint8_t*)ent) + esize); + value.copyFrom_dtoh(*valuePtr); + printf("t=0x%02x d=0x%08x (s=0x%04x r=0x%02x)", + (int)value.dataType, (int)value.data, + (int)value.size, (int)value.res0); + } + + if ((dtohs(ent->flags)&ResTable_entry::FLAG_PUBLIC) != 0) { + printf(" (PUBLIC)"); + } + printf("\n"); + + if (inclValues) { + if (valuePtr != NULL) { + printf(" "); print_value(typeConfigs->package, value); - const size_t size = dtohs(mapPtr->value.size); - mapOffset += size + sizeof(*mapPtr)-sizeof(mapPtr->value); - mapPtr = (ResTable_map*)(baseMapPtr+mapOffset); + } else if (bagPtr != NULL) { + const int N = dtohl(bagPtr->count); + const uint8_t* baseMapPtr = (const uint8_t*)ent; + size_t mapOffset = esize; + const ResTable_map* mapPtr = (ResTable_map*)(baseMapPtr+mapOffset); + const uint32_t parent = dtohl(bagPtr->parent.ident); + uint32_t resolvedParent = parent; + if (Res_GETPACKAGE(resolvedParent) + 1 == 0) { + status_t err = + pg->dynamicRefTable.lookupResourceId(&resolvedParent); + if (err != NO_ERROR) { + resolvedParent = 0; + } + } + printf(" Parent=0x%08x(Resolved=0x%08x), Count=%d\n", + parent, resolvedParent, N); + for (int i=0; + i<N && mapOffset < (typeSize-sizeof(ResTable_map)); i++) { + printf(" #%i (Key=0x%08x): ", + i, dtohl(mapPtr->name.ident)); + value.copyFrom_dtoh(mapPtr->value); + print_value(typeConfigs->package, value); + const size_t size = dtohs(mapPtr->value.size); + mapOffset += size + sizeof(*mapPtr)-sizeof(mapPtr->value); + mapPtr = (ResTable_map*)(baseMapPtr+mapOffset); + } } } } diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp index 79bb534a99be..270527d551a9 100644 --- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp @@ -297,6 +297,26 @@ private: GLuint mTexture = 0; }; +static bool isFP16Supported(const sk_sp<GrContext>& grContext) { + static std::once_flag sOnceFlag; + static bool supported = false; + + std::call_once(sOnceFlag, [](const sk_sp<GrContext>& grContext) { + if (!grContext->caps()->isConfigTexturable(kRGBA_half_GrPixelConfig)) { + supported = false; + return; + } + + sp<GraphicBuffer> buffer = new GraphicBuffer(1, 1, PIXEL_FORMAT_RGBA_FP16, + GraphicBuffer::USAGE_HW_TEXTURE | GraphicBuffer::USAGE_SW_WRITE_NEVER | + GraphicBuffer::USAGE_SW_READ_NEVER, "tempFp16Buffer"); + status_t error = buffer->initCheck(); + supported = !error; + }, grContext); + + return supported; +} + sk_sp<Bitmap> SkiaOpenGLPipeline::allocateHardwareBitmap(renderthread::RenderThread& renderThread, SkBitmap& skBitmap) { renderThread.eglManager().initialize(); @@ -318,7 +338,7 @@ sk_sp<Bitmap> SkiaOpenGLPipeline::allocateHardwareBitmap(renderthread::RenderThr type = GL_UNSIGNED_BYTE; break; case kRGBA_F16_SkColorType: - isSupported = grContext->caps()->isConfigTexturable(kRGBA_half_GrPixelConfig); + isSupported = isFP16Supported(grContext); if (isSupported) { type = GL_HALF_FLOAT; pixelFormat = PIXEL_FORMAT_RGBA_FP16; diff --git a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp index 62d78e73ccc0..f0da660f17b0 100644 --- a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp +++ b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp @@ -219,8 +219,20 @@ void SkiaRecordingCanvas::drawNinePatch(Bitmap& bitmap, const Res_png_9patch& ch SkPaint tmpPaint; sk_sp<SkColorFilter> colorFilter; sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); - mRecorder.drawImageLattice(image.get(), lattice, dst, - bitmapPaint(paint, &tmpPaint, colorFilter)); + const SkPaint* filteredPaint = bitmapPaint(paint, &tmpPaint, colorFilter); + // Besides kNone, the other three SkFilterQualities are treated the same. And Android's + // Java API only supports kLow and kNone anyway. + if (!filteredPaint || filteredPaint->getFilterQuality() == kNone_SkFilterQuality) { + if (filteredPaint != &tmpPaint) { + if (paint) { + tmpPaint = *paint; + } + filteredPaint = &tmpPaint; + } + tmpPaint.setFilterQuality(kLow_SkFilterQuality); + } + + mRecorder.drawImageLattice(image.get(), lattice, dst, filteredPaint); if (!bitmap.isImmutable() && image.get() && !image->unique() && !dst.isEmpty()) { mDisplayList->mMutableImages.push_back(image.get()); } diff --git a/libs/incident/proto/android/section.proto b/libs/incident/proto/android/section.proto index e8280ed690f6..45f3c91850e7 100644 --- a/libs/incident/proto/android/section.proto +++ b/libs/incident/proto/android/section.proto @@ -52,6 +52,9 @@ message SectionFlags { optional SectionType type = 1 [default = SECTION_NONE]; optional string args = 2; optional bool device_specific = 3 [default = false]; + // If true, then the section will only be generated for userdebug and eng + // builds. + optional bool userdebug_and_eng_only = 4 [default = false]; } extend google.protobuf.FieldOptions { diff --git a/media/java/android/media/AudioFocusRequest.java b/media/java/android/media/AudioFocusRequest.java index fe89b89dcfec..b9731d111aa3 100644 --- a/media/java/android/media/AudioFocusRequest.java +++ b/media/java/android/media/AudioFocusRequest.java @@ -414,7 +414,9 @@ public final class AudioFocusRequest { * with {@link AudioManager#abandonAudioFocusRequest(AudioFocusRequest)}. * Note that only focus changes (gains and losses) affecting the focus owner are reported, * not gains and losses of other focus requesters in the system.<br> - * Notifications are delivered on the main {@link Looper}. + * Notifications are delivered on the {@link Looper} associated with the one of + * the creation of the {@link AudioManager} used to request focus + * (see {@link AudioManager#requestAudioFocus(AudioFocusRequest)}). * @param listener the listener receiving the focus change notifications. * @return this {@code Builder} instance. * @throws NullPointerException thrown when a null focus listener is used. diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 68463e11bbfe..566db94690cb 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -4558,8 +4558,7 @@ public class AudioManager { /** * The list of {@link AudioDeviceCallback} objects to receive add/remove notifications. */ - private ArrayMap<AudioDeviceCallback, NativeEventHandlerDelegate> - mDeviceCallbacks = + private final ArrayMap<AudioDeviceCallback, NativeEventHandlerDelegate> mDeviceCallbacks = new ArrayMap<AudioDeviceCallback, NativeEventHandlerDelegate>(); /** @@ -4859,22 +4858,21 @@ public class AudioManager { calcListDeltas(mPreviousPorts, current_ports, GET_DEVICES_ALL); AudioDeviceInfo[] removed_devices = calcListDeltas(current_ports, mPreviousPorts, GET_DEVICES_ALL); - if (added_devices.length != 0 || removed_devices.length != 0) { synchronized (mDeviceCallbacks) { for (int i = 0; i < mDeviceCallbacks.size(); i++) { handler = mDeviceCallbacks.valueAt(i).getHandler(); if (handler != null) { - if (added_devices.length != 0) { - handler.sendMessage(Message.obtain(handler, - MSG_DEVICES_DEVICES_ADDED, - added_devices)); - } if (removed_devices.length != 0) { handler.sendMessage(Message.obtain(handler, MSG_DEVICES_DEVICES_REMOVED, removed_devices)); } + if (added_devices.length != 0) { + handler.sendMessage(Message.obtain(handler, + MSG_DEVICES_DEVICES_ADDED, + added_devices)); + } } } } diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java index c486e68d361a..aa457092ca3f 100644 --- a/media/java/android/media/ExifInterface.java +++ b/media/java/android/media/ExifInterface.java @@ -2540,19 +2540,20 @@ public class ExifInterface { if (position < 0) { return -1; } - if (mPosition != position) { - in.seek(position); - mPosition = position; - } - - int bytesRead = in.read(buffer, offset, size); - if (bytesRead < 0) { - mPosition = -1; // need to seek on next read - return -1; - } + try { + if (mPosition != position) { + in.seek(position); + mPosition = position; + } - mPosition += bytesRead; - return bytesRead; + int bytesRead = in.read(buffer, offset, size); + if (bytesRead >= 0) { + mPosition += bytesRead; + return bytesRead; + } + } catch (IOException e) {} + mPosition = -1; // need to seek on next read + return -1; } @Override diff --git a/media/java/android/media/session/ISessionController.aidl b/media/java/android/media/session/ISessionController.aidl index 06f5863a6944..b4f52f9d00bc 100644 --- a/media/java/android/media/session/ISessionController.aidl +++ b/media/java/android/media/session/ISessionController.aidl @@ -37,7 +37,7 @@ import java.util.List; */ interface ISessionController { void sendCommand(String packageName, String command, in Bundle args, in ResultReceiver cb); - boolean sendMediaButton(String packageName, in KeyEvent mediaButton); + boolean sendMediaButton(String packageName, boolean asSystemService, in KeyEvent mediaButton); void registerCallbackListener(in ISessionControllerCallback cb); void unregisterCallbackListener(in ISessionControllerCallback cb); boolean isTransportControlEnabled(); @@ -46,7 +46,7 @@ interface ISessionController { PendingIntent getLaunchPendingIntent(); long getFlags(); ParcelableVolumeInfo getVolumeAttributes(); - void adjustVolume(String packageName, int direction, int flags); + void adjustVolume(String packageName, boolean asSystemService, int direction, int flags); void setVolumeTo(String packageName, int value, int flags); // These commands are for the TransportControls diff --git a/media/java/android/media/session/ISessionManager.aidl b/media/java/android/media/session/ISessionManager.aidl index 56664a9839c8..3578c160363e 100644 --- a/media/java/android/media/session/ISessionManager.aidl +++ b/media/java/android/media/session/ISessionManager.aidl @@ -34,9 +34,11 @@ import android.view.KeyEvent; interface ISessionManager { ISession createSession(String packageName, in ISessionCallback cb, String tag, int userId); List<IBinder> getSessions(in ComponentName compName, int userId); - void dispatchMediaKeyEvent(in KeyEvent keyEvent, boolean needWakeLock); - void dispatchVolumeKeyEvent(in KeyEvent keyEvent, int stream, boolean musicOnly); - void dispatchAdjustVolume(int suggestedStream, int delta, int flags); + void dispatchMediaKeyEvent(String packageName, boolean asSystemService, in KeyEvent keyEvent, + boolean needWakeLock); + void dispatchVolumeKeyEvent(String packageName, boolean asSystemService, in KeyEvent keyEvent, + int stream, boolean musicOnly); + void dispatchAdjustVolume(String packageName, int suggestedStream, int delta, int flags); void addSessionsListener(in IActiveSessionsListener listener, in ComponentName compName, int userId); void removeSessionsListener(in IActiveSessionsListener listener); diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java index 84f85e78c1a7..8c34a31b1c8f 100644 --- a/media/java/android/media/session/MediaController.java +++ b/media/java/android/media/session/MediaController.java @@ -126,6 +126,27 @@ public final class MediaController { * @return true if the event was sent to the session, false otherwise. */ public boolean dispatchMediaButtonEvent(@NonNull KeyEvent keyEvent) { + return dispatchMediButtonEventInternal(false, keyEvent); + } + + /** + * Dispatches the media button event as system service to the session. This only effects the + * {@link MediaSession.Callback#getCurrentControllerInfo()} and doesn't bypass any permission + * check done by the system service. + * <p> + * Should be only called by the {@link com.android.internal.policy.PhoneWindow} when the + * foreground activity didn't consume the key from the hardware devices. + * + * @param keyEvent media key event + * @return {@code true} if the event was sent to the session, {@code false} otherwise + * @hide + */ + public boolean dispatchMediaButtonEventAsSystemService(@NonNull KeyEvent keyEvent) { + return dispatchMediButtonEventInternal(true, keyEvent); + } + + private boolean dispatchMediButtonEventInternal(boolean asSystemService, + @NonNull KeyEvent keyEvent) { if (keyEvent == null) { throw new IllegalArgumentException("KeyEvent may not be null"); } @@ -133,7 +154,8 @@ public final class MediaController { return false; } try { - return mSessionBinder.sendMediaButton(mContext.getPackageName(), keyEvent); + return mSessionBinder.sendMediaButton(mContext.getPackageName(), asSystemService, + keyEvent); } catch (RemoteException e) { // System is dead. =( } @@ -141,6 +163,52 @@ public final class MediaController { } /** + * Dispatches the volume button event as system service to the session. This only effects the + * {@link MediaSession.Callback#getCurrentControllerInfo()} and doesn't bypass any permission + * check done by the system service. + * <p> + * Should be only called by the {@link com.android.internal.policy.PhoneWindow} when the + * foreground activity didn't consume the key from the hardware devices. + * + * @param keyEvent volume key event + * @hide + */ + public void dispatchVolumeButtonEventAsSystemService(@NonNull KeyEvent keyEvent) { + switch (keyEvent.getAction()) { + case KeyEvent.ACTION_DOWN: { + int direction = 0; + switch (keyEvent.getKeyCode()) { + case KeyEvent.KEYCODE_VOLUME_UP: + direction = AudioManager.ADJUST_RAISE; + break; + case KeyEvent.KEYCODE_VOLUME_DOWN: + direction = AudioManager.ADJUST_LOWER; + break; + case KeyEvent.KEYCODE_VOLUME_MUTE: + direction = AudioManager.ADJUST_TOGGLE_MUTE; + break; + } + try { + mSessionBinder.adjustVolume(mContext.getPackageName(), true, direction, + AudioManager.FLAG_SHOW_UI); + } catch (RemoteException e) { + Log.wtf(TAG, "Error calling adjustVolumeBy", e); + } + } + + case KeyEvent.ACTION_UP: { + final int flags = AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_VIBRATE + | AudioManager.FLAG_FROM_KEY; + try { + mSessionBinder.adjustVolume(mContext.getPackageName(), true, 0, flags); + } catch (RemoteException e) { + Log.wtf(TAG, "Error calling adjustVolumeBy", e); + } + } + } + } + + /** * Get the current playback state for this session. * * @return The current PlaybackState or null @@ -322,7 +390,7 @@ public final class MediaController { */ public void adjustVolume(int direction, int flags) { try { - mSessionBinder.adjustVolume(mContext.getPackageName(), direction, flags); + mSessionBinder.adjustVolume(mContext.getPackageName(), false, direction, flags); } catch (RemoteException e) { Log.wtf(TAG, "Error calling adjustVolumeBy.", e); } diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index 5e8b8caf3ef6..6f4f20ef780e 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -122,6 +122,15 @@ public final class MediaSession { FLAG_EXCLUSIVE_GLOBAL_PRIORITY }) public @interface SessionFlags { } + private static final String EXTRA_KEY_CALLING_PACKAGE = + "android.media.session.extra.CALLING_PACKAGE"; + private static final String EXTRA_KEY_CALLING_PID = + "android.media.session.extra.CALLING_PID"; + private static final String EXTRA_KEY_CALLING_UID = + "android.media.session.extra.CALLING_UID"; + private static final String EXTRA_KEY_ORIGINAL_BUNDLE = + "android.media.session.extra.ORIGINAL_BUNDLE"; + private final Object mLock = new Object(); private final int mMaxBitmapSize; @@ -520,11 +529,15 @@ public final class MediaSession { * @see MediaSessionManager#isTrustedForMediaControl(RemoteUserInfo) */ public final @NonNull RemoteUserInfo getCurrentControllerInfo() { - if (mCallback == null || mCallback.mCurrentControllerInfo == null) { + return createRemoteUserInfo(getCurrentData()); + } + + private @NonNull Bundle getCurrentData() { + if (mCallback == null || mCallback.mCurrentData == null) { throw new IllegalStateException( "This should be called inside of MediaSession.Callback methods"); } - return mCallback.mCurrentControllerInfo; + return mCallback.mCurrentData; } /** @@ -556,7 +569,7 @@ public final class MediaSession { */ public String getCallingPackage() { if (mCallback != null) { - return mCallback.mCurrentControllerInfo.getPackageName(); + return createRemoteUserInfo(mCallback.mCurrentData).getPackageName(); } return null; } @@ -659,6 +672,57 @@ public final class MediaSession { } /** + * Creates the extra bundle that includes the caller information. + * + * @return An extraBundle that contains caller information + */ + private static Bundle createExtraBundle(String packageName, int pid, int uid) { + return createExtraBundle(packageName, pid, uid, null); + } + + /** + * Creates the extra bundle that includes the caller information. + * + * @param originalBundle bundle + * @return An extraBundle that contains caller information + */ + private static Bundle createExtraBundle(String packageName, int pid, int uid, + Bundle originalBundle) { + Bundle bundle = new Bundle(); + bundle.putString(EXTRA_KEY_CALLING_PACKAGE, packageName); + bundle.putInt(EXTRA_KEY_CALLING_PID, pid); + bundle.putInt(EXTRA_KEY_CALLING_UID, uid); + if (originalBundle != null) { + bundle.putBundle(EXTRA_KEY_ORIGINAL_BUNDLE, originalBundle); + } + return bundle; + } + + /** + * Creates the {@link RemoteUserInfo} from the extra bundle created by + * {@link #createExtraBundle}. + * + * @param extraBundle that previously created by createExtraBundle() + * @return a RemoteUserInfo + */ + private static RemoteUserInfo createRemoteUserInfo(Bundle extraBundle) { + return new RemoteUserInfo( + extraBundle.getString(EXTRA_KEY_CALLING_PACKAGE), + extraBundle.getInt(EXTRA_KEY_CALLING_PID, INVALID_PID), + extraBundle.getInt(EXTRA_KEY_CALLING_UID, INVALID_UID)); + } + + /** + * Gets the original bundle from the extra bundle created by {@link #createExtraBundle}. + * + * @param extraBundle that previously created by createExtraBundle() + * @return a Bundle + */ + private static Bundle getOriginalBundle(Bundle extraBundle) { + return extraBundle.getBundle(EXTRA_KEY_ORIGINAL_BUNDLE); + } + + /** * Return true if this is considered an active playback state. * * @hide @@ -755,9 +819,6 @@ public final class MediaSession { private MediaSession mSession; private CallbackMessageHandler mHandler; private boolean mMediaPlayPauseKeyPending; - private String mCallingPackage; - private int mCallingPid; - private int mCallingUid; public Callback() { } @@ -811,8 +872,9 @@ public final class MediaSession { } } else { mMediaPlayPauseKeyPending = true; - mHandler.sendEmptyMessageDelayed(CallbackMessageHandler - .MSG_PLAY_PAUSE_KEY_DOUBLE_TAP_TIMEOUT, + mHandler.postDelayed(CallbackMessageHandler + .MSG_PLAY_PAUSE_KEY_DOUBLE_TAP_TIMEOUT, + mSession.getCurrentData(), ViewConfiguration.getDoubleTapTimeout()); } return true; @@ -1242,22 +1304,6 @@ public final class MediaSession { session.dispatchSetVolumeTo(value, createExtraBundle(packageName, pid, uid)); } } - - private Bundle createExtraBundle(String packageName, int pid, int uid) { - return createExtraBundle(packageName, pid, uid, null); - } - - private Bundle createExtraBundle(String packageName, int pid, int uid, - Bundle originalBundle) { - Bundle bundle = new Bundle(); - bundle.putString(CallbackMessageHandler.EXTRA_KEY_CALLING_PACKAGE, packageName); - bundle.putInt(CallbackMessageHandler.EXTRA_KEY_CALLING_PID, pid); - bundle.putInt(CallbackMessageHandler.EXTRA_KEY_CALLING_UID, uid); - if (originalBundle != null) { - bundle.putBundle(CallbackMessageHandler.EXTRA_KEY_ORIGINAL_BUNDLE, originalBundle); - } - return bundle; - } } /** @@ -1379,15 +1425,6 @@ public final class MediaSession { private class CallbackMessageHandler extends Handler { - private static final String EXTRA_KEY_CALLING_PACKAGE = - "android.media.session.extra.CALLING_PACKAGE"; - private static final String EXTRA_KEY_CALLING_PID = - "android.media.session.extra.CALLING_PID"; - private static final String EXTRA_KEY_CALLING_UID = - "android.media.session.extra.CALLING_UID"; - private static final String EXTRA_KEY_ORIGINAL_BUNDLE = - "android.media.session.extra.ORIGINAL_BUNDLE"; - private static final int MSG_COMMAND = 1; private static final int MSG_MEDIA_BUTTON = 2; private static final int MSG_PREPARE = 3; @@ -1413,8 +1450,7 @@ public final class MediaSession { private static final int MSG_PLAY_PAUSE_KEY_DOUBLE_TAP_TIMEOUT = 23; private MediaSession.Callback mCallback; - - private RemoteUserInfo mCurrentControllerInfo; + private Bundle mCurrentData; public CallbackMessageHandler(Looper looper, MediaSession.Callback callback) { super(looper, null, true); @@ -1422,22 +1458,25 @@ public final class MediaSession { mCallback.mHandler = this; } - public void post(int what, Object obj, Bundle bundle) { + public void post(int what, Object obj, Bundle data) { Message msg = obtainMessage(what, obj); - msg.setData(bundle); + msg.setData(data); msg.sendToTarget(); } + public void postDelayed(int what, Bundle data, long delayMs) { + Message msg = obtainMessage(what); + msg.setData(data); + sendMessageDelayed(msg, delayMs); + } + @Override public void handleMessage(Message msg) { VolumeProvider vp; - Bundle bundle = msg.getData(); - Bundle originalBundle = bundle.getBundle(EXTRA_KEY_ORIGINAL_BUNDLE); + Bundle data = msg.getData(); + Bundle originalBundle = getOriginalBundle(data); - mCurrentControllerInfo = new RemoteUserInfo( - bundle.getString(EXTRA_KEY_CALLING_PACKAGE), - bundle.getInt(EXTRA_KEY_CALLING_PID, INVALID_PID), - bundle.getInt(EXTRA_KEY_CALLING_UID, INVALID_UID)); + mCurrentData = data; switch (msg.what) { case MSG_COMMAND: @@ -1521,7 +1560,7 @@ public final class MediaSession { mCallback.handleMediaPlayPauseKeySingleTapIfPending(); break; } - mCurrentControllerInfo = null; + mCurrentData = null; } } } diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java index f35810322cd5..f54bfc137703 100644 --- a/media/java/android/media/session/MediaSessionManager.java +++ b/media/java/android/media/session/MediaSessionManager.java @@ -300,8 +300,28 @@ public final class MediaSessionManager { * @hide */ public void dispatchMediaKeyEvent(@NonNull KeyEvent keyEvent, boolean needWakeLock) { + dispatchMediaKeyEventInternal(false, keyEvent, needWakeLock); + } + + /** + * Send a media key event as system component. The receiver will be selected automatically. + * <p> + * Should be only called by the {@link com.android.internal.policy.PhoneWindow} or + * {@link android.view.FallbackEventHandler} when the foreground activity didn't consume the key + * from the hardware devices. + * + * @param keyEvent The KeyEvent to send. + * @hide + */ + public void dispatchMediaKeyEventAsSystemService(KeyEvent keyEvent) { + dispatchMediaKeyEventInternal(true, keyEvent, false); + } + + private void dispatchMediaKeyEventInternal(boolean asSystemService, @NonNull KeyEvent keyEvent, + boolean needWakeLock) { try { - mService.dispatchMediaKeyEvent(keyEvent, needWakeLock); + mService.dispatchMediaKeyEvent(mContext.getPackageName(), asSystemService, keyEvent, + needWakeLock); } catch (RemoteException e) { Log.e(TAG, "Failed to send key event.", e); } @@ -311,12 +331,33 @@ public final class MediaSessionManager { * Send a volume key event. The receiver will be selected automatically. * * @param keyEvent The volume KeyEvent to send. - * @param needWakeLock True if a wake lock should be held while sending the key. * @hide */ public void dispatchVolumeKeyEvent(@NonNull KeyEvent keyEvent, int stream, boolean musicOnly) { + dispatchVolumeKeyEventInternal(false, keyEvent, stream, musicOnly); + } + + /** + * Dispatches the volume button event as system service to the session. This only effects the + * {@link MediaSession.Callback#getCurrentControllerInfo()} and doesn't bypass any permission + * check done by the system service. + * <p> + * Should be only called by the {@link com.android.internal.policy.PhoneWindow} or + * {@link android.view.FallbackEventHandler} when the foreground activity didn't consume the key + * from the hardware devices. + * + * @param keyEvent The KeyEvent to send. + * @hide + */ + public void dispatchVolumeKeyEventAsSystemService(@NonNull KeyEvent keyEvent, int streamType) { + dispatchVolumeKeyEventInternal(true, keyEvent, streamType, false); + } + + private void dispatchVolumeKeyEventInternal(boolean asSystemService, @NonNull KeyEvent keyEvent, + int stream, boolean musicOnly) { try { - mService.dispatchVolumeKeyEvent(keyEvent, stream, musicOnly); + mService.dispatchVolumeKeyEvent(mContext.getPackageName(), asSystemService, keyEvent, + stream, musicOnly); } catch (RemoteException e) { Log.e(TAG, "Failed to send volume key event.", e); } @@ -336,7 +377,8 @@ public final class MediaSessionManager { */ public void dispatchAdjustVolume(int suggestedStream, int direction, int flags) { try { - mService.dispatchAdjustVolume(suggestedStream, direction, flags); + mService.dispatchAdjustVolume(mContext.getPackageName(), suggestedStream, direction, + flags); } catch (RemoteException e) { Log.e(TAG, "Failed to send adjust volume.", e); } diff --git a/media/java/android/media/soundtrigger/SoundTriggerDetectionService.java b/media/java/android/media/soundtrigger/SoundTriggerDetectionService.java index 7381d977b7b5..55cd1ab9823a 100644 --- a/media/java/android/media/soundtrigger/SoundTriggerDetectionService.java +++ b/media/java/android/media/soundtrigger/SoundTriggerDetectionService.java @@ -191,13 +191,14 @@ public abstract class SoundTriggerDetectionService extends Service { client = mClients.get(uuid); if (client == null) { - throw new IllegalStateException("operationFinished called, but no client for " + Log.w(LOG_TAG, "operationFinished called, but no client for " + uuid + ". Was this called after onDisconnected?"); + return; } } client.onOpFinished(opId); } catch (RemoteException e) { - e.rethrowFromSystemServer(); + Log.e(LOG_TAG, "operationFinished, remote exception for client " + uuid, e); } } diff --git a/native/android/asset_manager.cpp b/native/android/asset_manager.cpp index e70d5ea0d566..69cf80477dde 100644 --- a/native/android/asset_manager.cpp +++ b/native/android/asset_manager.cpp @@ -56,32 +56,10 @@ struct AAsset { // -------------------- Public native C API -------------------- /** - * Supporting information - */ - -static struct assetmanager_offsets_t -{ - jfieldID mObject; -} gAssetManagerOffsets; - -static volatile bool gJNIConfigured = false; -static Mutex gMutex; - -/** * Asset Manager functionality */ AAssetManager* AAssetManager_fromJava(JNIEnv* env, jobject assetManager) { - { - Mutex::Autolock _l(gMutex); - - if (gJNIConfigured == false) { - jclass amClass = env->FindClass("android/content/res/AssetManager"); - gAssetManagerOffsets.mObject = env->GetFieldID(amClass, "mObject", "J"); - gJNIConfigured = true; - } - } - return (AAssetManager*) env->GetLongField(assetManager, gAssetManagerOffsets.mObject); } diff --git a/packages/ExtServices/src/android/ext/services/notification/Assistant.java b/packages/ExtServices/src/android/ext/services/notification/Assistant.java index 9a66b07fb74f..f8788226fc51 100644 --- a/packages/ExtServices/src/android/ext/services/notification/Assistant.java +++ b/packages/ExtServices/src/android/ext/services/notification/Assistant.java @@ -17,16 +17,20 @@ package android.ext.services.notification; import static android.app.NotificationManager.IMPORTANCE_MIN; -import static android.service.notification.NotificationListenerService.Ranking - .USER_SENTIMENT_NEGATIVE; +import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE; import android.app.INotificationManager; +import android.content.ContentResolver; import android.content.Context; +import android.database.ContentObserver; import android.ext.services.R; +import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; +import android.os.Handler; import android.os.storage.StorageManager; +import android.provider.Settings; import android.service.notification.Adjustment; import android.service.notification.NotificationAssistantService; import android.service.notification.NotificationStats; @@ -74,9 +78,12 @@ public class Assistant extends NotificationAssistantService { PREJUDICAL_DISMISSALS.add(REASON_LISTENER_CANCEL); } + private float mDismissToViewRatioLimit; + private int mStreakLimit; + // key : impressions tracker // TODO: prune deleted channels and apps - ArrayMap<String, ChannelImpressions> mkeyToImpressions = new ArrayMap<>(); + final ArrayMap<String, ChannelImpressions> mkeyToImpressions = new ArrayMap<>(); // SBN key : channel id ArrayMap<String, String> mLiveNotifications = new ArrayMap<>(); @@ -86,6 +93,14 @@ public class Assistant extends NotificationAssistantService { public Assistant() { } + @Override + public void onCreate() { + super.onCreate(); + // Contexts are correctly hooked up by the creation step, which is required for the observer + // to be hooked up/initialized. + new SettingsObserver(mHandler); + } + private void loadFile() { if (DEBUG) Slog.d(TAG, "loadFile"); AsyncTask.execute(() -> { @@ -120,7 +135,7 @@ public class Assistant extends NotificationAssistantService { continue; } String key = parser.getAttributeValue(null, ATT_KEY); - ChannelImpressions ci = new ChannelImpressions(); + ChannelImpressions ci = createChannelImpressionsWithThresholds(); ci.populateFromXml(parser); synchronized (mkeyToImpressions) { ci.append(mkeyToImpressions.get(key)); @@ -184,7 +199,7 @@ public class Assistant extends NotificationAssistantService { String key = getKey( sbn.getPackageName(), sbn.getUserId(), ranking.getChannel().getId()); ChannelImpressions ci = mkeyToImpressions.getOrDefault(key, - new ChannelImpressions()); + createChannelImpressionsWithThresholds()); if (ranking.getImportance() > IMPORTANCE_MIN && ci.shouldTriggerBlock()) { adjustNotification(createNegativeAdjustment( sbn.getPackageName(), sbn.getKey(), sbn.getUserId())); @@ -206,7 +221,7 @@ public class Assistant extends NotificationAssistantService { String key = getKey(sbn.getPackageName(), sbn.getUserId(), channelId); synchronized (mkeyToImpressions) { ChannelImpressions ci = mkeyToImpressions.getOrDefault(key, - new ChannelImpressions()); + createChannelImpressionsWithThresholds()); if (stats.hasSeen()) { ci.incrementViews(); updatedImpressions = true; @@ -250,7 +265,7 @@ public class Assistant extends NotificationAssistantService { mFile = new AtomicFile(new File(new File( Environment.getDataUserCePackageDirectory( StorageManager.UUID_PRIVATE_INTERNAL, getUserId(), getPackageName()), - "assistant"), "block_stats.xml")); + "assistant"), "blocking_helper_stats.xml")); loadFile(); for (StatusBarNotification sbn : getActiveNotifications()) { onNotificationPosted(sbn); @@ -310,4 +325,58 @@ public class Assistant extends NotificationAssistantService { mkeyToImpressions.put(key, ci); } } + + private ChannelImpressions createChannelImpressionsWithThresholds() { + ChannelImpressions impressions = new ChannelImpressions(); + impressions.updateThresholds(mDismissToViewRatioLimit, mStreakLimit); + return impressions; + } + + /** + * Observer for updates on blocking helper threshold values. + */ + private final class SettingsObserver extends ContentObserver { + private final Uri STREAK_LIMIT_URI = + Settings.Global.getUriFor(Settings.Global.BLOCKING_HELPER_STREAK_LIMIT); + private final Uri DISMISS_TO_VIEW_RATIO_LIMIT_URI = + Settings.Global.getUriFor( + Settings.Global.BLOCKING_HELPER_DISMISS_TO_VIEW_RATIO_LIMIT); + + public SettingsObserver(Handler handler) { + super(handler); + ContentResolver resolver = getApplicationContext().getContentResolver(); + resolver.registerContentObserver( + DISMISS_TO_VIEW_RATIO_LIMIT_URI, false, this, getUserId()); + resolver.registerContentObserver(STREAK_LIMIT_URI, false, this, getUserId()); + + // Update all uris on creation. + update(null); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + update(uri); + } + + private void update(Uri uri) { + ContentResolver resolver = getApplicationContext().getContentResolver(); + if (uri == null || DISMISS_TO_VIEW_RATIO_LIMIT_URI.equals(uri)) { + mDismissToViewRatioLimit = Settings.Global.getFloat( + resolver, Settings.Global.BLOCKING_HELPER_DISMISS_TO_VIEW_RATIO_LIMIT, + ChannelImpressions.DEFAULT_DISMISS_TO_VIEW_RATIO_LIMIT); + } + if (uri == null || STREAK_LIMIT_URI.equals(uri)) { + mStreakLimit = Settings.Global.getInt( + resolver, Settings.Global.BLOCKING_HELPER_STREAK_LIMIT, + ChannelImpressions.DEFAULT_STREAK_LIMIT); + } + + // Update all existing channel impression objects with any new limits/thresholds. + synchronized (mkeyToImpressions) { + for (ChannelImpressions channelImpressions: mkeyToImpressions.values()) { + channelImpressions.updateThresholds(mDismissToViewRatioLimit, mStreakLimit); + } + } + } + } }
\ 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 de2659f49634..29ee920d4dde 100644 --- a/packages/ExtServices/src/android/ext/services/notification/ChannelImpressions.java +++ b/packages/ExtServices/src/android/ext/services/notification/ChannelImpressions.java @@ -21,6 +21,8 @@ import android.os.Parcelable; import android.text.TextUtils; import android.util.Log; +import com.android.internal.annotations.VisibleForTesting; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; @@ -30,8 +32,8 @@ 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 = .4; - static final int STREAK_LIMIT = 2; + static final float DEFAULT_DISMISS_TO_VIEW_RATIO_LIMIT = .8f; + static final int DEFAULT_STREAK_LIMIT = 2; static final String ATT_DISMISSALS = "dismisses"; static final String ATT_VIEWS = "views"; static final String ATT_STREAK = "streak"; @@ -40,18 +42,20 @@ public final class ChannelImpressions implements Parcelable { private int mViews = 0; private int mStreak = 0; - public ChannelImpressions() { - } + private float mDismissToViewRatioLimit; + private int mStreakLimit; - public ChannelImpressions(int dismissals, int views) { - mDismissals = dismissals; - mViews = views; + public ChannelImpressions() { + mDismissToViewRatioLimit = DEFAULT_DISMISS_TO_VIEW_RATIO_LIMIT; + mStreakLimit = DEFAULT_STREAK_LIMIT; } protected ChannelImpressions(Parcel in) { mDismissals = in.readInt(); mViews = in.readInt(); mStreak = in.readInt(); + mDismissToViewRatioLimit = in.readFloat(); + mStreakLimit = in.readInt(); } public int getStreak() { @@ -71,6 +75,21 @@ public final class ChannelImpressions implements Parcelable { mStreak++; } + void updateThresholds(float dismissToViewRatioLimit, int streakLimit) { + mDismissToViewRatioLimit = dismissToViewRatioLimit; + mStreakLimit = streakLimit; + } + + @VisibleForTesting + float getDismissToViewRatioLimit() { + return mDismissToViewRatioLimit; + } + + @VisibleForTesting + int getStreakLimit() { + return mStreakLimit; + } + public void append(ChannelImpressions additionalImpressions) { if (additionalImpressions != null) { mViews += additionalImpressions.getViews(); @@ -94,8 +113,8 @@ public final class ChannelImpressions implements Parcelable { if (DEBUG) { Log.d(TAG, "should trigger? " + getDismissals() + " " + getViews() + " " + getStreak()); } - return ((double) getDismissals() / getViews()) > DISMISS_TO_VIEW_RATIO_LIMIT - && getStreak() > STREAK_LIMIT; + return ((float) getDismissals() / getViews()) > mDismissToViewRatioLimit + && getStreak() > mStreakLimit; } @Override @@ -103,6 +122,8 @@ public final class ChannelImpressions implements Parcelable { dest.writeInt(mDismissals); dest.writeInt(mViews); dest.writeInt(mStreak); + dest.writeFloat(mDismissToViewRatioLimit); + dest.writeInt(mStreakLimit); } @Override @@ -148,7 +169,9 @@ public final class ChannelImpressions implements Parcelable { sb.append("mDismissals=").append(mDismissals); sb.append(", mViews=").append(mViews); sb.append(", mStreak=").append(mStreak); - sb.append('}'); + sb.append(", thresholds=(").append(mDismissToViewRatioLimit); + sb.append(",").append(mStreakLimit); + sb.append(")}"); return sb.toString(); } diff --git a/packages/ExtServices/tests/AndroidManifest.xml b/packages/ExtServices/tests/AndroidManifest.xml index e6c7b9785784..ddf725b8cdfe 100644 --- a/packages/ExtServices/tests/AndroidManifest.xml +++ b/packages/ExtServices/tests/AndroidManifest.xml @@ -17,6 +17,8 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.ext.services.tests.unit"> + <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" /> + <application> <uses-library android:name="android.test.runner" /> </application> 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 db48f610471d..a6b6a6b61581 100644 --- a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java +++ b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java @@ -20,6 +20,7 @@ import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.app.NotificationManager.IMPORTANCE_MIN; +import static junit.framework.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -27,11 +28,15 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.Application; import android.app.INotificationManager; import android.app.Notification; import android.app.NotificationChannel; +import android.content.ContentResolver; +import android.content.IContentProvider; import android.content.Intent; import android.os.UserHandle; +import android.provider.Settings; import android.service.notification.Adjustment; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService.Ranking; @@ -78,10 +83,10 @@ public class AssistantTest extends ServiceTestCase<Assistant> { new NotificationChannel("one", "", IMPORTANCE_LOW); @Mock INotificationManager mNoMan; - @Mock - AtomicFile mFile; + @Mock AtomicFile mFile; Assistant mAssistant; + Application mApplication; @Rule public final TestableContext mContext = @@ -98,6 +103,16 @@ public class AssistantTest extends ServiceTestCase<Assistant> { Intent startIntent = new Intent("android.service.notification.NotificationAssistantService"); startIntent.setPackage("android.ext.services"); + + // To bypass real calls to global settings values, set the Settings values here. + Settings.Global.putFloat(mContext.getContentResolver(), + Settings.Global.BLOCKING_HELPER_DISMISS_TO_VIEW_RATIO_LIMIT, 0.8f); + Settings.Global.putInt(mContext.getContentResolver(), + Settings.Global.BLOCKING_HELPER_STREAK_LIMIT, 2); + mApplication = (Application) InstrumentationRegistry.getInstrumentation(). + getTargetContext().getApplicationContext(); + // Force the test to use the correct application instead of trying to use a mock application + setApplication(mApplication); bindService(startIntent); mAssistant = getService(); mAssistant.setNoMan(mNoMan); @@ -128,7 +143,7 @@ public class AssistantTest extends ServiceTestCase<Assistant> { } private void almostBlockChannel(String pkg, int uid, NotificationChannel channel) { - for (int i = 0; i < ChannelImpressions.STREAK_LIMIT; i++) { + for (int i = 0; i < ChannelImpressions.DEFAULT_STREAK_LIMIT; i++) { dismissBadNotification(pkg, uid, channel, String.valueOf(i)); } } @@ -358,7 +373,7 @@ public class AssistantTest extends ServiceTestCase<Assistant> { @Test public void testRoundTripXml() throws Exception { String key1 = mAssistant.getKey("pkg1", 1, "channel1"); - ChannelImpressions ci1 = new ChannelImpressions(9, 10); + ChannelImpressions ci1 = new ChannelImpressions(); String key2 = mAssistant.getKey("pkg1", 1, "channel2"); ChannelImpressions ci2 = new ChannelImpressions(); for (int i = 0; i < 3; i++) { @@ -391,4 +406,43 @@ public class AssistantTest extends ServiceTestCase<Assistant> { assertEquals(ci3, assistant.getImpressions(key3)); } + @Test + public void testSettingsProviderUpdate() { + ContentResolver resolver = mApplication.getContentResolver(); + + // Set up channels + String key = mAssistant.getKey("pkg1", 1, "channel1"); + ChannelImpressions ci = new ChannelImpressions(); + for (int i = 0; i < 3; i++) { + ci.incrementViews(); + if (i % 2 == 0) { + ci.incrementDismissals(); + } + } + + mAssistant.insertImpressions(key, ci); + + // With default values, the blocking helper shouldn't be triggered. + assertEquals(false, ci.shouldTriggerBlock()); + + // Update settings values. + float newDismissToViewRatioLimit = 0f; + int newStreakLimit = 0; + Settings.Global.putFloat(resolver, + Settings.Global.BLOCKING_HELPER_DISMISS_TO_VIEW_RATIO_LIMIT, + newDismissToViewRatioLimit); + Settings.Global.putInt(resolver, + Settings.Global.BLOCKING_HELPER_STREAK_LIMIT, newStreakLimit); + + // Notify for the settings values we updated. + resolver.notifyChange( + Settings.Global.getUriFor(Settings.Global.BLOCKING_HELPER_STREAK_LIMIT), null); + resolver.notifyChange( + Settings.Global.getUriFor( + Settings.Global.BLOCKING_HELPER_DISMISS_TO_VIEW_RATIO_LIMIT), + null); + + // With the new threshold, the blocking helper should be triggered. + assertEquals(true, ci.shouldTriggerBlock()); + } } 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 d28e2ac0cffe..3253802bec03 100644 --- a/packages/ExtServices/tests/src/android/ext/services/notification/ChannelImpressionsTest.java +++ b/packages/ExtServices/tests/src/android/ext/services/notification/ChannelImpressionsTest.java @@ -16,7 +16,8 @@ package android.ext.services.notification; -import static android.ext.services.notification.ChannelImpressions.STREAK_LIMIT; +import static android.ext.services.notification.ChannelImpressions.DEFAULT_DISMISS_TO_VIEW_RATIO_LIMIT; +import static android.ext.services.notification.ChannelImpressions.DEFAULT_STREAK_LIMIT; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; @@ -37,7 +38,7 @@ public class ChannelImpressionsTest { public void testNoStreakNoBlock() { ChannelImpressions ci = new ChannelImpressions(); - for (int i = 0; i < STREAK_LIMIT - 1; i++) { + for (int i = 0; i < DEFAULT_STREAK_LIMIT - 1; i++) { ci.incrementViews(); ci.incrementDismissals(); } @@ -49,10 +50,10 @@ public class ChannelImpressionsTest { public void testNoStreakNoBlock_breakStreak() { ChannelImpressions ci = new ChannelImpressions(); - for (int i = 0; i < STREAK_LIMIT; i++) { + for (int i = 0; i < DEFAULT_STREAK_LIMIT; i++) { ci.incrementViews(); ci.incrementDismissals(); - if (i == STREAK_LIMIT - 1) { + if (i == DEFAULT_STREAK_LIMIT - 1) { ci.resetStreak(); } } @@ -64,7 +65,7 @@ public class ChannelImpressionsTest { public void testStreakBlock() { ChannelImpressions ci = new ChannelImpressions(); - for (int i = 0; i <= STREAK_LIMIT; i++) { + for (int i = 0; i <= DEFAULT_STREAK_LIMIT; i++) { ci.incrementViews(); ci.incrementDismissals(); } @@ -76,7 +77,7 @@ public class ChannelImpressionsTest { public void testRatio_NoBlockEvenWithStreak() { ChannelImpressions ci = new ChannelImpressions(); - for (int i = 0; i < STREAK_LIMIT; i++) { + for (int i = 0; i < DEFAULT_STREAK_LIMIT; i++) { ci.incrementViews(); ci.incrementDismissals(); ci.incrementViews(); @@ -108,4 +109,53 @@ public class ChannelImpressionsTest { // no crash ci.append(null); } + + @Test + public void testUpdateThresholds_streakLimitsCorrectlyApplied() { + int updatedStreakLimit = DEFAULT_STREAK_LIMIT + 3; + ChannelImpressions ci = new ChannelImpressions(); + ci.updateThresholds(DEFAULT_DISMISS_TO_VIEW_RATIO_LIMIT, updatedStreakLimit); + + for (int i = 0; i <= updatedStreakLimit; i++) { + ci.incrementViews(); + ci.incrementDismissals(); + } + + ChannelImpressions ci2 = new ChannelImpressions(); + ci2.updateThresholds(DEFAULT_DISMISS_TO_VIEW_RATIO_LIMIT, updatedStreakLimit); + + for (int i = 0; i < updatedStreakLimit; i++) { + ci2.incrementViews(); + ci2.incrementDismissals(); + } + + assertTrue(ci.shouldTriggerBlock()); + assertFalse(ci2.shouldTriggerBlock()); + } + + @Test + public void testUpdateThresholds_ratioLimitsCorrectlyApplied() { + float updatedDismissRatio = .99f; + ChannelImpressions ci = new ChannelImpressions(); + ci.updateThresholds(updatedDismissRatio, DEFAULT_STREAK_LIMIT); + + // N views, N-1 dismissals, which doesn't satisfy the ratio = 1 criteria. + for (int i = 0; i <= DEFAULT_STREAK_LIMIT; i++) { + ci.incrementViews(); + if (i != DEFAULT_STREAK_LIMIT) { + ci.incrementDismissals(); + } + } + + ChannelImpressions ci2 = new ChannelImpressions(); + ci2.updateThresholds(updatedDismissRatio, DEFAULT_STREAK_LIMIT); + + for (int i = 0; i <= DEFAULT_STREAK_LIMIT; i++) { + ci2.incrementViews(); + ci2.incrementDismissals(); + } + + assertFalse(ci.shouldTriggerBlock()); + assertTrue(ci2.shouldTriggerBlock()); + } } diff --git a/packages/InputDevices/res/values-in/strings.xml b/packages/InputDevices/res/values-in/strings.xml index 59a4f1e416d4..0c3bd7e9c330 100644 --- a/packages/InputDevices/res/values-in/strings.xml +++ b/packages/InputDevices/res/values-in/strings.xml @@ -40,7 +40,7 @@ <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Ibrani"</string> <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuania"</string> <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanyol (Latin)"</string> - <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvi"</string> + <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvia"</string> <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persia"</string> <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"Azerbaijan"</string> <string name="keyboard_layout_polish" msgid="1121588624094925325">"Polandia"</string> diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index 94cdb70b9b8d..95a01cf7a8a7 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth-oudiokanaalmodus"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Gebruik Bluetooth-oudiokodek\nKeuse: kanaalmodus"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth-oudio-LDAC-kodek: Speelgehalte"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Gebruik Bluetooth-oudio-LDAC\nKodekkeuse: Speelgehalte"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Stroming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Private DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Kies private DNS-modus"</string> diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index e9cc645b75de..935a9fc937e2 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"የብሉቱዝ ኦዲዮ ሰርጥ ሁነታ"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"የብሉቱዝ ኦዲዮ ኮዴክን አስጀምር\nምርጫ፦ የሰርጥ ሁነታ"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"የብሉቱዝ ኦዲዮ LDAC ኮዴክ ይምረጡ፦ የመልሶ ማጫወት ጥራት"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"የብሉቱዝ ኦዲዮ LDAC ኮዴክ አስጀምር\nምርጫ፦ የመልሶ ማጫወት ጥራት"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ዥረት፦ <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"የግል ዲኤንኤስ"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"የግል ዲኤንኤስ ሁነታ ይምረጡ"</string> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index e16b21063ff0..c05f90d968a4 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"وضع قناة صوت بلوتوث"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"اختيار برنامج ترميز الصوت لمشغّل\nالبلوتوث: وضع القناة"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"برنامج ترميز LDAC لصوت البلوتوث: جودة التشغيل"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"اختيار برنامج ترميز LDAC\nلصوت مشغّل البلوتوث: جودة التشغيل"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"البث: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"نظام أسماء النطاقات الخاص"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"اختر وضع نظام أسماء النطاقات الخاص"</string> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index 07028e72d505..c108b974b86f 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Režim kanala za Bluetooth audio"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Izaberite Bluetooth audio kodek:\n režim kanala"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth audio kodek LDAC: kvalitet reprodukcije"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Izaberite Bluetooth audio LDAC kodek:\n kvalitet snimka"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Strimovanje: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privatni DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Izaberite režim privatnog DNS-a"</string> diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index f820cee81e5f..a42a7168e433 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Канальны рэжым Bluetooth Audio"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Уключыць кодэк Bluetooth Audio\nВыбар: канальны рэжым"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Аўдыякодэк Bluetooth LDAC: якасць прайгравання"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Уключыць Bluetooth Audio LDAC\nВыбар кодэка: якасць прайгравання"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Перадача плынню: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Прыватная DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Выберыце рэжым прыватнай DNS"</string> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index cf4d882aa71f..4c516eb13d56 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим на канала на звука през Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Задействане на аудиокодек за Bluetooth\nИзбор: Режим на канала"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Кодек за звука през Bluetooth с технологията LDAC: Качество на възпроизвеждане"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Задействане на аудиокодек за 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="select_private_dns_configuration_title" msgid="3700456559305263922">"Частен DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Изберете режим на частния DNS"</string> diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index 46ded74a19a1..46fb0afe32bf 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ব্লুটুথ অডিও চ্যানেল মোড"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"ব্লুটুথ অডিও কোডেক ট্রিগার করুন\nএটি বেছে নেওয়া আছে: চ্যানেল মোড"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ব্লুটুথ অডিও LDAC কোডেক: প্লেব্যাক গুণমান"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"ব্লুটুথ অডিও LDAC কোডেক ট্রিগার করুন\nএটি বেছে নেওয়া আছে: প্লেব্যাকের কোয়ালিটি"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"স্ট্রিমিং: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ব্যক্তিগত ডিএনএস"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ব্যক্তিগত ডিএনএস মোড বেছে নিন"</string> diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index 028ba9ee0c48..a35f4f2e27cb 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Način Bluetooth audio kanala"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Aktivirajte Bluetooth Audio Codec\nOdabir: Način rada po kanalima"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC kodek: Kvalitet reprodukcije"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Aktivirajte Bluetooth Audio \nOdabir kodeka: Kvalitet reprodukcije"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Prijenos: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privatni DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Odaberite način rada privatnog DNS-a"</string> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 666824dc575e..511ac70e4483 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode de canal de l\'àudio per Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Activa el còdec d\'àudio per Bluetooth\nSelecció: mode de canal"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Còdec LDAC d\'àudio per Bluetooth: qualitat de reproducció"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Activa l\'LDAC d\'àudio per Bluetooth\nSelecció de còdec: qualitat 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="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> diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index 35576f79d4c2..cf011d5ab648 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio – režim kanálu"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Spustit zvukový kodek Bluetooth\nVýběr: režim kanálu"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Kodek Bluetooth Audio LDAC: Kvalita přehrávání"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Spustit zvukový kodek Bluetooth LDAC\nVýběr kodeku: kvalita přehrávání"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streamování: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Soukromé DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Vyberte soukromý režim DNS"</string> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index 6308c8c6350e..0f670b413f32 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanaltilstand for Bluetooth-lyd"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Udløs codec for Bluetooth-lyd\nValg: Kanaltilstand"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"LDAC-codec for Bluetooth-lyd: Afspilningskvalitet"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Udløs LDAC-codec for Bluetooth-lyd\nValg: Afspilningskvalitet"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streamer: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privat DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Vælg privat DNS-tilstand"</string> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index 836a0e7421f1..223b583e44d6 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modus des Bluetooth-Audiokanals"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth-Audio-Codec auslösen\nAuswahl: Kanalmodus"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth-Audio-LDAC-Codec: Wiedergabequalität"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Bluetooth-Audio-LDAC-Codec auslösen\nAuswahl: Wiedergabequalität"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privates DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Privaten DNS-Modus auswählen"</string> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index fcffad7b0a05..6b3841d06132 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Λειτουργία καναλιού ήχου Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Ενεργοποίηση κωδικοποιητή ήχου Bluetooth\nΕπιλογή: Λειτουργία καναλιού"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Κωδικοποιητής LDAC ήχου Bluetooth: Ποιότητα αναπαραγωγής"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Ενεργοποίηση 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="select_private_dns_configuration_title" msgid="3700456559305263922">"Ιδιωτικό DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Επιλέξτε τη λειτουργία ιδιωτικού DNS"</string> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index d75bf16d29e8..9bb5347283bd 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth audio channel mode"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Trigger Bluetooth Audio Codec\nSelection: Channel Mode"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth audio LDAC codec: Playback quality"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Trigger Bluetooth Audio LDAC\nCodec Selection: Playback 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="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> diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml index d75bf16d29e8..9bb5347283bd 100644 --- a/packages/SettingsLib/res/values-en-rCA/strings.xml +++ b/packages/SettingsLib/res/values-en-rCA/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth audio channel mode"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Trigger Bluetooth Audio Codec\nSelection: Channel Mode"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth audio LDAC codec: Playback quality"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Trigger Bluetooth Audio LDAC\nCodec Selection: Playback 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="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> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index d75bf16d29e8..9bb5347283bd 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth audio channel mode"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Trigger Bluetooth Audio Codec\nSelection: Channel Mode"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth audio LDAC codec: Playback quality"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Trigger Bluetooth Audio LDAC\nCodec Selection: Playback 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="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> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index d75bf16d29e8..9bb5347283bd 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth audio channel mode"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Trigger Bluetooth Audio Codec\nSelection: Channel Mode"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth audio LDAC codec: Playback quality"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Trigger Bluetooth Audio LDAC\nCodec Selection: Playback 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="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> diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 2c93b46b3f7d..6a4e3800cf01 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal del audio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Activar el códec de audio por Bluetooth\nSelección: modo de canal"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Códec del audio Bluetooth LDAC: calidad de reproducción"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Activar LDAC de audio por Bluetooth\nSelección de códec: calidad de reproducción"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Transmitiendo: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</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> diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index 235c6c1c5d35..94d7fdcbabaa 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetoothi heli kanalirežiim"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetoothi helikodeki käivitamine\nValik: kanalirežiim"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetoothi LDAC-helikodek: taasesituskvaliteet"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Bluetoothi LDAC-helikodeki käivitamine\nValik: esituskvaliteet"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Voogesitus: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privaatne DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Privaatse DNS-režiimi valimine"</string> diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index 6f736d4449f8..c58b52efbdf7 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"حالت کانال بلوتوث صوتی"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"راهاندازی کدک صوتی بلوتوثی\nانتخاب: حالت کانال"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"کدک LDAC صوتی بلوتوث: کیفیت پخش"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"راهاندازی LDAC صوتی بلوتوثی\nانتخاب کدک: کیفیت پخش"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"پخش جریانی: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS خصوصی"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"حالت DNS خصوصی را انتخاب کنید"</string> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index 1971999a0653..25a8f56ee20a 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth-äänen kanavatila"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Käynnistä Bluetooth-äänipakkaus\nValinta: kanavatila"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth-äänen LDAC-koodekki: Toiston laatu"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Käynnistä Bluetooth-äänen LDAC\n‑pakkauksen valinta: toiston laatu"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Striimaus: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Yksityinen DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Valitse yksityinen DNS-tila"</string> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index 608baa834460..283dd2b72607 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode de canal pour l\'audio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Déclencher le codec audio Bluetooth\nSélection : mode Canal"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codec audio Bluetooth LDAC : qualité de lecture"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Déclencher le codec audio Bluetooth LDAC\nSélection : qualité de lecture"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Diffusion : <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS privé"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Sélectionnez le mode DNS privé"</string> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index 0bfbf8bedce6..eb03b53080cb 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode de chaîne de l\'audio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Critère de sélection du codec audio\nBluetooth : mode de chaîne"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codec audio Bluetooth LDAC : qualité de lecture"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Critère de sélection du codec audio\nLDAC : qualité de lecture"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Diffusion : <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS privé"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Sélectionner le mode DNS privé"</string> diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index dc98345433b6..c90dcc99c17d 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canle de audio por Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Activar códec de audio por Bluetooth\nSelección: modo de canle"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Códec LDAC de audio por Bluetooth: calidade de reprodución"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Activar LDAC de audio por Bluetooth\nSelección de códec: calidade 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="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> diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index 3d9d984b2bd6..14c1e0dbda3f 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Način kanala za Bluetooth Audio"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Pokreni odabir kodeka za Bluetooth\nAudio: način kanala"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Kodek za Bluetooth Audio LDAC: kvaliteta reprodukcije"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Pokreni odabir kodeka za Bluetooth Audio\nLDAC: kvaliteta reprodukcije"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Strujanje: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privatni DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Odaberite način privatnog DNS-a"</string> diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index 76a289e78e2a..038d4079e794 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth hang – Csatornamód"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth-hangkodek aktiválása\nKiválasztás: Csatornamód"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth LDAC hangkodek: lejátszási minőség"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Bluetooth LDAC hangkodek aktiválása\nKiválasztás: Lejátszási minőség"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streamelés: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privát DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"„Privát DNS” mód kiválasztása"</string> diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index e83e30c3c3e6..1e3cc9c0d8cd 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth աուդիո կապուղու ռեժիմը"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Գործարկել Bluetooth աուդիո կոդեկը\nԸնտրություն՝ կապուղու ռեժիմ"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth աուդիո LDAC կոդեկ՝ նվագարկման որակ"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Գործարկել 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="select_private_dns_configuration_title" msgid="3700456559305263922">"Մասնավոր DNS սերվեր"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Ընտրեք անհատական DNS սերվերի ռեժիմը"</string> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index e8fbd830dcc1..17009dc511cf 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode Channel Audio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Aktifkan Codec Audio Bluetooth\nPilihan: Mode Channel"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codec LDAC Audio Bluetooth: Kualitas Pemutaran"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Aktifkan LDAC Audio Bluetooth\nPilihan Codec: Kualitas Pemutaran"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS Pribadi"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Pilih Mode DNS Pribadi"</string> diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index 87617317a78d..d1c3339b55cd 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Hljóðrásarstilling Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Virkja Bluetooth-hljóðkóðara\nVal: hljóðrásarstilling"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth LDAC-hljóðkóðari: gæði spilunar"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Virkja Bluetooth LDAC-hljóð\nVal kóðara: gæði spilunar"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streymi: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Lokað DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Velja lokaða DNS-stillingu"</string> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index 6d0bcb609eec..93754dbb1624 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modalità canale audio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Attiva il codec audio Bluetooth\nSelezione: Modalità canale"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codec LDAC audio Bluetooth: qualità di riproduzione"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Seleziona attivazione codec LDAC audio Bluetooth:\n qualità di riproduzione"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS privato"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Seleziona modalità DNS privato"</string> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index f028842a6894..5a0a35f21f86 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"מצב של ערוץ אודיו ל-Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"הפעלת Codec אודיו ל-Bluetooth\nבחירה: מצב ערוץ"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codec אודיו LDAC ל-Bluetooth: איכות נגינה"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"הפעלת 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="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS פרטי"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"צריך לבחור במצב DNS פרטי"</string> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index 74b7beb4edb5..8bf0335bbfe8 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth オーディオ チャンネル モード"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth オーディオ コーデックを起動\n選択: チャンネル モード"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth オーディオ LDAC コーデック: 再生音質"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"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="select_private_dns_configuration_title" msgid="3700456559305263922">"プライベート DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"プライベート DNS モードを選択"</string> diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index b364aba1c769..8b56159768aa 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth აუდიოს არხის რეჟიმი"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth-ის აუდიო კოდეკის გაშვება\nარჩევანი: არხის რეჟიმი"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth აუდიოს LDAC კოდეკის დაკვრის ხარისხი"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"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="select_private_dns_configuration_title" msgid="3700456559305263922">"პირადი DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"აირჩიეთ პირადი DNS რეჟიმი"</string> diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index 59940380be7d..b2a1eb228953 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth аудиомазмұны бойынша арна режимі"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth аудиокодегін іске қосу\nТаңдау: арна режимі"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth LDAC аудиокодегі: ойнату сапасы"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"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="select_private_dns_configuration_title" msgid="3700456559305263922">"Жеке DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Жеке DNS режимін таңдаңыз"</string> diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index a4cf0ba5f74c..92a3dbfa7df0 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"មុខងាររលកសញ្ញាសំឡេងប៊្លូធូស"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"ជំរុញការជ្រើសរើសកូឌិកសំឡេង\nប៊្លូធូស៖ ប្រភេទសំឡេង"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"កូឌិកប្រភេទ LDAC នៃសំឡេងប៊្លូធូស៖ គុណភាពចាក់សំឡេង"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"ជំរុញការជ្រើសរើសកូឌិកប្រភេទ LDAC\nនៃសំឡេងប៊្លូធូស៖ គុណភាពចាក់សំឡេង"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"កំពុងចាក់៖ <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS ឯកជន"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ជ្រើសរើសមុខងារ DNS ឯកជន"</string> diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index 465d78fbac4b..7ce59f19a982 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಚಾನೆಲ್ ಮೋಡ್"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಕೋಡೆಕ್ ಅನ್ನು ಟ್ರಿಗ್ಗರ್ ಮಾಡಿ\nಆಯ್ಕೆ: ಚಾನಲ್ ಮೋಡ್"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೊ LDAC ಕೋಡೆಕ್: ಪ್ಲೇಬ್ಯಾಕ್ ಗುಣಮಟ್ಟ"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ LDAC ಅನ್ನು ಟ್ರಿಗ್ಗರ್ ಮಾಡಿ \n ಕೋಡೆಕ್ ಆಯ್ಕೆ: ಪ್ಲೇಬ್ಯಾಕ್ ಗುಣಮಟ್ಟ"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ಸ್ಟ್ರೀಮಿಂಗ್: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ಖಾಸಗಿ DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ಖಾಸಗಿ DNS ಮೋಡ್ ಆಯ್ಕೆಮಾಡಿ"</string> diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index 77d5a7030609..0aa80e7e009c 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"블루투스 오디오 채널 모드"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"블루투스 오디오 코덱 실행\n선택: 채널 모드"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"블루투스 오디오 LDAC 코덱: 재생 품질"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"블루투스 오디오 LDAC\n코덱 선택 실행: 재생 품질"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"스트리밍: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"비공개 DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"비공개 DNS 모드 선택"</string> diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index ae8e3940d927..da29653ca52b 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth аудио каналынын режими"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth Audio кодегин иштетүү\nТандоо: Канал режими"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth аудио LDAC кодеги: Ойнотуу сапаты"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Bluetooth Audio кодегин иштетүү\nТандоо: Ойнотуу сапаты"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Трансляция: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Купуя DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Жеке DNS режимин тандаңыз"</string> diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index 8969dc603c04..2bf4ce43d0a1 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"„Bluetooth“ garso kanalo režimas"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Suaktyvinti „Bluetooth“ garso kodeką\nPasirinkimas: kanalo režimas"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"„Bluetooth“ garso LDAC kodekas: atkūrimo kokybė"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Suaktyvinti „Bluetooth“ garso LDAC\nKodeko pasirinkimas: atkūrimo kokybė"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Srautinis perdavimas: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privatus DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Pasirinkite privataus DNS režimą"</string> diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index 051cc83f829d..168edd8672c4 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth audio kanāla režīms"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Aktivizēt Bluetooth audio kodeku\nAtlase: kanāla režīms"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth audio LDAC kodeks: atskaņošanas kvalitāte"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Aktivizēt Bluetooth audio LDAC\nkodeka atlasi: atskaņošanas kvalitāte"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Straumēšana: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privāts DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Atlasiet privāta DNS režīmu"</string> diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index a6dc4e9ca4ad..3481de8b871d 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим на канал за аудио преку Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Вклучете го аудио кодекот преку Bluetooth\nСелекција: режим на канал"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Кодек за LDAC-аудио преку Bluetooth: квалитет на репродукција"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Вклучете селекција на кодек за LDAC-аудио\nпреку Bluetooth: квалитет на репродукција"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Емитување: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Приватен DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Изберете режим на приватен DNS"</string> diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index 242e58eb66a1..f6539a16e50b 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth ഓഡിയോ ചാനൽ മോഡ്"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth Audio Codec\nSelection ട്രിഗ്ഗര് ചെയ്യുക: ചാനൽ മോഡ്"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth ഓഡിയോ LDAC കോഡെക്: പ്ലേബാക്ക് നിലവാരം"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"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="select_private_dns_configuration_title" msgid="3700456559305263922">"സ്വകാര്യ DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"സ്വകാര്യ DNS മോഡ് തിരഞ്ഞെടുക്കുക"</string> diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 491f20fc9354..53146e558981 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth аудио сувгийн горим"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth-н аудио кодлогчийг өдөөх\nСонголт: Сувгийн горим"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Аудио LDAC Кодлогч: Тоглуулагчийн чанар"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"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="select_private_dns_configuration_title" msgid="3700456559305263922">"Хувийн DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Хувийн DNS Горимыг сонгох"</string> diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index d71004bb422e..02e245f5ee43 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ब्लूटूथ ऑडिओ चॅनेल मोड"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"ब्लूटूथ ऑडिओ Codec ट्रिगर करा\nनिवड: चॅनेल मोड"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ब्लूटूथ ऑडिओ LDAC कोडेक: प्लेबॅक गुणवत्ता"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"ब्लूटूथ ऑडिओ LDAC\nकोडेक निवड ट्रिगर करा: प्लेबॅक गुणवत्ता"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"स्ट्रीमिंग: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"खाजगी DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"खाजगी DNS मोड निवडा"</string> diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index 5de4df455154..dc7b1c601ed7 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mod Saluran Audio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Cetuskan Codec Audio Bluetooth\nPilihan: Mod Saluran"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codec LDAC Audio Bluetooth: Kualiti Main Balik"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Cetuskan LDAC Audio Bluetooth\nPilihan Codec: Mutu Main Semula"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Penstriman: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS Peribadi"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Pilih Mod DNS Peribadi"</string> diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index 0c6e11669682..b5163e044689 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanalmodus for Bluetooth-lyd"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Utløs kodek for Bluetooth-lyd\nValg: kanalmodus"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"LDAC-kodek for Bluetooth-lyd: avspillingskvalitet"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Utløs LDAK for Bluetooth-lyd\nValg av kodek: avspillingskvalitet"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Strømming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privat DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Velg Privat DNS-modus"</string> diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index af5f71d296af..5ae529896136 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ब्लुटुथ अडियो च्यानलको मोड"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"ब्लुटुथ अडियो कोडेक ट्रिगर गर्नुहोस्\nचयन: च्यानल मोड"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ब्लुटुथ अडियो LDAC कोडेक: प्लेब्याक गुणस्तर"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"ब्लुटुथ अडियो LDAC \n कोडेक ट्रिगर गर्नुहोस्: प्लेब्याकको गुणस्तर"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"स्ट्रिमिङ: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"निजी DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"निजी DNS मोड चयन गर्नुहोस्"</string> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index d5f0f994c022..f557f44c8204 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanaalmodus voor Bluetooth-audio"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Codec voor Bluetooth-audio activeren\nSelectie: Kanaalmodus"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"LDAC-codec voor Bluetooth-audio: afspeelkwaliteit"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"LDAC-codec voor Bluetooth-audio activeren\nSelectie: Afspeelkwaliteit"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privé-DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecteer de modus Privé-DNS"</string> diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 3d8e256458a9..a8e7704cd5dc 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਚੈਨਲ ਮੋਡ"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"ਬਲੂਟੁੱਥ ਆਡੀਓ ਕੋਡੇਕ\nਚੋਣ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰੋ: ਚੈਨਲ ਮੋਡ"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ਬਲੂਟੁੱਥ ਆਡੀਓ LDAC ਕੋਡੇਕ: ਪਲੇਬੈਕ ਕੁਆਲਿਟੀ"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"ਬਲੂਟੁੱਥ ਆਡੀਓ LDAC\nਕੋਡੇਕ ਚੋਣ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰੋ: ਪਲੇਬੈਕ ਕੁਆਲਿਟੀ"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ਸਟ੍ਰੀਮਿੰਗ: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ਨਿੱਜੀ DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ਨਿੱਜੀ DNS ਮੋਡ ਚੁਣੋ"</string> diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 272eaff278be..c78db2735112 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Dźwięk Bluetooth – tryb kanału"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Uruchom kodek dźwięku Bluetooth\nWybór: tryb kanału"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Kodek dźwięku Bluetooth LDAC: jakość odtwarzania"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Uruchom kodek dźwięku Bluetooth LDAC\nWybór: jakość odtwarzania"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Strumieniowe przesyłanie danych: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Prywatny DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Wybierz tryb prywatnego DNS"</string> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index 671e9a0140c2..17bce0e4d465 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal de áudio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Acionar codec de áudio Bluetooth\nSeleção: modo de canal"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codec de áudio Bluetooth LDAC: qualidade de reprodução"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Acionar seleção de codec de áudio\nBluetooth LDAC: qualidade de reprodução"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS particular"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecione o modo DNS particular"</string> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index 671e9a0140c2..17bce0e4d465 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal de áudio Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Acionar codec de áudio Bluetooth\nSeleção: modo de canal"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codec de áudio Bluetooth LDAC: qualidade de reprodução"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Acionar seleção de codec de áudio\nBluetooth LDAC: qualidade de reprodução"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS particular"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecione o modo DNS particular"</string> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index 70ec3888f2ef..3e15ff3a7cff 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим аудиоканала Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Запустить аудиокодек для Bluetooth\nВыбор: режим канала"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Аудиокодек LDAC для Bluetooth: качество воспроизведения"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Запустить аудиокодек 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="select_private_dns_configuration_title" msgid="3700456559305263922">"Персональный DNS-сервер"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Выберите режим персонального DNS-сервера"</string> diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index 42d020782520..578b92a2045b 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"බ්ලූටූත් ශ්රව්ය නාලිකා ප්රකාරය"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"බ්ලූටූත් ශ්රව්ය කේතය ක්රියාරම්භ කරන්න\nතෝරා ගැනීම: නාලිකා ප්රකාරය"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"බ්ලූටූත් ශ්රව්ය LDAC පසුධාවන ගුණත්වය"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"බ්ලූටූත් ශ්රව්ය LDAC ක්රියාරම්භ කරන්න\nCodec තේරීම: පසුධාවන ගුණත්වය"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ප්රවාහ කරමින්: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"පුද්ගලික DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"පුද්ගලික DNS ප්රකාරය තෝරන්න"</string> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index d50bee06baae..9f0a59d4edfe 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio – režim kanála"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Spustiť zvukový kodek Bluetooth\nVýber: režim kanála"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Kodek LDAC Bluetooth Audio: Kvalita prehrávania"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Spustiť zvukový kodek Bluetooth typu LDAC\nVýber kodeku: kvalita prehrávania"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streamovanie: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Súkromné DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Výber súkromného režimu DNS"</string> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index e7d4ad7f4c8d..c9e98bc4af26 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Način zvočnega kanala prek Bluetootha"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Sproži zvočni kodek za Bluetooth\nIzbor: način kanala"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Zvočni kodek LDAC za Bluetooth: kakovost predvajanja"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Sproži kodek LDAC za zvok prek Bluetootha\nIzbira kodeka: kakovost predvajanja"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Pretočno predvajanje: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Zasebni strežnik DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Izbira načina zasebnega strežnika DNS"</string> diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml index 311b3fa88b3b..efc35ad86975 100644 --- a/packages/SettingsLib/res/values-sq/strings.xml +++ b/packages/SettingsLib/res/values-sq/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Regjimi i kanalit Bluetooth Audio"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Aktivizo kodekun e audios me Bluetooth\nZgjedhja: Modaliteti i kanalit"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Kodeku LDAC i audios së Bluetooth-it: Cilësia e luajtjes"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Aktivizo LDAC të audios me Bluetooth\nZgjedhja e kodekut: Cilësia e luajtjes"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Transmetimi: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS-ja private"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Zgjidh modalitetin e DNS-së private"</string> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 56039708d1b7..7cfcdd190c6d 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим канала за Bluetooth аудио"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Изаберите Bluetooth аудио кодек:\n режим канала"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth аудио кодек LDAC: квалитет репродукције"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Изаберите 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="select_private_dns_configuration_title" msgid="3700456559305263922">"Приватни DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Изаберите режим приватног DNS-а"</string> diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index e4db92290947..9293148912d9 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanalläge för Bluetooth-ljud"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Aktivera ljudkodek för Bluetooth\nVal: kanalläge"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth-ljud via LDAC-kodek: uppspelningskvalitet"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Aktivera Bluetooth-ljud via LDAC-kodek\nVal: uppspelningskvalitet"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Privat DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Välj läget Privat DNS"</string> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index b124edd5f140..70dc27632f75 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Hali ya Mkondo wa Sauti ya Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Weka Kodeki ya Sauti ya Bluetooth\nUteuzi: Hali ya Kituo"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Kodeki ya LDAC ya Sauti ya Bluetooth: Ubora wa Kucheza"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Weka LDAC ya Sauti ya Bluetooth\nUteuzi wa Kodeki: Ubora wa Video"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Kutiririsha: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</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> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index 9ec0d6f0991e..041f27cbfd22 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"బ్లూటూత్ ఆడియో ఛానెల్ మోడ్"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"బ్లూటూత్ ఆడియో కోడెక్ని సక్రియం చేయండి\nఎంపిక: ఛానెల్ మోడ్"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"బ్లూటూత్ ఆడియో LDAC కోడెక్: ప్లేబ్యాక్ నాణ్యత"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"బ్లూటూత్ ఆడియో LDAC యాక్టివ్ చేయండి\nకోడెక్ ఎంపిక: ప్లేబ్యాక్ నాణ్యత"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ప్రసారం చేస్తోంది: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ప్రైవేట్ DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ప్రైవేట్ DNS మోడ్ను ఎంచుకోండి"</string> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index a9ab935869a6..ee857ad58d29 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"โหมดช่องสัญญาณเสียงบลูทูธ"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"ทริกเกอร์การเลือกตัวแปลงรหัส\nเสียงบลูทูธ: โหมดช่องสัญญาณ"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ตัวแปลงรหัสเสียงบลูทูธที่ใช้ LDAC: คุณภาพการเล่น"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"ทริกเกอร์การเลือกตัวแปลงรหัส LDAC\nเสียงบลูทูธ: คุณภาพการเล่น"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"สตรีมมิง: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS ส่วนตัว"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"เลือกโหมด DNS ส่วนตัว"</string> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index 666fe83dda5c..a6242bf256c9 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Channel Mode ng Bluetooth Audio"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"I-trigger ang Pagpili sa Audio Codec ng\nBluetooth: Channel Mode"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Audio LDAC Codec ng Bluetooth: Kalidad ng Pag-playback"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"I-trigger ang Pagpili sa Audio LDAC\nCodec ng Bluetooth: Kalidad ng Pag-playback"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Pribadong DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Pumili ng Pribadong DNS Mode"</string> diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index fc3ecb68f4f0..7ceea17db78c 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Ses Kanalı Modu"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth Ses Codec\'i Tetikleme\nSeçimi: Kanal Modu"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Ses LDAC Codec\'i: Oynatma Kalitesi"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Bluetooth Ses LDAC\nCodec Seçimini Tetikle: Oynatma Kalitesi"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Akış: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Gizli DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Gizli DNS Modunu Seçin"</string> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index b8133e5ebf7a..70f949616ede 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим каналу для аудіо Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Активувати кодек для аудіо Bluetooth\nВибір: режим каналу"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Кодек для аудіо Bluetooth LDAC: якість відтворення"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Активувати 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="select_private_dns_configuration_title" msgid="3700456559305263922">"Приватна DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Виберіть режим \"Приватна DNS\""</string> diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index 28c72f75f76f..1ebf4bcb7ad5 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"بلوٹوتھ آڈیو چینل موڈ"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"بلوٹوتھ آڈیو کوڈیک کو ٹریگر کریں\nانتخاب: چینل موڈ"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"بلوٹوتھ آڈیو LDAC کوڈیک: پلے بیک کا معیار"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"بلوٹوتھ آڈیو LDAC کو ٹریگر کریں\nکوڈیک کا انتخاب: پلے بیک کا معیار"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"سلسلہ بندی: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"نجی DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"نجی DNS وضع منتخب کریں"</string> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 9fd9cf5b5676..395be1d27688 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth audio kanali rejimi"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Bluetooth orqali uzatish uchun audiokodek\nTanlash: kanal rejimi"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"LDAC audiokodeki bilan ijro etish sifati (Bluetooth orqali)"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Bluetooth uchun LDAC audiokodekini ishga tushirish\nTanlash: ijro etish 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="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> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index 92282dd4690f..051b0373fb2a 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Chế độ kênh âm thanh Bluetooth"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Kích hoạt chế độ chọn codec\nâm thanh Bluetooth: Chế độ kênh"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Codec LDAC âm thanh Bluetooth: Chất lượng phát lại"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Kích hoạt chế độ chọn codec LDAC\nâm thanh Bluetooth: Chất lượng phát"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Truyền trực tuyến: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS riêng"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Chọn chế độ DNS riêng"</string> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index 2a3b82e3e4ff..18e11cfa8ef1 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"蓝牙音频声道模式"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"触发蓝牙音频编解码器\n选择:声道模式"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"蓝牙音频 LDAC 编解码器:播放质量"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"触发蓝牙音频 LDAC\n编解码器选择:播放质量"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"正在流式传输:<xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"私人 DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"选择私人 DNS 模式"</string> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index c2a8c3492c4b..f9f5e63011ff 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"藍牙音訊聲道模式"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"觸發藍牙音訊編解碼器\n選項:聲道模式"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"藍牙音訊 LDAC 編解碼器:播放品質"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"觸發藍牙音訊 LDAC\n編解碼器選項:播放品質"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"正在串流:<xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"不公開的網域名稱系統 (DNS)"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"選取不公開的網域名稱系統 (DNS) 模式"</string> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index 477395d69579..199b17ce56be 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -224,8 +224,7 @@ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"藍牙音訊聲道模式"</string> <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"觸發藍牙音訊轉碼器\n選項:聲道模式"</string> <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"藍牙音訊 LDAC 轉碼器:播放品質"</string> - <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (6893955536658137179) --> - <skip /> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"觸發藍牙音訊 LDAC\n轉碼器選項:播放品質"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"串流中:<xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"私人 DNS"</string> <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"選取私人 DNS 模式"</string> diff --git a/packages/SettingsLib/res/values/arrays.xml b/packages/SettingsLib/res/values/arrays.xml index 59e5cfb20440..c926e1ff48a7 100644 --- a/packages/SettingsLib/res/values/arrays.xml +++ b/packages/SettingsLib/res/values/arrays.xml @@ -563,18 +563,18 @@ <item>0</item> <item>334</item> </array> <array name="batterymeter_plus_points"> + <item>3</item><item>0</item> <item>5</item><item>0</item> - <item>11</item><item>0</item> - <item>11</item><item>5</item> - <item>16</item><item>5</item> - <item>16</item><item>11</item> - <item>11</item><item>11</item> - <item>11</item><item>16</item> - <item>5</item><item>16</item> - <item>5</item><item>11</item> - <item>0</item><item>11</item> - <item>0</item><item>5</item> + <item>5</item><item>3</item> + <item>8</item><item>3</item> + <item>8</item><item>5</item> <item>5</item><item>5</item> + <item>5</item><item>8</item> + <item>3</item><item>8</item> + <item>3</item><item>5</item> + <item>0</item><item>5</item> + <item>0</item><item>3</item> + <item>3</item><item>3</item> </array> </resources> diff --git a/packages/SettingsLib/res/values/dimens.xml b/packages/SettingsLib/res/values/dimens.xml index cf4261c6bc91..aeb0a21b7d41 100644 --- a/packages/SettingsLib/res/values/dimens.xml +++ b/packages/SettingsLib/res/values/dimens.xml @@ -57,6 +57,7 @@ <dimen name="battery_height">14.5dp</dimen> <dimen name="battery_width">9.5dp</dimen> + <dimen name="battery_powersave_outline_thickness">1dp</dimen> <dimen name="bt_battery_padding">2dp</dimen> diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java b/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java index 54a1af4da1ca..6a2a04a76ed5 100644 --- a/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java +++ b/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java @@ -47,8 +47,10 @@ public final class CategoryKey { "com.android.settings.category.ia.development"; public static final String CATEGORY_NOTIFICATIONS = "com.android.settings.category.ia.notifications"; - public static final String CATEGORY_DO_NOT_DISTURB = - "com.android.settings.category.ia.dnd"; + public static final String CATEGORY_DO_NOT_DISTURB = "com.android.settings.category.ia.dnd"; + public static final String CATEGORY_GESTURES = "com.android.settings.category.ia.gestures"; + public static final String CATEGORY_NIGHT_LIGHT = + "com.android.settings.category.ia.night_light"; public static final Map<String, String> KEY_COMPAT_MAP; diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java index 06e2ee103600..b7699f180281 100644 --- a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java +++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java @@ -67,6 +67,19 @@ public class PowerWhitelistBackend { return mWhitelistedApps.contains(pkg); } + public boolean isWhitelisted(String[] pkgs) { + if (ArrayUtils.isEmpty(pkgs)) { + return false; + } + for (String pkg : pkgs) { + if (isWhitelisted(pkg)) { + return true; + } + } + + return false; + } + public boolean isSysWhitelistedExceptIdle(String pkg) { return mSysWhitelistedAppsExceptIdle.contains(pkg); } diff --git a/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java b/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java index 343191dd35fa..5b8e1fc7f6f8 100644 --- a/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java +++ b/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java @@ -24,9 +24,11 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; +import android.graphics.Paint.Style; import android.graphics.Path; import android.graphics.Path.Direction; import android.graphics.Path.FillType; +import android.graphics.Path.Op; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Typeface; @@ -49,6 +51,7 @@ public class BatteryMeterDrawableBase extends Drawable { protected final Paint mTextPaint; protected final Paint mBoltPaint; protected final Paint mPlusPaint; + protected final Paint mPowersavePaint; protected float mButtonHeightFraction; private int mLevel = -1; @@ -90,6 +93,7 @@ public class BatteryMeterDrawableBase extends Drawable { private final RectF mPlusFrame = new RectF(); private final Path mShapePath = new Path(); + private final Path mOutlinePath = new Path(); private final Path mTextPath = new Path(); public BatteryMeterDrawableBase(Context context, int frameColor) { @@ -155,6 +159,12 @@ public class BatteryMeterDrawableBase extends Drawable { mPlusPaint.setColor(Utils.getDefaultColor(mContext, R.color.batterymeter_plus_color)); mPlusPoints = loadPoints(res, R.array.batterymeter_plus_points); + mPowersavePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPowersavePaint.setColor(mPlusPaint.getColor()); + mPowersavePaint.setStyle(Style.STROKE); + mPowersavePaint.setStrokeWidth(context.getResources() + .getDimensionPixelSize(R.dimen.battery_powersave_outline_thickness)); + mIntrinsicWidth = context.getResources().getDimensionPixelSize(R.dimen.battery_width); mIntrinsicHeight = context.getResources().getDimensionPixelSize(R.dimen.battery_height); } @@ -286,7 +296,9 @@ public class BatteryMeterDrawableBase extends Drawable { } protected int batteryColorForLevel(int level) { - return mCharging ? mChargeColor : getColorForLevel(level); + return (mCharging || (mPowerSaveEnabled && mPowerSaveAsColorError)) + ? mChargeColor + : getColorForLevel(level); } @Override @@ -331,10 +343,15 @@ public class BatteryMeterDrawableBase extends Drawable { // define the battery shape mShapePath.reset(); + mOutlinePath.reset(); final float radius = getRadiusRatio() * (mFrame.height() + buttonHeight); mShapePath.setFillType(FillType.WINDING); mShapePath.addRoundRect(mFrame, radius, radius, Direction.CW); mShapePath.addRect(mButtonFrame, Direction.CW); + mOutlinePath.addRoundRect(mFrame, radius, radius, Direction.CW); + Path p = new Path(); + p.addRect(mButtonFrame, Direction.CW); + mOutlinePath.op(p, Op.XOR); if (mCharging) { // define the bolt shape @@ -443,6 +460,11 @@ public class BatteryMeterDrawableBase extends Drawable { c.drawText(pctText, pctX, pctY, mTextPaint); } } + + // Draw the powersave outline last + if (!mCharging && mPowerSaveEnabled && mPowerSaveAsColorError) { + c.drawPath(mOutlinePath, mPowersavePaint); + } } // Some stuff required by Drawable. diff --git a/packages/SettingsLib/src/com/android/settingslib/location/RecentLocationApps.java b/packages/SettingsLib/src/com/android/settingslib/location/RecentLocationApps.java index 6025d68a6d0e..13364aba00fd 100644 --- a/packages/SettingsLib/src/com/android/settingslib/location/RecentLocationApps.java +++ b/packages/SettingsLib/src/com/android/settingslib/location/RecentLocationApps.java @@ -26,6 +26,7 @@ import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; +import android.text.format.DateUtils; import android.util.IconDrawableFactory; import android.util.Log; import java.util.ArrayList; @@ -41,7 +42,8 @@ public class RecentLocationApps { @VisibleForTesting static final String ANDROID_SYSTEM_PACKAGE_NAME = "android"; - private static final int RECENT_TIME_INTERVAL_MILLIS = 15 * 60 * 1000; + // Keep last 24 hours of location app information. + private static final long RECENT_TIME_INTERVAL_MILLIS = DateUtils.DAY_IN_MILLIS; @VisibleForTesting static final int[] LOCATION_OPS = new int[] { diff --git a/packages/SettingsLib/src/com/android/settingslib/users/UserManagerHelper.java b/packages/SettingsLib/src/com/android/settingslib/users/UserManagerHelper.java index e2faf6a01197..44e7b07cc94c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/users/UserManagerHelper.java +++ b/packages/SettingsLib/src/com/android/settingslib/users/UserManagerHelper.java @@ -36,7 +36,10 @@ import java.util.List; /** * Helper class for managing users, providing methods for removing, adding and switching users. + * + * @deprecated - Do not use */ +@Deprecated public final class UserManagerHelper { private static final String TAG = "UserManagerHelper"; private final Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java index d12473e23ef9..f34605caf045 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java @@ -57,8 +57,10 @@ public class CategoryKeyTest { allKeys.add(CategoryKey.CATEGORY_SYSTEM); allKeys.add(CategoryKey.CATEGORY_SYSTEM_LANGUAGE); allKeys.add(CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT); + allKeys.add(CategoryKey.CATEGORY_GESTURES); + allKeys.add(CategoryKey.CATEGORY_NIGHT_LIGHT); // DO NOT REMOVE ANYTHING ABOVE - assertThat(allKeys.size()).isEqualTo(16); + assertThat(allKeys.size()).isEqualTo(18); } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java index f591781db5d7..0af2c05a6f10 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java @@ -61,24 +61,32 @@ public class PowerWhitelistBackendTest { assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_ONE)).isTrue(); assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_TWO)).isFalse(); + assertThat(mPowerWhitelistBackend.isWhitelisted(new String[]{PACKAGE_ONE})).isTrue(); + assertThat(mPowerWhitelistBackend.isWhitelisted(new String[]{PACKAGE_TWO})).isFalse(); mPowerWhitelistBackend.addApp(PACKAGE_TWO); verify(mDeviceIdleService, atLeastOnce()).addPowerSaveWhitelistApp(PACKAGE_TWO); assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_ONE)).isTrue(); assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_TWO)).isTrue(); + assertThat(mPowerWhitelistBackend.isWhitelisted( + new String[]{PACKAGE_ONE, PACKAGE_TWO})).isTrue(); mPowerWhitelistBackend.removeApp(PACKAGE_TWO); verify(mDeviceIdleService, atLeastOnce()).removePowerSaveWhitelistApp(PACKAGE_TWO); assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_ONE)).isTrue(); assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_TWO)).isFalse(); + assertThat(mPowerWhitelistBackend.isWhitelisted(new String[]{PACKAGE_ONE})).isTrue(); + assertThat(mPowerWhitelistBackend.isWhitelisted(new String[]{PACKAGE_TWO})).isFalse(); mPowerWhitelistBackend.removeApp(PACKAGE_ONE); verify(mDeviceIdleService, atLeastOnce()).removePowerSaveWhitelistApp(PACKAGE_ONE); assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_ONE)).isFalse(); assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_TWO)).isFalse(); + assertThat(mPowerWhitelistBackend.isWhitelisted( + new String[]{PACKAGE_ONE, PACKAGE_TWO})).isFalse(); } @Test diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/location/RecentLocationAppsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/location/RecentLocationAppsTest.java index 5e0fcefc5209..8a54aeec6d79 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/location/RecentLocationAppsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/location/RecentLocationAppsTest.java @@ -37,8 +37,8 @@ public class RecentLocationAppsTest { // App running duration in milliseconds private static final int DURATION = 10; private static final long ONE_MIN_AGO = NOW - TimeUnit.MINUTES.toMillis(1); - private static final long FOURTEEN_MIN_AGO = NOW - TimeUnit.MINUTES.toMillis(14); - private static final long TWENTY_MIN_AGO = NOW - TimeUnit.MINUTES.toMillis(20); + private static final long TWENTY_THREE_HOURS_AGO = NOW - TimeUnit.HOURS.toMillis(23); + private static final long TWO_DAYS_AGO = NOW - TimeUnit.DAYS.toMillis(2); private static final String[] TEST_PACKAGE_NAMES = {"package_1MinAgo", "package_14MinAgo", "package_20MinAgo"}; @@ -74,7 +74,7 @@ public class RecentLocationAppsTest { when(mUserManager.getUserProfiles()) .thenReturn(Collections.singletonList(new UserHandle(mTestUserId))); - long[] testRequestTime = {ONE_MIN_AGO, FOURTEEN_MIN_AGO, TWENTY_MIN_AGO}; + long[] testRequestTime = {ONE_MIN_AGO, TWENTY_THREE_HOURS_AGO, TWO_DAYS_AGO}; List<PackageOps> appOps = createTestPackageOpsList(TEST_PACKAGE_NAMES, testRequestTime); when(mAppOpsManager.getPackagesForOps(RecentLocationApps.LOCATION_OPS)).thenReturn(appOps); mockTestApplicationInfos(mTestUserId, TEST_PACKAGE_NAMES); @@ -91,7 +91,7 @@ public class RecentLocationAppsTest { assertThat(requests.get(0).packageName).isEqualTo(TEST_PACKAGE_NAMES[0]); assertThat(requests.get(0).requestFinishTime).isEqualTo(ONE_MIN_AGO + DURATION); assertThat(requests.get(1).packageName).isEqualTo(TEST_PACKAGE_NAMES[1]); - assertThat(requests.get(1).requestFinishTime).isEqualTo(FOURTEEN_MIN_AGO + DURATION); + assertThat(requests.get(1).requestFinishTime).isEqualTo(TWENTY_THREE_HOURS_AGO + DURATION); } @Test @@ -105,7 +105,7 @@ public class RecentLocationAppsTest { ONE_MIN_AGO, DURATION); long[] testRequestTime = - {ONE_MIN_AGO, FOURTEEN_MIN_AGO, TWENTY_MIN_AGO, ONE_MIN_AGO}; + {ONE_MIN_AGO, TWENTY_THREE_HOURS_AGO, TWO_DAYS_AGO, ONE_MIN_AGO}; List<PackageOps> appOps = createTestPackageOpsList(TEST_PACKAGE_NAMES, testRequestTime); appOps.add(androidSystemPackageOps); when(mAppOpsManager.getPackagesForOps(RecentLocationApps.LOCATION_OPS)).thenReturn(appOps); @@ -119,7 +119,7 @@ public class RecentLocationAppsTest { assertThat(requests.get(0).packageName).isEqualTo(TEST_PACKAGE_NAMES[0]); assertThat(requests.get(0).requestFinishTime).isEqualTo(ONE_MIN_AGO + DURATION); assertThat(requests.get(1).packageName).isEqualTo(TEST_PACKAGE_NAMES[1]); - assertThat(requests.get(1).requestFinishTime).isEqualTo(FOURTEEN_MIN_AGO + DURATION); + assertThat(requests.get(1).requestFinishTime).isEqualTo(TWENTY_THREE_HOURS_AGO + DURATION); } private void mockTestApplicationInfos(int userId, String... packageNameList) diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java index 4c98bb8cc2e8..1c635c41172a 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java @@ -254,6 +254,7 @@ public class SettingsHelper { case Settings.Secure.TOUCH_EXPLORATION_ENABLED: case Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED: case Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED: + case Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED: case Settings.Secure.UI_NIGHT_MODE: return Settings.Secure.getInt(mContext.getContentResolver(), name, 0) != 0; case Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES: diff --git a/packages/SettingsProvider/test/Android.mk b/packages/SettingsProvider/test/Android.mk index bd5b1f2c64ef..1ca6afee6daf 100644 --- a/packages/SettingsProvider/test/Android.mk +++ b/packages/SettingsProvider/test/Android.mk @@ -10,7 +10,9 @@ LOCAL_SRC_FILES := $(call all-subdir-java-files) \ ../src/com/android/providers/settings/SettingsState.java \ ../src/com/android/providers/settings/SettingsHelper.java -LOCAL_STATIC_JAVA_LIBRARIES := android-support-test +LOCAL_STATIC_JAVA_LIBRARIES := \ + android-support-test \ + truth-prebuilt LOCAL_JAVA_LIBRARIES := android.test.base diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java new file mode 100644 index 000000000000..b438e9130a88 --- /dev/null +++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.providers.settings; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.net.Uri; +import android.os.Build; +import android.provider.Settings; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Tests for {@link SettingsHelper#restoreValue(Context, ContentResolver, ContentValues, Uri, + * String, String, int)}. Specifically verifies that we restore critical accessibility settings only + * if the user has not already configured these in SUW. + */ +@RunWith(AndroidJUnit4.class) +public class SettingsHelperRestoreTest { + private Context mContext; + private ContentResolver mContentResolver; + private SettingsHelper mSettingsHelper; + + @Before + public void setUp() { + mContext = InstrumentationRegistry.getContext(); + mContentResolver = mContext.getContentResolver(); + mSettingsHelper = new SettingsHelper(mContext); + } + + /** Tests for {@link Settings.Secure#ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED}. */ + @Test + public void + restoreAccessibilityDisplayMagnificationNavbarEnabled_alreadyConfigured_doesNotRestore() + throws Exception { + // Simulate already configuring setting via SUW. + Settings.Secure.putInt( + mContentResolver, + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, + 1); + + mSettingsHelper.restoreValue( + mContext, + mContentResolver, + new ContentValues(2), + Settings.Secure.getUriFor( + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED), + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, + String.valueOf(0), + Build.VERSION.SDK_INT); + + assertThat( + Settings.Secure.getInt( + mContentResolver, + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED)) + .isEqualTo(1); + } + + @Test + public void + restoreAccessibilityDisplayMagnificationNavbarEnabled_notAlreadyConfigured_restores() + throws Exception { + // Simulate system default at boot. + Settings.Secure.putInt( + mContentResolver, + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, + 0); + + mSettingsHelper.restoreValue( + mContext, + mContentResolver, + new ContentValues(2), + Settings.Secure.getUriFor( + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED), + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, + String.valueOf(1), + Build.VERSION.SDK_INT); + + assertThat( + Settings.Secure.getInt( + mContentResolver, + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED)) + .isEqualTo(1); + } +} diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index d53f1a02b514..88edd12ab2f4 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -208,6 +208,9 @@ <!-- to read and change hvac values in a car --> <uses-permission android:name="android.car.permission.CONTROL_CAR_CLIMATE" /> + <!-- Permission necessary to change car audio volume through CarAudioManager --> + <uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME" /> + <application android:name=".SystemUIApplication" android:persistent="true" @@ -419,7 +422,8 @@ android:theme="@style/Theme.AlertDialogHost" android:finishOnCloseSystemDialogs="true" android:launchMode="singleTop" - android:excludeFromRecents="true" /> + android:excludeFromRecents="true" + android:visibleToInstantApps="true"/> <!-- started from PipUI --> <activity diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml b/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml index 9fdb00eebe10..11bd98f549ca 100644 --- a/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml +++ b/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml @@ -49,6 +49,7 @@ <EditText android:id="@+id/passwordEntry" android:layout_width="match_parent" android:layout_height="wrap_content" + android:contentDescription="@string/keyguard_accessibility_password" android:gravity="center_horizontal" android:singleLine="true" android:textStyle="normal" diff --git a/packages/SystemUI/res-keyguard/values-af/strings.xml b/packages/SystemUI/res-keyguard/values-af/strings.xml index 833d33d8bd7b..edf4943ef3a6 100644 --- a/packages/SystemUI/res-keyguard/values-af/strings.xml +++ b/packages/SystemUI/res-keyguard/values-af/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-kaart is PUK-geslote."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Ontsluit tans SIM-kaart …"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-area"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM-PIN-area"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM-PUK-area"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Volgende wekker gestel vir <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-am/strings.xml b/packages/SystemUI/res-keyguard/values-am/strings.xml index 8d99e9521828..2ad9b3cd14f2 100644 --- a/packages/SystemUI/res-keyguard/values-am/strings.xml +++ b/packages/SystemUI/res-keyguard/values-am/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"ሲም ካርድ በፒዩኬ ተቆልፏል።"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"ሲም ካርድን በመክፈት ላይ..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"የፒን አካባቢ"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"የሲም ፒን አካባቢ"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"የሲም ፒዩኬ አካባቢ"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"ቀጣዩ ማንቂያ ለ<xliff:g id="ALARM">%1$s</xliff:g> ተዘጋጅቷል"</string> diff --git a/packages/SystemUI/res-keyguard/values-ar/strings.xml b/packages/SystemUI/res-keyguard/values-ar/strings.xml index 7a46e34b90b0..dcfc80c23336 100644 --- a/packages/SystemUI/res-keyguard/values-ar/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ar/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"شريحة SIM مؤمّنة برمز PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"جارٍ إلغاء تأمين شريحة SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"منطقة رقم التعريف الشخصي"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"منطقة رقم التعريف الشخصي لشريحة SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"منطقة PUK لشريحة SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"تم ضبط التنبيه التالي على <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-as/strings.xml b/packages/SystemUI/res-keyguard/values-as/strings.xml index 84909079ddd5..f0b57a3518f1 100644 --- a/packages/SystemUI/res-keyguard/values-as/strings.xml +++ b/packages/SystemUI/res-keyguard/values-as/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"ছিম কার্ডখন PUKৰ দ্বাৰা লক কৰা হৈছে।"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"ছিম কার্ড আনলক কৰি থকা হৈছে…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"পিনৰ ক্ষেত্ৰ"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"ছিম পিনৰ ক্ষেত্ৰ"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"ছিমৰ PUK ক্ষেত্ৰ"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"পৰৱৰ্তী এলাৰ্ম <xliff:g id="ALARM">%1$s</xliff:g> বজাত ছেট কৰা হৈছে"</string> diff --git a/packages/SystemUI/res-keyguard/values-az/strings.xml b/packages/SystemUI/res-keyguard/values-az/strings.xml index 327804cbd76d..f1e9823d15c2 100644 --- a/packages/SystemUI/res-keyguard/values-az/strings.xml +++ b/packages/SystemUI/res-keyguard/values-az/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM kart PUK ilə kilidlənib."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM kartın kilidi açılır..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN sahəsi"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN sahəsi"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK sahəsi"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Növbəti zəng vaxtı: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml index 92fc3a59d8b0..3bc1f751689e 100644 --- a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM kartica je zaključana PUK kodom."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM kartica se otključava…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Oblast za PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Oblast za PIN za SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Oblast za PUK za SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Sledeći alarm je podešen za <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-be/strings.xml b/packages/SystemUI/res-keyguard/values-be/strings.xml index c4b10caba704..848d88687048 100644 --- a/packages/SystemUI/res-keyguard/values-be/strings.xml +++ b/packages/SystemUI/res-keyguard/values-be/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-карта заблакіравана PUK-кодам."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Ідзе разблакіроўка SIM-карты…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Поле для PIN-кода"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Поле для PIN-кода SIM-карты"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Поле для PUK-кода SIM-карты"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Наступны будзільнік пастаўлены на <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-bg/strings.xml b/packages/SystemUI/res-keyguard/values-bg/strings.xml index 6971d06a8141..c9bc5cbe3c43 100644 --- a/packages/SystemUI/res-keyguard/values-bg/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bg/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM картата е заключена с PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM картата се отключва..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Област за ПИН кода"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Област за ПИН кода на SIM картата"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Област за PUK кода на SIM картата"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Следващият будилник е зададен за <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-bn/strings.xml b/packages/SystemUI/res-keyguard/values-bn/strings.xml index e967cd47f9df..6ac10d702ca4 100644 --- a/packages/SystemUI/res-keyguard/values-bn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bn/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"সিম কার্ডটি PUK কোড দিয়ে লক করা আছে।"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"সিম কার্ড আনলক করা হচ্ছে…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"পিন অঞ্চল"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"সিম পিন অঞ্চল"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"সিম PUK অঞ্চল"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"পরবর্তী অ্যালার্ম <xliff:g id="ALARM">%1$s</xliff:g> এ সেট করা হয়েছে"</string> diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml index 1603bfcc71b5..8db24a96e2c1 100644 --- a/packages/SystemUI/res-keyguard/values-bs/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM kartica je zaključana PUK kodom."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Otključavanje SIM kartice…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Prostor za PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Prostor za PIN za SIM karticu"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Prostor za PUK kôd za SIM karticu"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Naredni alarm je podešen za <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-ca/strings.xml b/packages/SystemUI/res-keyguard/values-ca/strings.xml index 9e7c2e1398de..4a8e1d1200e1 100644 --- a/packages/SystemUI/res-keyguard/values-ca/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ca/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"La targeta SIM està bloquejada pel PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"S\'està desbloquejant la targeta SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Zona del PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Zona del PIN de la SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Zona del PUK de la SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"S\'ha definit la pròxima alarma per a l\'hora següent: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-cs/strings.xml b/packages/SystemUI/res-keyguard/values-cs/strings.xml index 1cd3afcb5b89..2784dbd82f03 100644 --- a/packages/SystemUI/res-keyguard/values-cs/strings.xml +++ b/packages/SystemUI/res-keyguard/values-cs/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM karta je zablokována pomocí kódu PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Odblokování SIM karty…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Oblast kódu PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Oblast kódu PIN SIM karty"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Oblast kódu PUK SIM karty"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Další budík je nastaven na <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml index 26e7b0b99518..ca63326feb8b 100644 --- a/packages/SystemUI/res-keyguard/values-da/strings.xml +++ b/packages/SystemUI/res-keyguard/values-da/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-kortet er låst med PUK-kode."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Låser SIM-kortet op…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Område for pinkoden"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Område for pinkoden til SIM-kortet"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Område for PUK-koden til SIM-kortet"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Næste alarm er indstillet til <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-de/strings.xml b/packages/SystemUI/res-keyguard/values-de/strings.xml index 87a7b65824ec..103feec47ab8 100644 --- a/packages/SystemUI/res-keyguard/values-de/strings.xml +++ b/packages/SystemUI/res-keyguard/values-de/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"PUK-Sperre auf SIM-Karte."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM-Karte wird entsperrt..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-Bereich"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM-PIN-Bereich"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM-PUK-Bereich"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Nächster Wecker gestellt für <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-el/strings.xml b/packages/SystemUI/res-keyguard/values-el/strings.xml index 4220cfdf87ec..2ee0512f8e64 100644 --- a/packages/SystemUI/res-keyguard/values-el/strings.xml +++ b/packages/SystemUI/res-keyguard/values-el/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Η κάρτα SIM είναι κλειδωμένη με κωδικό PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Ξεκλείδωμα κάρτας SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Περιοχή αριθμού PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Περιοχή αριθμού PIN κάρτας SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Περιοχή κωδικού PUK κάρτας SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Το επόμενο ξυπνητήρι ορίστηκε στις <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml index ca5699cf1915..3a4ab71d08a4 100644 --- a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM card is PUK-locked."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Unlocking SIM card…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN area"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN area"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK area"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Next alarm set for <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml index 1c5eed6e74a6..f167b41f4826 100644 --- a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM card is PUK-locked."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Unlocking SIM card…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN area"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN area"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK area"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Next alarm set for <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml index ca5699cf1915..3a4ab71d08a4 100644 --- a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM card is PUK-locked."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Unlocking SIM card…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN area"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN area"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK area"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Next alarm set for <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml index ca5699cf1915..3a4ab71d08a4 100644 --- a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM card is PUK-locked."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Unlocking SIM card…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN area"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN area"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK area"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Next alarm set for <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml index e4978b242d4a..987d983cf1ef 100644 --- a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml @@ -51,6 +51,7 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM card is PUK-locked."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Unlocking SIM card…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN area"</string> + <string name="keyguard_accessibility_password" msgid="7695303207740941101">"Device password"</string> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN area"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK area"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Next alarm set for <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml index 92653499b774..ff3ca21410a6 100644 --- a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml +++ b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"La tarjeta SIM está bloqueada con el código PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Desbloqueando tarjeta SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Área de PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Área de PIN de la tarjeta SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Área de PUK de la tarjeta SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Próxima alarma establecida: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-es/strings.xml b/packages/SystemUI/res-keyguard/values-es/strings.xml index 5f8c987a6e28..fe10745f938a 100644 --- a/packages/SystemUI/res-keyguard/values-es/strings.xml +++ b/packages/SystemUI/res-keyguard/values-es/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"La tarjeta SIM está bloqueada con el código PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Desbloqueando la tarjeta SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Área de PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Área de PIN de la tarjeta SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Área de PUK de la tarjeta SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Próxima alarma: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-et/strings.xml b/packages/SystemUI/res-keyguard/values-et/strings.xml index 61fe6502bb3f..1cd6efc5d3f0 100644 --- a/packages/SystemUI/res-keyguard/values-et/strings.xml +++ b/packages/SystemUI/res-keyguard/values-et/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-kaart on PUK-koodiga lukus."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM-kaardi avamine …"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-koodi ala"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM-kaardi PIN-koodi ala"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM-kaardi PUK-koodi ala"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Järgmine alarm on määratud ajaks <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-eu/strings.xml b/packages/SystemUI/res-keyguard/values-eu/strings.xml index da9ffa9f7009..5d5e4dbcdcc4 100644 --- a/packages/SystemUI/res-keyguard/values-eu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-eu/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"PUK bidez blokeatuta dago SIM txartela."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM txartela desblokeatzen…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN kodearen eremua"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM txartelaren PIN kodearen eremua"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM txartelaren PUK kodearen eremua"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Hurrengo alarmak ordu honetan joko du: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-fa/strings.xml b/packages/SystemUI/res-keyguard/values-fa/strings.xml index 1c00e29cfe92..876271f0f164 100644 --- a/packages/SystemUI/res-keyguard/values-fa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fa/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"سیمکارت با PUK قفل شده است."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"درحال باز کردن قفل سیمکارت..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"قسمت پین"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"قسمت پین سیمکارت"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"قسمت PUK سیمکارت"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"زنگ ساعت بعدی برای <xliff:g id="ALARM">%1$s</xliff:g> تنظیم شد"</string> diff --git a/packages/SystemUI/res-keyguard/values-fi/strings.xml b/packages/SystemUI/res-keyguard/values-fi/strings.xml index b981801acdb3..c7825c8bf461 100644 --- a/packages/SystemUI/res-keyguard/values-fi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fi/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-kortti on PUK-lukittu."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM-kortin lukitusta avataan…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-koodin alue"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM-kortin PIN-koodin alue"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM-kortin PUK-koodin alue"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Seuraava hälytys asetettu: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml index a9801da3ec32..3347f14045ca 100644 --- a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"La carte SIM est verrouillée par un code PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Déblocage de la carte SIM en cours…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Zone du NIP"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Zone du NIP de la carte SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Zone du code PUK de la carte SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Heure de la prochaine alarme : <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml index 550da08acf67..5ab532977050 100644 --- a/packages/SystemUI/res-keyguard/values-fr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"La carte SIM est verrouillée par clé PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Déblocage de la carte SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Champ du code"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Champ du code PIN de la carte SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Champ de la clé PUK de la carte SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Date et heure de la prochaine alarme : <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml index 6616ef75c7fd..0a12c7bac810 100644 --- a/packages/SystemUI/res-keyguard/values-gl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"A tarxeta SIM está bloqueada con código PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Desbloqueando tarxeta SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Área do PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Área do PIN da tarxeta SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Área do PUK da tarxeta SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Próxima alarma definida para: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml index 0f3104cbfe55..f6e727c450dd 100644 --- a/packages/SystemUI/res-keyguard/values-gu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"સિમ કાર્ડ, PUK-લૉક કરેલ છે."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"સિમ કાર્ડ અનલૉક કરી રહ્યાં છીએ…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"પિન ક્ષેત્ર"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"સિમ પિન ક્ષેત્ર"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"સિમ PUK ક્ષેત્ર"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"<xliff:g id="ALARM">%1$s</xliff:g> માટે આગલું એલાર્મ સેટ કર્યું"</string> diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml index 532437a536b5..9375c89253c9 100644 --- a/packages/SystemUI/res-keyguard/values-hi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM कार्ड को PUK के ज़रिए लॉक किया हुआ है."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM कार्ड अनलॉक हो रहा है…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"पिन क्षेत्र"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM पिन क्षेत्र"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK क्षेत्र"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"अगला अलार्म <xliff:g id="ALARM">%1$s</xliff:g> बजे के लिए सेट किया गया है"</string> diff --git a/packages/SystemUI/res-keyguard/values-hr/strings.xml b/packages/SystemUI/res-keyguard/values-hr/strings.xml index d2cd2c3a8963..4eac3509397d 100644 --- a/packages/SystemUI/res-keyguard/values-hr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hr/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM kartica je zaključana PUK-om."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Otključavanje SIM kartice…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Područje PIN-a"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Područje PIN-a za SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Područje PUK-a za SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Sljedeći alarm postavljen za <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-hu/strings.xml b/packages/SystemUI/res-keyguard/values-hu/strings.xml index 845db48237a8..c0c09b8780c1 100644 --- a/packages/SystemUI/res-keyguard/values-hu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hu/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"A SIM-kártya PUK-kóddal van zárolva."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM-kártya zárolásának feloldása…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-kód területe"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"A SIM-kártyához tartozó PIN-kód mezője"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"A SIM-kártyához tartozó PUK-kód mezője"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"A következő ébresztés beállított ideje: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-hy/strings.xml b/packages/SystemUI/res-keyguard/values-hy/strings.xml index 70339b1e648e..2fc7c329773f 100644 --- a/packages/SystemUI/res-keyguard/values-hy/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hy/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM քարտը PUK-ով կողպված է:"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM քարտը ապակողպվում է…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN կոդի տարածք"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM քարտի PIN կոդի տարածք"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM քարտի PUK կոդի տարածք"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Հաջորդ զարթուցիչը դրված է <xliff:g id="ALARM">%1$s</xliff:g>-ի վրա"</string> diff --git a/packages/SystemUI/res-keyguard/values-in/strings.xml b/packages/SystemUI/res-keyguard/values-in/strings.xml index 5f179196613d..e68e1181838d 100644 --- a/packages/SystemUI/res-keyguard/values-in/strings.xml +++ b/packages/SystemUI/res-keyguard/values-in/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Kartu SIM terkunci PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Membuka kunci kartu SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Bidang PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Bidang PIN SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Bidang PUK SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Alarm berikutnya disetel untuk <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-is/strings.xml b/packages/SystemUI/res-keyguard/values-is/strings.xml index d40a623e4b5a..6fd668ad9708 100644 --- a/packages/SystemUI/res-keyguard/values-is/strings.xml +++ b/packages/SystemUI/res-keyguard/values-is/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-kortið er PUK-læst."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Tekur SIM-kort úr lás…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-svæði"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"PIN-svæði SIM-korts"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"PUK-svæði SIM-korts"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Næsti vekjari stilltur á <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-it/strings.xml b/packages/SystemUI/res-keyguard/values-it/strings.xml index 22c3ff5ad86b..ab8ea30dca9b 100644 --- a/packages/SystemUI/res-keyguard/values-it/strings.xml +++ b/packages/SystemUI/res-keyguard/values-it/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"La SIM è bloccata tramite PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Sblocco SIM..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Area PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Area PIN SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Area PUK SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Prossima sveglia impostata a: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-iw/strings.xml b/packages/SystemUI/res-keyguard/values-iw/strings.xml index 919d0573f4b5..f5fbb47465e7 100644 --- a/packages/SystemUI/res-keyguard/values-iw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-iw/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"כרטיס ה-SIM נעול באמצעות PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"מבטל את הנעילה של כרטיס ה-SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"אזור לקוד הגישה"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"אזור לקוד הגישה של כרטיס ה-SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"אזור לקוד הגישה של כרטיס ה-SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"ההתראה הבאה נקבעה ל-<xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-ja/strings.xml b/packages/SystemUI/res-keyguard/values-ja/strings.xml index 2d1ed6ad4b2c..59348f613f1c 100644 --- a/packages/SystemUI/res-keyguard/values-ja/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ja/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM カードは PUK でロックされています。"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM カードのロックを解除しています…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN エリア"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN エリア"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK エリア"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"次のアラームを <xliff:g id="ALARM">%1$s</xliff:g> に設定しました"</string> diff --git a/packages/SystemUI/res-keyguard/values-ka/strings.xml b/packages/SystemUI/res-keyguard/values-ka/strings.xml index b743a939cd33..a1ac3e667f33 100644 --- a/packages/SystemUI/res-keyguard/values-ka/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ka/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM ბარათი ჩაკეტილია PUK-კოდით."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"მიმდინარეობს SIM ბარათის განბლოკვა…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-კოდის არე"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM ბარათის PIN-კოდის არე"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM ბარათის PUK-კოდის არე"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"შემდეგი მაღვიძარა დაყენებულია <xliff:g id="ALARM">%1$s</xliff:g>-ზე"</string> diff --git a/packages/SystemUI/res-keyguard/values-kk/strings.xml b/packages/SystemUI/res-keyguard/values-kk/strings.xml index 98653ea201bb..3df5f6c1fada 100644 --- a/packages/SystemUI/res-keyguard/values-kk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kk/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM картасы PUK кодымен құлыпталған."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM картасының құлпын ашуда…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN аумағы"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN аумағы"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK аумағы"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Келесі дабыл уақыты: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-km/strings.xml b/packages/SystemUI/res-keyguard/values-km/strings.xml index 80a41421d6cb..83a7bd070206 100644 --- a/packages/SystemUI/res-keyguard/values-km/strings.xml +++ b/packages/SystemUI/res-keyguard/values-km/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"ស៊ីមកាតជាប់កូដ PUK ។"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"កំពុងដោះសោស៊ីមកាត..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"ប្រអប់បំពេញកូដ PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"ប្រអប់បំពេញកូដ PIN របស់ស៊ីម"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"ប្រអប់បំពេញកូដ PUK របស់ស៊ីម"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"បានកំណត់ម៉ោងរោទិ៍បន្ទាប់នៅថ្ងៃ <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml index 66eb3e62a2f7..d125583bd137 100644 --- a/packages/SystemUI/res-keyguard/values-kn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"ಸಿಮ್ ಕಾರ್ಡ್ PUK-ಲಾಕ್ ಆಗಿದೆ."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"ಸಿಮ್ ಕಾರ್ಡ್ ಅನ್ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"ಪಿನ್ ಪ್ರದೇಶ"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"ಸಿಮ್ ಪಿನ್ ಪ್ರದೇಶ"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"ಸಿಮ್ PUK ಪ್ರದೇಶ"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"<xliff:g id="ALARM">%1$s</xliff:g> ಗಂಟೆಗೆ ಮುಂದಿನ ಅಲಾರಮ್ ಹೊಂದಿಸಲಾಗಿದೆ"</string> diff --git a/packages/SystemUI/res-keyguard/values-ko/strings.xml b/packages/SystemUI/res-keyguard/values-ko/strings.xml index 335c7255f480..09cb973c3b54 100644 --- a/packages/SystemUI/res-keyguard/values-ko/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ko/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM 카드가 PUK로 잠겨 있습니다."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM 카드 잠금 해제 중..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN 영역"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN 영역"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK 영역"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"<xliff:g id="ALARM">%1$s</xliff:g>에 다음 알람이 설정됨"</string> diff --git a/packages/SystemUI/res-keyguard/values-ky/strings.xml b/packages/SystemUI/res-keyguard/values-ky/strings.xml index 435b7f39e3fe..c74e8879d2d4 100644 --- a/packages/SystemUI/res-keyguard/values-ky/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ky/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-карта PUK-код менен кулпуланган."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM-карта бөгөттөн чыгарылууда…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-коддун аймагы"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM-картанын PIN-кодунун аймагы"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM-картанын PUK-кодунун аймагы"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Кийинки ойготкуч саат <xliff:g id="ALARM">%1$s</xliff:g> коюлган"</string> diff --git a/packages/SystemUI/res-keyguard/values-lo/strings.xml b/packages/SystemUI/res-keyguard/values-lo/strings.xml index 6c2fca107634..c98f43c25636 100644 --- a/packages/SystemUI/res-keyguard/values-lo/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lo/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"ຊິມກາດຖືກລັອກດ້ວຍລະຫັດ PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"ປົດລັອກ SIM card..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"ພື້ນທີ່ PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"ພື້ນທີ່ PIN ຂອງ SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"ພື້ນທີ່ PUK ຂອງ SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"ໂມງປຸກຕໍ່ໄປຖືກຕັ້ງໄວ້ເວລາ <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-lt/strings.xml b/packages/SystemUI/res-keyguard/values-lt/strings.xml index 3e0806513cd2..d50d257c3c65 100644 --- a/packages/SystemUI/res-keyguard/values-lt/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lt/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM kortelė užrakinta PUK kodu."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Atrakinama SD kortelė..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN kodo sritis"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM kortelės PIN kodo sritis"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM kortelės PUK kodo sritis"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Kitas nustatytas signalas: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-lv/strings.xml b/packages/SystemUI/res-keyguard/values-lv/strings.xml index 238e3e155340..4cf97dce94bf 100644 --- a/packages/SystemUI/res-keyguard/values-lv/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lv/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM karte ir bloķēta ar PUK kodu."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Notiek SIM kartes atbloķēšana..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN apgabals"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM kartes PIN apgabals"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM kartes PUK apgabals"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Nākamā signāla atskaņošanas laiks: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-mk/strings.xml b/packages/SystemUI/res-keyguard/values-mk/strings.xml index e28a5b9f0197..d0007e0fb0af 100644 --- a/packages/SystemUI/res-keyguard/values-mk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mk/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-картичката е заклучена со PUK-код."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Се отклучува SIM-картичката…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Поле за PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Поле за PIN на SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Поле за PUK на SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Следниот аларм е поставен во <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml index 9c76e9faf522..bbe4d4c1d747 100644 --- a/packages/SystemUI/res-keyguard/values-ml/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"സിം കാർഡ് PUK-ലോക്ക് ചെയ്തതാണ്."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"സിം കാർഡ് അൺലോക്കുചെയ്യുന്നു…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"പിൻ ഏരിയ"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"സിം പിൻ ഏരിയ"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"സിം PUK ഏരിയ"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"അടുത്ത അലാറം <xliff:g id="ALARM">%1$s</xliff:g>-ന് സജ്ജീകരിച്ചു"</string> diff --git a/packages/SystemUI/res-keyguard/values-mn/strings.xml b/packages/SystemUI/res-keyguard/values-mn/strings.xml index ed2c26db19e9..4f2fd44292b5 100644 --- a/packages/SystemUI/res-keyguard/values-mn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mn/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM картыг PUK-р түгжсэн байна."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM картын түгжээг тайлж байна…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"ПИН кодын хэсэг"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM-н ПИН кодын хэсэг"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM-н PUK кодын хэсэг"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Дараагийн сэрүүлгийг <xliff:g id="ALARM">%1$s</xliff:g>-д тавьсан"</string> diff --git a/packages/SystemUI/res-keyguard/values-mr/strings.xml b/packages/SystemUI/res-keyguard/values-mr/strings.xml index 184b6be4db2e..ccfad8a66580 100644 --- a/packages/SystemUI/res-keyguard/values-mr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mr/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"सिम कार्ड PUK-लॉक केलेले आहे."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"सिम कार्ड अनलॉक करत आहे…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"पिन क्षेत्र"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"सिम पिन क्षेत्र"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"सिम PUK क्षेत्र"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"पुढील अलार्म <xliff:g id="ALARM">%1$s</xliff:g> साठी सेट केला"</string> diff --git a/packages/SystemUI/res-keyguard/values-ms/strings.xml b/packages/SystemUI/res-keyguard/values-ms/strings.xml index 5eb4546287cf..58cd3fb8670c 100644 --- a/packages/SystemUI/res-keyguard/values-ms/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ms/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Kad SIM dikunci dengan PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Membuka kunci kad SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Bahagian PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Bahagian PIN SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Bahagian PUK SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Penggera seterusnya ditetapkan pada <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-my/strings.xml b/packages/SystemUI/res-keyguard/values-my/strings.xml index 56d768d2d49b..9972b60fb611 100644 --- a/packages/SystemUI/res-keyguard/values-my/strings.xml +++ b/packages/SystemUI/res-keyguard/values-my/strings.xml @@ -32,7 +32,7 @@ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"သင့်လော့ခ်ဖွင့်ပုံစံ ထည့်ပါ"</string> <string name="keyguard_enter_your_password" msgid="5761514484663983731">"သင့်စကားဝှက် ထည့်ပါ"</string> <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ပင်နံပါတ် မှားနေသည်။"</string> - <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"ကဒ် မမှန်ကန်ပါ။"</string> + <string name="keyguard_sim_error_message_short" msgid="592109500618448312">"ကတ် မမှန်ကန်ပါ။"</string> <string name="keyguard_charged" msgid="2222329688813033109">"အားသွင်းပြီးပါပြီ"</string> <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • အားသွင်းနေသည်"</string> <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • အမြန်အားသွင်းနေသည်"</string> @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"ဆင်းမ်ကဒ်သည် ပင်နံပါတ် ပြန်ဖွင့်သည့်ကုဒ် လော့ခ်ကျနေပါသည်။"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"ဆင်းမ်ကဒ်ကို လော့ခ်ဖွင့်နေပါသည်…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"ပင်နံပါတ်နေရာ"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"ဆင်းမ်ပင်နံပါတ်နေရာ"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"ဆင်းမ် ပင်နံပါတ် ပြန်ဖွင့်သည့်ကုဒ် နေရာ"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"နောက်နှိုးစက်အချိန်ကို <xliff:g id="ALARM">%1$s</xliff:g> တွင် သတ်မှတ်ထားပါသည်"</string> diff --git a/packages/SystemUI/res-keyguard/values-nb/strings.xml b/packages/SystemUI/res-keyguard/values-nb/strings.xml index d269617ebd58..5adf0e0401d0 100644 --- a/packages/SystemUI/res-keyguard/values-nb/strings.xml +++ b/packages/SystemUI/res-keyguard/values-nb/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-kortet er PUK-låst."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Låser opp SIM-kortet …"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-området"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"PIN-området for SIM-kortet"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"PUK-området for SIM-kortet"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Neste alarm er stilt inn for <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml index 88ad3318020b..a79a11f56a68 100644 --- a/packages/SystemUI/res-keyguard/values-ne/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM कार्ड PUK-लक भएको छ।"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM कार्ड अनलक गरिँदै..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN क्षेत्र"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM को PIN क्षेत्र"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM को PUK क्षेत्र"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"अर्को अलार्म <xliff:g id="ALARM">%1$s</xliff:g> का लागि सेट गरियो"</string> diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml index 9cf6011b66cb..0e82ea89388f 100644 --- a/packages/SystemUI/res-keyguard/values-nl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Simkaart is vergrendeld met pukcode."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Simkaart ontgrendelen…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Gebied voor pincode"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Gebied voor pincode van simkaart"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Gebied voor pukcode van simkaart"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Volgende wekker ingesteld voor <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-or/strings.xml b/packages/SystemUI/res-keyguard/values-or/strings.xml index a2b0e8f07a55..92ff624a3ca5 100644 --- a/packages/SystemUI/res-keyguard/values-or/strings.xml +++ b/packages/SystemUI/res-keyguard/values-or/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM କାର୍ଡଟି PUK ଲକ୍ ହୋଇଯାଇଛି।"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM କାର୍ଡ ଅନଲକ୍ କରାଯାଉଛି…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN ଅଞ୍ଚଳ"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN ଅଞ୍ଚଳ"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK ଅଞ୍ଚଳ"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"<xliff:g id="ALARM">%1$s</xliff:g>ରେ ପରବର୍ତ୍ତୀ ଆଲାର୍ମ ସେଟ୍ କରାଯାଇଛି"</string> diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml index 6a0557c86e4c..1756c805eb7a 100644 --- a/packages/SystemUI/res-keyguard/values-pa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM ਕਾਰਡ PUK- ਲਾਕ ਕੀਤਾ ਹੋਇਆ ਹੈ।"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM ਕਾਰਡ ਨੂੰ ਅਣਲਾਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"ਪਿੰਨ ਖੇਤਰ"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"ਸਿਮ ਪਿੰਨ ਖੇਤਰ"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK ਖੇਤਰ"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"ਅਗਲਾ ਅਲਾਰਮ <xliff:g id="ALARM">%1$s</xliff:g> \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ"</string> diff --git a/packages/SystemUI/res-keyguard/values-pl/strings.xml b/packages/SystemUI/res-keyguard/values-pl/strings.xml index 878d6de23cf2..f93263fcf097 100644 --- a/packages/SystemUI/res-keyguard/values-pl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pl/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Karta SIM jest zablokowana kodem PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Odblokowuję kartę SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Miejsce na kod PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Miejsce na kod PIN karty SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Miejsce na kod PUK karty SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Następny alarm ustawiony na: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml index c43d0c86ea26..855f2f95b65c 100644 --- a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"O cartão SIM está bloqueado pelo PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Desbloqueando o cartão SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Área do PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Área do PIN SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Área do PUK SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Próximo alarme definido para <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml index 9bd29dccdfdb..c388e290b722 100644 --- a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"O cartão SIM está bloqueado pelo PUK"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"A desbloquear o cartão SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Área do PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Área do PIN do cartão SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Área do PUK do cartão SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Próximo alarme definido para <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-pt/strings.xml b/packages/SystemUI/res-keyguard/values-pt/strings.xml index c43d0c86ea26..855f2f95b65c 100644 --- a/packages/SystemUI/res-keyguard/values-pt/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"O cartão SIM está bloqueado pelo PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Desbloqueando o cartão SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Área do PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Área do PIN SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Área do PUK SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Próximo alarme definido para <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-ro/strings.xml b/packages/SystemUI/res-keyguard/values-ro/strings.xml index fbfd55b4bcf3..7b1d7acee1a4 100644 --- a/packages/SystemUI/res-keyguard/values-ro/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ro/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Cardul SIM este blocat cu codul PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Se deblochează cardul SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Zona codului PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Zona codului PIN pentru cardul SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Zona codului PUK pentru cardul SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Următoarea alarmă este setată pentru <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-ru/strings.xml b/packages/SystemUI/res-keyguard/values-ru/strings.xml index 465f6a79ccee..8c8c8ee12416 100644 --- a/packages/SystemUI/res-keyguard/values-ru/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ru/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-карта заблокирована с помощью PUK-кода."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Разблокировка SIM-карты…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-код"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"PIN-код SIM-карты"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"PUK-код SIM-карты"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Время следующего сигнала будильника: <xliff:g id="ALARM">%1$s</xliff:g>."</string> diff --git a/packages/SystemUI/res-keyguard/values-si/strings.xml b/packages/SystemUI/res-keyguard/values-si/strings.xml index 4dc796e3c0fd..22c2053bd929 100644 --- a/packages/SystemUI/res-keyguard/values-si/strings.xml +++ b/packages/SystemUI/res-keyguard/values-si/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM පත PUK අගුළු ලා ඇත."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM පත අගුළු හරිමින්..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN කොටස"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN කොටස"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK කොටස"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"<xliff:g id="ALARM">%1$s</xliff:g>ට ඊළඟ එලාමය සකසා ඇත"</string> diff --git a/packages/SystemUI/res-keyguard/values-sk/strings.xml b/packages/SystemUI/res-keyguard/values-sk/strings.xml index 0a66f61a905c..08fe46ccc73e 100644 --- a/packages/SystemUI/res-keyguard/values-sk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sk/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM karta je uzamknutá pomocou kódu PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Prebieha odomykanie SIM karty…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Oblasť kódu PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Oblasť kódu PIN SIM karty"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Oblasť kódu PUK SIM karty"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Nasledujúci budík je nastavený na <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-sl/strings.xml b/packages/SystemUI/res-keyguard/values-sl/strings.xml index ccbd413af56d..9a1764ddf2d3 100644 --- a/packages/SystemUI/res-keyguard/values-sl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sl/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Kartica SIM je zaklenjena s kodo PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Odklepanje kartice SIM …"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Območje za kodo PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Območje za kodo PIN kartice SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Območje za kodo PUK kartice SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Naslednji alarm je nastavljen za <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-sq/strings.xml b/packages/SystemUI/res-keyguard/values-sq/strings.xml index cfa7412daf70..b900ccecda2e 100644 --- a/packages/SystemUI/res-keyguard/values-sq/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sq/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Karta SIM është e kyçur me PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Po shkyç kartën SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Zona PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Zona PIN e kartës SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Zona e kodit PUK të kartës SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Alarmi tjetër i caktuar: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-sr/strings.xml b/packages/SystemUI/res-keyguard/values-sr/strings.xml index 6fbd3489606f..2c0f35fa9324 100644 --- a/packages/SystemUI/res-keyguard/values-sr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sr/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM картица је закључана PUK кодом."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM картица се откључава…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Област за PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Област за PIN за SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Област за PUK за SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Следећи аларм је подешен за <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-sv/strings.xml b/packages/SystemUI/res-keyguard/values-sv/strings.xml index 715d5130cd74..88a54f97a652 100644 --- a/packages/SystemUI/res-keyguard/values-sv/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sv/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-kortet är PUK-låst."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Låser upp SIM-kort …"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Pinkodsområde"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Pinkodsområde för SIM-kort"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"PUK-kodsområde för SIM-kort"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Nästa alarm är inställt på <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-sw/strings.xml b/packages/SystemUI/res-keyguard/values-sw/strings.xml index 72f75de14218..2f4e49c325d2 100644 --- a/packages/SystemUI/res-keyguard/values-sw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sw/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM kadi imefungwa kwa PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Inafungua SIM kadi..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Eneo la PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Eneo la PIN ya SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Eneo la PUK ya SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Kengele inayofuata italia saa <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-ta/strings.xml b/packages/SystemUI/res-keyguard/values-ta/strings.xml index d9b27c045267..bedf9a33177d 100644 --- a/packages/SystemUI/res-keyguard/values-ta/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ta/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"சிம் கார்டு PUK ஆல் பூட்டப்பட்டது."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"சிம் கார்டைத் திறக்கிறது…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"பின்னுக்கான பகுதி"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"சிம் பின்னுக்கான பகுதி"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"சிம் PUKக்கான பகுதி"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"அடுத்த அலாரம் <xliff:g id="ALARM">%1$s</xliff:g>க்கு அமைக்கப்பட்டுள்ளது"</string> diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml index 565b48fe505e..5360daccb1d1 100644 --- a/packages/SystemUI/res-keyguard/values-te/strings.xml +++ b/packages/SystemUI/res-keyguard/values-te/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM కార్డ్ PUK-లాక్ చేయబడింది."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM కార్డ్ని అన్లాక్ చేస్తోంది…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"పిన్ ప్రాంతం"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM పిన్ ప్రాంతం"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK ప్రాంతం"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"తర్వాత అలారం <xliff:g id="ALARM">%1$s</xliff:g>కి సెట్ చేయబడింది"</string> diff --git a/packages/SystemUI/res-keyguard/values-th/strings.xml b/packages/SystemUI/res-keyguard/values-th/strings.xml index 2bf2529ba5aa..1d6c5f46d913 100644 --- a/packages/SystemUI/res-keyguard/values-th/strings.xml +++ b/packages/SystemUI/res-keyguard/values-th/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"ซิมการ์ดถูกล็อกด้วย PUK"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"กำลังปลดล็อกซิมการ์ด…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"พื้นที่ PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"พื้นที่ PIN ของซิม"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"พื้นที่ PUK ของซิม"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"ตั้งเวลาปลุกครั้งถัดไปไว้ที่ <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-tl/strings.xml b/packages/SystemUI/res-keyguard/values-tl/strings.xml index e7aa75cce843..66f4a47b9661 100644 --- a/packages/SystemUI/res-keyguard/values-tl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-tl/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Naka-PUK-lock ang SIM card."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Ina-unlock ang SIM card…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Lugar ng PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Lugar ng PIN ng SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Lugar ng PUK ng SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Nakatakda ang susunod na alarm sa <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-tr/strings.xml b/packages/SystemUI/res-keyguard/values-tr/strings.xml index 4ce323a436f5..35048b157ebb 100644 --- a/packages/SystemUI/res-keyguard/values-tr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-tr/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM kart PUK kilidi devrede."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM kart kilidi açılıyor…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN alanı"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN alanı"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK alanı"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Sonraki alarm <xliff:g id="ALARM">%1$s</xliff:g> olarak ayarlandı"</string> diff --git a/packages/SystemUI/res-keyguard/values-uk/strings.xml b/packages/SystemUI/res-keyguard/values-uk/strings.xml index 3d0c1245ca91..2f02fe954efc 100644 --- a/packages/SystemUI/res-keyguard/values-uk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uk/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM-карту заблоковано PUK-кодом."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Розблокування SIM-карти…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN-код"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"PIN-код SIM-карти"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"PUK-код SIM-карти"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Наступний сигнал: <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-ur/strings.xml b/packages/SystemUI/res-keyguard/values-ur/strings.xml index 75976915311a..46c50ff74d86 100644 --- a/packages/SystemUI/res-keyguard/values-ur/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ur/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM کارڈ PUK مقفل ہے۔"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM کارڈ غیر مقفل ہو رہا ہے…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN کا علاقہ"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN کا علاقہ"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK کا علاقہ"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"اگلا الارم <xliff:g id="ALARM">%1$s</xliff:g> کیلئے سیٹ ہے"</string> diff --git a/packages/SystemUI/res-keyguard/values-uz/strings.xml b/packages/SystemUI/res-keyguard/values-uz/strings.xml index 6020150cd594..e5fc7629a622 100644 --- a/packages/SystemUI/res-keyguard/values-uz/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uz/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM karta PUK kod bilan qulflangan."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM karta qulfi ochilmoqda…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN kod maydoni"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM karta PIN kodi maydoni"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM karta PUK kodi maydoni"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Signal <xliff:g id="ALARM">%1$s</xliff:g> da chalinadi."</string> diff --git a/packages/SystemUI/res-keyguard/values-vi/strings.xml b/packages/SystemUI/res-keyguard/values-vi/strings.xml index 8d88b6f88c04..f2f93f1857ba 100644 --- a/packages/SystemUI/res-keyguard/values-vi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-vi/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Thẻ SIM đã bị khóa bằng mã PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Đang mở khóa thẻ SIM…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Khu vực mã PIN"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Khu vực mã PIN của SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Khu vực mã PUK của SIM"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Báo thức tiếp theo được đặt cho <xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml index 68db8b205e5f..e72b87b4b050 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM 卡已用 PUK 码锁定。"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"正在解锁 SIM 卡…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN 码区域"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM 卡 PIN 码区域"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM 卡 PUK 码区域"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"下一个闹钟时间已设置为<xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml index 294b00afabc2..72826fc3334a 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM 卡處於 PUK 上鎖狀態。"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"正在解鎖 SIM 卡…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN 區域"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM 卡 PIN 區域"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM 卡 PUK 區域"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"已經將下一個鬧鐘時間設做<xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml index b1df1bf0a2fd..4a5a4107aadd 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM 卡處於 PUK 鎖定狀態。"</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"正在解除 SIM 卡鎖定…"</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN 區"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM 卡 PIN 區"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM 卡 PUK 區"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"已設定下一個鬧鐘時間:<xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values-zu/strings.xml b/packages/SystemUI/res-keyguard/values-zu/strings.xml index 7614220ad450..b56e20db1cf8 100644 --- a/packages/SystemUI/res-keyguard/values-zu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zu/strings.xml @@ -51,6 +51,8 @@ <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"Ikhadi le-SIM livalwe nge-PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Ivula ikhadi le-SIM..."</string> <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Indawo yephinikhodi"</string> + <!-- no translation found for keyguard_accessibility_password (7695303207740941101) --> + <skip /> <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Indawo yephinikhodi ye-SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Indawo ye-SIM PUK"</string> <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"I-alamu elandelayo esethelwe i-<xliff:g id="ALARM">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res-keyguard/values/strings.xml b/packages/SystemUI/res-keyguard/values/strings.xml index ed63089f22dd..513d8488a0d4 100644 --- a/packages/SystemUI/res-keyguard/values/strings.xml +++ b/packages/SystemUI/res-keyguard/values/strings.xml @@ -120,6 +120,9 @@ <!-- Accessibility description of the PIN password view. [CHAR_LIMIT=none] --> <string name="keyguard_accessibility_pin_area">PIN area</string> + <!-- Accessibility description of the normal password view. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_password">Device password</string> + <!-- Accessibility description of the SIM PIN password view. [CHAR_LIMIT=none] --> <string name="keyguard_accessibility_sim_pin_area">SIM PIN area</string> <!-- Accessibility description of the SIM PUK password view. [CHAR_LIMIT=none] --> diff --git a/packages/SystemUI/res/drawable/car_ic_notification_2.xml b/packages/SystemUI/res/drawable/car_ic_notification_2.xml deleted file mode 100644 index c74ae153cf09..000000000000 --- a/packages/SystemUI/res/drawable/car_ic_notification_2.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ Copyright (C) 2018 The Android Open Source Project - ~ - ~ Licensed under the Apache License, Version 2.0 (the "License"); - ~ you may not use this file except in compliance with the License. - ~ You may obtain a copy of the License at - ~ - ~ http://www.apache.org/licenses/LICENSE-2.0 - ~ - ~ Unless required by applicable law or agreed to in writing, software - ~ distributed under the License is distributed on an "AS IS" BASIS, - ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - ~ See the License for the specific language governing permissions and - ~ limitations under the License - --> -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="32dp" - android:height="38dp" - android:viewportWidth="32" - android:viewportHeight="38" > - <group - android:translateX="-6" - android:translateY="-3"> - <path - android:pathData="M26.6195649,6.98115478 C31.5083629,8.85235985 34.9817444,13.6069337 34.9817444,19.1767606 L34.9817444,27.9542254 L38,27.9542254 L38,34.2161972 L6,34.2161972 L6,27.9542254 L9.01825558,27.9542254 L9.01825558,19.1767606 C9.01825558,13.6069337 12.4916371,8.85235985 17.3804351,6.98115478 C17.723241,4.726863 19.6609451,3 22,3 C24.3390549,3 26.276759,4.726863 26.6195649,6.98115478 Z M17.326572,36.3035211 L26.673428,36.3035211 C26.673428,38.8973148 24.581063,41 22,41 C19.418937,41 17.326572,38.8973148 17.326572,36.3035211 Z" - android:strokeColor="#00000000" - android:fillType="evenOdd" - android:fillColor="@color/car_grey_50" /> - </group> -</vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/smart_reply_button_background.xml b/packages/SystemUI/res/drawable/smart_reply_button_background.xml index 93adaa00e73c..31119a90a788 100644 --- a/packages/SystemUI/res/drawable/smart_reply_button_background.xml +++ b/packages/SystemUI/res/drawable/smart_reply_button_background.xml @@ -26,7 +26,8 @@ android:insetBottom="8dp"> <shape android:shape="rectangle"> <corners android:radius="8dp" /> - <stroke android:width="1dp" android:color="@color/smart_reply_button_stroke" /> + <stroke android:width="@dimen/smart_reply_button_stroke_width" + android:color="@color/smart_reply_button_stroke" /> <solid android:color="@color/smart_reply_button_background"/> </shape> </inset> diff --git a/packages/SystemUI/res/layout/hybrid_notification.xml b/packages/SystemUI/res/layout/hybrid_notification.xml index bccf2077567a..23e8a1548300 100644 --- a/packages/SystemUI/res/layout/hybrid_notification.xml +++ b/packages/SystemUI/res/layout/hybrid_notification.xml @@ -25,7 +25,6 @@ android:id="@+id/notification_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textAppearance="@*android:style/TextAppearance.Material.Notification.Title" android:singleLine="true" style="?attr/hybridNotificationTitleStyle" /> diff --git a/packages/SystemUI/res/layout/remote_input.xml b/packages/SystemUI/res/layout/remote_input.xml index b5d48b4636a8..e902c925c2a9 100644 --- a/packages/SystemUI/res/layout/remote_input.xml +++ b/packages/SystemUI/res/layout/remote_input.xml @@ -42,7 +42,7 @@ android:singleLine="true" android:ellipsize="start" android:inputType="textShortMessage|textAutoCorrect|textCapSentences" - android:imeOptions="actionSend|flagNoExtractUi|flagNoFullscreen" /> + android:imeOptions="actionSend" /> <FrameLayout android:layout_width="wrap_content" diff --git a/packages/SystemUI/res/layout/smart_reply_button.xml b/packages/SystemUI/res/layout/smart_reply_button.xml index a490c4b8ba60..9faed1828718 100644 --- a/packages/SystemUI/res/layout/smart_reply_button.xml +++ b/packages/SystemUI/res/layout/smart_reply_button.xml @@ -19,6 +19,7 @@ <!-- android:paddingHorizontal is set dynamically in SmartReplyView. --> <Button xmlns:android="http://schemas.android.com/apk/res/android" style="@android:style/Widget.Material.Button" + android:stateListAnimator="@null" android:layout_width="wrap_content" android:layout_height="match_parent" android:minWidth="0dp" diff --git a/packages/SystemUI/res/layout/smart_reply_view.xml b/packages/SystemUI/res/layout/smart_reply_view.xml index aa5549f35a34..9fffc72bcf6d 100644 --- a/packages/SystemUI/res/layout/smart_reply_view.xml +++ b/packages/SystemUI/res/layout/smart_reply_view.xml @@ -25,6 +25,7 @@ android:layout_width="wrap_content" systemui:spacing="@dimen/smart_reply_button_spacing" systemui:singleLineButtonPaddingHorizontal="@dimen/smart_reply_button_padding_horizontal_single_line" - systemui:doubleLineButtonPaddingHorizontal="@dimen/smart_reply_button_padding_horizontal_double_line"> + systemui:doubleLineButtonPaddingHorizontal="@dimen/smart_reply_button_padding_horizontal_double_line" + systemui:buttonStrokeWidth="@dimen/smart_reply_button_stroke_width"> <!-- smart_reply_button(s) will be added here. --> </com.android.systemui.statusbar.policy.SmartReplyView> diff --git a/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml b/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml index c8a554467ceb..7931dfe74587 100644 --- a/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml +++ b/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml @@ -21,62 +21,70 @@ xmlns:systemui="http://schemas.android.com/apk/res-auto" android:id="@+id/mobile_combo" android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:paddingStart="2dp" - android:orientation="horizontal"> - <FrameLayout - android:id="@+id/inout_container" - android:layout_height="17dp" + android:layout_height="match_parent" + android:gravity="center_vertical" > + + <com.android.keyguard.AlphaOptimizedLinearLayout + android:id="@+id/mobile_group" android:layout_width="wrap_content" - android:layout_gravity="center_vertical"> - <ImageView - android:id="@+id/mobile_in" - android:layout_height="wrap_content" + android:layout_height="match_parent" + android:gravity="center_vertical" + android:paddingStart="2dp" + android:orientation="horizontal" > + + <FrameLayout + android:id="@+id/inout_container" + android:layout_height="17dp" android:layout_width="wrap_content" - android:src="@drawable/ic_activity_down" - android:visibility="gone" - android:paddingEnd="2dp" - /> + android:layout_gravity="center_vertical"> + <ImageView + android:id="@+id/mobile_in" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:src="@drawable/ic_activity_down" + android:visibility="gone" + android:paddingEnd="2dp" + /> + <ImageView + android:id="@+id/mobile_out" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:src="@drawable/ic_activity_up" + android:paddingEnd="2dp" + android:visibility="gone" + /> + </FrameLayout> <ImageView - android:id="@+id/mobile_out" + android:id="@+id/mobile_type" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:src="@drawable/ic_activity_up" - android:paddingEnd="2dp" + android:layout_gravity="center_vertical" + android:paddingEnd="1dp" + android:visibility="gone" /> + <Space + android:id="@+id/mobile_roaming_space" + android:layout_height="match_parent" + android:layout_width="@dimen/roaming_icon_start_padding" android:visibility="gone" /> - </FrameLayout> - <ImageView - android:id="@+id/mobile_type" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:layout_gravity="center_vertical" - android:paddingEnd="1dp" - android:visibility="gone" /> - <Space - android:id="@+id/mobile_roaming_space" - android:layout_height="match_parent" - android:layout_width="@dimen/roaming_icon_start_padding" - android:visibility="gone" - /> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical"> - <com.android.systemui.statusbar.AnimatedImageView - android:id="@+id/mobile_signal" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - systemui:hasOverlappingRendering="false" - /> - <ImageView - android:id="@+id/mobile_roaming" + <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/stat_sys_roaming" - android:contentDescription="@string/data_connection_roaming" - android:visibility="gone" /> - </FrameLayout> + android:layout_gravity="center_vertical"> + <com.android.systemui.statusbar.AnimatedImageView + android:id="@+id/mobile_signal" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + systemui:hasOverlappingRendering="false" + /> + <ImageView + android:id="@+id/mobile_roaming" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/stat_sys_roaming" + android:contentDescription="@string/data_connection_roaming" + android:visibility="gone" /> + </FrameLayout> + </com.android.keyguard.AlphaOptimizedLinearLayout> </com.android.systemui.statusbar.StatusBarMobileView> diff --git a/packages/SystemUI/res/layout/system_icons.xml b/packages/SystemUI/res/layout/system_icons.xml index 258b82aacb2e..9237477f17e8 100644 --- a/packages/SystemUI/res/layout/system_icons.xml +++ b/packages/SystemUI/res/layout/system_icons.xml @@ -31,5 +31,6 @@ <com.android.systemui.BatteryMeterView android:id="@+id/battery" android:layout_height="match_parent" android:layout_width="wrap_content" - /> + android:clipToPadding="false" + android:clipChildren="false" /> </LinearLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml index f6c2eebbab66..c70e8296340e 100644 --- a/packages/SystemUI/res/layout/volume_dialog.xml +++ b/packages/SystemUI/res/layout/volume_dialog.xml @@ -53,7 +53,11 @@ android:layout_gravity="center" android:soundEffectsEnabled="false" /> - <include layout="@layout/volume_dnd_icon"/> + <include layout="@layout/volume_dnd_icon" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginRight="@dimen/volume_dialog_stream_padding" + android:layout_marginTop="6dp"/> </FrameLayout> <LinearLayout @@ -71,7 +75,9 @@ android:layout_height="wrap_content" android:minWidth="@dimen/volume_dialog_panel_width" android:gravity="center" - android:orientation="horizontal" > + android:orientation="horizontal" + android:paddingRight="@dimen/volume_dialog_stream_padding" + android:paddingLeft="@dimen/volume_dialog_stream_padding"> <!-- volume rows added and removed here! :-) --> </LinearLayout> <FrameLayout diff --git a/packages/SystemUI/res/layout/volume_dnd_icon.xml b/packages/SystemUI/res/layout/volume_dnd_icon.xml index ac235b7090c5..037d143fa69e 100644 --- a/packages/SystemUI/res/layout/volume_dnd_icon.xml +++ b/packages/SystemUI/res/layout/volume_dnd_icon.xml @@ -17,14 +17,13 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dnd_icon" android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + android:layout_marginTop="6dp"> <ImageView android:layout_width="14dp" android:layout_height="14dp" - android:layout_marginTop="6dp" - android:layout_marginRight="6dp" android:layout_gravity="right|top" android:src="@drawable/ic_dnd" android:tint="?android:attr/textColorTertiary"/> -</FrameLayout> +</FrameLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index f6daa7c1af6b..c3e42fdaaf5e 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Ontsluit"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Wat tans vir vingerafdruk"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Ontsluit sonder om jou vingerafdruk te gebruik"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Skandeer tans gesig"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Stuur"</string> <string name="unlock_label" msgid="8779712358041029439">"ontsluit"</string> <string name="phone_label" msgid="2320074140205331708">"maak foon oop"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Verdeel skerm na bo"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Verdeel skerm na links"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Verdeel skerm na regs"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Gelaai"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Laai tans"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> tot vol"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tik om te demp. Toeganklikheidsdienste kan dalk gedemp wees."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tik om op vibreer te stel."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tik om te demp."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s volumekontroles"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Oproepe en kennisgewings sal lui (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Media-uitvoer"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimeer"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Hou aan om kennisgewings van hierdie program af te wys?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Hierdie kennisgewings kan nie afgeskakel word nie"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofoon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"wys tans bo-oor ander programme op jou skerm"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Hierdie program <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> en <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Hierdie program <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">gebruik tans die <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> en <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">gebruik tans die <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Instellings"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Kennisgewingkontroles vir <xliff:g id="APP_NAME">%1$s</xliff:g> is oopgemaak"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Batterybespaarder sal outomaties aanskakel wanneer battery onder <xliff:g id="PERCENTAGE">%d</xliff:g>%% is."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Instellings"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Het dit"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Stort SysUI-hoop"</string> </resources> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 4b3c87ee76a6..25291317db8e 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"ክፈት"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"አሻራን በመጠባበቅ ላይ"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"የጣት አሻራዎን ሳይጠቀሙ ይክፈቱ"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"የቅኝት ፊት"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"ላክ"</string> <string name="unlock_label" msgid="8779712358041029439">"ክፈት"</string> <string name="phone_label" msgid="2320074140205331708">"ስልክ ክፈት"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ማያ ገጽ ወደ ላይ ክፈል"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ማያ ገጽ ወደ ግራ ክፈል"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ማያ ገጽ ወደ ቀኝ ክፈል"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ባትሪ ሞልቷል"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ኃይል በመሙላት ላይ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> እስኪሞላ ድረስ"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s። ድምጸ-ከል ለማድረግ መታ ያድርጉ። የተደራሽነት አገልግሎቶች ድምጸ-ከል ሊደረግባቸው ይችላል።"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s። ወደ ንዝረት ለማቀናበር መታ ያድርጉ።"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s። ድምጸ-ከል ለማድረግ መታ ያድርጉ።"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s የድምፅ መቆጣጠሪያዎች"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"ጥሪዎች እና ማሳወቂያዎች (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>) ላይ ይደውላሉ"</string> <string name="output_title" msgid="5355078100792942802">"የሚዲያ ውጽዓት"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"አሳንስ"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ከዚህ መተግበሪያ ማሳወቂያዎችን ማሳየት ይቀጥል?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"እነዚህ ማሳወቂያዎች ሊጠፉ አይችሉም"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"ካሜራ"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"ማይክሮፎን"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"በማያዎ ላይ በሌሎች መተግበሪያዎች ላይ በማሳየት ላይ"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">ይህ መተግበሪያ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> እና <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ነው።</item> - <item quantity="other">ይህ መተግበሪያ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> እና <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ነው።</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>ን እና <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>ን በመጠቀም ላይ</item> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>ን እና <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>ን በመጠቀም ላይ</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"ቅንብሮች"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"እሺ"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"የ<xliff:g id="APP_NAME">%1$s</xliff:g> ማሳወቂያ መቆጣጠሪያዎች ተከፍተዋል"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"ባትሪ ልክ ከ<xliff:g id="PERCENTAGE">%d</xliff:g>%% በታች ሲሆን ባትሪ ቆጣቢ በራስ-ሰር ይበራል።"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"ቅንብሮች"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"ገባኝ"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI Heap አራግፍ"</string> </resources> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 91a33d6cdb98..56f6e934a2fd 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -99,8 +99,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"إلغاء القفل"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"في انتظار بصمة الإصبع"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"إلغاء القفل دون استخدام بصمة إصبعك"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"مسح الوجه"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"إرسال"</string> <string name="unlock_label" msgid="8779712358041029439">"إلغاء القفل"</string> <string name="phone_label" msgid="2320074140205331708">"فتح الهاتف"</string> @@ -381,6 +380,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"تقسيم الشاشة بمحاذاة الجزء العلوي"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"تقسيم الشاشة بمحاذاة اليسار"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"تقسيم الشاشة بمحاذاة اليمين"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"تم الشحن"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"جارٍ الشحن"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> حتى الاكتمال"</string> @@ -389,10 +390,10 @@ <string name="description_target_search" msgid="3091587249776033139">"بحث"</string> <string name="description_direction_up" msgid="7169032478259485180">"تمرير لأعلى لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> <string name="description_direction_left" msgid="7207478719805562165">"تمرير لليسار لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> - <string name="zen_priority_introduction" msgid="1149025108714420281">"لن يتم إزعاجك بالأصوات والاهتزاز، باستثناء المُنبِّهات والتذكيرات والأحداث والمتصلين الذين تحددهم. وسيظل بإمكانك سماع أي عناصر أخرى تختار تشغيلها، بما في ذلك الموسيقى ومقاطع الفيديو والألعاب."</string> - <string name="zen_alarms_introduction" msgid="4934328096749380201">"لن يتم إزعاجك بالأصوات والاهتزاز، باستثناء المُنبِّهات. وسيظل بإمكانك سماع أي عناصر أخرى تختار تشغيلها، بما في ذلك الموسيقى ومقاطع الفيديو والألعاب."</string> + <string name="zen_priority_introduction" msgid="1149025108714420281">"لن يتم إزعاجك بالأصوات والاهتزاز، باستثناء المُنبِّهات والتذكيرات والأحداث والمتصلين الذين تحددهم. وسيظل بإمكانك سماع أي عناصر أخرى تختار تشغيلها، بما في ذلك الموسيقى والفيديوهات والألعاب."</string> + <string name="zen_alarms_introduction" msgid="4934328096749380201">"لن يتم إزعاجك بالأصوات والاهتزاز، باستثناء المُنبِّهات. وسيظل بإمكانك سماع أي عناصر أخرى تختار تشغيلها، بما في ذلك الموسيقى والفيديوهات والألعاب."</string> <string name="zen_priority_customize_button" msgid="7948043278226955063">"تخصيص"</string> - <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"سيؤدي هذا إلى منع صدور جميع الأصوات والاهتزازات، بما في ذلك المُنبِّهات والموسيقى ومقاطع الفيديو والألعاب. وسيظل بإمكانك إجراء مكالمات هاتفية."</string> + <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"سيؤدي هذا إلى منع صدور جميع الأصوات والاهتزازات، بما في ذلك المُنبِّهات والموسيقى والفيديوهات والألعاب. وسيظل بإمكانك إجراء مكالمات هاتفية."</string> <string name="zen_silence_introduction" msgid="3137882381093271568">"سيؤدي هذا إلى حظر جميع الأصوات والاهتزازات، بما في ذلك ما يرد من التنبيهات والموسيقى والفيديو والألعاب."</string> <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string> <string name="speed_bump_explanation" msgid="1288875699658819755">"الإشعارات الأقل إلحاحًا أدناه"</string> @@ -554,6 +555,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. انقر للتجاهل. قد يتم تجاهل خدمات إمكانية الوصول."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. انقر للتعيين على الاهتزاز."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. انقر لكتم الصوت."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s عنصر للتحكم في مستوى الصوت"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"سيصدر الهاتف رنينًا عند تلقي المكالمات والإشعارات (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)."</string> <string name="output_title" msgid="5355078100792942802">"إخراج الوسائط"</string> @@ -619,25 +626,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"تصغير"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"هل تريد الاستمرار في تلقي إشعارات من هذا التطبيق؟"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"يتعذَّر إيقاف هذه الإشعارات."</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"الكاميرا"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"الميكروفون"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"العرض فوق التطبيقات الأخرى على شاشتك"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="zero">هذا التطبيق <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="two">هذا التطبيق <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="few">هذا التطبيق <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="many">هذا التطبيق <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">هذا التطبيق <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">هذا التطبيق <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="zero">يستخدم <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="two">يستخدم <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="few">يستخدم <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="many">يستخدم <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">يستخدم <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">يستخدم <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"الإعدادات"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"حسنًا"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"تم فتح عناصر التحكم في الإشعارات لتطبيق <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -784,9 +786,9 @@ <string name="accessibility_action_divider_top_50" msgid="6385859741925078668">"ضبط حجم النافذة العلوية ليكون ٥٠%"</string> <string name="accessibility_action_divider_top_30" msgid="6201455163864841205">"ضبط حجم النافذة العلوية ليكون ٣٠%"</string> <string name="accessibility_action_divider_bottom_full" msgid="301433196679548001">"عرض النافذة السفلية بملء الشاشة"</string> - <string name="accessibility_qs_edit_tile_label" msgid="8374924053307764245">"الموضع <xliff:g id="POSITION">%1$d</xliff:g>، <xliff:g id="TILE_NAME">%2$s</xliff:g>. انقر نقرًا مزدوجًا للتعديل."</string> - <string name="accessibility_qs_edit_add_tile_label" msgid="8133209638023882667">"<xliff:g id="TILE_NAME">%1$s</xliff:g>. انقر نقرًا مزدوجًا للإضافة."</string> - <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"الموضع <xliff:g id="POSITION">%1$d</xliff:g>. انقر نقرًا مزدوجًا للتحديد."</string> + <string name="accessibility_qs_edit_tile_label" msgid="8374924053307764245">"الموضع <xliff:g id="POSITION">%1$d</xliff:g>، <xliff:g id="TILE_NAME">%2$s</xliff:g>. انقر مرّتين للتعديل."</string> + <string name="accessibility_qs_edit_add_tile_label" msgid="8133209638023882667">"<xliff:g id="TILE_NAME">%1$s</xliff:g>. انقر مرّتين للإضافة."</string> + <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"الموضع <xliff:g id="POSITION">%1$d</xliff:g>. انقر مرّتين للتحديد."</string> <string name="accessibility_qs_edit_move_tile" msgid="2461819993780159542">"نقل <xliff:g id="TILE_NAME">%1$s</xliff:g>"</string> <string name="accessibility_qs_edit_remove_tile" msgid="7484493384665907197">"إزالة <xliff:g id="TILE_NAME">%1$s</xliff:g>"</string> <string name="accessibility_qs_edit_tile_added" msgid="8050200862063548309">"تمت إضافة <xliff:g id="TILE_NAME">%1$s</xliff:g> إلى الموضع <xliff:g id="POSITION">%2$d</xliff:g>"</string> @@ -881,6 +883,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"سيتم تفعيل ميزة \"توفير شحن البطارية\" عندما تنخفض البطارية عن <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"الإعدادات"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"حسنًا"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"تفريغ ذاكرة SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 61d7bb8497dd..79d189e9f439 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -369,6 +369,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"স্ক্ৰীণখনক ওপৰফাললৈ ভাগ কৰক"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"স্ক্ৰীণখনক বাওঁফাললৈ ভাগ কৰক"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"স্ক্ৰীণখনক সোঁফাললৈ ভাগ কৰক"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"চ্চার্জ হ\'ল"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"চ্চার্জ হৈ আছে"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"বেটাৰিৰ চ্চাৰ্জ সম্পূর্ণ হ\'বলৈ <xliff:g id="CHARGING_TIME">%s</xliff:g> বাকী"</string> @@ -542,6 +544,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s। মিউট কৰিবলৈ টিপক। দিব্য়াংগসকলৰ বাবে থকা সেৱা মিউট হৈ থাকিব পাৰে।"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s। কম্পন অৱস্থাত ছেট কৰিবলৈ টিপক।"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s। মিউট কৰিবলৈ টিপক।"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s ধ্বনি নিয়ন্ত্ৰণসমূহ"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"কল আৰু জাননীবোৰ ইমান ভলিউমত বাজিব (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"মিডিয়া আউটপুট"</string> @@ -607,17 +615,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"সৰু কৰক"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"এই এপটোৰ জাননী দেখুওৱাই থাকিব লাগিবনে?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"এই জাননীসমূহ বন্ধ কৰিব নোৱাৰি"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"কেমেৰা"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"মাইক্ৰ\'ফ\'ন"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"স্ক্ৰীণত অইন এপৰ ওপৰত দেখুৱাওক"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">এই এপটোৱে <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> আৰু <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>।</item> - <item quantity="other">এই এপটোৱে <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> আৰু <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>।</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> আৰু <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ব্যৱহাৰ কৰি আছে</item> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> আৰু <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ব্যৱহাৰ কৰি আছে</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"ছেটিংসমূহ"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ঠিক আছে"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ জাননী নিয়ন্ত্ৰণসমূহ খোলা অৱস্থাত আছে"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index e7cd96d15305..9ec808b1b114 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -368,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Ekranı yuxarıdan ayırın"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Ekranı soldan ayırın"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Ekranı sağdan ayırın"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Dolub"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Enerji doldurulur"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> dolana kimi"</string> @@ -541,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Səssiz etmək üçün tıklayın. Əlçatımlılıq xidmətləri səssiz edilmiş ola bilər."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Vibrasiyanı ayarlamaq üçün klikləyin."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Səssiz etmək üçün klikləyin."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s səs nəzarətləri"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Çağrı və bildirişlər zəng çalacaq (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Media çıxışı"</string> @@ -606,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Kiçildin"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu tətbiqin bildirişləri göstərilməyə davam edilsin?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Bu bildirişlər deaktiv edilə bilməz"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ekrandakı digər tətbiqlərdə göstərin"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Bu tətbiq <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> və <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> fəaliyyətini icra edir.</item> - <item quantity="one">Bu tətbiq <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> fəaliyyətini icra edir.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> və <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> istifadə edilir</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> istifadə edilir</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Ayarlar"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün bildiriş kontrolları açıqdır"</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index a0c33e79887f..1bcf9a8fa783 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -96,8 +96,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Otključajte"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Čeka se otisak prsta"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Otključaj bez korišćenja otiska prsta"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Skeniranje lica"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Pošalji"</string> <string name="unlock_label" msgid="8779712358041029439">"otključaj"</string> <string name="phone_label" msgid="2320074140205331708">"otvori telefon"</string> @@ -372,6 +371,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Podeli ekran nagore"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Podeli ekran nalevo"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Podeli ekran nadesno"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjena je"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Punjenje"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> dok se ne napuni"</string> @@ -545,6 +546,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Dodirnite da biste isključili zvuk. Zvuk usluga pristupačnosti će možda biti isključen."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Dodirnite da biste podesili na vibraciju."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Dodirnite da biste isključili zvuk."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Kontrole za jačinu zvuka za %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Melodija zvona za pozive i obaveštenja je uključena (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Izlaz medija"</string> @@ -610,19 +617,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Umanji"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Želite li da se obaveštenja iz ove aplikacije i dalje prikazuju?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Ne možete da isključite ova obaveštenja"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"prikazuje se na ekranu dok koristite druge aplikacije"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="few">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">koristi <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="few">koristi <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">koristi <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Podešavanja"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Potvrdi"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Kontrole obaveštenja za otvaranje aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -860,6 +868,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Ušteda baterije će se automatski uključivati kada baterija padne ispod <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Podešavanja"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Važi"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Izdvoji SysUI mem."</string> </resources> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 2bb3a425ccbb..661d1cac95cc 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -97,8 +97,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Разблакiраваць"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Чаканне ўводу даных адбітка пальца"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Разблакіроўка без выкарыстання адбітка пальца"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Сканіраванне твару"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Адправіць"</string> <string name="unlock_label" msgid="8779712358041029439">"разблакiраваць"</string> <string name="phone_label" msgid="2320074140205331708">"адкрыць тэлефон"</string> @@ -377,6 +376,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Падзяліць экран зверху"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Падзяліць экран злева"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Падзяліць экран справа"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Зараджаны"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарадка"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> да поўнай зарадкі"</string> @@ -550,6 +551,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Дакраніцеся, каб адключыць гук. Можа быць адключаны гук службаў спецыяльных магчымасцей."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Дакраніцеся, каб уключыць вібрацыю."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Дакраніцеся, каб адключыць гук"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Рэгулятар гучнасці %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Для выклікаў і апавяшчэнняў уключаны гук (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Вывад мультымедыя"</string> @@ -615,21 +622,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Згарнуць"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Працягваць паказваць апавяшчэнні гэтай праграмы?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Немагчыма адключыць гэтыя апавяшчэнні"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"камера"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"мікрафон"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"паказваецца паверх іншых праграм на экране"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Гэта праграма выконвае наступныя дзеянні: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="few">Гэта праграма выконвае наступныя дзеянні: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="many">Гэта праграма выконвае наступныя дзеянні: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Гэта праграма выконвае наступныя дзеянні: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">выкарыстоўваюцца <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="few">выкарыстоўваюцца <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="many">выкарыстоўваюцца <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">выкарыстоўваюцца <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Налады"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ОК"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Кіраванне апавяшчэннямі для <xliff:g id="APP_NAME">%1$s</xliff:g> адкрыта"</string> @@ -869,6 +875,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Калі ўзровень зараду акумулятара знізіцца да <xliff:g id="PERCENTAGE">%d</xliff:g>%%, аўтаматычна ўключыцца рэжым эканоміі энергіі."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Налады"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Зразумела"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Дамп кучы SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 6b4f509e65e0..d631604a1a6c 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Отключване"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Изчаква се отпечатък"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Отключете, без да използвате отпечатъка си"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Сканиране на лице"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Изпращане"</string> <string name="unlock_label" msgid="8779712358041029439">"отключване"</string> <string name="phone_label" msgid="2320074140205331708">"отваряне на телефона"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Разделяне на екрана нагоре"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Разделяне на екрана наляво"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Разделяне на екрана надясно"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Заредена"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарежда се"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> до пълно зареждане"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Докоснете, за да заглушите звука. Възможно е звукът на услугите за достъпност да бъде заглушен."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Докоснете, за да зададете вибриране."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Докоснете, за да заглушите звука."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Контроли за силата на звука – %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"При обаждания и известия устройството ще звъни (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Изходяща мултимедия"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Намаляване"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Да продължат ли да се показват известията от това приложение?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Тези известия не могат да бъдат изключени"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"камерата"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"микрофона"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"се показва върху други приложения на екрана"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Това приложение <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Това приложение <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">използва <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">използва <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Настройки"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Контролите за известията за <xliff:g id="APP_NAME">%1$s</xliff:g> са оттворени"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Режимът за запазване на батерията ще се включи автоматично, след като нивото й премине под <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Настройки"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Разбрах"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 59ca38986ed4..ffe40f6233b8 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"আনলক করুন"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"আঙ্গুলের ছাপের জন্য অপেক্ষা করা হচ্ছে"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"আপনার আঙ্গুলের ছাপ ব্যবহার না করেই আনলক করুন"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"ফেস স্ক্যান করা হচ্ছে"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"পাঠান"</string> <string name="unlock_label" msgid="8779712358041029439">"আনলক করুন"</string> <string name="phone_label" msgid="2320074140205331708">"ফোন খুলুন"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"স্ক্রিনটি উপরের দিকে বিভক্ত করুন"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"স্ক্রিনটি বাঁদিকে বিভক্ত করুন"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"স্ক্রিনটি ডানদিকে বিভক্ত করুন"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"চার্জ হয়েছে"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"চার্জ হচ্ছে"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"পূর্ণ হতে <xliff:g id="CHARGING_TIME">%s</xliff:g> সময় লাগবে"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s। নিঃশব্দ করতে আলতো চাপুন। অ্যাক্সেসযোগ্যতার পরিষেবাগুলিকে নিঃশব্দ করা হতে পারে।"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s। ভাইব্রেট করতে ট্যাপ করুন।"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s। নিঃশব্দ করতে ট্যাপ করুন।"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s ভলিউম নিয়ন্ত্রণ"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"কল এবং বিজ্ঞপ্তির রিং হবে (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"মিডিয়া আউটপুট"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"ছোট করে দিন"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"এই অ্যাপের বিজ্ঞপ্তি পরেও দেখে যেতে চান?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"এই বিজ্ঞপ্তিগুলি বন্ধ করা যাবে না"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"ক্যামেরা"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"মাইক্রোফোন"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"স্ক্রিনে অন্যান্য অ্যাপের উপরে দেখানো হচ্ছে"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">এই অ্যাপটি <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> এবং <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>।</item> - <item quantity="other">এই অ্যাপটি <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> এবং <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>।</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> এবং <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ব্যবহার করছে</item> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> এবং <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ব্যবহার করছে</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"সেটিংস"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ঠিক আছে"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> খোলা থাকলে বিজ্ঞপ্তি নিয়ন্ত্রণ"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"চার্জ <xliff:g id="PERCENTAGE">%d</xliff:g>%%-এর নিচে চলে গেলে ব্যাটারি সেভার নিজে থেকেই চালু হয়ে যাবে।"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"সেটিংস"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"বুঝেছি"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 929b20cacd3c..9d55d30eaabf 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -96,8 +96,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Otključaj"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Čeka se otisak prsta"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Otključaj bez korištenja otiska prsta"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Skeniranje lica"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Pošalji"</string> <string name="unlock_label" msgid="8779712358041029439">"otključaj"</string> <string name="phone_label" msgid="2320074140205331708">"otvori telefon"</string> @@ -372,6 +371,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dijeli ekran nagore"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dijeli ekran nalijevo"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dijeli ekran nadesno"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjeno"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Punjenje"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Do kraja punjenja preostalo <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -547,6 +548,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Dodirnite da isključite zvuk. Zvukovi usluga pristupačnosti mogu biti isključeni."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Dodirnite da postavite vibraciju."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Dodirnite da isključite zvuk."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Kontrole glasnoće za %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Pozivi i obavještenja će zvoniti jačinom (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Izlaz za medijske fajlove"</string> @@ -612,19 +619,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimiziraj"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Nastaviti prikazivanje obavještenja iz ove aplikacije?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Ova obavještenja nije moguće isključiti"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"prikazivanje preko drugih aplikacija na ekranu"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="few">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">koristi funkcije <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="few">koristi funkcije <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">koristi funkcije <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Postavke"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"UREDU"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Otvorene su kontrole obavještenja za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -862,6 +870,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Kada je baterija ispod <xliff:g id="PERCENTAGE">%d</xliff:g>%%, Ušteda baterije se automatski uključuje."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Postavke"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Razumijem"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Izdvoji SysUI mem."</string> </resources> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 66a33c199c4c..61c7269ddc12 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloqueja"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"S\'està esperant l\'empremta digital"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Desbloqueja sense utilitzar l\'empremta digital"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"S\'està escanejant la cara"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Envia"</string> <string name="unlock_label" msgid="8779712358041029439">"desbloqueja"</string> <string name="phone_label" msgid="2320074140205331708">"obre el telèfon"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Divideix la pantalla cap amunt"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Divideix la pantalla cap a l\'esquerra"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Divideix la pantalla cap a la dreta"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"S\'està carregant"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> per completar la càrrega"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toca per silenciar el so. Pot ser que els serveis d\'accessibilitat se silenciïn."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toca per activar la vibració."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toca per silenciar."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Controls de volum %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Les trucades i les notificacions sonaran (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Sortida de contingut multimèdia"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimitza"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Vols continuar rebent notificacions d\'aquesta aplicació?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Aquestes notificacions no es poden desactivar"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"la càmera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"el micròfon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"es mostra sobre altres aplicacions a la pantalla"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Aquesta aplicació està <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Aquesta aplicació està <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">utilitzant <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">utilitzant <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Configuració"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"D\'acord"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"S\'han obert els controls de notificació per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"L\'estalvi de bateria s\'activarà automàticament quan el nivell de bateria sigui inferior al <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Configuració"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"D\'acord"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Aboca espai de SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 408be3d4d932..25f2aaf07198 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -97,8 +97,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Odemknout"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Čeká se na použití otisku"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Odemknout bez otisku prstu"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Skenování obličeje"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Odeslat"</string> <string name="unlock_label" msgid="8779712358041029439">"odemknout"</string> <string name="phone_label" msgid="2320074140205331708">"otevřít telefon"</string> @@ -377,6 +376,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Rozdělit obrazovku nahoru"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Rozdělit obrazovku vlevo"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Rozdělit obrazovku vpravo"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nabito"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Nabíjení"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> do plného nabití"</string> @@ -550,6 +551,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Klepnutím vypnete zvuk. Služby přístupnosti mohou být ztlumeny."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Klepnutím nastavíte vibrace."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Klepnutím vypnete zvuk."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Ovládací prvky hlasitosti %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Volání a oznámení budou vyzvánět (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Výstup médií"</string> @@ -615,21 +622,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimalizovat"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Mají se oznámení z této aplikace nadále zobrazovat?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Tato oznámení nelze deaktivovat"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"fotoaparát"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"zobrazení přes ostatní aplikace na obrazovce"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="few">Tato aplikace <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="many">Tato aplikace <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Tato aplikace <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Tato aplikace <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="few">používá položky <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="many">používá položky <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">používá položky <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">používá položku <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Nastavení"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Ovládací prvky oznámení aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> byly otevřeny"</string> @@ -869,6 +875,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Spořič baterie se automaticky aktivuje, jakmile baterie klesne pod <xliff:g id="PERCENTAGE">%d</xliff:g> %%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Nastavení"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Rozumím"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Výpis haldy SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index f1b56a460f48..e5ba073e92d8 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Lås op"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Venter på fingeraftryk"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Lås op uden at bruge dit fingeraftryk"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Scanner ansigt"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Send"</string> <string name="unlock_label" msgid="8779712358041029439">"lås op"</string> <string name="phone_label" msgid="2320074140205331708">"åbn telefon"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Delt skærm øverst"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Delt skærm til venstre"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Delt skærm til højre"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Opladet"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Oplader"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> indtil fuld opladet"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tryk for at slå lyden fra. Lyden i tilgængelighedstjenester kan blive slået fra."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tryk for at aktivere vibration."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tryk for at slå lyden fra."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s lydstyrkeknapper"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Der afspilles lyd ved opkald og underretninger (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Medieafspilning"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimer"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Vil du fortsætte med at se underretninger fra denne app?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Disse underretninger kan ikke deaktiveres"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kameraet"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofonen"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"vises over andre apps på din skærm"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Denne app <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> og <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Denne app <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> og <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">bruger <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> og <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">bruger <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> og <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Indstillinger"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Styring af underretninger for <xliff:g id="APP_NAME">%1$s</xliff:g> blev åbnet"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Batterisparefunktionen aktiveres automatisk, når batteriniveauet når under <xliff:g id="PERCENTAGE">%d</xliff:g> %%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Indstillinger"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Gem SysUI-heap"</string> </resources> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 712542efa312..23bdc16bca06 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Entsperren"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Auf Fingerabdruck wird gewartet"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Ohne Verwendung des Fingerabdrucks entsperren"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Gesicht wird gescannt"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Senden"</string> <string name="unlock_label" msgid="8779712358041029439">"Entsperren"</string> <string name="phone_label" msgid="2320074140205331708">"Telefon öffnen"</string> @@ -373,6 +372,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Geteilten Bildschirm oben anzeigen"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Geteilten Bildschirm auf linker Seite anzeigen"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Geteilten Bildschirm auf der rechten Seite anzeigen"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Aufgeladen"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Wird aufgeladen"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Voll in <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -546,6 +547,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Zum Stummschalten tippen. Bedienungshilfen werden unter Umständen stummgeschaltet."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Zum Aktivieren der Vibration tippen."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Zum Stummschalten tippen."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Lautstärkeregler von %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Gerät klingelt bei Anrufen und Benachrichtigungen (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Medienausgabe"</string> @@ -611,17 +618,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimieren"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Benachrichtigungen dieser App weiterhin anzeigen?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Diese Benachrichtigungen können nicht deaktiviert werden"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"Kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"Mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"wird über anderen Apps auf dem Bildschirm angezeigt"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Diese App <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> und <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Diese App <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">verwendet: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>, <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">verwendet: <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Einstellungen"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Benachrichtigungseinstellungen für <xliff:g id="APP_NAME">%1$s</xliff:g> geöffnet"</string> @@ -857,6 +867,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Der Energiesparmodus wird bei einem Akkustand von <xliff:g id="PERCENTAGE">%d</xliff:g>%% automatisch aktiviert."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Einstellungen"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index cda33546400f..3569a7137d15 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Ξεκλείδωμα"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Αναμονή για δακτυλικό αποτύπωμα"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Ξεκλείδωμα χωρίς τη χρήση του μοναδικού χαρακτηριστικού σας"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Σάρωση προσώπου"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Αποστολή"</string> <string name="unlock_label" msgid="8779712358041029439">"ξεκλείδωμα"</string> <string name="phone_label" msgid="2320074140205331708">"άνοιγμα τηλεφώνου"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Διαχωρισμός οθόνης στην κορυφή"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Διαχωρισμός οθόνης στα αριστερά"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Διαχωρισμός οθόνης στα δεξιά"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Φορτίστηκε"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Φόρτιση"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> για πλήρη φόρτιση"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Πατήστε για σίγαση. Οι υπηρεσίες προσβασιμότητας ενδέχεται να τεθούν σε σίγαση."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Πατήστε για να ενεργοποιήσετε τη δόνηση."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Πατήστε για σίγαση."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s στοιχεία ελέγχου έντασης ήχου"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Θα υπάρχει ηχητική ειδοποίηση για κλήσεις και ειδοποιήσεις (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Έξοδος μέσων"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Ελαχιστοποίηση"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Να συνεχίσουν να εμφανίζονται ειδοποιήσεις από αυτήν την εφαρμογή;"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Αδύνατη η απενεργοποίηση αυτών των ειδοποιήσεων"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"κάμερα"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"μικρόφωνο"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"εμφανίζεται πάνω σε άλλες εφαρμογές στην οθόνη σας"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Αυτή η εφαρμογή <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> και <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Αυτή η εφαρμογή <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">χρησιμοποιεί <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> και <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">χρησιμοποιεί <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Ρυθμίσεις"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ΟΚ"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Τα στοιχεία ελέγχου ειδοποιήσεων για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> άνοιξαν"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Η Εξοικονόμηση μπαταρίας θα ενεργοποιηθεί αυτόματα μόλις η στάθμη της μπαταρίας φτάσει κάτω από <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Ρυθμίσεις"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Το κατάλαβα"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Στιγμ. μνήμης SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index c9b530ea7367..c681daf4001d 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Unlock"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Waiting for fingerprint"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Unlock without using your fingerprint"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Scanning face"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Send"</string> <string name="unlock_label" msgid="8779712358041029439">"unlock"</string> <string name="phone_label" msgid="2320074140205331708">"open phone"</string> @@ -369,6 +368,8 @@ <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> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <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> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tap to mute. Accessibility services may be muted."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s volume controls"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Calls and notifications will ring (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Media output"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"These notifications can\'t be turned off"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"camera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microphone"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"displaying over other apps on your screen"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">This app is <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> and <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">This app is <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">using the <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> and <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">using the <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Settings"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Notification controls for <xliff:g id="APP_NAME">%1$s</xliff:g> opened"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Battery Saver will turn on automatically once battery goes below <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Settings"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index 3b0439a9a7ae..3d4e15454c40 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Unlock"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Waiting for fingerprint"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Unlock without using your fingerprint"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Scanning face"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Send"</string> <string name="unlock_label" msgid="8779712358041029439">"unlock"</string> <string name="phone_label" msgid="2320074140205331708">"open phone"</string> @@ -369,6 +368,8 @@ <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> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <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> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tap to mute. Accessibility services may be muted."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s volume controls"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Calls and notifications will ring (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Media output"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"These notifications can\'t be turned off"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"camera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microphone"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"displaying over other apps on your screen"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">This app is <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> and <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">This app is <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">using the <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> and <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">using the <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Settings"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Notification controls for <xliff:g id="APP_NAME">%1$s</xliff:g> opened"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Battery Saver will turn on automatically once battery goes below <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Settings"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index c9b530ea7367..c681daf4001d 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Unlock"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Waiting for fingerprint"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Unlock without using your fingerprint"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Scanning face"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Send"</string> <string name="unlock_label" msgid="8779712358041029439">"unlock"</string> <string name="phone_label" msgid="2320074140205331708">"open phone"</string> @@ -369,6 +368,8 @@ <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> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <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> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tap to mute. Accessibility services may be muted."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s volume controls"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Calls and notifications will ring (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Media output"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"These notifications can\'t be turned off"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"camera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microphone"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"displaying over other apps on your screen"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">This app is <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> and <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">This app is <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">using the <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> and <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">using the <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Settings"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Notification controls for <xliff:g id="APP_NAME">%1$s</xliff:g> opened"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Battery Saver will turn on automatically once battery goes below <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Settings"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index c9b530ea7367..c681daf4001d 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Unlock"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Waiting for fingerprint"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Unlock without using your fingerprint"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Scanning face"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Send"</string> <string name="unlock_label" msgid="8779712358041029439">"unlock"</string> <string name="phone_label" msgid="2320074140205331708">"open phone"</string> @@ -369,6 +368,8 @@ <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> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <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> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tap to mute. Accessibility services may be muted."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s volume controls"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Calls and notifications will ring (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Media output"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimise"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"These notifications can\'t be turned off"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"camera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microphone"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"displaying over other apps on your screen"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">This app is <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> and <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">This app is <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">using the <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> and <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">using the <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Settings"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Notification controls for <xliff:g id="APP_NAME">%1$s</xliff:g> opened"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Battery Saver will turn on automatically once battery goes below <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Settings"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index 774241c33e77..5cb054c72601 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -368,6 +368,7 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string> + <string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Toggle Overview"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> until full"</string> @@ -541,6 +542,9 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tap to mute. Accessibility services may be muted."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string> + <string name="volume_ringer_hint_mute" msgid="9199811307292269601">"mute"</string> + <string name="volume_ringer_hint_unmute" msgid="6602880133293060368">"unmute"</string> + <string name="volume_ringer_hint_vibrate" msgid="4036802135666515202">"vibrate"</string> <string name="volume_dialog_title" msgid="7272969888820035876">"%s volume controls"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Calls and notifications will ring (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Media output"</string> @@ -606,17 +610,13 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimize"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"These notifications can\'t be turned off"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"camera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microphone"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"displaying over other apps on your screen"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">This app is <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> and <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">This app is <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">using the <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> and <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">using the <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <string name="appops_camera" msgid="8100147441602585776">"This app is using the camera."</string> + <string name="appops_microphone" msgid="741508267659494555">"This app is using the microphone."</string> + <string name="appops_overlay" msgid="6165912637560323464">"This app is displaying over other apps on your screen."</string> + <string name="appops_camera_mic" msgid="1576901651150187433">"This app is using the microphone and camera."</string> + <string name="appops_camera_overlay" msgid="8869400080809298814">"This app is displaying over other apps on your screen and using the camera."</string> + <string name="appops_mic_overlay" msgid="4835157962857919804">"This app is displaying over other apps on your screen and using the microphone."</string> + <string name="appops_camera_mic_overlay" msgid="6718768197048030993">"This app is displaying over other apps on your screen and using the microphone and camera."</string> <string name="notification_appops_settings" msgid="1028328314935908050">"Settings"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Notification controls for <xliff:g id="APP_NAME">%1$s</xliff:g> opened"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 3e2700963351..053cfdd377f7 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloquear"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Esperando huella digital"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Desbloquear sin utilizar la huella digital"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Escaneando rostro"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Enviar"</string> <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string> <string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dividir pantalla en la parte superior"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dividir pantalla a la izquierda"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dividir pantalla a la derecha"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Cargando"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> para completarse"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Presiona para silenciar. Es posible que los servicios de accesibilidad estén silenciados."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Presiona para establecer el modo vibración."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Presiona para silenciar."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Controles de volumen %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Sonarán las llamadas y notificaciones (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Salida multimedia"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"¿Quieres seguir viendo las notificaciones de esta app?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"No se pueden desactivar estas notificaciones"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"cámara"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"micrófono"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"se superpone a otras apps en tu pantalla"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Esta app está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> y <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Esta app está <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">usando el <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> y <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">usando <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Configuración"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Aceptar"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Se abrieron los controles de notificaciones de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"El Ahorro de batería se activará automáticamente cuando quede menos de <xliff:g id="PERCENTAGE">%d</xliff:g>%% de batería."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Configuración"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Entendido"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Volcar pila de SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 3e56bfff8c24..5fbfc99b869a 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -370,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dividir la pantalla en la parte superior"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dividir la pantalla a la izquierda"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dividir la pantalla a la derecha"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Cargando"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> para completarse"</string> @@ -543,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toca para silenciar. Los servicios de accesibilidad pueden silenciarse."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toca para activar la vibración."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toca para silenciar."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Controles de volumen %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Las llamadas y las notificaciones sonarán (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Salida multimedia"</string> @@ -608,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"¿Quieres seguir viendo las notificaciones de esta aplicación?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Estas notificaciones no se pueden desactivar"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"la cámara"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"el micrófono"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"se muestra sobre otras aplicaciones que haya en la pantalla"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Esta aplicación está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> y <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Esta aplicación está <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">usando <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> y <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">usando <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Ajustes"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Aceptar"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Se han abierto los controles de las notificaciones de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 29ad9ee77bcc..3ff9234320d0 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Luku avamine"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Sõrmejälje ootel"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Ava sõrmejälge kasutamata"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Näo skannimine"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Saada"</string> <string name="unlock_label" msgid="8779712358041029439">"ava lukk"</string> <string name="phone_label" msgid="2320074140205331708">"ava telefon"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Poolita ekraan üles"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Poolita ekraan vasakule"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Poolita ekraan paremale"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Laetud"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Laadimine"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Täislaadimiseks kulub <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Puudutage vaigistamiseks. Juurdepääsetavuse teenused võidakse vaigistada."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Puudutage vibreerimise määramiseks."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Puudutage vaigistamiseks."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Helitugevuse juhtnupud: %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Kõnede ja märguannete puhul telefon heliseb (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Meediaväljund"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimeeri"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Kas jätkata selle rakenduse märguannete kuvamist?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Neid märguandeid ei saa välja lülitada"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kaamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"teie ekraanil muude rakenduste peal kuvamine"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">See rakendus <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ja <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">See rakendus <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">kasutab üksusi <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ja <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">kasutab üksust <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Seaded"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> märguannete juhtelemendid on avatud"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Kui aku tase langeb alla <xliff:g id="PERCENTAGE">%d</xliff:g>%%, lülitub akusäästja automaatselt sisse."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Seaded"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Selge"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index ebe624d388c0..74bd6ca6869e 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Desblokeatu"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Hatz-markaren zain"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Desblokeatu hatz-markaren bidez"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Aurpegia eskaneatzen"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Bidali"</string> <string name="unlock_label" msgid="8779712358041029439">"desblokeatu"</string> <string name="phone_label" msgid="2320074140205331708">"ireki telefonoan"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Zatitu pantaila eta ezarri goian"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Zatitu pantaila eta ezarri ezkerrean"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Zatitu pantaila eta ezarri eskuinean"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Kargatuta"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Kargatzen"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> falta zaizkio guztiz kargatzeko"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Sakatu audioa desaktibatzeko. Baliteke erabilerraztasun-eginbideen audioa desaktibatzea."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Sakatu hau dardara ezartzeko."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Sakatu hau audioa desaktibatzeko."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s gailuaren bolumena kontrolatzeko aukerak"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Tonuak jo egingo du deiak eta jakinarazpenak jasotzean (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Multimedia-irteera"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizatu"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Aplikazio honen jakinarazpenak erakusten jarraitzea nahi duzu?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Jakinarazpen hauek ezin dira desaktibatu"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofonoa"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"pantailako beste aplikazioen gainean bistaratzen"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Aplikazioa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> eta <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ari da.</item> - <item quantity="one">Aplikazioa <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ari da.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> eta <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> erabiltzen</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> erabiltzen</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Ezarpenak"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Ados"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Ireki dira <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioaren jakinarazpenak kontrolatzeko aukerak"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Bateria-aurrezlea automatikoki aktibatuko da bateriaren %% <xliff:g id="PERCENTAGE">%d</xliff:g> gelditzen denean."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Ezarpenak"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Ados"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 02142f33883a..b9089ade2305 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"باز کردن قفل"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"در انتظار اثرانگشت"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"باز کردن قفل بدون استفاده از اثر انگشت"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"درحال اسکن کردن چهره"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"ارسال"</string> <string name="unlock_label" msgid="8779712358041029439">"بازکردن قفل"</string> <string name="phone_label" msgid="2320074140205331708">"باز کردن تلفن"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"تقسیم کردن صفحه به بالا"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"تقسیم کردن صفحه به چپ"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"تقسیم کردن صفحه به راست"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"شارژ کامل شد"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"در حال شارژ شدن"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> مانده تا شارژ کامل شود"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. برای بیصدا کردن ضربه بزنید. ممکن است سرویسهای دسترسپذیری بیصدا شوند."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. برای تنظیم روی لرزش، ضربه بزنید."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. برای بیصدا کردن ضربه بزنید."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s کنترلهای میزان صدا"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"تماسها و اعلانها زنگ میخورند (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"خروجی رسانه"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"کوچک کردن"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"نمایش اعلان از این برنامه ادامه یابد؟"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"نمیتوان این اعلانها را خاموش کرد"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"دوربین"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"میکروفون"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"نمایش روی برنامههای دیگر در صفحهنمایش"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">این برنامه <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> است.</item> - <item quantity="other">این برنامه <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> است.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">با استفاده از <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">با استفاده از <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> و <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"تنظیمات"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"تأیید"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"کنترلهای اعلان برای <xliff:g id="APP_NAME">%1$s</xliff:g> باز شد"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"وقتی شارژ باتری به زیر <xliff:g id="PERCENTAGE">%d</xliff:g>%% برسد، «بهینهسازی باتری» بهطور خودکار روشن میشود."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"تنظیمات"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"متوجه شدم"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 46c080062483..483dc8162082 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Avaa lukitus"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Odotetaan sormenjälkeä"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Avaa lukitus jollakin muulla tavalla kuin sormenjäljellä"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Kasvojen skannaus"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Lähetä"</string> <string name="unlock_label" msgid="8779712358041029439">"avaa lukitus"</string> <string name="phone_label" msgid="2320074140205331708">"avaa puhelin"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Jaa näyttö ylös"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Jaa näyttö vasemmalle"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Jaa näyttö oikealle"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Ladattu"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Ladataan"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> kunnes täynnä"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Mykistä koskettamalla. Myös esteettömyyspalvelut saattavat mykistyä."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Siirry värinätilaan napauttamalla."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Mykistä napauttamalla."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Äänenvoimakkuuden säädin: %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Puhelut ja ilmoitukset soivat (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Median äänentoisto"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Pienennä"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Jatketaanko ilmoitusten näyttämistä tästä sovelluksesta?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Näitä ilmoituksia ei voi poistaa käytöstä"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofoni"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"näkyy näytöllä muiden sovellusten päällä"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Tämä sovellus <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ja <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Tämä sovellus <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">käyttää seuraavia: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ja <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">käyttää seuraavaa: <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Asetukset"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Sovelluksen <xliff:g id="APP_NAME">%1$s</xliff:g> ilmoitusten hallinta on avattu."</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Virransäästö käynnistyy automaattisesti, kun akun lataustaso on alle <xliff:g id="PERCENTAGE">%d</xliff:g> %%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Asetukset"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Selvä"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Luo SysUI-keon vedos"</string> </resources> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index cd08b255b4e1..7dc669721c8c 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Déverrouiller"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"En attente de l\'empreinte digitale"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Déverrouiller le système sans utiliser votre empreinte digitale"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Numérisation du visage en cours…"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Envoyer"</string> <string name="unlock_label" msgid="8779712358041029439">"déverrouiller"</string> <string name="phone_label" msgid="2320074140205331708">"Ouvrir le téléphone"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Écran partagé dans le haut"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Écran partagé à la gauche"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Écran partagé à la droite"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Chargée"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charge en cours..."</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Chargée dans <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Touchez pour couper le son. Il est possible de couper le son des services d\'accessibilité."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Touchez pour activer les vibrations."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Touchez pour couper le son."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Commandes de volume de %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Les appels et les notifications seront annoncés par une sonnerie (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Sortie multimédia"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Réduire"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuer à afficher les notifications de cette application?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Ces notifications ne peuvent pas être désactivées"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"l\'appareil photo"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"le microphone"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"superpose du contenu par-dessus d\'autres applications à l\'écran"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Cette application <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> et <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Cette application <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> et <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">utilise <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> et <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">utilise <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> et <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Paramètres"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Les paramètres des notifications pour <xliff:g id="APP_NAME">%1$s</xliff:g> sont ouverts"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"La fonction Économie d\'énergie s\'activera automatiquement une fois que la pile sera en dessous de <xliff:g id="PERCENTAGE">%d</xliff:g> %%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Paramètres"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Capturer mémoire SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index a375f4150212..56a41134c602 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Déverrouiller"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Attente de l\'empreinte digitale"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Déverrouiller le système sans utiliser votre empreinte digitale"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Analyse du visage en cours"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Envoyer"</string> <string name="unlock_label" msgid="8779712358041029439">"déverrouiller"</string> <string name="phone_label" msgid="2320074140205331708">"ouvrir le téléphone"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Partager l\'écran en haut"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Partager l\'écran sur la gauche"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Partager l\'écran sur la droite"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Chargé"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"En charge"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Chargé dans <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Appuyez pour ignorer. Vous pouvez ignorer les services d\'accessibilité."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Appuyez pour mettre en mode vibreur."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Appuyez pour ignorer."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Commandes de volume %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Sons activés pour les appels et les notifications (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Sortie multimédia"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Réduire"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuer d\'afficher les notifications de cette application ?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Ces notifications ne peuvent pas être désactivées"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"l\'appareil photo"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"le micro"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"se superpose aux autres applications sur l\'écran"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Cette application <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> et <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Ces applications <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> et <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">utilise <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> et <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">utilisent <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> et <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Paramètres"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Les commandes de notification sont disponibles pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"L\'économiseur de batterie s\'active automatiquement lorsque l\'autonomie de la batterie est inférieure à <xliff:g id="PERCENTAGE">%d</xliff:g> %%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Paramètres"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Copier mémoire SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index d881b774931a..4353eb6ca587 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloquear"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Agardando pola impresión dixital"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Desbloquea sen usar a túa impresión dixital"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Explorando cara"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Enviar"</string> <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string> <string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dividir pantalla na parte superior"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dividir pantalla á esquerda"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dividir pantalla á dereita"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Cargando"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> para completar a carga"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toca para silenciar. Pódense silenciar os servizos de accesibilidade."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toca para establecer a vibración."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toca para silenciar."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Controis de volume de %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"As chamadas e as notificacións soarán (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Saída multimedia"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Queres seguir mostrando as notificacións desta aplicación?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Non se poden desactivar estas notificacións"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"cámara"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"micrófono"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"mostrando outras aplicacións na pantalla"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Esta aplicación está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Esta aplicación está <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">usando <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">usando <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Configuración"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Aceptar"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Abríronse os controis de notificacións da aplicación <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Activarase automaticamente a función Aforro de batería en canto o nivel de carga sexa inferior ao <xliff:g id="PERCENTAGE">%d</xliff:g> %%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Configuración"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"De acordo"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Baleirar mont. SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 8eb21f05bbfa..e0bfffc8646a 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -369,6 +369,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"સ્ક્રીનને ઉપરની તરફ વિભાજિત કરો"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"સ્ક્રીનને ડાબી તરફ વિભાજિત કરો"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"સ્ક્રીનને જમણી તરફ વિભાજિત કરો"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ચાર્જ થઈ ગયું"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ચાર્જ થઈ રહ્યું છે"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"પૂર્ણ થવામાં <xliff:g id="CHARGING_TIME">%s</xliff:g> બાકી"</string> @@ -542,6 +544,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. મ્યૂટ કરવા માટે ટૅપ કરો. ઍક્સેસિબિલિટી સેવાઓ મ્યૂટ કરવામાં આવી શકે છે."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. કંપન પર સેટ કરવા માટે ટૅપ કરો."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. મ્યૂટ કરવા માટે ટૅપ કરો."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s વૉલ્યૂમ નિયંત્રણો"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"કૉલ અને નોટિફિકેશનની રિંગ (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>) પર વાગશે"</string> <string name="output_title" msgid="5355078100792942802">"મીડિયાનું આઉટપુટ"</string> @@ -607,17 +615,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"નાનું કરો"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"આ ઍપમાંથી નોટિફિકેશન બતાવવાનું ચાલુ રાખીએ?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"આ નોટિફિકેશન બંધ કરી શકશો નહીં"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"કૅમેરા"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"માઇક્રોફોન"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"આ તમારી સ્ક્રીન પર અન્ય ઍપની ઉપર દેખાશે"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">આ ઍપની <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> અને <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">આ ઍપની <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> અને <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> અને <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>નો ઉપયોગ કરે છે</item> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> અને <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>નો ઉપયોગ કરે છે</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"સેટિંગ"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ઓકે"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે સૂચના નિયંત્રણો ચાલુ છે"</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index c19c782306b7..9de85a89f998 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -369,6 +369,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ऊपर की ओर दो स्क्रीन बनाएं"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"बाईं ओर दो स्क्रीन बनाएं"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"दाईं ओर दो स्क्रीन बनाएं"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज हो गई है"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"चार्ज हो रही है"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"पूर्ण होने में <xliff:g id="CHARGING_TIME">%s</xliff:g> शेष"</string> @@ -542,6 +544,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. म्यूट करने के लिए टैप करें. सुलभता सेवाएं म्यूट हो सकती हैं."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. कंपन (वाइब्रेशन) पर सेट करने के लिए छूएं."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. म्यूट करने के लिए टैप करें."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s की आवाज़ कम या ज़्यादा करने की सुविधा"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"कॉल और सूचनाएं आने पर घंटी बजेगी (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"मीडिया आउटपुट"</string> @@ -607,17 +615,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"सूचनाएं छोटी करें"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"इस ऐप्लिकेशन से जुड़ी सूचनाएं दिखाना जारी रखें?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ये सूचनाएं दिखाया जाना बंद नहीं किया जा सकता"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"कैमरा"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"माइक्रोफ़ोन"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"आपकी स्क्रीन पर, इस्तेमाल हो रहे दूसरे ऐप्लिकेशन के ऊपर दिखाया जा रहा है"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">यह ऐप्लिकेशन <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> और <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">यह ऐप्लिकेशन <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> और <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one"> <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> और <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> का इस्तेमाल कर रहा है</item> - <item quantity="other"> <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> और <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> का इस्तेमाल कर रहा है</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"सेटिंग"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ठीक है"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सूचना नियंत्रण चालू हैं"</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index fbf9a721cec4..7d6be1e59a25 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -96,8 +96,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Otključavanje"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Čekanje na otisak prsta"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Otključavanje bez otiska prsta"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Skeniranje lica"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Pošalji"</string> <string name="unlock_label" msgid="8779712358041029439">"otključavanje"</string> <string name="phone_label" msgid="2320074140205331708">"otvaranje telefona"</string> @@ -372,6 +371,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Podijeli zaslon na vrhu"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Podijeli zaslon slijeva"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Podijeli zaslon zdesna"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjeno"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Punjenje"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> do napunjenosti"</string> @@ -545,6 +546,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Dodirnite da biste isključili zvuk. Usluge pristupačnosti možda neće imati zvuk."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Dodirnite da biste postavili na vibraciju."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Dodirnite da biste isključili zvuk."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Kontrole glasnoće – %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Telefon će zvoniti za pozive i obavijesti (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Medijski izlaz"</string> @@ -610,19 +617,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimiziraj"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Želite li da se obavijesti te aplikacije nastave prikazivati?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Te se obavijesti ne mogu isključiti"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"fotoaparat"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"prikazuje se preko drugih aplikacija na zaslonu"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="few">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">upotrebljava <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="few">upotrebljava <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">upotrebljava <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Postavke"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"U redu"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Otvorene su kontrole obavijesti za <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -860,6 +868,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Štednja baterije uključit će se automatski kad razina baterije padne ispod <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Postavke"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Shvaćam"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Izdvoji mem. SysUI-a"</string> </resources> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index d027cef347f9..e7e538c4492f 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Feloldás"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Várakozás az ujjlenyomatra"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Feloldás ujjlenyomat nélkül"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Arc keresése"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Küldés"</string> <string name="unlock_label" msgid="8779712358041029439">"feloldás"</string> <string name="phone_label" msgid="2320074140205331708">"telefon megnyitása"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Osztott képernyő felülre"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Osztott képernyő balra"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Osztott képernyő jobbra"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Feltöltve"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Töltés"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> a teljes töltöttségig"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Koppintson a némításhoz. Előfordulhat, hogy a kisegítő lehetőségek szolgáltatásai le vannak némítva."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Koppintson a rezgés beállításához."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Koppintson a némításhoz."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s hangerőszabályzók"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"A hívásoknál és értesítéseknél csörög a telefon (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Médiakimenet"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Kis méret"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Továbbra is megjelenjenek az alkalmazás értesítései?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Ezeket az értesítéseket nem lehet kikapcsolni"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"megjelenítés a képernyőn lévő egyéb alkalmazások előtt"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Az alkalmazás <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> és <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Az alkalmazás <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">a következőt használja: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> és <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">a következőt használja: <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Beállítások"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> értesítésvezérlői megnyitva"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Az akkumulátorkímélő mód automatikusan bekapcsol, ha az akkumulátor töltöttsége <xliff:g id="PERCENTAGE">%d</xliff:g>%% alá esik."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Beállítások"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Értem"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI-memória-kiírás"</string> </resources> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 3e8f216a5886..f72d56ce18e8 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Ապակողպել"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Մատնահետքի սպասում"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Ապակողպել չօգտագործելով մատնահետքը"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Դեմքի սկանավորում"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Ուղարկել"</string> <string name="unlock_label" msgid="8779712358041029439">"ապակողպել"</string> <string name="phone_label" msgid="2320074140205331708">"բացել հեռախոսը"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Տրոհել էկրանը վերևից"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Տրոհել էկրանը ձախից"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Տրոհել էկրանն աջից"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Լիցքավորված է"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Լիցքավորվում է"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Լրիվ լիցքավորմանը մնաց <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s: Հպեք՝ ձայնն անջատելու համար: Մատչելիության ծառայությունների ձայնը կարող է անջատվել:"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s։ Հպեք՝ թրթռոցը միացնելու համար։"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s։ Հպեք՝ ձայնը անջատելու համար։"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Ձայնի ուժգնության կառավարներ` %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Զանգերի և ծանուցումների համար հեռախոսի ձայնը միացված է (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Մեդիա արտածում"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Ծալել"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Ցուցադրե՞լ ծանուցումներ այս հավելվածից։"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Այս ծանուցումները հնարավոր չէ անջատել"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"տեսախցիկ"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"խոսափող"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ցուցադրվում է մյուս հավելվածների վերևում"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Այս հավելվածն <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> և <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>։</item> - <item quantity="other">Այս հավելվածն <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> և <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>։</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">օգտագործում է <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> և <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">օգտագործում է <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> և <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Կարգավորումներ"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Եղավ"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի ծանուցումների կառավարումը բաց է"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Մարտկոցի տնտեսման ռեժիմն ավտոմատ կմիանա, երբ մարտկոցի լիցքը <xliff:g id="PERCENTAGE">%d</xliff:g>%%-ից պակասի:"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Կարգավորումներ"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Եղավ"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index e4989bcf134a..d3863e5f055d 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Buka kunci"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Menunggu sidik jari"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Buka kunci tanpa menggunakan sidik jari"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Memindai wajah"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Kirim"</string> <string name="unlock_label" msgid="8779712358041029439">"buka kunci"</string> <string name="phone_label" msgid="2320074140205331708">"buka ponsel"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Pisahkan layar ke atas"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Pisahkan layar ke kiri"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Pisahkan layar ke kanan"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Terisi"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Mengisi daya"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> sampai penuh"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tap untuk membisukan. Layanan aksesibilitas mungkin dibisukan."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap untuk menyetel agar bergetar."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap untuk menonaktifkan."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s kontrol volume"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Panggilan telepon dan notifikasi akan berdering (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Keluaran media"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Perkecil"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Terus tampilkan notifikasi dari aplikasi ini?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Notifikasi ini tidak dapat dinonaktifkan"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ditampilkan di atas aplikasi lain di layar"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Aplikasi ini <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> dan <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Aplikasi ini <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">menggunakan <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> dan <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">menggunakan <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Setelan"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Ya"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Kontrol notifikasi untuk <xliff:g id="APP_NAME">%1$s</xliff:g> dibuka"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Penghemat Baterai akan aktif otomatis jika baterai kurang dari <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Setelan"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Hapus Heap SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 4416645ba599..e49ce8b3c74d 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Taka úr lás"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Bíður eftir fingrafari"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Taka úr lás án þess að nota fingrafar"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Andlit skannað"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Senda"</string> <string name="unlock_label" msgid="8779712358041029439">"taka úr lás"</string> <string name="phone_label" msgid="2320074140205331708">"opna síma"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Skipta skjá að ofanverðu"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Skipta skjá til vinstri"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Skipta skjá til hægri"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Fullhlaðin"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Í hleðslu"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> þar til fullri hleðslu er náð"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Ýttu til að þagga. Hugsanlega verður slökkt á hljóði aðgengisþjónustu."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Ýttu til að stilla á titring."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Ýttu til að þagga."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s stýringar á hljóstyrk"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Símhringingar og tilkynningar heyrast (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Margmiðlunarúttak"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minnka"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Sýna áfram tilkynningar frá þessu forriti?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Ekki er hægt að slökkva á þessum tilkynningum"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"myndavél"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"hljóðnemi"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"birt yfir öðrum forritum á skjánum"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Þetta forrit er <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> og <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Þetta forrit er <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> og <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">að nota <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> og <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">að nota <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> og <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Stillingar"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Í lagi"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Opnað fyrir tilkynningastýringar <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Sjálfkrafa verður kveikt á rafhlöðusparnaði þegar hleðsla rafhlöðunnar fer niður fyrir <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Stillingar"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Ég skil"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Vista SysUI-gögn"</string> </resources> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index c12d0de47316..c39c20df72f6 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Sblocca"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"In attesa dell\'impronta digitale"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Sblocca senza utilizzare l\'impronta digitale"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Scansione del viso"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Invia"</string> <string name="unlock_label" msgid="8779712358041029439">"sblocca"</string> <string name="phone_label" msgid="2320074140205331708">"apri telefono"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Schermo diviso in alto"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Schermo diviso a sinistra"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Schermo diviso a destra"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carica"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"In carica"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> al termine della carica"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tocca per disattivare l\'audio. L\'audio dei servizi di accessibilità può essere disattivato."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tocca per attivare la vibrazione."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tocca per disattivare l\'audio."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Controlli del volume %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Chiamate e notifiche faranno suonare il dispositivo (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Uscita contenuti multimediali"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Riduci a icona"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuare a ricevere notifiche da questa app?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Queste notifiche non possono essere disattivate"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"la fotocamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"il microfono"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"si sovrappone ad altre app sullo schermo"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Questa app <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Questa app <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">usa la <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e il <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">usa <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Impostazioni"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Ok"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Controlli di gestione delle notifiche per <xliff:g id="APP_NAME">%1$s</xliff:g> aperti"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Il Risparmio energetico verrà attivato automaticamente quando la carica della batteria sarà inferiore a <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Impostazioni"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Esegui dump heap SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 7aa123efb8d3..c2c290ee67cf 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -97,8 +97,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"ביטול נעילה"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"ממתין לטביעת אצבע"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"בטל את הנעילה בלי להשתמש בטביעת האצבע"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"סורק פנים"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"שליחה"</string> <string name="unlock_label" msgid="8779712358041029439">"בטל את הנעילה"</string> <string name="phone_label" msgid="2320074140205331708">"פתח את הטלפון"</string> @@ -375,6 +374,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"פיצול מסך למעלה"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"פיצול מסך לשמאל"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"פיצול מסך לימין"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"טעון"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"טוען"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> עד למילוי"</string> @@ -548,6 +549,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. הקש כדי להשתיק. ייתכן ששירותי הנגישות מושתקים."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. הקש כדי להעביר למצב רטט."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. הקש כדי להשתיק."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"בקרי עוצמת שמע של %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"הטלפון יצלצל כשמתקבלות שיחות והודעות (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"פלט מדיה"</string> @@ -613,21 +620,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"מזעור"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"שנמשיך להציג לך הודעות מהאפליקציה הזאת?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"לא ניתן לכבות את ההודעות האלה"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"מצלמה"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"מיקרופון"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"תצוגה מעל אפליקציות אחרות במסך"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="two">אפליקציה זו <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> וגם <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="many">אפליקציה זו <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> וגם <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">אפליקציה זו <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> וגם <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">אפליקציה זו <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="two">משתמשת ב<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> וב<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="many">משתמשת ב<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> וב<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">משתמשת ב<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> וב<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">משתמשת ב<xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"הגדרות"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"אישור"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"פקדי ההודעות של <xliff:g id="APP_NAME">%1$s</xliff:g> נפתחו"</string> @@ -867,6 +873,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"מצב חיסכון בסוללה יופעל באופן אוטומטי כשרמת טעינת הסוללה תהיה נמוכה מ-<xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"הגדרות"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"הבנתי"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"ערימת Dump SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 5009765ba97c..d45bcfcacfbe 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"ロック解除"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"指紋を待っています"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"指紋認証を使用せずにロック解除"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"顔のスキャン"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"送信"</string> <string name="unlock_label" msgid="8779712358041029439">"ロック解除"</string> <string name="phone_label" msgid="2320074140205331708">"電話を起動"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"画面を上に分割"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"画面を左に分割"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"画面を右に分割"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"充電が完了しました"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"充電しています"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"充電完了まで<xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s。タップしてミュートします。ユーザー補助機能サービスがミュートされる場合があります。"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s。タップしてバイブレーションに設定します。"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s。タップしてミュートします。"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s の音量調節"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"着信音と通知音が鳴ります(<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"メディア出力"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"このアプリからの通知を今後も表示しますか?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"この通知を OFF にすることはできません"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"カメラ"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"マイク"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"画面の他のアプリの上に重ねて表示"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">このアプリのアクティビティ: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>、<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>。</item> - <item quantity="one">このアプリのアクティビティ: <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>。</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>、<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>の使用</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>の使用</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"設定"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> の通知管理は開いています"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"電池が <xliff:g id="PERCENTAGE">%d</xliff:g>%% を下回ると、バッテリー セーバーが自動的に ON になります。"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"設定"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI ヒープのダンプ"</string> </resources> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 77bc203813a4..d3d785cacb80 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"განბლოკვა"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"თითის ანაბეჭდის მოლოდინში"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"თქვენი თითის ანაბეჭდის გარეშე განბლოკვა"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"მიმდინარეობს სახის სკანირება"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"გაგზავნა"</string> <string name="unlock_label" msgid="8779712358041029439">"განბლოკვა"</string> <string name="phone_label" msgid="2320074140205331708">"ტელეფონის გახსნა"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ეკრანის გაყოფა ზემოთ"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ეკრანის გაყოფა მარცხნივ"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ეკრანის გაყოფა მარჯვნივ"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"დატენილია"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"მიმდინარეობს დატენვა"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> სრულად დატენვამდე"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. შეეხეთ დასადუმებლად. შეიძლება დადუმდეს მარტივი წვდომის სერვისებიც."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. შეეხეთ ვიბრაციაზე დასაყენებლად."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. შეეხეთ დასადუმებლად."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s-ის ხმის მართვის საშუალებები"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"ზარებისა და შეტყობინებების მიღებისას დაირეკება (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"მედია გამომავალი"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"ჩაკეცვა"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"გაგრძელდეს შეტყობინებათა ჩვენება ამ აპიდან?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ამ შეტყობინებათა გამორთვა ვერ მოხერხდება"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"კამერა"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"მიკროფონი"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"სხვა აპების გადაფარვით ჩანს თქვენს ეკრანზე"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">ეს აპი ასრულებს <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>-ს და <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>-ს.</item> - <item quantity="one">ეს აპი ასრულებს <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>-ს.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>-ისა და <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>-ის გამოყენებით</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>-ის გამოყენებით</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"პარამეტრები"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"კარგი"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"შეტყობინებების მართვა „<xliff:g id="APP_NAME">%1$s</xliff:g>“-ისთვის გახსნილია"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"ბატარეის დამზოგი ავტომატურად ჩაირთვება, როცა ბატარეა ჩამოსცდება <xliff:g id="PERCENTAGE">%d</xliff:g>%%-ს."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"პარამეტრები"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"გასაგებია"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI გროვის გამოტანა"</string> </resources> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 2acc8e1b810f..9a8c5b8e5758 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Бекітпесін ашу"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Саусақ ізі күтілуде"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Саусақ ізін пайдаланбай құлыпты ашу"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Бетті сканерлеу"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Жіберу"</string> <string name="unlock_label" msgid="8779712358041029439">"бекітпесін ашу"</string> <string name="phone_label" msgid="2320074140205331708">"телефонды ашу"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Экранды жоғарыға қарай бөлу"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Экранды солға қарай бөлу"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Экранды оңға қарай бөлу"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Зарядталды"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарядталуда"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Толғанға дейін <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Дыбысын өшіру үшін түртіңіз. Арнайы мүмкіндік қызметтерінің дыбысы өшуі мүмкін."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Діріл режимін орнату үшін түртіңіз."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Дыбысын өшіру үшін түртіңіз."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Дыбысты басқару элементтері: %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Қоңыраулар мен хабарландырулар дыбысы қосулы (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Meдиа шығысы"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Жасыру"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Осы қолданбаның хабарландырулары көрсетілсін бе?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Хабарландыруларды өшіру мүмкін емес"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"камера"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"микрофон"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"экранда басқа қолданбалардың үстінен көрсету"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Бұл қолданба <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> және <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Бұл қолданба <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> және <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> пайдалануда</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> пайдалануда</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Параметрлер"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Жарайды"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> хабарландыруларын басқару элементтері ашылды"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Батарея заряды <xliff:g id="PERCENTAGE">%d</xliff:g>%% деңгейінен төмендегенде, Battery Saver автоматты түрде қосылады."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Параметрлер"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Түсінікті"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 636c61f1f249..1cdd007b3f9f 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"ដោះសោ"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"កំពុងរង់ចាំស្នាមម្រាមដៃ"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"ដោះសោដោយមិនបាច់ប្រើស្នាមម្រាមដៃរបស់អ្នក"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"ការស្កេនមុខ"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"ផ្ញើ"</string> <string name="unlock_label" msgid="8779712358041029439">"ដោះសោ"</string> <string name="phone_label" msgid="2320074140205331708">"បើកទូរស័ព្ទ"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"បំបែកអេក្រង់ទៅខាងលើ"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"បំបែកអេក្រង់ទៅខាងឆ្វេង"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"បំបែកអេក្រង់ទៅខាងស្តាំ"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"បានបញ្ចូលថ្ម"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"កំពុងសាកថ្ម"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> រហូតដល់ពេញ"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s។ ប៉ះដើម្បីបិទសំឡេង។ សេវាកម្មលទ្ធភាពប្រើប្រាស់អាចនឹងត្រូវបានបិទសំឡេង។"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s ។ ចុចដើម្បីកំណត់ឲ្យញ័រ។"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s ។ ចុចដើម្បីបិទសំឡេង។"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s របារបញ្ជាកម្រិតសំឡេង"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"ការហៅទូរសព្ទ និងការជូនដំណឹងនឹងរោទ៍ (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"លទ្ធផលមេឌៀ"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"បង្រួម"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"បន្តបង្ហាញការជូនដំណឹងពីកម្មវិធីនេះ?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"មិនអាចបិទការជូនដំណឹងទាំងនេះបានទេ"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"កាមេរ៉ា"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"មីក្រូហ្វូន"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"កំពុងបង្ហាញពីលើកម្មវិធីផ្សេងទៀតនៅលើអេក្រង់របស់អ្នក"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">កម្មវិធីនេះកំពុង <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> និង <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ។</item> - <item quantity="one">កម្មវិធីនេះកំពុង <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ។</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">កំពុងប្រើ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> និង <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">កំពុងប្រើ <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"ការកំណត់"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"យល់ព្រម"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"ការគ្រប់គ្រងការជូនដំណឹងសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> បានបើក"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"កម្មវិធីសន្សំថ្មនឹងបើកដោយស្វ័យប្រវត្តិ នៅពេលថ្មនៅសល់តិចជាង <xliff:g id="PERCENTAGE">%d</xliff:g>%% ។"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"ការកំណត់"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"យល់ហើយ"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"ចម្លង SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index b844e5374eac..f4c74f4e11c9 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"ಅನ್ಲಾಕ್"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"ನಿಮ್ಮ ಬೆರಳಚ್ಚು ಬಳಸದೆಯೇ ಅನ್ಲಾಕ್ ಮಾಡಿ"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"ಮುಖವನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"ಕಳುಹಿಸಿ"</string> <string name="unlock_label" msgid="8779712358041029439">"ಅನ್ಲಾಕ್ ಮಾಡು"</string> <string name="phone_label" msgid="2320074140205331708">"ಫೋನ್ ತೆರೆಯಿರಿ"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ಮೇಲ್ಭಾಗಕ್ಕೆ ಪರದೆಯನ್ನು ವಿಭಜಿಸಿ"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ಎಡಕ್ಕೆ ಪರದೆಯನ್ನು ವಿಭಜಿಸಿ"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ಬಲಕ್ಕೆ ಪರದೆಯನ್ನು ವಿಭಜಿಸಿ"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ಚಾರ್ಜ್ ಆಗಿದೆ"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ಪೂರ್ಣಗೊಳ್ಳುವವರೆಗೆ"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. ಮ್ಯೂಟ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ. ಪ್ರವೇಶಿಸುವಿಕೆ ಸೇವೆಗಳನ್ನು ಮ್ಯೂಟ್ ಮಾಡಬಹುದು."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. ವೈಬ್ರೇಟ್ ಮಾಡಲು ಹೊಂದಿಸುವುದಕ್ಕಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. ಮ್ಯೂಟ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s ವಾಲ್ಯೂಮ್ ನಿಯಂತ್ರಕಗಳು"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"(<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>) ನಲ್ಲಿ ಕರೆಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳು ರಿಂಗ್ ಆಗುತ್ತವೆ"</string> <string name="output_title" msgid="5355078100792942802">"ಮೀಡಿಯಾ ಔಟ್ಪುಟ್"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"ಕಿರಿದುಗೊಳಿಸಿ"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ಈ ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸುತ್ತಲೇ ಇರಬೇಕೆ?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"ಕ್ಯಾಮರಾ"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"ಮೈಕ್ರೋಫೋನ್"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ಇತರ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಮೂಲಕ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತಿದೆ"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">ಈ ಅಪ್ಲಿಕೇಶನ್ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ಮತ್ತು <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ಆಗಿದೆ.</item> - <item quantity="other">ಈ ಅಪ್ಲಿಕೇಶನ್ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ಮತ್ತು <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ಆಗಿದೆ.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ಮತ್ತು <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ಅನ್ನು ಬಳಸಿಕೊಂಡು</item> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ಮತ್ತು <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ಅನ್ನು ಬಳಸಿಕೊಂಡು</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ಸರಿ"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನ ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳನ್ನು ತೆರೆಯಲಾಗಿದೆ"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"ಬ್ಯಾಟರಿ <xliff:g id="PERCENTAGE">%d</xliff:g>%% ಗಿಂತ ಕಡಿಮೆ ಆದಾಗ ಬ್ಯಾಟರಿ ಸೇವರ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆನ್ ಆಗುತ್ತದೆ."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"ಅರ್ಥವಾಯಿತು"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI ಹೀಪ್ ಡಂಪ್ ಮಾಡಿ"</string> </resources> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index f532ca0d483e..6a8e8afbae53 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"잠금 해제"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"지문 대기 중"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"지문 파일을 사용하지 않고 잠금 해제"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"얼굴 스캔 중"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"보내기"</string> <string name="unlock_label" msgid="8779712358041029439">"잠금 해제"</string> <string name="phone_label" msgid="2320074140205331708">"휴대전화 열기"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"위쪽으로 화면 분할"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"왼쪽으로 화면 분할"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"오른쪽으로 화면 분할"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"충전됨"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"충전 중"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"완충까지 <xliff:g id="CHARGING_TIME">%s</xliff:g> 남음"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. 탭하여 음소거로 설정하세요. 접근성 서비스가 음소거될 수 있습니다."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. 탭하여 진동으로 설정하세요."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. 탭하여 음소거로 설정하세요."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s 볼륨 컨트롤"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"전화 및 알림이 오면 벨소리가 울림(<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"미디어 출력"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"최소화"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"이 앱의 알림을 계속 표시하시겠습니까?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"이 알림은 끌 수 없습니다"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"카메라"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"마이크"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"화면에서 다른 앱 위에 표시"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">이 앱에서 <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> 및 <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> 중입니다.</item> - <item quantity="one">이 앱에서 <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> 중입니다.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> 및 <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> 사용 중</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> 사용 중</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"설정"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"확인"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> 알림 컨트롤을 열었습니다."</string> @@ -859,6 +869,5 @@ <skip /> <string name="open_saver_setting_action" msgid="8314624730997322529">"설정"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"확인"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 0851dfeb7bd2..5a31a4d4a129 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Кулпусун ачуу"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Манжаңызды сенсорго коюңуз"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Манжа изиңизди колдонбостон эле кулпуну ачыңыз"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Жүз скандалууда"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Жөнөтүү"</string> <string name="unlock_label" msgid="8779712358041029439">"кулпуну ачуу"</string> <string name="phone_label" msgid="2320074140205331708">"телефонду ачуу"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Экранды өйдө жакка бөлүү"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Экранды сол жакка бөлүү"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Экранды оң жакка бөлүү"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Кубатталды"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Кубатталууда"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> толгонго чейин"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Үнүн өчүрүү үчүн таптап коюңуз. Атайын мүмкүнчүлүктөр кызматынын үнүн өчүрүп койсо болот."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Дирилдөөгө коюу үчүн басыңыз."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Үнүн өчүрүү үчүн басыңыз."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s үндү башкаруу элементтери"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Чалуулар менен эскертмелердин үнү чыгарылат (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Медиа түзмөк"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Кичирейтүү"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Бул колдонмонун эскертмелери көрсөтүлө берсинби?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Бул эскертмелерди өчүрүүгө болбойт"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"камера"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"микрофон"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"экрандагы башка терезелердин үстүнөн көрсөтүлүүдө"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Бул колдонмодо <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> жана <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Бул колдонмодо <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> жана <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> колдонулууда</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> колдонулууда</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Жөндөөлөр"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ЖАРАЙТ"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн эскертмени көзөмөлдөө функциялары ачылды"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Батареянын деңгээли <xliff:g id="PERCENTAGE">%d</xliff:g>%% төмөндөгөндө, Батареяны үнөмдөгүч режими автоматтык түрдө күйөт."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Жөндөөлөр"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Түшүндүм"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 658ce779cad5..81f8ec6a375c 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -368,6 +368,8 @@ <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> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ສາກເຕັມແລ້ວ."</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ກຳລັງສາກໄຟ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ຈຶ່ງຈະເຕັມ"</string> @@ -541,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. ແຕະເພື່ອປິດສຽງ. ບໍລິການຊ່ວຍເຂົ້າເຖິງອາດຖືກປິດສຽງໄວ້."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. ແຕະເພື່ອຕັ້ງເປັນສັ່ນເຕືອນ."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. ແຕະເພື່ອປິດສຽງ."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"ການຄວບຄຸມສຽງ %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"ການໂທ ແລະ ການແຈ້ງເຕືອນຈະມີສຽງດັງ (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"ມີເດຍເອົ້າພຸດ"</string> @@ -606,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"ຫຍໍ້"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ສະແດງການແຈ້ງເຕືອນຈາກແອັບນີ້ຕໍ່ໄປບໍ?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ບໍ່ສາມາດປິດການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄດ້"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"ກ້ອງຖ່າຍຮູບ"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"ໄມໂຄຣໂຟນ"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ສະແດງຜົນບັງແອັບອື່ນຢູ່ໜ້າຈໍຂອງທ່ານ"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">ແອັບນີ້ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ແລະ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">ແອັບນີ້ <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">ກຳລັງໃຊ້ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ແລະ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">ກຳລັງໃຊ້ <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"ການຕັ້ງຄ່າ"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ຕົກລົງ"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"ເປີດຕົວຄວບຄຸມການແຈ້ງເຕືອນສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ແລ້ວ"</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index fce32606791b..68e94c7fa81f 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -97,8 +97,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Atrakinti"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Laukiama kontrolinio kodo"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Atrakinti nenaudojant kontrolinio kodo"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Nuskaitomas veidas"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Siųsti"</string> <string name="unlock_label" msgid="8779712358041029439">"atrakinti"</string> <string name="phone_label" msgid="2320074140205331708">"atidaryti telefoną"</string> @@ -375,6 +374,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Skaidyti ekraną į viršų"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Skaidyti ekraną į kairę"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Skaidyti ekraną į dešinę"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Įkrautas"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Kraunamas"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> iki visiško įkrovimo"</string> @@ -548,6 +549,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Palieskite, kad nutildytumėte. Gali būti nutildytos pritaikymo neįgaliesiems paslaugos."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Palieskite, kad nustatytumėte vibravimą."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Palieskite, kad nutildytumėte."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Garsumo valdikliai: %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Skambučiai ir pranešimai skambės (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Medijos išvestis"</string> @@ -613,21 +620,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Sumažinti"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Toliau rodyti iš šios programos gautus pranešimus?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Šių pranešimų negalima išjungti"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"fotoaparatą"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofoną"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"rodo virš kitų programų jūsų ekrane"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Ši programa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ir <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="few">Ši programa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ir <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="many">Ši programa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ir <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Ši programa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ir <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">naudoja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ir <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="few">naudoja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ir <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="many">naudoja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ir <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">naudoja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ir <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Nustatymai"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Gerai"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ pranešimų valdikliai atidaryti"</string> @@ -867,6 +873,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Akumuliatoriaus tausojimo priemonė bus įjungta automatiškai akumuliatoriaus įkrovai pasiekus mažiau nei <xliff:g id="PERCENTAGE">%d</xliff:g> proc."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Nustatymai"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Supratau"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Pat. „SysUI“ krūvą"</string> </resources> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index b65ca6377a1c..245cafffa41b 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -96,8 +96,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Atbloķēt"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Tiek gaidīts pirksta nospiedums."</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Atbloķēt, neizmantojot pirksta nospiedumu"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Sejas skenēšana"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Sūtīt"</string> <string name="unlock_label" msgid="8779712358041029439">"atbloķēt"</string> <string name="phone_label" msgid="2320074140205331708">"atvērt tālruni"</string> @@ -372,6 +371,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Sadalīt ekrānu augšdaļā"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Sadalīt ekrānu kreisajā pusē"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Sadalīt ekrānu labajā pusē"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Akumulators uzlādēts"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Notiek uzlāde"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> līdz pilnam akumulatoram"</string> @@ -545,6 +546,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Pieskarieties, lai izslēgtu skaņu. Var tikt izslēgti pieejamības pakalpojumu signāli."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Pieskarieties, lai iestatītu vibrozvanu."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Pieskarieties, lai izslēgtu skaņu."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s skaļuma vadīklas"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Zvani un paziņojumi aktivizēs zvana signālu (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Multivides izvade"</string> @@ -610,19 +617,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizēt"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Vai turpināt rādīt paziņojumus no šīs lietotnes?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Šos paziņojumus nevar izslēgt."</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofons"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"rāda pāri citām lietotnēm jūsu ekrānā"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="zero">Šajā lietotnē tiek <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> un <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Šajā lietotnē tiek <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> un <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Šajā lietotnē tiek <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> un <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="zero">izmantota <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> un <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">izmantota <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> un <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">izmantota <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> un <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Iestatījumi"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Labi"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> paziņojumu vadīklas ir atvērtas"</string> @@ -864,6 +872,5 @@ <skip /> <string name="open_saver_setting_action" msgid="8314624730997322529">"Iestatījumi"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Labi"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 5e1567907cd8..f3f2aa9ca377 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Отклучување"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Се чека отпечаток"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Отклучете без да го користите вашиот отпечаток"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Скенирање лице"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Испрати"</string> <string name="unlock_label" msgid="8779712358041029439">"отклучи"</string> <string name="phone_label" msgid="2320074140205331708">"отвори телефон"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Поделен екран во горниот дел"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Поделен екран на левата страна"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Поделен екран на десната страна"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Наполнета"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Се полни"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> додека не се наполни"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Допрете за да исклучите звук. Можеби ќе се исклучи звукот на услугите за достапност."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Допрете за да се постави на вибрации."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Допрете за да се исклучи звукот."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Контроли на јачината на звукот за %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Повиците и известувањата ќе ѕвонат (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Излез за аудиовизуелни содржини"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Минимизирај"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Дали да продолжат да се прикажуваат известувања од апликацијава?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Известувањава не може да се исклучат"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"камера"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"микрофон"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"се прикажува преку други апликации на вашиот екран"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Апликацииве <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Апликацииве <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">користат <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">користат <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Поставки"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Во ред"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Контролите за известувањата за <xliff:g id="APP_NAME">%1$s</xliff:g> се отворија"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Штедачот на батерија ќе се вклучи автоматски кога батеријата ќе падне под <xliff:g id="PERCENTAGE">%d</xliff:g> %%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Поставки"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Сфатив"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Извади SysUI-слика"</string> </resources> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 9891a6f27de4..3d37c7683df7 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"അണ്ലോക്ക് ചെയ്യുക"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"ഫിംഗർപ്രിന്റിനായി കാക്കുന്നു"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"നിങ്ങളുടെ ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കാതെ അൺലോക്കുചെയ്യുക"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"മുഖം സ്കാൻ ചെയ്യുന്നു"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"അയയ്ക്കുക"</string> <string name="unlock_label" msgid="8779712358041029439">"അൺലോക്കുചെയ്യുക"</string> <string name="phone_label" msgid="2320074140205331708">"ഫോൺ തുറക്കുക"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"സ്ക്രീൻ മുകളിലേക്ക് സ്പ്ലിറ്റ് ചെയ്യുക"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"സ്ക്രീൻ ഇടതുവശത്തേക്ക് സ്പ്ലിറ്റ് ചെയ്യുക"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"സ്ക്രീൻ വലതുവശത്തേക്ക് പിളർത്തുക"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ചാർജായി"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ചാർജ്ജുചെയ്യുന്നു"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"ഫുൾ ചാർജാകാൻ, <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. മ്യൂട്ടുചെയ്യുന്നതിന് ടാപ്പുചെയ്യുക. ഉപയോഗസഹായി സേവനങ്ങൾ മ്യൂട്ടുചെയ്യപ്പെട്ടേക്കാം."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s വൈബ്രേറ്റിലേക്ക് സജ്ജമാക്കുന്നതിന് ടാപ്പുചെയ്യുക."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s മ്യൂട്ടുചെയ്യുന്നതിന് ടാപ്പുചെയ്യുക."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s ശബ്ദ നിയന്ത്രണങ്ങൾ"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"കോളുകളും അറിയിപ്പുകളും ലഭിക്കുമ്പോൾ റിംഗ് ചെയ്യും (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"മീഡിയ ഔട്ട്പുട്ട്"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"ചെറുതാക്കുക"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ഈ ആപ്പിൽ നിന്നുള്ള അറിയിപ്പുകൾ തുടർന്നും കാണിക്കണോ?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ഈ അറിയിപ്പുകൾ ഓഫാക്കാനാവില്ല"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"ക്യാമറ"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"മൈക്രോഫോൺ"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"നിങ്ങളുടെ സ്ക്രീനിലെ മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ പ്രദർശിപ്പിക്കുന്നു"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">ഈ ആപ്പ് <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>, <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> എന്നിവയാണ്.</item> - <item quantity="one">ഈ ആപ്പ് <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ആണ്.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>, <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> എന്നിവ ഉപയോഗിക്കുന്നു</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ഉപയോഗിക്കുന്നു</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"ക്രമീകരണം"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ശരി"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിന്റെ അറിയിപ്പ് നിയന്ത്രണങ്ങൾ തുറന്നു"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"ബാറ്ററി <xliff:g id="PERCENTAGE">%d</xliff:g>%%-ൽ താഴെയാകുമ്പോൾ, ബാറ്ററി ലാഭിക്കൽ സ്വമേധയാ ഓണാകും."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"ക്രമീകരണം"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"മനസ്സിലായി"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI ഹീപ്പ് ഡമ്പ് ചെയ്യുക"</string> </resources> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 6dcfa0ef3de2..dc48a22c416b 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -93,8 +93,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Тайлах"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Хурууны хээг хүлээж байна"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Хурууны хээ ашиглалгүйгээр түгжээг тайлаарай"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Скан хийх нүүр царай"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Илгээх"</string> <string name="unlock_label" msgid="8779712358041029439">"тайлах"</string> <string name="phone_label" msgid="2320074140205331708">"утас нээх"</string> @@ -367,6 +366,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Дэлгэцийг дээд хэсэгт хуваах"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Дэлгэцийг зүүн хэсэгт хуваах"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Дэлгэцийг баруун хэсэгт хуваах"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Цэнэглэгдсэн"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Цэнэглэж байна"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"дүүргэхэд <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -540,6 +541,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Дууг нь хаахын тулд товшино уу. Хүртээмжийн үйлчилгээний дууг хаасан."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Чичиргээнд тохируулахын тулд товшино уу."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Дууг хаахын тулд товшино уу."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s түвшний хяналт"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Дуудлага болон мэдэгдлийн хонх дуугарна (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Медиа гаралт"</string> @@ -605,17 +612,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Багасгах"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Энэ аппаас мэдэгдэл харуулсан хэвээр байх уу?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Эдгээр мэдэгдлийг унтраах боломжгүй"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"камер"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"микрофон"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"таны дэлгэцэд бусад аппын дээр харуулж байна"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Энэ апп <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> бөгөөд <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Энэ апп <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> болон <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>-г ашиглаж байна</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>-г ашиглаж байна</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Тохиргоо"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ОК"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н мэдэгдлийн хяналтыг нээсэн"</string> @@ -851,6 +861,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Батерей <xliff:g id="PERCENTAGE">%d</xliff:g>%%-с бага болсон үед Тэжээл хэмнэгч онцлог автоматаар асна."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Тохиргоо"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Ойлголоо"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index 5bcab0489b9c..87432d0c64a9 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"अनलॉक करा"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"फिंगरप्रिंटची प्रतीक्षा करत आहे"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"तुमचे फिंगरप्रिंट न वापरता अनलॉक करा"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"चेहरा स्कॅन करत आहे"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"पाठवा"</string> <string name="unlock_label" msgid="8779712358041029439">"अनलॉक करा"</string> <string name="phone_label" msgid="2320074140205331708">"फोन उघडा"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"स्क्रीन शीर्षस्थानी विभाजित करा"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"स्क्रीन डावीकडे विभाजित करा"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"स्क्रीन उजवीकडे विभाजित करा"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज झाली"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"चार्ज होत आहे"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> पूर्ण होईपर्यंत"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. नि:शब्द करण्यासाठी टॅप करा. प्रवेशक्षमता सेवा नि:शब्द केल्या जाऊ शकतात."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. व्हायब्रेट सेट करण्यासाठी टॅप करा."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. नि:शब्द करण्यासाठी टॅप करा."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s व्हॉल्यूम नियंत्रण"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"कॉल आणि सूचना वाजतील (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"मीडिया आउटपुट"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"लहान करा"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"या अॅपकडील सूचना दाखवणे सुरू ठेवायचे?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"या सूचना बंद करता येत नाहीत"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"कॅमेरा"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"मायक्रोफोन"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"तुमच्या स्क्रीनवर इतर अॅप्सवर डिस्प्ले करत आहे"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">हे अॅप <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> आणि <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> करत/होत आहे.</item> - <item quantity="other">हे अॅप <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> आणि <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> करत/होत आहे.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one"> <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> आणि <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> वापरत आहे</item> - <item quantity="other"> <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> आणि <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> वापरत आहे</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"सेटिंग्ज"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ओके"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सूचना नियंत्रणे खुली आहेत"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"बॅटरी <xliff:g id="PERCENTAGE">%d</xliff:g>%% पेक्षा खाली गेल्यास बॅटरी सेव्हर आपोआप सुरू होईल."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"सेटिंग्ज"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"समजले"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI हीप डंप करा"</string> </resources> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index b18c0b438178..2343c584c88c 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Buka kunci"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Menunggu cap jari"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Buka kunci tanpa menggunakan cap jari"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Mengimbas wajah"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Hantar"</string> <string name="unlock_label" msgid="8779712358041029439">"buka kunci"</string> <string name="phone_label" msgid="2320074140205331708">"buka telefon"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Pisahkan skrin ke atas"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Pisahkan skrin ke kiri"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Pisahkan skrin ke kanan"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Sudah dicas"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Mengecas"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Lagi <xliff:g id="CHARGING_TIME">%s</xliff:g> untuk penuh"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Ketik untuk meredam. Perkhidmatan kebolehaksesan mungkin diredamkan."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Ketik untuk menetapkan pada getar."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Ketik untuk meredam."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s kawalan kelantangan"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Panggilan dan pemberitahuan akan berdering (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Output media"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimumkan"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Terus tunjukkan pemberitahuan daripada apl ini?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Pemberitahuan ini tidak boleh dimatikan"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"dipaparkan di atas apl lain pada skrin anda"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Apl ini sedang <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> dan <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Apl ini sedang <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">menggunakan <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> dan <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">menggunakan <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Tetapan"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Kawalan pemberitahuan untuk <xliff:g id="APP_NAME">%1$s</xliff:g> dibuka"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Penjimat Bateri akan dihidupkan secara automatik setelah kuasa bateri kurang daripada <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Tetapan"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Longgok Tmbunn SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 81c5fbbaffaf..6484555a1b69 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -168,7 +168,7 @@ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ဘလူးတုသ်သုံး၍ ချိတ်ဆက်ခြင်း"</string> <string name="accessibility_airplane_mode" msgid="834748999790763092">"လေယာဥ်ပျံပေါ်အသုံးပြုသောစနစ်။"</string> <string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ကို ဖွင့်ထားသည်။"</string> - <string name="accessibility_no_sims" msgid="3957997018324995781">"SIM ကဒ် မရှိပါ"</string> + <string name="accessibility_no_sims" msgid="3957997018324995781">"SIM ကတ် မရှိပါ"</string> <string name="carrier_network_change_mode" msgid="8149202439957837762">"ဝန်ဆောင်မှုပေးသူ ကွန်ရက် ပြောင်းလဲနေသည်။"</string> <string name="accessibility_battery_details" msgid="7645516654955025422">"ဘက်ထရီ အသေးစိတ် အချက်အလက်များကို ဖွင့်ပါ"</string> <string name="accessibility_battery_level" msgid="7451474187113371965">"ဘတ္တရီ <xliff:g id="NUMBER">%d</xliff:g> ရာခိုင်နှုန်း။"</string> @@ -368,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"မျက်နှာပြင်ကို အပေါ်သို့ ခွဲရန်"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"မျက်နှာပြင်ကို ဘယ်ဘက်သို့ ခွဲရန်"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"မျက်နှာပြင်ကို ညာဘက်သို့ ခွဲရန်"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"အားသွင်းပြီး"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"အားသွင်းနေ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ပြည်သည့် အထိ"</string> @@ -541,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s။ အသံပိတ်ရန် တို့ပါ။ အများသုံးစွဲနိုင်မှု ဝန်ဆောင်မှုများကို အသံပိတ်ထားနိုင်ပါသည်။"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s။ တုန်ခါခြင်းသို့ သတ်မှတ်ရန်တို့ပါ။"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s။ အသံတိတ်ရန် တို့ပါ။"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s အသံအတိုးအလျှော့ ခလုတ်များ"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"ခေါ်ဆိုမှုများနှင့် အကြောင်းကြားချက်များအတွက် အသံမြည်နှုန်း (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>) ဖြစ်သည်"</string> <string name="output_title" msgid="5355078100792942802">"မီဒီယာ အထွက်"</string> @@ -606,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"ချုံ့ရန်"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ဤအက်ပ်ထံမှ အကြောင်းကြားချက်များကို ဆက်ပြလိုပါသလား။"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ဤအကြောင်းကြားချက်များကို ပိတ်၍မရပါ"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"ကင်မရာ"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"မိုက်ခရိုဖုန်း"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"သင့်မျက်နှာပြင်ပေါ်ရှိ အခြားအက်ပ်များပေါ်တွင် ပြသခြင်း"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">ဤအက်ပ်သည် <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> နှင့် <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>။</item> - <item quantity="one">ဤအက်ပ်သည် <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>။</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> နှင့် <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ကို အသုံးပြုနေပါသည်</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ကို အသုံးပြုနေပါသည်</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"ဆက်တင်များ"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် အကြောင်းကြားချက်ထိန်းချုပ်မှုများကို ဖွင့်ထားသည်"</string> @@ -852,5 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"ဘက်ထရီ <xliff:g id="PERCENTAGE">%d</xliff:g>%% အောက် ရောက်သွားသည်နှင့် \'ဘက်ထရီ အားထိန်း\' အလိုအလျောက် ဖွင့်ပါမည်။"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"ဆက်တင်များ"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"ရပါပြီ"</string> - <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI အပုံ ပစ်ခြင်း"</string> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index b2d511adde0d..0bb5d84ff5cb 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Lås opp"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Venger på fingeravtrykk"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Lås opp uten å bruke fingeravtrykk"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Skanning av ansikt"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Send"</string> <string name="unlock_label" msgid="8779712358041029439">"lås opp"</string> <string name="phone_label" msgid="2320074140205331708">"åpne telefonen"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Delt skjerm øverst"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Delt skjerm til venstre"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Delt skjerm til høyre"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Oppladet"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Lader"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Fulladet om <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Trykk for å slå av lyden. Lyden kan bli slått av for tilgjengelighetstjenestene."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Trykk for å angi vibrasjon."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Trykk for å slå av lyden."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s volumkontroller"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Anrop og varsler ringer (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Medieutdata"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimer"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Vil du fortsette å vise varsler fra denne appen?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Du kan ikke slå av disse varslene"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"vises over andre apper på skjermen"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Denne appen <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> og <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Denne appen <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">bruker <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> og <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">bruker <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Innstillinger"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Varselinnstillingene for <xliff:g id="APP_NAME">%1$s</xliff:g> er åpnet"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Batterisparing slås på automatisk når batteriet er lavere enn <xliff:g id="PERCENTAGE">%d</xliff:g> %%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Innstillinger"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Greit"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI-heap"</string> </resources> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 9994bfea4cd2..90c4113a433b 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"खोल्नुहोस्"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"फिंगरप्रिन्ट कुर्दै"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"तपाईँको फिंगरप्रिन्ट बिना नै अनलक गर्नुहोस्"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"अनुहार स्क्यान गर्दै"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"पठाउनुहोस्"</string> <string name="unlock_label" msgid="8779712358041029439">"खोल्नुहोस्"</string> <string name="phone_label" msgid="2320074140205331708">"फोन खोल्नुहोस्"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"विभाजित-स्क्रिनलाई शीर्ष स्थानमा राख्नुहोस्"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"विभाजित-स्क्रिनलाई बायाँतर्फ राख्नुहोस्"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"विभाजित-स्क्रिनलाई दायाँतर्फ राख्नुहोस्"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज भयो"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"चार्ज हुँदै"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> पूर्ण नभएसम्म"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s। म्यूट गर्नाका लागि ट्याप गर्नुहोस्। पहुँच सम्बन्धी सेवाहरू म्यूट हुन सक्छन्।"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s। कम्पन मोडमा सेट गर्न ट्याप गर्नुहोस्।"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s। म्यूट गर्न ट्याप गर्नुहोस्।"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s भोल्युमका नियन्त्रणहरू"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"कल तथा सूचनाहरू आउँदा घन्टी बज्ने छ (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"मिडियाको आउटपुट"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"सानो बनाउनुहोस्"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"यो अनुप्रयोगका सूचनाहरू देखाउने क्रम जारी राख्ने हो?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"यी सूचनाहरूलाई निष्क्रिय पार्न सकिँदैन"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"क्यामेरा"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"माइक्रोफोन"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"तपाईंको स्क्रिनका अन्य अनुप्रयोगहरूमा प्रदर्शन गरिँदै छ"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">यो अनुप्रयोगले निम्न कार्यहरू गर्दै छ: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> र <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>।</item> - <item quantity="one">यो अनुप्रयोगले निम्न कार्य गर्दै छ: <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>।</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> र <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> प्रयोग गर्दै छ</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> प्रयोग गर्दै छ</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"सेटिङहरू"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ठिक छ"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> का सूचना सम्बन्धी नियन्त्रणहरूलाई खोलियो"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"ब्याट्री <xliff:g id="PERCENTAGE">%d</xliff:g>%% भन्दा कम भएको बेला ब्याट्री सेभर स्वतः सक्रिय हुने छ।"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"सेटिङहरू"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"बुझेँ"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 2daf530dfa61..eea87ad783ce 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Ontgrendelen"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Wachten op vingerafdruk"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Ontgrendelen zonder je vingerafdruk te gebruiken"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Gezicht scannen"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Verzenden"</string> <string name="unlock_label" msgid="8779712358041029439">"ontgrendelen"</string> <string name="phone_label" msgid="2320074140205331708">"telefoon openen"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Scherm bovenaan gesplitst"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Scherm links gesplitst"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Scherm rechts gesplitst"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Opgeladen"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Opladen"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> tot volledig opgeladen"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tik om te dempen. Toegankelijkheidsservices kunnen zijn gedempt."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tik om in te stellen op trillen."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tik om te dempen."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s-volumeknoppen"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Oproepen en meldingen gaan over (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Media-uitvoer"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimaliseren"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Meldingen van deze app blijven weergeven?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Deze meldingen kunnen niet worden uitgeschakeld"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"camera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microfoon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"wordt weergegeven vóór andere apps op je scherm"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Deze app <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> en <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Deze app <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">gebruikt de <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> en <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">gebruikt de <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Instellingen"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Beheeropties voor meldingen voor <xliff:g id="APP_NAME">%1$s</xliff:g> geopend"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Batterijbesparing wordt automatisch ingeschakeld wanneer de batterijstatus lager is dan <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Instellingen"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 81ffffce012f..7b205b8e7723 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -372,6 +372,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ସ୍କ୍ରୀନ୍କୁ ଉପର ଆଡ଼କୁ ଭାଗ କରନ୍ତୁ"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ସ୍କ୍ରୀନ୍କୁ ବାମ ଆଡ଼କୁ ଭାଗ କରନ୍ତୁ"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ସ୍କ୍ରୀନ୍କୁ ଡାହାଣ ଆଡ଼କୁ ଭାଗ କରନ୍ତୁ"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ଚାର୍ଜ ହୋଇଗଲା"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ଚାର୍ଜ କରାଯାଉଛି"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବାକୁ ଆଉ <xliff:g id="CHARGING_TIME">%s</xliff:g> ଅଛି"</string> @@ -545,6 +547,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s। ମ୍ୟୁଟ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ। ଆକ୍ସେସିବିଲିଟୀ ସର୍ଭିସ୍ ମ୍ୟୁଟ୍ କରାଯାଇପାରେ।"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s। ଭାଇବ୍ରେଟରେ ସେଟ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s। ମ୍ୟୁଟ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s ଭଲ୍ୟୁମ୍ ନିୟନ୍ତ୍ରଣ"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"କଲ୍ ଓ ବିଜ୍ଞପ୍ତି ପାଇଁ (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)ରେ ରିଙ୍ଗ ହେବ"</string> <string name="output_title" msgid="5355078100792942802">"ମିଡିଆ ଆଉଟପୁଟ୍"</string> @@ -610,17 +618,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"ଛୋଟ କରନ୍ତୁ"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ଏହି ଆପ୍ରୁ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖାଇବା ଜାରି ରଖିବେ?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ବନ୍ଦ କରିହେବ ନାହିଁ"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"କ୍ୟାମେରା"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"ମାଇକ୍ରୋଫୋନ୍"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ଆପଣଙ୍କ ସ୍କ୍ରୀନ୍ ଉପରେ ଥିବା ଅନ୍ୟ ଆପ୍ ଉପରେ ଦେଖାଦେବ"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">ଏହି ଆପ୍ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ଓ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>।</item> - <item quantity="one"> ଏହି ଆପ୍ <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>।</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">, <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ଓ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>କୁ ବ୍ୟବହାର କରୁଛି</item> - <item quantity="one">, <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>କୁ ବ୍ୟବହାର କରୁଛି</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"ସେଟିଙ୍ଗ"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ଠିକ୍ ଅଛି"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ବିଜ୍ଞପ୍ତି ନିୟନ୍ତ୍ରଣ ଖୋଲା ଯାଇଛି"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 4b92ec413ca2..ad8b39f0582e 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"ਅਣਲਾਕ ਕਰੋ"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਉਡੀਕ ਹੋ ਰਹੀ ਹੈ"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"ਆਪਣਾ ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤੇ ਬਿਨਾਂ ਅਣਲਾਕ ਕਰੋ"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"ਚਿਹਰਾ ਸਕੈਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"ਭੇਜੋ"</string> <string name="unlock_label" msgid="8779712358041029439">"ਅਣਲਾਕ ਕਰੋ"</string> <string name="phone_label" msgid="2320074140205331708">"ਫ਼ੋਨ ਖੋਲ੍ਹੋ"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ਸਕ੍ਰੀਨ ਨੂੰ ਉੱਪਰ ਵੱਲ ਵਿਭਾਜਿਤ ਕਰੋ"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ਸਕ੍ਰੀਨ ਨੂੰ ਖੱਬੇ ਪਾਸੇ ਵਿਭਾਜਿਤ ਕਰੋ"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ਸਕ੍ਰੀਨ ਨੂੰ ਸੱਜੇ ਪਾਸੇ ਵਿਭਾਜਿਤ ਕਰੋ"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ਚਾਰਜ ਹੋਇਆ"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ਚਾਰਜ ਕਰ ਰਿਹਾ ਹੈ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ਪੂਰਾ ਹੋਣ ਤੱਕ"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s। ਮਿਊਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ। ਪਹੁੰਚਯੋਗਤਾ ਸੇਵਾਵਾਂ ਮਿਊਟ ਹੋ ਸਕਦੀਆਂ ਹਨ।"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s। ਥਰਥਰਾਹਟ \'ਤੇ ਸੈੱਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s। ਮਿਊਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s ਵੌਲਿਊਮ ਕੰਟਰੋਲ"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"ਕਾਲਾਂ ਆਉਣ ਅਤੇ ਸੂਚਨਾਵਾਂ ਮਿਲਣ \'ਤੇ ਘੰਟੀ ਵਜੇਗੀ (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"ਮੀਡੀਆ ਆਊਟਪੁੱਟ"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"ਛੋਟਾ ਕਰੋ"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ਕੀ ਇਸ ਐਪ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ਇਨ੍ਹਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬੰਦ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"ਕੈਮਰਾ"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਹੋਰਾਂ ਐਪਾਂ ਉੱਪਰ ਦਿਖਾਇਆ ਜਾ ਰਿਹਾ ਹੈ"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">ਇਹ ਐਪ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ਅਤੇ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ਹੈ।</item> - <item quantity="other">ਇਹ ਐਪ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ਅਤੇ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ਹੈ।</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ਅਤੇ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ</item> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ਅਤੇ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"ਸੈਟਿੰਗਾਂ"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ਠੀਕ ਹੈ"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸੂਚਨਾ ਕੰਟਰੋਲਾਂ ਨੂੰ ਖੋਲ੍ਹਿਆ ਗਿਆ"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"ਬੈਟਰੀ ਦਾ ਪੱਧਰ <xliff:g id="PERCENTAGE">%d</xliff:g>%% ਤੋਂ ਘੱਟ ਹੋ ਜਾਣ \'ਤੇ ਬੈਟਰੀ ਸੇਵਰ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਚਾਲੂ ਹੋ ਜਾਵੇਗਾ।"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"ਸੈਟਿੰਗਾਂ"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"ਸਮਝ ਲਿਆ"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI ਹੀਪ ਡੰਪ ਕਰੋ"</string> </resources> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index e3db9e64f53b..bae2669787c0 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -97,8 +97,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Odblokuj"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Czekam na odcisk palca"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Odblokuj bez używania odcisku palca"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Skanowanie twarzy"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Wyślij"</string> <string name="unlock_label" msgid="8779712358041029439">"odblokuj"</string> <string name="phone_label" msgid="2320074140205331708">"otwórz telefon"</string> @@ -375,6 +374,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Podziel ekran u góry"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Podziel ekran z lewej"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Podziel ekran z prawej"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Naładowana"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Ładowanie"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> do pełnego naładowania"</string> @@ -548,6 +549,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Kliknij, by wyciszyć. Ułatwienia dostępu mogą być wyciszone."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Kliknij, by włączyć wibracje."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Kliknij, by wyciszyć."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Sterowanie głośnością: %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Połączenia i powiadomienia będą uruchamiały dzwonek (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Wyjście multimediów"</string> @@ -613,21 +620,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimalizuj"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Nadal pokazywać powiadomienia z tej aplikacji?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Tych powiadomień nie można wyłączyć"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"aparat"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"wyświetla się nad innymi aplikacjami na ekranie"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="few">Ta aplikacja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="many">Ta aplikacja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Ta aplikacja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Ta aplikacja <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="few">korzysta z: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="many">korzysta z: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">korzysta z: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">korzysta z: <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Ustawienia"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Sterowanie powiadomieniami aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> otwarte"</string> @@ -867,6 +873,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Oszczędzanie baterii włączy się automatycznie, gdy poziom naładowania baterii spadnie poniżej <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Ustawienia"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Zrzut stosu SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index ca35506cb46a..6b927193c179 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloquear"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Aguardando impressão digital"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Desbloquear sem usar impressão digital"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Verificando rosto"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Enviar"</string> <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string> <string name="phone_label" msgid="2320074140205331708">"abrir telefone"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dividir a tela para a parte superior"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dividir a tela para a esquerda"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dividir a tela para a direita"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Carregando"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> até concluir"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toque para silenciar. É possível que os serviços de acessibilidade sejam silenciados."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toque para configurar para vibrar."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toque para silenciar."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Controles de volume %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Chamadas e notificações farão o smartphone tocar (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Saída de mídia"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuar mostrando notificações desse app?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Não é possível desativar essas notificações"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"câmera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microfone"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"exibindo sobre outros apps na sua tela"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Este app está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Este app está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">usando: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">usando: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Config."</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Controles de notificação de <xliff:g id="APP_NAME">%1$s</xliff:g> abertos"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"O recurso \"Economia de bateria\" será ativado automaticamente depois que a bateria ficar abaixo de <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Configurações"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Ok"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Despejar pilha SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 73410f244f79..5011b086e3f8 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloquear"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"A aguardar a impressão digital…"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Desbloquear sem utilizar a sua impressão digital"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"A analisar o rosto…"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Enviar"</string> <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string> <string name="phone_label" msgid="2320074140205331708">"abrir telemóvel"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Ecrã dividido na parte superior"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Ecrã dividido à esquerda"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Ecrã dividido à direita"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"A carregar"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> até ficar completa"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toque para desativar o som. Os serviços de acessibilidade podem ser silenciados."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toque para ativar a vibração."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toque para desativar o som."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Controlos de volume de %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"As chamadas e as notificações tocam (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Saída de som multimédia"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Pretende continuar a ver notificações desta aplicação?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Não é possível desativar estas notificações."</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"câmara"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microfone"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"sobrepõe-se a outras aplicações no ecrã"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Esta aplicação está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Esta aplicação está <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">a utilizar: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e: <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">a utilizar: <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Definições"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Controlos de notificações da aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> abertos"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"A Poupança de bateria é ativada automaticamente quando o nível de bateria está abaixo de <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Definições"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Compreendi"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Cp ár. di. da. SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index ca35506cb46a..6b927193c179 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloquear"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Aguardando impressão digital"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Desbloquear sem usar impressão digital"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Verificando rosto"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Enviar"</string> <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string> <string name="phone_label" msgid="2320074140205331708">"abrir telefone"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dividir a tela para a parte superior"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dividir a tela para a esquerda"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dividir a tela para a direita"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Carregando"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> até concluir"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toque para silenciar. É possível que os serviços de acessibilidade sejam silenciados."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toque para configurar para vibrar."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toque para silenciar."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Controles de volume %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Chamadas e notificações farão o smartphone tocar (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Saída de mídia"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuar mostrando notificações desse app?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Não é possível desativar essas notificações"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"câmera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microfone"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"exibindo sobre outros apps na sua tela"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Este app está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Este app está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">usando: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">usando: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Config."</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Controles de notificação de <xliff:g id="APP_NAME">%1$s</xliff:g> abertos"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"O recurso \"Economia de bateria\" será ativado automaticamente depois que a bateria ficar abaixo de <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Configurações"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Ok"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Despejar pilha SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 003c75e590f1..b50b90d0a747 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -96,8 +96,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Deblocați"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Se așteaptă amprenta"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Deblocați fără amprentă"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Scanarea chipului"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Trimiteți"</string> <string name="unlock_label" msgid="8779712358041029439">"deblocați"</string> <string name="phone_label" msgid="2320074140205331708">"deschideți telefonul"</string> @@ -374,6 +373,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Divizați ecranul în partea de sus"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Divizați ecranul la stânga"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Divizați ecranul la dreapta"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Încărcată"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Se încarcă"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> până la încărcare completă"</string> @@ -547,6 +548,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Atingeți pentru a dezactiva sunetul. Sunetul se poate dezactiva pentru serviciile de accesibilitate."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Atingeți pentru a seta pe vibrații."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Atingeți pentru a dezactiva sunetul."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Comenzi de volum pentru %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Apelurile și notificările vor suna (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Ieșire media"</string> @@ -612,19 +619,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizați"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Doriți să continuați afișarea notificărilor de la această aplicație?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Aceste notificări nu pot fi dezactivate"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"cameră foto"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microfon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"se afișează peste alte aplicații de pe ecran"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="few">Această aplicație <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> și <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Această aplicație <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> și <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Această aplicație <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="few">folosind <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> și <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">folosind <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> și <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">folosind <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Setări"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Opțiunile privind notificările pentru <xliff:g id="APP_NAME">%1$s</xliff:g> sunt afișate"</string> @@ -862,6 +870,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Economisirea bateriei se va activa automat imediat ce bateria scade sub <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Setări"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Date SysUI memorie"</string> </resources> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 4bf74def45de..3d891f618154 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -97,8 +97,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Разблокировать."</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Отсканируйте отпечаток пальца"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Разблокировать без отпечатка пальца"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Сканирование лица"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Отправить"</string> <string name="unlock_label" msgid="8779712358041029439">"Разблокировать."</string> <string name="phone_label" msgid="2320074140205331708">"Открыть телефон."</string> @@ -377,6 +376,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Разделить экран по верхнему краю"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Разделить экран по левому краю"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Разделить экран по правому краю"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Батарея заряжена"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарядка батареи"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> до полной зарядки"</string> @@ -550,6 +551,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Нажмите, чтобы выключить звук. Специальные возможности могут прекратить работу."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Нажмите, чтобы включить вибрацию."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Нажмите, чтобы выключить звук."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s: регулировка громкости"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Для звонков и уведомлений включен звук (уровень громкости: <xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Выход мультимедиа"</string> @@ -615,21 +622,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Свернуть"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Показывать уведомления от этого приложения?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Эти уведомления нельзя отключить."</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"камеру"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"микрофон"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"показ поверх других окон"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Это приложение <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="few">Это приложение <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="many">Это приложение <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Это приложение <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">использует <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="few">использует <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="many">использует <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">использует <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Настройки"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ОК"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Настройки уведомлений для приложения <xliff:g id="APP_NAME">%1$s</xliff:g> открыты"</string> @@ -873,6 +879,5 @@ <skip /> <string name="open_saver_setting_action" msgid="8314624730997322529">"Открыть настройки"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"ОК"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Передача SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index ea5cf67caf05..7afcf117ff97 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"අඟුල අරින්න"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"ඇඟිලි සලකුණ සඳහා බලා සිටිමින්"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"ඔබේ ඇඟිලි සලකුණ භාවිත නොකර අගුළු අරින්න"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"මුහුණ ස්කෑන් කිරීම"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"යවන්න"</string> <string name="unlock_label" msgid="8779712358041029439">"අඟුල අරින්න"</string> <string name="phone_label" msgid="2320074140205331708">"දුරකථනය විවෘත කරන්න"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"තිරය ඉහළට බෙදන්න"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"තිරය වමට බෙදන්න"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"තිරය දකුණට බෙදන්න"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"අරෝපිතයි"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ආරෝපණය වෙමින්"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> සම්පූර්ණ වන තෙක්"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. නිහඬ කිරීමට තට්ටු කරන්න. ප්රවේශ්යතා සේවා නිහඬ කළ හැකිය."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. කම්පනය කිරීමට සකස් කිරීමට තට්ටු කරන්න."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. නිහඬ කිරීමට තට්ටු කරන්න."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"හඬ පරිමා පාලන %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"ඇමතුම් සහ දැනුම්දීම් (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>) නාද කරනු ඇත"</string> <string name="output_title" msgid="5355078100792942802">"මාධ්ය ප්රතිදානය"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"කුඩා කරන්න"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"මෙම යෙදුම වෙතින් දැනුම්දීම් පෙන්වමින් තබන්නද?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"මෙම දැනුම්දීම් ක්රියාවිරහිත කළ නොහැකිය"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"කැමරාව"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"මයික්රෝෆෝනය"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ඔබගේ තිරය මත වෙනත් යෙදුම්වලට උඩින් සංදර්ශනය කරමින්"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">මෙම යෙදුම <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> සහ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">මෙම යෙදුම <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> සහ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> සහ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> භාවිත කරමින්</item> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> සහ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> භාවිත කරමින්</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"සැකසීම්"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"හරි"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා දැනුම්දීම් පාලන විවෘත කරන ලදී"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"බැටරිය <xliff:g id="PERCENTAGE">%d</xliff:g>%%ට වඩා අඩු වූ පසු බැටරි සුරැකුම ස්වයංක්රියව ක්රියාත්මක කරනු ඇත."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"සැකසීම්"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"තේරුණා"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 4b4789f1bcb2..ecbcde8055d2 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -97,8 +97,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Odomknúť"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Čaká sa na odtlačok prsta"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Odomknúť bez použitia odtlačku"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Skenovanie tváre"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Odoslať"</string> <string name="unlock_label" msgid="8779712358041029439">"odomknúť"</string> <string name="phone_label" msgid="2320074140205331708">"otvoriť telefón"</string> @@ -377,6 +376,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Rozdelená obrazovka hore"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Rozdelená obrazovka naľavo"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Rozdelená obrazovka napravo"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nabitá"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Nabíja sa"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Úplné nabitie o <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -550,6 +551,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Klepnutím vypnite zvuk. Služby dostupnosti je možné stlmiť."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Klepnutím nastavíte vibrovanie."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Klepnutím vypnete zvuk."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Ovládacie prvky hlasitosti %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Hovory a upozornenia spustia zvonenie (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Výstup médií"</string> @@ -615,21 +622,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimalizovať"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Majú sa upozornenia z tejto aplikácie naďalej zobrazovať?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Tieto upozornenia sa nedajú vypnúť"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"fotoaparát"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofón"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"sa zobrazuje cez ďalšie aplikácie na obrazovke"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="few">Táto aplikácia <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="many">Táto aplikácia <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Táto aplikácia <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Táto aplikácia <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="few">používa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="many">používa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">používa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">používa <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Nastavenia"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Ovládanie upozornení pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> je otvorené"</string> @@ -869,6 +875,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Keď batéria klesne pod <xliff:g id="PERCENTAGE">%d</xliff:g> %%, automaticky sa aktivujte Šetrič batérie."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Nastavenia"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Dobre"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Výpis haldy SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 5acf8372fbd7..fa9f7ed90c07 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -97,8 +97,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Odkleni"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Čakanje na prstni odtis"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Odklepanje brez prstnega odtisa"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Optično branje obraza"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Pošlji"</string> <string name="unlock_label" msgid="8779712358041029439">"odkleni"</string> <string name="phone_label" msgid="2320074140205331708">"odpri telefon"</string> @@ -377,6 +376,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Razdeljen zaslon na vrhu"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Razdeljen zaslon na levi"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Razdeljen zaslon na desni"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Akumulator napolnjen"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Polnjenje"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> do napolnjenosti"</string> @@ -550,6 +551,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Dotaknite se, če želite izklopiti zvok. V storitvah za ljudi s posebnimi potrebami bo morda izklopljen zvok."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Dotaknite se, če želite nastaviti vibriranje."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Dotaknite se, če želite izklopiti zvok."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Kontrolniki glasnosti za %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Klici in obvestila bodo pozvonili (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Izhod predstavnosti"</string> @@ -615,21 +622,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimiraj"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Želite, da so obvestila te aplikacije še naprej prikazana?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Teh obvestil ni mogoče izklopiti"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"fotoaparat"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"prekriva druge aplikacije na zaslonu"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Ta aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> in <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="two">Ta aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> in <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="few">Ta aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> in <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Ta aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> in <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">uporablja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> in <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="two">uporablja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> in <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="few">uporablja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> in <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">uporablja <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> in <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Nastavitve"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"V redu"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Kontrolniki obvestil za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g> so odprti"</string> @@ -873,6 +879,5 @@ <skip /> <string name="open_saver_setting_action" msgid="8314624730997322529">"Nastavitve"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"V redu"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Izvoz kopice SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index b50020a2d175..4ff5e1625d24 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Shkyç"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Në pritje për gjurmën e gishtit"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Shkyçe pa përdorur gjurmën e gishtit"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Po skanon fytyrën"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Dërgo"</string> <string name="unlock_label" msgid="8779712358041029439">"shkyç"</string> <string name="phone_label" msgid="2320074140205331708">"hap telefonin"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Ndaje ekranin lart"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Ndaje ekranin në të majtë"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Ndaje ekranin në të djathtë"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"I ngarkuar"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Po ngarkohet"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> deri sa të mbushet"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Trokit për të çaktivizuar. Shërbimet e qasshmërisë mund të çaktivizohen."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Trokit për ta vendosur në dridhje."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Trokit për ta çaktivizuar."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Kontrollet e volumit %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Do të bjerë zilja për telefonatat dhe njoftimet (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Dalja e pajisjes"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizo"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Do të vazhdosh t\'i shfaqësh njoftimet nga ky aplikacion?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Këto njoftime nuk mund të çaktivizohen"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamerën"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofonin"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"po shfaqet mbi aplikacionet e tjera në ekranin tënd"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Ky aplikacion <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> dhe <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Ky aplikacion <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">po përdor <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> dhe <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">po përdor <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Cilësimet"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Në rregull"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Kontrollet e njoftimeve për <xliff:g id="APP_NAME">%1$s</xliff:g> janë hapur"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"\"Kursyesi i baterisë\" do të aktivizohet automatikisht kur bateria të jetë nën <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Cilësimet"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"E kuptova"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Hidh grumbullin SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index a2abcfebef38..3bd9560fd088 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -96,8 +96,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Откључајте"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Чека се отисак прста"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Откључај без коришћења отиска прста"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Скенирање лица"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Пошаљи"</string> <string name="unlock_label" msgid="8779712358041029439">"откључај"</string> <string name="phone_label" msgid="2320074140205331708">"отвори телефон"</string> @@ -372,6 +371,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Подели екран нагоре"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Подели екран налево"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Подели екран надесно"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Напуњена је"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Пуњење"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> док се не напуни"</string> @@ -545,6 +546,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Додирните да бисте искључили звук. Звук услуга приступачности ће можда бити искључен."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Додирните да бисте подесили на вибрацију."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Додирните да бисте искључили звук."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Контроле за јачину звука за %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Мелодија звона за позиве и обавештења је укључена (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Излаз медија"</string> @@ -610,19 +617,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Умањи"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Желите ли да се обавештења из ове апликације и даље приказују?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Не можете да искључите ова обавештења"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"камера"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"микрофон"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"приказује се на екрану док користите друге апликације"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Ова апликација <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="few">Ова апликација <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Ова апликација <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">користи <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="few">користи <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">користи <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Подешавања"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Потврди"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Контроле обавештења за отварање апликације <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -860,6 +868,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Уштеда батерије ће се аутоматски укључивати када батерија падне испод <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Подешавања"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Важи"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Издвоји SysUI мем."</string> </resources> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 347e7593828d..8ab8d12ca37d 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Lås upp"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Väntar på fingeravtryck"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Lås upp utan att använda fingeravtryck"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Registrerar ansikte"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Skicka"</string> <string name="unlock_label" msgid="8779712358041029439">"lås upp"</string> <string name="phone_label" msgid="2320074140205331708">"öppna mobilen"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Delad skärm till överkanten"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Delad skärm åt vänster"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Delad skärm åt höger"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Laddat"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Laddar"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> tills batteriet är fulladdat"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tryck här om du vill stänga av ljudet. Tillgänglighetstjänsterna kanske inaktiveras."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tryck här om du vill aktivera vibrationsläget."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tryck här om du vill stänga av ljudet."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Volymkontroller för %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Ringsignal används för samtal och aviseringar (volym: <xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Medieuppspelning"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Minimera"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Vill du fortsätta visa aviseringar för den här appen?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"De här aviseringarna kan inte inaktiveras"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kameran"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofonen"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"visar över andra appar på mobilen"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Den här appen <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> och <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Den här appen <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">använder <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> och <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">använder <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Inställningar"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Aviseringsinställningarna för <xliff:g id="APP_NAME">%1$s</xliff:g> är öppna"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Batterisparläget aktiveras automatiskt när batterinivån är under <xliff:g id="PERCENTAGE">%d</xliff:g> %%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Inställningar"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dumpa SysUI-heap"</string> </resources> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 56fcadd458e2..4fc28d618b8e 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Fungua"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Inasubiri alama ya kidole"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Fungua bila kutumia kitambulisho chako"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Inachanganua uso"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Tuma"</string> <string name="unlock_label" msgid="8779712358041029439">"fungua"</string> <string name="phone_label" msgid="2320074140205331708">"fungua simu"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Gawa skrini kuelekea juu"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Gawa skrini upande wa kushoto"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Gawa skrini upande wa kulia"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Betri imejaa"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Inachaji"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Imebakisha <xliff:g id="CHARGING_TIME">%s</xliff:g> ijae"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Gusa ili ukomeshe. Huenda ikakomesha huduma za zana za walio na matatizo ya kuona au kusikia."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Gusa ili uweke mtetemo."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Gusa ili usitishe."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Vidhibiti %s vya sauti"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Itatoa mlio arifa ikitumwa na simu ikipigwa (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Vifaa vya kutoa maudhui"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Punguza"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Ungependa kuendelea kuonyesha arifa kutoka programu hii?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Huwezi kuzima arifa hizi"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"maikrofoni"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"inachomoza kwenye programu zingine katika skrini yako"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Programu hii <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> na <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Programu hii <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">inatumia <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> na <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">inatumia <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Mipangilio"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Sawa"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Vidhibiti vya arifa <xliff:g id="APP_NAME">%1$s</xliff:g> vimefunguliwa"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Kiokoa Betri kitawaka kiotomatiki baada ya chaji ya betri kufika chini ya <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Mipangilio"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Nimeelewa"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index db6a518029ba..82a5765726c0 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -369,6 +369,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"திரையை மேல்புறமாகப் பிரி"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"திரையை இடப்புறமாகப் பிரி"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"திரையை வலப்புறமாகப் பிரி"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"சார்ஜ் செய்யப்பட்டது"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"சார்ஜ் ஆகிறது"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"முழுவதும் சார்ஜாக <xliff:g id="CHARGING_TIME">%s</xliff:g> ஆகும்"</string> @@ -542,6 +544,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. ஒலியடக்க, தட்டவும். அணுகல்தன்மை சேவைகள் ஒலியடக்கப்படக்கூடும்."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. அதிர்விற்கு அமைக்க, தட்டவும்."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. ஒலியடக்க, தட்டவும்."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s ஒலியளவுக் கட்டுப்பாடுகள்"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"அழைப்புகளும் அறிவிப்புகளும் வரும்போது ஒலிக்கச் செய்யும் (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"மீடியா வெளியீடு"</string> @@ -607,17 +615,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"சிறிதாக்கு"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"இந்தப் பயன்பாட்டின் அறிவிப்புகளைத் தொடர்ந்து காட்டவா?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"இந்த அறிவிப்புகளை ஆஃப் செய்ய முடியாது"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"கேமரா"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"மைக்ரோஃபோன்"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"உங்கள் திரையில் உள்ள பிற பயன்பாடுகளின் மேல் காட்டுகிறது"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">இந்தப் பயன்பாடானது <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> மற்றும் <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">இந்தப் பயன்பாடானது <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> மற்றும் <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>ஐப் பயன்படுத்துகிறது</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>ஐப் பயன்படுத்துகிறது</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"அமைப்புகள்"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"சரி"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g>க்கான அறிவிப்புக் கட்டுப்பாடுகள் திறக்கப்பட்டன"</string> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 3433e7b38415..9029b5b608dd 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"అన్లాక్ చేయి"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"వేలిముద్ర కోసం వేచి ఉంది"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"మీ వేలిముద్రను ఉపయోగించకుండా అన్లాక్ చేయండి"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"ముఖాన్ని స్కాన్ చేస్తోంది"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"పంపు"</string> <string name="unlock_label" msgid="8779712358041029439">"అన్లాక్ చేయి"</string> <string name="phone_label" msgid="2320074140205331708">"ఫోన్ను తెరువు"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"స్క్రీన్ని ఎగువకు విభజించు"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"స్క్రీన్ని ఎడమ వైపుకి విభజించు"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"స్క్రీన్ని కుడి వైపుకి విభజించు"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ఛార్జ్ చేయబడింది"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ఛార్జ్ అవుతోంది"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"పూర్తిగా నిండటానికి <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. మ్యూట్ చేయడానికి నొక్కండి. యాక్సెస్ సామర్థ్య సేవలు మ్యూట్ చేయబడవచ్చు."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. వైబ్రేట్ అయ్యేలా సెట్ చేయడం కోసం నొక్కండి."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. మ్యూట్ చేయడానికి నొక్కండి."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s వాల్యూమ్ నియంత్రణలు"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"కాల్లు మరియు నోటిఫికేషన్లు రింగ్ అవుతాయి (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"మీడియా అవుట్పుట్"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"కుదించు"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"ఈ యాప్ నుండి నోటిఫికేషన్లను చూపిస్తూ ఉండాలా?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ఈ నోటిఫికేషన్లను ఆఫ్ చేయలేరు"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"కెమెరా"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"మైక్రోఫోన్"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"మీ స్క్రీన్పై ఇతర యాప్ల ద్వారా ప్రదర్శించబడుతోంది"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">ఈ యాప్ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> మరియు <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">ఈ యాప్ <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> మరియు <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ఉపయోగించబడుతున్నాయి</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ఉపయోగించబడుతోంది</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"సెట్టింగ్లు"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"సరే"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> యొక్క నోటిఫికేషన్ నియంత్రణలు తెరవబడ్డాయి"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"బ్యాటరీ <xliff:g id="PERCENTAGE">%d</xliff:g>%% కంటే తగ్గినప్పుడు బ్యాటరీ సేవర్ ఆటోమేటిక్గా ఆన్ అవుతుంది."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"సెట్టింగ్లు"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"అర్థమైంది"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"డంప్ SysUI హీప్"</string> </resources> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 7fb42d637d7d..4c36157d77dd 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"ปลดล็อก"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"กำลังรอลายนิ้วมือ"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"ปลดล็อกโดยไม่ต้องใช้ลายนิ้วมือ"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"กำลังสแกนใบหน้า"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"ส่ง"</string> <string name="unlock_label" msgid="8779712358041029439">"ปลดล็อก"</string> <string name="phone_label" msgid="2320074140205331708">"เปิดโทรศัพท์"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"แยกหน้าจอไปด้านบน"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"แยกหน้าจอไปทางซ้าย"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"แยกหน้าจอไปทางขวา"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ชาร์จแล้ว"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"กำลังชาร์จ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"อีก <xliff:g id="CHARGING_TIME">%s</xliff:g> จึงจะเต็ม"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s แตะเพื่อปิดเสียง อาจมีการปิดเสียงบริการการเข้าถึง"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s แตะเพื่อตั้งค่าให้สั่น"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s แตะเพื่อปิดเสียง"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"ตัวควบคุมระดับเสียง %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"สายเรียกเข้าและการแจ้งเตือนจะส่งเสียง (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"เอาต์พุตสื่อ"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"ย่อเล็กสุด"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"แสดงการแจ้งเตือนจากแอปนี้ต่อไปไหม"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ปิดการแจ้งเตือนเหล่านี้ไม่ได้"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"กล้องถ่ายรูป"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"ไมโครโฟน"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"แสดงทับแอปอื่นๆ บนหน้าจอ"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">แอปนี้<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>และ<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">แอปนี้<xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">กำลังใช้<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>และ<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">กำลังใช้<xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"การตั้งค่า"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ตกลง"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"ส่วนควบคุมการแจ้งเตือนของ <xliff:g id="APP_NAME">%1$s</xliff:g> เปิดอยู่"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"โหมดประหยัดแบตเตอรี่จะเปิดโดยอัตโนมัติเมื่อแบตเตอรี่เหลือไม่ถึง <xliff:g id="PERCENTAGE">%d</xliff:g>%%"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"การตั้งค่า"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"รับทราบ"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 7ff647efee74..1d1d8922842c 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"I-unlock"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Naghihintay ng fingerprint"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"I-unlock nang hindi ginagamit ang iyong fingerprint"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Sina-scan ang mukha"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Ipadala"</string> <string name="unlock_label" msgid="8779712358041029439">"i-unlock"</string> <string name="phone_label" msgid="2320074140205331708">"buksan ang telepono"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"I-split ang screen pataas"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"I-split ang screen pakaliwa"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"I-split ang screen pakanan"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nasingil na"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Nagcha-charge"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> hanggang mapuno"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. I-tap upang i-mute. Maaaring i-mute ang mga serbisyo sa Accessibility."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. I-tap upang itakda na mag-vibrate."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. I-tap upang i-mute."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Mga kontrol ng volume ng %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Magri-ring kapag may mga tawag at notification (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Output ng media"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"I-minimize"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Patuloy na ipakita ang mga notification mula sa app na ito?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Hindi maaaring i-off ang mga notification na ito"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"camera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikropono"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ipinapakita sa ibabaw ng ibang app sa iyong screen"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Ang app na ito ay <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> at <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Ang app na ito ay <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> at <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">ginagamit ang <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> at <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">ginagamit ang <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> at <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Mga Setting"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Binuksan ang mga kontrol sa notification para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Awtomatikong mao-on ang Pangtipid sa Baterya kapag mas mababa na sa <xliff:g id="PERCENTAGE">%d</xliff:g>%% ang baterya."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Mga Setting"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Itapon SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 1c30eedfc2c1..a5546ae34cf0 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Kilidi aç"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Parmak izi bekleniyor"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Kilidi, parmak iziniz olmadan açın"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Yüz taranıyor"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Gönder"</string> <string name="unlock_label" msgid="8779712358041029439">"kilidi aç"</string> <string name="phone_label" msgid="2320074140205331708">"telefonu aç"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Ekranı yukarıya doğru böl"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Ekranı sola doğru böl"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Ekranı sağa doğru böl"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Ödeme alındı"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Şarj oluyor"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Tam şarj olmasına <xliff:g id="CHARGING_TIME">%s</xliff:g> kaldı"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Sesi kapatmak için dokunun. Erişilebilirlik hizmetlerinin sesi kapatılabilir."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Titreşime ayarlamak için dokunun."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Sesi kapatmak için dokunun."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s ses denetimleri"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Çağrılar ve bildirimler telefonun zilini çaldıracak (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Medya çıkışı"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Küçült"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu uygulamadan gelen bildirimler gösterilmeye devam edilsin mi?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Bu bildirimler kapatılamaz"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ekranınızdaki diğer uygulamaların üzerinde görüntüleniyor"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Bu uygulama <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ve <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> işlemleri gerçekleştiriyor.</item> - <item quantity="one">Bu uygulama <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> işlemi gerçekleştiriyor.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ve <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> kullanımı</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> kullanımı</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Ayarlar"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"Tamam"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> için bildirim kontrolleri açıldı"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Pil %%<xliff:g id="PERCENTAGE">%d</xliff:g> düzeyinin altına düştüğünde Pil Tasarrufu otomatik olarak açılacaktır."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Ayarlar"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Anladım"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI Yığın Dökümü"</string> </resources> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 0d9b2f68c2f9..2a04c13bac30 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -97,8 +97,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Розблокувати"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Очікується відбиток пальця"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Розблокувати без цифрового відбитка"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Сканування обличчя"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Надіслати"</string> <string name="unlock_label" msgid="8779712358041029439">"розблокувати"</string> <string name="phone_label" msgid="2320074140205331708">"відкрити телефон"</string> @@ -377,6 +376,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Розділити екран угорі"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Розділити екран ліворуч"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Розділити екран праворуч"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Заряджено"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Заряджається"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"До повного зарядження <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -550,6 +551,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Торкніться, щоб вимкнути звук. Спеціальні можливості може бути вимкнено."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Торкніться, щоб налаштувати вібросигнал."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Торкніться, щоб вимкнути звук."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Регуляторів гучності: %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Для викликів і сповіщень налаштовано звуковий сигнал (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Вивід медіа-вмісту"</string> @@ -615,21 +622,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Згорнути"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Чи показувати сповіщення з цього додатка надалі?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Ці сповіщення не можна вимкнути"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"камера"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"мікрофон"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"показ поверх інших додатків на екрані"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">У цьому додатку <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="few">У цьому додатку <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="many">У цьому додатку <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">У цьому додатку <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">використовуються <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="few">використовуються <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="many">використовуються <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">використовуються <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Налаштування"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Елементи керування сповіщеннями для додатка <xliff:g id="APP_NAME">%1$s</xliff:g> відкрито"</string> @@ -869,6 +875,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Режим економії заряду акумулятора вмикатиметься автоматично, коли рівень нижчий за <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Налаштування"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index 8b919deb4e89..2111d62215e1 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"غیر مقفل کریں"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"فنگر پرنٹ کا انتظار ہے"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"فنگر پرنٹ استعمال کیے بغیرغیر مقفل کریں"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"اسکیننگ چہرہ"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"بھیجیں"</string> <string name="unlock_label" msgid="8779712358041029439">"غیر مقفل کریں"</string> <string name="phone_label" msgid="2320074140205331708">"فون کھولیں"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"اسکرین کو اوپر کی جانب تقسیم کریں"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"اسکرین کو بائیں جانب تقسیم کریں"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"اسکرین کو دائیں جانب تقسیم کریں"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"چارج ہوگئی"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"چارج ہو رہی ہے"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> مکمل ہونے تک"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s۔ خاموش کرنے کیلئے تھپتھپائیں۔ ایکسیسبیلٹی سروسز شاید خاموش ہوں۔"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s۔ ارتعاش پر سیٹ کرنے کیلئے تھپتھپائیں۔"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s۔ خاموش کرنے کیلئے تھپتھپائیں۔"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s والیوم کے کنٹرولز"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"کالز اور اطلاعات موصول ہونے پر گھنٹی بجے گی (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"میڈیا آؤٹ پٹ"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"چھوٹا کریں"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"اس ایپ کی طرف سے اطلاعات دکھانا جاری رکھیں؟"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"ان اطلاعات کو آف نہیں کیا جا سکتا"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"کیمرا"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"مائیکروفون"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"آپ کی اسکرین پر دیگر ایپس پر دکھایا جا رہا ہے"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">یہ ایپ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> اور <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ہے۔</item> - <item quantity="one">یہ ایپ <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ہے۔</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> اور <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> کا استعمال کیا جا رہا ہے</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> کا استعمال کیا جا رہا ہے</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"ترتیبات"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"ٹھیک ہے"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> کیلئے اطلاعی کنٹرولز کھلے ہیں"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"بیٹری کے <xliff:g id="PERCENTAGE">%d</xliff:g>%% سے کم ہونے پر بیٹری سیور خودکار طور پر آن ہو جائے گا۔"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"ترتیبات"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"سمجھ آ گئی"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index e92b648d9480..59e191d6edde 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Qulfdan chiqarish"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Barmoq izingizni skanerlang"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Barmoq izisiz qulfdan chiqarish"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Yuzni skanerlash"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Yuborish"</string> <string name="unlock_label" msgid="8779712358041029439">"qulfdan chiqarish"</string> <string name="phone_label" msgid="2320074140205331708">"telefonni ochish"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Ekranni tepaga qadash"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Ekranni chap tomonga qadash"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Ekranni o‘ng tomonga qadash"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Batareya quvvati to‘ldi"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Quvvat olmoqda"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g>da to‘ladi"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Ovozini o‘chirish uchun ustiga bosing. Maxsus imkoniyatlar ishlamasligi mumkin."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tebranishni yoqish uchun ustiga bosing."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Ovozsiz qilish uchun ustiga bosing."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s tovush balandligi tugmalari"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Chaqiruvlar va bildirishnomalar jiringlaydi (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Media chiqishi"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Kichraytirish"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu ilovadan keladigan bildirishnomalar chiqaversinmi?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Bu bildirishnomalarni chiqmaydigan qilish imkonsiz"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"ekranda boshqa ilovalar ustidan ochiladi"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Bu ilova <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> va <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Bu ilova <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> va <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ishlatmoqda</item> - <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ishlatmoqda</item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Sozlamalar"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun bildirishnoma sozlamalari ochildi"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Batareya quvvati <xliff:g id="PERCENTAGE">%d</xliff:g>%% ga tushganda, quvvat tejash rejimi avtomatik ravishda yoqiladi."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Sozlamalar"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"SysUI uzatish"</string> </resources> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 8f903c8010e4..46e21f6af021 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Mở khóa"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Đang chờ vân tay"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Mở khóa không dùng vân tay của bạn"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Quét tìm khuôn mặt"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Gửi"</string> <string name="unlock_label" msgid="8779712358041029439">"mở khóa"</string> <string name="phone_label" msgid="2320074140205331708">"mở điện thoại"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Chia đôi màn hình lên trên"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Chia đôi màn hình sang trái"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Chia đôi màn hình sang phải"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Đã sạc đầy"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Đang sạc"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> cho đến khi đầy"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Nhấn để tắt tiếng. Bạn có thể tắt tiếng dịch vụ trợ năng."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Nhấn để đặt chế độ rung."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Nhấn để tắt tiếng."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"Điều khiển âm lượng %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Cuộc gọi và thông báo sẽ đổ chuông (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Đầu ra phương tiện"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Thu nhỏ"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Tiếp tục hiển thị các thông báo từ ứng dụng này?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Không thể tắt các thông báo này"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"máy ảnh"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"micrô"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"hiển thị qua các ứng dụng khác trên màn hình của bạn"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">Ứng dụng này đang <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> và <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="one">Ứng dụng này đang <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">sử dụng <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> và <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">sử dụng <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Cài đặt"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"OK"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Đã mở điều khiển thông báo đối với <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Trình tiết kiệm pin sẽ tự động bật khi mức pin thấp hơn <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Cài đặt"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"OK"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"Trích xuất bộ nhớ SysUI"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index efb350b12091..11b8938b97c6 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"解锁"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"正在等待提供指纹"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"不使用指纹解锁"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"正在扫描面孔"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"发送"</string> <string name="unlock_label" msgid="8779712358041029439">"解锁"</string> <string name="phone_label" msgid="2320074140205331708">"打开电话"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"将屏幕分隔线移到上方"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"将屏幕分隔线移到左侧"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"将屏幕分隔线移到右侧"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"已充满"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"正在充电"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"还需<xliff:g id="CHARGING_TIME">%s</xliff:g>充满"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s。点按即可设为静音,但可能会同时将无障碍服务设为静音。"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s。点按即可设为振动。"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s。点按即可设为静音。"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s音量控件"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"有来电和通知时会响铃 (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"媒体输出"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"要继续显示来自此应用的通知吗?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"无法关闭这些通知"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"相机"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"麦克风"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"显示在屏幕上其他应用的上层"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">此应用正在<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>以及<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>。</item> - <item quantity="one">此应用正在<xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>。</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">使用<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>和<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">使用<xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"设置"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"确定"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g>的通知控件已打开"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"一旦电池电量降到 <xliff:g id="PERCENTAGE">%d</xliff:g>%% 以下,省电模式就会自动开启。"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"设置"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"知道了"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"转储 SysUI 堆"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 635185931421..802235aa6748 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"解鎖"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"正在等待指紋"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"不使用指紋解鎖"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"掃瞄緊面孔"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"傳送"</string> <string name="unlock_label" msgid="8779712358041029439">"解鎖"</string> <string name="phone_label" msgid="2320074140205331708">"開啟電話"</string> @@ -371,6 +370,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"將分割畫面顯示喺頂部"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"將分割畫面顯示喺左邊"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"將分割畫面顯示喺右邊"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"已完成充電"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"充電中"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g>後完成充電"</string> @@ -544,6 +545,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s。輕按即可設為靜音。無障礙功能服務可能已經設為靜音。"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s。輕按即可設為震動。"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s。輕按即可設為靜音。"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s音量控制項"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"有來電和通知時會發出鈴聲 (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"媒體輸出"</string> @@ -609,17 +616,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"要繼續顯示此應用程式的通知嗎?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"無法關閉這些通知"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"相機"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"麥克風"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"顯示在畫面上的其他應用程式上層"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">此應用程式正在<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>和<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>。</item> - <item quantity="one">此應用程式正在<xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>。</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">使用<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>和<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">使用<xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"設定"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"確定"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"開咗「<xliff:g id="APP_NAME">%1$s</xliff:g>」嘅通知控制項"</string> @@ -855,6 +865,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"省電模式將會在電量低於 <xliff:g id="PERCENTAGE">%d</xliff:g>%% 時自動開啟。"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"設定"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"知道了"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"傾印 SysUI 記憶體快照"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 97647d085e85..1b6918175535 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"解除鎖定"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"正在等候指紋"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"不使用指紋進行解鎖"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"掃描臉孔"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"傳送"</string> <string name="unlock_label" msgid="8779712358041029439">"解除鎖定"</string> <string name="phone_label" msgid="2320074140205331708">"開啟電話"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"將分割畫面顯示在頂端"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"將分割畫面顯示在左邊"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"將分割畫面顯示在右邊"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"已充飽"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"充電中"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g>後充飽"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s。輕觸即可設為靜音,但系統可能會將無障礙服務一併設為靜音。"</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s。輕觸即可設為震動。"</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s。輕觸即可設為靜音。"</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"「%s」音量控制項"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"有來電和通知時會響鈴 (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"媒體輸出"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"要繼續顯示這個應用程式的通知嗎?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"無法關閉這些通知"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"相機"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"麥克風"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"顯示在畫面上的其他應用程式上層"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="other">這個應用程式正在<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>及<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>。</item> - <item quantity="one">這個應用程式正在<xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>。</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="other">使用<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>和<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="one">使用<xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"設定"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"確定"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」的通知控制項已開啟"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"節約耗電量模式會在電量低於 <xliff:g id="PERCENTAGE">%d</xliff:g>%% 時自動開啟。"</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"設定"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"我知道了"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"傾印 SysUI 記憶體快照"</string> </resources> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 8c45f5377199..2829dcac7577 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -95,8 +95,7 @@ <string name="accessibility_unlock_button" msgid="128158454631118828">"Vula"</string> <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Ilindele izigxivizo zeminwe"</string> <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Vula ngaphandle kokusebenzisa izigxivizo zakho zeminwe"</string> - <!-- no translation found for accessibility_scanning_face (769545173211758586) --> - <skip /> + <string name="accessibility_scanning_face" msgid="769545173211758586">"Ukuskena ubuso"</string> <string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Thumela"</string> <string name="unlock_label" msgid="8779712358041029439">"vula"</string> <string name="phone_label" msgid="2320074140205331708">"vula ifoni"</string> @@ -369,6 +368,8 @@ <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Hlukanisela isikrini phezulu"</string> <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Hlukanisela isikrini ngakwesokunxele"</string> <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Hlukanisela isikrini ngakwesokudla"</string> + <!-- no translation found for quick_step_accessibility_toggle_overview (7171470775439860480) --> + <skip /> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Kushajiwe"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Iyashaja"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ize igcwale"</string> @@ -542,6 +543,12 @@ <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Thepha ukuze uthulise. Amasevisi okufinyelela angathuliswa."</string> <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Thepha ukuze usethele ekudlidlizeni."</string> <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Thepha ukuze uthulise."</string> + <!-- no translation found for volume_ringer_hint_mute (9199811307292269601) --> + <skip /> + <!-- no translation found for volume_ringer_hint_unmute (6602880133293060368) --> + <skip /> + <!-- no translation found for volume_ringer_hint_vibrate (4036802135666515202) --> + <skip /> <string name="volume_dialog_title" msgid="7272969888820035876">"%s izilawuli zevolomu"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="3360373718388509040">"Amakholi nezaziso zizokhala (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="5355078100792942802">"Okukhiphayo kwemidiya"</string> @@ -607,17 +614,20 @@ <string name="inline_minimize_button" msgid="966233327974702195">"Nciphisa"</string> <string name="inline_keep_showing_app" msgid="1723113469580031041">"Qhubeka nokubonisa izaziso kusuka kulolu hlelo lokusebenza?"</string> <string name="notification_unblockable_desc" msgid="1037434112919403708">"Lezi zaziso azikwazi ukuvalwa"</string> - <string name="notification_appops_camera_active" msgid="730959943016785931">"ikhamera"</string> - <string name="notification_appops_microphone_active" msgid="1546319728924580686">"imakrofoni"</string> - <string name="notification_appops_overlay_active" msgid="633813008357934729">"iboniswa ngaphezulu kwezinye izinhlelo zokusebenza kusikrini sakho"</string> - <plurals name="notification_appops" formatted="false" msgid="1258122060887196817"> - <item quantity="one">Lolu hlelo lokusebenza lwenza i-<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ne-<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - <item quantity="other">Lolu hlelo lokusebenza lwenza i-<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ne-<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item> - </plurals> - <plurals name="notification_using" formatted="false" msgid="2211008461429037973"> - <item quantity="one">kusetshenziswa i-<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ne-<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - <item quantity="other">kusetshenziswa i-<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ne-<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item> - </plurals> + <!-- no translation found for appops_camera (8100147441602585776) --> + <skip /> + <!-- no translation found for appops_microphone (741508267659494555) --> + <skip /> + <!-- no translation found for appops_overlay (6165912637560323464) --> + <skip /> + <!-- no translation found for appops_camera_mic (1576901651150187433) --> + <skip /> + <!-- no translation found for appops_camera_overlay (8869400080809298814) --> + <skip /> + <!-- no translation found for appops_mic_overlay (4835157962857919804) --> + <skip /> + <!-- no translation found for appops_camera_mic_overlay (6718768197048030993) --> + <skip /> <string name="notification_appops_settings" msgid="1028328314935908050">"Izilungiselelo"</string> <string name="notification_appops_ok" msgid="1156966426011011434">"KULUNGILE"</string> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Izilawuli zesaziso ze-<xliff:g id="APP_NAME">%1$s</xliff:g> zivuliwe"</string> @@ -853,6 +863,5 @@ <string name="auto_saver_enabled_text" msgid="874711029884777579">"Isilondolozi sebhethri sizovuleka ngokuzenzakalelayo uma ibhethri lifika ngaphansi kuka-<xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string> <string name="open_saver_setting_action" msgid="8314624730997322529">"Izilungiselelo"</string> <string name="auto_saver_okay_action" msgid="2701221740227683650">"Ngiyezwa"</string> - <!-- no translation found for heap_dump_tile_name (9141031328971226374) --> - <skip /> + <string name="heap_dump_tile_name" msgid="9141031328971226374">"I-Dump SysUI Heap"</string> </resources> diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index b11266a26abc..2ce9bfc8ae7c 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -135,6 +135,7 @@ <attr name="spacing" format="dimension" /> <attr name="singleLineButtonPaddingHorizontal" format="dimension" /> <attr name="doubleLineButtonPaddingHorizontal" format="dimension" /> + <attr name="buttonStrokeWidth" format="dimension" /> </declare-styleable> <!-- Used to style rotate suggestion button AVD animations --> diff --git a/packages/SystemUI/res/values/attrs_car.xml b/packages/SystemUI/res/values/attrs_car.xml index 99d242591e92..41e078699647 100644 --- a/packages/SystemUI/res/values/attrs_car.xml +++ b/packages/SystemUI/res/values/attrs_car.xml @@ -63,4 +63,32 @@ <attr name="hvacPropertyId" format="integer"/> <attr name="hvacTempFormat" format="string"/> </declare-styleable> + + <declare-styleable name="carVolumeItems"/> + <declare-styleable name="carVolumeItems_item"> + <!-- Align with AudioAttributes.USAGE_* --> + <attr name="usage"> + <enum name="unknown" value="0"/> + <enum name="media" value="1"/> + <enum name="voice_communication" value="2"/> + <enum name="voice_communication_signalling" value="3"/> + <enum name="alarm" value="4"/> + <enum name="notification" value="5"/> + <enum name="notification_ringtone" value="6"/> + <enum name="notification_communication_request" value="7"/> + <enum name="notification_communication_instant" value="8"/> + <enum name="notification_communication_delayed" value="9"/> + <enum name="notification_event" value="10"/> + <enum name="assistance_accessibility" value="11"/> + <enum name="assistance_navigation_guidance" value="12"/> + <enum name="assistance_sonification" value="13"/> + <enum name="game" value="14"/> + <!-- hidden, do not use --> + <!-- enum name="virtual_source" value="15"/ --> + <enum name="assistant" value="16"/> + </attr> + + <!-- Icon resource ids to render on UI --> + <attr name="icon" format="reference"/> + </declare-styleable> </resources> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index efcca63c6d08..3472477c4ce5 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -151,7 +151,8 @@ <color name="zen_introduction">#ffffffff</color> <color name="smart_reply_button_text">#5F6368</color> - <color name="smart_reply_button_background">#feffffff</color> + <color name="smart_reply_button_text_dark_bg">@*android:color/notification_primary_text_color_dark</color> + <color name="smart_reply_button_background">#ffffffff</color> <color name="smart_reply_button_stroke">#ffdadce0</color> <!-- Fingerprint dialog colors --> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index ad74725aa19d..8c3cc4223fd8 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -296,6 +296,8 @@ <dimen name="volume_dialog_panel_transparent_padding">20dp</dimen> + <dimen name="volume_dialog_stream_padding">8dp</dimen> + <!-- the amount the volume panel should be offset at the end from the view next to it (or the screen edge, in portrait--> <dimen name="volume_dialog_base_margin">8dp</dimen> @@ -949,6 +951,7 @@ <dimen name="smart_reply_button_padding_horizontal_single_line">20dp</dimen> <dimen name="smart_reply_button_padding_horizontal_double_line">19dp</dimen> <dimen name="smart_reply_button_min_height">48dp</dimen> + <dimen name="smart_reply_button_stroke_width">1dp</dimen> <dimen name="smart_reply_button_font_size">14sp</dimen> <dimen name="smart_reply_button_line_spacing_extra">6sp</dimen> <!-- Total line height 20sp. --> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 95ccc3c29ef4..654f4079aef3 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -623,6 +623,8 @@ <!-- The overflow indicator shown when a group has more notification inside the group than the visible ones. An example is "+ 3" [CHAR LIMIT=5] --> <string name="notification_group_overflow_indicator">+ <xliff:g id="number" example="3">%s</xliff:g></string> + <!-- The overflow indicator shown when a group has more notification inside the group than the visible ones. An example is "New message, +3" [CHAR LIMIT=7] --> + <string name="notification_group_overflow_indicator_ambient"><xliff:g id="notification_title" example="New message">%s</xliff:g>, +<xliff:g id="overflow" example="+3">%s</xliff:g></string> <!-- Content description describing how many more notifications are in a group [CHAR LIMIT=NONE] --> <plurals name="notification_group_overflow_description"> diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index c9b14dc23877..b3f4534853c4 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -110,7 +110,6 @@ <item name="android:paddingStart">@*android:dimen/notification_extra_margin_ambient</item> <item name="android:paddingEnd">@*android:dimen/notification_extra_margin_ambient</item> <item name="android:orientation">vertical</item> - <item name="android:paddingBottom">23.5dp</item> </style> <style name="hybrid_notification"> @@ -119,22 +118,28 @@ </style> <style name="hybrid_notification_title_ambient"> + <item name="android:layout_marginTop">@*android:dimen/notification_header_margin_top_ambient</item> <item name="android:paddingStart">@*android:dimen/notification_content_margin_start</item> <item name="android:paddingEnd">@*android:dimen/notification_content_margin_end</item> - <item name="android:textSize">20sp</item> + <item name="android:textAppearance">@*android:style/Notification.Header.Ambient</item> + <item name="android:layout_gravity">top|center_horizontal</item> + <item name="android:textSize">@*android:dimen/notification_ambient_title_text_size</item> <item name="android:textColor">#ffffffff</item> </style> <style name="hybrid_notification_title"> <item name="android:paddingEnd">4dp</item> + <item name="android:textAppearance">@*android:style/TextAppearance.Material.Notification.Title</item> </style> <style name="hybrid_notification_text_ambient"> <item name="android:paddingStart">@*android:dimen/notification_content_margin_start</item> <item name="android:paddingEnd">@*android:dimen/notification_content_margin_end</item> - <item name="android:textSize">16sp</item> + <item name="android:textSize">@*android:dimen/notification_ambient_text_size</item> <item name="android:textColor">#eeffffff</item> - <item name="android:layout_marginTop">4dp</item> + <item name="android:gravity">top|center_horizontal</item> + <item name="android:ellipsize">end</item> + <item name="android:maxLines">3</item> </style> <style name="hybrid_notification_text" diff --git a/packages/SystemUI/res/xml/car_volume_items.xml b/packages/SystemUI/res/xml/car_volume_items.xml new file mode 100644 index 000000000000..742dfdda73c8 --- /dev/null +++ b/packages/SystemUI/res/xml/car_volume_items.xml @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + * + * Copyright 2018, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ +--> + +<!-- + Defines all possible items on car volume settings UI, keyed by usage. + + This enables the CarSettings UI to associate VolumeGroups surfaced by + CarAudioManager.getVolumeGroupCount with renderable assets (ie: title, icon) + for presentation. + + Order matters in this configuration. If one volume group contains multiple + audio usages, the first one appears in this file would be picked to be + presented on UI. + + When overriding this configuration, please consult also the + car_volume_groups.xml, which is read by car audio service. +--> +<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto"> + <item car:usage="unknown" + car:icon="@drawable/car_ic_music"/> + <item car:usage="media" + car:icon="@drawable/car_ic_music"/> + <item car:usage="voice_communication" + car:icon="@*android:drawable/ic_audio_ring_notif"/> + <item car:usage="voice_communication_signalling" + car:icon="@*android:drawable/ic_audio_ring_notif"/> + <item car:usage="alarm" + car:icon="@*android:drawable/ic_audio_alarm"/> + <item car:usage="notification" + car:icon="@drawable/car_ic_notification"/> + <item car:usage="notification_ringtone" + car:icon="@*android:drawable/ic_audio_ring_notif"/> + <item car:usage="notification_communication_request" + car:icon="@drawable/car_ic_notification"/> + <item car:usage="notification_communication_instant" + car:icon="@drawable/car_ic_notification"/> + <item car:usage="notification_communication_delayed" + car:icon="@drawable/car_ic_notification"/> + <item car:usage="notification_event" + car:icon="@drawable/car_ic_notification"/> + <item car:usage="assistance_accessibility" + car:icon="@drawable/car_ic_notification"/> + <item car:usage="assistance_navigation_guidance" + car:icon="@drawable/car_ic_navigation"/> + <item car:usage="assistance_sonification" + car:icon="@drawable/car_ic_notification"/> + <item car:usage="game" + car:icon="@drawable/car_ic_music"/> + <item car:usage="assistant" + car:icon="@drawable/car_ic_music"/> +</carVolumeItems> + diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java index 5a0dddc7656a..cc536a50bfc0 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java @@ -57,6 +57,7 @@ public class NavigationBarCompat { public static final int HIT_TARGET_BACK = 1; public static final int HIT_TARGET_HOME = 2; public static final int HIT_TARGET_OVERVIEW = 3; + public static final int HIT_TARGET_ROTATION = 4; @Retention(RetentionPolicy.SOURCE) @IntDef({FLAG_DISABLE_SWIPE_UP, diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RotationWatcher.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RotationWatcher.java new file mode 100644 index 000000000000..5a28a5e28d91 --- /dev/null +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RotationWatcher.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.systemui.shared.system; + +import android.content.Context; +import android.os.RemoteException; +import android.util.Log; +import android.view.IRotationWatcher; +import android.view.WindowManagerGlobal; + +public abstract class RotationWatcher { + + private static final String TAG = "RotationWatcher"; + + private final Context mContext; + + private final IRotationWatcher mWatcher = new IRotationWatcher.Stub() { + + @Override + public void onRotationChanged(int rotation) { + RotationWatcher.this.onRotationChanged(rotation); + + } + }; + + private boolean mIsWatching = false; + + public RotationWatcher(Context context) { + mContext = context; + } + + protected abstract void onRotationChanged(int rotation); + + public void enable() { + if (!mIsWatching) { + try { + WindowManagerGlobal.getWindowManagerService().watchRotation(mWatcher, + mContext.getDisplay().getDisplayId()); + mIsWatching = true; + } catch (RemoteException e) { + Log.w(TAG, "Failed to set rotation watcher", e); + } + } + } + + public void disable() { + if (mIsWatching) { + try { + WindowManagerGlobal.getWindowManagerService().removeRotationWatcher(mWatcher); + mIsWatching = false; + } catch (RemoteException e) { + Log.w(TAG, "Failed to remove rotation watcher", e); + } + } + } +} diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java index 00cd5a7b1689..48b413456755 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java @@ -246,7 +246,12 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - onUserInput(); + // Fingerprint sensor sends a KeyEvent.KEYCODE_UNKNOWN. + // We don't want to consider it valid user input because the UI + // will already respond to the event. + if (keyCode != KeyEvent.KEYCODE_UNKNOWN) { + onUserInput(); + } return false; } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardHostView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardHostView.java index 5b4d65290146..aa0bcc5cf2b8 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardHostView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardHostView.java @@ -241,6 +241,10 @@ public class KeyguardHostView extends FrameLayout implements SecurityCallback { mViewMediatorCallback.resetKeyguard(); } + public void resetSecurityContainer() { + mSecurityContainer.reset(); + } + @Override public void onSecurityModeChanged(SecurityMode securityMode, boolean needsInput) { if (mViewMediatorCallback != null) { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java index a2befefba79e..cb8c119d08eb 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java @@ -31,8 +31,7 @@ import com.android.internal.annotations.VisibleForTesting; public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView implements View.OnKeyListener, View.OnTouchListener { - @VisibleForTesting - PasswordTextView mPasswordEntry; + protected PasswordTextView mPasswordEntry; private View mOkButton; private View mDeleteButton; private View mButton0; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java index 30a17a129e41..f066e3401752 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java @@ -57,6 +57,7 @@ import java.util.function.Consumer; import androidx.slice.Slice; import androidx.slice.SliceItem; +import androidx.slice.SliceManager; import androidx.slice.core.SliceQuery; import androidx.slice.widget.ListContent; import androidx.slice.widget.RowContent; @@ -390,6 +391,11 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe } } + public void refresh() { + Slice slice = SliceManager.getInstance(getContext()).bindSlice(mKeyguardSliceUri); + onChanged(slice); + } + public static class Row extends LinearLayout { /** diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java index 454528e4f5f6..f6b5d69b99d3 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java @@ -287,7 +287,12 @@ public class KeyguardStatusView extends GridLayout implements } } - public void refreshTime() { + public void dozeTimeTick() { + refreshTime(); + mKeyguardSlice.refresh(); + } + + private void refreshTime() { mClockView.refresh(); } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index fb1392504965..9f382b00d4f8 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -55,6 +55,7 @@ import android.os.BatteryManager; import android.os.CancellationSignal; import android.os.Handler; import android.os.IRemoteCallback; +import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.os.ServiceManager; @@ -244,7 +245,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private static final int HW_UNAVAILABLE_TIMEOUT = 3000; // ms private static final int HW_UNAVAILABLE_RETRY_MAX = 3; - private final Handler mHandler = new Handler() { + private final Handler mHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { @@ -339,6 +340,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { case MSG_DEVICE_POLICY_MANAGER_STATE_CHANGED: updateLogoutEnabled(); break; + default: + super.handleMessage(msg); + break; } } }; @@ -1181,12 +1185,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED); - context.registerReceiver(mBroadcastReceiver, filter); + context.registerReceiver(mBroadcastReceiver, filter, null, mHandler); final IntentFilter bootCompleteFilter = new IntentFilter(); bootCompleteFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); bootCompleteFilter.addAction(Intent.ACTION_BOOT_COMPLETED); - context.registerReceiver(mBroadcastReceiver, bootCompleteFilter); + context.registerReceiver(mBroadcastReceiver, bootCompleteFilter, null, mHandler); final IntentFilter allUserFilter = new IntentFilter(); allUserFilter.addAction(Intent.ACTION_USER_INFO_CHANGED); @@ -1196,7 +1200,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { allUserFilter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED); allUserFilter.addAction(ACTION_USER_UNLOCKED); context.registerReceiverAsUser(mBroadcastAllReceiver, UserHandle.ALL, allUserFilter, - null, null); + null, mHandler); mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionListener); try { diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java index 8a8bafaf9853..38a90cfd96a5 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java @@ -207,8 +207,12 @@ public class AssistManager implements ConfigurationChangedReceiver { boolean structureEnabled = Settings.Secure.getIntForUser(mContext.getContentResolver(), Settings.Secure.ASSIST_STRUCTURE_ENABLED, 1, UserHandle.USER_CURRENT) != 0; - final Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE)) - .getAssistIntent(structureEnabled); + final SearchManager searchManager = + (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE); + if (searchManager == null) { + return; + } + final Intent intent = searchManager.getAssistIntent(structureEnabled); if (intent == null) { return; } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java index a265a5e1d5a7..0ca0a117f6e6 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java @@ -74,6 +74,7 @@ public class FalsingManager implements SensorEventListener { private boolean mEnforceBouncer = false; private boolean mBouncerOn = false; + private boolean mBouncerOffOnDown = false; private boolean mSessionActive = false; private boolean mIsTouchScreen = true; private int mState = StatusBarState.SHADE; @@ -459,10 +460,19 @@ public class FalsingManager implements SensorEventListener { public void onTouchEvent(MotionEvent event, int width, int height) { if (event.getAction() == MotionEvent.ACTION_DOWN) { mIsTouchScreen = event.isFromSource(InputDevice.SOURCE_TOUCHSCREEN); - } - if (mSessionActive && !mBouncerOn) { - mDataCollector.onTouchEvent(event, width, height); - mHumanInteractionClassifier.onTouchEvent(event); + // If the bouncer was not shown during the down event, + // we want the entire gesture going to HumanInteractionClassifier + mBouncerOffOnDown = !mBouncerOn; + } + if (mSessionActive) { + if (!mBouncerOn) { + // In case bouncer is "visible", but onFullyShown has not yet been called, + // avoid adding the event to DataCollector + mDataCollector.onTouchEvent(event, width, height); + } + if (mBouncerOffOnDown) { + mHumanInteractionClassifier.onTouchEvent(event); + } } } diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java index ea3f95e61a35..4b6528882ca4 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java @@ -26,6 +26,7 @@ import android.app.Dialog; import android.app.KeyguardManager; import android.app.WallpaperManager; import android.app.admin.DevicePolicyManager; +import android.app.trust.TrustManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -699,6 +700,9 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, UserHandle.USER_ALL); try { WindowManagerGlobal.getWindowManagerService().lockNow(null); + // Lock profiles (if any) on the background thread. + final Handler bgHandler = new Handler(Dependency.get(Dependency.BG_LOOPER)); + bgHandler.post(() -> lockProfiles()); } catch (RemoteException e) { Log.e(TAG, "Error while trying to lock device.", e); } @@ -716,6 +720,18 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, }; } + private void lockProfiles() { + final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE); + final TrustManager tm = (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE); + final int currentUserId = getCurrentUser().id; + final int[] profileIds = um.getEnabledProfileIds(currentUserId); + for (final int id : profileIds) { + if (id != currentUserId) { + tm.setDeviceLockedForUser(id, true); + } + } + } + private UserInfo getCurrentUser() { try { return ActivityManager.getService().getCurrentUser(); diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java index f867b342c8de..c5e66f9f4f99 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java @@ -79,7 +79,6 @@ public class KeyguardSliceProvider extends SliceProvider implements private DateFormat mDateFormat; private String mLastText; private boolean mRegistered; - private boolean mRegisteredEveryMinute; private String mNextAlarm; private NextAlarmController mNextAlarmController; protected AlarmManager mAlarmManager; @@ -175,7 +174,7 @@ public class KeyguardSliceProvider extends SliceProvider implements mZenModeController = new ZenModeControllerImpl(getContext(), mHandler); mZenModeController.addCallback(this); mDatePattern = getContext().getString(R.string.system_ui_aod_date_pattern); - registerClockUpdate(false /* everyMinute */); + registerClockUpdate(); updateClock(); return true; } @@ -214,22 +213,13 @@ public class KeyguardSliceProvider extends SliceProvider implements /** * Registers a broadcast receiver for clock updates, include date, time zone and manually * changing the date/time via the settings app. - * - * @param everyMinute {@code true} if you also want updates every minute. */ - protected void registerClockUpdate(boolean everyMinute) { + private void registerClockUpdate() { if (mRegistered) { - if (mRegisteredEveryMinute == everyMinute) { - return; - } else { - unregisterClockUpdate(); - } + return; } IntentFilter filter = new IntentFilter(); - if (everyMinute) { - filter.addAction(Intent.ACTION_TIME_TICK); - } filter.addAction(Intent.ACTION_DATE_CHANGED); filter.addAction(Intent.ACTION_TIME_CHANGED); filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); @@ -237,15 +227,6 @@ public class KeyguardSliceProvider extends SliceProvider implements getContext().registerReceiver(mIntentReceiver, filter, null /* permission*/, null /* scheduler */); mRegistered = true; - mRegisteredEveryMinute = everyMinute; - } - - protected void unregisterClockUpdate() { - if (!mRegistered) { - return; - } - getContext().unregisterReceiver(mIntentReceiver); - mRegistered = false; } @VisibleForTesting diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java index c6bb17c2d133..065e9cc2d1d3 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java @@ -198,7 +198,13 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { showWarningNotification(); mShowing = SHOWING_WARNING; } else if (mShowAutoSaverSuggestion) { - showAutoSaverSuggestionNotification(); + // Once we showed the notification, don't show it again until it goes SHOWING_NOTHING. + // This shouldn't be needed, because we have a delete intent on this notification + // so when it's dismissed we should notice it and clear mShowAutoSaverSuggestion, + // However we double check here just in case the dismiss intent broadcast is delayed. + if (mShowing != SHOWING_AUTO_SAVER_SUGGESTION) { + showAutoSaverSuggestionNotification(); + } mShowing = SHOWING_AUTO_SAVER_SUGGESTION; } else { mNoMan.cancelAsUser(TAG_BATTERY, SystemMessage.NOTE_BAD_CHARGER, UserHandle.ALL); @@ -303,7 +309,9 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { private PendingIntent pendingBroadcast(String action) { return PendingIntent.getBroadcastAsUser(mContext, 0, - new Intent(action).setPackage(mContext.getPackageName()), 0, UserHandle.CURRENT); + new Intent(action).setPackage(mContext.getPackageName()) + .setFlags(Intent.FLAG_RECEIVER_FOREGROUND), + 0, UserHandle.CURRENT); } private static Intent settings(String action) { diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsOnboarding.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsOnboarding.java index 31933d011518..d16e1b1429b4 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsOnboarding.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsOnboarding.java @@ -69,7 +69,8 @@ public class RecentsOnboarding { private static final boolean RESET_PREFS_FOR_DEBUG = false; private static final boolean ONBOARDING_ENABLED = true; private static final long SHOW_DELAY_MS = 500; - private static final long SHOW_HIDE_DURATION_MS = 300; + private static final long SHOW_DURATION_MS = 300; + private static final long HIDE_DURATION_MS = 100; // Show swipe-up tips after opening overview from home this number of times. private static final int SWIPE_UP_SHOW_ON_OVERVIEW_OPENED_FROM_HOME_COUNT = 3; // Show quick scrub tips after opening overview this number of times. @@ -93,7 +94,6 @@ public class RecentsOnboarding { private boolean mOverviewProxyListenerRegistered; private boolean mTaskListenerRegistered; private boolean mLayoutAttachedToWindow; - private int mLastTaskId; private boolean mHasDismissedSwipeUpTip; private boolean mHasDismissedQuickScrubTip; private int mNumAppsLaunchedSinceSwipeUpTipDismiss; @@ -111,14 +111,8 @@ public class RecentsOnboarding { hide(true); return; } - if (info.id == mLastTaskId) { - // We only count launches that go to a new task. - return; - } int activityType = info.configuration.windowConfiguration.getActivityType(); if (activityType == ACTIVITY_TYPE_STANDARD) { - mLastTaskId = info.id; - boolean alreadySeenSwipeUpOnboarding = hasSeenSwipeUpOnboarding(); boolean alreadySeenQuickScrubsOnboarding = hasSeenQuickScrubOnboarding(); if (alreadySeenSwipeUpOnboarding && alreadySeenQuickScrubsOnboarding) { @@ -179,6 +173,11 @@ public class RecentsOnboarding { } @Override + public void onQuickStepStarted() { + hide(true); + } + + @Override public void onQuickScrubStarted() { boolean alreadySeenQuickScrubsOnboarding = hasSeenQuickScrubOnboarding(); if (!alreadySeenQuickScrubsOnboarding) { @@ -299,7 +298,7 @@ public class RecentsOnboarding { mHasDismissedQuickScrubTip = false; mNumAppsLaunchedSinceSwipeUpTipDismiss = 0; mOverviewOpenedCountSinceQuickScrubTipDismiss = 0; - hide(false); + hide(true); } public void onConfigurationChanged(Configuration newConfiguration) { @@ -312,31 +311,21 @@ public class RecentsOnboarding { if (!shouldShow()) { return; } - if (mLayoutAttachedToWindow) { - hide(false); - } mDismissView.setTag(stringRes); mLayout.setTag(stringRes); mTextView.setText(stringRes); // Only show in portrait. int orientation = mContext.getResources().getConfiguration().orientation; - if (orientation == Configuration.ORIENTATION_PORTRAIT) { + if (!mLayoutAttachedToWindow && orientation == Configuration.ORIENTATION_PORTRAIT) { mLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE); mWindowManager.addView(mLayout, getWindowLayoutParams()); - int layoutHeight = mLayout.getHeight(); - if (layoutHeight == 0) { - mLayout.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); - layoutHeight = mLayout.getMeasuredHeight(); - } - mLayout.setTranslationY(layoutHeight); mLayout.setAlpha(0); mLayout.animate() - .translationY(0) .alpha(1f) .withLayer() .setStartDelay(SHOW_DELAY_MS) - .setDuration(SHOW_HIDE_DURATION_MS) + .setDuration(SHOW_DURATION_MS) .setInterpolator(new DecelerateInterpolator()) .start(); } @@ -356,10 +345,10 @@ public class RecentsOnboarding { if (mLayoutAttachedToWindow) { if (animate) { mLayout.animate() - .translationY(mLayout.getHeight()) .alpha(0f) .withLayer() - .setDuration(SHOW_HIDE_DURATION_MS) + .setStartDelay(0) + .setDuration(HIDE_DURATION_MS) .setInterpolator(new AccelerateInterpolator()) .withEndAction(() -> mWindowManager.removeViewImmediate(mLayout)) .start(); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index 227f2d2be0a9..8a0d7e38f875 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -129,13 +129,6 @@ class SaveImageInBackgroundTask extends AsyncTask<Void, Void, Void> { private final int mImageWidth; private final int mImageHeight; - // WORKAROUND: We want the same notification across screenshots that we update so that we don't - // spam a user's notification drawer. However, we only show the ticker for the saving state - // and if the ticker text is the same as the previous notification, then it will not show. So - // for now, we just add and remove a space from the ticker text to trigger the animation when - // necessary. - private static boolean mTickerAddSpace; - SaveImageInBackgroundTask(Context context, SaveImageInBackgroundData data, NotificationManager nManager) { Resources r = context.getResources(); @@ -176,8 +169,6 @@ class SaveImageInBackgroundTask extends AsyncTask<Void, Void, Void> { Bitmap icon = generateAdjustedHwBitmap(data.image, iconSize, iconSize, matrix, paint, overlayColor); - // Show the intermediate notification - mTickerAddSpace = !mTickerAddSpace; mNotificationManager = nManager; final long now = System.currentTimeMillis(); @@ -199,8 +190,6 @@ class SaveImageInBackgroundTask extends AsyncTask<Void, Void, Void> { mNotificationBuilder = new Notification.Builder(context, NotificationChannels.SCREENSHOTS_HEADSUP) - .setTicker(r.getString(R.string.screenshot_saving_ticker) - + (mTickerAddSpace ? " " : "")) .setContentTitle(r.getString(R.string.screenshot_saving_title)) .setSmallIcon(R.drawable.stat_notify_image) .setWhen(now) diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java index c8ee87357127..6d677ab74bee 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java @@ -180,16 +180,20 @@ public class DividerView extends FrameLayout implements OnTouchListener, @Override public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(host, info); + final DividerSnapAlgorithm snapAlgorithm = getSnapAlgorithm(); if (isHorizontalDivision()) { info.addAction(new AccessibilityAction(R.id.action_move_tl_full, mContext.getString(R.string.accessibility_action_divider_top_full))); - if (mSnapAlgorithm.isFirstSplitTargetAvailable()) { + if (snapAlgorithm.isFirstSplitTargetAvailable()) { info.addAction(new AccessibilityAction(R.id.action_move_tl_70, mContext.getString(R.string.accessibility_action_divider_top_70))); } - info.addAction(new AccessibilityAction(R.id.action_move_tl_50, + if (snapAlgorithm.showMiddleSplitTargetForAccessibility()) { + // Only show the middle target if there are more than 1 split target + info.addAction(new AccessibilityAction(R.id.action_move_tl_50, mContext.getString(R.string.accessibility_action_divider_top_50))); - if (mSnapAlgorithm.isLastSplitTargetAvailable()) { + } + if (snapAlgorithm.isLastSplitTargetAvailable()) { info.addAction(new AccessibilityAction(R.id.action_move_tl_30, mContext.getString(R.string.accessibility_action_divider_top_30))); } @@ -198,13 +202,16 @@ public class DividerView extends FrameLayout implements OnTouchListener, } else { info.addAction(new AccessibilityAction(R.id.action_move_tl_full, mContext.getString(R.string.accessibility_action_divider_left_full))); - if (mSnapAlgorithm.isFirstSplitTargetAvailable()) { + if (snapAlgorithm.isFirstSplitTargetAvailable()) { info.addAction(new AccessibilityAction(R.id.action_move_tl_70, mContext.getString(R.string.accessibility_action_divider_left_70))); } - info.addAction(new AccessibilityAction(R.id.action_move_tl_50, + if (snapAlgorithm.showMiddleSplitTargetForAccessibility()) { + // Only show the middle target if there are more than 1 split target + info.addAction(new AccessibilityAction(R.id.action_move_tl_50, mContext.getString(R.string.accessibility_action_divider_left_50))); - if (mSnapAlgorithm.isLastSplitTargetAvailable()) { + } + if (snapAlgorithm.isLastSplitTargetAvailable()) { info.addAction(new AccessibilityAction(R.id.action_move_tl_30, mContext.getString(R.string.accessibility_action_divider_left_30))); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java index 8b6b5fe5d542..364ed80638de 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java @@ -581,7 +581,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView } } - private void setBackgroundTintColor(int color) { + protected void setBackgroundTintColor(int color) { if (color != mCurrentBackgroundTint) { mCurrentBackgroundTint = color; if (color == mNormalColor) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java index 27fa48aee216..991b47e14028 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java @@ -469,6 +469,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView updateNotificationColor(); if (mMenuRow != null) { mMenuRow.onNotificationUpdated(mStatusBarNotification); + mMenuRow.setAppName(mAppName); } if (mIsSummaryWithChildren) { mChildrenContainer.recreateNotificationHeader(mExpandClickListener); @@ -1089,6 +1090,15 @@ public class ExpandableNotificationRow extends ActivatableNotificationView } } + @Override + protected void setBackgroundTintColor(int color) { + super.setBackgroundTintColor(color); + NotificationContentView view = getShowingLayout(); + if (view != null) { + view.setBackgroundTintColor(color); + } + } + public void closeRemoteInput() { for (NotificationContentView l : mLayouts) { l.closeRemoteInput(); @@ -2599,6 +2609,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView @Override protected boolean disallowSingleClick(MotionEvent event) { + if (areGutsExposed()) { + return false; + } float x = event.getX(); float y = event.getY(); NotificationHeaderView header = getVisibleNotificationHeader(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBlockingHelperManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBlockingHelperManager.java index 20e5f86ee097..1b613cbcaa41 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBlockingHelperManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBlockingHelperManager.java @@ -23,8 +23,10 @@ import android.service.notification.StatusBarNotification; import android.support.annotation.VisibleForTesting; import android.util.Log; +import com.android.internal.logging.MetricsLogger; import com.android.systemui.Dependency; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; +import com.android.systemui.statusbar.notification.NotificationCounters; import com.android.systemui.statusbar.phone.StatusBar; import java.util.Collections; @@ -97,6 +99,9 @@ public class NotificationBlockingHelperManager { // We don't care about the touch origin (x, y) since we're opening guts without any // explicit user interaction. manager.openGuts(mBlockingHelperRow, 0, 0, menuRow.getLongpressMenuItem(mContext)); + + Dependency.get(MetricsLogger.class) + .count(NotificationCounters.BLOCKING_HELPER_SHOWN, 1); return true; } return false; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java index 285f639224f6..8fa1b67518b4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java @@ -887,6 +887,12 @@ public class NotificationContentView extends FrameLayout { mContainingNotification.setContentBackground(customBackgroundColor, animate, this); } + public void setBackgroundTintColor(int color) { + if (mExpandedSmartReplyView != null) { + mExpandedSmartReplyView.setBackgroundTintColor(color); + } + } + public int getVisibleType() { return mVisibleType; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGutsManager.java index dff5f3814f68..46600cf71991 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGutsManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGutsManager.java @@ -372,7 +372,7 @@ public class NotificationGutsManager implements Dumpable { @Override public void run() { if (row.getWindowToken() == null) { - Log.e(TAG, "Trying to show notification guts, but not attached to " + Log.e(TAG, "Trying to show notification guts in post(), but not attached to " + "window"); return; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java index ec49f436b7d0..98e926807431 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java @@ -91,22 +91,24 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G private boolean mIsForBlockingHelper; private boolean mNegativeUserSentiment; - /** Counter tag that describes how the user exit or quit out of this view. */ - private String mExitReasonCounter = NotificationCounters.BLOCKING_HELPER_DISMISSED; + /** + * String that describes how the user exit or quit out of this view, also used as a counter tag. + */ + private String mExitReason = NotificationCounters.BLOCKING_HELPER_DISMISSED; private OnClickListener mOnKeepShowing = v -> { - mExitReasonCounter = NotificationCounters.BLOCKING_HELPER_KEEP_SHOWING; + mExitReason = NotificationCounters.BLOCKING_HELPER_KEEP_SHOWING; closeControls(v); }; private OnClickListener mOnStopOrMinimizeNotifications = v -> { - mExitReasonCounter = NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS; + mExitReason = NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS; swapContent(false); }; private OnClickListener mOnUndo = v -> { // Reset exit counter that we'll log and record an undo event separately (not an exit event) - mExitReasonCounter = NotificationCounters.BLOCKING_HELPER_DISMISSED; + mExitReason = NotificationCounters.BLOCKING_HELPER_DISMISSED; logBlockingHelperCounter(NotificationCounters.BLOCKING_HELPER_UNDO); swapContent(true); }; @@ -197,8 +199,6 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G bindHeader(); bindPrompt(); bindButtons(); - - logBlockingHelperCounter(NotificationCounters.BLOCKING_HELPER_SHOWN); } private void bindHeader() throws RemoteException { @@ -300,7 +300,9 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G private void saveImportance() { if (!mIsNonblockable) { - if (mCheckSaveListener != null) { + // Only go through the lock screen/bouncer if the user didn't hit 'Keep showing'. + if (mCheckSaveListener != null + && !NotificationCounters.BLOCKING_HELPER_KEEP_SHOWING.equals(mExitReason)) { mCheckSaveListener.checkSave(this::updateImportance, mSbn); } else { updateImportance(); @@ -495,7 +497,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G if (save) { saveImportance(); } - logBlockingHelperCounter(mExitReasonCounter); + logBlockingHelperCounter(mExitReason); return false; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java index 19980a221576..04c500fc8f6a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java @@ -16,6 +16,9 @@ package com.android.systemui.statusbar; +import static com.android.systemui.statusbar.StatusBarIconView.STATE_DOT; +import static com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN; +import static com.android.systemui.statusbar.StatusBarIconView.STATE_ICON; import static com.android.systemui.statusbar.policy.DarkIconDispatcher.getTint; import static com.android.systemui.statusbar.policy.DarkIconDispatcher.isInArea; @@ -24,10 +27,14 @@ import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.Rect; import android.util.AttributeSet; +import android.util.Log; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; +import android.widget.FrameLayout; import android.widget.ImageView; +import android.widget.LinearLayout; import com.android.internal.annotations.VisibleForTesting; import com.android.keyguard.AlphaOptimizedLinearLayout; import com.android.settingslib.graph.SignalDrawable; @@ -35,10 +42,14 @@ import com.android.systemui.R; import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver; -public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements DarkReceiver, +public class StatusBarMobileView extends FrameLayout implements DarkReceiver, StatusIconDisplayable { private static final String TAG = "StatusBarMobileView"; + /// Used to show etc dots + private StatusBarIconView mDotView; + /// The main icon view + private LinearLayout mMobileGroup; private String mSlot; private MobileIconState mState; private SignalDrawable mMobileDrawable; @@ -47,12 +58,17 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D private ImageView mOut; private ImageView mMobile, mMobileType, mMobileRoaming; private View mMobileRoamingSpace; + private int mVisibleState = -1; - public static StatusBarMobileView fromContext(Context context) { + public static StatusBarMobileView fromContext(Context context, String slot) { LayoutInflater inflater = LayoutInflater.from(context); - - return (StatusBarMobileView) + StatusBarMobileView v = (StatusBarMobileView) inflater.inflate(R.layout.status_bar_mobile_signal_group, null); + + v.setSlot(slot); + v.init(); + v.setVisibleState(STATE_ICON); + return v; } public StatusBarMobileView(Context context) { @@ -72,14 +88,8 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D super(context, attrs, defStyleAttr, defStyleRes); } - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - init(); - } - private void init() { + mMobileGroup = findViewById(R.id.mobile_group); mMobile = findViewById(R.id.mobile_signal); mMobileType = findViewById(R.id.mobile_type); mMobileRoaming = findViewById(R.id.mobile_roaming); @@ -90,6 +100,18 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D mMobileDrawable = new SignalDrawable(getContext()); mMobile.setImageDrawable(mMobileDrawable); + + initDotView(); + } + + private void initDotView() { + mDotView = new StatusBarIconView(mContext, mSlot, null); + mDotView.setVisibleState(STATE_DOT); + + int width = mContext.getResources().getDimensionPixelSize(R.dimen.status_bar_icon_size); + LayoutParams lp = new LayoutParams(width, width); + lp.gravity = Gravity.CENTER_VERTICAL | Gravity.START; + addView(mDotView, lp); } public void applyMobileState(MobileIconState state) { @@ -113,9 +135,9 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D private void initViewState() { setContentDescription(mState.contentDescription); if (!mState.visible) { - setVisibility(View.GONE); + mMobileGroup.setVisibility(View.GONE); } else { - setVisibility(View.VISIBLE); + mMobileGroup.setVisibility(View.VISIBLE); } mMobileDrawable.setLevel(mState.strengthId); if (mState.typeId > 0) { @@ -137,7 +159,7 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D private void updateState(MobileIconState state) { setContentDescription(state.contentDescription); if (mState.visible != state.visible) { - setVisibility(state.visible ? View.VISIBLE : View.GONE); + mMobileGroup.setVisibility(state.visible ? View.VISIBLE : View.GONE); } if (mState.strengthId != state.strengthId) { mMobileDrawable.setLevel(state.strengthId); @@ -173,6 +195,8 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D mOut.setImageTintList(color); mMobileType.setImageTintList(color); mMobileRoaming.setImageTintList(color); + mDotView.setDecorColor(tint); + mDotView.setIconColor(tint, false); } @Override @@ -194,11 +218,12 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D mOut.setImageTintList(list); mMobileType.setImageTintList(list); mMobileRoaming.setImageTintList(list); + mDotView.setDecorColor(color); } @Override public void setDecorColor(int color) { - //TODO: May also not be needed + mDotView.setDecorColor(color); } @Override @@ -208,12 +233,30 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D @Override public void setVisibleState(int state) { - //TODO: May not be needed. Mobile is always expected to be visible (not a dot) + if (state == mVisibleState) { + return; + } + + mVisibleState = state; + switch (state) { + case STATE_ICON: + mMobileGroup.setVisibility(View.VISIBLE); + mDotView.setVisibility(View.GONE); + break; + case STATE_DOT: + mMobileGroup.setVisibility(View.INVISIBLE); + mDotView.setVisibility(View.VISIBLE); + break; + case STATE_HIDDEN: + default: + setVisibility(View.INVISIBLE); + break; + } } @Override public int getVisibleState() { - return 0; + return mVisibleState; } @VisibleForTesting diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java index 3ed8cce21ac5..a09650867aa1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java @@ -37,10 +37,10 @@ public class HybridGroupManager { private final NotificationDozeHelper mDozer; private final ViewGroup mParent; - private final float mOverflowNumberSizeDark; - private final int mOverflowNumberPaddingDark; - private final float mOverflowNumberSize; - private final int mOverflowNumberPadding; + private float mOverflowNumberSizeDark; + private int mOverflowNumberPaddingDark; + private float mOverflowNumberSize; + private int mOverflowNumberPadding; private int mOverflowNumberColor; private int mOverflowNumberColorDark; @@ -50,7 +50,10 @@ public class HybridGroupManager { mContext = ctx; mParent = parent; mDozer = new NotificationDozeHelper(); + initDimens(); + } + public void initDimens() { Resources res = mContext.getResources(); mOverflowNumberSize = res.getDimensionPixelSize( R.dimen.group_overflow_number_size); @@ -148,6 +151,17 @@ public class HybridGroupManager { return reusableView; } + public TextView bindOverflowNumberAmbient(TextView titleView, Notification notification, + int number) { + String text = mContext.getResources().getString( + R.string.notification_group_overflow_indicator_ambient, + resolveTitle(notification), number); + if (!text.equals(titleView.getText())) { + titleView.setText(text); + } + return titleView; + } + public void setOverflowNumberDark(TextView view, boolean dark, boolean fade, long delay) { mDozer.setIntensityDark((f)->{ mDarkAmount = f; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java index 9fcb0905263c..ee8325003870 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java @@ -212,7 +212,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue } public void hideClock(boolean animate) { - animateHide(mClockView, animate); + animateHiddenState(mClockView, View.GONE, animate); } public void showClock(boolean animate) { @@ -240,21 +240,29 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue } /** - * Hides a view. + * Animate a view to INVISIBLE or GONE */ - private void animateHide(final View v, boolean animate) { + private void animateHiddenState(final View v, int state, boolean animate) { v.animate().cancel(); if (!animate) { v.setAlpha(0f); - v.setVisibility(View.INVISIBLE); + v.setVisibility(state); return; } + v.animate() .alpha(0f) .setDuration(160) .setStartDelay(0) .setInterpolator(Interpolators.ALPHA_OUT) - .withEndAction(() -> v.setVisibility(View.INVISIBLE)); + .withEndAction(() -> v.setVisibility(state)); + } + + /** + * Hides a view. + */ + private void animateHide(final View v, boolean animate) { + animateHiddenState(v, View.INVISIBLE, animate); } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java index 46b4078a1801..e0e991b4993f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java @@ -237,9 +237,8 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da public void addMobileView(MobileIconState state) { Log.d(TAG, "addMobileView: "); - StatusBarMobileView view = StatusBarMobileView.fromContext(mContext); + StatusBarMobileView view = StatusBarMobileView.fromContext(mContext, state.slot); - view.setSlot(state.slot); view.applyMobileState(state); view.setStaticDrawableColor(mColor); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java index 6576eb7dda9b..c4a78149f42e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java @@ -266,6 +266,7 @@ public class FingerprintUnlockController extends KeyguardUpdateMonitorCallback { } private void showBouncer() { + mStatusBarKeyguardViewManager.showBouncer(false); mStatusBarKeyguardViewManager.animateCollapsePanels( FINGERPRINT_COLLAPSE_SPEEDUP_FACTOR); mPendingShowBouncer = false; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java index f13415103b9d..48eb3e84a4f5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java @@ -76,7 +76,7 @@ public class KeyguardBouncer { protected KeyguardHostView mKeyguardView; private final Runnable mResetRunnable = ()-> { if (mKeyguardView != null) { - mKeyguardView.reset(); + mKeyguardView.resetSecurityContainer(); } }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 533d5ecfab23..98f9f1abd301 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -88,6 +88,7 @@ import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_DISABL import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_HIDE_BACK_BUTTON; import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_SHOW_OVERVIEW_BUTTON; import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_OVERVIEW; +import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_ROTATION; public class NavigationBarView extends FrameLayout implements PluginListener<NavGesture> { final static boolean DEBUG = false; @@ -116,6 +117,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav private Rect mHomeButtonBounds = new Rect(); private Rect mBackButtonBounds = new Rect(); private Rect mRecentsButtonBounds = new Rect(); + private Rect mRotationButtonBounds = new Rect(); private int[] mTmpPosition = new int[2]; private KeyButtonDrawable mBackIcon, mBackLandIcon, mBackAltIcon, mBackAltLandIcon; @@ -341,6 +343,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav mDownHitTarget = HIT_TARGET_HOME; } else if (mRecentsButtonBounds.contains(x, y)) { mDownHitTarget = HIT_TARGET_OVERVIEW; + } else if (mRotationButtonBounds.contains(x, y)) { + mDownHitTarget = HIT_TARGET_ROTATION; } break; } @@ -893,6 +897,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav updateButtonLocationOnScreen(getBackButton(), mBackButtonBounds); updateButtonLocationOnScreen(getHomeButton(), mHomeButtonBounds); updateButtonLocationOnScreen(getRecentsButton(), mRecentsButtonBounds); + updateButtonLocationOnScreen(getRotateSuggestionButton(), mRotationButtonBounds); mGestureHelper.onLayout(changed, left, top, right, bottom); mRecentsOnboarding.setNavBarHeight(getMeasuredHeight()); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index b650944403cb..b475b64eb201 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -2267,7 +2267,7 @@ public class NotificationPanelView extends PanelView implements } public void onScreenTurningOn() { - mKeyguardStatusView.refreshTime(); + mKeyguardStatusView.dozeTimeTick(); } @Override @@ -2690,7 +2690,7 @@ public class NotificationPanelView extends PanelView implements } public void dozeTimeTick() { - mKeyguardStatusView.refreshTime(); + mKeyguardStatusView.dozeTimeTick(); mKeyguardBottomArea.dozeTimeTick(); if (mDarkAmount > 0) { positionClockAndNotifications(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 061677c8d1c3..65cb56c7cc13 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -249,7 +249,7 @@ import java.util.Map; public class StatusBar extends SystemUI implements DemoMode, DragDownHelper.DragDownCallback, ActivityStarter, OnUnlockMethodChangedListener, - OnHeadsUpChangedListener, CommandQueue.Callbacks, + OnHeadsUpChangedListener, CommandQueue.Callbacks, ZenModeController.Callback, ColorExtractor.OnColorsChangedListener, ConfigurationListener, NotificationPresenter { public static final boolean MULTIUSER_DEBUG = false; @@ -785,12 +785,7 @@ public class StatusBar extends SystemUI implements DemoMode, // into fragments, but the rest here, it leaves some awkward lifecycle and whatnot. mNotificationPanel = mStatusBarWindow.findViewById(R.id.notification_panel); mStackScroller = mStatusBarWindow.findViewById(R.id.notification_stack_scroller); - mZenController.addCallback(new ZenModeController.Callback() { - @Override - public void onZenChanged(int zen) { - updateEmptyShadeView(); - } - }); + mZenController.addCallback(this); mActivityLaunchAnimator = new ActivityLaunchAnimator(mStatusBarWindow, this, mNotificationPanel, @@ -3376,6 +3371,7 @@ public class StatusBar extends SystemUI implements DemoMode, Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(null); mDeviceProvisionedController.removeCallback(mUserSetupObserver); Dependency.get(ConfigurationController.class).removeCallback(this); + mZenController.removeCallback(this); mAppOpsListener.destroy(); } @@ -5536,6 +5532,11 @@ public class StatusBar extends SystemUI implements DemoMode, } @Override + public void onZenChanged(int zen) { + updateEmptyShadeView(); + } + + @Override public void showAssistDisclosure() { if (mAssistManager != null) { mAssistManager.showDisclosure(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java index 1ba37a9bf9dd..3b9ee8bcd378 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java @@ -296,8 +296,7 @@ public interface StatusBarIconController { } private StatusBarMobileView onCreateStatusBarMobileView(String slot) { - StatusBarMobileView view = StatusBarMobileView.fromContext(mContext); - view.setSlot(slot); + StatusBarMobileView view = StatusBarMobileView.fromContext(mContext, slot); return view; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java index 4538977f7a6f..0811179e23d3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java @@ -49,7 +49,7 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { private static final String TAG = "StatusIconContainer"; private static final boolean DEBUG = false; private static final boolean DEBUG_OVERFLOW = false; - // Max 5 status icons including battery + // Max 8 status icons including battery private static final int MAX_ICONS = 7; private static final int MAX_DOTS = 1; @@ -152,7 +152,7 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { int visibleCount = mMeasureViews.size(); int maxVisible = visibleCount <= MAX_ICONS ? MAX_ICONS : MAX_ICONS - 1; - int totalWidth = getPaddingStart() + getPaddingEnd(); + int totalWidth = mPaddingLeft + mPaddingRight; boolean trackWidth = true; // Measure all children so that they report the correct width @@ -208,8 +208,8 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { */ private void calculateIconTranslations() { mLayoutStates.clear(); - float width = getWidth() - getPaddingEnd(); - float translationX = width; + float width = getWidth(); + float translationX = width - getPaddingEnd(); float contentStart = getPaddingStart(); int childCount = getChildCount(); // Underflow === don't show content until that index @@ -344,10 +344,11 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { animate = true; } - icon.setVisibleState(visibleState); if (animate) { animateTo(view, animationProperties); + icon.setVisibleState(visibleState); } else { + icon.setVisibleState(visibleState); super.applyToView(view); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java index 59bf982bcfdb..310f14c2fca7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java @@ -565,6 +565,11 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { final InputConnection inputConnection = super.onCreateInputConnection(outAttrs); + //if pinned, set imeOption to keep the behavior like in portrait. + if (mRemoteInputView != null && mRemoteInputView.mEntry.row.isPinned()) { + outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI + | EditorInfo.IME_FLAG_NO_FULLSCREEN; + } if (mShowImeOnInputConnection && inputConnection != null) { final InputMethodManager imm = InputMethodManager.getInstance(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java index 351868dd8b7b..cc802a8f85d5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java @@ -1,12 +1,17 @@ package com.android.systemui.statusbar.policy; +import android.annotation.ColorInt; import android.app.PendingIntent; import android.app.RemoteInput; import android.content.Context; import android.content.Intent; +import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.InsetDrawable; import android.graphics.drawable.RippleDrawable; import android.os.Bundle; import android.text.Layout; @@ -22,6 +27,7 @@ import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import android.widget.Button; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.NotificationColorUtil; import com.android.keyguard.KeyguardHostView.OnDismissAction; import com.android.systemui.Dependency; import com.android.systemui.R; @@ -75,6 +81,23 @@ public class SmartReplyView extends ViewGroup { private View mSmartReplyContainer; + @ColorInt + private int mCurrentBackgroundColor; + @ColorInt + private final int mDefaultBackgroundColor; + @ColorInt + private final int mDefaultStrokeColor; + @ColorInt + private final int mDefaultTextColor; + @ColorInt + private final int mDefaultTextColorDarkBg; + @ColorInt + private final int mRippleColorDarkBg; + @ColorInt + private final int mRippleColor; + private final int mStrokeWidth; + private final double mMinStrokeContrast; + public SmartReplyView(Context context, AttributeSet attrs) { super(context, attrs); mConstants = Dependency.get(SmartReplyConstants.class); @@ -83,9 +106,21 @@ public class SmartReplyView extends ViewGroup { mHeightUpperLimit = NotificationUtils.getFontScaledHeight(mContext, R.dimen.smart_reply_button_max_height); + mCurrentBackgroundColor = context.getColor(R.color.smart_reply_button_background); + mDefaultBackgroundColor = mCurrentBackgroundColor; + mDefaultTextColor = mContext.getColor(R.color.smart_reply_button_text); + mDefaultTextColorDarkBg = mContext.getColor(R.color.smart_reply_button_text_dark_bg); + mDefaultStrokeColor = mContext.getColor(R.color.smart_reply_button_stroke); + mRippleColor = mContext.getColor(R.color.notification_ripple_untinted_color); + mRippleColorDarkBg = Color.argb(Color.alpha(mRippleColor), + 255 /* red */, 255 /* green */, 255 /* blue */); + mMinStrokeContrast = NotificationColorUtil.calculateContrast(mDefaultStrokeColor, + mDefaultBackgroundColor); + int spacing = 0; int singleLineButtonPaddingHorizontal = 0; int doubleLineButtonPaddingHorizontal = 0; + int strokeWidth = 0; final TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.SmartReplyView, 0, 0); @@ -102,10 +137,14 @@ public class SmartReplyView extends ViewGroup { case R.styleable.SmartReplyView_doubleLineButtonPaddingHorizontal: doubleLineButtonPaddingHorizontal = arr.getDimensionPixelSize(i, 0); break; + case R.styleable.SmartReplyView_buttonStrokeWidth: + strokeWidth = arr.getDimensionPixelSize(i, 0); + break; } } arr.recycle(); + mStrokeWidth = strokeWidth; mSpacing = spacing; mSingleLineButtonPaddingHorizontal = singleLineButtonPaddingHorizontal; mDoubleLineButtonPaddingHorizontal = doubleLineButtonPaddingHorizontal; @@ -139,6 +178,7 @@ public class SmartReplyView extends ViewGroup { View smartReplyContainer) { mSmartReplyContainer = smartReplyContainer; removeAllViews(); + mCurrentBackgroundColor = mDefaultBackgroundColor; if (remoteInput != null && pendingIntent != null) { CharSequence[] choices = remoteInput.getChoices(); if (choices != null) { @@ -194,6 +234,7 @@ public class SmartReplyView extends ViewGroup { } }); + setColors(b, mCurrentBackgroundColor, mDefaultStrokeColor, mDefaultTextColor, mRippleColor); return b; } @@ -454,12 +495,14 @@ public class SmartReplyView extends ViewGroup { // measured with the wrong number of lines). if (child.getPaddingLeft() != buttonPaddingHorizontal) { requiresNewMeasure = true; - if (buttonPaddingHorizontal == mSingleLineButtonPaddingHorizontal) { - // Decrease padding (2->1 line). - newWidth -= mSingleToDoubleLineButtonWidthIncrease; - } else { - // Increase padding (1->2 lines). - newWidth += mSingleToDoubleLineButtonWidthIncrease; + if (newWidth != Integer.MAX_VALUE) { + if (buttonPaddingHorizontal == mSingleLineButtonPaddingHorizontal) { + // Change padding (2->1 line). + newWidth -= mSingleToDoubleLineButtonWidthIncrease; + } else { + // Change padding (1->2 lines). + newWidth += mSingleToDoubleLineButtonWidthIncrease; + } } child.setPadding(buttonPaddingHorizontal, child.getPaddingTop(), buttonPaddingHorizontal, child.getPaddingBottom()); @@ -523,6 +566,51 @@ public class SmartReplyView extends ViewGroup { return lp.show && super.drawChild(canvas, child, drawingTime); } + public void setBackgroundTintColor(int backgroundColor) { + if (backgroundColor == mCurrentBackgroundColor) { + // Same color ignoring. + return; + } + mCurrentBackgroundColor = backgroundColor; + + final boolean dark = !NotificationColorUtil.isColorLight(backgroundColor); + + int textColor = NotificationColorUtil.ensureTextContrast( + dark ? mDefaultTextColorDarkBg : mDefaultTextColor, + backgroundColor | 0xff000000, dark); + int strokeColor = NotificationColorUtil.ensureContrast( + mDefaultStrokeColor, backgroundColor | 0xff000000, dark, mMinStrokeContrast); + int rippleColor = dark ? mRippleColorDarkBg : mRippleColor; + + int childCount = getChildCount(); + for (int i = 0; i < childCount; i++) { + final Button child = (Button) getChildAt(i); + setColors(child, backgroundColor, strokeColor, textColor, rippleColor); + } + } + + private void setColors(Button button, int backgroundColor, int strokeColor, int textColor, + int rippleColor) { + Drawable drawable = button.getBackground(); + if (drawable instanceof RippleDrawable) { + // Mutate in case other notifications are using this drawable. + drawable = drawable.mutate(); + RippleDrawable ripple = (RippleDrawable) drawable; + ripple.setColor(ColorStateList.valueOf(rippleColor)); + Drawable inset = ripple.getDrawable(0); + if (inset instanceof InsetDrawable) { + Drawable background = ((InsetDrawable) inset).getDrawable(); + if (background instanceof GradientDrawable) { + GradientDrawable gradientDrawable = (GradientDrawable) background; + gradientDrawable.setColor(backgroundColor); + gradientDrawable.setStroke(mStrokeWidth, strokeColor); + } + } + button.setBackground(drawable); + } + button.setTextColor(textColor); + } + @VisibleForTesting static class LayoutParams extends ViewGroup.LayoutParams { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java index 339c115c77a3..2031b27c93f2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java @@ -36,6 +36,7 @@ import android.service.notification.Condition; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig.ZenRule; import android.util.Log; +import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.qs.GlobalSetting; @@ -112,6 +113,10 @@ public class ZenModeControllerImpl extends CurrentUserTracker implements ZenMode @Override public void addCallback(Callback callback) { + if (callback == null) { + Slog.e(TAG, "Attempted to add a null callback."); + return; + } mCallbacks.add(callback); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java index e5ab712e9bdd..55ec142444f2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java @@ -52,7 +52,7 @@ public class NotificationChildrenContainer extends ViewGroup { private static final int NUMBER_OF_CHILDREN_WHEN_COLLAPSED = 2; private static final int NUMBER_OF_CHILDREN_WHEN_SYSTEM_EXPANDED = 5; private static final int NUMBER_OF_CHILDREN_WHEN_CHILDREN_EXPANDED = 8; - private static final int NUMBER_OF_CHILDREN_WHEN_AMBIENT = 3; + private static final int NUMBER_OF_CHILDREN_WHEN_AMBIENT = 1; private static final AnimationProperties ALPHA_FADE_IN = new AnimationProperties() { private AnimationFilter mAnimationFilter = new AnimationFilter().animateAlpha(); @@ -121,8 +121,8 @@ public class NotificationChildrenContainer extends ViewGroup { public NotificationChildrenContainer(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); - initDimens(); mHybridGroupManager = new HybridGroupManager(getContext(), this); + initDimens(); setClipChildren(false); } @@ -148,6 +148,7 @@ public class NotificationChildrenContainer extends ViewGroup { mTranslationForHeader = res.getDimensionPixelSize( com.android.internal.R.dimen.notification_content_margin) - mNotificationHeaderMargin; + mHybridGroupManager.initDimens(); } @Override @@ -207,9 +208,9 @@ public class NotificationChildrenContainer extends ViewGroup { // We need to measure all children even the GONE ones, such that the heights are // calculated correctly as they are used to calculate how many we can fit on the screen. boolean isOverflow = i == overflowIndex; - child.setSingleLineWidthIndention(isOverflow && mOverflowNumber != null - ? mOverflowNumber.getMeasuredWidth() - : 0); + child.setSingleLineWidthIndention(isOverflow && mOverflowNumber != null && + !mContainingNotification.isShowingAmbient() + ? mOverflowNumber.getMeasuredWidth() : 0); child.measure(widthMeasureSpec, newHeightSpec); // layout the divider View divider = mDividers.get(i); @@ -393,8 +394,19 @@ public class NotificationChildrenContainer extends ViewGroup { int childCount = mChildren.size(); int maxAllowedVisibleChildren = getMaxAllowedVisibleChildren(true /* likeCollapsed */); if (childCount > maxAllowedVisibleChildren) { - mOverflowNumber = mHybridGroupManager.bindOverflowNumber( - mOverflowNumber, childCount - maxAllowedVisibleChildren); + int number = childCount - maxAllowedVisibleChildren; + mOverflowNumber = mHybridGroupManager.bindOverflowNumber(mOverflowNumber, number); + if (mContainingNotification.isShowingAmbient()) { + ExpandableNotificationRow overflowView = mChildren.get(0); + HybridNotificationView ambientSingleLineView = overflowView == null ? null + : overflowView.getAmbientSingleLineView(); + if (ambientSingleLineView != null) { + mHybridGroupManager.bindOverflowNumberAmbient( + ambientSingleLineView.getTitleView(), + mContainingNotification.getStatusBarNotification().getNotification(), + number); + } + } if (mGroupOverFlowState == null) { mGroupOverFlowState = new ViewState(); mNeverAppliedGroupState = true; @@ -616,16 +628,13 @@ public class NotificationChildrenContainer extends ViewGroup { } if (mOverflowNumber != null) { ExpandableNotificationRow overflowView = mChildren.get(Math.min( - getMaxAllowedVisibleChildren(true /* likeCollpased */), childCount) - 1); + getMaxAllowedVisibleChildren(true /* likeCollapsed */), childCount) - 1); mGroupOverFlowState.copyFrom(resultState.getViewStateForView(overflowView)); - if (mContainingNotification.isShowingAmbient() || !mChildrenExpanded) { - HybridNotificationView alignView = null; - if (mContainingNotification.isShowingAmbient()) { - alignView = overflowView.getAmbientSingleLineView(); - } else if (mUserLocked) { - alignView = overflowView.getSingleLineView(); - } + if (mContainingNotification.isShowingAmbient()) { + mGroupOverFlowState.alpha = 0.0f; + } else if (!mChildrenExpanded) { + HybridNotificationView alignView = overflowView.getSingleLineView(); if (alignView != null) { View mirrorView = alignView.getTextView(); if (mirrorView.getVisibility() == GONE) { @@ -634,9 +643,9 @@ public class NotificationChildrenContainer extends ViewGroup { if (mirrorView.getVisibility() == GONE) { mirrorView = alignView; } + mGroupOverFlowState.alpha = mirrorView.getAlpha(); mGroupOverFlowState.yTranslation += NotificationUtils.getRelativeYOffset( mirrorView, overflowView); - mGroupOverFlowState.alpha = mirrorView.getAlpha(); } } else { mGroupOverFlowState.yTranslation += mNotificationHeaderMargin; @@ -880,6 +889,7 @@ public class NotificationChildrenContainer extends ViewGroup { public void notifyShowAmbientChanged() { updateHeaderVisibility(false); + updateGroupOverflow(); } private void updateHeaderVisibility(boolean animate) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 7370c4c1c0d1..236ead0b12bc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -112,7 +112,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; -import java.util.Objects; import java.util.function.BiConsumer; /** @@ -2223,7 +2222,7 @@ public class NotificationStackScrollLayout extends ViewGroup } private void updateScrollability() { - boolean scrollable = getScrollRange() > 0; + boolean scrollable = !mQsExpanded && getScrollRange() > 0; if (scrollable != mScrollable) { mScrollable = scrollable; setFocusable(scrollable); @@ -3331,8 +3330,16 @@ public class NotificationStackScrollLayout extends ViewGroup private void generateTopPaddingEvent() { if (mTopPaddingNeedsAnimation) { - mAnimationEvents.add( - new AnimationEvent(null, AnimationEvent.ANIMATION_TYPE_TOP_PADDING_CHANGED)); + AnimationEvent event; + if (mAmbientState.isDark()) { + event = new AnimationEvent(null /* view */, + AnimationEvent.ANIMATION_TYPE_TOP_PADDING_CHANGED, + KeyguardSliceView.DEFAULT_ANIM_DURATION); + } else { + event = new AnimationEvent(null /* view */, + AnimationEvent.ANIMATION_TYPE_TOP_PADDING_CHANGED); + } + mAnimationEvents.add(event); } mTopPaddingNeedsAnimation = false; } @@ -4070,23 +4077,20 @@ public class NotificationStackScrollLayout extends ViewGroup int newVisibility = visible ? VISIBLE : GONE; boolean changedVisibility = oldVisibility != newVisibility; - if (changedVisibility || newVisibility != GONE) { + if (changedVisibility) { if (newVisibility != GONE) { - int oldText = mEmptyShadeView.getTextResource(); - int newText; - if (mStatusBar.areNotificationsHidden()) { - newText = R.string.dnd_suppressing_shade_text; - } else { - newText = R.string.empty_shade_text; - } - if (changedVisibility || !Objects.equals(oldText, newText)) { - mEmptyShadeView.setText(newText); - showFooterView(mEmptyShadeView); - } + showFooterView(mEmptyShadeView); } else { hideFooterView(mEmptyShadeView, true); } } + + int oldTextRes = mEmptyShadeView.getTextResource(); + int newTextRes = mStatusBar.areNotificationsHidden() + ? R.string.dnd_suppressing_shade_text : R.string.empty_shade_text; + if (oldTextRes != newTextRes) { + mEmptyShadeView.setText(newTextRes); + } } public void updateFooterView(boolean visible, boolean showDismissView) { @@ -4496,6 +4500,7 @@ public class NotificationStackScrollLayout extends ViewGroup public void setQsExpanded(boolean qsExpanded) { mQsExpanded = qsExpanded; updateAlgorithmLayoutMinHeight(); + updateScrollability(); } public void setQsExpansionFraction(float qsExpansionFraction) { diff --git a/packages/SystemUI/src/com/android/systemui/volume/CarVolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/CarVolumeDialogImpl.java index f1a7183e1602..8034345c37a7 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/CarVolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/CarVolumeDialogImpl.java @@ -19,23 +19,34 @@ package com.android.systemui.volume; import android.animation.Animator; import android.animation.AnimatorInflater; import android.animation.AnimatorSet; +import android.annotation.DrawableRes; import android.annotation.Nullable; import android.app.Dialog; import android.app.KeyguardManager; +import android.car.Car; +import android.car.CarNotConnectedException; +import android.car.media.CarAudioManager; +import android.car.media.ICarVolumeCallback; +import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; +import android.content.ServiceConnection; +import android.content.res.TypedArray; +import android.content.res.XmlResourceParser; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.PixelFormat; import android.graphics.drawable.Drawable; -import android.media.AudioManager; -import android.media.AudioSystem; +import android.media.AudioAttributes; import android.os.Debug; import android.os.Handler; +import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.util.AttributeSet; import android.util.Log; -import android.util.SparseBooleanArray; +import android.util.SparseArray; +import android.util.Xml; import android.view.ContextThemeWrapper; import android.view.Gravity; import android.view.MotionEvent; @@ -53,626 +64,533 @@ import androidx.car.widget.ListItemProvider.ListProvider; import androidx.car.widget.PagedListView; import androidx.car.widget.SeekbarListItem; +import java.util.Iterator; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; -import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.plugins.VolumeDialog; -import com.android.systemui.plugins.VolumeDialogController; -import com.android.systemui.plugins.VolumeDialogController.State; -import com.android.systemui.plugins.VolumeDialogController.StreamState; /** * Car version of the volume dialog. * - * A client of VolumeDialogControllerImpl and its state model. - * * Methods ending in "H" must be called on the (ui) handler. */ public class CarVolumeDialogImpl implements VolumeDialog { - private static final String TAG = Util.logTag(CarVolumeDialogImpl.class); - - private static final long USER_ATTEMPT_GRACE_PERIOD = 1000; - - private final Context mContext; - private final H mHandler = new H(); - private final VolumeDialogController mController; - private final AudioManager mAudioManager; - - private Window mWindow; - private CustomDialog mDialog; - private PagedListView mListView; - private ListItemAdapter mPagedListAdapter; - private final List<ListItem> mVolumeLineItems = new ArrayList<>(); - private final List<VolumeRow> mRows = new ArrayList<>(); - private ConfigurableTexts mConfigurableTexts; - private final SparseBooleanArray mDynamic = new SparseBooleanArray(); - private final KeyguardManager mKeyguard; - private final Object mSafetyWarningLock = new Object(); - - private boolean mShowing; - - private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE; - private boolean mSilentMode = VolumePrefs.DEFAULT_ENABLE_SILENT_MODE; - private State mState; - private SafetyWarningDialog mSafetyWarning; - private boolean mHovering = false; - private boolean mExpanded; - - public CarVolumeDialogImpl(Context context) { - mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme); - mController = Dependency.get(VolumeDialogController.class); - mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); - mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); + private static final String TAG = Util.logTag(CarVolumeDialogImpl.class); + + private static final String XML_TAG_VOLUME_ITEMS = "carVolumeItems"; + private static final String XML_TAG_VOLUME_ITEM = "item"; + private static final int HOVERING_TIMEOUT = 16000; + private static final int NORMAL_TIMEOUT = 3000; + private static final int LISTVIEW_ANIMATION_DURATION_IN_MILLIS = 250; + private static final int DISMISS_DELAY_IN_MILLIS = 50; + private static final int ARROW_FADE_IN_START_DELAY_IN_MILLIS = 100; + + private final Context mContext; + private final H mHandler = new H(); + + private Window mWindow; + private CustomDialog mDialog; + private PagedListView mListView; + private ListItemAdapter mPagedListAdapter; + // All the volume items. + private final SparseArray<VolumeItem> mVolumeItems = new SparseArray<>(); + // Available volume items in car audio manager. + private final List<VolumeItem> mAvailableVolumeItems = new ArrayList<>(); + // Volume items in the PagedListView. + private final List<ListItem> mVolumeLineItems = new ArrayList<>(); + private final KeyguardManager mKeyguard; + + private Car mCar; + private CarAudioManager mCarAudioManager; + + private boolean mHovering; + private boolean mShowing; + private boolean mExpanded; + + public CarVolumeDialogImpl(Context context) { + mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme); + mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); + mCar = Car.createCar(mContext, mServiceConnection); + } + + public void init(int windowType, Callback callback) { + initDialog(); + + mCar.connect(); + } + + @Override + public void destroy() { + mHandler.removeCallbacksAndMessages(null); + + cleanupAudioManager(); + // unregisterVolumeCallback is not being called when disconnect car, so we manually cleanup + // audio manager beforehand. + mCar.disconnect(); + } + + private void initDialog() { + loadAudioUsageItems(); + mVolumeLineItems.clear(); + mDialog = new CustomDialog(mContext); + + mHovering = false; + mShowing = false; + mExpanded = false; + mWindow = mDialog.getWindow(); + mWindow.requestFeature(Window.FEATURE_NO_TITLE); + mWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + mWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND + | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); + mWindow.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN + | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH + | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); + mWindow.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); + mWindow.setWindowAnimations(com.android.internal.R.style.Animation_Toast); + final WindowManager.LayoutParams lp = mWindow.getAttributes(); + lp.format = PixelFormat.TRANSLUCENT; + lp.setTitle(VolumeDialogImpl.class.getSimpleName()); + lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; + lp.windowAnimations = -1; + mWindow.setAttributes(lp); + mWindow.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + + mDialog.setCanceledOnTouchOutside(true); + mDialog.setContentView(R.layout.car_volume_dialog); + mDialog.setOnShowListener(dialog -> { + mListView.setTranslationY(-mListView.getHeight()); + mListView.setAlpha(0); + mListView.animate() + .alpha(1) + .translationY(0) + .setDuration(LISTVIEW_ANIMATION_DURATION_IN_MILLIS) + .setInterpolator(new SystemUIInterpolators.LogDecelerateInterpolator()) + .start(); + }); + mListView = (PagedListView) mWindow.findViewById(R.id.volume_list); + mListView.setOnHoverListener((v, event) -> { + int action = event.getActionMasked(); + mHovering = (action == MotionEvent.ACTION_HOVER_ENTER) + || (action == MotionEvent.ACTION_HOVER_MOVE); + rescheduleTimeoutH(); + return true; + }); + + mPagedListAdapter = new ListItemAdapter(mContext, new ListProvider(mVolumeLineItems), + BackgroundStyle.PANEL); + mListView.setAdapter(mPagedListAdapter); + mListView.setMaxPages(PagedListView.UNLIMITED_PAGES); + } + + public void show(int reason) { + mHandler.obtainMessage(H.SHOW, reason, 0).sendToTarget(); + } + + public void dismiss(int reason) { + mHandler.obtainMessage(H.DISMISS, reason, 0).sendToTarget(); + } + + private void showH(int reason) { + if (D.BUG) { + Log.d(TAG, "showH r=" + Events.DISMISS_REASONS[reason]); } - public void init(int windowType, Callback callback) { - initDialog(); - - mController.addCallback(mControllerCallbackH, mHandler); - mController.getState(); + mHandler.removeMessages(H.SHOW); + mHandler.removeMessages(H.DISMISS); + rescheduleTimeoutH(); + // Refresh the data set before showing. + mPagedListAdapter.notifyDataSetChanged(); + if (mShowing) { + return; } + mShowing = true; - @Override - public void destroy() { - mController.removeCallback(mControllerCallbackH); - mHandler.removeCallbacksAndMessages(null); - } + mDialog.show(); + Events.writeEvent(mContext, Events.EVENT_SHOW_DIALOG, reason, mKeyguard.isKeyguardLocked()); + } - private void initDialog() { - mRows.clear(); - mVolumeLineItems.clear(); - mDialog = new CustomDialog(mContext); + protected void rescheduleTimeoutH() { + mHandler.removeMessages(H.DISMISS); + final int timeout = computeTimeoutH(); + mHandler.sendMessageDelayed(mHandler + .obtainMessage(H.DISMISS, Events.DISMISS_REASON_TIMEOUT, 0), timeout); - mConfigurableTexts = new ConfigurableTexts(mContext); - mHovering = false; - mShowing = false; - mExpanded = false; - mWindow = mDialog.getWindow(); - mWindow.requestFeature(Window.FEATURE_NO_TITLE); - mWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - mWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND - | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); - mWindow.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE - | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN - | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED - | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH - | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); - mWindow.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); - mWindow.setWindowAnimations(com.android.internal.R.style.Animation_Toast); - final WindowManager.LayoutParams lp = mWindow.getAttributes(); - lp.format = PixelFormat.TRANSLUCENT; - lp.setTitle(VolumeDialogImpl.class.getSimpleName()); - lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; - lp.windowAnimations = -1; - mWindow.setAttributes(lp); - mWindow.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - - mDialog.setCanceledOnTouchOutside(true); - mDialog.setContentView(R.layout.car_volume_dialog); - mDialog.setOnShowListener(dialog -> { - mListView.setTranslationY(-mListView.getHeight()); - mListView.setAlpha(0); - mListView.animate() - .alpha(1) - .translationY(0) - .setDuration(300) - .setInterpolator(new SystemUIInterpolators.LogDecelerateInterpolator()) - .start(); - }); - mListView = (PagedListView) mWindow.findViewById(R.id.volume_list); - mListView.setOnHoverListener((v, event) -> { - int action = event.getActionMasked(); - mHovering = (action == MotionEvent.ACTION_HOVER_ENTER) - || (action == MotionEvent.ACTION_HOVER_MOVE); - rescheduleTimeoutH(); - return true; - }); - - addSeekbarListItem(addVolumeRow(AudioManager.STREAM_MUSIC, R.drawable.car_ic_music, - R.drawable.car_ic_keyboard_arrow_down, true, true), - new ExpandIconListener()); - // We map AudioManager.STREAM_RING to a navigation icon for demo. - addVolumeRow(AudioManager.STREAM_RING, R.drawable.car_ic_navigation, 0, - true, false); - addVolumeRow(AudioManager.STREAM_NOTIFICATION, R.drawable.car_ic_notification_2, 0, - true, false); - - mPagedListAdapter = new ListItemAdapter(mContext, new ListProvider(mVolumeLineItems), - BackgroundStyle.PANEL); - mListView.setAdapter(mPagedListAdapter); - mListView.setMaxPages(PagedListView.UNLIMITED_PAGES); + if (D.BUG) { + Log.d(TAG, "rescheduleTimeout " + timeout + " " + Debug.getCaller()); } + } - public void setStreamImportant(int stream, boolean important) { - mHandler.obtainMessage(H.SET_STREAM_IMPORTANT, stream, important ? 1 : 0).sendToTarget(); - } + private int computeTimeoutH() { + return mHovering ? HOVERING_TIMEOUT : NORMAL_TIMEOUT; + } - public void setAutomute(boolean automute) { - if (mAutomute == automute) { - return; - } - mAutomute = automute; - mHandler.sendEmptyMessage(H.RECHECK_ALL); + protected void dismissH(int reason) { + if (D.BUG) { + Log.d(TAG, "dismissH r=" + Events.DISMISS_REASONS[reason]); } - public void setSilentMode(boolean silentMode) { - if (mSilentMode == silentMode) { - return; - } - mSilentMode = silentMode; - mHandler.sendEmptyMessage(H.RECHECK_ALL); + mHandler.removeMessages(H.DISMISS); + mHandler.removeMessages(H.SHOW); + if (!mShowing) { + return; } - private VolumeRow addVolumeRow(int stream, int primaryActionIcon, int supplementalIcon, - boolean important, boolean defaultStream) { - VolumeRow volumeRow = new VolumeRow(); - volumeRow.stream = stream; - volumeRow.primaryActionIcon = primaryActionIcon; - volumeRow.supplementalIcon = supplementalIcon; - volumeRow.important = important; - volumeRow.defaultStream = defaultStream; - volumeRow.listItem = null; - mRows.add(volumeRow); - return volumeRow; + mListView.animate().cancel(); + mShowing = false; + + mListView.setTranslationY(0); + mListView.setAlpha(1); + mListView.animate() + .alpha(0) + .translationY(-mListView.getHeight()) + .setDuration(LISTVIEW_ANIMATION_DURATION_IN_MILLIS) + .setInterpolator(new SystemUIInterpolators.LogAccelerateInterpolator()) + .withEndAction(() -> mHandler.postDelayed(() -> { + if (D.BUG) { + Log.d(TAG, "mDialog.dismiss()"); + } + mDialog.dismiss(); + }, DISMISS_DELAY_IN_MILLIS)) + .start(); + + Events.writeEvent(mContext, Events.EVENT_DISMISS_DIALOG, reason); + } + + public void dump(PrintWriter writer) { + writer.println(VolumeDialogImpl.class.getSimpleName() + " state:"); + writer.print(" mShowing: "); writer.println(mShowing); + } + + private void loadAudioUsageItems() { + try (XmlResourceParser parser = mContext.getResources().getXml(R.xml.car_volume_items)) { + AttributeSet attrs = Xml.asAttributeSet(parser); + int type; + // Traverse to the first start tag + while ((type=parser.next()) != XmlResourceParser.END_DOCUMENT + && type != XmlResourceParser.START_TAG) { + } + + if (!XML_TAG_VOLUME_ITEMS.equals(parser.getName())) { + throw new RuntimeException("Meta-data does not start with carVolumeItems tag"); + } + int outerDepth = parser.getDepth(); + int rank = 0; + while ((type=parser.next()) != XmlResourceParser.END_DOCUMENT + && (type != XmlResourceParser.END_TAG || parser.getDepth() > outerDepth)) { + if (type == XmlResourceParser.END_TAG) { + continue; + } + if (XML_TAG_VOLUME_ITEM.equals(parser.getName())) { + TypedArray item = mContext.getResources().obtainAttributes( + attrs, R.styleable.carVolumeItems_item); + int usage = item.getInt(R.styleable.carVolumeItems_item_usage, -1); + if (usage >= 0) { + VolumeItem volumeItem = new VolumeItem(); + volumeItem.usage = usage; + volumeItem.rank = rank; + volumeItem.icon = item.getResourceId(R.styleable.carVolumeItems_item_icon, 0); + mVolumeItems.put(usage, volumeItem); + rank++; + } + item.recycle(); + } + } + } catch (XmlPullParserException | IOException e) { + Log.e(TAG, "Error parsing volume groups configuration", e); } - - private SeekbarListItem addSeekbarListItem( - VolumeRow volumeRow, @Nullable View.OnClickListener supplementalIconOnClickListener) { - int volumeMax = mAudioManager.getStreamMaxVolume(volumeRow.stream); - int currentVolume = mAudioManager.getStreamVolume(volumeRow.stream); - SeekbarListItem listItem = - new SeekbarListItem(mContext, volumeMax, currentVolume, - new VolumeSeekBarChangeListener(volumeRow), null); - Drawable primaryIcon = mContext.getResources().getDrawable(volumeRow.primaryActionIcon); - listItem.setPrimaryActionIcon(primaryIcon); - if (volumeRow.supplementalIcon != 0) { - Drawable supplementalIcon = mContext.getResources() - .getDrawable(volumeRow.supplementalIcon); - listItem.setSupplementalIcon(supplementalIcon, true, - supplementalIconOnClickListener); - } else { - listItem.setSupplementalEmptyIcon(true); - } - - mVolumeLineItems.add(listItem); - volumeRow.listItem = listItem; - - return listItem; + } + + private VolumeItem getVolumeItemForUsages(int[] usages) { + int rank = Integer.MAX_VALUE; + VolumeItem result = null; + for (int usage : usages) { + VolumeItem volumeItem = mVolumeItems.get(usage); + if (volumeItem.rank < rank) { + rank = volumeItem.rank; + result = volumeItem; + } } - - private static int getImpliedLevel(SeekBar seekBar, int progress) { - final int m = seekBar.getMax(); - final int n = m / 100 - 1; - final int level = progress == 0 ? 0 - : progress == m ? (m / 100) : (1 + (int)((progress / (float) m) * n)); - return level; + return result; + } + + private static int getSeekbarValue(CarAudioManager carAudioManager, int volumeGroupId) { + try { + return carAudioManager.getGroupVolume(volumeGroupId); + } catch (CarNotConnectedException e) { + Log.e(TAG, "Car is not connected!", e); } - - public void show(int reason) { - mHandler.obtainMessage(H.SHOW, reason, 0).sendToTarget(); + return 0; + } + + private static int getMaxSeekbarValue(CarAudioManager carAudioManager, int volumeGroupId) { + try { + return carAudioManager.getGroupMaxVolume(volumeGroupId); + } catch (CarNotConnectedException e) { + Log.e(TAG, "Car is not connected!", e); } - - public void dismiss(int reason) { - mHandler.obtainMessage(H.DISMISS, reason, 0).sendToTarget(); + return 0; + } + + private SeekbarListItem addSeekbarListItem(VolumeItem volumeItem, int volumeGroupId, + int supplementalIconId, @Nullable View.OnClickListener supplementalIconOnClickListener) { + SeekbarListItem listItem = new SeekbarListItem(mContext); + listItem.setMax(getMaxSeekbarValue(mCarAudioManager, volumeGroupId)); + int progress = getSeekbarValue(mCarAudioManager, volumeGroupId); + listItem.setProgress(progress); + listItem.setOnSeekBarChangeListener( + new CarVolumeDialogImpl.VolumeSeekBarChangeListener(volumeGroupId, mCarAudioManager)); + listItem.setPrimaryActionIcon(mContext.getResources().getDrawable(volumeItem.icon)); + if (supplementalIconId != 0) { + Drawable supplementalIcon = mContext.getResources().getDrawable(supplementalIconId); + listItem.setSupplementalIcon(supplementalIcon, true, + supplementalIconOnClickListener); + } else { + listItem.setSupplementalEmptyIcon(true); } - private void showH(int reason) { - if (D.BUG) Log.d(TAG, "showH r=" + Events.DISMISS_REASONS[reason]); - mHandler.removeMessages(H.SHOW); - mHandler.removeMessages(H.DISMISS); - rescheduleTimeoutH(); - if (mShowing) return; - mShowing = true; - - mDialog.show(); - Events.writeEvent(mContext, Events.EVENT_SHOW_DIALOG, reason, mKeyguard.isKeyguardLocked()); - mController.notifyVisible(true); + mVolumeLineItems.add(listItem); + volumeItem.listItem = listItem; + volumeItem.progress = progress; + return listItem; + } + + private VolumeItem findVolumeItem(SeekbarListItem targetItem) { + for (int i = 0; i < mVolumeItems.size(); ++i) { + VolumeItem volumeItem = mVolumeItems.valueAt(i); + if (volumeItem.listItem == targetItem) { + return volumeItem; + } } - - protected void rescheduleTimeoutH() { - mHandler.removeMessages(H.DISMISS); - final int timeout = computeTimeoutH(); - mHandler.sendMessageDelayed(mHandler - .obtainMessage(H.DISMISS, Events.DISMISS_REASON_TIMEOUT, 0), timeout); - if (D.BUG) Log.d(TAG, "rescheduleTimeout " + timeout + " " + Debug.getCaller()); - mController.userActivity(); + return null; + } + + private void cleanupAudioManager() { + try { + mCarAudioManager.unregisterVolumeCallback(mVolumeChangeCallback.asBinder()); + } catch (CarNotConnectedException e) { + Log.e(TAG, "Car is not connected!", e); } + mVolumeLineItems.clear(); + mCarAudioManager = null; + } - private int computeTimeoutH() { - if (mHovering) return 16000; - if (mSafetyWarning != null) return 5000; - return 3000; - } + private final class H extends Handler { + private static final int SHOW = 1; + private static final int DISMISS = 2; - protected void dismissH(int reason) { - mHandler.removeMessages(H.DISMISS); - mHandler.removeMessages(H.SHOW); - if (!mShowing) return; - mListView.animate().cancel(); - mShowing = false; - - mListView.setTranslationY(0); - mListView.setAlpha(1); - mListView.animate() - .alpha(0) - .translationY(-mListView.getHeight()) - .setDuration(250) - .setInterpolator(new SystemUIInterpolators.LogAccelerateInterpolator()) - .withEndAction(() -> mHandler.postDelayed(() -> { - if (D.BUG) Log.d(TAG, "mDialog.dismiss()"); - mDialog.dismiss(); - }, 50)) - .start(); - - Events.writeEvent(mContext, Events.EVENT_DISMISS_DIALOG, reason); - mController.notifyVisible(false); - synchronized (mSafetyWarningLock) { - if (mSafetyWarning != null) { - if (D.BUG) Log.d(TAG, "SafetyWarning dismissed"); - mSafetyWarning.dismiss(); - } - } + public H() { + super(Looper.getMainLooper()); } - private void trimObsoleteH() { - int initialVolumeItemSize = mVolumeLineItems.size(); - for (int i = mRows.size() - 1; i >= 0; i--) { - final VolumeRow row = mRows.get(i); - if (row.ss == null || !row.ss.dynamic) continue; - if (!mDynamic.get(row.stream)) { - mRows.remove(i); - mVolumeLineItems.remove(row.listItem); - } - } - - if (mVolumeLineItems.size() != initialVolumeItemSize) { - mPagedListAdapter.notifyDataSetChanged(); - } + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case SHOW: + showH(msg.arg1); + break; + case DISMISS: + dismissH(msg.arg1); + break; + default: + } } + } - private void onStateChangedH(State state) { - mState = state; - mDynamic.clear(); - // add any new dynamic rows - for (int i = 0; i < state.states.size(); i++) { - final int stream = state.states.keyAt(i); - final StreamState ss = state.states.valueAt(i); - if (!ss.dynamic) { - continue; - } - mDynamic.put(stream, true); - if (findRow(stream) == null) { - VolumeRow row = addVolumeRow(stream, R.drawable.ic_volume_remote, - 0, true,false); - if (mExpanded) { - addSeekbarListItem(row, null); - } - } - } - - for (VolumeRow row : mRows) { - updateVolumeRowH(row); - } + private final class CustomDialog extends Dialog implements DialogInterface { + public CustomDialog(Context context) { + super(context, com.android.systemui.R.style.qs_theme); } - private void updateVolumeRowH(VolumeRow row) { - if (D.BUG) Log.d(TAG, "updateVolumeRowH s=" + row.stream); - if (mState == null) { - return; - } - final StreamState ss = mState.states.get(row.stream); - if (ss == null) { - return; - } - row.ss = ss; - if (ss.level == row.requestedLevel) { - row.requestedLevel = -1; - } - // TODO: update Seekbar progress and change the mute icon if necessary. + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + rescheduleTimeoutH(); + return super.dispatchTouchEvent(ev); } - private VolumeRow findRow(int stream) { - for (VolumeRow row : mRows) { - if (row.stream == stream) { - return row; - } - } - return null; + @Override + protected void onStart() { + super.setCanceledOnTouchOutside(true); + super.onStart(); } - private VolumeRow findRow(SeekbarListItem targetItem) { - for (VolumeRow row : mRows) { - if (row.listItem == targetItem) { - return row; - } - } - return null; + @Override + protected void onStop() { + super.onStop(); } - public void dump(PrintWriter writer) { - writer.println(VolumeDialogImpl.class.getSimpleName() + " state:"); - writer.print(" mShowing: "); writer.println(mShowing); - writer.print(" mDynamic: "); writer.println(mDynamic); - writer.print(" mAutomute: "); writer.println(mAutomute); - writer.print(" mSilentMode: "); writer.println(mSilentMode); + @Override + public boolean onTouchEvent(MotionEvent event) { + if (isShowing()) { + if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { + dismissH(Events.DISMISS_REASON_TOUCH_OUTSIDE); + return true; + } + } + return false; } + } - private void recheckH(VolumeRow row) { - if (row == null) { - if (D.BUG) Log.d(TAG, "recheckH ALL"); - trimObsoleteH(); - for (VolumeRow r : mRows) { - updateVolumeRowH(r); - } - } else { - if (D.BUG) Log.d(TAG, "recheckH " + row.stream); - updateVolumeRowH(row); - } + private final class ExpandIconListener implements View.OnClickListener { + @Override + public void onClick(final View v) { + mExpanded = !mExpanded; + Animator inAnimator; + if (mExpanded) { + for (int groupId = 0; groupId < mAvailableVolumeItems.size(); ++groupId) { + // Adding the items which are not coming from the default item. + VolumeItem volumeItem = mAvailableVolumeItems.get(groupId); + if (volumeItem.defaultItem) { + // Set progress here due to the progress of seekbar may not be updated. + volumeItem.listItem.setProgress(volumeItem.progress); + } else { + addSeekbarListItem(volumeItem, groupId, 0, null); + } + } + inAnimator = AnimatorInflater.loadAnimator( + mContext, R.anim.car_arrow_fade_in_rotate_up); + } else { + // Only keeping the default stream if it is not expended. + Iterator itr = mVolumeLineItems.iterator(); + while (itr.hasNext()) { + SeekbarListItem seekbarListItem = (SeekbarListItem) itr.next(); + VolumeItem volumeItem = findVolumeItem(seekbarListItem); + if (!volumeItem.defaultItem) { + itr.remove(); + } else { + // Set progress here due to the progress of seekbar may not be updated. + seekbarListItem.setProgress(volumeItem.progress); + } + } + inAnimator = AnimatorInflater.loadAnimator( + mContext, R.anim.car_arrow_fade_in_rotate_down); + } + + Animator outAnimator = AnimatorInflater.loadAnimator( + mContext, R.anim.car_arrow_fade_out); + inAnimator.setStartDelay(ARROW_FADE_IN_START_DELAY_IN_MILLIS); + AnimatorSet animators = new AnimatorSet(); + animators.playTogether(outAnimator, inAnimator); + animators.setTarget(v); + animators.start(); + mPagedListAdapter.notifyDataSetChanged(); } + } - private void setStreamImportantH(int stream, boolean important) { - for (VolumeRow row : mRows) { - if (row.stream == stream) { - row.important = important; - return; - } - } - } + private final class VolumeSeekBarChangeListener implements OnSeekBarChangeListener { + private final int mVolumeGroupId; + private final CarAudioManager mCarAudioManager; - private void showSafetyWarningH(int flags) { - if ((flags & (AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_SHOW_UI_WARNINGS)) != 0 - || mShowing) { - synchronized (mSafetyWarningLock) { - if (mSafetyWarning != null) { - return; - } - mSafetyWarning = new SafetyWarningDialog(mContext, mController.getAudioManager()) { - @Override - protected void cleanUp() { - synchronized (mSafetyWarningLock) { - mSafetyWarning = null; - } - recheckH(null); - } - }; - mSafetyWarning.show(); - } - recheckH(null); - } - rescheduleTimeoutH(); + private VolumeSeekBarChangeListener(int volumeGroupId, CarAudioManager carAudioManager) { + mVolumeGroupId = volumeGroupId; + mCarAudioManager = carAudioManager; } - private final VolumeDialogController.Callbacks mControllerCallbackH - = new VolumeDialogController.Callbacks() { - @Override - public void onShowRequested(int reason) { - showH(reason); - } - - @Override - public void onDismissRequested(int reason) { - dismissH(reason); - } - - @Override - public void onScreenOff() { - dismissH(Events.DISMISS_REASON_SCREEN_OFF); - } - - @Override - public void onStateChanged(State state) { - onStateChangedH(state); - } - - @Override - public void onLayoutDirectionChanged(int layoutDirection) { - mListView.setLayoutDirection(layoutDirection); - } - - @Override - public void onConfigurationChanged() { - mDialog.dismiss(); - initDialog(); - mConfigurableTexts.update(); - } - - @Override - public void onShowVibrateHint() { - if (mSilentMode) { - mController.setRingerMode(AudioManager.RINGER_MODE_SILENT, false); - } - } - - @Override - public void onShowSilentHint() { - if (mSilentMode) { - mController.setRingerMode(AudioManager.RINGER_MODE_NORMAL, false); - } - } - - @Override - public void onShowSafetyWarning(int flags) { - showSafetyWarningH(flags); - } - - @Override - public void onAccessibilityModeChanged(Boolean showA11yStream) { - } - }; - - private final class H extends Handler { - private static final int SHOW = 1; - private static final int DISMISS = 2; - private static final int RECHECK = 3; - private static final int RECHECK_ALL = 4; - private static final int SET_STREAM_IMPORTANT = 5; - private static final int RESCHEDULE_TIMEOUT = 6; - private static final int STATE_CHANGED = 7; - - public H() { - super(Looper.getMainLooper()); - } - - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case SHOW: showH(msg.arg1); break; - case DISMISS: dismissH(msg.arg1); break; - case RECHECK: recheckH((VolumeRow) msg.obj); break; - case RECHECK_ALL: recheckH(null); break; - case SET_STREAM_IMPORTANT: setStreamImportantH(msg.arg1, msg.arg2 != 0); break; - case RESCHEDULE_TIMEOUT: rescheduleTimeoutH(); break; - case STATE_CHANGED: onStateChangedH(mState); break; - } - } + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + if (!fromUser) { + // For instance, if this event is originated from AudioService, + // we can ignore it as it has already been handled and doesn't need to be + // sent back down again. + return; + } + try { + if (mCarAudioManager == null) { + Log.w(TAG, "Ignoring volume change event because the car isn't connected"); + return; + } + mAvailableVolumeItems.get(mVolumeGroupId).progress = progress; + mCarAudioManager.setGroupVolume(mVolumeGroupId, progress, 0); + } catch (CarNotConnectedException e) { + Log.e(TAG, "Car is not connected!", e); + } } - private final class CustomDialog extends Dialog implements DialogInterface { - public CustomDialog(Context context) { - super(context, com.android.systemui.R.style.qs_theme); - } - - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - rescheduleTimeoutH(); - return super.dispatchTouchEvent(ev); - } - - @Override - protected void onStart() { - super.setCanceledOnTouchOutside(true); - super.onStart(); - } + @Override + public void onStartTrackingTouch(SeekBar seekBar) {} - @Override - protected void onStop() { - super.onStop(); - mHandler.sendEmptyMessage(H.RECHECK_ALL); - } + @Override + public void onStopTrackingTouch(SeekBar seekBar) {} + } - @Override - public boolean onTouchEvent(MotionEvent event) { - if (isShowing()) { - if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { - dismissH(Events.DISMISS_REASON_TOUCH_OUTSIDE); - return true; - } - } - return false; - } + private final ICarVolumeCallback mVolumeChangeCallback = new ICarVolumeCallback.Stub() { + @Override + public void onGroupVolumeChanged(int groupId) { + VolumeItem volumeItem = mAvailableVolumeItems.get(groupId); + int value = getSeekbarValue(mCarAudioManager, groupId); + // Do not update the progress if it is the same as before. When car audio manager sets its + // group volume caused by the seekbar progress changed, it also triggers this callback. + // Updating the seekbar at the same time could block the continuous seeking. + if (value != volumeItem.progress) { + volumeItem.listItem.setProgress(value); + volumeItem.progress = value; + show(Events.SHOW_REASON_VOLUME_CHANGED); + } } - private final class VolumeSeekBarChangeListener implements OnSeekBarChangeListener { - private final VolumeRow mRow; - - private VolumeSeekBarChangeListener(VolumeRow volumeRow) { - mRow = volumeRow; - } - - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - if (mRow.ss == null) { - return; - } - if (D.BUG) { - Log.d(TAG, AudioSystem.streamToString(mRow.stream) - + " onProgressChanged " + progress + " fromUser=" + fromUser); - } - if (!fromUser) { - return; - } - if (mRow.ss.levelMin > 0) { - final int minProgress = mRow.ss.levelMin; - if (progress < minProgress) { - seekBar.setProgress(minProgress); - progress = minProgress; - } - } - final int userLevel = getImpliedLevel(seekBar, progress); - if (mRow.ss.level != userLevel || mRow.ss.muted && userLevel > 0) { - if (mRow.requestedLevel != userLevel) { - mController.setStreamVolume(mRow.stream, userLevel); - mRow.requestedLevel = userLevel; - Events.writeEvent(mContext, Events.EVENT_TOUCH_LEVEL_CHANGED, mRow.stream, - userLevel); - } - } - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - if (D.BUG) { - Log.d(TAG, "onStartTrackingTouch"+ " " + mRow.stream); - } - mController.setActiveStream(mRow.stream); - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - if (D.BUG) { - Log.d(TAG, "onStopTrackingTouch"+ " " + mRow.stream); - } - final int userLevel = getImpliedLevel(seekBar, seekBar.getProgress()); - Events.writeEvent(mContext, Events.EVENT_TOUCH_LEVEL_DONE, mRow.stream, userLevel); - if (mRow.ss.level != userLevel) { - mHandler.sendMessageDelayed(mHandler.obtainMessage(H.RECHECK, mRow), - USER_ATTEMPT_GRACE_PERIOD); - } - } + @Override + public void onMasterMuteChanged() { + // ignored } + }; - private final class ExpandIconListener implements View.OnClickListener { - @Override - public void onClick(final View v) { - mExpanded = !mExpanded; - Animator inAnimator; - if (mExpanded) { - for (VolumeRow row : mRows) { - // Adding the items which are not coming from default stream. - if (!row.defaultStream) { - addSeekbarListItem(row, null); - } - } - inAnimator = AnimatorInflater.loadAnimator( - mContext, R.anim.car_arrow_fade_in_rotate_up); - } else { - // Only keeping the default stream if it is not expended. - Iterator itr = mVolumeLineItems.iterator(); - while (itr.hasNext()) { - SeekbarListItem item = (SeekbarListItem) itr.next(); - VolumeRow row = findRow(item); - if (!row.defaultStream) { - itr.remove(); - } - } - inAnimator = AnimatorInflater.loadAnimator( - mContext, R.anim.car_arrow_fade_in_rotate_down); - } - - Animator outAnimator = AnimatorInflater.loadAnimator( - mContext, R.anim.car_arrow_fade_out); - inAnimator.setStartDelay(100); - AnimatorSet animators = new AnimatorSet(); - animators.playTogether(outAnimator, inAnimator); - animators.setTarget(v); - animators.start(); - mPagedListAdapter.notifyDataSetChanged(); - } + private final ServiceConnection mServiceConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + try { + mExpanded = false; + mCarAudioManager = (CarAudioManager) mCar.getCarManager(Car.AUDIO_SERVICE); + int volumeGroupCount = mCarAudioManager.getVolumeGroupCount(); + // Populates volume slider items from volume groups to UI. + for (int groupId = 0; groupId < volumeGroupCount; groupId++) { + VolumeItem volumeItem = getVolumeItemForUsages( + mCarAudioManager.getUsagesForVolumeGroupId(groupId)); + mAvailableVolumeItems.add(volumeItem); + // The first one is the default item. + if (groupId == 0) { + volumeItem.defaultItem = true; + addSeekbarListItem(volumeItem, groupId, R.drawable.car_ic_keyboard_arrow_down, + new ExpandIconListener()); + } + } + + // If list is already initiated, update its content. + if (mPagedListAdapter != null) { + mPagedListAdapter.notifyDataSetChanged(); + } + mCarAudioManager.registerVolumeCallback(mVolumeChangeCallback.asBinder()); + } catch (CarNotConnectedException e) { + Log.e(TAG, "Car is not connected!", e); + } } - private static class VolumeRow { - private int stream; - private StreamState ss; - private boolean important; - private boolean defaultStream; - private int primaryActionIcon; - private int supplementalIcon; - private SeekbarListItem listItem; - private int requestedLevel = -1; // pending user-requested level via progress changed + /** + * This does not get called when service is properly disconnected. + * So we need to also handle cleanups in destroy(). + */ + @Override + public void onServiceDisconnected(ComponentName name) { + cleanupAudioManager(); } -}
\ No newline at end of file + }; + + /** + * Wrapper class which contains information of each volume group. + */ + private static class VolumeItem { + private @AudioAttributes.AttributeUsage int usage; + private int rank; + private boolean defaultItem = false; + private @DrawableRes int icon; + private SeekbarListItem listItem; + private int progress; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java index 6e5b5484cabe..dd552646955a 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java @@ -103,11 +103,7 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna } private VolumeDialog createCarDefault() { - CarVolumeDialogImpl impl = new CarVolumeDialogImpl(mContext); - impl.setStreamImportant(AudioManager.STREAM_SYSTEM, false); - impl.setAutomute(true); - impl.setSilentMode(false); - return impl; + return new CarVolumeDialogImpl(mContext); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index b0e40fc88054..6b322c72936c 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -695,26 +695,6 @@ public class VolumeDialogImpl implements VolumeDialog { private void enableVolumeRowViewsH(VolumeRow row, boolean enable) { boolean showDndIcon = !enable; row.dndIcon.setVisibility(showDndIcon ? VISIBLE : GONE); - - if (showDndIcon && getNumVisibleRows() == 1) { - row.dndIcon.setLayoutParams(new FrameLayout.LayoutParams( - mContext.getResources().getDimensionPixelSize( - R.dimen.volume_dialog_panel_width), - FrameLayout.LayoutParams.WRAP_CONTENT)); - } else if (row.view.getVisibility() == VISIBLE) { - row.dndIcon.setLayoutParams(new FrameLayout.LayoutParams( - FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT)); - } - } - - private int getNumVisibleRows() { - int count = 0; - for (int i = 0; i < mRows.size(); i++) { - if (mRows.get(i).view.getVisibility() == VISIBLE) { - count++; - } - } - return count; } /** diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java index e79c9d0c5455..359832f7a542 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java @@ -16,11 +16,15 @@ package com.android.keyguard; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; +import android.view.KeyEvent; import android.view.LayoutInflater; import com.android.systemui.SysuiTestCase; @@ -28,6 +32,7 @@ import com.android.systemui.SysuiTestCase; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -37,21 +42,35 @@ import org.mockito.MockitoAnnotations; public class KeyguardPinBasedInputViewTest extends SysuiTestCase { @Mock - private PasswordTextView mPasswordTextView; + private PasswordTextView mPasswordEntry; + @Mock + private SecurityMessageDisplay mSecurityMessageDisplay; + @InjectMocks private KeyguardPinBasedInputView mKeyguardPinView; @Before public void setup() { - MockitoAnnotations.initMocks(this); LayoutInflater inflater = LayoutInflater.from(getContext()); mKeyguardPinView = (KeyguardPinBasedInputView) inflater.inflate(R.layout.keyguard_pin_view, null); - mKeyguardPinView.mPasswordEntry = mPasswordTextView; + MockitoAnnotations.initMocks(this); } @Test public void onResume_requestsFocus() { mKeyguardPinView.onResume(KeyguardSecurityView.SCREEN_ON); - verify(mPasswordTextView).requestFocus(); + verify(mPasswordEntry).requestFocus(); + } + + @Test + public void onKeyDown_clearsSecurityMessage() { + mKeyguardPinView.onKeyDown(KeyEvent.KEYCODE_0, mock(KeyEvent.class)); + verify(mSecurityMessageDisplay).setMessage(eq("")); + } + + @Test + public void onKeyDown_noSecurityMessageInteraction() { + mKeyguardPinView.onKeyDown(KeyEvent.KEYCODE_UNKNOWN, mock(KeyEvent.class)); + verifyZeroInteractions(mSecurityMessageDisplay); } } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java index 210764adb4a6..17a4fbc4c1f6 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java @@ -90,6 +90,17 @@ public class KeyguardSliceViewTest extends SysuiTestCase { } @Test + public void refresh_replacesSliceContentAndNotifiesListener() { + AtomicBoolean notified = new AtomicBoolean(); + mKeyguardSliceView.setContentChangeListener((hasHeader)-> { + notified.set(true); + }); + mKeyguardSliceView.refresh(); + Assert.assertTrue("Listener should be notified about slice changes.", + notified.get()); + } + + @Test public void getTextColor_whiteTextWhenAOD() { // Set text color to red since the default is white and test would always pass mKeyguardSliceView.setTextColor(Color.RED); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.java new file mode 100644 index 000000000000..1d8de2fbbcca --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.keyguard; + +import static org.mockito.Mockito.verify; + +import android.test.suitebuilder.annotation.SmallTest; +import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper.RunWithLooper; +import android.view.LayoutInflater; +import android.widget.TextClock; + +import com.android.systemui.SysuiTestCase; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +@SmallTest +@RunWithLooper(setAsMainLooper = true) +@RunWith(AndroidTestingRunner.class) +public class KeyguardStatusViewTest extends SysuiTestCase { + + @Mock + KeyguardSliceView mKeyguardSlice; + @Mock + TextClock mClockView; + @InjectMocks + KeyguardStatusView mKeyguardStatusView; + + @Before + public void setUp() { + LayoutInflater layoutInflater = LayoutInflater.from(getContext()); + mKeyguardStatusView = + (KeyguardStatusView) layoutInflater.inflate(R.layout.keyguard_status_view, null); + org.mockito.MockitoAnnotations.initMocks(this); + } + + @Test + public void dozeTimeTick_updatesSlice() { + mKeyguardStatusView.dozeTimeTick(); + verify(mKeyguardSlice).refresh(); + } + + @Test + public void dozeTimeTick_updatesClock() { + mKeyguardStatusView.dozeTimeTick(); + verify(mClockView).refresh(); + } + +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java index a45e6900ece4..46e2bfbb1431 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java @@ -85,13 +85,6 @@ public class KeyguardSliceProviderTest extends SysuiTestCase { } @Test - public void unregisterClockUpdate() { - mProvider.unregisterClockUpdate(); - Assert.assertFalse("Clock updates should have been unregistered.", - mProvider.isRegistered()); - } - - @Test public void returnsValidSlice() { Slice slice = mProvider.onBindSlice(mProvider.getUri()); SliceItem text = SliceQuery.find(slice, android.app.slice.SliceItem.FORMAT_TEXT, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java index b3dddd522b1b..a6d87af17545 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java @@ -20,6 +20,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import android.content.Context; +import android.support.test.filters.FlakyTest; import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; @@ -29,6 +30,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; @@ -48,6 +50,7 @@ import static org.mockito.Mockito.when; * Tests for {@link NotificationBlockingHelperManager}. */ @SmallTest +@FlakyTest @org.junit.runner.RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @@ -56,7 +59,6 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { private NotificationTestHelper mHelper; - @Rule public MockitoRule mockito = MockitoJUnit.rule(); @Mock private NotificationGutsManager mGutsManager; @Mock private NotificationEntryManager mEntryManager; @Mock private NotificationMenuRow mMenuRow; @@ -64,20 +66,22 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Before public void setUp() { - mBlockingHelperManager = new NotificationBlockingHelperManager(mContext); - // By default, have the shade visible/expanded. - mBlockingHelperManager.setNotificationShadeExpanded(1f); - - mHelper = new NotificationTestHelper(mContext); + MockitoAnnotations.initMocks(this); when(mGutsManager.openGuts( any(View.class), anyInt(), anyInt(), any(NotificationMenuRowPlugin.MenuItem.class))) .thenReturn(true); + when(mMenuRow.getLongpressMenuItem(any(Context.class))).thenReturn(mMenuItem); mDependency.injectTestDependency(NotificationGutsManager.class, mGutsManager); mDependency.injectTestDependency(NotificationEntryManager.class, mEntryManager); - when(mMenuRow.getLongpressMenuItem(any(Context.class))).thenReturn(mMenuItem); + + mHelper = new NotificationTestHelper(mContext); + + mBlockingHelperManager = new NotificationBlockingHelperManager(mContext); + // By default, have the shade visible/expanded. + mBlockingHelperManager.setNotificationShadeExpanded(1f); } @Test @@ -89,7 +93,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testDismissCurrentBlockingHelper_withDetachedBlockingHelperRow() throws Exception { - ExpandableNotificationRow row = spy(createBlockableRowSpy()); + ExpandableNotificationRow row = createBlockableRowSpy(); row.setBlockingHelperShowing(true); when(row.isAttachedToWindow()).thenReturn(false); mBlockingHelperManager.setBlockingHelperRowForTest(row); @@ -102,7 +106,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testDismissCurrentBlockingHelper_withAttachedBlockingHelperRow() throws Exception { - ExpandableNotificationRow row = spy(createBlockableRowSpy()); + ExpandableNotificationRow row = createBlockableRowSpy(); row.setBlockingHelperShowing(true); when(row.isAttachedToWindow()).thenReturn(true); mBlockingHelperManager.setBlockingHelperRowForTest(row); @@ -200,7 +204,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testBlockingHelperShowAndDismiss() throws Exception{ - ExpandableNotificationRow row = spy(createBlockableRowSpy()); + ExpandableNotificationRow row = createBlockableRowSpy(); row.getEntry().userSentiment = USER_SENTIMENT_NEGATIVE; when(row.isAttachedToWindow()).thenReturn(true); @@ -227,6 +231,4 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { when(row.getIsNonblockable()).thenReturn(false); return row; } - - } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java index 65fd7f5f3651..bdeb8bcd6fb8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java @@ -314,12 +314,11 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testLogBlockingHelperCounter_logsForBlockingHelper() throws Exception { - // Bind notification logs an event, so this counts as one invocation for the metrics logger. mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false, true, true); mNotificationInfo.logBlockingHelperCounter("HowCanNotifsBeRealIfAppsArent"); - verify(mMetricsLogger, times(2)).count(anyString(), anyInt()); + verify(mMetricsLogger, times(1)).count(anyString(), anyInt()); } @Test @@ -509,6 +508,36 @@ public class NotificationInfoTest extends SysuiTestCase { anyString(), eq(TEST_UID), eq(true)); } + + @Test + public void testCloseControls_nonNullCheckSaveListenerDoesntDelayKeepShowing() + throws Exception { + NotificationInfo.CheckSaveListener listener = + mock(NotificationInfo.CheckSaveListener.class); + mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, + TEST_PACKAGE_NAME, mNotificationChannel /* notificationChannel */, + 10 /* numUniqueChannelsInRow */, mSbn, listener /* checkSaveListener */, + null /* onSettingsClick */, null /* onAppSettingsClick */ , + false /* isNonblockable */, true /* isForBlockingHelper */, + true /* isUserSentimentNegative */); + + NotificationGuts guts = spy(new NotificationGuts(mContext, null)); + when(guts.getWindowToken()).thenReturn(mock(IBinder.class)); + doNothing().when(guts).animateClose(anyInt(), anyInt(), anyBoolean()); + doNothing().when(guts).setExposed(anyBoolean(), anyBoolean()); + guts.setGutsContent(mNotificationInfo); + mNotificationInfo.setGutsParent(guts); + + mNotificationInfo.findViewById(R.id.keep).performClick(); + + verify(mBlockingHelperManager).dismissCurrentBlockingHelper(); + mTestableLooper.processAllMessages(); + verify(mMockINotificationManager, times(1)) + .setNotificationsEnabledWithImportanceLockForPackage( + anyString(), eq(TEST_UID), eq(true)); + } + + @Test public void testCloseControls_blockingHelperDismissedIfShown() throws Exception { mNotificationInfo.bindNotification( diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java index 9e8fa2243ccc..231cdf5e8e7d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java @@ -121,7 +121,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { fragment.initNotificationIconArea(mMockNotificiationAreaController); fragment.disable(StatusBarManager.DISABLE_CLOCK, 0, false); - assertEquals(View.INVISIBLE, mFragment.getView().findViewById(R.id.clock).getVisibility()); + assertEquals(View.GONE, mFragment.getView().findViewById(R.id.clock).getVisibility()); fragment.disable(0, 0, false); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java index f3d79fd58982..c573ca88a471 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java @@ -347,6 +347,30 @@ public class SmartReplyViewTest extends SysuiTestCase { assertEqualLayouts(expectedView.getChildAt(2), mView.getChildAt(2)); } + @Test + public void testMeasure_dropLongest() { + final CharSequence[] choices = new CharSequence[]{"Short", "Short", + "LooooooongUnbreakableReplyyyyy"}; + + // Short choices should be shown as single line views + ViewGroup expectedView = buildExpectedView( + new CharSequence[]{"Short", "Short"}, 1); + expectedView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); + expectedView.layout(10, 10, 10 + expectedView.getMeasuredWidth(), + 10 + expectedView.getMeasuredHeight()); + + setRepliesFromRemoteInput(choices); + mView.measure( + MeasureSpec.makeMeasureSpec(expectedView.getMeasuredWidth(), MeasureSpec.AT_MOST), + MeasureSpec.UNSPECIFIED); + mView.layout(10, 10, 10 + mView.getMeasuredWidth(), 10 + mView.getMeasuredHeight()); + + assertEqualLayouts(expectedView, mView); + assertReplyButtonShownWithEqualMeasures(expectedView.getChildAt(0), mView.getChildAt(0)); + assertReplyButtonShownWithEqualMeasures(expectedView.getChildAt(1), mView.getChildAt(1)); + assertReplyButtonHidden(mView.getChildAt(2)); + } + private void setRepliesFromRemoteInput(CharSequence[] choices) { PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(TEST_ACTION), 0); @@ -407,10 +431,7 @@ public class SmartReplyViewTest extends SysuiTestCase { private static void assertReplyButtonShownWithEqualMeasures(View expected, View actual) { assertReplyButtonShown(actual); assertEqualMeasures(expected, actual); - assertEquals(expected.getPaddingLeft(), actual.getPaddingLeft()); - assertEquals(expected.getPaddingTop(), actual.getPaddingTop()); - assertEquals(expected.getPaddingRight(), actual.getPaddingRight()); - assertEquals(expected.getPaddingBottom(), actual.getPaddingBottom()); + assertEqualPadding(expected, actual); } private static void assertReplyButtonShown(View view) { @@ -427,4 +448,11 @@ public class SmartReplyViewTest extends SysuiTestCase { assertEquals(expected.getRight(), actual.getRight()); assertEquals(expected.getBottom(), actual.getBottom()); } + + private static void assertEqualPadding(View expected, View actual) { + assertEquals(expected.getPaddingLeft(), actual.getPaddingLeft()); + assertEquals(expected.getPaddingTop(), actual.getPaddingTop()); + assertEquals(expected.getPaddingRight(), actual.getPaddingRight()); + assertEquals(expected.getPaddingBottom(), actual.getPaddingBottom()); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java index da8017e25525..ff6558700650 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java @@ -105,4 +105,10 @@ public class ZenModeControllerImplTest extends SysuiTestCase { assertTrue(mController.areNotificationsHiddenInShade()); } -}
\ No newline at end of file + + @Test + public void testAddNullCallback() { + mController.addCallback(null); + mController.fireConfigChanged(null); + } +} diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index d61f228adb69..95dc3abc3a4c 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -3967,6 +3967,7 @@ message MetricsEvent { // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // NOTE: starting on OS P, it also added the following field: // Tag FIELD_FLAGS - Flags used to start the session + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_SESSION_STARTED = 906; // An autofill request was processed by a service @@ -3980,6 +3981,7 @@ message MetricsEvent { // Type TYPE_CLOSE: Service returned a null response. // Tag FIELD_AUTOFILL_NUM_FIELD_CLASSIFICATION_IDS: if service requested field classification, // number of entries field ids in the request. + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_REQUEST = 907; // Tag of a field for a package of an autofill service @@ -3998,6 +4000,7 @@ message MetricsEvent { // Tag FIELD_AUTOFILL_NUM_DATASETS: The number of datasets shown // NOTE: starting on OS P, it also added the following field: // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_FILL_UI = 910; // Tag of a field for the length of the filter text @@ -4005,12 +4008,17 @@ message MetricsEvent { // An autofill authentication succeeded // Package: Package of app that was autofilled + // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_AUTHENTICATED = 912; // An activity was autofilled and all values could be applied // Package: Package of app that is autofilled // Tag FIELD_AUTOFILL_NUM_VALUES: Number of values that were suggested to be autofilled // Tag FIELD_AUTOFILL_NUM_VIEWS_FILLED: Number of views that could be filled + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_DATASET_APPLIED = 913; // Tag of a field for the number values to be filled in @@ -4027,6 +4035,7 @@ message MetricsEvent { // Tag FIELD_AUTOFILL_NUM_IDS: The number of ids that are saved // NOTE: starting on OS P, it also added the following field: // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_SAVE_UI = 916; // Tag of a field for the number of saveable ids @@ -4038,10 +4047,14 @@ message MetricsEvent { // Type TYPE_FAILURE: The request failed // Package: Package of app that was autofilled // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_DATA_SAVE_REQUEST = 918; // An auto-fill session was finished // Package: Package of app that was autofilled + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_SESSION_FINISHED = 919; // meta-event: a reader has checkpointed the log here. @@ -4167,6 +4180,8 @@ message MetricsEvent { // Package: Real package of the app being autofilled // Tag FIELD_AUTOFILL_SERVICE: Package of the autofill service that processed the request // TAG FIELD_AUTOFILL_FORGED_COMPONENT_NAME: Component name being forged + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_FORGED_COMPONENT_ATTEMPT = 948; // FIELD - The component that an app tried tro forged. @@ -4624,6 +4639,8 @@ message MetricsEvent { // OS: O MR // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // Tag FIELD_AUTOFILL_PREVIOUS_LENGTH: the previous length of the value + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_VALUE_RESET = 1124; // Tag of AUTOFILL_VALUE_RESET @@ -4634,18 +4651,24 @@ message MetricsEvent { // Package: Package of app that was autofilled // OS: O MR // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_DATASET_AUTHENTICATED = 1126; // An autofill service provided an invalid dataset authentication // Package: Package of app that was autofilled // OS: O MR // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_INVALID_DATASET_AUTHENTICATION = 1127; // An autofill service provided an invalid authentication extra // Package: Package of app that was autofilled // OS: O MR // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_INVALID_AUTHENTICATION = 1128; // An autofill service used a custom description (using RemoteViews) in the autofill save UI @@ -4653,6 +4676,8 @@ message MetricsEvent { // OS: O MR // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // Tag FIELD_AUTOFILL_SAVE_TYPE: Type of save object passed by the service + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_SAVE_CUSTOM_DESCRIPTION = 1129; // FIELD - Type of save object passed by the service when the Save UI is shown @@ -4664,6 +4689,8 @@ message MetricsEvent { // OS: O MR // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // Tag FIELD_AUTOFILL_SAVE_TYPE: Type of save object passed by the service + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_SAVE_CUSTOM_SUBTITLE = 1131; // User tapped a link in the custom description of the autofill save UI provided by an autofill service @@ -4674,6 +4701,8 @@ message MetricsEvent { // Type TYPE_FAILURE: The link could not launc an activity // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // Tag FIELD_AUTOFILL_SAVE_TYPE: Type of save object passed by the service + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_SAVE_LINK_TAPPED = 1132; // Result of the validation on save when an autofill service provided a validator @@ -4684,6 +4713,8 @@ message MetricsEvent { // Type TYPE_DISMISS: The validation failed // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // Tag FIELD_AUTOFILL_SAVE_TYPE: Type of save object passed by the service + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_SAVE_VALIDATION = 1133; // Result of an operation in the autofill save UI after the user tapped a link in the custom description @@ -4693,6 +4724,8 @@ message MetricsEvent { // Type TYPE_OPEN: The autofill save UI was restored // Type TYPE_DISMISS: The autofill save UI was destroyed // Type TYPE_FAILURE: An invalid opperation was reported by the app's AutofillManager + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_PENDING_SAVE_UI_OPERATION = 1134; // Autofill service called API that disables itself @@ -4705,6 +4738,8 @@ message MetricsEvent { // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // Package: Package of the autofill service // OS: O MR + // NOTE: starting on OS P, it also added the following field: + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_UI_LATENCY = 1136; // Action: the snooze leave-behind was shown after the user clicked the snooze icon @@ -4872,12 +4907,14 @@ message MetricsEvent { // Package: Package of app that is autofilled // OS: P // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_EXPLICIT_SAVE_TRIGGER_DEFINITION = 1228; // The autofill context was commited when the user clicked a view explicitly marked by the // service as committing it // Package: Package of app that is autofilled // OS: P + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_SAVE_EXPLICITLY_TRIGGERED = 1229; // OPEN: Settings > Network & Internet > Mobile network > Wi-Fi calling @@ -4890,6 +4927,7 @@ message MetricsEvent { // OS: P // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // Tag FIELD_AUTOFILL_DURATION: duration (in ms) that autofill will be disabled + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_SERVICE_DISABLED_APP = 1231; // An autofill service asked to disable autofill for a given activity. @@ -4898,6 +4936,7 @@ message MetricsEvent { // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // Tag FIELD_CLASS_NAME: Class name of the activity that is being disabled for autofill // Tag FIELD_AUTOFILL_DURATION: duration (in ms) that autofill will be disabled + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_SERVICE_DISABLED_ACTIVITY = 1232; // ACTION: Stop an app and turn on background check @@ -5109,6 +5148,7 @@ message MetricsEvent { // OS: P // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // Tag FIELD_AUTOFILL_MATCH_SCORE: Average score of the matches, in the range of 0 to 100 + // Type FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. AUTOFILL_FIELD_CLASSIFICATION_MATCHES = 1273; // Tag used to report autofill field classification scores @@ -5775,6 +5815,43 @@ message MetricsEvent { // OS: P ACTION_STORAGE_MIGRATE_LATER = 1413; + // Tag used to report whether an activity is being autofilled on compatibility mode. + FIELD_AUTOFILL_COMPAT_MODE = 1414; + + // OPEN: Settings > Sound > Switch a2dp devices dialog + // CATEGORY: SETTINGS + // OS: P + DIALOG_SWITCH_A2DP_DEVICES = 1415; + + // OPEN: Settings > Sound > Switch hfp devices dialog + // CATEGORY: SETTINGS + // OS: P + DIALOG_SWITCH_HFP_DEVICES = 1416; + + // ACTION: User has started or ended charging + // Type TYPE_DISMISS: Charging has ended + // Type TYPE_ACTION: Charging has started, contains fields: battery level + // Tag FIELD_BATTERY_LEVEL_START: Battery level at the start + // Tag FIELD_BATTERY_LEVEL_END: Battery level at the end + // Tag FIELD_CHARGING_DURATION: Time in ms phone was charging + // Tag FIELD_PLUG_TYPE: Charging plug type + ACTION_CHARGE = 1417; + + // Tag used to determine battery level when device started charging + FIELD_BATTERY_LEVEL_START = 1418; + + // Tag used to determine battery level when device ended charging + FIELD_BATTERY_LEVEL_END = 1419; + + // Tag used to determine length of charging + FIELD_CHARGING_DURATION_MILLIS = 1420; + + // Tag used to determine what type of charging was started/ended + // 1 = Plugged AC + // 2 = Plugged USB + // 3 = Wireless + FIELD_PLUG_TYPE = 1421; + // ---- End P Constants, all P constants go above this line ---- // Add new aosp constants above this line. // END OF AOSP CONSTANTS diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 85b02206a594..f992049ef1fb 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -568,8 +568,9 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku Context userContext = mContext.createPackageContextAsUser(providerPackage, 0, UserHandle.of(providerUserId)); PackageManager pm = userContext.getPackageManager(); - Drawable icon = pm.getApplicationInfo(providerPackage, 0).loadUnbadgedIcon(pm); + Drawable icon = pm.getApplicationInfo(providerPackage, 0).loadUnbadgedIcon(pm).mutate(); // Create a bitmap of the icon which is what the widget's remoteview requires. + icon.setColorFilter(mIconUtilities.getDisabledColorFilter()); return mIconUtilities.createIconBitmap(icon); } catch (NameNotFoundException e) { Slog.e(TAG, "Fail to get application icon", e); diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java index 51c0488dcd9f..9b833f71869b 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java @@ -157,6 +157,9 @@ public final class AutofillManagerService extends SystemService { } }; + @GuardedBy("mLock") + private boolean mAllowInstantService; + public AutofillManagerService(Context context) { super(context); mContext = context; @@ -518,6 +521,23 @@ public final class AutofillManagerService extends SystemService { sFullScreenMode = mode; } + // Called by Shell command. + boolean getAllowInstantService() { + mContext.enforceCallingPermission(MANAGE_AUTO_FILL, TAG); + synchronized (mLock) { + return mAllowInstantService; + } + } + + // Called by Shell command. + void setAllowInstantService(boolean mode) { + mContext.enforceCallingPermission(MANAGE_AUTO_FILL, TAG); + Slog.i(TAG, "setAllowInstantService(): " + mode); + synchronized (mLock) { + mAllowInstantService = mode; + } + } + private void setDebugLocked(boolean debug) { com.android.server.autofill.Helper.sDebug = debug; android.view.autofill.Helper.sDebug = debug; @@ -866,7 +886,8 @@ public final class AutofillManagerService extends SystemService { synchronized (mLock) { final AutofillManagerServiceImpl service = getServiceForUserLocked(userId); return service.startSessionLocked(activityToken, getCallingUid(), appCallback, - autofillId, bounds, value, hasCallback, flags, componentName, compatMode); + autofillId, bounds, value, hasCallback, componentName, compatMode, + mAllowInstantService, flags); } } @@ -1202,6 +1223,7 @@ public final class AutofillManagerService extends SystemService { mAutofillCompatState.dump(prefix2, pw); pw.print(prefix2); pw.print("from settings: "); pw.println(getWhitelistedCompatModePackagesFromSettings()); + pw.print("Allow instant service: "); pw.println(mAllowInstantService); } if (showHistory) { pw.println(); pw.println("Requests history:"); pw.println(); diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index e582daa29335..d97253e1f5a8 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -32,6 +32,7 @@ import android.app.IActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ServiceInfo; @@ -341,7 +342,8 @@ final class AutofillManagerServiceImpl { int startSessionLocked(@NonNull IBinder activityToken, int uid, @NonNull IBinder appCallbackToken, @NonNull AutofillId autofillId, @NonNull Rect virtualBounds, @Nullable AutofillValue value, boolean hasCallback, - int flags, @NonNull ComponentName componentName, boolean compatMode) { + @NonNull ComponentName componentName, boolean compatMode, + boolean bindInstantServiceAllowed, int flags) { if (!isEnabledLocked()) { return 0; } @@ -371,7 +373,7 @@ final class AutofillManagerServiceImpl { pruneAbandonedSessionsLocked(); final Session newSession = createSessionByTokenLocked(activityToken, uid, appCallbackToken, - hasCallback, componentName, compatMode, flags); + hasCallback, componentName, compatMode, bindInstantServiceAllowed, flags); if (newSession == null) { return NO_SESSION; } @@ -490,7 +492,8 @@ final class AutofillManagerServiceImpl { @GuardedBy("mLock") private Session createSessionByTokenLocked(@NonNull IBinder activityToken, int uid, @NonNull IBinder appCallbackToken, boolean hasCallback, - @NonNull ComponentName componentName, boolean compatMode, int flags) { + @NonNull ComponentName componentName, boolean compatMode, + boolean bindInstantServiceAllowed, int flags) { // use random ids so that one app cannot know that another app creates sessions int sessionId; int tries = 0; @@ -504,12 +507,12 @@ final class AutofillManagerServiceImpl { sessionId = sRandom.nextInt(); } while (sessionId == NO_SESSION || mSessions.indexOfKey(sessionId) >= 0); - assertCallerLocked(componentName); + assertCallerLocked(componentName, compatMode); final Session newSession = new Session(this, mUi, mContext, mHandler, mUserId, mLock, sessionId, uid, activityToken, appCallbackToken, hasCallback, mUiLatencyHistory, mWtfHistory, mInfo.getServiceInfo().getComponentName(), componentName, compatMode, - flags); + bindInstantServiceAllowed, flags); mSessions.put(newSession.id, newSession); return newSession; @@ -518,7 +521,7 @@ final class AutofillManagerServiceImpl { /** * Asserts the component is owned by the caller. */ - private void assertCallerLocked(@NonNull ComponentName componentName) { + private void assertCallerLocked(@NonNull ComponentName componentName, boolean compatMode) { final String packageName = componentName.getPackageName(); final PackageManager pm = mContext.getPackageManager(); final int callingUid = Binder.getCallingUid(); @@ -536,7 +539,7 @@ final class AutofillManagerServiceImpl { + ") passed component (" + componentName + ") owned by UID " + packageUid); mMetricsLogger.write( Helper.newLogMaker(MetricsEvent.AUTOFILL_FORGED_COMPONENT_ATTEMPT, - callingPackage, getServicePackageName()) + callingPackage, getServicePackageName(), compatMode) .addTaggedData(MetricsEvent.FIELD_AUTOFILL_FORGED_COMPONENT_NAME, componentName == null ? "null" : componentName.flattenToShortString())); @@ -667,7 +670,10 @@ final class AutofillManagerServiceImpl { @NonNull CharSequence getServiceLabel() { - return mInfo.getServiceInfo().loadLabel(mContext.getPackageManager()); + final CharSequence label = mInfo.getServiceInfo().loadSafeLabel( + mContext.getPackageManager(), 0 /* do not ellipsize */, + PackageItemInfo.SAFE_LABEL_FLAG_FIRST_LINE | PackageItemInfo.SAFE_LABEL_FLAG_TRIM); + return label; } @NonNull @@ -774,10 +780,10 @@ final class AutofillManagerServiceImpl { @Nullable ArrayList<String> changedDatasetIds, @Nullable ArrayList<AutofillId> manuallyFilledFieldIds, @Nullable ArrayList<ArrayList<String>> manuallyFilledDatasetIds, - @NonNull String appPackageName) { + @NonNull String appPackageName, boolean compatMode) { logContextCommittedLocked(sessionId, clientState, selectedDatasets, ignoredDatasets, changedFieldIds, changedDatasetIds, manuallyFilledFieldIds, - manuallyFilledDatasetIds, null, null, appPackageName); + manuallyFilledDatasetIds, null, null, appPackageName, compatMode); } @GuardedBy("mLock") @@ -790,7 +796,7 @@ final class AutofillManagerServiceImpl { @Nullable ArrayList<ArrayList<String>> manuallyFilledDatasetIds, @Nullable ArrayList<AutofillId> detectedFieldIdsList, @Nullable ArrayList<FieldClassification> detectedFieldClassificationsList, - @NonNull String appPackageName) { + @NonNull String appPackageName, boolean compatMode) { if (isValidEventLocked("logDatasetNotSelected()", sessionId)) { if (sVerbose) { Slog.v(TAG, "logContextCommitted() with FieldClassification: id=" + sessionId @@ -800,7 +806,8 @@ final class AutofillManagerServiceImpl { + ", changedDatasetIds=" + changedDatasetIds + ", manuallyFilledFieldIds=" + manuallyFilledFieldIds + ", detectedFieldIds=" + detectedFieldIdsList - + ", detectedFieldClassifications=" + detectedFieldClassificationsList); + + ", detectedFieldClassifications=" + detectedFieldClassificationsList + + ", compatMode=" + compatMode); } AutofillId[] detectedFieldsIds = null; FieldClassification[] detectedFieldClassifications = null; @@ -827,7 +834,7 @@ final class AutofillManagerServiceImpl { final int averageScore = (int) ((totalScore * 100) / totalSize); mMetricsLogger.write(Helper .newLogMaker(MetricsEvent.AUTOFILL_FIELD_CLASSIFICATION_MATCHES, - appPackageName, getServicePackageName()) + appPackageName, getServicePackageName(), compatMode) .setCounterValue(numberFields) .addTaggedData(MetricsEvent.FIELD_AUTOFILL_MATCH_SCORE, averageScore)); @@ -911,6 +918,7 @@ final class AutofillManagerServiceImpl { } else { pw.println(); mInfo.dump(prefix2, pw); + pw.print(prefix); pw.print("Service Label: "); pw.println(getServiceLabel()); } pw.print(prefix); pw.print("Component from settings: "); pw.println(getComponentNameFromSettings()); @@ -1122,7 +1130,7 @@ final class AutofillManagerServiceImpl { /** * Called by {@link Session} when service asked to disable autofill for an app. */ - void disableAutofillForApp(@NonNull String packageName, long duration) { + void disableAutofillForApp(@NonNull String packageName, long duration, boolean compatMode) { synchronized (mLock) { if (mDisabledApps == null) { mDisabledApps = new ArrayMap<>(1); @@ -1135,7 +1143,7 @@ final class AutofillManagerServiceImpl { mDisabledApps.put(packageName, expiration); int intDuration = duration > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) duration; mMetricsLogger.write(Helper.newLogMaker(MetricsEvent.AUTOFILL_SERVICE_DISABLED_APP, - packageName, getServicePackageName()) + packageName, getServicePackageName(), compatMode) .addTaggedData(MetricsEvent.FIELD_AUTOFILL_DURATION, intDuration)); } } @@ -1143,7 +1151,8 @@ final class AutofillManagerServiceImpl { /** * Called by {@link Session} when service asked to disable autofill an app. */ - void disableAutofillForActivity(@NonNull ComponentName componentName, long duration) { + void disableAutofillForActivity(@NonNull ComponentName componentName, long duration, + boolean compatMode) { synchronized (mLock) { if (mDisabledActivities == null) { mDisabledActivities = new ArrayMap<>(1); @@ -1160,7 +1169,8 @@ final class AutofillManagerServiceImpl { mMetricsLogger.write(new LogMaker(MetricsEvent.AUTOFILL_SERVICE_DISABLED_ACTIVITY) .setComponentName(componentName) .addTaggedData(MetricsEvent.FIELD_AUTOFILL_SERVICE, getServicePackageName()) - .addTaggedData(MetricsEvent.FIELD_AUTOFILL_DURATION, intDuration)); + .addTaggedData(MetricsEvent.FIELD_AUTOFILL_DURATION, intDuration) + .addTaggedData(MetricsEvent.FIELD_AUTOFILL_COMPAT_MODE, compatMode ? 1 : 0)); } } diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java index c76c8ac61705..f7b7ceb4a6da 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java @@ -86,6 +86,9 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand { pw.println(" get fc_score [--algorithm ALGORITHM] value1 value2"); pw.println(" Gets the field classification score for 2 fields."); pw.println(""); + pw.println(" get bind-instant-service-allowed"); + pw.println(" Gets whether binding to services provided by instant apps is allowed"); + pw.println(""); pw.println(" set log_level [off | debug | verbose]"); pw.println(" Sets the Autofill log level."); pw.println(""); @@ -98,6 +101,9 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand { pw.println(" set full_screen_mode [true | false | default]"); pw.println(" Sets the Fill UI full screen mode"); pw.println(""); + pw.println(" set bind-instant-service-allowed [true | false]"); + pw.println(" Sets whether binding to services provided by instant apps is allowed"); + pw.println(""); pw.println(" list sessions [--user USER_ID]"); pw.println(" Lists all pending sessions."); pw.println(""); @@ -123,6 +129,8 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand { return getFieldClassificationScore(pw); case "full_screen_mode": return getFullScreenMode(pw); + case "bind-instant-service-allowed": + return getBindInstantService(pw); default: pw.println("Invalid set: " + what); return -1; @@ -141,6 +149,8 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand { return setMaxVisibileDatasets(); case "full_screen_mode": return setFullScreenMode(pw); + case "bind-instant-service-allowed": + return setBindInstantService(pw); default: pw.println("Invalid set: " + what); return -1; @@ -259,6 +269,30 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand { } } + private int getBindInstantService(PrintWriter pw) { + if (mService.getAllowInstantService()) { + pw.println("true"); + } else { + pw.println("false"); + } + return 0; + } + + private int setBindInstantService(PrintWriter pw) { + final String mode = getNextArgRequired(); + switch (mode.toLowerCase()) { + case "true": + mService.setAllowInstantService(true); + return 0; + case "false": + mService.setAllowInstantService(false); + return 0; + default: + pw.println("Invalid mode: " + mode); + return -1; + } + } + private int requestDestroy(PrintWriter pw) { if (!isNextArgSessions(pw)) { return -1; diff --git a/services/autofill/java/com/android/server/autofill/FieldClassificationStrategy.java b/services/autofill/java/com/android/server/autofill/FieldClassificationStrategy.java index 9bec856e2308..ba544f17c06c 100644 --- a/services/autofill/java/com/android/server/autofill/FieldClassificationStrategy.java +++ b/services/autofill/java/com/android/server/autofill/FieldClassificationStrategy.java @@ -15,8 +15,6 @@ */ package com.android.server.autofill; -import static android.view.autofill.AutofillManager.FC_SERVICE_TIMEOUT; - import static com.android.server.autofill.Helper.sDebug; import static com.android.server.autofill.Helper.sVerbose; import static android.service.autofill.AutofillFieldClassificationService.SERVICE_META_DATA_KEY_AVAILABLE_ALGORITHMS; @@ -52,8 +50,6 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; /** * Strategy used to bridge the field classification algorithms provided by a service in an external diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java index 78526f53cdde..f78101338d2e 100644 --- a/services/autofill/java/com/android/server/autofill/Helper.java +++ b/services/autofill/java/com/android/server/autofill/Helper.java @@ -21,7 +21,6 @@ import android.annotation.Nullable; import android.app.assist.AssistStructure; import android.app.assist.AssistStructure.ViewNode; import android.metrics.LogMaker; -import android.os.Bundle; import android.service.autofill.Dataset; import android.util.ArrayMap; import android.util.ArraySet; @@ -35,10 +34,7 @@ import com.android.internal.util.ArrayUtils; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.Arrays; import java.util.LinkedList; -import java.util.Objects; -import java.util.Set; public final class Helper { @@ -72,6 +68,9 @@ public final class Helper { /** * When non-null, overrides whether the UI should be shown on full-screen mode. + * + * <p>Note: access to this variable is not synchronized because it's "final" on real usage - + * it's only set by Shell cmd, for development purposes. */ public static Boolean sFullScreenMode = null; @@ -119,6 +118,13 @@ public final class Helper { return log; } + @NonNull + public static LogMaker newLogMaker(int category, String packageName, + String servicePackageName, boolean compatMode) { + return newLogMaker(category, packageName, servicePackageName) + .addTaggedData(MetricsEvent.FIELD_AUTOFILL_COMPAT_MODE, compatMode ? 1 : 0); + } + public static void printlnRedactedText(@NonNull PrintWriter pw, @Nullable CharSequence text) { if (text == null) { pw.println("null"); diff --git a/services/autofill/java/com/android/server/autofill/RemoteFillService.java b/services/autofill/java/com/android/server/autofill/RemoteFillService.java index f7a4b73e85cb..4ded3fe29f2a 100644 --- a/services/autofill/java/com/android/server/autofill/RemoteFillService.java +++ b/services/autofill/java/com/android/server/autofill/RemoteFillService.java @@ -84,6 +84,8 @@ final class RemoteFillService implements DeathRecipient { private final Handler mHandler; + private final boolean mBindInstantServiceAllowed; + private IAutoFillService mAutoFillService; private boolean mBinding; @@ -109,13 +111,14 @@ final class RemoteFillService implements DeathRecipient { } public RemoteFillService(Context context, ComponentName componentName, - int userId, FillServiceCallbacks callbacks) { + int userId, FillServiceCallbacks callbacks, boolean bindInstantServiceAllowed) { mContext = context; mCallbacks = callbacks; mComponentName = componentName; mIntent = new Intent(AutofillService.SERVICE_INTERFACE).setComponent(mComponentName); mUserId = userId; mHandler = new Handler(FgThread.getHandler().getLooper()); + mBindInstantServiceAllowed = bindInstantServiceAllowed; } public void destroy() { @@ -207,6 +210,7 @@ final class RemoteFillService implements DeathRecipient { .append(String.valueOf(isBound())).println(); pw.append(prefix).append(tab).append("hasPendingRequest=") .append(String.valueOf(mPendingRequest != null)).println(); + pw.append(prefix).append("mBindInstantServiceAllowed=").println(mBindInstantServiceAllowed); pw.println(); } @@ -258,12 +262,17 @@ final class RemoteFillService implements DeathRecipient { if (sVerbose) Slog.v(LOG_TAG, "[user: " + mUserId + "] ensureBound()"); mBinding = true; - boolean willBind = mContext.bindServiceAsUser(mIntent, mServiceConnection, - Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE, + int flags = Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE; + if (mBindInstantServiceAllowed) { + flags |= Context.BIND_ALLOW_INSTANT; + } + + final boolean willBind = mContext.bindServiceAsUser(mIntent, mServiceConnection, flags, new UserHandle(mUserId)); if (!willBind) { - if (sDebug) Slog.d(LOG_TAG, "[user: " + mUserId + "] could not bind to " + mIntent); + Slog.w(LOG_TAG, "[user: " + mUserId + "] could not bind to " + mIntent + " using flags " + + flags); mBinding = false; if (!mServiceDied) { diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index c05506066e6a..73c71725200c 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -517,7 +517,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState @NonNull IBinder client, boolean hasCallback, @NonNull LocalLog uiLatencyHistory, @NonNull LocalLog wtfHistory, @NonNull ComponentName serviceComponentName, @NonNull ComponentName componentName, - boolean compatMode, int flags) { + boolean compatMode, boolean bindInstantServiceAllowed, int flags) { id = sessionId; mFlags = flags; this.uid = uid; @@ -526,7 +526,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mLock = lock; mUi = ui; mHandler = handler; - mRemoteFillService = new RemoteFillService(context, serviceComponentName, userId, this); + mRemoteFillService = new RemoteFillService(context, serviceComponentName, userId, this, + bindInstantServiceAllowed); mActivityToken = activityToken; mHasCallback = hasCallback; mUiLatencyHistory = uiLatencyHistory; @@ -644,9 +645,10 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState Slog.d(TAG, message.toString()); } if ((flags & FillResponse.FLAG_DISABLE_ACTIVITY_ONLY) != 0) { - mService.disableAutofillForActivity(mComponentName, disableDuration); + mService.disableAutofillForActivity(mComponentName, disableDuration, mCompatMode); } else { - mService.disableAutofillForApp(mComponentName.getPackageName(), disableDuration); + mService.disableAutofillForApp(mComponentName.getPackageName(), disableDuration, + mCompatMode); } sessionFinishedState = AutofillManager.STATE_DISABLED_BY_SERVICE; } @@ -1251,7 +1253,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mService.logContextCommittedLocked(id, mClientState, mSelectedDatasetIds, ignoredDatasets, changedFieldIds, changedDatasetIds, manuallyFilledFieldIds, manuallyFilledDatasetIds, - mComponentName.getPackageName()); + mComponentName.getPackageName(), mCompatMode); } } @@ -1306,7 +1308,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mService.logContextCommittedLocked(id, mClientState, mSelectedDatasetIds, ignoredDatasets, changedFieldIds, changedDatasetIds, manuallyFilledFieldIds, manuallyFilledDatasetIds, - mComponentName.getPackageName()); + mComponentName.getPackageName(), mCompatMode); return; } final Scores scores = result.getParcelable(EXTRA_SCORES); @@ -1371,7 +1373,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mService.logContextCommittedLocked(id, mClientState, mSelectedDatasetIds, ignoredDatasets, changedFieldIds, changedDatasetIds, manuallyFilledFieldIds, manuallyFilledDatasetIds, detectedFieldIds, detectedFieldClassifications, - mComponentName.getPackageName()); + mComponentName.getPackageName(), mCompatMode); }); fcStrategy.getScores(callback, algorithm, algorithmArgs, currentValues, userValues); @@ -1602,7 +1604,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState getUiForShowing().showSaveUi(mService.getServiceLabel(), mService.getServiceIcon(), mService.getServicePackageName(), saveInfo, this, mComponentName.getPackageName(), this, - mPendingSaveUi); + mPendingSaveUi, mCompatMode); if (client != null) { try { client.setSaveUiState(id, true); @@ -2080,7 +2082,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState getUiForShowing().showFillUi(filledId, response, filterText, mService.getServicePackageName(), mComponentName.getPackageName(), - mService.getServiceLabel(), mService.getServiceIcon(), this); + mService.getServiceLabel(), mService.getServiceIcon(), this, mCompatMode); synchronized (mLock) { if (mUiShownTime == 0) { @@ -2717,7 +2719,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } private LogMaker newLogMaker(int category, String servicePackageName) { - return Helper.newLogMaker(category, mComponentName.getPackageName(), servicePackageName); + return Helper.newLogMaker(category, mComponentName.getPackageName(), servicePackageName, + mCompatMode); } private void writeLog(int category) { diff --git a/services/autofill/java/com/android/server/autofill/ViewState.java b/services/autofill/java/com/android/server/autofill/ViewState.java index 2a7605552b9b..cff1a84ceafe 100644 --- a/services/autofill/java/com/android/server/autofill/ViewState.java +++ b/services/autofill/java/com/android/server/autofill/ViewState.java @@ -18,7 +18,6 @@ package com.android.server.autofill; import static android.service.autofill.FillRequest.FLAG_MANUAL_REQUEST; import static com.android.server.autofill.Helper.sDebug; -import static com.android.server.autofill.Helper.sVerbose; import android.annotation.Nullable; import android.graphics.Rect; diff --git a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java index ee18dc2e5824..811d87beaaa5 100644 --- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java +++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java @@ -170,13 +170,14 @@ public final class AutoFillUI { public void showFillUi(@NonNull AutofillId focusedId, @NonNull FillResponse response, @Nullable String filterText, @Nullable String servicePackageName, @NonNull String packageName, @NonNull CharSequence serviceLabel, - @NonNull Drawable serviceIcon, @NonNull AutoFillUiCallback callback) { + @NonNull Drawable serviceIcon, @NonNull AutoFillUiCallback callback, boolean compatMode) { if (sDebug) { final int size = filterText == null ? 0 : filterText.length(); Slog.d(TAG, "showFillUi(): id=" + focusedId + ", filter=" + size + " chars"); } - final LogMaker log = - Helper.newLogMaker(MetricsEvent.AUTOFILL_FILL_UI, packageName, servicePackageName) + final LogMaker log = Helper + .newLogMaker(MetricsEvent.AUTOFILL_FILL_UI, packageName, servicePackageName, + compatMode) .addTaggedData(MetricsEvent.FIELD_AUTOFILL_FILTERTEXT_LEN, filterText == null ? 0 : filterText.length()) .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_DATASETS, @@ -262,14 +263,16 @@ public final class AutoFillUI { public void showSaveUi(@NonNull CharSequence serviceLabel, @NonNull Drawable serviceIcon, @Nullable String servicePackageName, @NonNull SaveInfo info, @NonNull ValueFinder valueFinder, @NonNull String packageName, - @NonNull AutoFillUiCallback callback, @NonNull PendingUi pendingSaveUi) { + @NonNull AutoFillUiCallback callback, @NonNull PendingUi pendingSaveUi, + boolean compatMode) { if (sVerbose) Slog.v(TAG, "showSaveUi() for " + packageName + ": " + info); int numIds = 0; numIds += info.getRequiredIds() == null ? 0 : info.getRequiredIds().length; numIds += info.getOptionalIds() == null ? 0 : info.getOptionalIds().length; - final LogMaker log = - Helper.newLogMaker(MetricsEvent.AUTOFILL_SAVE_UI, packageName, servicePackageName) + final LogMaker log = Helper + .newLogMaker(MetricsEvent.AUTOFILL_SAVE_UI, packageName, servicePackageName, + compatMode) .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_IDS, numIds); mHandler.post(() -> { @@ -319,7 +322,7 @@ public final class AutoFillUI { } mMetricsLogger.write(log); } - }); + }, compatMode); }); } diff --git a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java index 80903c1a1fe4..fa2a0d9ad837 100644 --- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java +++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java @@ -60,6 +60,7 @@ import com.android.internal.R; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.server.UiThread; +import com.android.server.autofill.Helper; import java.io.PrintWriter; import java.util.ArrayList; @@ -134,6 +135,7 @@ final class SaveUi { private final PendingUi mPendingUi; private final String mServicePackageName; private final String mPackageName; + private final boolean mCompatMode; private boolean mDestroyed; @@ -141,12 +143,14 @@ final class SaveUi { @NonNull CharSequence serviceLabel, @NonNull Drawable serviceIcon, @Nullable String servicePackageName, @NonNull String packageName, @NonNull SaveInfo info, @NonNull ValueFinder valueFinder, - @NonNull OverlayControl overlayControl, @NonNull OnSaveListener listener) { + @NonNull OverlayControl overlayControl, @NonNull OnSaveListener listener, + boolean compatMode) { mPendingUi= pendingUi; mListener = new OneTimeListener(listener); mOverlayControl = overlayControl; mServicePackageName = servicePackageName; mPackageName = packageName; + mCompatMode = compatMode; context = new ContextThemeWrapper(context, THEME_ID); final LayoutInflater inflater = LayoutInflater.from(context); @@ -409,14 +413,12 @@ final class SaveUi { } private LogMaker newLogMaker(int category, int saveType) { - return newLogMaker(category) + return Helper.newLogMaker(category, mPackageName, mServicePackageName, mCompatMode) .addTaggedData(MetricsEvent.FIELD_AUTOFILL_SAVE_TYPE, saveType); } private LogMaker newLogMaker(int category) { - return new LogMaker(category) - .setPackageName(mPackageName) - .addTaggedData(MetricsEvent.FIELD_AUTOFILL_SERVICE, mServicePackageName); + return Helper.newLogMaker(category, mPackageName, mServicePackageName, mCompatMode); } private void writeLog(int category, int saveType) { @@ -505,6 +507,7 @@ final class SaveUi { pw.print(prefix); pw.print("pendingUi: "); pw.println(mPendingUi); pw.print(prefix); pw.print("service: "); pw.println(mServicePackageName); pw.print(prefix); pw.print("app: "); pw.println(mPackageName); + pw.print(prefix); pw.print("compat mode: "); pw.println(mCompatMode); final View view = mDialog.getWindow().getDecorView(); final int[] loc = view.getLocationOnScreen(); diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 5c5f0f8d3b4b..0775abf574b5 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -3023,20 +3023,26 @@ class AlarmManagerService extends SystemService { } private boolean isBackgroundRestricted(Alarm alarm) { - final boolean allowWhileIdle = (alarm.flags & FLAG_ALLOW_WHILE_IDLE) != 0; + boolean exemptOnBatterySaver = (alarm.flags & FLAG_ALLOW_WHILE_IDLE) != 0; if (alarm.alarmClock != null) { - // Don't block alarm clocks + // Don't defer alarm clocks return false; } - if (alarm.operation != null - && (alarm.operation.isActivity() || alarm.operation.isForegroundService())) { - // Don't block starting foreground components - return false; + if (alarm.operation != null) { + if (alarm.operation.isActivity()) { + // Don't defer starting actual UI + return false; + } + if (alarm.operation.isForegroundService()) { + // FG service alarms are nearly as important; consult AST policy + exemptOnBatterySaver = true; + } } final String sourcePackage = alarm.sourcePackage; final int sourceUid = alarm.creatorUid; return (mAppStateTracker != null) && - mAppStateTracker.areAlarmsRestricted(sourceUid, sourcePackage, allowWhileIdle); + mAppStateTracker.areAlarmsRestricted(sourceUid, sourcePackage, + exemptOnBatterySaver); } private native long init(); diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java index 13503e60183f..7f26575651af 100644 --- a/services/core/java/com/android/server/AppOpsService.java +++ b/services/core/java/com/android/server/AppOpsService.java @@ -21,13 +21,16 @@ import android.app.ActivityManager; import android.app.ActivityThread; import android.app.AppGlobals; import android.app.AppOpsManager; +import android.content.ContentResolver; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.UserInfo; +import android.database.ContentObserver; import android.media.AudioAttributes; +import android.net.Uri; import android.os.AsyncTask; import android.os.Binder; import android.os.Bundle; @@ -43,9 +46,11 @@ import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManagerInternal; +import android.provider.Settings; import android.util.ArrayMap; import android.util.ArraySet; import android.util.AtomicFile; +import android.util.KeyValueListParser; import android.util.Slog; import android.util.SparseArray; import android.util.SparseBooleanArray; @@ -109,9 +114,6 @@ public class AppOpsService extends IAppOpsService.Stub { // Write at most every 30 minutes. static final long WRITE_DELAY = DEBUG ? 1000 : 30*60*1000; - // How long we want for a drop in uid state to settle before applying it. - static final long STATE_SETTLE_TIME = 10*1000; - // Constant meaning that any UID should be matched when dispatching callbacks private static final int UID_ANY = -2; @@ -198,6 +200,75 @@ public class AppOpsService extends IAppOpsService.Stub { */ private final ArrayMap<IBinder, ClientRestrictionState> mOpUserRestrictions = new ArrayMap<>(); + /** + * All times are in milliseconds. These constants are kept synchronized with the system + * global Settings. Any access to this class or its fields should be done while + * holding the AppOpsService lock. + */ + private final class Constants extends ContentObserver { + // Key names stored in the settings value. + private static final String KEY_STATE_SETTLE_TIME = "state_settle_time"; + + /** + * How long we want for a drop in uid state to settle before applying it. + * @see Settings.Global#APP_OPS_CONSTANTS + * @see #KEY_STATE_SETTLE_TIME + */ + public long STATE_SETTLE_TIME; + + + private final KeyValueListParser mParser = new KeyValueListParser(','); + private ContentResolver mResolver; + + public Constants(Handler handler) { + super(handler); + updateConstants(); + } + + public void startMonitoring(ContentResolver resolver) { + mResolver = resolver; + mResolver.registerContentObserver( + Settings.Global.getUriFor(Settings.Global.DEVICE_IDLE_CONSTANTS), + false, this); + updateConstants(); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + updateConstants(); + } + + private void updateConstants() { + synchronized (AppOpsService.this) { + try { + if (mResolver != null) { + mParser.setString(Settings.Global.getString(mResolver, + Settings.Global.APP_OPS_CONSTANTS)); + } else { + mParser.setString(""); + } + } catch (IllegalArgumentException e) { + // Failed to parse the settings string, log this and move on + // with defaults. + Slog.e(TAG, "Bad app ops settings", e); + } + + STATE_SETTLE_TIME = mParser.getDurationMillis( + KEY_STATE_SETTLE_TIME, 10 * 1000L); + } + } + + void dump(PrintWriter pw) { + pw.println(" Settings:"); + + pw.print(" "); pw.print(KEY_STATE_SETTLE_TIME); pw.print("="); + TimeUtils.formatDuration(STATE_SETTLE_TIME, pw); + pw.println(); + } + } + + private final Constants mConstants; + @VisibleForTesting static final class UidState { public final int uid; @@ -210,7 +281,9 @@ public class AppOpsService extends IAppOpsService.Stub { public ArrayMap<String, Ops> pkgOps; public SparseIntArray opModes; + // true indicates there is an interested observer, false there isn't but it has such an op public SparseBooleanArray foregroundOps; + public boolean hasForegroundWatchers; public UidState(int uid) { this.uid = uid; @@ -234,8 +307,35 @@ public class AppOpsService extends IAppOpsService.Stub { return mode; } - public void evalForegroundOps() { + private void evalForegroundWatchers(int op, SparseArray<ArraySet<ModeCallback>> watchers, + SparseBooleanArray which) { + boolean curValue = which.get(op, false); + ArraySet<ModeCallback> callbacks = watchers.get(op); + if (callbacks != null) { + for (int cbi = callbacks.size() - 1; !curValue && cbi >= 0; cbi--) { + if ((callbacks.valueAt(cbi).mFlags + & AppOpsManager.WATCH_FOREGROUND_CHANGES) != 0) { + hasForegroundWatchers = true; + curValue = true; + } + } + } + which.put(op, curValue); + } + + public void evalForegroundOps(SparseArray<ArraySet<ModeCallback>> watchers) { SparseBooleanArray which = null; + hasForegroundWatchers = false; + if (opModes != null) { + for (int i = opModes.size() - 1; i >= 0; i--) { + if (opModes.valueAt(i) == AppOpsManager.MODE_FOREGROUND) { + if (which == null) { + which = new SparseBooleanArray(); + } + evalForegroundWatchers(opModes.keyAt(i), watchers, which); + } + } + } if (pkgOps != null) { for (int i = pkgOps.size() - 1; i >= 0; i--) { Ops ops = pkgOps.valueAt(i); @@ -244,7 +344,7 @@ public class AppOpsService extends IAppOpsService.Stub { if (which == null) { which = new SparseBooleanArray(); } - which.put(ops.keyAt(j), true); + evalForegroundWatchers(ops.keyAt(j), watchers, which); } } } @@ -313,13 +413,15 @@ public class AppOpsService extends IAppOpsService.Stub { final class ModeCallback implements DeathRecipient { final IAppOpsCallback mCallback; final int mWatchingUid; + final int mFlags; final int mCallingUid; final int mCallingPid; - ModeCallback(IAppOpsCallback callback, int watchingUid, int callingUid, + ModeCallback(IAppOpsCallback callback, int watchingUid, int flags, int callingUid, int callingPid) { mCallback = callback; mWatchingUid = watchingUid; + mFlags = flags; mCallingUid = callingUid; mCallingPid = callingPid; try { @@ -328,6 +430,10 @@ public class AppOpsService extends IAppOpsService.Stub { } } + public boolean isWatchingUid(int uid) { + return uid == UID_ANY || mWatchingUid < 0 || mWatchingUid == uid; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(128); @@ -335,6 +441,8 @@ public class AppOpsService extends IAppOpsService.Stub { sb.append(Integer.toHexString(System.identityHashCode(this))); sb.append(" watchinguid="); UserHandle.formatUid(sb, mWatchingUid); + sb.append(" flags=0x"); + sb.append(Integer.toHexString(mFlags)); sb.append(" from uid="); UserHandle.formatUid(sb, mCallingUid); sb.append(" pid="); @@ -439,6 +547,7 @@ public class AppOpsService extends IAppOpsService.Stub { LockGuard.installLock(this, LockGuard.INDEX_APP_OPS); mFile = new AtomicFile(storagePath, "appops"); mHandler = handler; + mConstants = new Constants(mHandler); readState(); } @@ -449,6 +558,7 @@ public class AppOpsService extends IAppOpsService.Stub { public void systemReady() { synchronized (this) { + mConstants.startMonitoring(mContext.getContentResolver()); boolean changed = false; for (int i = mUidStates.size() - 1; i >= 0; i--) { UidState uidState = mUidStates.valueAt(i); @@ -611,14 +721,16 @@ public class AppOpsService extends IAppOpsService.Stub { final UidState uidState = getUidStateLocked(uid, true); final int newState = PROCESS_STATE_TO_UID_STATE[procState]; if (uidState != null && uidState.pendingState != newState) { + final int oldPendingState = uidState.pendingState; + uidState.pendingState = newState; if (newState < uidState.state) { // We are moving to a more important state, always do it immediately. - uidState.state = newState; - uidState.pendingStateCommitTime = 0; + commitUidPendingStateLocked(uidState); } else if (uidState.pendingStateCommitTime == 0) { // We are moving to a less important state for the first time, // delay the application for a bit. - uidState.pendingStateCommitTime = SystemClock.uptimeMillis() + STATE_SETTLE_TIME; + uidState.pendingStateCommitTime = SystemClock.uptimeMillis() + + mConstants.STATE_SETTLE_TIME; } if (uidState.startNesting != 0) { // There is some actively running operation... need to find it @@ -629,13 +741,12 @@ public class AppOpsService extends IAppOpsService.Stub { for (int j = ops.size() - 1; j >= 0; j--) { final Op op = ops.valueAt(j); if (op.startNesting > 0) { - op.time[uidState.pendingState] = now; + op.time[oldPendingState] = now; op.time[newState] = now; } } } } - uidState.pendingState = newState; } } } @@ -867,7 +978,9 @@ public class AppOpsService extends IAppOpsService.Stub { ModeCallback callback = callbacks.valueAt(i); ArraySet<String> changedPackages = new ArraySet<>(); Collections.addAll(changedPackages, uidPackageNames); - callbackSpecs = new ArrayMap<>(); + if (callbackSpecs == null) { + callbackSpecs = new ArrayMap<>(); + } callbackSpecs.put(callback, changedPackages); } } @@ -932,7 +1045,7 @@ public class AppOpsService extends IAppOpsService.Stub { if (op.mode != mode) { op.mode = mode; if (uidState != null) { - uidState.evalForegroundOps(); + uidState.evalForegroundOps(mOpModeWatchers); } ArraySet<ModeCallback> cbs = mOpModeWatchers.get(code); if (cbs != null) { @@ -1126,7 +1239,7 @@ public class AppOpsService extends IAppOpsService.Stub { mUidStates.remove(uidState.uid); } if (uidChanged) { - uidState.evalForegroundOps(); + uidState.evalForegroundOps(mOpModeWatchers); } } @@ -1148,8 +1261,23 @@ public class AppOpsService extends IAppOpsService.Stub { } } + private void evalAllForegroundOpsLocked() { + for (int uidi = mUidStates.size() - 1; uidi >= 0; uidi--) { + final UidState uidState = mUidStates.valueAt(uidi); + if (uidState.foregroundOps != null) { + uidState.evalForegroundOps(mOpModeWatchers); + } + } + } + @Override public void startWatchingMode(int op, String packageName, IAppOpsCallback callback) { + startWatchingModeWithFlags(op, packageName, 0, callback); + } + + @Override + public void startWatchingModeWithFlags(int op, String packageName, int flags, + IAppOpsCallback callback) { int watchedUid = -1; final int callingUid = Binder.getCallingUid(); final int callingPid = Binder.getCallingPid(); @@ -1166,7 +1294,7 @@ public class AppOpsService extends IAppOpsService.Stub { op = (op != AppOpsManager.OP_NONE) ? AppOpsManager.opToSwitch(op) : op; ModeCallback cb = mModeWatchers.get(callback.asBinder()); if (cb == null) { - cb = new ModeCallback(callback, watchedUid, callingUid, callingPid); + cb = new ModeCallback(callback, watchedUid, flags, callingUid, callingPid); mModeWatchers.put(callback.asBinder(), cb); } if (op != AppOpsManager.OP_NONE) { @@ -1185,6 +1313,7 @@ public class AppOpsService extends IAppOpsService.Stub { } cbs.add(cb); } + evalAllForegroundOpsLocked(); } } @@ -1212,6 +1341,7 @@ public class AppOpsService extends IAppOpsService.Stub { } } } + evalAllForegroundOpsLocked(); } } @@ -1249,7 +1379,7 @@ public class AppOpsService extends IAppOpsService.Stub { if (op == null) { return AppOpsManager.opToDefaultMode(code); } - return op.mode == AppOpsManager.MODE_FOREGROUND ? AppOpsManager.MODE_ALLOWED : op.mode; + return op.mode; } } @@ -1699,13 +1829,11 @@ public class AppOpsService extends IAppOpsService.Stub { } else { if (uidState.pendingStateCommitTime != 0) { if (uidState.pendingStateCommitTime < mLastUptime) { - uidState.state = uidState.pendingState; - uidState.pendingStateCommitTime = 0; + commitUidPendingStateLocked(uidState); } else { mLastUptime = SystemClock.uptimeMillis(); if (uidState.pendingStateCommitTime < mLastUptime) { - uidState.state = uidState.pendingState; - uidState.pendingStateCommitTime = 0; + commitUidPendingStateLocked(uidState); } } } @@ -1713,6 +1841,44 @@ public class AppOpsService extends IAppOpsService.Stub { return uidState; } + private void commitUidPendingStateLocked(UidState uidState) { + uidState.state = uidState.pendingState; + uidState.pendingStateCommitTime = 0; + if (uidState.hasForegroundWatchers) { + for (int fgi = uidState.foregroundOps.size() - 1; fgi >= 0; fgi--) { + if (!uidState.foregroundOps.valueAt(fgi)) { + continue; + } + final int code = uidState.foregroundOps.keyAt(fgi); + + final ArraySet<ModeCallback> callbacks = mOpModeWatchers.get(code); + if (callbacks != null) { + for (int cbi = callbacks.size() - 1; cbi >= 0; cbi--) { + final ModeCallback callback = callbacks.valueAt(cbi); + if ((callback.mFlags & AppOpsManager.WATCH_FOREGROUND_CHANGES) == 0 + || !callback.isWatchingUid(uidState.uid)) { + continue; + } + boolean doAllPackages = uidState.opModes != null + && uidState.opModes.get(code) == AppOpsManager.MODE_FOREGROUND; + if (uidState.pkgOps != null) { + for (int pkgi = uidState.pkgOps.size() - 1; pkgi >= 0; pkgi--) { + final Op op = uidState.pkgOps.valueAt(pkgi).get(code); + if (doAllPackages || (op != null + && op.mode == AppOpsManager.MODE_FOREGROUND)) { + mHandler.sendMessage(PooledLambda.obtainMessage( + AppOpsService::notifyOpChanged, + this, callback, code, uidState.uid, + uidState.pkgOps.keyAt(pkgi))); + } + } + } + } + } + } + } + } + private Ops getOpsRawLocked(int uid, String packageName, boolean edit, boolean uidMismatchExpected) { UidState uidState = getUidStateLocked(uid, edit); @@ -1952,7 +2118,7 @@ public class AppOpsService extends IAppOpsService.Stub { } } if (changed) { - uidState.evalForegroundOps(); + uidState.evalForegroundOps(mOpModeWatchers); } } } @@ -2151,7 +2317,7 @@ public class AppOpsService extends IAppOpsService.Stub { } UidState uidState = getUidStateLocked(uid, false); if (uidState != null) { - uidState.evalForegroundOps(); + uidState.evalForegroundOps(mOpModeWatchers); } } @@ -2322,7 +2488,7 @@ public class AppOpsService extends IAppOpsService.Stub { } } - int strModeToMode(String modeStr, PrintWriter err) { + static int strModeToMode(String modeStr, PrintWriter err) { for (int i = AppOpsManager.MODE_NAMES.length - 1; i >= 0; i--) { if (AppOpsManager.MODE_NAMES[i].equals(modeStr)) { return i; @@ -2716,6 +2882,10 @@ public class AppOpsService extends IAppOpsService.Stub { pw.println(" Print this help text."); pw.println(" --op [OP]"); pw.println(" Limit output to data associated with the given app op code."); + pw.println(" --mode [MODE]"); + pw.println(" Limit output to data associated with the given app op mode."); + pw.println(" --package [PACKAGE]"); + pw.println(" Limit output to data associated with the given package name."); } private void dumpTimesLocked(PrintWriter pw, String firstPrefix, String prefix, long[] times, @@ -2751,6 +2921,9 @@ public class AppOpsService extends IAppOpsService.Stub { if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, TAG, pw)) return; int dumpOp = -1; + String dumpPackage = null; + int dumpUid = -1; + int dumpMode = -1; if (args != null) { for (int i=0; i<args.length; i++) { @@ -2770,6 +2943,34 @@ public class AppOpsService extends IAppOpsService.Stub { if (dumpOp < 0) { return; } + } else if ("--package".equals(arg)) { + i++; + if (i >= args.length) { + pw.println("No argument for --package option"); + return; + } + dumpPackage = args[i]; + try { + dumpUid = AppGlobals.getPackageManager().getPackageUid(dumpPackage, + PackageManager.MATCH_KNOWN_PACKAGES | PackageManager.MATCH_INSTANT, + 0); + } catch (RemoteException e) { + } + if (dumpUid < 0) { + pw.println("Unknown package: " + dumpPackage); + return; + } + dumpUid = UserHandle.getAppId(dumpUid); + } else if ("--mode".equals(arg)) { + i++; + if (i >= args.length) { + pw.println("No argument for --mode option"); + return; + } + dumpMode = Shell.strModeToMode(args[i], pw); + if (dumpMode < 0) { + return; + } } else if (arg.length() > 0 && arg.charAt(0) == '-'){ pw.println("Unknown option: " + arg); return; @@ -2782,6 +2983,8 @@ public class AppOpsService extends IAppOpsService.Stub { synchronized (this) { pw.println("Current AppOps Service state:"); + mConstants.dump(pw); + pw.println(); final long now = System.currentTimeMillis(); final long nowElapsed = SystemClock.elapsedRealtime(); final long nowUptime = SystemClock.uptimeMillis(); @@ -2789,29 +2992,46 @@ public class AppOpsService extends IAppOpsService.Stub { final Date date = new Date(); boolean needSep = false; if (mOpModeWatchers.size() > 0) { - needSep = true; boolean printedHeader = false; for (int i=0; i<mOpModeWatchers.size(); i++) { if (dumpOp >= 0 && dumpOp != mOpModeWatchers.keyAt(i)) { continue; } - if (!printedHeader) { - pw.println(" Op mode watchers:"); - printedHeader = true; - } - pw.print(" Op "); pw.print(AppOpsManager.opToName(mOpModeWatchers.keyAt(i))); - pw.println(":"); + boolean printedOpHeader = false; ArraySet<ModeCallback> callbacks = mOpModeWatchers.valueAt(i); for (int j=0; j<callbacks.size(); j++) { + final ModeCallback cb = callbacks.valueAt(j); + if (dumpPackage != null && cb.mWatchingUid >= 0 + && dumpUid != UserHandle.getAppId(cb.mWatchingUid)) { + continue; + } + needSep = true; + if (!printedHeader) { + pw.println(" Op mode watchers:"); + printedHeader = true; + } + if (!printedOpHeader) { + pw.print(" Op "); + pw.print(AppOpsManager.opToName(mOpModeWatchers.keyAt(i))); + pw.println(":"); + printedOpHeader = true; + } pw.print(" #"); pw.print(j); pw.print(": "); - pw.println(callbacks.valueAt(j)); + pw.println(cb); } } } - if (mPackageModeWatchers.size() > 0) { - needSep = true; - pw.println(" Package mode watchers:"); + if (mPackageModeWatchers.size() > 0 && dumpOp < 0) { + boolean printedHeader = false; for (int i=0; i<mPackageModeWatchers.size(); i++) { + if (dumpPackage != null && !dumpPackage.equals(mPackageModeWatchers.keyAt(i))) { + continue; + } + needSep = true; + if (!printedHeader) { + pw.println(" Package mode watchers:"); + printedHeader = true; + } pw.print(" Pkg "); pw.print(mPackageModeWatchers.keyAt(i)); pw.println(":"); ArraySet<ModeCallback> callbacks = mPackageModeWatchers.valueAt(i); @@ -2822,15 +3042,24 @@ public class AppOpsService extends IAppOpsService.Stub { } } if (mModeWatchers.size() > 0 && dumpOp < 0) { - needSep = true; - pw.println(" All op mode watchers:"); + boolean printedHeader = false; for (int i=0; i<mModeWatchers.size(); i++) { + final ModeCallback cb = mModeWatchers.valueAt(i); + if (dumpPackage != null && cb.mWatchingUid >= 0 + && dumpUid != UserHandle.getAppId(cb.mWatchingUid)) { + continue; + } + needSep = true; + if (!printedHeader) { + pw.println(" All op mode watchers:"); + printedHeader = true; + } pw.print(" "); pw.print(Integer.toHexString(System.identityHashCode(mModeWatchers.keyAt(i)))); - pw.print(": "); pw.println(mModeWatchers.valueAt(i)); + pw.print(": "); pw.println(cb); } } - if (mActiveWatchers.size() > 0) { + if (mActiveWatchers.size() > 0 && dumpMode < 0) { needSep = true; boolean printedHeader = false; for (int i = 0; i < mActiveWatchers.size(); i++) { @@ -2838,9 +3067,14 @@ public class AppOpsService extends IAppOpsService.Stub { if (activeWatchers.size() <= 0) { continue; } + final ActiveCallback cb = activeWatchers.valueAt(0); if (dumpOp >= 0 && activeWatchers.indexOfKey(dumpOp) < 0) { continue; } + if (dumpPackage != null && cb.mWatchingUid >= 0 + && dumpUid != UserHandle.getAppId(cb.mWatchingUid)) { + continue; + } if (!printedHeader) { pw.println(" All op active watchers:"); printedHeader = true; @@ -2862,10 +3096,10 @@ public class AppOpsService extends IAppOpsService.Stub { } pw.println("]"); pw.print(" "); - pw.println(activeWatchers.valueAt(0)); + pw.println(cb); } } - if (mClients.size() > 0) { + if (mClients.size() > 0 && dumpMode < 0) { needSep = true; boolean printedHeader = false; for (int i=0; i<mClients.size(); i++) { @@ -2878,6 +3112,9 @@ public class AppOpsService extends IAppOpsService.Stub { if (dumpOp >= 0 && op.op != dumpOp) { continue; } + if (dumpPackage != null && !dumpPackage.equals(op.packageName)) { + continue; + } if (!printedHeader) { pw.println(" Clients:"); printedHeader = true; @@ -2898,7 +3135,8 @@ public class AppOpsService extends IAppOpsService.Stub { } } } - if (mAudioRestrictions.size() > 0 && dumpOp < 0) { + if (mAudioRestrictions.size() > 0 && dumpOp < 0 && dumpPackage != null + && dumpMode < 0) { boolean printedHeader = false; for (int o=0; o<mAudioRestrictions.size(); o++) { final String op = AppOpsManager.opToName(mAudioRestrictions.keyAt(o)); @@ -2931,19 +3169,44 @@ public class AppOpsService extends IAppOpsService.Stub { final SparseIntArray opModes = uidState.opModes; final ArrayMap<String, Ops> pkgOps = uidState.pkgOps; - if (dumpOp >= 0) { - boolean hasOp = uidState.opModes != null - && uidState.opModes.indexOfKey(dumpOp) >= 0; + if (dumpOp >= 0 || dumpPackage != null || dumpMode >= 0) { + boolean hasOp = dumpOp < 0 || (uidState.opModes != null + && uidState.opModes.indexOfKey(dumpOp) >= 0); + boolean hasPackage = dumpPackage == null; + boolean hasMode = dumpMode < 0; + if (!hasMode && opModes != null) { + for (int opi = 0; !hasMode && opi < opModes.size(); opi++) { + if (opModes.valueAt(opi) == dumpMode) { + hasMode = true; + } + } + } if (pkgOps != null) { - for (int pkgi = 0; !hasOp && pkgi < pkgOps.size(); pkgi++) { + for (int pkgi = 0; + (!hasOp || !hasPackage || !hasMode) && pkgi < pkgOps.size(); + pkgi++) { Ops ops = pkgOps.valueAt(pkgi); - if (ops != null && ops.indexOfKey(dumpOp) >= 0) { + if (!hasOp && ops != null && ops.indexOfKey(dumpOp) >= 0) { hasOp = true; - continue; } + if (!hasMode) { + for (int opi = 0; !hasMode && opi < ops.size(); opi++) { + if (ops.valueAt(opi).mode == dumpMode) { + hasMode = true; + } + } + } + if (!hasPackage && dumpPackage.equals(ops.packageName)) { + hasPackage = true; + } + } + } + if (uidState.foregroundOps != null && !hasOp) { + if (uidState.foregroundOps.indexOfKey(dumpOp) > 0) { + hasOp = true; } } - if (!hasOp) { + if (!hasOp || !hasPackage || !hasMode) { continue; } } @@ -2964,12 +3227,20 @@ public class AppOpsService extends IAppOpsService.Stub { pw.print(" startNesting="); pw.println(uidState.startNesting); } - if (uidState.foregroundOps != null) { + if (uidState.foregroundOps != null && (dumpMode < 0 + || dumpMode == AppOpsManager.MODE_FOREGROUND)) { pw.println(" foregroundOps:"); for (int j = 0; j < uidState.foregroundOps.size(); j++) { - pw.print(" "); - pw.println(AppOpsManager.opToName(uidState.foregroundOps.keyAt(j))); + if (dumpOp >= 0 && dumpOp != uidState.foregroundOps.keyAt(j)) { + continue; + } + pw.print(" "); + pw.print(AppOpsManager.opToName(uidState.foregroundOps.keyAt(j))); + pw.print(": "); + pw.println(uidState.foregroundOps.valueAt(j) ? "WATCHER" : "SILENT"); } + pw.print(" hasForegroundWatchers="); + pw.println(uidState.hasForegroundWatchers); } needSep = true; @@ -2981,6 +3252,9 @@ public class AppOpsService extends IAppOpsService.Stub { if (dumpOp >= 0 && dumpOp != code) { continue; } + if (dumpMode >= 0 && dumpMode != mode) { + continue; + } pw.print(" "); pw.print(AppOpsManager.opToName(code)); pw.print(": mode="); pw.println(AppOpsManager.modeToName(mode)); } @@ -2991,19 +3265,34 @@ public class AppOpsService extends IAppOpsService.Stub { } for (int pkgi = 0; pkgi < pkgOps.size(); pkgi++) { - Ops ops = pkgOps.valueAt(pkgi); + final Ops ops = pkgOps.valueAt(pkgi); + if (dumpPackage != null && !dumpPackage.equals(ops.packageName)) { + continue; + } boolean printedPackage = false; for (int j=0; j<ops.size(); j++) { - Op op = ops.valueAt(j); + final Op op = ops.valueAt(j); if (dumpOp >= 0 && dumpOp != op.op) { continue; } + if (dumpMode >= 0 && dumpMode != op.mode) { + continue; + } if (!printedPackage) { pw.print(" Package "); pw.print(ops.packageName); pw.println(":"); printedPackage = true; } pw.print(" "); pw.print(AppOpsManager.opToName(op.op)); pw.print(" ("); pw.print(AppOpsManager.modeToName(op.mode)); + final int switchOp = AppOpsManager.opToSwitch(op.op); + if (switchOp != op.op) { + pw.print(" / switch "); + pw.print(AppOpsManager.opToName(switchOp)); + final Op switchObj = ops.get(switchOp); + int mode = switchObj != null + ? switchObj.mode : AppOpsManager.opToDefaultMode(switchOp); + pw.print("="); pw.print(AppOpsManager.modeToName(mode)); + } pw.println("): "); dumpTimesLocked(pw, " Access: ", diff --git a/services/core/java/com/android/server/AppStateTracker.java b/services/core/java/com/android/server/AppStateTracker.java index 23c57797c1f5..9b001ce3f917 100644 --- a/services/core/java/com/android/server/AppStateTracker.java +++ b/services/core/java/com/android/server/AppStateTracker.java @@ -1056,9 +1056,9 @@ public class AppStateTracker { * @return whether alarms should be restricted for a UID package-name. */ public boolean areAlarmsRestricted(int uid, @NonNull String packageName, - boolean allowWhileIdle) { + boolean isExemptOnBatterySaver) { return isRestricted(uid, packageName, /*useTempWhitelistToo=*/ false, - /* exemptOnBatterySaver =*/ allowWhileIdle); + isExemptOnBatterySaver); } /** diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java index d31a605eac6f..87647ca79fea 100644 --- a/services/core/java/com/android/server/BatteryService.java +++ b/services/core/java/com/android/server/BatteryService.java @@ -16,36 +16,27 @@ package com.android.server; -import android.app.ActivityManagerInternal; -import android.database.ContentObserver; -import android.os.BatteryStats; - -import android.os.Bundle; -import android.os.PowerManager; -import android.os.ResultReceiver; -import android.os.ShellCallback; -import android.os.ShellCommand; -import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.app.IBatteryStats; -import com.android.internal.util.DumpUtils; -import com.android.server.am.BatteryStatsService; -import com.android.server.lights.Light; -import com.android.server.lights.LightsManager; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent; import android.app.ActivityManager; +import android.app.ActivityManagerInternal; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.hidl.manager.V1_0.IServiceManager; -import android.hidl.manager.V1_0.IServiceNotification; +import android.database.ContentObserver; import android.hardware.health.V1_0.HealthInfo; -import android.hardware.health.V2_0.IHealthInfoCallback; import android.hardware.health.V2_0.IHealth; +import android.hardware.health.V2_0.IHealthInfoCallback; import android.hardware.health.V2_0.Result; +import android.hidl.manager.V1_0.IServiceManager; +import android.hidl.manager.V1_0.IServiceNotification; +import android.metrics.LogMaker; import android.os.BatteryManager; import android.os.BatteryManagerInternal; import android.os.BatteryProperty; +import android.os.BatteryStats; import android.os.Binder; +import android.os.Bundle; import android.os.DropBoxManager; import android.os.FileUtils; import android.os.Handler; @@ -54,8 +45,12 @@ import android.os.IBatteryPropertiesListener; import android.os.IBatteryPropertiesRegistrar; import android.os.IBinder; import android.os.OsProtoEnums; +import android.os.PowerManager; import android.os.RemoteException; +import android.os.ResultReceiver; import android.os.ServiceManager; +import android.os.ShellCallback; +import android.os.ShellCommand; import android.os.SystemClock; import android.os.Trace; import android.os.UEventObserver; @@ -67,12 +62,19 @@ import android.util.MutableInt; import android.util.Slog; import android.util.proto.ProtoOutputStream; +import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.app.IBatteryStats; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.util.DumpUtils; +import com.android.server.am.BatteryStatsService; +import com.android.server.lights.Light; +import com.android.server.lights.LightsManager; + import java.io.File; import java.io.FileDescriptor; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; - import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; @@ -171,6 +173,9 @@ public final class BatteryService extends SystemService { private long mDischargeStartTime; private int mDischargeStartLevel; + private long mChargeStartTime; + private int mChargeStartLevel; + private boolean mUpdatesStopped; private Led mLed; @@ -185,6 +190,8 @@ public final class BatteryService extends SystemService { private ArrayDeque<Bundle> mBatteryLevelsEventQueue; private long mLastBatteryLevelChangedSentMs; + private MetricsLogger mMetricsLogger; + public BatteryService(Context context) { super(context); @@ -204,6 +211,7 @@ public final class BatteryService extends SystemService { com.android.internal.R.integer.config_shutdownBatteryTemperature); mBatteryLevelsEventQueue = new ArrayDeque<>(); + mMetricsLogger = new MetricsLogger(); // watch for invalid charger messages if the invalid_charger switch exists if (new File("/sys/devices/virtual/switch/invalid_charger/state").exists()) { @@ -476,6 +484,15 @@ public final class BatteryService extends SystemService { if (mPlugType != mLastPlugType) { if (mLastPlugType == BATTERY_PLUGGED_NONE) { // discharging -> charging + mChargeStartLevel = mHealthInfo.batteryLevel; + mChargeStartTime = SystemClock.elapsedRealtime(); + + final LogMaker builder = new LogMaker(MetricsEvent.ACTION_CHARGE); + builder.setType(MetricsEvent.TYPE_ACTION); + builder.addTaggedData(MetricsEvent.FIELD_PLUG_TYPE, mPlugType); + builder.addTaggedData(MetricsEvent.FIELD_BATTERY_LEVEL_START, + mHealthInfo.batteryLevel); + mMetricsLogger.write(builder); // There's no value in this data unless we've discharged at least once and the // battery level has changed; so don't log until it does. @@ -491,6 +508,21 @@ public final class BatteryService extends SystemService { // charging -> discharging or we just powered up mDischargeStartTime = SystemClock.elapsedRealtime(); mDischargeStartLevel = mHealthInfo.batteryLevel; + + long chargeDuration = SystemClock.elapsedRealtime() - mChargeStartTime; + if (mChargeStartTime != 0 && chargeDuration != 0) { + final LogMaker builder = new LogMaker(MetricsEvent.ACTION_CHARGE); + builder.setType(MetricsEvent.TYPE_DISMISS); + builder.addTaggedData(MetricsEvent.FIELD_PLUG_TYPE, mLastPlugType); + builder.addTaggedData(MetricsEvent.FIELD_CHARGING_DURATION_MILLIS, + chargeDuration); + builder.addTaggedData(MetricsEvent.FIELD_BATTERY_LEVEL_START, + mChargeStartLevel); + builder.addTaggedData(MetricsEvent.FIELD_BATTERY_LEVEL_END, + mHealthInfo.batteryLevel); + mMetricsLogger.write(builder); + } + mChargeStartTime = 0; } } if (mHealthInfo.batteryStatus != mLastBatteryStatus || diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 72f9d749865b..797cb4b53ecb 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -500,24 +500,24 @@ public class ConnectivityService extends IConnectivityManager.Stub private static final int MAX_VALIDATION_LOGS = 10; private static class ValidationLog { final Network mNetwork; - final String mNetworkExtraInfo; + final String mName; final ReadOnlyLocalLog mLog; - ValidationLog(Network network, String networkExtraInfo, ReadOnlyLocalLog log) { + ValidationLog(Network network, String name, ReadOnlyLocalLog log) { mNetwork = network; - mNetworkExtraInfo = networkExtraInfo; + mName = name; mLog = log; } } private final ArrayDeque<ValidationLog> mValidationLogs = new ArrayDeque<ValidationLog>(MAX_VALIDATION_LOGS); - private void addValidationLogs(ReadOnlyLocalLog log, Network network, String networkExtraInfo) { + private void addValidationLogs(ReadOnlyLocalLog log, Network network, String name) { synchronized (mValidationLogs) { while (mValidationLogs.size() >= MAX_VALIDATION_LOGS) { mValidationLogs.removeLast(); } - mValidationLogs.addFirst(new ValidationLog(network, networkExtraInfo, log)); + mValidationLogs.addFirst(new ValidationLog(network, name, log)); } } @@ -2097,7 +2097,7 @@ public class ConnectivityService extends IConnectivityManager.Stub synchronized (mValidationLogs) { pw.println("mValidationLogs (most recent first):"); for (ValidationLog p : mValidationLogs) { - pw.println(p.mNetwork + " - " + p.mNetworkExtraInfo); + pw.println(p.mNetwork + " - " + p.mName); pw.increaseIndent(); p.mLog.dump(fd, pw, args); pw.decreaseIndent(); @@ -4628,8 +4628,10 @@ public class ConnectivityService extends IConnectivityManager.Stub synchronized (this) { nai.networkMonitor.systemReady = mSystemReady; } - addValidationLogs(nai.networkMonitor.getValidationLogs(), nai.network, - networkInfo.getExtraInfo()); + final String extraInfo = networkInfo.getExtraInfo(); + final String name = TextUtils.isEmpty(extraInfo) + ? nai.networkCapabilities.getSSID() : extraInfo; + addValidationLogs(nai.networkMonitor.getValidationLogs(), nai.network, name); if (DBG) log("registerNetworkAgent " + nai); mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_AGENT, nai)); return nai.network.netId; diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java index a4d0dc87120b..74b45436aabd 100644 --- a/services/core/java/com/android/server/DeviceIdleController.java +++ b/services/core/java/com/android/server/DeviceIdleController.java @@ -812,9 +812,9 @@ public class DeviceIdleController extends SystemService LIGHT_IDLE_AFTER_INACTIVE_TIMEOUT = mParser.getDurationMillis( KEY_LIGHT_IDLE_AFTER_INACTIVE_TIMEOUT, - !COMPRESS_TIME ? 5 * 60 * 1000L : 15 * 1000L); + !COMPRESS_TIME ? 3 * 60 * 1000L : 15 * 1000L); LIGHT_PRE_IDLE_TIMEOUT = mParser.getDurationMillis(KEY_LIGHT_PRE_IDLE_TIMEOUT, - !COMPRESS_TIME ? 10 * 60 * 1000L : 30 * 1000L); + !COMPRESS_TIME ? 3 * 60 * 1000L : 30 * 1000L); LIGHT_IDLE_TIMEOUT = mParser.getDurationMillis(KEY_LIGHT_IDLE_TIMEOUT, !COMPRESS_TIME ? 5 * 60 * 1000L : 15 * 1000L); LIGHT_IDLE_FACTOR = mParser.getFloat(KEY_LIGHT_IDLE_FACTOR, diff --git a/services/core/java/com/android/server/IpSecService.java b/services/core/java/com/android/server/IpSecService.java index 33ca02fecb70..60f1877d3739 100644 --- a/services/core/java/com/android/server/IpSecService.java +++ b/services/core/java/com/android/server/IpSecService.java @@ -107,7 +107,6 @@ public class IpSecService extends IIpSecService.Stub { static final int FREE_PORT_MIN = 1024; // ports 1-1023 are reserved static final int PORT_MAX = 0xFFFF; // ports are an unsigned 16-bit integer - static final String TUNNEL_INTERFACE_PREFIX = "ipsec"; /* Binder context for this service */ private final Context mContext; @@ -1270,7 +1269,7 @@ public class IpSecService extends IIpSecService.Stub { final int resourceId = mNextResourceId++; final int ikey = reserveNetId(); final int okey = reserveNetId(); - String intfName = String.format("%s%d", TUNNEL_INTERFACE_PREFIX, resourceId); + String intfName = String.format("%s%d", INetd.IPSEC_INTERFACE_PREFIX, resourceId); try { // Calls to netd: diff --git a/services/core/java/com/android/server/am/ActivityDisplay.java b/services/core/java/com/android/server/am/ActivityDisplay.java index 0f42103e4178..27eae57302b0 100644 --- a/services/core/java/com/android/server/am/ActivityDisplay.java +++ b/services/core/java/com/android/server/am/ActivityDisplay.java @@ -78,9 +78,13 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack> int mDisplayId; Display mDisplay; - /** All of the stacks on this display. Order matters, topmost stack is in front of all other - * stacks, bottommost behind. Accessed directly by ActivityManager package classes */ + /** + * All of the stacks on this display. Order matters, topmost stack is in front of all other + * stacks, bottommost behind. Accessed directly by ActivityManager package classes. Any calls + * changing the list should also call {@link #onStackOrderChanged()}. + */ private final ArrayList<ActivityStack> mStacks = new ArrayList<>(); + private ArrayList<OnStackOrderChangedListener> mStackOrderChangedCallbacks = new ArrayList<>(); /** Array of all UIDs that are present on the display. */ private IntArray mDisplayAccessUIDs = new IntArray(); @@ -145,6 +149,7 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack> mStacks.remove(stack); removeStackReferenceIfNeeded(stack); mSupervisor.mService.updateSleepIfNeededLocked(); + onStackOrderChanged(); } void positionChildAtTop(ActivityStack stack) { @@ -163,6 +168,7 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack> mStacks.add(insertPosition, stack); mWindowContainerController.positionChildAt(stack.getWindowContainerController(), insertPosition); + onStackOrderChanged(); } private int getTopInsertPosition(ActivityStack stack, int candidatePosition) { @@ -770,6 +776,30 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack> mSleeping = asleep; } + /** + * Adds a listener to be notified whenever the stack order in the display changes. Currently + * only used by the {@link RecentsAnimation} to determine whether to interrupt and cancel the + * current animation when the system state changes. + */ + void registerStackOrderChangedListener(OnStackOrderChangedListener listener) { + if (!mStackOrderChangedCallbacks.contains(listener)) { + mStackOrderChangedCallbacks.add(listener); + } + } + + /** + * Removes a previously registered stack order change listener. + */ + void unregisterStackOrderChangedListener(OnStackOrderChangedListener listener) { + mStackOrderChangedCallbacks.remove(listener); + } + + private void onStackOrderChanged() { + for (int i = mStackOrderChangedCallbacks.size() - 1; i >= 0; i--) { + mStackOrderChangedCallbacks.get(i).onStackOrderChanged(); + } + } + public void dump(PrintWriter pw, String prefix) { pw.println(prefix + "displayId=" + mDisplayId + " stacks=" + mStacks.size()); final String myPrefix = prefix + " "; @@ -806,4 +836,11 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack> } proto.end(token); } + + /** + * Callback for when the order of the stacks in the display changes. + */ + interface OnStackOrderChangedListener { + void onStackOrderChanged(); + } } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index a8e63f6695d4..f83d9e657e1c 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -466,6 +466,7 @@ import com.android.server.firewall.IntentFirewall; import com.android.server.job.JobSchedulerInternal; import com.android.server.pm.Installer; import com.android.server.pm.Installer.InstallerException; +import com.android.server.pm.dex.DexManager; import com.android.server.utils.PriorityDump; import com.android.server.vr.VrManagerInternal; import com.android.server.wm.PinnedStackWindowController; @@ -1448,8 +1449,8 @@ public class ActivityManagerService extends IActivityManager.Stub * List of initialization arguments to pass to all processes when binding applications to them. * For example, references to the commonly used services. */ - HashMap<String, IBinder> mAppBindArgs; - HashMap<String, IBinder> mIsolatedAppBindArgs; + ArrayMap<String, IBinder> mAppBindArgs; + ArrayMap<String, IBinder> mIsolatedAppBindArgs; /** * Temporary to avoid allocations. Protected by main lock. @@ -1970,6 +1971,8 @@ public class ActivityManagerService extends IActivityManager.Stub final boolean mPermissionReviewRequired; + boolean mHasHeavyWeightFeature; + /** * Whether to force background check on all apps (for battery saver) or not. */ @@ -3432,29 +3435,56 @@ public class ActivityManagerService extends IActivityManager.Stub * process when the bindApplication() IPC is sent to the process. They're * lazily setup to make sure the services are running when they're asked for. */ - private HashMap<String, IBinder> getCommonServicesLocked(boolean isolated) { + private ArrayMap<String, IBinder> getCommonServicesLocked(boolean isolated) { // Isolated processes won't get this optimization, so that we don't // violate the rules about which services they have access to. if (isolated) { if (mIsolatedAppBindArgs == null) { - mIsolatedAppBindArgs = new HashMap<>(); - mIsolatedAppBindArgs.put("package", ServiceManager.getService("package")); + mIsolatedAppBindArgs = new ArrayMap<>(1); + addServiceToMap(mIsolatedAppBindArgs, "package"); } return mIsolatedAppBindArgs; } if (mAppBindArgs == null) { - mAppBindArgs = new HashMap<>(); - - // Setup the application init args - mAppBindArgs.put("package", ServiceManager.getService("package")); - mAppBindArgs.put("window", ServiceManager.getService("window")); - mAppBindArgs.put(Context.ALARM_SERVICE, - ServiceManager.getService(Context.ALARM_SERVICE)); + mAppBindArgs = new ArrayMap<>(); + + // Add common services. + // IMPORTANT: Before adding services here, make sure ephemeral apps can access them too. + // Enable the check in ApplicationThread.bindApplication() to make sure. + addServiceToMap(mAppBindArgs, "package"); + addServiceToMap(mAppBindArgs, Context.WINDOW_SERVICE); + addServiceToMap(mAppBindArgs, Context.ALARM_SERVICE); + addServiceToMap(mAppBindArgs, Context.DISPLAY_SERVICE); + addServiceToMap(mAppBindArgs, Context.NETWORKMANAGEMENT_SERVICE); + addServiceToMap(mAppBindArgs, Context.CONNECTIVITY_SERVICE); + addServiceToMap(mAppBindArgs, Context.ACCESSIBILITY_SERVICE); + addServiceToMap(mAppBindArgs, Context.INPUT_METHOD_SERVICE); + addServiceToMap(mAppBindArgs, Context.INPUT_SERVICE); + addServiceToMap(mAppBindArgs, "graphicsstats"); + addServiceToMap(mAppBindArgs, Context.APP_OPS_SERVICE); + addServiceToMap(mAppBindArgs, "content"); + addServiceToMap(mAppBindArgs, Context.JOB_SCHEDULER_SERVICE); + addServiceToMap(mAppBindArgs, Context.NOTIFICATION_SERVICE); + addServiceToMap(mAppBindArgs, Context.VIBRATOR_SERVICE); + addServiceToMap(mAppBindArgs, Context.ACCOUNT_SERVICE); + addServiceToMap(mAppBindArgs, Context.POWER_SERVICE); + addServiceToMap(mAppBindArgs, Context.USER_SERVICE); + addServiceToMap(mAppBindArgs, "mount"); } return mAppBindArgs; } + private static void addServiceToMap(ArrayMap<String, IBinder> map, String name) { + final IBinder service = ServiceManager.getService(name); + if (service != null) { + map.put(name, service); + if (false) { + Log.i(TAG, "Adding " + name + " to the pre-loaded service cache."); + } + } + } + /** * Update AMS states when an activity is resumed. This should only be called by * {@link ActivityStack#onActivityStateChanged(ActivityRecord, ActivityState, String)} when an @@ -4282,7 +4312,7 @@ public class ActivityManagerService extends IActivityManager.Stub } if (app.info.isPrivilegedApp() && - SystemProperties.getBoolean("pm.dexopt.priv-apps-oob", false)) { + DexManager.isPackageSelectedToRunOob(app.pkgList.keySet())) { runtimeFlags |= Zygote.ONLY_USE_SYSTEM_OAT_FILES; } @@ -5291,14 +5321,9 @@ public class ActivityManagerService extends IActivityManager.Stub final int callingPid = Binder.getCallingPid(); final long origId = Binder.clearCallingIdentity(); try { - final int recentsUid; - final String recentsPackage; - final List<IBinder> topVisibleActivities; synchronized (this) { final ComponentName recentsComponent = mRecentTasks.getRecentsComponent(); - recentsPackage = recentsComponent.getPackageName(); - recentsUid = mRecentTasks.getRecentsComponentUid(); - topVisibleActivities = mStackSupervisor.getTopVisibleActivities(); + final int recentsUid = mRecentTasks.getRecentsComponentUid(); // Start a new recents animation final RecentsAnimation anim = new RecentsAnimation(this, mStackSupervisor, @@ -5314,13 +5339,14 @@ public class ActivityManagerService extends IActivityManager.Stub @Override public void cancelRecentsAnimation(boolean restoreHomeStackPosition) { enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "cancelRecentsAnimation()"); + final long callingUid = Binder.getCallingUid(); final long origId = Binder.clearCallingIdentity(); try { synchronized (this) { // Cancel the recents animation synchronously (do not hold the WM lock) mWindowManager.cancelRecentsAnimationSynchronously(restoreHomeStackPosition ? REORDER_MOVE_TO_ORIGINAL_POSITION - : REORDER_KEEP_IN_PLACE, "cancelRecentsAnimation"); + : REORDER_KEEP_IN_PLACE, "cancelRecentsAnimation/uid=" + callingUid); } } finally { Binder.restoreCallingIdentity(origId); @@ -15085,6 +15111,8 @@ public class ActivityManagerService extends IActivityManager.Stub return; } + mHasHeavyWeightFeature = mContext.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_CANT_SAVE_STATE); mLocalDeviceIdleController = LocalServices.getService(DeviceIdleController.LocalService.class); mAssistUtils = new AssistUtils(mContext); @@ -18906,7 +18934,7 @@ public class ActivityManagerService extends IActivityManager.Stub thread.dumpMemInfo(tp.getWriteFd(), mi, opts.isCheckinRequest, opts.dumpFullDetails, opts.dumpDalvik, opts.dumpSummaryOnly, opts.dumpUnreachable, innerArgs); - tp.go(fd); + tp.go(fd, opts.dumpUnreachable ? 30000 : 5000); } finally { tp.kill(); } @@ -20694,7 +20722,7 @@ public class ActivityManagerService extends IActivityManager.Stub // BROADCASTS // ========================================================= - private boolean isInstantApp(ProcessRecord record, String callerPackage, int uid) { + private boolean isInstantApp(ProcessRecord record, @Nullable String callerPackage, int uid) { if (UserHandle.getAppId(uid) < FIRST_APPLICATION_UID) { return false; } @@ -20703,13 +20731,17 @@ public class ActivityManagerService extends IActivityManager.Stub return record.info.isInstantApp(); } // Otherwise check with PackageManager. - if (callerPackage == null) { - Slog.e(TAG, "isInstantApp with an application's uid, no record, and no package name"); - throw new IllegalArgumentException("Calling application did not provide package name"); - } - mAppOpsService.checkPackage(uid, callerPackage); + IPackageManager pm = AppGlobals.getPackageManager(); try { - IPackageManager pm = AppGlobals.getPackageManager(); + if (callerPackage == null) { + final String[] packageNames = pm.getPackagesForUid(uid); + if (packageNames == null || packageNames.length == 0) { + throw new IllegalArgumentException("Unable to determine caller package name"); + } + // Instant Apps can't use shared uids, so its safe to only check the first package. + callerPackage = packageNames[0]; + } + mAppOpsService.checkPackage(uid, callerPackage); return pm.isInstantApp(callerPackage, UserHandle.getUserId(uid)); } catch (RemoteException e) { Slog.e(TAG, "Error looking up if " + callerPackage + " is an instant app.", e); @@ -22967,18 +22999,27 @@ public class ActivityManagerService extends IActivityManager.Stub } } - private final int computeOomAdjLocked(ProcessRecord app, int cachedAdj, ProcessRecord TOP_APP, + private final boolean computeOomAdjLocked(ProcessRecord app, int cachedAdj, ProcessRecord TOP_APP, boolean doingAll, long now) { if (mAdjSeq == app.adjSeq) { - // This adjustment has already been computed. - return app.curRawAdj; + if (app.adjSeq == app.completedAdjSeq) { + // This adjustment has already been computed successfully. + return false; + } else { + // The process is being computed, so there is a cycle. We cannot + // rely on this process's state. + app.containsCycle = true; + return false; + } } if (app.thread == null) { app.adjSeq = mAdjSeq; app.curSchedGroup = ProcessList.SCHED_GROUP_BACKGROUND; app.curProcState = ActivityManager.PROCESS_STATE_CACHED_EMPTY; - return (app.curAdj=app.curRawAdj=ProcessList.CACHED_APP_MAX_ADJ); + app.curAdj=app.curRawAdj=ProcessList.CACHED_APP_MAX_ADJ; + app.completedAdjSeq = app.adjSeq; + return false; } app.adjTypeCode = ActivityManager.RunningAppProcessInfo.REASON_UNKNOWN; @@ -22991,6 +23032,8 @@ public class ActivityManagerService extends IActivityManager.Stub final int appUid = app.info.uid; final int logUid = mCurOomAdjUid; + int prevAppAdj = app.curAdj; + if (app.maxAdj <= ProcessList.FOREGROUND_APP_ADJ) { // The max adjustment doesn't allow this app to be anything // below foreground, so it is not worth doing work for it. @@ -23035,7 +23078,10 @@ public class ActivityManagerService extends IActivityManager.Stub app.curSchedGroup = ProcessList.SCHED_GROUP_RESTRICTED; } } - return (app.curAdj=app.maxAdj); + app.curAdj = app.maxAdj; + app.completedAdjSeq = app.adjSeq; + // if curAdj is less than prevAppAdj, then this process was promoted + return app.curAdj < prevAppAdj; } app.systemNoUi = false; @@ -23047,6 +23093,8 @@ public class ActivityManagerService extends IActivityManager.Stub int adj; int schedGroup; int procState; + int cachedAdjSeq; + boolean foregroundActivities = false; mTmpBroadcastQueue.clear(); if (PROCESS_STATE_CUR_TOP == ActivityManager.PROCESS_STATE_TOP && app == TOP_APP) { @@ -23360,9 +23408,9 @@ public class ActivityManagerService extends IActivityManager.Stub // there are applications dependent on our services or providers, but // this gives us a baseline and makes sure we don't get into an // infinite recursion. - app.adjSeq = mAdjSeq; app.curRawAdj = adj; app.hasStartedServices = false; + app.adjSeq = mAdjSeq; if (mBackupTarget != null && app == mBackupTarget.app) { // If possible we want to avoid killing apps while they're being backed up @@ -23461,8 +23509,15 @@ public class ActivityManagerService extends IActivityManager.Stub if ((cr.flags&Context.BIND_WAIVE_PRIORITY) == 0) { ProcessRecord client = cr.binding.client; - int clientAdj = computeOomAdjLocked(client, cachedAdj, - TOP_APP, doingAll, now); + computeOomAdjLocked(client, cachedAdj, TOP_APP, doingAll, now); + if (client.containsCycle) { + // We've detected a cycle. We should ignore this connection and allow + // this process to retry computeOomAdjLocked later in case a later-checked + // connection from a client would raise its priority legitimately. + app.containsCycle = true; + continue; + } + int clientAdj = client.curRawAdj; int clientProcState = client.curProcState; if (clientProcState >= ActivityManager.PROCESS_STATE_CACHED_ACTIVITY) { // If the other app is cached for any reason, for purposes here @@ -23681,7 +23736,15 @@ public class ActivityManagerService extends IActivityManager.Stub // Being our own client is not interesting. continue; } - int clientAdj = computeOomAdjLocked(client, cachedAdj, TOP_APP, doingAll, now); + computeOomAdjLocked(client, cachedAdj, TOP_APP, doingAll, now); + if (client.containsCycle) { + // We've detected a cycle. We should ignore this connection and allow + // this process to retry computeOomAdjLocked later in case a later-checked + // connection from a client would raise its priority legitimately. + app.containsCycle = true; + continue; + } + int clientAdj = client.curRawAdj; int clientProcState = client.curProcState; if (clientProcState >= ActivityManager.PROCESS_STATE_CACHED_ACTIVITY) { // If the other app is cached for any reason, for purposes here @@ -23909,8 +23972,10 @@ public class ActivityManagerService extends IActivityManager.Stub app.curSchedGroup = schedGroup; app.curProcState = procState; app.foregroundActivities = foregroundActivities; + app.completedAdjSeq = mAdjSeq; - return app.curRawAdj; + // if curAdj is less than prevAppAdj, then this process was promoted + return app.curAdj < prevAppAdj; } /** @@ -24884,12 +24949,23 @@ public class ActivityManagerService extends IActivityManager.Stub int nextCachedAdj = curCachedAdj+1; int curEmptyAdj = ProcessList.CACHED_APP_MIN_ADJ; int nextEmptyAdj = curEmptyAdj+2; + + boolean retryCycles = false; + + // need to reset cycle state before calling computeOomAdjLocked because of service connections + for (int i=N-1; i>=0; i--) { + ProcessRecord app = mLruProcesses.get(i); + app.containsCycle = false; + } for (int i=N-1; i>=0; i--) { ProcessRecord app = mLruProcesses.get(i); if (!app.killedByAm && app.thread != null) { app.procStateChanged = false; computeOomAdjLocked(app, ProcessList.UNKNOWN_ADJ, TOP_APP, true, now); + // if any app encountered a cycle, we need to perform an additional loop later + retryCycles |= app.containsCycle; + // If we haven't yet assigned the final cached adj // to the process, do that now. if (app.curAdj >= ProcessList.UNKNOWN_ADJ) { @@ -24943,6 +25019,39 @@ public class ActivityManagerService extends IActivityManager.Stub } } + + } + } + + // Cycle strategy: + // - Retry computing any process that has encountered a cycle. + // - Continue retrying until no process was promoted. + // - Iterate from least important to most important. + int cycleCount = 0; + while (retryCycles) { + cycleCount++; + retryCycles = false; + + for (int i=0; i<N; i++) { + ProcessRecord app = mLruProcesses.get(i); + if (!app.killedByAm && app.thread != null && app.containsCycle == true) { + app.adjSeq--; + app.completedAdjSeq--; + } + } + + for (int i=0; i<N; i++) { + ProcessRecord app = mLruProcesses.get(i); + if (!app.killedByAm && app.thread != null && app.containsCycle == true) { + if (computeOomAdjLocked(app, ProcessList.UNKNOWN_ADJ, TOP_APP, true, now)) { + retryCycles = true; + } + } + } + } + for (int i=N-1; i>=0; i--) { + ProcessRecord app = mLruProcesses.get(i); + if (!app.killedByAm && app.thread != null) { applyOomAdjLocked(app, true, now, nowElapsed); // Count the number of process types. diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 4ace68947957..d194db374102 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -1224,7 +1224,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D ActivityRecord topRunningActivityLocked(boolean considerKeyguardState) { final ActivityStack focusedStack = mFocusedStack; ActivityRecord r = focusedStack.topRunningActivityLocked(); - if (r != null) { + if (r != null && isValidTopRunningActivity(r, considerKeyguardState)) { return r; } @@ -1257,12 +1257,11 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D continue; } - final boolean keyguardLocked = getKeyguardController().isKeyguardLocked(); // This activity can be considered the top running activity if we are not // considering the locked state, the keyguard isn't locked, or we can show when // locked. - if (!considerKeyguardState || !keyguardLocked || topActivity.canShowWhenLocked()) { + if (isValidTopRunningActivity(topActivity, considerKeyguardState)) { return topActivity; } } @@ -1270,6 +1269,25 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D return null; } + /** + * Verifies an {@link ActivityRecord} can be the top activity based on keyguard state and + * whether we are considering it. + */ + private boolean isValidTopRunningActivity(ActivityRecord record, + boolean considerKeyguardState) { + if (!considerKeyguardState) { + return true; + } + + final boolean keyguardLocked = getKeyguardController().isKeyguardLocked(); + + if (!keyguardLocked) { + return true; + } + + return record.canShowWhenLocked(); + } + @VisibleForTesting void getRunningTasks(int maxNum, List<RunningTaskInfo> list, @ActivityType int ignoreActivityType, @WindowingMode int ignoreWindowingMode, @@ -1526,7 +1544,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D mService.getLifecycleManager().scheduleTransaction(clientTransaction); - if ((app.info.privateFlags & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0) { + if ((app.info.privateFlags & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0 + && mService.mHasHeavyWeightFeature) { // This may be a heavy-weight process! Note that the package // manager will ensure that only activity can run in the main // process of the .apk, which is the only thing that will be diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index fb4107cfd221..3b18d3258237 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -1023,7 +1023,8 @@ class ActivityStarter { if (aInfo != null && (aInfo.applicationInfo.privateFlags - & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0) { + & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0 && + mService.mHasHeavyWeightFeature) { // This may be a heavy-weight process! Check to see if we already // have another, different heavy-weight process running. if (aInfo.processName.equals(aInfo.applicationInfo.packageName)) { diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 0c328a89ef84..ef23a83cd881 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -1214,11 +1214,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub private void dumpHelp(PrintWriter pw) { pw.println("Battery stats (batterystats) dump options:"); - pw.println(" [--checkin] [--history] [--history-start] [--charged] [-c]"); + pw.println(" [--checkin] [--proto] [--history] [--history-start] [--charged] [-c]"); pw.println(" [--daily] [--reset] [--write] [--new-daily] [--read-daily] [-h] [<package.name>]"); pw.println(" --checkin: generate output for a checkin report; will write (and clear) the"); pw.println(" last old completed stats when they had been reset."); pw.println(" -c: write the current stats in checkin format."); + pw.println(" --proto: write the current aggregate stats (without history) in proto format."); pw.println(" --history: show only history data."); pw.println(" --history-start <num>: show only history data starting at given time offset."); pw.println(" --charged: only output data since last charged."); @@ -1431,7 +1432,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub null, mStats.mHandler, null, mUserManagerUserInfoProvider); checkinStats.readSummaryFromParcel(in); in.recycle(); - checkinStats.dumpProtoLocked(mContext, fd, apps, flags); + checkinStats.dumpProtoLocked( + mContext, fd, apps, flags, historyStart); mStats.mCheckinFile.delete(); return; } @@ -1444,7 +1446,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub } if (DBG) Slog.d(TAG, "begin dumpProtoLocked from UID " + Binder.getCallingUid()); synchronized (mStats) { - mStats.dumpProtoLocked(mContext, fd, apps, flags); + mStats.dumpProtoLocked(mContext, fd, apps, flags, historyStart); if (writeData) { mStats.writeAsyncLocked(); } diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index b7fde1da1eda..caf52e359548 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -149,6 +149,8 @@ final class ProcessRecord { String waitingToKill; // Process is waiting to be killed when in the bg, and reason Object forcingToImportant; // Token that is forcing this process to be important int adjSeq; // Sequence id for identifying oom_adj assignment cycles + int completedAdjSeq; // Sequence id for identifying oom_adj assignment cycles + boolean containsCycle; // Whether this app has encountered a cycle in the most recent update int lruSeq; // Sequence id for identifying LRU update cycles CompatibilityInfo compat; // last used compatibility mode IBinder.DeathRecipient deathRecipient; // Who is watching for the death. diff --git a/services/core/java/com/android/server/am/RecentsAnimation.java b/services/core/java/com/android/server/am/RecentsAnimation.java index a88f4080a784..a3d2173b294c 100644 --- a/services/core/java/com/android/server/am/RecentsAnimation.java +++ b/services/core/java/com/android/server/am/RecentsAnimation.java @@ -49,7 +49,8 @@ import com.android.server.wm.WindowManagerService; * Manages the recents animation, including the reordering of the stacks for the transition and * cleanup. See {@link com.android.server.wm.RecentsAnimationController}. */ -class RecentsAnimation implements RecentsAnimationCallbacks { +class RecentsAnimation implements RecentsAnimationCallbacks, + ActivityDisplay.OnStackOrderChangedListener { private static final String TAG = RecentsAnimation.class.getSimpleName(); // TODO (b/73188263): Reset debugging flags private static final boolean DEBUG = true; @@ -140,13 +141,11 @@ class RecentsAnimation implements RecentsAnimationCallbacks { recentsUid, recentsComponent.getPackageName()); } - final ActivityDisplay display; if (hasExistingActivity) { // Move the recents activity into place for the animation if it is not top most - display = targetActivity.getDisplay(); - display.moveStackBehindBottomMostVisibleStack(targetStack); + mDefaultDisplay.moveStackBehindBottomMostVisibleStack(targetStack); if (DEBUG) Slog.d(TAG, "Moved stack=" + targetStack + " behind stack=" - + display.getStackAbove(targetStack)); + + mDefaultDisplay.getStackAbove(targetStack)); // If there are multiple tasks in the target stack (ie. the home stack, with 3p // and default launchers coexisting), then move the task to the top as a part of @@ -173,7 +172,6 @@ class RecentsAnimation implements RecentsAnimationCallbacks { targetActivity = mDefaultDisplay.getStack(WINDOWING_MODE_UNDEFINED, mTargetActivityType).getTopActivity(); - display = targetActivity.getDisplay(); // TODO: Maybe wait for app to draw in this particular case? @@ -190,7 +188,8 @@ class RecentsAnimation implements RecentsAnimationCallbacks { mWindowManager.cancelRecentsAnimationSynchronously(REORDER_MOVE_TO_ORIGINAL_POSITION, "startRecentsActivity"); mWindowManager.initializeRecentsAnimation(mTargetActivityType, recentsAnimationRunner, - this, display.mDisplayId, mStackSupervisor.mRecentTasks.getRecentTaskIds()); + this, mDefaultDisplay.mDisplayId, + mStackSupervisor.mRecentTasks.getRecentTaskIds()); // If we updated the launch-behind state, update the visibility of the activities after // we fetch the visible tasks to be controlled by the animation @@ -198,6 +197,9 @@ class RecentsAnimation implements RecentsAnimationCallbacks { mStackSupervisor.getActivityMetricsLogger().notifyActivityLaunched(START_TASK_TO_FRONT, targetActivity); + + // Register for stack order changes + mDefaultDisplay.registerStackOrderChangedListener(this); } catch (Exception e) { Slog.e(TAG, "Failed to start recents activity", e); throw e; @@ -219,6 +221,9 @@ class RecentsAnimation implements RecentsAnimationCallbacks { mAssistDataRequester = null; } + // Unregister for stack order changes + mDefaultDisplay.unregisterStackOrderChangedListener(this); + if (mWindowManager.getRecentsAnimationController() == null) return; // Just to be sure end the launch hint in case the target activity was never launched. @@ -316,6 +321,14 @@ class RecentsAnimation implements RecentsAnimationCallbacks { } } + @Override + public void onStackOrderChanged() { + // If the activity display stack order changes, cancel any running recents animation in + // place + mWindowManager.cancelRecentsAnimationSynchronously(REORDER_KEEP_IN_PLACE, + "stackOrderChanged"); + } + /** * Called only when the animation should be canceled prior to starting. */ diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index b2cf1b7d60f3..3d25325f1be2 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -524,14 +524,13 @@ public class AudioService extends IAudioService.Stub // SCO audio state is active or starting due to a request from AudioManager API private static final int SCO_STATE_ACTIVE_INTERNAL = 3; // SCO audio deactivation request waiting for headset service to connect - private static final int SCO_STATE_DEACTIVATE_REQ = 5; + private static final int SCO_STATE_DEACTIVATE_REQ = 4; + // SCO audio deactivation in progress, waiting for Bluetooth audio intent + private static final int SCO_STATE_DEACTIVATING = 5; // SCO audio state is active due to an action in BT handsfree (either voice recognition or // in call audio) private static final int SCO_STATE_ACTIVE_EXTERNAL = 2; - // Deactivation request for all SCO connections (initiated by audio mode change) - // waiting for headset service to connect - private static final int SCO_STATE_DEACTIVATE_EXT_REQ = 4; // Indicates the mode used for SCO audio connection. The mode is virtual call if the request // originated from an app targeting an API version before JB MR2 and raw audio after that. @@ -2705,9 +2704,13 @@ public class AudioService extends IAudioService.Stub } public void binderDied() { + int oldModeOwnerPid = 0; int newModeOwnerPid = 0; synchronized(mSetModeDeathHandlers) { Log.w(TAG, "setMode() client died"); + if (!mSetModeDeathHandlers.isEmpty()) { + oldModeOwnerPid = mSetModeDeathHandlers.get(0).getPid(); + } int index = mSetModeDeathHandlers.indexOf(this); if (index < 0) { Log.w(TAG, "unregistered setMode() client died"); @@ -2716,8 +2719,8 @@ public class AudioService extends IAudioService.Stub } } // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all - // SCO connections not started by the application changing the mode - if (newModeOwnerPid != 0) { + // SCO connections not started by the application changing the mode when pid changes + if ((newModeOwnerPid != oldModeOwnerPid) && (newModeOwnerPid != 0)) { final long ident = Binder.clearCallingIdentity(); disconnectBluetoothSco(newModeOwnerPid); Binder.restoreCallingIdentity(ident); @@ -2761,17 +2764,21 @@ public class AudioService extends IAudioService.Stub return; } + int oldModeOwnerPid = 0; int newModeOwnerPid = 0; synchronized(mSetModeDeathHandlers) { + if (!mSetModeDeathHandlers.isEmpty()) { + oldModeOwnerPid = mSetModeDeathHandlers.get(0).getPid(); + } if (mode == AudioSystem.MODE_CURRENT) { mode = mMode; } newModeOwnerPid = setModeInt(mode, cb, Binder.getCallingPid(), callingPackage); } // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all - // SCO connections not started by the application changing the mode - if (newModeOwnerPid != 0) { - disconnectBluetoothSco(newModeOwnerPid); + // SCO connections not started by the application changing the mode when pid changes + if ((newModeOwnerPid != oldModeOwnerPid) && (newModeOwnerPid != 0)) { + disconnectBluetoothSco(newModeOwnerPid); } } @@ -3187,28 +3194,17 @@ public class AudioService extends IAudioService.Stub } public void setBluetoothScoOnInt(boolean on, String eventSource) { - if (DEBUG_DEVICES) { - Log.d(TAG, "setBluetoothScoOnInt: " + on + " " + eventSource); - } + Log.i(TAG, "setBluetoothScoOnInt: " + on + " " + eventSource); if (on) { // do not accept SCO ON if SCO audio is not connected synchronized (mScoClients) { - if (mBluetoothHeadset != null) { - if (mBluetoothHeadsetDevice == null) { - BluetoothDevice activeDevice = mBluetoothHeadset.getActiveDevice(); - if (activeDevice != null) { - // setBtScoActiveDevice() might trigger resetBluetoothSco() which - // will call setBluetoothScoOnInt(false, "resetBluetoothSco") - setBtScoActiveDevice(activeDevice); - } - } - if (mBluetoothHeadset.getAudioState(mBluetoothHeadsetDevice) - != BluetoothHeadset.STATE_AUDIO_CONNECTED) { - mForcedUseForCommExt = AudioSystem.FORCE_BT_SCO; - Log.w(TAG, "setBluetoothScoOnInt(true) failed because " - + mBluetoothHeadsetDevice + " is not in audio connected mode"); - return; - } + if ((mBluetoothHeadset != null) + && (mBluetoothHeadset.getAudioState(mBluetoothHeadsetDevice) + != BluetoothHeadset.STATE_AUDIO_CONNECTED)) { + mForcedUseForCommExt = AudioSystem.FORCE_BT_SCO; + Log.w(TAG, "setBluetoothScoOnInt(true) failed because " + + mBluetoothHeadsetDevice + " is not in audio connected mode"); + return; } } mForcedUseForComm = AudioSystem.FORCE_BT_SCO; @@ -3388,9 +3384,8 @@ public class AudioService extends IAudioService.Stub public int totalCount() { synchronized(mScoClients) { int count = 0; - int size = mScoClients.size(); - for (int i = 0; i < size; i++) { - count += mScoClients.get(i).getCount(); + for (ScoClient mScoClient : mScoClients) { + count += mScoClient.getCount(); } return count; } @@ -3398,128 +3393,161 @@ public class AudioService extends IAudioService.Stub private void requestScoState(int state, int scoAudioMode) { checkScoAudioState(); - if (totalCount() == 0) { - if (state == BluetoothHeadset.STATE_AUDIO_CONNECTED) { - // Make sure that the state transitions to CONNECTING even if we cannot initiate - // the connection. - broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_CONNECTING); - // Accept SCO audio activation only in NORMAL audio mode or if the mode is - // currently controlled by the same client process. - synchronized(mSetModeDeathHandlers) { - if ((mSetModeDeathHandlers.isEmpty() || - mSetModeDeathHandlers.get(0).getPid() == mCreatorPid) && - (mScoAudioState == SCO_STATE_INACTIVE || - mScoAudioState == SCO_STATE_DEACTIVATE_REQ)) { - if (mScoAudioState == SCO_STATE_INACTIVE) { - mScoAudioMode = scoAudioMode; - if (scoAudioMode == SCO_MODE_UNDEFINED) { - if (mBluetoothHeadsetDevice != null) { - mScoAudioMode = new Integer(Settings.Global.getInt( - mContentResolver, - "bluetooth_sco_channel_"+ - mBluetoothHeadsetDevice.getAddress(), - SCO_MODE_VIRTUAL_CALL)); - if (mScoAudioMode > SCO_MODE_MAX || mScoAudioMode < 0) { - mScoAudioMode = SCO_MODE_VIRTUAL_CALL; - } - } else { - mScoAudioMode = SCO_MODE_RAW; + int clientCount = totalCount(); + if (clientCount != 0) { + Log.i(TAG, "requestScoState: state=" + state + ", scoAudioMode=" + scoAudioMode + + ", clientCount=" + clientCount); + return; + } + if (state == BluetoothHeadset.STATE_AUDIO_CONNECTED) { + // Make sure that the state transitions to CONNECTING even if we cannot initiate + // the connection. + broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_CONNECTING); + // Accept SCO audio activation only in NORMAL audio mode or if the mode is + // currently controlled by the same client process. + synchronized(mSetModeDeathHandlers) { + int modeOwnerPid = mSetModeDeathHandlers.isEmpty() + ? 0 : mSetModeDeathHandlers.get(0).getPid(); + if (modeOwnerPid != 0 && (modeOwnerPid != mCreatorPid)) { + Log.w(TAG, "requestScoState: audio mode is not NORMAL and modeOwnerPid " + + modeOwnerPid + " != creatorPid " + mCreatorPid); + broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED); + return; + } + switch (mScoAudioState) { + case SCO_STATE_INACTIVE: + mScoAudioMode = scoAudioMode; + if (scoAudioMode == SCO_MODE_UNDEFINED) { + mScoAudioMode = SCO_MODE_VIRTUAL_CALL; + if (mBluetoothHeadsetDevice != null) { + mScoAudioMode = Settings.Global.getInt(mContentResolver, + "bluetooth_sco_channel_" + + mBluetoothHeadsetDevice.getAddress(), + SCO_MODE_VIRTUAL_CALL); + if (mScoAudioMode > SCO_MODE_MAX || mScoAudioMode < 0) { + mScoAudioMode = SCO_MODE_VIRTUAL_CALL; } } - if (mBluetoothHeadset != null && mBluetoothHeadsetDevice != null) { - boolean status = false; - if (mScoAudioMode == SCO_MODE_RAW) { - status = mBluetoothHeadset.connectAudio(); - } else if (mScoAudioMode == SCO_MODE_VIRTUAL_CALL) { - status = mBluetoothHeadset.startScoUsingVirtualVoiceCall( - mBluetoothHeadsetDevice); - } else if (mScoAudioMode == SCO_MODE_VR) { - status = mBluetoothHeadset.startVoiceRecognition( - mBluetoothHeadsetDevice); - } - - if (status) { - mScoAudioState = SCO_STATE_ACTIVE_INTERNAL; - } else { - broadcastScoConnectionState( - AudioManager.SCO_AUDIO_STATE_DISCONNECTED); - } - } else if (getBluetoothHeadset()) { + } + if (mBluetoothHeadset == null) { + if (getBluetoothHeadset()) { mScoAudioState = SCO_STATE_ACTIVATE_REQ; + } else { + Log.w(TAG, "requestScoState: getBluetoothHeadset failed during" + + " connection, mScoAudioMode=" + mScoAudioMode); + broadcastScoConnectionState( + AudioManager.SCO_AUDIO_STATE_DISCONNECTED); } - } else { + break; + } + if (mBluetoothHeadsetDevice == null) { + Log.w(TAG, "requestScoState: no active device while connecting," + + " mScoAudioMode=" + mScoAudioMode); + broadcastScoConnectionState( + AudioManager.SCO_AUDIO_STATE_DISCONNECTED); + break; + } + if (connectBluetoothScoAudioHelper(mBluetoothHeadset, + mBluetoothHeadsetDevice, mScoAudioMode)) { mScoAudioState = SCO_STATE_ACTIVE_INTERNAL; - broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_CONNECTED); + } else { + Log.w(TAG, "requestScoState: connect to " + mBluetoothHeadsetDevice + + " failed, mScoAudioMode=" + mScoAudioMode); + broadcastScoConnectionState( + AudioManager.SCO_AUDIO_STATE_DISCONNECTED); } - } else { + break; + case SCO_STATE_DEACTIVATING: + mScoAudioState = SCO_STATE_ACTIVATE_REQ; + break; + case SCO_STATE_DEACTIVATE_REQ: + mScoAudioState = SCO_STATE_ACTIVE_INTERNAL; + broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_CONNECTED); + break; + default: + Log.w(TAG, "requestScoState: failed to connect in state " + + mScoAudioState + ", scoAudioMode=" + scoAudioMode); broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED); - } - } - } else if (state == BluetoothHeadset.STATE_AUDIO_DISCONNECTED && - (mScoAudioState == SCO_STATE_ACTIVE_INTERNAL || - mScoAudioState == SCO_STATE_ACTIVATE_REQ)) { - if (mScoAudioState == SCO_STATE_ACTIVE_INTERNAL) { - if (mBluetoothHeadset != null && mBluetoothHeadsetDevice != null) { - boolean status = false; - if (mScoAudioMode == SCO_MODE_RAW) { - status = mBluetoothHeadset.disconnectAudio(); - } else if (mScoAudioMode == SCO_MODE_VIRTUAL_CALL) { - status = mBluetoothHeadset.stopScoUsingVirtualVoiceCall( - mBluetoothHeadsetDevice); - } else if (mScoAudioMode == SCO_MODE_VR) { - status = mBluetoothHeadset.stopVoiceRecognition( - mBluetoothHeadsetDevice); - } + break; - if (!status) { + } + } + } else if (state == BluetoothHeadset.STATE_AUDIO_DISCONNECTED) { + switch (mScoAudioState) { + case SCO_STATE_ACTIVE_INTERNAL: + if (mBluetoothHeadset == null) { + if (getBluetoothHeadset()) { + mScoAudioState = SCO_STATE_DEACTIVATE_REQ; + } else { + Log.w(TAG, "requestScoState: getBluetoothHeadset failed during" + + " disconnection, mScoAudioMode=" + mScoAudioMode); mScoAudioState = SCO_STATE_INACTIVE; broadcastScoConnectionState( AudioManager.SCO_AUDIO_STATE_DISCONNECTED); } - } else if (getBluetoothHeadset()) { - mScoAudioState = SCO_STATE_DEACTIVATE_REQ; + break; } - } else { + if (mBluetoothHeadsetDevice == null) { + mScoAudioState = SCO_STATE_INACTIVE; + broadcastScoConnectionState( + AudioManager.SCO_AUDIO_STATE_DISCONNECTED); + break; + } + if (disconnectBluetoothScoAudioHelper(mBluetoothHeadset, + mBluetoothHeadsetDevice, mScoAudioMode)) { + mScoAudioState = SCO_STATE_DEACTIVATING; + } else { + mScoAudioState = SCO_STATE_INACTIVE; + broadcastScoConnectionState( + AudioManager.SCO_AUDIO_STATE_DISCONNECTED); + } + break; + case SCO_STATE_ACTIVATE_REQ: mScoAudioState = SCO_STATE_INACTIVE; broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED); - } + break; + default: + Log.w(TAG, "requestScoState: failed to disconnect in state " + + mScoAudioState + ", scoAudioMode=" + scoAudioMode); + broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED); + break; } } } } private void checkScoAudioState() { - if (mBluetoothHeadset != null && mBluetoothHeadsetDevice != null && - mScoAudioState == SCO_STATE_INACTIVE && - mBluetoothHeadset.getAudioState(mBluetoothHeadsetDevice) - != BluetoothHeadset.STATE_AUDIO_DISCONNECTED) { - mScoAudioState = SCO_STATE_ACTIVE_EXTERNAL; + synchronized (mScoClients) { + if (mBluetoothHeadset != null && mBluetoothHeadsetDevice != null && + mScoAudioState == SCO_STATE_INACTIVE && + mBluetoothHeadset.getAudioState(mBluetoothHeadsetDevice) + != BluetoothHeadset.STATE_AUDIO_DISCONNECTED) { + mScoAudioState = SCO_STATE_ACTIVE_EXTERNAL; + } } } + private ScoClient getScoClient(IBinder cb, boolean create) { synchronized(mScoClients) { - ScoClient client = null; - int size = mScoClients.size(); - for (int i = 0; i < size; i++) { - client = mScoClients.get(i); - if (client.getBinder() == cb) - return client; + for (ScoClient existingClient : mScoClients) { + if (existingClient.getBinder() == cb) { + return existingClient; + } } if (create) { - client = new ScoClient(cb); - mScoClients.add(client); + ScoClient newClient = new ScoClient(cb); + mScoClients.add(newClient); + return newClient; } - return client; + return null; } } public void clearAllScoClients(int exceptPid, boolean stopSco) { synchronized(mScoClients) { ScoClient savedClient = null; - int size = mScoClients.size(); - for (int i = 0; i < size; i++) { - ScoClient cl = mScoClients.get(i); + for (ScoClient cl : mScoClients) { if (cl.getPid() != exceptPid) { cl.clearCount(stopSco); } else { @@ -3549,26 +3577,47 @@ public class AudioService extends IAudioService.Stub return result; } + /** + * Disconnect all SCO connections started by {@link AudioManager} except those started by + * {@param exceptPid} + * + * @param exceptPid pid whose SCO connections through {@link AudioManager} should be kept + */ private void disconnectBluetoothSco(int exceptPid) { synchronized(mScoClients) { checkScoAudioState(); - if (mScoAudioState == SCO_STATE_ACTIVE_EXTERNAL || - mScoAudioState == SCO_STATE_DEACTIVATE_EXT_REQ) { - if (mBluetoothHeadsetDevice != null) { - if (mBluetoothHeadset != null) { - if (!mBluetoothHeadset.stopVoiceRecognition( - mBluetoothHeadsetDevice)) { - sendMsg(mAudioHandler, MSG_BT_HEADSET_CNCT_FAILED, - SENDMSG_REPLACE, 0, 0, null, 0); - } - } else if (mScoAudioState == SCO_STATE_ACTIVE_EXTERNAL && - getBluetoothHeadset()) { - mScoAudioState = SCO_STATE_DEACTIVATE_EXT_REQ; - } - } - } else { - clearAllScoClients(exceptPid, true); + if (mScoAudioState == SCO_STATE_ACTIVE_EXTERNAL) { + return; } + clearAllScoClients(exceptPid, true); + } + } + + private static boolean disconnectBluetoothScoAudioHelper(BluetoothHeadset bluetoothHeadset, + BluetoothDevice device, int scoAudioMode) { + switch (scoAudioMode) { + case SCO_MODE_RAW: + return bluetoothHeadset.disconnectAudio(); + case SCO_MODE_VIRTUAL_CALL: + return bluetoothHeadset.stopScoUsingVirtualVoiceCall(); + case SCO_MODE_VR: + return bluetoothHeadset.stopVoiceRecognition(device); + default: + return false; + } + } + + private static boolean connectBluetoothScoAudioHelper(BluetoothHeadset bluetoothHeadset, + BluetoothDevice device, int scoAudioMode) { + switch (scoAudioMode) { + case SCO_MODE_RAW: + return bluetoothHeadset.connectAudio(); + case SCO_MODE_VIRTUAL_CALL: + return bluetoothHeadset.startScoUsingVirtualVoiceCall(); + case SCO_MODE_VR: + return bluetoothHeadset.startVoiceRecognition(device); + default: + return false; } } @@ -3629,11 +3678,9 @@ public class AudioService extends IAudioService.Stub return result; } - void setBtScoActiveDevice(BluetoothDevice btDevice) { - if (DEBUG_DEVICES) { - Log.d(TAG, "setBtScoActiveDevice(" + btDevice + ")"); - } + private void setBtScoActiveDevice(BluetoothDevice btDevice) { synchronized (mScoClients) { + Log.i(TAG, "setBtScoActiveDevice: " + mBluetoothHeadsetDevice + " -> " + btDevice); final BluetoothDevice previousActiveDevice = mBluetoothHeadsetDevice; if (!Objects.equals(btDevice, previousActiveDevice)) { if (!handleBtScoActiveDeviceChange(previousActiveDevice, false)) { @@ -3708,42 +3755,29 @@ public class AudioService extends IAudioService.Stub checkScoAudioState(); // Continue pending action if any if (mScoAudioState == SCO_STATE_ACTIVATE_REQ || - mScoAudioState == SCO_STATE_DEACTIVATE_REQ || - mScoAudioState == SCO_STATE_DEACTIVATE_EXT_REQ) { + mScoAudioState == SCO_STATE_DEACTIVATE_REQ) { boolean status = false; if (mBluetoothHeadsetDevice != null) { switch (mScoAudioState) { - case SCO_STATE_ACTIVATE_REQ: - mScoAudioState = SCO_STATE_ACTIVE_INTERNAL; - if (mScoAudioMode == SCO_MODE_RAW) { - status = mBluetoothHeadset.connectAudio(); - } else if (mScoAudioMode == SCO_MODE_VIRTUAL_CALL) { - status = mBluetoothHeadset.startScoUsingVirtualVoiceCall( - mBluetoothHeadsetDevice); - } else if (mScoAudioMode == SCO_MODE_VR) { - status = mBluetoothHeadset.startVoiceRecognition( - mBluetoothHeadsetDevice); - } - break; - case SCO_STATE_DEACTIVATE_REQ: - if (mScoAudioMode == SCO_MODE_RAW) { - status = mBluetoothHeadset.disconnectAudio(); - } else if (mScoAudioMode == SCO_MODE_VIRTUAL_CALL) { - status = mBluetoothHeadset.stopScoUsingVirtualVoiceCall( - mBluetoothHeadsetDevice); - } else if (mScoAudioMode == SCO_MODE_VR) { - status = mBluetoothHeadset.stopVoiceRecognition( - mBluetoothHeadsetDevice); - } - break; - case SCO_STATE_DEACTIVATE_EXT_REQ: - status = mBluetoothHeadset.stopVoiceRecognition( - mBluetoothHeadsetDevice); + case SCO_STATE_ACTIVATE_REQ: + status = connectBluetoothScoAudioHelper(mBluetoothHeadset, + mBluetoothHeadsetDevice, mScoAudioMode); + if (status) { + mScoAudioState = SCO_STATE_ACTIVE_INTERNAL; + } + break; + case SCO_STATE_DEACTIVATE_REQ: + status = disconnectBluetoothScoAudioHelper(mBluetoothHeadset, + mBluetoothHeadsetDevice, mScoAudioMode); + if (status) { + mScoAudioState = SCO_STATE_DEACTIVATING; + } + break; } } if (!status) { - sendMsg(mAudioHandler, MSG_BT_HEADSET_CNCT_FAILED, - SENDMSG_REPLACE, 0, 0, null, 0); + mScoAudioState = SCO_STATE_INACTIVE; + broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED); } } } @@ -6313,33 +6347,45 @@ public class AudioService extends IAudioService.Stub if (!mScoClients.isEmpty() && (mScoAudioState == SCO_STATE_ACTIVE_INTERNAL || mScoAudioState == SCO_STATE_ACTIVATE_REQ || - mScoAudioState == SCO_STATE_DEACTIVATE_REQ)) { + mScoAudioState == SCO_STATE_DEACTIVATE_REQ || + mScoAudioState == SCO_STATE_DEACTIVATING)) { broadcast = true; } switch (btState) { - case BluetoothHeadset.STATE_AUDIO_CONNECTED: - scoAudioState = AudioManager.SCO_AUDIO_STATE_CONNECTED; - if (mScoAudioState != SCO_STATE_ACTIVE_INTERNAL && - mScoAudioState != SCO_STATE_DEACTIVATE_REQ && - mScoAudioState != SCO_STATE_DEACTIVATE_EXT_REQ) { - mScoAudioState = SCO_STATE_ACTIVE_EXTERNAL; - } - break; - case BluetoothHeadset.STATE_AUDIO_DISCONNECTED: - scoAudioState = AudioManager.SCO_AUDIO_STATE_DISCONNECTED; - mScoAudioState = SCO_STATE_INACTIVE; - clearAllScoClients(0, false); - break; - case BluetoothHeadset.STATE_AUDIO_CONNECTING: - if (mScoAudioState != SCO_STATE_ACTIVE_INTERNAL && - mScoAudioState != SCO_STATE_DEACTIVATE_REQ && - mScoAudioState != SCO_STATE_DEACTIVATE_EXT_REQ) { - mScoAudioState = SCO_STATE_ACTIVE_EXTERNAL; - } - default: - // do not broadcast CONNECTING or invalid state - broadcast = false; - break; + case BluetoothHeadset.STATE_AUDIO_CONNECTED: + scoAudioState = AudioManager.SCO_AUDIO_STATE_CONNECTED; + if (mScoAudioState != SCO_STATE_ACTIVE_INTERNAL && + mScoAudioState != SCO_STATE_DEACTIVATE_REQ) { + mScoAudioState = SCO_STATE_ACTIVE_EXTERNAL; + } + setBluetoothScoOn(true); + break; + case BluetoothHeadset.STATE_AUDIO_DISCONNECTED: + setBluetoothScoOn(false); + scoAudioState = AudioManager.SCO_AUDIO_STATE_DISCONNECTED; + // startBluetoothSco called after stopBluetoothSco + if (mScoAudioState == SCO_STATE_ACTIVATE_REQ) { + if (mBluetoothHeadset != null && mBluetoothHeadsetDevice != null + && connectBluetoothScoAudioHelper(mBluetoothHeadset, + mBluetoothHeadsetDevice, mScoAudioMode)) { + mScoAudioState = SCO_STATE_ACTIVE_INTERNAL; + broadcast = false; + break; + } + } + // Tear down SCO if disconnected from external + clearAllScoClients(0, mScoAudioState == SCO_STATE_ACTIVE_INTERNAL); + mScoAudioState = SCO_STATE_INACTIVE; + break; + case BluetoothHeadset.STATE_AUDIO_CONNECTING: + if (mScoAudioState != SCO_STATE_ACTIVE_INTERNAL && + mScoAudioState != SCO_STATE_DEACTIVATE_REQ) { + mScoAudioState = SCO_STATE_ACTIVE_EXTERNAL; + } + default: + // do not broadcast CONNECTING or invalid state + broadcast = false; + break; } } if (broadcast) { diff --git a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java index 02459bde09a8..36a2476d2ceb 100644 --- a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java +++ b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java @@ -26,6 +26,7 @@ import android.net.NetworkCapabilities; import android.net.wifi.WifiInfo; import android.os.UserHandle; import android.telephony.TelephonyManager; +import android.text.TextUtils; import android.util.Slog; import android.util.SparseArray; import android.util.SparseIntArray; @@ -131,16 +132,17 @@ public class NetworkNotificationManager { final String tag = tagFor(id); final int eventId = notifyType.eventId; final int transportType; - final String extraInfo; + final String name; if (nai != null) { transportType = getFirstTransportType(nai); - extraInfo = nai.networkInfo.getExtraInfo(); + final String extraInfo = nai.networkInfo.getExtraInfo(); + name = TextUtils.isEmpty(extraInfo) ? nai.networkCapabilities.getSSID() : extraInfo; // Only notify for Internet-capable networks. if (!nai.networkCapabilities.hasCapability(NET_CAPABILITY_INTERNET)) return; } else { // Legacy notifications. transportType = TRANSPORT_CELLULAR; - extraInfo = null; + name = null; } // Clear any previous notification with lower priority, otherwise return. http://b/63676954. @@ -157,9 +159,8 @@ public class NetworkNotificationManager { if (DBG) { Slog.d(TAG, String.format( - "showNotification tag=%s event=%s transport=%s extraInfo=%s highPrioriy=%s", - tag, nameOf(eventId), getTransportName(transportType), extraInfo, - highPriority)); + "showNotification tag=%s event=%s transport=%s name=%s highPriority=%s", + tag, nameOf(eventId), getTransportName(transportType), name, highPriority)); } Resources r = Resources.getSystem(); @@ -188,7 +189,7 @@ public class NetworkNotificationManager { break; default: title = r.getString(R.string.network_available_sign_in, 0); - details = r.getString(R.string.network_available_sign_in_detailed, extraInfo); + details = r.getString(R.string.network_available_sign_in_detailed, name); break; } } else if (notifyType == NotificationType.NETWORK_SWITCH) { diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java index 03d8f395e36e..d7057f45e135 100644 --- a/services/core/java/com/android/server/content/ContentService.java +++ b/services/core/java/com/android/server/content/ContentService.java @@ -166,7 +166,7 @@ public final class ContentService extends IContentService.Stub { private SyncManager getSyncManager() { synchronized(mSyncManagerLock) { try { - // Try to create the SyncManager, return null if it fails (e.g. the disk is full). + // Try to create the SyncManager, return null if it fails (which it shouldn't). if (mSyncManager == null) mSyncManager = new SyncManager(mContext, mFactoryTest); } catch (SQLiteException e) { Log.e(TAG, "Can't create SyncManager", e); @@ -199,7 +199,7 @@ public final class ContentService extends IContentService.Stub { final long identityToken = clearCallingIdentity(); try { if (mSyncManager == null) { - pw.println("No SyncManager created! (Disk full?)"); + pw.println("SyncManager not available yet"); } else { mSyncManager.dump(fd, pw, dumpAll); } diff --git a/services/core/java/com/android/server/content/SyncJobService.java b/services/core/java/com/android/server/content/SyncJobService.java index 9980930d87c8..089632dbe01c 100644 --- a/services/core/java/com/android/server/content/SyncJobService.java +++ b/services/core/java/com/android/server/content/SyncJobService.java @@ -115,7 +115,10 @@ public class SyncJobService extends JobService { Slog.v(TAG, "onStopJob called " + params.getJobId() + ", reason: " + params.getStopReason()); } - mLogger.log("onStopJob() ", mLogger.jobParametersToString(params)); + final boolean readyToSync = SyncManager.readyToSync(); + + mLogger.log("onStopJob() ", mLogger.jobParametersToString(params), + " readyToSync=", readyToSync); synchronized (mLock) { final int jobId = params.getJobId(); mJobParamsMap.remove(jobId); @@ -124,13 +127,15 @@ public class SyncJobService extends JobService { final long nowUptime = SystemClock.uptimeMillis(); final long runtime = nowUptime - startUptime; + if (startUptime == 0) { wtf("Job " + jobId + " start uptime not found: " + " params=" + jobParametersToString(params)); } else if (runtime > 60 * 1000) { // WTF if startSyncH() hasn't happened, *unless* onStopJob() was called too soon. // (1 minute threshold.) - if (!mStartedSyncs.get(jobId)) { + // Also don't wtf when it's not ready to sync. + if (readyToSync && !mStartedSyncs.get(jobId)) { wtf("Job " + jobId + " didn't start: " + " startUptime=" + startUptime + " nowUptime=" + nowUptime diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java index 5fa42457ac2f..33cf11b86650 100644 --- a/services/core/java/com/android/server/content/SyncManager.java +++ b/services/core/java/com/android/server/content/SyncManager.java @@ -91,6 +91,7 @@ import android.util.Pair; import android.util.Slog; import com.android.internal.R; +import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IBatteryStats; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.notification.SystemNotificationChannels; @@ -215,6 +216,10 @@ public class SyncManager { private static final int SYNC_ADAPTER_CONNECTION_FLAGS = Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND | Context.BIND_ALLOW_OOM_MANAGEMENT; + /** Singleton instance. */ + @GuardedBy("SyncManager.class") + private static SyncManager sInstance; + private Context mContext; private static final AccountAndUser[] INITIAL_ACCOUNTS_ARRAY = new AccountAndUser[0]; @@ -571,6 +576,14 @@ public class SyncManager { } public SyncManager(Context context, boolean factoryTest) { + synchronized (SyncManager.class) { + if (sInstance == null) { + sInstance = this; + } else { + Slog.wtf(TAG, "SyncManager instantiated multiple times"); + } + } + // Initialize the SyncStorageEngine first, before registering observers // and creating threads and so on; it may fail if the disk is full. mContext = context; @@ -2851,6 +2864,16 @@ public class SyncManager { } /** + * @return whether the device is ready to run sync jobs. + */ + public static boolean readyToSync() { + synchronized (SyncManager.class) { + return sInstance != null && sInstance.mProvisioned && sInstance.mBootCompleted + && sInstance.mJobServiceReady; + } + } + + /** * Handles SyncOperation Messages that are posted to the associated * HandlerThread. */ diff --git a/services/core/java/com/android/server/display/ColorDisplayService.java b/services/core/java/com/android/server/display/ColorDisplayService.java index 030c91532135..213ec364f78f 100644 --- a/services/core/java/com/android/server/display/ColorDisplayService.java +++ b/services/core/java/com/android/server/display/ColorDisplayService.java @@ -189,7 +189,7 @@ public final class ColorDisplayService extends SystemService mController = new ColorDisplayController(getContext(), mCurrentUser); mController.setListener(this); - setCoefficientMatrix(getContext(), DisplayTransformManager.isNativeModeEnabled()); + setCoefficientMatrix(getContext(), DisplayTransformManager.needsLinearColorMatrix()); // Prepare color transformation matrix. setMatrix(mController.getColorTemperature(), mMatrixNight); @@ -293,7 +293,7 @@ public final class ColorDisplayService extends SystemService mColorMatrixAnimator.cancel(); } - setCoefficientMatrix(getContext(), DisplayTransformManager.isColorModeNative(mode)); + setCoefficientMatrix(getContext(), DisplayTransformManager.needsLinearColorMatrix(mode)); setMatrix(mController.getColorTemperature(), mMatrixNight); final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); @@ -306,13 +306,12 @@ public final class ColorDisplayService extends SystemService } /** - * Set coefficients based on native mode. Use DisplayTransformManager#isNativeModeEnabled while - * setting is stable; when setting is changing, pass native mode selection directly. + * Set coefficients based on whether the color matrix is linear or not. */ - private void setCoefficientMatrix(Context context, boolean isNative) { - final String[] coefficients = context.getResources().getStringArray(isNative - ? R.array.config_nightDisplayColorTemperatureCoefficientsNative - : R.array.config_nightDisplayColorTemperatureCoefficients); + private void setCoefficientMatrix(Context context, boolean needsLinear) { + final String[] coefficients = context.getResources().getStringArray(needsLinear + ? R.array.config_nightDisplayColorTemperatureCoefficients + : R.array.config_nightDisplayColorTemperatureCoefficientsNative); for (int i = 0; i < 9 && i < coefficients.length; i++) { mColorTempCoefficients[i] = Float.parseFloat(coefficients[i]); } diff --git a/services/core/java/com/android/server/display/DisplayTransformManager.java b/services/core/java/com/android/server/display/DisplayTransformManager.java index 57d88e190720..57a4f0dd526d 100644 --- a/services/core/java/com/android/server/display/DisplayTransformManager.java +++ b/services/core/java/com/android/server/display/DisplayTransformManager.java @@ -231,21 +231,19 @@ public class DisplayTransformManager { } /** - * Return true when colors are stretched from the working color space to the - * native color space. + * Return true when the color matrix works in linear space. */ - public static boolean isNativeModeEnabled() { + public static boolean needsLinearColorMatrix() { return SystemProperties.getInt(PERSISTENT_PROPERTY_DISPLAY_COLOR, - DISPLAY_COLOR_MANAGED) != DISPLAY_COLOR_MANAGED; + DISPLAY_COLOR_UNMANAGED) != DISPLAY_COLOR_UNMANAGED; } /** - * Return true when the specified colorMode stretches colors from the - * working color space to the native color space. + * Return true when the specified colorMode requires the color matrix to + * work in linear space. */ - public static boolean isColorModeNative(int colorMode) { - return !(colorMode == ColorDisplayController.COLOR_MODE_NATURAL || - colorMode == ColorDisplayController.COLOR_MODE_BOOSTED); + public static boolean needsLinearColorMatrix(int colorMode) { + return colorMode != ColorDisplayController.COLOR_MODE_SATURATED; } public boolean setColorMode(int colorMode, float[] nightDisplayMatrix) { diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java index 01350850a9cb..b441bafe975e 100644 --- a/services/core/java/com/android/server/job/JobSchedulerService.java +++ b/services/core/java/com/android/server/job/JobSchedulerService.java @@ -3036,6 +3036,9 @@ public class JobSchedulerService extends com.android.server.SystemService TimeUtils.formatDuration(mLastHeartbeatTime + mConstants.STANDBY_HEARTBEAT_TIME, nowElapsed, pw); pw.println(); + pw.print(" In parole?: "); + pw.print(mInParole); + pw.println(); pw.println(); pw.println("Started users: " + Arrays.toString(mStartedUsers)); @@ -3210,6 +3213,7 @@ public class JobSchedulerService extends com.android.server.SystemService mLastHeartbeatTime - nowUptime); proto.write(JobSchedulerServiceDumpProto.NEXT_HEARTBEAT_TIME_MILLIS, mLastHeartbeatTime + mConstants.STANDBY_HEARTBEAT_TIME - nowUptime); + proto.write(JobSchedulerServiceDumpProto.IN_PAROLE, mInParole); for (int u : mStartedUsers) { proto.write(JobSchedulerServiceDumpProto.STARTED_USERS, u); diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 0d1644bb399f..b3aa0bf255e1 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -45,6 +45,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.SystemClock; @@ -82,6 +83,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { private final SessionStub mSession; private final SessionCb mSessionCb; private final MediaSessionService mService; + private final Context mContext; private final Object mLock = new Object(); private final ArrayList<ISessionControllerCallbackHolder> mControllerCallbackHolders = @@ -126,8 +128,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { mSession = new SessionStub(); mSessionCb = new SessionCb(cb); mService = service; + mContext = mService.getContext(); mHandler = new MessageHandler(handlerLooper); - mAudioManager = (AudioManager) service.getContext().getSystemService(Context.AUDIO_SERVICE); + mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); mAudioManagerInternal = LocalServices.getService(AudioManagerInternal.class); mAudioAttrs = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).build(); } @@ -232,12 +235,17 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { * @param packageName The package that made the original volume request. * @param pid The pid that made the original volume request. * @param uid The uid that made the original volume request. + * @param asSystemService {@code true} if the event sent to the session as if it was come from + * the system service instead of the app process. This helps sessions to distinguish + * between the key injection by the app and key events from the hardware devices. + * Should be used only when the volume key events aren't handled by foreground + * activity. {@code false} otherwise to tell session about the real caller. * @param direction The direction to adjust volume in. * @param flags Any of the flags from {@link AudioManager}. * @param useSuggested True to use adjustSuggestedStreamVolume instead of */ - public void adjustVolume(String packageName, int pid, int uid, int direction, int flags, - boolean useSuggested) { + public void adjustVolume(String packageName, int pid, int uid, boolean asSystemService, + int direction, int flags, boolean useSuggested) { int previousFlagPlaySound = flags & AudioManager.FLAG_PLAY_SOUND; if (isPlaybackActive() || hasFlag(MediaSession.FLAG_EXCLUSIVE_GLOBAL_PRIORITY)) { flags &= ~AudioManager.FLAG_PLAY_SOUND; @@ -258,7 +266,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { Log.w(TAG, "Muting remote playback is not supported"); return; } - mSessionCb.adjustVolume(packageName, pid, uid, direction); + mSessionCb.adjustVolume(packageName, pid, uid, asSystemService, direction); int volumeBefore = (mOptimisticVolume < 0 ? mCurrentVolume : mOptimisticVolume); mOptimisticVolume = volumeBefore + direction; @@ -418,9 +426,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { return mSessionCb.mCb; } - public void sendMediaButton(String packageName, int pid, int uid, KeyEvent ke, int sequenceId, - ResultReceiver cb) { - mSessionCb.sendMediaButton(packageName, pid, uid, ke, sequenceId, cb); + public void sendMediaButton(String packageName, int pid, int uid, boolean asSystemService, + KeyEvent ke, int sequenceId, ResultReceiver cb) { + mSessionCb.sendMediaButton(packageName, pid, uid, asSystemService, ke, sequenceId, cb); } public void dump(PrintWriter pw, String prefix) { @@ -698,11 +706,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } private String getPackageName(int uid) { - Context context = mService.getContext(); - if (context == null) { - return null; - } - String[] packages = context.getPackageManager().getPackagesForUid(uid); + String[] packages = mContext.getPackageManager().getPackagesForUid(uid); if (packages != null && packages.length > 0) { return packages[0]; } @@ -907,12 +911,17 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { mCb = cb; } - public boolean sendMediaButton(String packageName, int pid, int uid, KeyEvent keyEvent, - int sequenceId, ResultReceiver cb) { + public boolean sendMediaButton(String packageName, int pid, int uid, + boolean asSystemService, KeyEvent keyEvent, int sequenceId, ResultReceiver cb) { Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); mediaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); try { - mCb.onMediaButton(packageName, pid, uid, mediaButtonIntent, sequenceId, cb); + if (asSystemService) { + mCb.onMediaButton(mContext.getPackageName(), Process.myPid(), + Process.SYSTEM_UID, mediaButtonIntent, sequenceId, cb); + } else { + mCb.onMediaButton(packageName, pid, uid, mediaButtonIntent, sequenceId, cb); + } return true; } catch (RemoteException e) { Slog.e(TAG, "Remote failure in sendMediaRequest.", e); @@ -1079,9 +1088,15 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } - public void adjustVolume(String packageName, int pid, int uid, int direction) { + public void adjustVolume(String packageName, int pid, int uid, boolean asSystemService, + int direction) { try { - mCb.onAdjustVolume(packageName, pid, uid, direction); + if (asSystemService) { + mCb.onAdjustVolume(mContext.getPackageName(), Process.myPid(), + Process.SYSTEM_UID, direction); + } else { + mCb.onAdjustVolume(packageName, pid, uid, direction); + } } catch (RemoteException e) { Slog.e(TAG, "Remote failure in adjustVolume.", e); } @@ -1105,9 +1120,10 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } @Override - public boolean sendMediaButton(String packageName, KeyEvent mediaButtonIntent) { + public boolean sendMediaButton(String packageName, boolean asSystemService, + KeyEvent mediaButtonIntent) { return mSessionCb.sendMediaButton(packageName, Binder.getCallingPid(), - Binder.getCallingUid(), mediaButtonIntent, 0, null); + Binder.getCallingUid(), asSystemService, mediaButtonIntent, 0, null); } @Override @@ -1188,13 +1204,14 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } @Override - public void adjustVolume(String packageName, int direction, int flags) { + public void adjustVolume(String packageName, boolean asSystemService, int direction, + int flags) { int pid = Binder.getCallingPid(); int uid = Binder.getCallingUid(); final long token = Binder.clearCallingIdentity(); try { - MediaSessionRecord.this.adjustVolume(packageName, pid, uid, direction, flags, - false /* useSuggested */); + MediaSessionRecord.this.adjustVolume(packageName, pid, uid, asSystemService, + direction, flags, false /* useSuggested */); } finally { Binder.restoreCallingIdentity(token); } diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index a3c6c80c75aa..a6e9389b3549 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -1093,13 +1093,21 @@ public class MediaSessionService extends SystemService implements Monitor { * registered listeners, or if there was none, broadcast an * ACTION_MEDIA_BUTTON intent to the rest of the system. * + * @param packageName The caller package + * @param asSystemService {@code true} if the event sent to the session as if it was come + * from the system service instead of the app process. This helps sessions to + * distinguish between the key injection by the app and key events from the + * hardware devices. Should be used only when the volume key events aren't handled + * by foreground activity. {@code false} otherwise to tell session about the real + * caller. * @param keyEvent a non-null KeyEvent whose key code is one of the * supported media buttons * @param needWakeLock true if a PARTIAL_WAKE_LOCK needs to be held * while this key event is dispatched. */ @Override - public void dispatchMediaKeyEvent(KeyEvent keyEvent, boolean needWakeLock) { + public void dispatchMediaKeyEvent(String packageName, boolean asSystemService, + KeyEvent keyEvent, boolean needWakeLock) { if (keyEvent == null || !KeyEvent.isMediaKey(keyEvent.getKeyCode())) { Log.w(TAG, "Attempted to dispatch null or non-media key event."); return; @@ -1110,7 +1118,8 @@ public class MediaSessionService extends SystemService implements Monitor { final long token = Binder.clearCallingIdentity(); try { if (DEBUG) { - Log.d(TAG, "dispatchMediaKeyEvent, pid=" + pid + ", uid=" + uid + ", event=" + Log.d(TAG, "dispatchMediaKeyEvent, pkg=" + packageName + " pid=" + pid + + ", uid=" + uid + ", asSystem=" + asSystemService + ", event=" + keyEvent); } if (!isUserSetupComplete()) { @@ -1137,7 +1146,8 @@ public class MediaSessionService extends SystemService implements Monitor { } try { mCurrentFullUserRecord.mOnMediaKeyListener.onMediaKey(keyEvent, - new MediaKeyListenerResultReceiver(keyEvent, needWakeLock)); + new MediaKeyListenerResultReceiver(packageName, pid, uid, + asSystemService, keyEvent, needWakeLock)); return; } catch (RemoteException e) { Log.w(TAG, "Failed to send " + keyEvent @@ -1146,9 +1156,11 @@ public class MediaSessionService extends SystemService implements Monitor { } } if (!isGlobalPriorityActive && isVoiceKey(keyEvent.getKeyCode())) { - handleVoiceKeyEventLocked(keyEvent, needWakeLock); + handleVoiceKeyEventLocked(packageName, pid, uid, asSystemService, keyEvent, + needWakeLock); } else { - dispatchMediaKeyEventLocked(keyEvent, needWakeLock); + dispatchMediaKeyEventLocked(packageName, pid, uid, asSystemService, + keyEvent, needWakeLock); } } } finally { @@ -1324,6 +1336,13 @@ public class MediaSessionService extends SystemService implements Monitor { * there's no active global priority session, long-pressess will be sent to the * long-press listener instead of adjusting volume. * + * @param packageName The caller package. + * @param asSystemService {@code true} if the event sent to the session as if it was come + * from the system service instead of the app process. This helps sessions to + * distinguish between the key injection by the app and key events from the + * hardware devices. Should be used only when the volume key events aren't handled + * by foreground activity. {@code false} otherwise to tell session about the real + * caller. * @param keyEvent a non-null KeyEvent whose key code is one of the * {@link KeyEvent#KEYCODE_VOLUME_UP}, * {@link KeyEvent#KEYCODE_VOLUME_DOWN}, @@ -1332,7 +1351,8 @@ public class MediaSessionService extends SystemService implements Monitor { * @param musicOnly true if both UI nor haptic feedback aren't needed when adjust volume. */ @Override - public void dispatchVolumeKeyEvent(KeyEvent keyEvent, int stream, boolean musicOnly) { + public void dispatchVolumeKeyEvent(String packageName, boolean asSystemService, + KeyEvent keyEvent, int stream, boolean musicOnly) { if (keyEvent == null || (keyEvent.getKeyCode() != KeyEvent.KEYCODE_VOLUME_UP && keyEvent.getKeyCode() != KeyEvent.KEYCODE_VOLUME_DOWN @@ -1346,15 +1366,16 @@ public class MediaSessionService extends SystemService implements Monitor { final long token = Binder.clearCallingIdentity(); if (DEBUG_KEY_EVENT) { - Log.d(TAG, "dispatchVolumeKeyEvent, pid=" + pid + ", uid=" + uid + ", event=" - + keyEvent); + Log.d(TAG, "dispatchVolumeKeyEvent, pkg=" + packageName + ", pid=" + pid + ", uid=" + + uid + ", asSystem=" + asSystemService + ", event=" + keyEvent); } try { synchronized (mLock) { if (isGlobalPriorityActiveLocked() || mCurrentFullUserRecord.mOnVolumeKeyLongPressListener == null) { - dispatchVolumeKeyEventLocked(keyEvent, stream, musicOnly); + dispatchVolumeKeyEventLocked(packageName, pid, uid, asSystemService, + keyEvent, stream, musicOnly); } else { // TODO: Consider the case when both volume up and down keys are pressed // at the same time. @@ -1387,11 +1408,12 @@ public class MediaSessionService extends SystemService implements Monitor { && mCurrentFullUserRecord.mInitialDownVolumeKeyEvent .getDownTime() == keyEvent.getDownTime()) { // Short-press. Should change volume. - dispatchVolumeKeyEventLocked( + dispatchVolumeKeyEventLocked(packageName, pid, uid, asSystemService, mCurrentFullUserRecord.mInitialDownVolumeKeyEvent, mCurrentFullUserRecord.mInitialDownVolumeStream, mCurrentFullUserRecord.mInitialDownMusicOnly); - dispatchVolumeKeyEventLocked(keyEvent, stream, musicOnly); + dispatchVolumeKeyEventLocked(packageName, pid, uid, asSystemService, + keyEvent, stream, musicOnly); } else { dispatchVolumeKeyLongPressLocked(keyEvent); } @@ -1403,8 +1425,8 @@ public class MediaSessionService extends SystemService implements Monitor { } } - private void dispatchVolumeKeyEventLocked( - KeyEvent keyEvent, int stream, boolean musicOnly) { + private void dispatchVolumeKeyEventLocked(String packageName, int pid, int uid, + boolean asSystemService, KeyEvent keyEvent, int stream, boolean musicOnly) { boolean down = keyEvent.getAction() == KeyEvent.ACTION_DOWN; boolean up = keyEvent.getAction() == KeyEvent.ACTION_UP; int direction = 0; @@ -1438,21 +1460,27 @@ public class MediaSessionService extends SystemService implements Monitor { if (up) { direction = 0; } - dispatchAdjustVolumeLocked(stream, direction, flags); + dispatchAdjustVolumeLocked(packageName, pid, uid, asSystemService, stream, + direction, flags); } else if (isMute) { if (down && keyEvent.getRepeatCount() == 0) { - dispatchAdjustVolumeLocked(stream, AudioManager.ADJUST_TOGGLE_MUTE, flags); + dispatchAdjustVolumeLocked(packageName, pid, uid, asSystemService, stream, + AudioManager.ADJUST_TOGGLE_MUTE, flags); } } } } @Override - public void dispatchAdjustVolume(int suggestedStream, int delta, int flags) { + public void dispatchAdjustVolume(String packageName, int suggestedStream, int delta, + int flags) { + final int pid = Binder.getCallingPid(); + final int uid = Binder.getCallingUid(); final long token = Binder.clearCallingIdentity(); try { synchronized (mLock) { - dispatchAdjustVolumeLocked(suggestedStream, delta, flags); + dispatchAdjustVolumeLocked(packageName, pid, uid, false, + suggestedStream, delta, flags); } } finally { Binder.restoreCallingIdentity(token); @@ -1777,7 +1805,8 @@ public class MediaSessionService extends SystemService implements Monitor { return false; } - private void dispatchAdjustVolumeLocked(int suggestedStream, int direction, int flags) { + private void dispatchAdjustVolumeLocked(String packageName, int pid, int uid, + boolean asSystemService, int suggestedStream, int direction, int flags) { MediaSessionRecord session = isGlobalPriorityActiveLocked() ? mGlobalPrioritySession : mCurrentFullUserRecord.mPriorityStack.getDefaultVolumeSession(); @@ -1822,12 +1851,13 @@ public class MediaSessionService extends SystemService implements Monitor { } }); } else { - session.adjustVolume(getContext().getPackageName(), Process.myPid(), - Process.SYSTEM_UID, direction, flags, true); + session.adjustVolume(packageName, pid, uid, asSystemService, + direction, flags, true); } } - private void handleVoiceKeyEventLocked(KeyEvent keyEvent, boolean needWakeLock) { + private void handleVoiceKeyEventLocked(String packageName, int pid, int uid, + boolean asSystemService, KeyEvent keyEvent, boolean needWakeLock) { int action = keyEvent.getAction(); boolean isLongPress = (keyEvent.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0; if (action == KeyEvent.ACTION_DOWN) { @@ -1844,14 +1874,17 @@ public class MediaSessionService extends SystemService implements Monitor { if (!mVoiceButtonHandled && !keyEvent.isCanceled()) { // Resend the down then send this event through KeyEvent downEvent = KeyEvent.changeAction(keyEvent, KeyEvent.ACTION_DOWN); - dispatchMediaKeyEventLocked(downEvent, needWakeLock); - dispatchMediaKeyEventLocked(keyEvent, needWakeLock); + dispatchMediaKeyEventLocked(packageName, pid, uid, asSystemService, + downEvent, needWakeLock); + dispatchMediaKeyEventLocked(packageName, pid, uid, asSystemService, + keyEvent, needWakeLock); } } } } - private void dispatchMediaKeyEventLocked(KeyEvent keyEvent, boolean needWakeLock) { + private void dispatchMediaKeyEventLocked(String packageName, int pid, int uid, + boolean asSystemService, KeyEvent keyEvent, boolean needWakeLock) { MediaSessionRecord session = mCurrentFullUserRecord.getMediaButtonSessionLocked(); if (session != null) { if (DEBUG_KEY_EVENT) { @@ -1861,17 +1894,13 @@ public class MediaSessionService extends SystemService implements Monitor { mKeyEventReceiver.aquireWakeLockLocked(); } // If we don't need a wakelock use -1 as the id so we won't release it later. - session.sendMediaButton(getContext().getPackageName(), - Process.myPid(), - Process.SYSTEM_UID, - keyEvent, + session.sendMediaButton(packageName, pid, uid, asSystemService, keyEvent, needWakeLock ? mKeyEventReceiver.mLastTimeoutId : -1, mKeyEventReceiver); if (mCurrentFullUserRecord.mCallback != null) { try { mCurrentFullUserRecord.mCallback.onMediaKeyEventDispatchedToMediaSession( - keyEvent, - new MediaSession.Token(session.getControllerBinder())); + keyEvent, new MediaSession.Token(session.getControllerBinder())); } catch (RemoteException e) { Log.w(TAG, "Failed to send callback", e); } @@ -1884,6 +1913,10 @@ public class MediaSessionService extends SystemService implements Monitor { Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); mediaButtonIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); mediaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); + // TODO: Find a way to also send PID/UID in secure way. + String callerPackageName = + (asSystemService) ? getContext().getPackageName() : packageName; + mediaButtonIntent.putExtra(Intent.EXTRA_PACKAGE_NAME, callerPackageName); try { if (mCurrentFullUserRecord.mLastMediaButtonReceiver != null) { PendingIntent receiver = mCurrentFullUserRecord.mLastMediaButtonReceiver; @@ -1984,13 +2017,22 @@ public class MediaSessionService extends SystemService implements Monitor { } private class MediaKeyListenerResultReceiver extends ResultReceiver implements Runnable { - private KeyEvent mKeyEvent; - private boolean mNeedWakeLock; + private final String mPackageName; + private final int mPid; + private final int mUid; + private final boolean mAsSystemService; + private final KeyEvent mKeyEvent; + private final boolean mNeedWakeLock; private boolean mHandled; - private MediaKeyListenerResultReceiver(KeyEvent keyEvent, boolean needWakeLock) { + private MediaKeyListenerResultReceiver(String packageName, int pid, int uid, + boolean asSystemService, KeyEvent keyEvent, boolean needWakeLock) { super(mHandler); mHandler.postDelayed(this, MEDIA_KEY_LISTENER_TIMEOUT); + mPackageName = packageName; + mPid = pid; + mUid = uid; + mAsSystemService = asSystemService; mKeyEvent = keyEvent; mNeedWakeLock = needWakeLock; } @@ -2020,9 +2062,11 @@ public class MediaSessionService extends SystemService implements Monitor { synchronized (mLock) { if (!isGlobalPriorityActiveLocked() && isVoiceKey(mKeyEvent.getKeyCode())) { - handleVoiceKeyEventLocked(mKeyEvent, mNeedWakeLock); + handleVoiceKeyEventLocked(mPackageName, mPid, mUid, mAsSystemService, + mKeyEvent, mNeedWakeLock); } else { - dispatchMediaKeyEventLocked(mKeyEvent, mNeedWakeLock); + dispatchMediaKeyEventLocked(mPackageName, mPid, mUid, mAsSystemService, + mKeyEvent, mNeedWakeLock); } } } diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java index 8562572c3c39..f082271ab094 100644 --- a/services/core/java/com/android/server/om/OverlayManagerService.java +++ b/services/core/java/com/android/server/om/OverlayManagerService.java @@ -389,16 +389,11 @@ public final class OverlayManagerService extends SystemService { final PackageInfo pi = mPackageManager.getPackageInfo(packageName, userId, false); if (pi != null) { - /* - * Only update overlay settings when an overlay becomes enabled or disabled. - * Enabling or disabling components of a target should not change the - * target's overlays. Since, overlays do not have components, this will only - * update overlay settings if an overlay package becomes enabled or - * disabled. - */ mPackageManager.cachePackageInfo(packageName, userId, pi); if (pi.isOverlayPackage()) { mImpl.onOverlayPackageChanged(packageName, userId); + } else { + mImpl.onTargetPackageChanged(packageName, userId); } } } @@ -680,7 +675,7 @@ public final class OverlayManagerService extends SystemService { * @throws SecurityException if the permission check fails */ private void enforceChangeOverlayPackagesPermission(@NonNull final String message) { - getContext().enforceCallingOrSelfPermission( + getContext().enforceCallingPermission( android.Manifest.permission.CHANGE_OVERLAY_PACKAGES, message); } @@ -691,8 +686,7 @@ public final class OverlayManagerService extends SystemService { * @throws SecurityException if the permission check fails */ private void enforceDumpPermission(@NonNull final String message) { - getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, - message); + getContext().enforceCallingPermission(android.Manifest.permission.DUMP, message); } }; diff --git a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java index bb36ab189765..112059daf95e 100644 --- a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +++ b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java @@ -18,6 +18,7 @@ package com.android.server.om; import static android.content.om.OverlayInfo.STATE_DISABLED; import static android.content.om.OverlayInfo.STATE_ENABLED; +import static android.content.om.OverlayInfo.STATE_ENABLED_STATIC; import static android.content.om.OverlayInfo.STATE_MISSING_TARGET; import static android.content.om.OverlayInfo.STATE_NO_IDMAP; import static android.content.om.OverlayInfo.STATE_OVERLAY_UPGRADING; @@ -63,6 +64,38 @@ final class OverlayManagerServiceImpl { private final String[] mDefaultOverlays; private final OverlayChangeListener mListener; + /** + * Helper method to merge the overlay manager's (as read from overlays.xml) + * and package manager's (as parsed from AndroidManifest.xml files) views + * on overlays. + * + * Both managers are usually in agreement, but especially after an OTA things + * may differ. The package manager is always providing the truth; the overlay + * manager has to adapt. Depending on what has changed about an overlay, we + * should either scrap the overlay manager's previous settings or merge the old + * settings with the new. + */ + private static boolean mustReinitializeOverlay(@NonNull final PackageInfo theTruth, + @Nullable final OverlayInfo oldSettings) { + if (oldSettings == null) { + return true; + } + if (!Objects.equals(theTruth.overlayTarget, oldSettings.targetPackageName)) { + return true; + } + if (theTruth.isStaticOverlayPackage() != oldSettings.isStatic) { + return true; + } + // a change in priority is only relevant for static RROs: specifically, + // a regular RRO should not have its state reset only because a change + // in priority + if (theTruth.isStaticOverlayPackage() && + theTruth.overlayPriority != oldSettings.priority) { + return true; + } + return false; + } + OverlayManagerServiceImpl(@NonNull final PackageManagerHelper packageManager, @NonNull final IdmapManager idmapManager, @NonNull final OverlayManagerSettings settings, @@ -99,42 +132,29 @@ final class OverlayManagerServiceImpl { } } + // Reset overlays if something critical like the target package name + // has changed List<PackageInfo> overlayPackages = mPackageManager.getOverlayPackages(newUserId); final int overlayPackagesSize = overlayPackages.size(); for (int i = 0; i < overlayPackagesSize; i++) { final PackageInfo overlayPackage = overlayPackages.get(i); final OverlayInfo oi = storedOverlayInfos.get(overlayPackage.packageName); - if (oi == null || !oi.targetPackageName.equals(overlayPackage.overlayTarget)) { - // Reset the overlay if it didn't exist or had the wrong target package. + + if (mustReinitializeOverlay(overlayPackage, oi)) { + // if targetPackageName has changed the package that *used* to + // be the target must also update its assets + if (oi != null) { + packagesToUpdateAssets.add(oi.targetPackageName); + } + mSettings.init(overlayPackage.packageName, newUserId, overlayPackage.overlayTarget, overlayPackage.applicationInfo.getBaseCodePath(), overlayPackage.isStaticOverlayPackage(), overlayPackage.overlayPriority, overlayPackage.overlayCategory); - - if (oi != null) { - // The targetPackageName we have stored doesn't match the overlay's target. - // Queue the old target for an update as well. - packagesToUpdateAssets.add(oi.targetPackageName); - } - } else { - // Update all other components of an overlay that don't require a hard reset. - if (!Objects.equals(oi.category, overlayPackage.overlayCategory)) { - // When changing categories, it is ok just to update our internal state. - mSettings.setCategory(overlayPackage.packageName, newUserId, - overlayPackage.overlayCategory); - } - } - - try { - updateState(overlayPackage.overlayTarget, overlayPackage.packageName, newUserId, 0); - } catch (OverlayManagerSettings.BadKeyException e) { - Slog.e(TAG, "failed to update settings", e); - mSettings.remove(overlayPackage.packageName, newUserId); } - packagesToUpdateAssets.add(overlayPackage.overlayTarget); storedOverlayInfos.remove(overlayPackage.packageName); } @@ -148,6 +168,22 @@ final class OverlayManagerServiceImpl { packagesToUpdateAssets.add(oi.targetPackageName); } + // make sure every overlay's state is up-to-date; this needs to happen + // after old overlays have been removed, or we risk removing a + // legitimate idmap file if a new overlay package has the same apk path + // as the removed overlay package used to have + for (int i = 0; i < overlayPackagesSize; i++) { + final PackageInfo overlayPackage = overlayPackages.get(i); + try { + updateState(overlayPackage.overlayTarget, overlayPackage.packageName, + newUserId, 0); + } catch (OverlayManagerSettings.BadKeyException e) { + Slog.e(TAG, "failed to update settings", e); + mSettings.remove(overlayPackage.packageName, newUserId); + } + packagesToUpdateAssets.add(overlayPackage.overlayTarget); + } + // remove target packages that are not installed final Iterator<String> iter = packagesToUpdateAssets.iterator(); while (iter.hasNext()) { @@ -212,15 +248,21 @@ final class OverlayManagerServiceImpl { } } + void onTargetPackageChanged(@NonNull final String packageName, final int userId) { + if (DEBUG) { + Slog.d(TAG, "onTargetPackageChanged packageName=" + packageName + " userId=" + userId); + } + + updateAllOverlaysForTarget(packageName, userId, 0); + } + void onTargetPackageUpgrading(@NonNull final String packageName, final int userId) { if (DEBUG) { Slog.d(TAG, "onTargetPackageUpgrading packageName=" + packageName + " userId=" + userId); } - if (updateAllOverlaysForTarget(packageName, userId, FLAG_TARGET_IS_UPGRADING)) { - mListener.onOverlaysChanged(packageName, userId); - } + updateAllOverlaysForTarget(packageName, userId, FLAG_TARGET_IS_UPGRADING); } void onTargetPackageUpgraded(@NonNull final String packageName, final int userId) { @@ -228,9 +270,7 @@ final class OverlayManagerServiceImpl { Slog.d(TAG, "onTargetPackageUpgraded packageName=" + packageName + " userId=" + userId); } - if (updateAllOverlaysForTarget(packageName, userId, 0)) { - mListener.onOverlaysChanged(packageName, userId); - } + updateAllOverlaysForTarget(packageName, userId, 0); } void onTargetPackageRemoved(@NonNull final String packageName, final int userId) { @@ -351,15 +391,13 @@ final class OverlayManagerServiceImpl { try { final OverlayInfo oldOi = mSettings.getOverlayInfo(packageName, userId); - if (!oldOi.targetPackageName.equals(pkg.overlayTarget)) { + if (mustReinitializeOverlay(pkg, oldOi)) { + if (oldOi != null && !oldOi.targetPackageName.equals(pkg.overlayTarget)) { + mListener.onOverlaysChanged(pkg.overlayTarget, userId); + } mSettings.init(packageName, userId, pkg.overlayTarget, pkg.applicationInfo.getBaseCodePath(), pkg.isStaticOverlayPackage(), pkg.overlayPriority, pkg.overlayCategory); - } else { - if (!Objects.equals(oldOi.category, pkg.overlayCategory)) { - // Update the category in-place. - mSettings.setCategory(packageName, userId, pkg.overlayCategory); - } } if (updateState(pkg.overlayTarget, packageName, userId, 0)) { @@ -604,6 +642,8 @@ final class OverlayManagerServiceImpl { if (overlayPackage != null) { modified |= mSettings.setBaseCodePath(overlayPackageName, userId, overlayPackage.applicationInfo.getBaseCodePath()); + modified |= mSettings.setCategory(overlayPackageName, userId, + overlayPackage.overlayCategory); } final @OverlayInfo.State int currentState = mSettings.getState(overlayPackageName, userId); @@ -646,6 +686,10 @@ final class OverlayManagerServiceImpl { return STATE_NO_IDMAP; } + if (overlayPackage.isStaticOverlayPackage()) { + return STATE_ENABLED_STATIC; + } + final boolean enabled = mSettings.getEnabled(overlayPackage.packageName, userId); return enabled ? STATE_ENABLED : STATE_DISABLED; } @@ -688,6 +732,11 @@ final class OverlayManagerServiceImpl { } interface OverlayChangeListener { + + /** + * An event triggered by changes made to overlay state or settings as well as changes that + * add or remove target packages of overlays. + **/ void onOverlaysChanged(@NonNull String targetPackage, int userId); } diff --git a/services/core/java/com/android/server/om/OverlayManagerSettings.java b/services/core/java/com/android/server/om/OverlayManagerSettings.java index e176351fcb76..36bf83dfe92c 100644 --- a/services/core/java/com/android/server/om/OverlayManagerSettings.java +++ b/services/core/java/com/android/server/om/OverlayManagerSettings.java @@ -309,6 +309,7 @@ final class OverlayManagerSettings { pw.print("mState.............: "); pw.println(OverlayInfo.stateToString(item.getState())); pw.print("mIsEnabled.........: "); pw.println(item.isEnabled()); pw.print("mIsStatic..........: "); pw.println(item.isStatic()); + pw.print("mPriority..........: "); pw.println(item.mPriority); pw.print("mCategory..........: "); pw.println(item.mCategory); pw.decreaseIndent(); @@ -528,7 +529,7 @@ final class OverlayManagerSettings { private OverlayInfo getOverlayInfo() { if (mCache == null) { mCache = new OverlayInfo(mPackageName, mTargetPackageName, mCategory, mBaseCodePath, - mState, mUserId); + mState, mUserId, mPriority, mIsStatic); } return mCache; } diff --git a/services/core/java/com/android/server/om/OverlayManagerShellCommand.java b/services/core/java/com/android/server/om/OverlayManagerShellCommand.java index 54bb115c5405..d576d330c4a8 100644 --- a/services/core/java/com/android/server/om/OverlayManagerShellCommand.java +++ b/services/core/java/com/android/server/om/OverlayManagerShellCommand.java @@ -126,6 +126,7 @@ final class OverlayManagerShellCommand extends ShellCommand { final OverlayInfo oi = overlaysForTarget.get(i); String status; switch (oi.state) { + case OverlayInfo.STATE_ENABLED_STATIC: case OverlayInfo.STATE_ENABLED: status = "[x]"; break; diff --git a/services/core/java/com/android/server/pm/InstantAppResolver.java b/services/core/java/com/android/server/pm/InstantAppResolver.java index d0a3757be04d..9a5dd5e04b07 100644 --- a/services/core/java/com/android/server/pm/InstantAppResolver.java +++ b/services/core/java/com/android/server/pm/InstantAppResolver.java @@ -47,7 +47,6 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.RemoteException; -import android.text.TextUtils; import android.util.Log; import android.util.Slog; @@ -164,6 +163,11 @@ public abstract class InstantAppResolver { Log.d(TAG, "[" + token + "] Phase1; No results matched"); } } + // if the match external flag is set, return an empty resolve info instead of a null result. + if (resolveInfo == null && (origIntent.getFlags() & FLAG_ACTIVITY_MATCH_EXTERNAL) != 0) { + return new AuxiliaryResolveInfo(token, false, createFailureIntent(origIntent, token), + null /* filters */); + } return resolveInfo; } @@ -365,23 +369,20 @@ public abstract class InstantAppResolver { InstantAppDigest digest, String token) { final int[] shaPrefix = digest.getDigestPrefix(); final byte[][] digestBytes = digest.getDigestBytes(); - final Intent failureIntent = new Intent(origIntent); boolean requiresSecondPhase = false; - failureIntent.setFlags(failureIntent.getFlags() | Intent.FLAG_IGNORE_EPHEMERAL); - failureIntent.setFlags(failureIntent.getFlags() & ~Intent.FLAG_ACTIVITY_MATCH_EXTERNAL); - failureIntent.setLaunchToken(token); ArrayList<AuxiliaryResolveInfo.AuxiliaryFilter> filters = null; - boolean isWebIntent = origIntent.isWebIntent(); + boolean requiresPrefixMatch = origIntent.isWebIntent() || (shaPrefix.length > 0 + && (origIntent.getFlags() & Intent.FLAG_ACTIVITY_MATCH_EXTERNAL) == 0); for (InstantAppResolveInfo instantAppResolveInfo : instantAppResolveInfoList) { - if (shaPrefix.length > 0 && instantAppResolveInfo.shouldLetInstallerDecide()) { - Slog.e(TAG, "InstantAppResolveInfo with mShouldLetInstallerDecide=true when digest" - + " provided; ignoring"); + if (requiresPrefixMatch && instantAppResolveInfo.shouldLetInstallerDecide()) { + Slog.d(TAG, "InstantAppResolveInfo with mShouldLetInstallerDecide=true when digest" + + " required; ignoring"); continue; } byte[] filterDigestBytes = instantAppResolveInfo.getDigestBytes(); // Only include matching digests if we have a prefix and we're either dealing with a - // web intent or the resolveInfo specifies digest details. - if (shaPrefix.length > 0 && (isWebIntent || filterDigestBytes.length > 0)) { + // prefixed request or the resolveInfo specifies digest details. + if (shaPrefix.length > 0 && (requiresPrefixMatch || filterDigestBytes.length > 0)) { boolean matchFound = false; // Go in reverse order so we match the narrowest scope first. for (int i = shaPrefix.length - 1; i >= 0; --i) { @@ -409,17 +410,26 @@ public abstract class InstantAppResolver { } } if (filters != null && !filters.isEmpty()) { - return new AuxiliaryResolveInfo(token, requiresSecondPhase, failureIntent, filters); - } - // if the match external flag is set, return an empty resolve info - if ((origIntent.getFlags() & FLAG_ACTIVITY_MATCH_EXTERNAL) != 0) { - return new AuxiliaryResolveInfo(token, false, failureIntent, null /* filters */); + return new AuxiliaryResolveInfo(token, requiresSecondPhase, + createFailureIntent(origIntent, token), filters); } // Hash or filter mis-match; no instant apps for this domain. return null; } /** + * Creates a failure intent for the installer to send in the case that the instant app cannot be + * launched for any reason. + */ + private static Intent createFailureIntent(Intent origIntent, String token) { + final Intent failureIntent = new Intent(origIntent); + failureIntent.setFlags(failureIntent.getFlags() | Intent.FLAG_IGNORE_EPHEMERAL); + failureIntent.setFlags(failureIntent.getFlags() & ~Intent.FLAG_ACTIVITY_MATCH_EXTERNAL); + failureIntent.setLaunchToken(token); + return failureIntent; + } + + /** * Returns one of three states: <p/> * <ul> * <li>{@code null} if there are no matches will not be; resolution is unnecessary.</li> diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index ebab1a72a227..b0be4a9799bb 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -34,6 +34,7 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.IndentingPrintWriter; import com.android.server.pm.Installer.InstallerException; +import com.android.server.pm.dex.DexManager; import com.android.server.pm.dex.DexoptOptions; import com.android.server.pm.dex.DexoptUtils; import com.android.server.pm.dex.PackageDexUsage; @@ -495,10 +496,9 @@ public class PackageDexOptimizer { boolean isUsedByOtherApps) { int flags = info.flags; boolean vmSafeMode = (flags & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0; - // When pm.dexopt.priv-apps-oob is true, we only verify privileged apps. - if (info.isPrivilegedApp() && - SystemProperties.getBoolean("pm.dexopt.priv-apps-oob", false)) { - return "verify"; + // When a priv app is configured to run out of box, only verify it. + if (info.isPrivilegedApp() && DexManager.isPackageSelectedToRunOob(info.packageName)) { + return "verify"; } if (vmSafeMode) { return getSafeModeCompilerFilter(targetCompilerFilter); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index af5521d036af..2650ef0b884f 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -88,11 +88,11 @@ import static android.os.storage.StorageManager.FLAG_STORAGE_CE; import static android.os.storage.StorageManager.FLAG_STORAGE_DE; import static android.system.OsConstants.O_CREAT; import static android.system.OsConstants.O_RDWR; + import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_MANAGED_PROFILE; import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_PARENT; import static com.android.internal.content.NativeLibraryHelper.LIB64_DIR_NAME; import static com.android.internal.content.NativeLibraryHelper.LIB_DIR_NAME; -import static com.android.internal.util.ArrayUtils.appendElement; import static com.android.internal.util.ArrayUtils.appendInt; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSet; @@ -275,7 +275,6 @@ import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IMediaContainerService; import com.android.internal.app.ResolverActivity; -import com.android.internal.app.SuspendedAppActivity; import com.android.internal.content.NativeLibraryHelper; import com.android.internal.content.PackageHelper; import com.android.internal.logging.MetricsLogger; @@ -411,7 +410,7 @@ public class PackageManagerService extends IPackageManager.Stub static final boolean DEBUG_DOMAIN_VERIFICATION = false; private static final boolean DEBUG_BACKUP = false; public static final boolean DEBUG_INSTALL = false; - public static final boolean DEBUG_REMOVE = true; + public static final boolean DEBUG_REMOVE = false; private static final boolean DEBUG_BROADCASTS = false; private static final boolean DEBUG_SHOW_INFO = false; private static final boolean DEBUG_PACKAGE_INFO = false; @@ -579,8 +578,6 @@ public class PackageManagerService extends IPackageManager.Stub private static final String PRODUCT_OVERLAY_DIR = "/product/overlay"; - private static final String PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB = "pm.dexopt.priv-apps-oob"; - /** Canonical intent used to identify what counts as a "web browser" app */ private static final Intent sBrowserIntent; static { @@ -2460,7 +2457,7 @@ public class PackageManagerService extends IPackageManager.Stub "*dexopt*"); DexManager.Listener dexManagerListener = DexLogger.getListener(this, installer, mInstallLock); - mDexManager = new DexManager(this, mPackageDexOptimizer, installer, mInstallLock, + mDexManager = new DexManager(mContext, this, mPackageDexOptimizer, installer, mInstallLock, dexManagerListener); mArtManagerService = new ArtManagerService(mContext, this, installer, mInstallLock); mMoveCallbacks = new MoveCallbacks(FgThread.get().getLooper()); @@ -8482,6 +8479,29 @@ public class PackageManagerService extends IPackageManager.Stub } /** + * Clear the package profile if this was an upgrade and the package + * version was updated. + */ + private void maybeClearProfilesForUpgradesLI( + @Nullable PackageSetting originalPkgSetting, + @NonNull PackageParser.Package currentPkg) { + if (originalPkgSetting == null || !isUpgrade()) { + return; + } + if (originalPkgSetting.versionCode == currentPkg.mVersionCode) { + return; + } + + clearAppProfilesLIF(currentPkg, UserHandle.USER_ALL); + if (DEBUG_INSTALL) { + Slog.d(TAG, originalPkgSetting.name + + " clear profile due to version change " + + originalPkgSetting.versionCode + " != " + + currentPkg.mVersionCode); + } + } + + /** * Traces a package scan. * @see #scanPackageLI(File, int, int, long, UserHandle) */ @@ -8748,7 +8768,7 @@ public class PackageManagerService extends IPackageManager.Stub // equal to the version on the /data partition. Throw an exception and use // the application already installed on the /data partition. throw new PackageManagerException(Log.WARN, "Package " + pkg.packageName + " at " - + pkg.codePath + " ignored: updated version " + disabledPkgSetting.versionCode + + pkg.codePath + " ignored: updated version " + pkgSetting.versionCode + " better than this " + pkg.getLongVersionCode()); } @@ -8763,6 +8783,13 @@ public class PackageManagerService extends IPackageManager.Stub (forceCollect && canSkipFullPackageVerification(pkg)); collectCertificatesLI(pkgSetting, pkg, forceCollect, skipVerify); + // Reset profile if the application version is changed + maybeClearProfilesForUpgradesLI(pkgSetting, pkg); + + /* + * A new system app appeared, but we already had a non-system one of the + * same name installed earlier. + */ boolean shouldHideSystemApp = false; // A new application appeared on /system, but, we already have a copy of // the application installed on /data. @@ -9415,6 +9442,17 @@ public class PackageManagerService extends IPackageManager.Stub mPackageUsage.writeNow(mPackages); mCompilerStats.writeNow(); mDexManager.writePackageDexUsageNow(); + + // This is the last chance to write out pending restriction settings + synchronized (mPackages) { + if (mHandler.hasMessages(WRITE_PACKAGE_RESTRICTIONS)) { + mHandler.removeMessages(WRITE_PACKAGE_RESTRICTIONS); + for (int userId : mDirtyUsers) { + mSettings.writePackageRestrictionsLPr(userId); + } + mDirtyUsers.clear(); + } + } } @Override @@ -10186,10 +10224,14 @@ public class PackageManagerService extends IPackageManager.Stub // if this is is a sharedUser, check to see if the new package is signed by a newer // signing certificate than the existing one, and if so, copy over the new details - if (signatureCheckPs.sharedUser != null - && pkg.mSigningDetails.hasAncestor( + if (signatureCheckPs.sharedUser != null) { + if (pkg.mSigningDetails.hasAncestor( signatureCheckPs.sharedUser.signatures.mSigningDetails)) { - signatureCheckPs.sharedUser.signatures.mSigningDetails = pkg.mSigningDetails; + signatureCheckPs.sharedUser.signatures.mSigningDetails = pkg.mSigningDetails; + } + if (signatureCheckPs.sharedUser.signaturesChanged == null) { + signatureCheckPs.sharedUser.signaturesChanged = Boolean.FALSE; + } } } catch (PackageManagerException e) { if ((parseFlags & PackageParser.PARSE_IS_SYSTEM_DIR) == 0) { @@ -10198,10 +10240,24 @@ public class PackageManagerService extends IPackageManager.Stub // The signature has changed, but this package is in the system // image... let's recover! pkgSetting.signatures.mSigningDetails = pkg.mSigningDetails; + // If the system app is part of a shared user we allow that shared user to change - // signatures as well in part as part of an OTA. + // signatures as well as part of an OTA. We still need to verify that the signatures + // are consistent within the shared user for a given boot, so only allow updating + // the signatures on the first package scanned for the shared user (i.e. if the + // signaturesChanged state hasn't been initialized yet in SharedUserSetting). if (signatureCheckPs.sharedUser != null) { + if (signatureCheckPs.sharedUser.signaturesChanged != null && + compareSignatures( + signatureCheckPs.sharedUser.signatures.mSigningDetails.signatures, + pkg.mSigningDetails.signatures) != PackageManager.SIGNATURE_MATCH) { + throw new PackageManagerException( + INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES, + "Signature mismatch for shared user: " + pkgSetting.sharedUser); + } + signatureCheckPs.sharedUser.signatures.mSigningDetails = pkg.mSigningDetails; + signatureCheckPs.sharedUser.signaturesChanged = Boolean.TRUE; } // File a report about this. String msg = "System package " + pkg.packageName @@ -10370,11 +10426,7 @@ public class PackageManagerService extends IPackageManager.Stub Log.d(TAG, "Scanning package " + pkg.packageName); } - if (Build.IS_DEBUGGABLE && - pkg.isPrivileged() && - SystemProperties.getBoolean(PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB, false)) { - PackageManagerServiceUtils.logPackageHasUncompressedCode(pkg); - } + DexManager.maybeLogUnexpectedPackageDetails(pkg); // Initialize package source and resource directories final File scanFile = new File(pkg.codePath); @@ -11102,8 +11154,23 @@ public class PackageManagerService extends IPackageManager.Stub mSettings.getPackageLPr(pkg.packageName), "previous package state not present"); + // previousPkg.pkg may be null: the package will be not be scanned if the + // package manager knows there is a newer version on /data. + // TODO[b/79435695]: Find a better way to keep track of the "static" + // property for RROs instead of having to parse packages on /system + PackageParser.Package ppkg = previousPkg.pkg; + if (ppkg == null) { + try { + final PackageParser pp = new PackageParser(); + ppkg = pp.parsePackage(previousPkg.codePath, + parseFlags | PackageParser.PARSE_IS_SYSTEM_DIR); + } catch (PackageParserException e) { + Slog.w(TAG, "failed to parse " + previousPkg.codePath, e); + } + } + // Static overlays cannot be updated. - if (previousPkg.pkg.mOverlayIsStatic) { + if (ppkg != null && ppkg.mOverlayIsStatic) { throw new PackageManagerException("Overlay " + pkg.packageName + " is static and cannot be upgraded."); // Non-static overlays cannot be converted to static overlays. @@ -14031,13 +14098,10 @@ public class PackageManagerService extends IPackageManager.Stub + Manifest.permission.MANAGE_USERS); } final int callingUid = Binder.getCallingUid(); - mPermissionManager.enforceCrossUserPermission(callingUid, userId, - true /* requireFullPermission */, true /* checkShell */, - "setPackagesSuspended for user " + userId); - if (callingUid != Process.ROOT_UID && - !UserHandle.isSameApp(getPackageUid(callingPackage, 0, userId), callingUid)) { - throw new IllegalArgumentException("CallingPackage " + callingPackage + " does not" - + " belong to calling app id " + UserHandle.getAppId(callingUid)); + if (callingUid != Process.ROOT_UID && callingUid != Process.SYSTEM_UID + && getPackageUid(callingPackage, 0, userId) != callingUid) { + throw new SecurityException("Calling package " + callingPackage + " in user " + + userId + " does not belong to calling uid " + callingUid); } if (!PLATFORM_PACKAGE_NAME.equals(callingPackage) && mProtectedPackages.getDeviceOwnerOrProfileOwnerPackage(userId) != null) { @@ -14164,9 +14228,19 @@ public class PackageManagerService extends IPackageManager.Stub } } - void onSuspendingPackageRemoved(String packageName, int removedForUser) { - final int[] userIds = (removedForUser == UserHandle.USER_ALL) ? sUserManager.getUserIds() - : new int[] {removedForUser}; + /** + * Immediately unsuspends any packages suspended by the given package. To be called + * when such a package's data is cleared or it is removed from the device. + * + * <p><b>Should not be used on a frequent code path</b> as it flushes state to disk + * synchronously + * + * @param packageName The package holding {@link Manifest.permission#SUSPEND_APPS} permission + * @param affectedUser The user for which the changes are taking place. + */ + void unsuspendForSuspendingPackage(String packageName, int affectedUser) { + final int[] userIds = (affectedUser == UserHandle.USER_ALL) ? sUserManager.getUserIds() + : new int[] {affectedUser}; for (int userId : userIds) { List<String> affectedPackages = new ArrayList<>(); synchronized (mPackages) { @@ -14183,6 +14257,8 @@ public class PackageManagerService extends IPackageManager.Stub new String[affectedPackages.size()]); sendMyPackageSuspendedOrUnsuspended(packageArray, false, null, userId); sendPackagesSuspendedForUser(packageArray, userId, false, null); + // Write package restrictions immediately to avoid an inconsistent state. + mSettings.writePackageRestrictionsLPr(userId); } } } @@ -18758,7 +18834,7 @@ public class PackageManagerService extends IPackageManager.Stub final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier(); if (ps.getPermissionsState().hasPermission(Manifest.permission.SUSPEND_APPS, userId)) { - onSuspendingPackageRemoved(packageName, userId); + unsuspendForSuspendingPackage(packageName, userId); } @@ -18899,10 +18975,10 @@ public class PackageManagerService extends IPackageManager.Stub true /*notLaunched*/, false /*hidden*/, false /*suspended*/, - null, /*suspendingPackage*/ - null, /*dialogMessage*/ - null, /*suspendedAppExtras*/ - null, /*suspendedLauncherExtras*/ + null /*suspendingPackage*/, + null /*dialogMessage*/, + null /*suspendedAppExtras*/, + null /*suspendedLauncherExtras*/, false /*instantApp*/, false /*virtualPreload*/, null /*lastDisableAppCaller*/, @@ -19089,6 +19165,10 @@ public class PackageManagerService extends IPackageManager.Stub if (dsm != null) { dsm.checkMemory(); } + if (checkPermission(Manifest.permission.SUSPEND_APPS, packageName, userId) + == PERMISSION_GRANTED) { + unsuspendForSuspendingPackage(packageName, userId); + } } } else { succeeded = false; @@ -20952,23 +21032,6 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); .getUriFor(Secure.INSTANT_APPS_ENABLED), false, co, UserHandle.USER_SYSTEM); co.onChange(true); - // This observer provides an one directional mapping from Global.PRIV_APP_OOB_ENABLED to - // pm.dexopt.priv-apps-oob property. This is only for experiment and should be removed once - // it is done. - ContentObserver privAppOobObserver = new ContentObserver(mHandler) { - @Override - public void onChange(boolean selfChange) { - int oobEnabled = Global.getInt(resolver, Global.PRIV_APP_OOB_ENABLED, 0); - SystemProperties.set(PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB, - oobEnabled == 1 ? "true" : "false"); - } - }; - mContext.getContentResolver().registerContentObserver( - Global.getUriFor(Global.PRIV_APP_OOB_ENABLED), false, privAppOobObserver, - UserHandle.USER_SYSTEM); - // At boot, restore the value from the setting, which persists across reboot. - privAppOobObserver.onChange(true); - // Disable any carrier apps. We do this very early in boot to prevent the apps from being // disabled after already being started. CarrierAppUtils.disableCarrierAppsUntilPrivileged(mContext.getOpPackageName(), this, @@ -21057,6 +21120,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); storage.registerListener(mStorageListener); mInstallerService.systemReady(); + mDexManager.systemReady(); mPackageDexOptimizer.systemReady(); StorageManagerInternal StorageManagerInternal = LocalServices.getService( diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java index 4b907f4047b1..1aea8f0b0543 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java @@ -26,7 +26,6 @@ import static com.android.server.pm.PackageManagerService.TAG; import static com.android.server.pm.PackageManagerServiceUtils.logCriticalInfo; import com.android.internal.content.NativeLibraryHelper; -import com.android.internal.util.ArrayUtils; import com.android.internal.util.FastPrintWriter; import com.android.server.EventLogTags; import com.android.server.pm.dex.DexManager; @@ -56,7 +55,6 @@ import android.util.ArraySet; import android.util.Log; import android.util.PackageUtils; import android.util.Slog; -import android.util.jar.StrictJarFile; import android.util.proto.ProtoOutputStream; import dalvik.system.VMRuntime; @@ -85,12 +83,10 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.function.Predicate; import java.util.zip.GZIPInputStream; -import java.util.zip.ZipEntry; /** * Class containing helper methods for the PackageManagerService. @@ -317,61 +313,6 @@ public class PackageManagerServiceUtils { return maxModifiedTime; } - /** - * Checks that the archive located at {@code fileName} has uncompressed dex file and so - * files that can be direclty mapped. - */ - public static void logApkHasUncompressedCode(String fileName) { - StrictJarFile jarFile = null; - try { - jarFile = new StrictJarFile(fileName, - false /*verify*/, false /*signatureSchemeRollbackProtectionsEnforced*/); - Iterator<ZipEntry> it = jarFile.iterator(); - while (it.hasNext()) { - ZipEntry entry = it.next(); - if (entry.getName().endsWith(".dex")) { - if (entry.getMethod() != ZipEntry.STORED) { - Slog.w(TAG, "APK " + fileName + " has compressed dex code " + - entry.getName()); - } else if ((entry.getDataOffset() & 0x3) != 0) { - Slog.w(TAG, "APK " + fileName + " has unaligned dex code " + - entry.getName()); - } - } else if (entry.getName().endsWith(".so")) { - if (entry.getMethod() != ZipEntry.STORED) { - Slog.w(TAG, "APK " + fileName + " has compressed native code " + - entry.getName()); - } else if ((entry.getDataOffset() & (0x1000 - 1)) != 0) { - Slog.w(TAG, "APK " + fileName + " has unaligned native code " + - entry.getName()); - } - } - } - } catch (IOException ignore) { - Slog.wtf(TAG, "Error when parsing APK " + fileName); - } finally { - try { - if (jarFile != null) { - jarFile.close(); - } - } catch (IOException ignore) {} - } - return; - } - - /** - * Checks that the APKs in the given package have uncompressed dex file and so - * files that can be direclty mapped. - */ - public static void logPackageHasUncompressedCode(PackageParser.Package pkg) { - logApkHasUncompressedCode(pkg.baseCodePath); - if (!ArrayUtils.isEmpty(pkg.splitCodePaths)) { - for (int i = 0; i < pkg.splitCodePaths.length; i++) { - logApkHasUncompressedCode(pkg.splitCodePaths[i]); - } - } - } - private static File getSettingsProblemFile() { File dataDir = Environment.getDataDirectory(); File systemDir = new File(dataDir, "system"); diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index a92fbb672b0c..01f84c44498b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -25,6 +25,7 @@ import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATIO import android.accounts.IAccountManager; import android.app.ActivityManager; import android.app.ActivityManagerInternal; +import android.app.Application; import android.content.ComponentName; import android.content.Context; import android.content.IIntentReceiver; @@ -53,17 +54,20 @@ import android.content.pm.PermissionInfo; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.content.pm.VersionedPackage; +import android.content.pm.dex.ArtManager; import android.content.pm.dex.DexMetadataHelper; +import android.content.pm.dex.ISnapshotRuntimeProfileCallback; import android.content.res.AssetManager; import android.content.res.Resources; import android.net.Uri; -import android.os.BaseBundle; import android.os.Binder; import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.os.IUserManager; import android.os.ParcelFileDescriptor; +import android.os.ParcelFileDescriptor.AutoCloseInputStream; +import android.os.ParcelFileDescriptor.AutoCloseOutputStream; import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteException; @@ -78,27 +82,41 @@ import android.text.TextUtils; import android.text.format.DateUtils; import android.util.ArraySet; import android.util.PrintWriterPrinter; - import com.android.internal.content.PackageHelper; import com.android.internal.util.ArrayUtils; import com.android.server.LocalServices; import com.android.server.SystemConfig; - import dalvik.system.DexFile; - -import libcore.io.IoUtils; - -import java.io.FileDescriptor; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.io.PrintWriter; import java.net.URISyntaxException; -import java.util.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.FileAttribute; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.WeakHashMap; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.TimeUnit; +import libcore.io.IoUtils; +import libcore.io.Streams; class PackageManagerShellCommand extends ShellCommand { /** Path for streaming APK content */ private static final String STDIN_PATH = "-"; + /** Path where ART profiles snapshots are dumped for the shell user */ + private final static String ART_PROFILE_SNAPSHOT_DEBUG_LOCATION = "/data/misc/profman/"; final IPackageManager mInterface; final private WeakHashMap<String, Resources> mResourceCache = @@ -167,6 +185,8 @@ class PackageManagerShellCommand extends ShellCommand { return runDexoptJob(); case "dump-profiles": return runDumpProfiles(); + case "snapshot-profile": + return runSnapshotProfile(); case "uninstall": return runUninstall(); case "clear": @@ -1287,6 +1307,120 @@ class PackageManagerShellCommand extends ShellCommand { return 0; } + private int runSnapshotProfile() throws RemoteException { + PrintWriter pw = getOutPrintWriter(); + + // Parse the arguments + final String packageName = getNextArg(); + final boolean isBootImage = "android".equals(packageName); + + String codePath = null; + String opt; + while ((opt = getNextArg()) != null) { + switch (opt) { + case "--code-path": + if (isBootImage) { + pw.write("--code-path cannot be used for the boot image."); + return -1; + } + codePath = getNextArg(); + break; + default: + pw.write("Unknown arg: " + opt); + return -1; + } + } + + // If no code path was explicitly requested, select the base code path. + String baseCodePath = null; + if (!isBootImage) { + PackageInfo packageInfo = mInterface.getPackageInfo(packageName, /* flags */ 0, + /* userId */0); + if (packageInfo == null) { + pw.write("Package not found " + packageName); + return -1; + } + baseCodePath = packageInfo.applicationInfo.getBaseCodePath(); + if (codePath == null) { + codePath = baseCodePath; + } + } + + // Create the profile snapshot. + final SnapshotRuntimeProfileCallback callback = new SnapshotRuntimeProfileCallback(); + // The calling package is needed to debug permission access. + final String callingPackage = (Binder.getCallingUid() == Process.ROOT_UID) + ? "root" : "com.android.shell"; + final int profileType = isBootImage + ? ArtManager.PROFILE_BOOT_IMAGE : ArtManager.PROFILE_APPS; + if (!mInterface.getArtManager().isRuntimeProfilingEnabled(profileType, callingPackage)) { + pw.println("Error: Runtime profiling is not enabled"); + return -1; + } + mInterface.getArtManager().snapshotRuntimeProfile(profileType, packageName, + codePath, callback, callingPackage); + if (!callback.waitTillDone()) { + pw.println("Error: callback not called"); + return callback.mErrCode; + } + + // Copy the snapshot profile to the output profile file. + try (InputStream inStream = new AutoCloseInputStream(callback.mProfileReadFd)) { + final String outputFileSuffix = isBootImage || Objects.equals(baseCodePath, codePath) + ? "" : ("-" + new File(codePath).getName()); + final String outputProfilePath = + ART_PROFILE_SNAPSHOT_DEBUG_LOCATION + packageName + outputFileSuffix + ".prof"; + try (OutputStream outStream = new FileOutputStream(outputProfilePath)) { + Streams.copy(inStream, outStream); + } + } catch (IOException e) { + pw.println("Error when reading the profile fd: " + e.getMessage()); + e.printStackTrace(pw); + return -1; + } + return 0; + } + + private static class SnapshotRuntimeProfileCallback + extends ISnapshotRuntimeProfileCallback.Stub { + private boolean mSuccess = false; + private int mErrCode = -1; + private ParcelFileDescriptor mProfileReadFd = null; + private CountDownLatch mDoneSignal = new CountDownLatch(1); + + @Override + public void onSuccess(ParcelFileDescriptor profileReadFd) { + mSuccess = true; + try { + // We need to dup the descriptor. We are in the same process as system server + // and we will be receiving the same object (which will be closed on the + // server side). + mProfileReadFd = profileReadFd.dup(); + } catch (IOException e) { + e.printStackTrace(); + } + mDoneSignal.countDown(); + } + + @Override + public void onError(int errCode) { + mSuccess = false; + mErrCode = errCode; + mDoneSignal.countDown(); + } + + boolean waitTillDone() { + boolean done = false; + try { + // The time-out is an arbitrary large value. Since this is a local call the result + // will come very fast. + done = mDoneSignal.await(10000000, TimeUnit.MILLISECONDS); + } catch (InterruptedException ignored) { + } + return done && mSuccess; + } + } + private int runUninstall() throws RemoteException { final PrintWriter pw = getOutPrintWriter(); int flags = 0; @@ -2761,7 +2895,13 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(""); pw.println(" dump-profiles TARGET-PACKAGE"); pw.println(" Dumps method/class profile files to"); - pw.println(" /data/misc/profman/TARGET-PACKAGE.txt"); + pw.println(" " + ART_PROFILE_SNAPSHOT_DEBUG_LOCATION + "TARGET-PACKAGE.txt"); + pw.println(""); + pw.println(" snapshot-profile TARGET-PACKAGE [--code-path path]"); + pw.println(" Take a snapshot of the package profiles to"); + pw.println(" " + ART_PROFILE_SNAPSHOT_DEBUG_LOCATION + + "TARGET-PACKAGE[-code-path].prof"); + pw.println(" If TARGET-PACKAGE=android it will take a snapshot of the boot image"); pw.println(""); pw.println(" set-home-activity [--user USER_ID] TARGET-COMPONENT"); pw.println(" Set the default home activity (aka launcher)."); diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index f8bf9c45e8b1..5177995a8353 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -734,10 +734,10 @@ public final class Settings { true /*notLaunched*/, false /*hidden*/, false /*suspended*/, - null, /*suspendingPackage*/ - null, /*dialogMessage*/ - null, /*suspendedAppExtras*/ - null, /*suspendedLauncherExtras*/ + null /*suspendingPackage*/, + null /*dialogMessage*/, + null /*suspendedAppExtras*/, + null /*suspendedLauncherExtras*/, instantApp, virtualPreload, null /*lastDisableAppCaller*/, @@ -1634,10 +1634,10 @@ public final class Settings { false /*notLaunched*/, false /*hidden*/, false /*suspended*/, - null, /*suspendingPackage*/ - null, /*dialogMessage*/ - null, /*suspendedAppExtras*/ - null, /*suspendedLauncherExtras*/ + null /*suspendingPackage*/, + null /*dialogMessage*/, + null /*suspendedAppExtras*/, + null /*suspendedLauncherExtras*/, false /*instantApp*/, false /*virtualPreload*/, null /*lastDisableAppCaller*/, @@ -4706,7 +4706,7 @@ public final class Settings { pw.print(prefix); pw.print(" pkgFlags="); printFlags(pw, ps.pkgFlags, FLAG_DUMP_SPEC); pw.println(); - if (ps.pkg.mOverlayTarget != null) { + if (ps.pkg != null && ps.pkg.mOverlayTarget != null) { pw.print(prefix); pw.print(" overlayTarget="); pw.println(ps.pkg.mOverlayTarget); pw.print(prefix); pw.print(" overlayCategory="); pw.println(ps.pkg.mOverlayCategory); } diff --git a/services/core/java/com/android/server/pm/SharedUserSetting.java b/services/core/java/com/android/server/pm/SharedUserSetting.java index b6b94f5e3cab..ca08415f7a77 100644 --- a/services/core/java/com/android/server/pm/SharedUserSetting.java +++ b/services/core/java/com/android/server/pm/SharedUserSetting.java @@ -46,6 +46,7 @@ public final class SharedUserSetting extends SettingBase { final ArraySet<PackageSetting> packages = new ArraySet<PackageSetting>(); final PackageSignatures signatures = new PackageSignatures(); + Boolean signaturesChanged; SharedUserSetting(String _name, int _pkgFlags, int _pkgPrivateFlags) { super(_pkgFlags, _pkgPrivateFlags); diff --git a/services/core/java/com/android/server/pm/dex/ArtManagerService.java b/services/core/java/com/android/server/pm/dex/ArtManagerService.java index 1d5c5808d705..0ba78226a38f 100644 --- a/services/core/java/com/android/server/pm/dex/ArtManagerService.java +++ b/services/core/java/com/android/server/pm/dex/ArtManagerService.java @@ -34,6 +34,7 @@ import android.os.Binder; import android.os.Build; import android.os.Handler; import android.os.ParcelFileDescriptor; +import android.os.Process; import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserHandle; @@ -44,6 +45,7 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.os.BackgroundThread; +import com.android.internal.os.RoSystemProperties; import com.android.internal.util.ArrayUtils; import com.android.internal.util.Preconditions; import com.android.server.LocalServices; @@ -106,7 +108,7 @@ public class ArtManagerService extends android.content.pm.dex.IArtManager.Stub { LocalServices.addService(ArtManagerInternal.class, new ArtManagerInternalImpl()); } - private boolean checkPermission(int callingUid, String callingPackage) { + private boolean checkAndroidPermissions(int callingUid, String callingPackage) { // Callers always need this permission mContext.enforceCallingOrSelfPermission( android.Manifest.permission.READ_RUNTIME_PROFILES, TAG); @@ -125,11 +127,51 @@ public class ArtManagerService extends android.content.pm.dex.IArtManager.Stub { } } + /** + * Checks if the calling user is the shell user and if it is, it checks if it can + * to take a profile snapshot of the give package: + * - on debuggable builds the shell user can take profile snapshots of any app. + * - on non-debuggable builds the shell user can only take snapshots of debuggable apps. + * + * Returns true iff the callingUid is the shell uid and the shell is allowed snapshot profiles. + * + * Note that the root users will go through the regular {@link #checkAndroidPermissions) checks. + */ + private boolean checkShellPermissions(@ProfileType int profileType, String packageName, + int callingUid) { + if (callingUid != Process.SHELL_UID) { + return false; + } + if (RoSystemProperties.DEBUGGABLE) { + return true; + } + if (profileType == ArtManager.PROFILE_BOOT_IMAGE) { + // The shell cannot profile the boot image on non-debuggable builds. + return false; + } + PackageInfo info = null; + try { + info = mPackageManager.getPackageInfo(packageName, /*flags*/ 0, /*userId*/ 0); + } catch (RemoteException ignored) { + // Should not happen. + } + if (info == null) { + return false; + } + + // On user builds the shell can only profile debuggable apps. + return (info.applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) + == ApplicationInfo.FLAG_DEBUGGABLE; + } + + @Override public void snapshotRuntimeProfile(@ProfileType int profileType, @Nullable String packageName, @Nullable String codePath, @NonNull ISnapshotRuntimeProfileCallback callback, String callingPackage) { - if (!checkPermission(Binder.getCallingUid(), callingPackage)) { + int callingUid = Binder.getCallingUid(); + if (!checkShellPermissions(profileType, packageName, callingUid) && + !checkAndroidPermissions(callingUid, callingPackage)) { try { callback.onError(ArtManager.SNAPSHOT_FAILED_INTERNAL_ERROR); } catch (RemoteException ignored) { @@ -266,7 +308,8 @@ public class ArtManagerService extends android.content.pm.dex.IArtManager.Stub { @Override public boolean isRuntimeProfilingEnabled(@ProfileType int profileType, String callingPackage) { - if (!checkPermission(Binder.getCallingUid(), callingPackage)) { + int callingUid = Binder.getCallingUid(); + if (callingUid != Process.SHELL_UID && !checkAndroidPermissions(callingUid, callingPackage)) { return false; } diff --git a/services/core/java/com/android/server/pm/dex/DexManager.java b/services/core/java/com/android/server/pm/dex/DexManager.java index 3e63fb42f0ef..392d4d839c45 100644 --- a/services/core/java/com/android/server/pm/dex/DexManager.java +++ b/services/core/java/com/android/server/pm/dex/DexManager.java @@ -16,17 +16,25 @@ package com.android.server.pm.dex; +import android.content.ContentResolver; +import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; +import android.content.pm.PackageParser; +import android.database.ContentObserver; +import android.os.Build; import android.os.FileUtils; import android.os.RemoteException; import android.os.storage.StorageManager; +import android.os.SystemProperties; import android.os.UserHandle; - +import android.provider.Settings.Global; import android.util.Slog; +import android.util.jar.StrictJarFile; import com.android.internal.annotations.GuardedBy; +import com.android.internal.util.ArrayUtils; import com.android.server.pm.Installer; import com.android.server.pm.Installer.InstallerException; import com.android.server.pm.PackageDexOptimizer; @@ -36,13 +44,16 @@ import com.android.server.pm.PackageManagerServiceCompilerMapping; import java.io.File; import java.io.IOException; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.zip.ZipEntry; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.dex.PackageDexUsage.PackageUseInfo; @@ -59,8 +70,14 @@ import static com.android.server.pm.dex.PackageDexUsage.DexUseInfo; public class DexManager { private static final String TAG = "DexManager"; + private static final String PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB = "pm.dexopt.priv-apps-oob"; + private static final String PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB_LIST = + "pm.dexopt.priv-apps-oob-list"; + private static final boolean DEBUG = false; + private final Context mContext; + // Maps package name to code locations. // It caches the code locations for the installed packages. This allows for // faster lookups (no locks) when finding what package owns the dex file. @@ -106,8 +123,9 @@ public class DexManager { String dexPath, int storageFlags); } - public DexManager(IPackageManager pms, PackageDexOptimizer pdo, + public DexManager(Context context, IPackageManager pms, PackageDexOptimizer pdo, Installer installer, Object installLock, Listener listener) { + mContext = context; mPackageCodeLocationsCache = new HashMap<>(); mPackageDexUsage = new PackageDexUsage(); mPackageManager = pms; @@ -117,6 +135,10 @@ public class DexManager { mListener = listener; } + public void systemReady() { + registerSettingObserver(); + } + /** * Notify about dex files loads. * Note that this method is invoked when apps load dex files and it should @@ -641,6 +663,141 @@ public class DexManager { mPackageDexUsage.writeNow(); } + private void registerSettingObserver() { + final ContentResolver resolver = mContext.getContentResolver(); + + // This observer provides a one directional mapping from Global.PRIV_APP_OOB_ENABLED to + // pm.dexopt.priv-apps-oob property. This is only for experiment and should be removed once + // it is done. + ContentObserver privAppOobObserver = new ContentObserver(null) { + @Override + public void onChange(boolean selfChange) { + int oobEnabled = Global.getInt(resolver, Global.PRIV_APP_OOB_ENABLED, 0); + SystemProperties.set(PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB, + oobEnabled == 1 ? "true" : "false"); + } + }; + resolver.registerContentObserver( + Global.getUriFor(Global.PRIV_APP_OOB_ENABLED), false, privAppOobObserver, + UserHandle.USER_SYSTEM); + // At boot, restore the value from the setting, which persists across reboot. + privAppOobObserver.onChange(true); + + ContentObserver privAppOobListObserver = new ContentObserver(null) { + @Override + public void onChange(boolean selfChange) { + String oobList = Global.getString(resolver, Global.PRIV_APP_OOB_LIST); + if (oobList == null) { + oobList = "ALL"; + } + SystemProperties.set(PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB_LIST, oobList); + } + }; + resolver.registerContentObserver( + Global.getUriFor(Global.PRIV_APP_OOB_LIST), false, privAppOobListObserver, + UserHandle.USER_SYSTEM); + // At boot, restore the value from the setting, which persists across reboot. + privAppOobListObserver.onChange(true); + } + + /** + * Returns whether the given package is in the list of privilaged apps that should run out of + * box. This only makes sense if PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB is true. Note that when + * the the OOB list is empty, all priv apps will run in OOB mode. + */ + public static boolean isPackageSelectedToRunOob(String packageName) { + return isPackageSelectedToRunOob(Arrays.asList(packageName)); + } + + /** + * Returns whether any of the given packages are in the list of privilaged apps that should run + * out of box. This only makes sense if PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB is true. Note that + * when the the OOB list is empty, all priv apps will run in OOB mode. + */ + public static boolean isPackageSelectedToRunOob(Collection<String> packageNamesInSameProcess) { + if (!SystemProperties.getBoolean(PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB, false)) { + return false; + } + String oobListProperty = SystemProperties.get( + PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB_LIST, "ALL"); + if ("ALL".equals(oobListProperty)) { + return true; + } + for (String oobPkgName : oobListProperty.split(",")) { + if (packageNamesInSameProcess.contains(oobPkgName)) { + return true; + } + } + return false; + } + + /** + * Generates package related log if the package has code stored in unexpected way. + */ + public static void maybeLogUnexpectedPackageDetails(PackageParser.Package pkg) { + if (!Build.IS_DEBUGGABLE) { + return; + } + + if (pkg.isPrivileged() && isPackageSelectedToRunOob(pkg.packageName)) { + logIfPackageHasUncompressedCode(pkg); + } + } + + /** + * Generates log if the APKs in the given package have uncompressed dex file and so + * files that can be direclty mapped. + */ + private static void logIfPackageHasUncompressedCode(PackageParser.Package pkg) { + logIfApkHasUncompressedCode(pkg.baseCodePath); + if (!ArrayUtils.isEmpty(pkg.splitCodePaths)) { + for (int i = 0; i < pkg.splitCodePaths.length; i++) { + logIfApkHasUncompressedCode(pkg.splitCodePaths[i]); + } + } + } + + /** + * Generates log if the archive located at {@code fileName} has uncompressed dex file and so + * files that can be direclty mapped. + */ + private static void logIfApkHasUncompressedCode(String fileName) { + StrictJarFile jarFile = null; + try { + jarFile = new StrictJarFile(fileName, + false /*verify*/, false /*signatureSchemeRollbackProtectionsEnforced*/); + Iterator<ZipEntry> it = jarFile.iterator(); + while (it.hasNext()) { + ZipEntry entry = it.next(); + if (entry.getName().endsWith(".dex")) { + if (entry.getMethod() != ZipEntry.STORED) { + Slog.w(TAG, "APK " + fileName + " has compressed dex code " + + entry.getName()); + } else if ((entry.getDataOffset() & 0x3) != 0) { + Slog.w(TAG, "APK " + fileName + " has unaligned dex code " + + entry.getName()); + } + } else if (entry.getName().endsWith(".so")) { + if (entry.getMethod() != ZipEntry.STORED) { + Slog.w(TAG, "APK " + fileName + " has compressed native code " + + entry.getName()); + } else if ((entry.getDataOffset() & (0x1000 - 1)) != 0) { + Slog.w(TAG, "APK " + fileName + " has unaligned native code " + + entry.getName()); + } + } + } + } catch (IOException ignore) { + Slog.wtf(TAG, "Error when parsing APK " + fileName); + } finally { + try { + if (jarFile != null) { + jarFile.close(); + } + } catch (IOException ignore) {} + } + } + public static class RegisterDexModuleResult { public RegisterDexModuleResult() { this(false, null); diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index f6592257b636..36fc1202006f 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -449,9 +449,10 @@ public class PermissionManagerService { userId) == PackageManager.PERMISSION_GRANTED) { EventLog.writeEvent(0x534e4554, "72710897", newPackage.applicationInfo.uid, - "Revoking permission", permissionName, "from package", - packageName, "as the group changed from", - oldPermissionGroupName, "to", newPermissionGroupName); + "Revoking permission " + permissionName + + " from package " + packageName + + " as the group changed from " + oldPermissionGroupName + + " to " + newPermissionGroupName); try { revokeRuntimePermission(permissionName, packageName, false, @@ -620,9 +621,8 @@ public class PermissionManagerService { enforcePermissionCapLocked(info, tree); bp = new BasePermission(info.name, tree.getSourcePackageName(), BasePermission.TYPE_DYNAMIC); - } else if (bp.isDynamic()) { - // TODO: switch this back to SecurityException - Slog.wtf(TAG, "Not allowed to modify non-dynamic permission " + } else if (!bp.isDynamic()) { + throw new SecurityException("Not allowed to modify non-dynamic permission " + info.name); } changed = bp.addToTree(fixedLevel, info, tree); @@ -1953,7 +1953,7 @@ public class PermissionManagerService { UserManager.DISALLOW_DEBUGGING_FEATURES, callingUid, userId); } if (userId == UserHandle.getUserId(callingUid)) return; - if (callingUid != Process.SYSTEM_UID && callingUid != 0) { + if (callingUid != Process.SYSTEM_UID && callingUid != Process.ROOT_UID) { if (requireFullPermission) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, message); diff --git a/services/core/java/com/android/server/policy/IconUtilities.java b/services/core/java/com/android/server/policy/IconUtilities.java index b196dec93686..884d7d497a8f 100644 --- a/services/core/java/com/android/server/policy/IconUtilities.java +++ b/services/core/java/com/android/server/policy/IconUtilities.java @@ -16,6 +16,8 @@ package com.android.server.policy; +import android.graphics.ColorFilter; +import android.graphics.ColorMatrixColorFilter; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.PaintDrawable; @@ -38,24 +40,17 @@ import android.content.Context; * Various utilities shared amongst the Launcher's classes. */ public final class IconUtilities { - private static final String TAG = "IconUtilities"; - - private static final int sColors[] = { 0xffff0000, 0xff00ff00, 0xff0000ff }; private int mIconWidth = -1; private int mIconHeight = -1; private int mIconTextureWidth = -1; private int mIconTextureHeight = -1; - private final Paint mPaint = new Paint(); - private final Paint mBlurPaint = new Paint(); - private final Paint mGlowColorPressedPaint = new Paint(); - private final Paint mGlowColorFocusedPaint = new Paint(); private final Rect mOldBounds = new Rect(); private final Canvas mCanvas = new Canvas(); private final DisplayMetrics mDisplayMetrics; - private int mColorIndex = 0; + private ColorFilter mDisabledColorFilter; public IconUtilities(Context context) { final Resources resources = context.getResources(); @@ -65,39 +60,10 @@ public final class IconUtilities { mIconWidth = mIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size); mIconTextureWidth = mIconTextureHeight = mIconWidth + (int)(blurPx*2); - - mBlurPaint.setMaskFilter(new BlurMaskFilter(blurPx, BlurMaskFilter.Blur.NORMAL)); - - TypedValue value = new TypedValue(); - mGlowColorPressedPaint.setColor(context.getTheme().resolveAttribute( - android.R.attr.colorPressedHighlight, value, true) ? value.data : 0xffffc300); - mGlowColorPressedPaint.setMaskFilter(TableMaskFilter.CreateClipTable(0, 30)); - mGlowColorFocusedPaint.setColor(context.getTheme().resolveAttribute( - android.R.attr.colorFocusedHighlight, value, true) ? value.data : 0xffff8e00); - mGlowColorFocusedPaint.setMaskFilter(TableMaskFilter.CreateClipTable(0, 30)); - - ColorMatrix cm = new ColorMatrix(); - cm.setSaturation(0.2f); - mCanvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG, Paint.FILTER_BITMAP_FLAG)); } - public Drawable createIconDrawable(Drawable src) { - Bitmap scaled = createIconBitmap(src); - - StateListDrawable result = new StateListDrawable(); - - result.addState(new int[] { android.R.attr.state_focused }, - new BitmapDrawable(createSelectedBitmap(scaled, false))); - result.addState(new int[] { android.R.attr.state_pressed }, - new BitmapDrawable(createSelectedBitmap(scaled, true))); - result.addState(new int[0], new BitmapDrawable(scaled)); - - result.setBounds(0, 0, mIconTextureWidth, mIconTextureHeight); - return result; - } - /** * Returns a bitmap suitable for the all apps view. The bitmap will be a power * of two sized ARGB_8888 bitmap that can be used as a gl texture. @@ -150,15 +116,6 @@ public final class IconUtilities { final int left = (textureWidth-width) / 2; final int top = (textureHeight-height) / 2; - if (false) { - // draw a big box for the icon for debugging - canvas.drawColor(sColors[mColorIndex]); - if (++mColorIndex >= sColors.length) mColorIndex = 0; - Paint debugPaint = new Paint(); - debugPaint.setColor(0xffcccc00); - canvas.drawRect(left, top, left+width, top+height, debugPaint); - } - mOldBounds.set(icon.getBounds()); icon.setBounds(left, top, left+width, top+height); icon.draw(canvas); @@ -167,24 +124,28 @@ public final class IconUtilities { return bitmap; } - private Bitmap createSelectedBitmap(Bitmap src, boolean pressed) { - final Bitmap result = Bitmap.createBitmap(mIconTextureWidth, mIconTextureHeight, - Bitmap.Config.ARGB_8888); - final Canvas dest = new Canvas(result); - - dest.drawColor(0, PorterDuff.Mode.CLEAR); - - int[] xy = new int[2]; - Bitmap mask = src.extractAlpha(mBlurPaint, xy); - - dest.drawBitmap(mask, xy[0], xy[1], - pressed ? mGlowColorPressedPaint : mGlowColorFocusedPaint); - - mask.recycle(); - - dest.drawBitmap(src, 0, 0, mPaint); - dest.setBitmap(null); - - return result; + public ColorFilter getDisabledColorFilter() { + if (mDisabledColorFilter != null) { + return mDisabledColorFilter; + } + ColorMatrix brightnessMatrix = new ColorMatrix(); + float brightnessF = 0.5f; + int brightnessI = (int) (255 * brightnessF); + // Brightness: C-new = C-old*(1-amount) + amount + float scale = 1f - brightnessF; + float[] mat = brightnessMatrix.getArray(); + mat[0] = scale; + mat[6] = scale; + mat[12] = scale; + mat[4] = brightnessI; + mat[9] = brightnessI; + mat[14] = brightnessI; + + ColorMatrix filterMatrix = new ColorMatrix(); + filterMatrix.setSaturation(0); + filterMatrix.preConcat(brightnessMatrix); + + mDisabledColorFilter = new ColorMatrixColorFilter(filterMatrix); + return mDisabledColorFilter; } } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 18f3434ece49..16440c818959 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -803,9 +803,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { private int mCurrentUserId; - /* Whether accessibility is magnifying the screen */ - private boolean mScreenMagnificationActive; - // Maps global key codes to the components that will handle them. private GlobalKeyManager mGlobalKeyManager; @@ -6092,14 +6089,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { && (!isNavBarVirtKey || mNavBarVirtualKeyHapticFeedbackEnabled) && event.getRepeatCount() == 0; - // Cancel any pending remote recents animations before handling the button itself. In the - // case where we are going home and the recents animation has already started, just cancel - // the recents animation, leaving the home stack in place for the pending start activity - if (isNavBarVirtKey && !down && !canceled) { - boolean isHomeKey = keyCode == KeyEvent.KEYCODE_HOME; - mActivityManagerInternal.cancelRecentsAnimation(!isHomeKey); - } - // Handle special keys. switch (keyCode) { case KeyEvent.KEYCODE_BACK: { @@ -8420,11 +8409,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { */ private int configureNavBarOpacity(int visibility, boolean dockedStackVisible, boolean freeformStackVisible, boolean isDockedDividerResizing) { - if (mScreenMagnificationActive) { - // When the screen is magnified, the nav bar should be opaque since its background - // can vary as the user pans and zooms - visibility = setNavBarOpaqueFlag(visibility); - } else if (mNavBarOpacityMode == NAV_BAR_OPAQUE_WHEN_FREEFORM_OR_DOCKED) { + if (mNavBarOpacityMode == NAV_BAR_OPAQUE_WHEN_FREEFORM_OR_DOCKED) { if (dockedStackVisible || freeformStackVisible || isDockedDividerResizing) { visibility = setNavBarOpaqueFlag(visibility); } @@ -8579,14 +8564,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override - public void onScreenMagnificationStateChanged(boolean active) { - synchronized (mWindowManagerFuncs.getWindowManagerLock()) { - mScreenMagnificationActive = active; - updateSystemUiVisibilityLw(); - } - } - - @Override public void writeToProto(ProtoOutputStream proto, long fieldId) { final long token = proto.start(fieldId); proto.write(LAST_SYSTEM_UI_FLAGS, mLastSystemUiFlags); diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java index 8690a8392961..33eafb9e3e33 100644 --- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java +++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java @@ -1740,13 +1740,6 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { boolean canDismissBootAnimation(); /** - * Called when the magnification state changes. - * - * @param active Whether magnification is active (that is, we are zoomed in). - */ - void onScreenMagnificationStateChanged(boolean active); - - /** * Convert the user rotation mode to a human readable format. */ static String userRotationModeToString(int mode) { diff --git a/services/core/java/com/android/server/power/BatterySaverPolicy.java b/services/core/java/com/android/server/power/BatterySaverPolicy.java index 483f974ab8b6..c04c1fb4f786 100644 --- a/services/core/java/com/android/server/power/BatterySaverPolicy.java +++ b/services/core/java/com/android/server/power/BatterySaverPolicy.java @@ -29,6 +29,7 @@ import android.text.TextUtils; import android.util.ArrayMap; import android.util.KeyValueListParser; import android.util.Slog; +import android.view.accessibility.AccessibilityManager; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; @@ -98,7 +99,14 @@ public class BatterySaverPolicy extends ContentObserver { * @see #KEY_VIBRATION_DISABLED */ @GuardedBy("mLock") - private boolean mVibrationDisabled; + private boolean mVibrationDisabledConfig; + + /** + * Whether vibration should *really* be disabled -- i.e. {@link #mVibrationDisabledConfig} + * is true *and* {@link #mAccessibilityEnabled} is false. + */ + @GuardedBy("mLock") + private boolean mVibrationDisabledEffective; /** * {@code true} if animation is disabled in battery saver mode. @@ -226,6 +234,9 @@ public class BatterySaverPolicy extends ContentObserver { private ContentResolver mContentResolver; @GuardedBy("mLock") + private AccessibilityManager mAccessibilityManager; + + @GuardedBy("mLock") private final List<BatterySaverPolicyListener> mListeners = new ArrayList<>(); /** @@ -246,6 +257,12 @@ public class BatterySaverPolicy extends ContentObserver { @GuardedBy("mLock") private ArrayMap<String, String> mFilesForNoninteractive; + /** + * Whether accessibility is enabled or not. + */ + @GuardedBy("mLock") + private boolean mAccessibilityEnabled; + public interface BatterySaverPolicyListener { void onBatterySaverPolicyChanged(BatterySaverPolicy policy); } @@ -259,10 +276,16 @@ public class BatterySaverPolicy extends ContentObserver { mContext = context; mContentResolver = context.getContentResolver(); + mAccessibilityManager = context.getSystemService(AccessibilityManager.class); + 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); + + mAccessibilityManager.addAccessibilityStateChangeListener((enabled) -> { + refreshSettings(); + }); } onChange(true, null); } @@ -287,8 +310,17 @@ public class BatterySaverPolicy extends ContentObserver { return R.string.config_batterySaverDeviceSpecificConfig; } + @VisibleForTesting + boolean isAccessibilityEnabled() { + return mAccessibilityManager.isEnabled(); + } + @Override public void onChange(boolean selfChange, Uri uri) { + refreshSettings(); + } + + private void refreshSettings() { final BatterySaverPolicyListener[] listeners; synchronized (mLock) { // Load the non-device-specific setting. @@ -340,7 +372,7 @@ public class BatterySaverPolicy extends ContentObserver { Slog.wtf(TAG, "Bad battery saver constants: " + setting); } - mVibrationDisabled = parser.getBoolean(KEY_VIBRATION_DISABLED, true); + mVibrationDisabledConfig = parser.getBoolean(KEY_VIBRATION_DISABLED, true); mAnimationDisabled = parser.getBoolean(KEY_ANIMATION_DISABLED, false); mSoundTriggerDisabled = parser.getBoolean(KEY_SOUNDTRIGGER_DISABLED, true); mFullBackupDeferred = parser.getBoolean(KEY_FULLBACKUP_DEFERRED, true); @@ -375,12 +407,18 @@ public class BatterySaverPolicy extends ContentObserver { mFilesForNoninteractive = (new CpuFrequencies()).parseString( parser.getString(KEY_CPU_FREQ_NONINTERACTIVE, "")).toSysFileMap(); + // Update the effective policy. + mAccessibilityEnabled = isAccessibilityEnabled(); + + mVibrationDisabledEffective = mVibrationDisabledConfig + && !mAccessibilityEnabled; // Don't disable vibration when accessibility is on. + final StringBuilder sb = new StringBuilder(); if (mForceAllAppsStandby) sb.append("A"); if (mForceBackgroundCheck) sb.append("B"); - if (mVibrationDisabled) sb.append("v"); + if (mVibrationDisabledEffective) sb.append("v"); if (mAnimationDisabled) sb.append("a"); if (mSoundTriggerDisabled) sb.append("s"); if (mFullBackupDeferred) sb.append("F"); @@ -446,7 +484,7 @@ public class BatterySaverPolicy extends ContentObserver { return builder.setBatterySaverEnabled(mSoundTriggerDisabled) .build(); case ServiceType.VIBRATION: - return builder.setBatterySaverEnabled(mVibrationDisabled) + return builder.setBatterySaverEnabled(mVibrationDisabledEffective) .build(); case ServiceType.FORCE_ALL_APPS_STANDBY: return builder.setBatterySaverEnabled(mForceAllAppsStandby) @@ -504,7 +542,9 @@ public class BatterySaverPolicy extends ContentObserver { pw.println(" value: " + mDeviceSpecificSettings); pw.println(); - pw.println(" " + KEY_VIBRATION_DISABLED + "=" + mVibrationDisabled); + pw.println(" mAccessibilityEnabled=" + mAccessibilityEnabled); + pw.println(" " + KEY_VIBRATION_DISABLED + ":config=" + mVibrationDisabledConfig); + pw.println(" " + KEY_VIBRATION_DISABLED + ":effective=" + mVibrationDisabledEffective); pw.println(" " + KEY_ANIMATION_DISABLED + "=" + mAnimationDisabled); pw.println(" " + KEY_FULLBACKUP_DEFERRED + "=" + mFullBackupDeferred); pw.println(" " + KEY_KEYVALUE_DEFERRED + "=" + mKeyValueBackupDeferred); diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 0ccbb251d2a2..a7c203dca03b 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -1303,8 +1303,10 @@ public class WallpaperManagerService extends IWallpaperManager.Stub synchronized (mLock) { if (mCurrentUserId == userId) { if (mWaitingForUnlock) { - // If we're switching users, now is when we transition the wallpaper - switchUser(userId, null); + // the desired wallpaper is not direct-boot aware, load it now + final WallpaperData systemWallpaper = + getWallpaperSafeLocked(userId, FLAG_SYSTEM); + switchWallpaper(systemWallpaper, null); } // Make sure that the SELinux labeling of all the relevant files is correct. diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index 68be50c2689a..f5f994ae05fd 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -87,8 +87,6 @@ final class AccessibilityController { private WindowsForAccessibilityObserver mWindowsForAccessibilityObserver; - private boolean mScreenMagnificationActive; - public void setMagnificationCallbacksLocked(MagnificationCallbacks callbacks) { if (callbacks != null) { if (mDisplayMagnifier != null) { @@ -138,11 +136,6 @@ final class AccessibilityController { if (mWindowsForAccessibilityObserver != null) { mWindowsForAccessibilityObserver.scheduleComputeChangedWindowsLocked(); } - boolean nowActive = !spec.isNop(); - if (nowActive != mScreenMagnificationActive) { - mScreenMagnificationActive = nowActive; - mService.mPolicy.onScreenMagnificationStateChanged(nowActive); - } } public void getMagnificationRegionLocked(Region outMagnificationRegion) { diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 908379701fd2..e637df4db502 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -17,6 +17,7 @@ package com.android.server.wm; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; +import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION; import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE; @@ -31,9 +32,12 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; +import static android.view.WindowManager.TRANSIT_DOCK_TASK_FROM_RECENTS; +import static android.view.WindowManager.TRANSIT_WALLPAPER_OPEN; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; import static android.view.WindowManager.TRANSIT_UNSET; +import static com.android.server.wm.AppTransition.isKeyguardGoingAwayTransit; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS; @@ -1686,12 +1690,24 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree } } + private boolean shouldAnimate(int transit) { + final boolean isSplitScreenPrimary = + getWindowingMode() == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; + final boolean allowSplitScreenPrimaryAnimation = transit != TRANSIT_WALLPAPER_OPEN; + + // We animate always if it's not split screen primary, and only some special cases in split + // screen primary because it causes issues with stack clipping when we run an un-minimize + // animation at the same time. + return !isSplitScreenPrimary || allowSplitScreenPrimaryAnimation; + } + boolean applyAnimationLocked(WindowManager.LayoutParams lp, int transit, boolean enter, boolean isVoiceInteraction) { - if (mService.mDisableTransitionAnimation) { + if (mService.mDisableTransitionAnimation || !shouldAnimate(transit)) { if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) { - Slog.v(TAG_WM, "applyAnimation: transition animation is disabled. atoken=" + this); + Slog.v(TAG_WM, "applyAnimation: transition animation is disabled or skipped." + + " atoken=" + this); } cancelAnimation(); return false; diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 9621eddc348a..c0dc750949bc 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1510,6 +1510,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return (stack != null && stack.isVisible()) ? stack : null; } + boolean hasSplitScreenPrimaryStack() { + return getSplitScreenPrimaryStack() != null; + } + /** * Like {@link #getSplitScreenPrimaryStack}, but also returns the stack if it's currently * not visible. @@ -1613,6 +1617,18 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo mService.mWindowsChanged = true; } + /** + * In split-screen mode we process the IME containers above the docked divider + * rather than directly above their target. + */ + private boolean skipTraverseChild(WindowContainer child) { + if (child == mImeWindowsContainers && mService.mInputMethodTarget != null + && !hasSplitScreenPrimaryStack()) { + return true; + } + return false; + } + @Override boolean forAllWindows(ToBooleanFunction<WindowState> callback, boolean traverseTopToBottom) { // Special handling so we can process IME windows with #forAllImeWindows above their IME @@ -1620,11 +1636,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo if (traverseTopToBottom) { for (int i = mChildren.size() - 1; i >= 0; --i) { final DisplayChildWindowContainer child = mChildren.get(i); - if (child == mImeWindowsContainers && mService.mInputMethodTarget != null) { - // In this case the Ime windows will be processed above their target so we skip - // here. + if (skipTraverseChild(child)) { continue; } + if (child.forAllWindows(callback, traverseTopToBottom)) { return true; } @@ -1633,11 +1648,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final int count = mChildren.size(); for (int i = 0; i < count; i++) { final DisplayChildWindowContainer child = mChildren.get(i); - if (child == mImeWindowsContainers && mService.mInputMethodTarget != null) { - // In this case the Ime windows will be processed above their target so we skip - // here. + if (skipTraverseChild(child)) { continue; } + if (child.forAllWindows(callback, traverseTopToBottom)) { return true; } diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index c8baced4cd5d..39a362906b9d 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -408,7 +408,7 @@ public class DockedStackDividerController { } void positionDockedStackedDivider(Rect frame) { - TaskStack stack = mDisplayContent.getSplitScreenPrimaryStack(); + TaskStack stack = mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility(); if (stack == null) { // Unfortunately we might end up with still having a divider, even though the underlying // stack was already removed. This is because we are on AM thread and the removal of the diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java index 85e4ac7fe4ce..9da69170654c 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimationController.java +++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java @@ -79,7 +79,7 @@ public class RecentsAnimationController implements DeathRecipient { public @interface ReorderMode {} private final WindowManagerService mService; - private final IRecentsAnimationRunner mRunner; + private IRecentsAnimationRunner mRunner; private final RecentsAnimationCallbacks mCallbacks; private final ArrayList<TaskAnimationAdapter> mPendingAnimations = new ArrayList<>(); private final int mDisplayId; @@ -426,7 +426,14 @@ public class RecentsAnimationController implements DeathRecipient { removeAnimation(taskAdapter); } + // Clear any pending failsafe runnables + mService.mH.removeCallbacks(mFailsafeRunnable); + + // Clear references to the runner unlinkToDeathOfRunner(); + mRunner = null; + mCanceled = true; + // Clear associated input consumers mService.mInputMonitor.updateInputWindowsLw(true /*force*/); mService.destroyInputConsumer(INPUT_CONSUMER_RECENTS_ANIMATION); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 0de3c921735e..c710c9789004 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -3997,32 +3997,33 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return false; } + private boolean applyImeWindowsIfNeeded(ToBooleanFunction<WindowState> callback, + boolean traverseTopToBottom) { + // If this window is the current IME target, so we need to process the IME windows + // directly above it. The exception is if we are in split screen + // in which case we process the IME at the DisplayContent level to + // ensure it is above the docked divider. + if (isInputMethodTarget() && !inSplitScreenWindowingMode()) { + if (getDisplayContent().forAllImeWindows(callback, traverseTopToBottom)) { + return true; + } + } + return false; + } + private boolean applyInOrderWithImeWindows(ToBooleanFunction<WindowState> callback, boolean traverseTopToBottom) { if (traverseTopToBottom) { - if (isInputMethodTarget()) { - // This window is the current IME target, so we need to process the IME windows - // directly above it. - if (getDisplayContent().forAllImeWindows(callback, traverseTopToBottom)) { - return true; - } - } - if (callback.apply(this)) { + if (applyImeWindowsIfNeeded(callback, traverseTopToBottom) + || callback.apply(this)) { return true; } } else { - if (callback.apply(this)) { + if (callback.apply(this) + || applyImeWindowsIfNeeded(callback, traverseTopToBottom)) { return true; } - if (isInputMethodTarget()) { - // This window is the current IME target, so we need to process the IME windows - // directly above it. - if (getDisplayContent().forAllImeWindows(callback, traverseTopToBottom)) { - return true; - } - } } - return false; } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index ab93a8a91fb9..729dba5377ed 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -5525,9 +5525,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { // If there is a profile owner, redirect to that; otherwise query the device owner. ComponentName aliasChooser = getProfileOwner(caller.getIdentifier()); if (aliasChooser == null && caller.isSystem()) { - ActiveAdmin deviceOwnerAdmin = getDeviceOwnerAdminLocked(); - if (deviceOwnerAdmin != null) { - aliasChooser = deviceOwnerAdmin.info.getComponent(); + synchronized (getLockObject()) { + final ActiveAdmin deviceOwnerAdmin = getDeviceOwnerAdminLocked(); + if (deviceOwnerAdmin != null) { + aliasChooser = deviceOwnerAdmin.info.getComponent(); + } } } if (aliasChooser == null) { @@ -5906,35 +5908,41 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { private void forceWipeDeviceNoLock(boolean wipeExtRequested, String reason, boolean wipeEuicc) { wtfIfInLock(); - - if (wipeExtRequested) { - StorageManager sm = (StorageManager) mContext.getSystemService( - Context.STORAGE_SERVICE); - sm.wipeAdoptableDisks(); - } + boolean success = false; try { + if (wipeExtRequested) { + StorageManager sm = (StorageManager) mContext.getSystemService( + Context.STORAGE_SERVICE); + sm.wipeAdoptableDisks(); + } mInjector.recoverySystemRebootWipeUserData( - /*shutdown=*/ false, reason, /*force=*/ true, /*wipeEuicc=*/ wipeEuicc); + /*shutdown=*/ false, reason, /*force=*/ true, /*wipeEuicc=*/ wipeEuicc); + success = true; } catch (IOException | SecurityException e) { Slog.w(LOG_TAG, "Failed requesting data wipe", e); + } finally { + if (!success) SecurityLog.writeEvent(SecurityLog.TAG_WIPE_FAILURE); } } private void forceWipeUser(int userId, String wipeReasonForUser) { + boolean success = false; try { IActivityManager am = mInjector.getIActivityManager(); if (am.getCurrentUser().id == userId) { am.switchUser(UserHandle.USER_SYSTEM); } - boolean userRemoved = mUserManagerInternal.removeUserEvenWhenDisallowed(userId); - if (!userRemoved) { + success = mUserManagerInternal.removeUserEvenWhenDisallowed(userId); + if (!success) { Slog.w(LOG_TAG, "Couldn't remove user " + userId); } else if (isManagedProfile(userId)) { sendWipeProfileNotification(wipeReasonForUser); } } catch (RemoteException re) { // Shouldn't happen + } finally { + if (!success) SecurityLog.writeEvent(SecurityLog.TAG_WIPE_FAILURE); } } diff --git a/services/net/java/android/net/apf/ApfFilter.java b/services/net/java/android/net/apf/ApfFilter.java index 2bf6e92f26a8..a7209a076461 100644 --- a/services/net/java/android/net/apf/ApfFilter.java +++ b/services/net/java/android/net/apf/ApfFilter.java @@ -429,9 +429,13 @@ public class ApfFilter { try { mHardwareAddress = mInterfaceParams.macAddr.toByteArray(); synchronized(this) { - // Clear APF memory. - byte[] zeroes = new byte[mApfCapabilities.maximumApfProgramSize]; - mIpClientCallback.installPacketFilter(zeroes); + // Clear the APF memory to reset all counters upon connecting to the first AP + // in an SSID. This is limited to APFv4 devices because this large write triggers + // a crash on some older devices (b/78905546). + if (mApfCapabilities.hasDataAccess()) { + byte[] zeroes = new byte[mApfCapabilities.maximumApfProgramSize]; + mIpClientCallback.installPacketFilter(zeroes); + } // Install basic filters installNewProgramLocked(); diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java index 1415ada5fc92..1ce41a641935 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java @@ -325,13 +325,12 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase { } /** - * Verifies the correct activity is returned when querying the top running activity with an - * empty focused stack. + * Verifies the correct activity is returned when querying the top running activity. */ @Test - public void testNonFocusedTopRunningActivity() throws Exception { + public void testTopRunningActivity() throws Exception { // Create stack to hold focus - final ActivityStack focusedStack = mService.mStackSupervisor.getDefaultDisplay() + final ActivityStack emptyStack = mService.mStackSupervisor.getDefaultDisplay() .createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); final KeyguardController keyguard = mSupervisor.getKeyguardController(); @@ -340,7 +339,7 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase { final ActivityRecord activity = new ActivityBuilder(mService).setCreateTask(true) .setStack(stack).build(); - mSupervisor.mFocusedStack = focusedStack; + mSupervisor.mFocusedStack = emptyStack; doAnswer((InvocationOnMock invocationOnMock) -> { final SparseIntArray displayIds = invocationOnMock.<SparseIntArray>getArgument(0); @@ -359,6 +358,12 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase { assertEquals(null, mService.mStackSupervisor.topRunningActivityLocked( true /* considerKeyguardState */)); + // Change focus to stack with activity. + mSupervisor.mFocusedStack = stack; + assertEquals(activity, mService.mStackSupervisor.topRunningActivityLocked()); + assertEquals(null, mService.mStackSupervisor.topRunningActivityLocked( + true /* considerKeyguardState */)); + // Add activity that should be shown on the keyguard. final ActivityRecord showWhenLockedActivity = new ActivityBuilder(mService) .setCreateTask(true) @@ -370,6 +375,13 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase { assertEquals(showWhenLockedActivity, mService.mStackSupervisor.topRunningActivityLocked()); assertEquals(showWhenLockedActivity, mService.mStackSupervisor.topRunningActivityLocked( true /* considerKeyguardState */)); + + // Change focus back to empty stack + mSupervisor.mFocusedStack = emptyStack; + // Ensure the show when locked activity is returned when not the focused stack + assertEquals(showWhenLockedActivity, mService.mStackSupervisor.topRunningActivityLocked()); + assertEquals(showWhenLockedActivity, mService.mStackSupervisor.topRunningActivityLocked( + true /* considerKeyguardState */)); } /** 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 4b8dcc1e56c1..01425ed51b55 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java @@ -565,6 +565,47 @@ public class ActivityStackTests extends ActivityTestsBase { false /* displaySleeping */, false /* expected*/); } + @Test + public void testStackOrderChangedOnRemoveStack() throws Exception { + StackOrderChangedListener listener = new StackOrderChangedListener(); + mDefaultDisplay.registerStackOrderChangedListener(listener); + try { + mDefaultDisplay.removeChild(mStack); + } finally { + mDefaultDisplay.unregisterStackOrderChangedListener(listener); + } + assertTrue(listener.changed); + } + + @Test + public void testStackOrderChangedOnAddPositionStack() throws Exception { + mDefaultDisplay.removeChild(mStack); + + StackOrderChangedListener listener = new StackOrderChangedListener(); + mDefaultDisplay.registerStackOrderChangedListener(listener); + try { + mDefaultDisplay.addChild(mStack, 0); + } finally { + mDefaultDisplay.unregisterStackOrderChangedListener(listener); + } + assertTrue(listener.changed); + } + + @Test + public void testStackOrderChangedOnPositionStack() throws Exception { + StackOrderChangedListener listener = new StackOrderChangedListener(); + try { + final TestActivityStack fullscreenStack1 = createStackForShouldBeVisibleTest( + mDefaultDisplay, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, + true /* onTop */); + mDefaultDisplay.registerStackOrderChangedListener(listener); + mDefaultDisplay.positionChildAtBottom(fullscreenStack1); + } finally { + mDefaultDisplay.unregisterStackOrderChangedListener(listener); + } + assertTrue(listener.changed); + } + private void verifyShouldSleepActivities(boolean focusedStack, boolean keyguardGoingAway, boolean displaySleeping, boolean expected) { mSupervisor.mFocusedStack = focusedStack ? mStack : null; @@ -578,4 +619,13 @@ public class ActivityStackTests extends ActivityTestsBase { assertEquals(expected, mStack.shouldSleepActivities()); } + + private class StackOrderChangedListener implements ActivityDisplay.OnStackOrderChangedListener { + boolean changed = false; + + @Override + public void onStackOrderChanged() { + changed = true; + } + } } diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java index a14b950a05ff..b4b34c507942 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java @@ -40,6 +40,7 @@ import android.os.UserManager; import android.support.test.filters.SmallTest; import android.testing.DexmakerShareClassLoaderRule; +import com.android.internal.app.SuspendedAppActivity; import com.android.internal.app.UnlaunchableAppActivity; import com.android.server.LocalServices; import com.android.server.pm.PackageManagerService; @@ -150,6 +151,28 @@ public class ActivityStartInterceptorTest { } @Test + public void testSuspendedPackage() { + mAInfo.applicationInfo.flags = FLAG_SUSPENDED; + final String suspendingPackage = "com.test.suspending.package"; + final String dialogMessage = "Test Message"; + when(mPackageManagerInternal.getSuspendingPackage(TEST_PACKAGE_NAME, TEST_USER_ID)) + .thenReturn(suspendingPackage); + when(mPackageManagerInternal.getSuspendedDialogMessage(TEST_PACKAGE_NAME, TEST_USER_ID)) + .thenReturn(dialogMessage); + // THEN calling intercept returns true + assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null)); + + // Check intent parameters + assertEquals(dialogMessage, + mInterceptor.mIntent.getStringExtra(SuspendedAppActivity.EXTRA_DIALOG_MESSAGE)); + assertEquals(suspendingPackage, + mInterceptor.mIntent.getStringExtra(SuspendedAppActivity.EXTRA_SUSPENDING_PACKAGE)); + assertEquals(TEST_PACKAGE_NAME, + mInterceptor.mIntent.getStringExtra(SuspendedAppActivity.EXTRA_SUSPENDED_PACKAGE)); + assertEquals(TEST_USER_ID, mInterceptor.mIntent.getIntExtra(Intent.EXTRA_USER_ID, -1000)); + } + + @Test public void testInterceptQuietProfile() { // GIVEN that the user the activity is starting as is currently in quiet mode when(mUserManager.isQuietModeEnabled(eq(UserHandle.of(TEST_USER_ID)))).thenReturn(true); diff --git a/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java b/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java new file mode 100644 index 000000000000..eefd973112f5 --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java @@ -0,0 +1,115 @@ +/* + * 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.am; + +import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; +import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; +import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK; +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; +import static com.android.server.wm.RecentsAnimationController.REORDER_KEEP_IN_PLACE; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.platform.test.annotations.Presubmit; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.MediumTest; +import android.support.test.runner.AndroidJUnit4; +import android.view.IRecentsAnimationRunner; +import com.android.server.AttributeCache; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * atest FrameworksServicesTests:RecentsAnimationTest + */ +@MediumTest +@Presubmit +@RunWith(AndroidJUnit4.class) +public class RecentsAnimationTest extends ActivityTestsBase { + private static final int TEST_CALLING_PID = 3; + + private Context mContext = InstrumentationRegistry.getContext(); + private ActivityManagerService mService; + private ComponentName mRecentsComponent; + + @Before + @Override + public void setUp() throws Exception { + super.setUp(); + + mRecentsComponent = new ComponentName(mContext.getPackageName(), "RecentsActivity"); + mService = setupActivityManagerService(new MyTestActivityManagerService(mContext)); + AttributeCache.init(mContext); + } + + @Test + public void testCancelAnimationOnStackOrderChange() throws Exception { + ActivityStack fullscreenStack = mService.mStackSupervisor.getDefaultDisplay().createStack( + WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); + ActivityStack recentsStack = mService.mStackSupervisor.getDefaultDisplay().createStack( + WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_RECENTS, true /* onTop */); + ActivityRecord recentsActivity = new ActivityBuilder(mService) + .setComponent(mRecentsComponent) + .setCreateTask(true) + .setStack(recentsStack) + .build(); + ActivityStack fullscreenStack2 = mService.mStackSupervisor.getDefaultDisplay().createStack( + WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); + ActivityRecord fsActivity = new ActivityBuilder(mService) + .setComponent(new ComponentName(mContext.getPackageName(), "App1")) + .setCreateTask(true) + .setStack(fullscreenStack2) + .build(); + doReturn(true).when(mService.mWindowManager).canStartRecentsAnimation(); + + // Start the recents animation + Intent recentsIntent = new Intent(); + recentsIntent.setComponent(mRecentsComponent); + mService.startRecentsActivity(recentsIntent, null, mock(IRecentsAnimationRunner.class)); + + fullscreenStack.moveToFront("Activity start"); + + // Ensure that the recents animation was canceled + verify(mService.mWindowManager, times(1)).cancelRecentsAnimationSynchronously( + eq(REORDER_KEEP_IN_PLACE), any()); + } + + private class MyTestActivityManagerService extends TestActivityManagerService { + MyTestActivityManagerService(Context context) { + super(context); + } + + @Override + protected RecentTasks createRecentTasks() { + RecentTasks recents = mock(RecentTasks.class); + doReturn(mRecentsComponent).when(recents).getRecentsComponent(); + System.out.println(mRecentsComponent); + return recents; + } + } +} diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java index a9d6c29e57ce..90947f44ef2b 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java @@ -503,7 +503,8 @@ public class KeySyncTaskTest { @Test public void run_sendsEncryptedKeysIfAvailableToSync_withRawPublicKey() throws Exception { mRecoverableKeyStoreDb.setRecoveryServiceCertPath( - TEST_USER_ID, TEST_RECOVERY_AGENT_UID, TEST_ROOT_CERT_ALIAS, TestData.CERT_PATH_1); + TEST_USER_ID, TEST_RECOVERY_AGENT_UID, TEST_ROOT_CERT_ALIAS, + TestData.getInsecureCertPathForEndpoint1()); mRecoverableKeyStoreDb.setServerParams( TEST_USER_ID, TEST_RECOVERY_AGENT_UID, TEST_VAULT_HANDLE); @@ -528,7 +529,8 @@ public class KeySyncTaskTest { lockScreenHash, keyChainSnapshot.getEncryptedRecoveryKeyBlob(), /*vaultParams=*/ KeySyncUtils.packVaultParams( - TestData.CERT_1_PUBLIC_KEY, + TestData.getInsecureCertPathForEndpoint1().getCertificates().get(0) + .getPublicKey(), counterId, /*maxAttempts=*/ 10, TEST_VAULT_HANDLE)); @@ -537,7 +539,7 @@ public class KeySyncTaskTest { assertThat(keyChainSnapshot.getCounterId()).isEqualTo(counterId); assertThat(keyChainSnapshot.getMaxAttempts()).isEqualTo(10); assertThat(keyChainSnapshot.getTrustedHardwareCertPath()) - .isEqualTo(TestData.CERT_PATH_1); + .isEqualTo(TestData.getInsecureCertPathForEndpoint1()); assertThat(keyChainSnapshot.getServerParams()).isEqualTo(TEST_VAULT_HANDLE); WrappedApplicationKey keyData = applicationKeys.get(0); assertEquals(TEST_APP_KEY_ALIAS, keyData.getAlias()); @@ -805,7 +807,7 @@ public class KeySyncTaskTest { private byte[] decryptThmEncryptedKey( byte[] lockScreenHash, byte[] encryptedKey, byte[] vaultParams) throws Exception { byte[] locallyEncryptedKey = SecureBox.decrypt( - TestData.CERT_1_PRIVATE_KEY, + TestData.getInsecurePrivateKeyForEndpoint1(), /*sharedSecret=*/ KeySyncUtils.calculateThmKfHash(lockScreenHash), /*header=*/ KeySyncUtils.concat(THM_ENCRYPTED_RECOVERY_KEY_HEADER, vaultParams), encryptedKey diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java index e82478fb68ba..8e86a87915e8 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java @@ -101,35 +101,22 @@ public class RecoverableKeyStoreManagerTest { private static final String INSECURE_CERTIFICATE_ALIAS = TrustedRootCertificates.TEST_ONLY_INSECURE_CERTIFICATE_ALIAS; private static final String TEST_SESSION_ID = "karlin"; - private static final byte[] TEST_PUBLIC_KEY = new byte[] { - (byte) 0x30, (byte) 0x59, (byte) 0x30, (byte) 0x13, (byte) 0x06, (byte) 0x07, (byte) 0x2a, - (byte) 0x86, (byte) 0x48, (byte) 0xce, (byte) 0x3d, (byte) 0x02, (byte) 0x01, (byte) 0x06, - (byte) 0x08, (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0xce, (byte) 0x3d, (byte) 0x03, - (byte) 0x01, (byte) 0x07, (byte) 0x03, (byte) 0x42, (byte) 0x00, (byte) 0x04, (byte) 0xb8, - (byte) 0x00, (byte) 0x11, (byte) 0x18, (byte) 0x98, (byte) 0x1d, (byte) 0xf0, (byte) 0x6e, - (byte) 0xb4, (byte) 0x94, (byte) 0xfe, (byte) 0x86, (byte) 0xda, (byte) 0x1c, (byte) 0x07, - (byte) 0x8d, (byte) 0x01, (byte) 0xb4, (byte) 0x3a, (byte) 0xf6, (byte) 0x8d, (byte) 0xdc, - (byte) 0x61, (byte) 0xd0, (byte) 0x46, (byte) 0x49, (byte) 0x95, (byte) 0x0f, (byte) 0x10, - (byte) 0x86, (byte) 0x93, (byte) 0x24, (byte) 0x66, (byte) 0xe0, (byte) 0x3f, (byte) 0xd2, - (byte) 0xdf, (byte) 0xf3, (byte) 0x79, (byte) 0x20, (byte) 0x1d, (byte) 0x91, (byte) 0x55, - (byte) 0xb0, (byte) 0xe5, (byte) 0xbd, (byte) 0x7a, (byte) 0x8b, (byte) 0x32, (byte) 0x7d, - (byte) 0x25, (byte) 0x53, (byte) 0xa2, (byte) 0xfc, (byte) 0xa5, (byte) 0x65, (byte) 0xe1, - (byte) 0xbd, (byte) 0x21, (byte) 0x44, (byte) 0x7e, (byte) 0x78, (byte) 0x52, (byte) 0xfa}; + private static final byte[] TEST_PUBLIC_KEY = TestData.CERT_1_PUBLIC_KEY.getEncoded(); private static final byte[] TEST_SALT = getUtf8Bytes("salt"); private static final byte[] TEST_SECRET = getUtf8Bytes("password1234"); private static final byte[] TEST_VAULT_CHALLENGE = getUtf8Bytes("vault_challenge"); private static final byte[] TEST_VAULT_PARAMS = new byte[] { // backend_key - (byte) 0x04, (byte) 0xb8, (byte) 0x00, (byte) 0x11, (byte) 0x18, (byte) 0x98, (byte) 0x1d, - (byte) 0xf0, (byte) 0x6e, (byte) 0xb4, (byte) 0x94, (byte) 0xfe, (byte) 0x86, (byte) 0xda, - (byte) 0x1c, (byte) 0x07, (byte) 0x8d, (byte) 0x01, (byte) 0xb4, (byte) 0x3a, (byte) 0xf6, - (byte) 0x8d, (byte) 0xdc, (byte) 0x61, (byte) 0xd0, (byte) 0x46, (byte) 0x49, (byte) 0x95, - (byte) 0x0f, (byte) 0x10, (byte) 0x86, (byte) 0x93, (byte) 0x24, (byte) 0x66, (byte) 0xe0, - (byte) 0x3f, (byte) 0xd2, (byte) 0xdf, (byte) 0xf3, (byte) 0x79, (byte) 0x20, (byte) 0x1d, - (byte) 0x91, (byte) 0x55, (byte) 0xb0, (byte) 0xe5, (byte) 0xbd, (byte) 0x7a, (byte) 0x8b, - (byte) 0x32, (byte) 0x7d, (byte) 0x25, (byte) 0x53, (byte) 0xa2, (byte) 0xfc, (byte) 0xa5, - (byte) 0x65, (byte) 0xe1, (byte) 0xbd, (byte) 0x21, (byte) 0x44, (byte) 0x7e, (byte) 0x78, - (byte) 0x52, (byte) 0xfa, + (byte) 0x04, (byte) 0x8e, (byte) 0x0c, (byte) 0x11, (byte) 0x4a, (byte) 0x79, (byte) 0x20, + (byte) 0x7c, (byte) 0x00, (byte) 0x4c, (byte) 0xd7, (byte) 0xe9, (byte) 0x06, (byte) 0xe2, + (byte) 0x58, (byte) 0x21, (byte) 0x45, (byte) 0xfa, (byte) 0x24, (byte) 0xcb, (byte) 0x07, + (byte) 0x66, (byte) 0xde, (byte) 0xfd, (byte) 0xf1, (byte) 0x83, (byte) 0xb4, (byte) 0x26, + (byte) 0x55, (byte) 0x98, (byte) 0xcb, (byte) 0xa9, (byte) 0xd5, (byte) 0x55, (byte) 0xad, + (byte) 0x65, (byte) 0xc5, (byte) 0xff, (byte) 0x5c, (byte) 0xfb, (byte) 0x1c, (byte) 0x4e, + (byte) 0x34, (byte) 0x98, (byte) 0x7e, (byte) 0x4f, (byte) 0x96, (byte) 0xa2, (byte) 0xa3, + (byte) 0x7e, (byte) 0xf4, (byte) 0x46, (byte) 0x52, (byte) 0x04, (byte) 0xba, (byte) 0x2a, + (byte) 0xb9, (byte) 0x47, (byte) 0xbb, (byte) 0xc2, (byte) 0x1e, (byte) 0xdd, (byte) 0x15, + (byte) 0x1a, (byte) 0xc0, // counter_id (byte) 0x31, (byte) 0x32, (byte) 0x33, (byte) 0x34, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/TestData.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/TestData.java index 64eb49bbb131..5d4be1bee105 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/TestData.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/TestData.java @@ -29,6 +29,7 @@ import java.security.PublicKey; import java.security.cert.CertificateFactory; import java.security.cert.CertPath; import java.security.spec.ECPrivateKeySpec; +import java.security.spec.PKCS8EncodedKeySpec; import java.util.Base64; import javax.crypto.KeyGenerator; @@ -37,56 +38,56 @@ import javax.crypto.SecretKey; public final class TestData { private static final String KEY_ALGORITHM = "AES"; - private static final long DEFAULT_SERIAL = 1000; + private static final long DEFAULT_SERIAL = 10001; private static final String CERT_PATH_ENCODING = "PkiPath"; private static final String CERT_PATH_1_BASE64 = "" - + "MIIIPzCCBS8wggMXoAMCAQICAhAAMA0GCSqGSIb3DQEBCwUAMCAxHjAcBgNVBAMM" - + "FUdvb2dsZSBDcnlwdEF1dGhWYXVsdDAeFw0xODAyMDMwMDQyMDNaFw0yODAyMDEw" - + "MDQyMDNaMC0xKzApBgNVBAMMIkdvb2dsZSBDcnlwdEF1dGhWYXVsdCBJbnRlcm1l" - + "ZGlhdGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDckHib0X6rQyDq" - + "k4519b5du0OrCPk30XXKwz+Hz5y4cGZaWKGcHOHWS2X9YApRzO00/EbvFkWVUTVG" - + "27wJ54V+C3HHSOAUWHhEgfFWvvHwfn9HTDx1BEk79aQqJ7DuJ06Sn/WOiMtKVAT5" - + "6Mi8mekBxpMOrdZqwlcLrUVsZxEHsw5/ceZu4cSWzc7SzlnbNK1cCgyRDGqWf6Gp" - + "3hGE86kUOtM1i95RgUIpw+w/z0wxpF6kIyQTjK+KjiYH/RBOJIEcm6sSWZlMotKL" - + "Sn2lhf+XL8yUxExIHTosfeb077QWW4w2BB2NZM4wPAO3w4aw33FNigDQc2SQYmnU" - + "EYmIcD8kx77+JWCgCxBJc2zTHXtBxWuXAQ+iegt8RO+QD97pd6XKM9xPsAOkcWLp" - + "79o+AJol4P5fwvgYM69mM4lwH12v86RI4aptPQOag0KDIHXyKbjaQyAgv30l4KkD" - + "pf2uWODhOOTwNbVPYUm3sYUlhBcbyhTk8YqN9sPU4QAao5sKTAYZgB/mlheQypTU" - + "wyvqz6bRzGehVB3ltP9gCyKdI04VXEUuUBWk3STyV2REQen5/LKAns6v11Cz22Zr" - + "EdCvNLgetnyV7CJsOa/wD/GiUWL2Ta7pzshi9ahJqrrcNPRbAzOLcNKZkFexhzPp" - + "onuo/pNrcaRda1frepXxVkmbsgOULwIDAQABo2YwZDAdBgNVHQ4EFgQUd6md2hCP" - + "lmf3VkEX5FfDxKBLbaAwHwYDVR0jBBgwFoAUm2X66jmB+eBCaZHSjGYzHM/x6fgw" - + "EgYDVR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL" - + "BQADggIBAFgShhuW+WVTowN080PLf0TWPlHACHHUPghf7rFGxgUjJypCloE84Beg" - + "3ROpP5l19CDqZ9OyPzA1z6VAzeGXyFhZvby7G2tZDBRP/v0u8pnSAdC5F8l8Vh2Y" - + "GdgE3sZD25vpdBi7P0Ef6LYQetOJXn86PqgmgW1F6lzxDjKCsi9kpeU0AWwDdOVg" - + "748wku50o8UEzsVwxzFd9toGlge/nn3FH5J7EuGzAlFwToHqpwTVEegaAd0l9mr5" - + "+rS7Urd3X80BHDqCBcXE7Uqbtzw5Y+lmowMCnW0kFN02dC9dLt2c9IxC+9sPIA5e" - + "TkrZBkrkTVRGLj2r29j7nC9m5VaKcBqcLZDWy8pRna8yaZprgNdE8d/WTY9nVsic" - + "09N8zNF5Q0bhhWa3QonlB9XW5ZqDguiclvn+5TtREzSAtSOyxM+gfG3l0wjOywIk" - + "1aFa52RaqAWPL67KOM6G3vKNpMnW5hrmHrijuKxiarGIoZfkZMR5ijK0uFgv3/p6" - + "NHL/YQBaHJJhkKet5ThiPxwW9+1k/ZcXVeY26Xh+22Gp/8to7ZW8guPPiN1hfpD+" - + "7f1IdSmHDrsZQQ7bfzV0bppsyNNB7e2Ecyw+GQny27nytBLJDGdRBurbwQvzppQO" - + "6Qmlk0rfCszh7bGCoCQNxXmuDsQ5BC+pQUqJplTqds1smyi29xs3MIIDCDCB8aAD" - + "AgECAgYBYVkuU0cwDQYJKoZIhvcNAQELBQAwLTErMCkGA1UEAwwiR29vZ2xlIENy" - + "eXB0QXV0aFZhdWx0IEludGVybWVkaWF0ZTAeFw0xODAyMDIwMTAxMDNaFw0yMDAy" - + "MDMwMTAxMDNaMCkxJzAlBgNVBAMTHkdvb2dsZSBDcnlwdEF1dGhWYXVsdCBJbnN0" - + "YW5jZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLgAERiYHfButJT+htocB40B" - + "tDr2jdxh0EZJlQ8QhpMkZuA/0t/zeSAdkVWw5b16izJ9JVOi/KVl4b0hRH54Uvow" - + "DQYJKoZIhvcNAQELBQADggIBAJ3PM4GNTNYzMr8E/IGsWZkLx9ARAALqBXz7As59" - + "F8y5UcLMqkXD/ewOfBZgF5VzjlAePyE/wSw0wc3xzvrDVVDiZaMBW1DVtSlbn25q" - + "00m00mmcUeyyMc7vuRkPoDshIMQTc8+U3yyYsVScSV+B4TvSx6wPZ9FpwnSPjVPD" - + "2GkqeMTWszuxNVEWq0wmm0K5lMaX0hfiak+4/IZxOPPGIg2py1KLA/H2gdyeqyJR" - + "cAsyEkfwLlushR5T9abSiPsIRcYoX8Ck8Lt+gQ7RCMefnm8CoOBKIfcjuV4PGOoe" - + "Xrq57VR5SsOeT07bL+D7B+mohYFI1v2G3WClAE8XgM3q8NoFFvaYmoi0+UcTduil" - + "47qvozjdNmjRAgu5j6vMKXEdG5Rqsja8hy0LG1hwfnR0gNiwcZ5Le3GyFnwH1Igq" - + "vsGOUM0ohnDUAU0zJY7nG0QYrDYe5/QPRNhWDpYkwHDiqcG28wIQCOTPAZHU2EoS" - + "KjSqEG2l0S5JPcor2BEde9ikSkcmK8foxlOHIdFn+n7RNF3bSEfKn1IOuXoqPidm" - + "eBQLevqG8KTy/C9CHqlaCNlpbIA9h+WVfsjm2s6JXBu0YbcfoIbJAmSuZVeqB/+Z" - + "Vvpfiad/jQWzY49fRnsSmV7VveTFPGtJxC89EadbMAinMZo+72u59319RqN5wsP2" - + "Zus8"; - private static String CERT_PATH_2_BASE64 = "" + + "MIIIXTCCBRowggMCoAMCAQICEB35ZwzVpI9ssXg9SAehnU0wDQYJKoZIhvcNAQEL" + + "BQAwMTEvMC0GA1UEAxMmR29vZ2xlIENsb3VkIEtleSBWYXVsdCBTZXJ2aWNlIFJv" + + "b3QgQ0EwHhcNMTgwNTA3MTg1ODEwWhcNMjgwNTA4MTg1ODEwWjA5MTcwNQYDVQQD" + + "Ey5Hb29nbGUgQ2xvdWQgS2V5IFZhdWx0IFNlcnZpY2UgSW50ZXJtZWRpYXRlIENB" + + "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA73TrvH3j6zEimpcc32tx" + + "2iupWwfyzdE5l4Ejc5EBYzx0aZH6b/KDuutwustk0IoyjlGySMBz/21YgWejIm+n" + + "duAlpk7WY5kYHp0XWtzdmxZknmWTqugPeNZeiKEjoDmpyIbY6N+f13hQ2RVh+WDT" + + "EowQ/i04WBL75chshlIG+3A42g5Qr7DZEKdT9oJQqkntzj0cGyJ5X8BwjeTiJrvY" + + "k2Kn/0555/Kpp65G3Rf29VPPU3i67kthAT3SavLBpH03S4WZ+QlfrAiGQziydtz9" + + "t7mSk1xefjax5ZWAuJAfCbKfI3VWAcaUr4P57BzmDcSi0jgs1aM3t2BrPfAMRxWv" + + "35yDZnrC+HipzkjyDGBfHmFgoglyhc9e/Kj3mSusO0Rq1wguVXKs2hKXRoaGJuHt" + + "e3YIwTC1pLznqvolhD1nPoXf8rMzgHRzlc9H8iXsgB1p7975nh5WCPrMDX2eAmYd" + + "a0xTMccTeBzIM2ohxQsxlh5rsjXVNU3ihbWkHquzIiwFcAtldP3dMksj0dn/DnYD" + + "yokjEgU/z2I216E93x9hmKkEk6Pp7o8t/z6lwMT9FJIuzp7NREnWCSi+e5s2E7FD" + + "j6S7xY2zEIUHrmwuuJc0jzJnwdZ+0myinaTmBDvBXR5cU1cmEAZoheCAoRv9Z/6o" + + "ASczLF0C4uuVfA5GXcAm14cCAwEAAaMmMCQwDgYDVR0PAQH/BAQDAgGGMBIGA1Ud" + + "EwEB/wQIMAYBAf8CAQEwDQYJKoZIhvcNAQELBQADggIBAEPht79yQm8woQbPB1Bs" + + "eotkzJtTWTO9fnIWwNiRfQ3vJFXf69ghE77wUS13Ez3FlgNPj0Qxmg5ouE0d2yYV" + + "4AUrXnEGZELcyN2XHRXyNK0zXgnr3x6eZyY7QfgGKJgkyja5TS6ZPWGyaLKhClS0" + + "AYZSzWJtz0+AkGCdTbmyy7ShdXJ+GfnmssbndZA62VhcjeQmHsDq7V3PKAsp4/B9" + + "PzcnTrgkUFNnP1F1pr7JpUUX3xyRFy6gjIrUx1fcOFRxFYPWGLLMZ6P41rafm+M/" + + "CbBNr5CY7NrZjr34jLqWycfYes49o9OK44X/wPrxj0Sjg+VrW21+AJ9vrM7DS5hE" + + "QX1lDbDtQGkk3N1vgCTo6xt9LXsEu4xUT5bk7YAfpJqM0ltDFPwYAGCbjSkVT/M5" + + "JVZkKiUW668Us67x8yZc/5bxbvTA+5xrYhak/VYIBY6qub4J+bKwadw6uBgxnq4P" + + "hwgwjfaoJy9YAXCswjCtaE9GwkVmRnJE9vFjJ33IGf37hFTYEHBFy4FomVmQwRFZ" + + "TIe7tkKDq9i18F7lzBPJPO6wEG8bxi4csatrjcVHR9erpY5u6ebtkKG8qsan9qzh" + + "iWAgSytiT++HejZeoQ+RRgQWjupjdDo5/0oSdQqvaN8Ah6C2J+ecCZ12Lu0FwF+t" + + "t9Ie3pF6W8TzxzuMdFWq+afvMIIDOzCCASOgAwIBAgIRAOTj/iNQb6/Qit7zAW9n" + + "cL0wDQYJKoZIhvcNAQELBQAwOTE3MDUGA1UEAxMuR29vZ2xlIENsb3VkIEtleSBW" + + "YXVsdCBTZXJ2aWNlIEludGVybWVkaWF0ZSBDQTAeFw0xODA1MDcyMjE4MTFaFw0y" + + "MzA1MDgyMjE4MTFaMDIxMDAuBgNVBAMTJ0dvb2dsZSBDbG91ZCBLZXkgVmF1bHQg" + + "U2VydmljZSBFbmRwb2ludDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABI4MEUp5" + + "IHwATNfpBuJYIUX6JMsHZt798YO0JlWYy6nVVa1lxf9c+xxONJh+T5aio370RlIE" + + "uiq5R7vCHt0VGsCjEDAOMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB" + + "AGf6QU58lU+gGzy8hnp0suR/ixC++CExtf39pDHkdfU/e3ui4ROR+pjQ5F7okDFW" + + "eKSCNcJZ7tyXMJ9g7/I0qVY8Bj/gRnlVokdl/wD5PiL9GIzqWfnHNe3T+xrAAAgO" + + "D0bEmjgwNYmekfUIYQczd04d7ZMGnmAkpVH/0O2mf9q5x9fMlbKuAygUqQ/gmnlg" + + "xKfl9DSRWi4oMBOqlKlCRP1XAh3anu92+M/EhsFbyc07CWZY0SByX5M/cHVMLhUX" + + "jZHvcYLyOmJWJmXznidgyNeIR6t9yDB55iCt7WSn3qMY+9vA9ELzt8jYpBNaKc0G" + + "bWQkRzYWegkf4kMis98eQ3SnAKbRz6669nmuAdxKs9/LK6BlFOFw1xvsTRQ96dBa" + + "oiX2XGhou+Im0Td/AMs0Aigz2N+Ujq/yW//35GZQfdGGIYtFbkcltStygjIJyAM1" + + "pBhyBBkJhOhRpO4fXh98aq8H5J7R9i5A9WpnDstAxPxcNCDWn0O/WxhPvVZkFTpi" + + "NXh9dnlJ/kZe+j+z5ZMaxW435drLPx2AQKjXA9GgGrFPltTUyGycmEGtuxLvSnm/" + + "zPlmk5FUk7x2wEr0+bZ3cx0JHHgAtgXpe0jkDi8Bw8O3X7mUOjxVhYU6auiYJezW" + + "9LGmweaKwYvS04UCWOReolUVexob9LI/VX1JrrwD3s7k"; + private static final String CERT_PATH_2_BASE64 = "" + "MIIFMzCCBS8wggMXoAMCAQICAhAAMA0GCSqGSIb3DQEBCwUAMCAxHjAcBgNVBAMM" + "FUdvb2dsZSBDcnlwdEF1dGhWYXVsdDAeFw0xODAyMDMwMDQyMDNaFw0yODAyMDEw" + "MDQyMDNaMC0xKzApBgNVBAMMIkdvb2dsZSBDcnlwdEF1dGhWYXVsdCBJbnRlcm1l" @@ -117,194 +118,44 @@ public final class TestData { + "6Qmlk0rfCszh7bGCoCQNxXmuDsQ5BC+pQUqJplTqds1smyi29xs3"; private static final String THM_CERT_XML_BEFORE_SERIAL = "" - + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" - + "<certificates>\n" - + " <metadata>\n" - + " <serial>\n" - + " "; - private static final String THM_CERT_XML_AFTER_SERIAL = "\n" - + " </serial>\n" - + " <creation-time>\n" - + " 1515697631\n" - + " </creation-time>\n" - + " <refresh-interval>\n" - + " 2592000\n" - + " </refresh-interval>\n" + + "<certificate>\n" + + " <metadata>\n" + + " <serial>"; + private static final String THM_CERT_XML_AFTER_SERIAL = "" + + "</serial>\n" + + " <creation-time>1525817891</creation-time>\n" + + " <refresh-interval>2592000</refresh-interval>\n" + " <previous>\n" - + " <serial>\n" - + " 0\n" - + " </serial>\n" - + " <hash>\n" - + " 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=\n" - + " </hash>\n" + + " <serial>10000</serial>\n" + + " <hash>ahyI+59KW2tVxi0inRdUSo1Y8kmx5xK1isDvYfzxWbo=</hash>\n" + " </previous>\n" + " </metadata>\n" + " <intermediates>\n" - + " <cert>\n" - + " MIIFLzCCAxegAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwIDEeMBwGA1UEAwwVR29v\n" - + " Z2xlIENyeXB0QXV0aFZhdWx0MB4XDTE4MDIwMzAwNDIwM1oXDTI4MDIwMTAwNDIw\n" - + " M1owLTErMCkGA1UEAwwiR29vZ2xlIENyeXB0QXV0aFZhdWx0IEludGVybWVkaWF0\n" - + " ZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANyQeJvRfqtDIOqTjnX1\n" - + " vl27Q6sI+TfRdcrDP4fPnLhwZlpYoZwc4dZLZf1gClHM7TT8Ru8WRZVRNUbbvAnn\n" - + " hX4LccdI4BRYeESB8Va+8fB+f0dMPHUESTv1pConsO4nTpKf9Y6Iy0pUBPnoyLyZ\n" - + " 6QHGkw6t1mrCVwutRWxnEQezDn9x5m7hxJbNztLOWds0rVwKDJEMapZ/oaneEYTz\n" - + " qRQ60zWL3lGBQinD7D/PTDGkXqQjJBOMr4qOJgf9EE4kgRybqxJZmUyi0otKfaWF\n" - + " /5cvzJTETEgdOix95vTvtBZbjDYEHY1kzjA8A7fDhrDfcU2KANBzZJBiadQRiYhw\n" - + " PyTHvv4lYKALEElzbNMde0HFa5cBD6J6C3xE75AP3ul3pcoz3E+wA6RxYunv2j4A\n" - + " miXg/l/C+Bgzr2YziXAfXa/zpEjhqm09A5qDQoMgdfIpuNpDICC/fSXgqQOl/a5Y\n" - + " 4OE45PA1tU9hSbexhSWEFxvKFOTxio32w9ThABqjmwpMBhmAH+aWF5DKlNTDK+rP\n" - + " ptHMZ6FUHeW0/2ALIp0jThVcRS5QFaTdJPJXZERB6fn8soCezq/XULPbZmsR0K80\n" - + " uB62fJXsImw5r/AP8aJRYvZNrunOyGL1qEmqutw09FsDM4tw0pmQV7GHM+mie6j+\n" - + " k2txpF1rV+t6lfFWSZuyA5QvAgMBAAGjZjBkMB0GA1UdDgQWBBR3qZ3aEI+WZ/dW\n" - + " QRfkV8PEoEttoDAfBgNVHSMEGDAWgBSbZfrqOYH54EJpkdKMZjMcz/Hp+DASBgNV\n" - + " HRMBAf8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n" - + " AgEAWBKGG5b5ZVOjA3TzQ8t/RNY+UcAIcdQ+CF/usUbGBSMnKkKWgTzgF6DdE6k/\n" - + " mXX0IOpn07I/MDXPpUDN4ZfIWFm9vLsba1kMFE/+/S7ymdIB0LkXyXxWHZgZ2ATe\n" - + " xkPbm+l0GLs/QR/othB604lefzo+qCaBbUXqXPEOMoKyL2Sl5TQBbAN05WDvjzCS\n" - + " 7nSjxQTOxXDHMV322gaWB7+efcUfknsS4bMCUXBOgeqnBNUR6BoB3SX2avn6tLtS\n" - + " t3dfzQEcOoIFxcTtSpu3PDlj6WajAwKdbSQU3TZ0L10u3Zz0jEL72w8gDl5OStkG\n" - + " SuRNVEYuPavb2PucL2blVopwGpwtkNbLylGdrzJpmmuA10Tx39ZNj2dWyJzT03zM\n" - + " 0XlDRuGFZrdCieUH1dblmoOC6JyW+f7lO1ETNIC1I7LEz6B8beXTCM7LAiTVoVrn\n" - + " ZFqoBY8vrso4zobe8o2kydbmGuYeuKO4rGJqsYihl+RkxHmKMrS4WC/f+no0cv9h\n" - + " AFockmGQp63lOGI/HBb37WT9lxdV5jbpeH7bYan/y2jtlbyC48+I3WF+kP7t/Uh1\n" - + " KYcOuxlBDtt/NXRummzI00Ht7YRzLD4ZCfLbufK0EskMZ1EG6tvBC/OmlA7pCaWT\n" - + " St8KzOHtsYKgJA3Fea4OxDkEL6lBSommVOp2zWybKLb3Gzc=\n" - + " </cert>\n" + + " <cert>MIIFGjCCAwKgAwIBAgIQHflnDNWkj2yxeD1IB6GdTTANBgkqhkiG9w0BAQsFADAxMS8wLQYDVQQDEyZHb29nbGUgQ2xvdWQgS2V5IFZhdWx0IFNlcnZpY2UgUm9vdCBDQTAeFw0xODA1MDcxODU4MTBaFw0yODA1MDgxODU4MTBaMDkxNzA1BgNVBAMTLkdvb2dsZSBDbG91ZCBLZXkgVmF1bHQgU2VydmljZSBJbnRlcm1lZGlhdGUgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDvdOu8fePrMSKalxzfa3HaK6lbB/LN0TmXgSNzkQFjPHRpkfpv8oO663C6y2TQijKOUbJIwHP/bViBZ6Mib6d24CWmTtZjmRgenRda3N2bFmSeZZOq6A941l6IoSOgOanIhtjo35/XeFDZFWH5YNMSjBD+LThYEvvlyGyGUgb7cDjaDlCvsNkQp1P2glCqSe3OPRwbInlfwHCN5OImu9iTYqf/Tnnn8qmnrkbdF/b1U89TeLruS2EBPdJq8sGkfTdLhZn5CV+sCIZDOLJ23P23uZKTXF5+NrHllYC4kB8Jsp8jdVYBxpSvg/nsHOYNxKLSOCzVoze3YGs98AxHFa/fnINmesL4eKnOSPIMYF8eYWCiCXKFz178qPeZK6w7RGrXCC5VcqzaEpdGhoYm4e17dgjBMLWkvOeq+iWEPWc+hd/yszOAdHOVz0fyJeyAHWnv3vmeHlYI+swNfZ4CZh1rTFMxxxN4HMgzaiHFCzGWHmuyNdU1TeKFtaQeq7MiLAVwC2V0/d0ySyPR2f8OdgPKiSMSBT/PYjbXoT3fH2GYqQSTo+nujy3/PqXAxP0Uki7Ons1ESdYJKL57mzYTsUOPpLvFjbMQhQeubC64lzSPMmfB1n7SbKKdpOYEO8FdHlxTVyYQBmiF4IChG/1n/qgBJzMsXQLi65V8DkZdwCbXhwIDAQABoyYwJDAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBATANBgkqhkiG9w0BAQsFAAOCAgEAQ+G3v3JCbzChBs8HUGx6i2TMm1NZM71+chbA2JF9De8kVd/r2CETvvBRLXcTPcWWA0+PRDGaDmi4TR3bJhXgBStecQZkQtzI3ZcdFfI0rTNeCevfHp5nJjtB+AYomCTKNrlNLpk9YbJosqEKVLQBhlLNYm3PT4CQYJ1NubLLtKF1cn4Z+eayxud1kDrZWFyN5CYewOrtXc8oCynj8H0/NydOuCRQU2c/UXWmvsmlRRffHJEXLqCMitTHV9w4VHEVg9YYssxno/jWtp+b4z8JsE2vkJjs2tmOvfiMupbJx9h6zj2j04rjhf/A+vGPRKOD5WtbbX4An2+szsNLmERBfWUNsO1AaSTc3W+AJOjrG30tewS7jFRPluTtgB+kmozSW0MU/BgAYJuNKRVP8zklVmQqJRbrrxSzrvHzJlz/lvFu9MD7nGtiFqT9VggFjqq5vgn5srBp3Dq4GDGerg+HCDCN9qgnL1gBcKzCMK1oT0bCRWZGckT28WMnfcgZ/fuEVNgQcEXLgWiZWZDBEVlMh7u2QoOr2LXwXuXME8k87rAQbxvGLhyxq2uNxUdH16uljm7p5u2Qobyqxqf2rOGJYCBLK2JP74d6Nl6hD5FGBBaO6mN0Ojn/ShJ1Cq9o3wCHoLYn55wJnXYu7QXAX6230h7ekXpbxPPHO4x0Var5p+8=</cert>\n" + " </intermediates>\n" + " <endpoints>\n" - + " <cert>\n" - + " MIIDCDCB8aADAgECAgYBYVkuU0cwDQYJKoZIhvcNAQELBQAwLTErMCkGA1UEAwwi\n" - + " R29vZ2xlIENyeXB0QXV0aFZhdWx0IEludGVybWVkaWF0ZTAeFw0xODAyMDIwMTAx\n" - + " MDNaFw0yMDAyMDMwMTAxMDNaMCkxJzAlBgNVBAMTHkdvb2dsZSBDcnlwdEF1dGhW\n" - + " YXVsdCBJbnN0YW5jZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLgAERiYHfBu\n" - + " tJT+htocB40BtDr2jdxh0EZJlQ8QhpMkZuA/0t/zeSAdkVWw5b16izJ9JVOi/KVl\n" - + " 4b0hRH54UvowDQYJKoZIhvcNAQELBQADggIBAJ3PM4GNTNYzMr8E/IGsWZkLx9AR\n" - + " AALqBXz7As59F8y5UcLMqkXD/ewOfBZgF5VzjlAePyE/wSw0wc3xzvrDVVDiZaMB\n" - + " W1DVtSlbn25q00m00mmcUeyyMc7vuRkPoDshIMQTc8+U3yyYsVScSV+B4TvSx6wP\n" - + " Z9FpwnSPjVPD2GkqeMTWszuxNVEWq0wmm0K5lMaX0hfiak+4/IZxOPPGIg2py1KL\n" - + " A/H2gdyeqyJRcAsyEkfwLlushR5T9abSiPsIRcYoX8Ck8Lt+gQ7RCMefnm8CoOBK\n" - + " IfcjuV4PGOoeXrq57VR5SsOeT07bL+D7B+mohYFI1v2G3WClAE8XgM3q8NoFFvaY\n" - + " moi0+UcTduil47qvozjdNmjRAgu5j6vMKXEdG5Rqsja8hy0LG1hwfnR0gNiwcZ5L\n" - + " e3GyFnwH1IgqvsGOUM0ohnDUAU0zJY7nG0QYrDYe5/QPRNhWDpYkwHDiqcG28wIQ\n" - + " COTPAZHU2EoSKjSqEG2l0S5JPcor2BEde9ikSkcmK8foxlOHIdFn+n7RNF3bSEfK\n" - + " n1IOuXoqPidmeBQLevqG8KTy/C9CHqlaCNlpbIA9h+WVfsjm2s6JXBu0YbcfoIbJ\n" - + " AmSuZVeqB/+ZVvpfiad/jQWzY49fRnsSmV7VveTFPGtJxC89EadbMAinMZo+72u5\n" - + " 9319RqN5wsP2Zus8\n" - + " </cert>\n" + // The public key is chosen by using the following hash as the first 32 bytes (x-axis) + // SHA256("Google Cloud Key Vault Service Test Endpoint") = 8e0c114a79207c004cd7e906e2582145fa24cb0766defdf183b4265598cba9d5 + // so its private key is unknown. + + " <cert>MIIDOzCCASOgAwIBAgIRAOTj/iNQb6/Qit7zAW9ncL0wDQYJKoZIhvcNAQELBQAwOTE3MDUGA1UEAxMuR29vZ2xlIENsb3VkIEtleSBWYXVsdCBTZXJ2aWNlIEludGVybWVkaWF0ZSBDQTAeFw0xODA1MDcyMjE4MTFaFw0yMzA1MDgyMjE4MTFaMDIxMDAuBgNVBAMTJ0dvb2dsZSBDbG91ZCBLZXkgVmF1bHQgU2VydmljZSBFbmRwb2ludDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABI4MEUp5IHwATNfpBuJYIUX6JMsHZt798YO0JlWYy6nVVa1lxf9c+xxONJh+T5aio370RlIEuiq5R7vCHt0VGsCjEDAOMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAGf6QU58lU+gGzy8hnp0suR/ixC++CExtf39pDHkdfU/e3ui4ROR+pjQ5F7okDFWeKSCNcJZ7tyXMJ9g7/I0qVY8Bj/gRnlVokdl/wD5PiL9GIzqWfnHNe3T+xrAAAgOD0bEmjgwNYmekfUIYQczd04d7ZMGnmAkpVH/0O2mf9q5x9fMlbKuAygUqQ/gmnlgxKfl9DSRWi4oMBOqlKlCRP1XAh3anu92+M/EhsFbyc07CWZY0SByX5M/cHVMLhUXjZHvcYLyOmJWJmXznidgyNeIR6t9yDB55iCt7WSn3qMY+9vA9ELzt8jYpBNaKc0GbWQkRzYWegkf4kMis98eQ3SnAKbRz6669nmuAdxKs9/LK6BlFOFw1xvsTRQ96dBaoiX2XGhou+Im0Td/AMs0Aigz2N+Ujq/yW//35GZQfdGGIYtFbkcltStygjIJyAM1pBhyBBkJhOhRpO4fXh98aq8H5J7R9i5A9WpnDstAxPxcNCDWn0O/WxhPvVZkFTpiNXh9dnlJ/kZe+j+z5ZMaxW435drLPx2AQKjXA9GgGrFPltTUyGycmEGtuxLvSnm/zPlmk5FUk7x2wEr0+bZ3cx0JHHgAtgXpe0jkDi8Bw8O3X7mUOjxVhYU6auiYJezW9LGmweaKwYvS04UCWOReolUVexob9LI/VX1JrrwD3s7k</cert>\n" + " </endpoints>\n" - + "</certificates>\n"; + + "</certificate>\n"; private static final String THM_SIG_XML = "" - + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<signature>\n" - + " <intermediates>\n" - + " </intermediates>\n" - + " <certificate>\n" - + " MIIFLzCCAxegAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwIDEeMBwGA1UEAwwVR29v\n" - + " Z2xlIENyeXB0QXV0aFZhdWx0MB4XDTE4MDIwMzAwNDIwM1oXDTI4MDIwMTAwNDIw\n" - + " M1owLTErMCkGA1UEAwwiR29vZ2xlIENyeXB0QXV0aFZhdWx0IEludGVybWVkaWF0\n" - + " ZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANyQeJvRfqtDIOqTjnX1\n" - + " vl27Q6sI+TfRdcrDP4fPnLhwZlpYoZwc4dZLZf1gClHM7TT8Ru8WRZVRNUbbvAnn\n" - + " hX4LccdI4BRYeESB8Va+8fB+f0dMPHUESTv1pConsO4nTpKf9Y6Iy0pUBPnoyLyZ\n" - + " 6QHGkw6t1mrCVwutRWxnEQezDn9x5m7hxJbNztLOWds0rVwKDJEMapZ/oaneEYTz\n" - + " qRQ60zWL3lGBQinD7D/PTDGkXqQjJBOMr4qOJgf9EE4kgRybqxJZmUyi0otKfaWF\n" - + " /5cvzJTETEgdOix95vTvtBZbjDYEHY1kzjA8A7fDhrDfcU2KANBzZJBiadQRiYhw\n" - + " PyTHvv4lYKALEElzbNMde0HFa5cBD6J6C3xE75AP3ul3pcoz3E+wA6RxYunv2j4A\n" - + " miXg/l/C+Bgzr2YziXAfXa/zpEjhqm09A5qDQoMgdfIpuNpDICC/fSXgqQOl/a5Y\n" - + " 4OE45PA1tU9hSbexhSWEFxvKFOTxio32w9ThABqjmwpMBhmAH+aWF5DKlNTDK+rP\n" - + " ptHMZ6FUHeW0/2ALIp0jThVcRS5QFaTdJPJXZERB6fn8soCezq/XULPbZmsR0K80\n" - + " uB62fJXsImw5r/AP8aJRYvZNrunOyGL1qEmqutw09FsDM4tw0pmQV7GHM+mie6j+\n" - + " k2txpF1rV+t6lfFWSZuyA5QvAgMBAAGjZjBkMB0GA1UdDgQWBBR3qZ3aEI+WZ/dW\n" - + " QRfkV8PEoEttoDAfBgNVHSMEGDAWgBSbZfrqOYH54EJpkdKMZjMcz/Hp+DASBgNV\n" - + " HRMBAf8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n" - + " AgEAWBKGG5b5ZVOjA3TzQ8t/RNY+UcAIcdQ+CF/usUbGBSMnKkKWgTzgF6DdE6k/\n" - + " mXX0IOpn07I/MDXPpUDN4ZfIWFm9vLsba1kMFE/+/S7ymdIB0LkXyXxWHZgZ2ATe\n" - + " xkPbm+l0GLs/QR/othB604lefzo+qCaBbUXqXPEOMoKyL2Sl5TQBbAN05WDvjzCS\n" - + " 7nSjxQTOxXDHMV322gaWB7+efcUfknsS4bMCUXBOgeqnBNUR6BoB3SX2avn6tLtS\n" - + " t3dfzQEcOoIFxcTtSpu3PDlj6WajAwKdbSQU3TZ0L10u3Zz0jEL72w8gDl5OStkG\n" - + " SuRNVEYuPavb2PucL2blVopwGpwtkNbLylGdrzJpmmuA10Tx39ZNj2dWyJzT03zM\n" - + " 0XlDRuGFZrdCieUH1dblmoOC6JyW+f7lO1ETNIC1I7LEz6B8beXTCM7LAiTVoVrn\n" - + " ZFqoBY8vrso4zobe8o2kydbmGuYeuKO4rGJqsYihl+RkxHmKMrS4WC/f+no0cv9h\n" - + " AFockmGQp63lOGI/HBb37WT9lxdV5jbpeH7bYan/y2jtlbyC48+I3WF+kP7t/Uh1\n" - + " KYcOuxlBDtt/NXRummzI00Ht7YRzLD4ZCfLbufK0EskMZ1EG6tvBC/OmlA7pCaWT\n" - + " St8KzOHtsYKgJA3Fea4OxDkEL6lBSommVOp2zWybKLb3Gzc=\n" - + " </certificate>\n" - + " <value>\n" - + " uKJ4W8BPCdVaIBe2ZiMxxk5L5vGBV9QwaOEGU80LgtA/gEqkiO2IMUBlQJFqvvhh6RSph5lWpLuv\n" - + " /Xt7WBzDsZOcxXNffg2+pWNpbpwZdHohlwQEI1OqiVYVnfG4euAkzeWZZLsRUuAjHfcWVIzDoSoK\n" - + " wC+gqdUQHBV+pWyn6PXVslS0JIldeegbiwF076M1D7ybeCABXoQelSZRHkx1szO8UnxSR3X7Cemu\n" - + " p9De/7z9+WPPclqybINVIPy6Kvl8mHrGSlzawQRDKtoMrJa8bo93PookF8sbg5EoGapV0yNpMEiA\n" - + " spq3DEcdXB6mGDGPnLbS2WXq4zjKopASRKkZvOMdgfS6NdUMDtKS1TsOrv2KKTkLnGYfvdAeWiMg\n" - + " oFbuyYQ0mnDlLH1UW6anI8RxXn+wmdyZA+/ksapGvRmkvz0Mb997WzqNl7v7UTr0SU3Ws01hFsm6\n" - + " lW++MsotkyfpR9mWB8/dqVNVShLmIlt7U/YFVfziYSrVdjcAdIlgJ6Ihxb92liQHOU+Qr1YDOmm1\n" - + " JSnhlQVvFxWZG7hm5laNL6lqXz5VV6Gk5IeLtMb8kdHz3zj4ascdldapVPLJIa5741GNNgQNU0nH\n" - + " FhAyKk0zN7PbL1/XGWPU+s5lai4HE6JM2CKA7jE7cYrdaDZxbba+9iWzQ4YEBDr5Z3OoloK5dvs=\n" - + " </value>\n" + + " <intermediates></intermediates>\n" + + " <certificate>MIIFGjCCAwKgAwIBAgIQHflnDNWkj2yxeD1IB6GdTTANBgkqhkiG9w0BAQsFADAxMS8wLQYDVQQDEyZHb29nbGUgQ2xvdWQgS2V5IFZhdWx0IFNlcnZpY2UgUm9vdCBDQTAeFw0xODA1MDcxODU4MTBaFw0yODA1MDgxODU4MTBaMDkxNzA1BgNVBAMTLkdvb2dsZSBDbG91ZCBLZXkgVmF1bHQgU2VydmljZSBJbnRlcm1lZGlhdGUgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDvdOu8fePrMSKalxzfa3HaK6lbB/LN0TmXgSNzkQFjPHRpkfpv8oO663C6y2TQijKOUbJIwHP/bViBZ6Mib6d24CWmTtZjmRgenRda3N2bFmSeZZOq6A941l6IoSOgOanIhtjo35/XeFDZFWH5YNMSjBD+LThYEvvlyGyGUgb7cDjaDlCvsNkQp1P2glCqSe3OPRwbInlfwHCN5OImu9iTYqf/Tnnn8qmnrkbdF/b1U89TeLruS2EBPdJq8sGkfTdLhZn5CV+sCIZDOLJ23P23uZKTXF5+NrHllYC4kB8Jsp8jdVYBxpSvg/nsHOYNxKLSOCzVoze3YGs98AxHFa/fnINmesL4eKnOSPIMYF8eYWCiCXKFz178qPeZK6w7RGrXCC5VcqzaEpdGhoYm4e17dgjBMLWkvOeq+iWEPWc+hd/yszOAdHOVz0fyJeyAHWnv3vmeHlYI+swNfZ4CZh1rTFMxxxN4HMgzaiHFCzGWHmuyNdU1TeKFtaQeq7MiLAVwC2V0/d0ySyPR2f8OdgPKiSMSBT/PYjbXoT3fH2GYqQSTo+nujy3/PqXAxP0Uki7Ons1ESdYJKL57mzYTsUOPpLvFjbMQhQeubC64lzSPMmfB1n7SbKKdpOYEO8FdHlxTVyYQBmiF4IChG/1n/qgBJzMsXQLi65V8DkZdwCbXhwIDAQABoyYwJDAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBATANBgkqhkiG9w0BAQsFAAOCAgEAQ+G3v3JCbzChBs8HUGx6i2TMm1NZM71+chbA2JF9De8kVd/r2CETvvBRLXcTPcWWA0+PRDGaDmi4TR3bJhXgBStecQZkQtzI3ZcdFfI0rTNeCevfHp5nJjtB+AYomCTKNrlNLpk9YbJosqEKVLQBhlLNYm3PT4CQYJ1NubLLtKF1cn4Z+eayxud1kDrZWFyN5CYewOrtXc8oCynj8H0/NydOuCRQU2c/UXWmvsmlRRffHJEXLqCMitTHV9w4VHEVg9YYssxno/jWtp+b4z8JsE2vkJjs2tmOvfiMupbJx9h6zj2j04rjhf/A+vGPRKOD5WtbbX4An2+szsNLmERBfWUNsO1AaSTc3W+AJOjrG30tewS7jFRPluTtgB+kmozSW0MU/BgAYJuNKRVP8zklVmQqJRbrrxSzrvHzJlz/lvFu9MD7nGtiFqT9VggFjqq5vgn5srBp3Dq4GDGerg+HCDCN9qgnL1gBcKzCMK1oT0bCRWZGckT28WMnfcgZ/fuEVNgQcEXLgWiZWZDBEVlMh7u2QoOr2LXwXuXME8k87rAQbxvGLhyxq2uNxUdH16uljm7p5u2Qobyqxqf2rOGJYCBLK2JP74d6Nl6hD5FGBBaO6mN0Ojn/ShJ1Cq9o3wCHoLYn55wJnXYu7QXAX6230h7ekXpbxPPHO4x0Var5p+8=</certificate>\n" + + " <value>WkmYBCY4heNutMf3tEbyg+Omm+MvWF4EoDmv2vCd259oy3t8URqDqu5vEi3TqQguX0GO3r5mRKCcEYged121xJltC6zShbDMZZNAlB6sqvS6/vIVBBx5jKecUaEpRuQ4ruTyF93YXDi7DgaCNGaYCjkDrnr8lSAyelZl2tfe2BbpOMiwH1fNvI6Xmb++iyMmZGoJo91ovucC635SnnULNUtivL2CjLgU3mKb2uZMB8XPr1t1FOTJEA81ghDU+p3ZrPLxLB3KBTtfAwPQyqStRuY8+3bnPqi7VWeZgfoesvJiPF6q1PraoaL/inlRFo7wr37CS9EtNR/k5cq1UJ4/4Ernvj5k2Zw/IclzYHUGSd3ljCOTJJB6cDtR7WDqprlr1J4nr9hf1Ya4DFJmlX3FXix43Dw6lfk/1gCiWu0y2i1A2NCn0QRxuPh5b385Epj98QlZnd2roB2GfzchJTAxI+oeLc3CowkyLDS5jjuTMERbKbPpkhQu9gtskYtB0I4fEGOMn17+ZrXRcTPJexCS2NGgSqiF4X9Fwe+9XRg3Nk+SoUj9gBCysP8UeSz1POZHQIlZ24mQzxOK2hwGwDtxVchGCrNyf8rh5bZE2hUKHYNH9UWQ+YWrieKeulfP+o1wL9NLZOTz3SHcV/kCv5WqgynzkrKf382FwunxF56NapA=</value>\n" + "</signature>\n"; - public static final PublicKey CERT_1_PUBLIC_KEY; - public static final PrivateKey CERT_1_PRIVATE_KEY; - - static { - try { - CERT_1_PUBLIC_KEY = - SecureBox.decodePublicKey( - new byte[] { - (byte) 0x04, (byte) 0xb8, (byte) 0x00, (byte) 0x11, (byte) 0x18, - (byte) 0x98, (byte) 0x1d, (byte) 0xf0, (byte) 0x6e, (byte) 0xb4, - (byte) 0x94, (byte) 0xfe, (byte) 0x86, (byte) 0xda, (byte) 0x1c, - (byte) 0x07, (byte) 0x8d, (byte) 0x01, (byte) 0xb4, (byte) 0x3a, - (byte) 0xf6, (byte) 0x8d, (byte) 0xdc, (byte) 0x61, (byte) 0xd0, - (byte) 0x46, (byte) 0x49, (byte) 0x95, (byte) 0x0f, (byte) 0x10, - (byte) 0x86, (byte) 0x93, (byte) 0x24, (byte) 0x66, (byte) 0xe0, - (byte) 0x3f, (byte) 0xd2, (byte) 0xdf, (byte) 0xf3, (byte) 0x79, - (byte) 0x20, (byte) 0x1d, (byte) 0x91, (byte) 0x55, (byte) 0xb0, - (byte) 0xe5, (byte) 0xbd, (byte) 0x7a, (byte) 0x8b, (byte) 0x32, - (byte) 0x7d, (byte) 0x25, (byte) 0x53, (byte) 0xa2, (byte) 0xfc, - (byte) 0xa5, (byte) 0x65, (byte) 0xe1, (byte) 0xbd, (byte) 0x21, - (byte) 0x44, (byte) 0x7e, (byte) 0x78, (byte) 0x52, (byte) 0xfa - }); - CERT_1_PRIVATE_KEY = - decodePrivateKey( - new byte[] { - (byte) 0x70, (byte) 0x01, (byte) 0xc7, (byte) 0x87, (byte) 0x32, - (byte) 0x2f, (byte) 0x1c, (byte) 0x9a, (byte) 0x6e, (byte) 0xb1, - (byte) 0x91, (byte) 0xca, (byte) 0x4e, (byte) 0xb5, (byte) 0x44, - (byte) 0xba, (byte) 0xc8, (byte) 0x68, (byte) 0xc6, (byte) 0x0a, - (byte) 0x76, (byte) 0xcb, (byte) 0xd3, (byte) 0x63, (byte) 0x67, - (byte) 0x7c, (byte) 0xb0, (byte) 0x11, (byte) 0x82, (byte) 0x65, - (byte) 0x77, (byte) 0x01 - }); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - - public static byte[] getCertPath1Bytes() { - try { - return CertUtils.decodeBase64(CERT_PATH_1_BASE64); - } catch (Exception e){ - throw new RuntimeException(e); - } - } - - public static byte[] getCertPath2Bytes() { - try { - return CertUtils.decodeBase64(CERT_PATH_2_BASE64); - } catch (Exception e){ - throw new RuntimeException(e); - } - } - public static final CertPath CERT_PATH_1; public static final CertPath CERT_PATH_2; + public static final PublicKey CERT_1_PUBLIC_KEY; static { try { - CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); - CERT_PATH_1 = certFactory.generateCertPath( - new ByteArrayInputStream(getCertPath1Bytes()), CERT_PATH_ENCODING); - CERT_PATH_2 = certFactory.generateCertPath( - new ByteArrayInputStream(getCertPath2Bytes()), CERT_PATH_ENCODING); + CERT_PATH_1 = decodeCertPath(CERT_PATH_1_BASE64); + CERT_PATH_2 = decodeCertPath(CERT_PATH_2_BASE64); + CERT_1_PUBLIC_KEY = CERT_PATH_1.getCertificates().get(0).getPublicKey(); } catch (Exception e) { throw new RuntimeException(e); } @@ -323,13 +174,6 @@ public final class TestData { return THM_SIG_XML.getBytes(StandardCharsets.UTF_8); } - private static PrivateKey decodePrivateKey(byte[] keyBytes) throws Exception { - assertThat(keyBytes.length).isEqualTo(32); - BigInteger priv = new BigInteger(/*signum=*/ 1, keyBytes); - KeyFactory keyFactory = KeyFactory.getInstance("EC"); - return keyFactory.generatePrivate(new ECPrivateKeySpec(priv, SecureBox.EC_PARAM_SPEC)); - } - public static SecretKey generateKey() throws Exception { KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM); keyGenerator.init(/*keySize=*/ 256); @@ -576,6 +420,10 @@ public final class TestData { + "2nxygOQKtfb0EPTvVYMErvWrA69rr+wPMSWPetvcDGEZ8hWFr3iRtduExC9sRqnV" + "5DhvZROQSZQtQ+Ja6g8BehUC9gPCES93EOQUYPpRQEeD1CE+1IKTyuH+ApynIKSj" + "5+U1x+OE3UZYTTzEck/TJxTm+Sv4FfCvpwdmDAMTjEZXfuFR+7+5Og=="; + private static final String INSECURE_PRIVATE_KEY_FOR_ENDPOINT1_BASE64 = "" + + "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgdCqcARU7lWJVXKY/" + + "+DTlFC0dzcTvh1ufkfZdnoZoR7ShRANCAAS3S6JtfbCyXlLSA+WZHwk0Rr2hdjJX" + + "xGeJLnsAbVkESmoGL9wG2Qty2InpFQ9jFFJHvGR8a73RMQVqmNxwQvFh"; public static byte[] getInsecureCertXmlBytesWithEndpoint1(int serial) { String str = INSECURE_CERT_XML_HEADER; @@ -603,6 +451,13 @@ public final class TestData { return decodeCertPath(INSECURE_CERT_PATH_FOR_ENDPOINT2_BASE64); } + public static PrivateKey getInsecurePrivateKeyForEndpoint1() throws Exception { + byte[] keyBytes = Base64.getDecoder().decode(INSECURE_PRIVATE_KEY_FOR_ENDPOINT1_BASE64); + KeyFactory kf = KeyFactory.getInstance("EC"); + PKCS8EncodedKeySpec skSpec = new PKCS8EncodedKeySpec(keyBytes); + return kf.generatePrivate(skSpec); + } + private static CertPath decodeCertPath(String base64CertPath) throws Exception { byte[] certPathBytes = Base64.getDecoder().decode(base64CertPath); CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java index 36d0c8bec09e..147347d47444 100644 --- a/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java @@ -111,7 +111,8 @@ public class DexManagerTests { DELEGATE_LAST_CLASS_LOADER_NAME); mDexManager = new DexManager( - mPM, /*PackageDexOptimizer*/ null, mInstaller, mInstallLock, mListener); + /*Context*/ null, mPM, /*PackageDexOptimizer*/ null, mInstaller, mInstallLock, + mListener); // Foo and Bar are available to user0. // Only Bar is available to user1; 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 20cf733a860b..761c1f1ea3a5 100644 --- a/services/tests/servicestests/src/com/android/server/power/BatterySaverPolicyTest.java +++ b/services/tests/servicestests/src/com/android/server/power/BatterySaverPolicyTest.java @@ -15,6 +15,7 @@ */ package com.android.server.power; +import android.os.PowerManager; import android.os.PowerManager.ServiceType; import android.os.PowerSaveState; import android.os.Handler; @@ -41,7 +42,8 @@ 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 = 0; + private static final int DEFAULT_GPS_MODE = + PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF; private static final String BATTERY_SAVER_CONSTANTS = "vibration_disabled=true," + "animation_disabled=false," + "soundtrigger_disabled=true," @@ -69,6 +71,10 @@ public class BatterySaverPolicyTest extends AndroidTestCase { return mDeviceSpecificConfigResId; } + @Override + boolean isAccessibilityEnabled() { + return mMockAccessibilityEnabled; + } @VisibleForTesting void onChange() { @@ -83,11 +89,15 @@ public class BatterySaverPolicyTest extends AndroidTestCase { private final ArrayMap<String, String> mMockGlobalSettings = new ArrayMap<>(); private int mDeviceSpecificConfigResId = R.string.config_batterySaverDeviceSpecificConfig_1; + private boolean mMockAccessibilityEnabled; + public void setUp() throws Exception { super.setUp(); MockitoAnnotations.initMocks(this); mBatterySaverPolicy = new BatterySaverPolicyForTest(mHandler); mBatterySaverPolicy.systemReady(getContext()); + + mMockAccessibilityEnabled = false; } @SmallTest @@ -101,6 +111,12 @@ public class BatterySaverPolicyTest extends AndroidTestCase { } @SmallTest + public void testGetBatterySaverPolicy_PolicyVibration_WithAccessibilityEnabled() { + mMockAccessibilityEnabled = true; + testServiceDefaultValue_unchanged(ServiceType.VIBRATION); + } + + @SmallTest public void testGetBatterySaverPolicy_PolicySound_DefaultValueCorrect() { testServiceDefaultValue(ServiceType.SOUND); } @@ -117,7 +133,7 @@ public class BatterySaverPolicyTest extends AndroidTestCase { @SmallTest public void testGetBatterySaverPolicy_PolicyAnimation_DefaultValueCorrect() { - testServiceDefaultValue(ServiceType.ANIMATION); + testServiceDefaultValue_unchanged(ServiceType.ANIMATION); } @SmallTest @@ -144,11 +160,7 @@ public class BatterySaverPolicyTest extends AndroidTestCase { @SmallTest public void testGetBatterySaverPolicy_PolicyScreenBrightness_DefaultValueCorrect() { - testServiceDefaultValue(ServiceType.SCREEN_BRIGHTNESS); - - PowerSaveState stateOn = - mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.SCREEN_BRIGHTNESS, true); - assertThat(stateOn.brightnessFactor).isWithin(PRECISION).of(DEFAULT_BRIGHTNESS_FACTOR); + testServiceDefaultValue_unchanged(ServiceType.SCREEN_BRIGHTNESS); } @SmallTest @@ -222,6 +234,17 @@ public class BatterySaverPolicyTest extends AndroidTestCase { assertThat(batterySaverStateOff.batterySaverEnabled).isFalse(); } + private void testServiceDefaultValue_unchanged(@ServiceType int type) { + mBatterySaverPolicy.updateConstantsLocked("", ""); + final PowerSaveState batterySaverStateOn = + mBatterySaverPolicy.getBatterySaverPolicy(type, BATTERY_SAVER_ON); + assertThat(batterySaverStateOn.batterySaverEnabled).isFalse(); + + final PowerSaveState batterySaverStateOff = + 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, ""); diff --git a/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java b/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java index 6b52ee5f4408..84475bb365b7 100644 --- a/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java @@ -19,6 +19,7 @@ package com.android.server.usage; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import android.app.PendingIntent; import android.os.HandlerThread; @@ -49,9 +50,20 @@ public class AppTimeLimitControllerTests { private static final int OBS_ID1 = 1; private static final int OBS_ID2 = 2; private static final int OBS_ID3 = 3; + private static final int OBS_ID4 = 4; + private static final int OBS_ID5 = 5; + private static final int OBS_ID6 = 6; + private static final int OBS_ID7 = 7; + private static final int OBS_ID8 = 8; + private static final int OBS_ID9 = 9; + private static final int OBS_ID10 = 10; + private static final int OBS_ID11 = 11; - private static final long TIME_30_MIN = 30 * 60_1000L; - private static final long TIME_10_MIN = 10 * 60_1000L; + private static final long TIME_30_MIN = 30 * 60_000L; + private static final long TIME_10_MIN = 10 * 60_000L; + + private static final long MAX_OBSERVER_PER_UID = 10; + private static final long MIN_TIME_LIMIT = 4_000L; private static final String[] GROUP1 = { PKG_SOC1, PKG_GAME1, PKG_PROD @@ -93,6 +105,16 @@ public class AppTimeLimitControllerTests { protected long getUptimeMillis() { return mUptimeMillis; } + + @Override + protected long getObserverPerUidLimit() { + return MAX_OBSERVER_PER_UID; + } + + @Override + protected long getMinTimeLimit() { + return MIN_TIME_LIMIT; + } } @Before @@ -233,6 +255,47 @@ public class AppTimeLimitControllerTests { assertFalse(hasObserver(OBS_ID1)); } + /** Verify that App Time Limit Controller will limit the number of observerIds */ + @Test + public void testMaxObserverLimit() throws Exception { + boolean receivedException = false; + int ANOTHER_UID = UID + 1; + addObserver(OBS_ID1, GROUP1, TIME_30_MIN); + addObserver(OBS_ID2, GROUP1, TIME_30_MIN); + addObserver(OBS_ID3, GROUP1, TIME_30_MIN); + addObserver(OBS_ID4, GROUP1, TIME_30_MIN); + addObserver(OBS_ID5, GROUP1, TIME_30_MIN); + addObserver(OBS_ID6, GROUP1, TIME_30_MIN); + addObserver(OBS_ID7, GROUP1, TIME_30_MIN); + addObserver(OBS_ID8, GROUP1, TIME_30_MIN); + addObserver(OBS_ID9, GROUP1, TIME_30_MIN); + addObserver(OBS_ID10, GROUP1, TIME_30_MIN); + // Readding an observer should not cause an IllegalStateException + addObserver(OBS_ID5, GROUP1, TIME_30_MIN); + // Adding an observer for a different uid shouldn't cause an IllegalStateException + mController.addObserver(ANOTHER_UID, OBS_ID11, GROUP1, TIME_30_MIN, null, USER_ID); + try { + addObserver(OBS_ID11, GROUP1, TIME_30_MIN); + } catch (IllegalStateException ise) { + receivedException = true; + } + assertTrue("Should have caused an IllegalStateException", receivedException); + } + + /** Verify that addObserver minimum time limit is one minute */ + @Test + public void testMinimumTimeLimit() throws Exception { + boolean receivedException = false; + // adding an observer with a one minute time limit should not cause an exception + addObserver(OBS_ID1, GROUP1, MIN_TIME_LIMIT); + try { + addObserver(OBS_ID1, GROUP1, MIN_TIME_LIMIT - 1); + } catch (IllegalArgumentException iae) { + receivedException = true; + } + assertTrue("Should have caused an IllegalArgumentException", receivedException); + } + private void moveToForeground(String packageName) { mController.moveToForeground(packageName, "class", USER_ID); } diff --git a/services/tests/servicestests/src/com/android/server/wm/RecentsAnimationControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/RecentsAnimationControllerTest.java index fbf6691f5bd2..a2af9b80fe36 100644 --- a/services/tests/servicestests/src/com/android/server/wm/RecentsAnimationControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/RecentsAnimationControllerTest.java @@ -19,6 +19,9 @@ package com.android.server.wm; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.view.Display.DEFAULT_DISPLAY; +import static com.android.server.wm.RecentsAnimationController.REORDER_KEEP_IN_PLACE; +import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_ORIGINAL_POSITION; +import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.verify; @@ -82,6 +85,25 @@ public class RecentsAnimationControllerTest extends WindowTestsBase { verifyNoMoreInteractionsExceptAsBinder(mMockRunner); } + @Test + public void testCancelAfterRemove_expectIgnored() throws Exception { + final AppWindowToken appWindow = createAppWindowToken(mDisplayContent, + WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD); + AnimationAdapter adapter = mController.addAnimation(appWindow.getTask(), + false /* isRecentTaskInvisible */); + adapter.startAnimation(mMockLeash, mMockTransaction, mFinishedCallback); + + // Remove the app window so that the animation target can not be created + appWindow.removeImmediately(); + mController.startAnimation(); + mController.cleanupAnimation(REORDER_KEEP_IN_PLACE); + try { + mController.cancelAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION, "test"); + } catch (Exception e) { + fail("Unexpected failure when canceling animation after finishing it"); + } + } + private static void verifyNoMoreInteractionsExceptAsBinder(IInterface binder) { verify(binder, atLeast(0)).asBinder(); verifyNoMoreInteractions(binder); diff --git a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java index 013c67255248..765b3d5957c4 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +++ b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java @@ -591,10 +591,6 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { } @Override - public void onScreenMagnificationStateChanged(boolean active) { - } - - @Override public void requestUserActivityNotification() { } diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowContainerTraversalTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTraversalTests.java new file mode 100644 index 000000000000..e07639933b7a --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTraversalTests.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.server.wm; + +import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; +import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; +import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; +import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Matchers.eq; + +import android.platform.test.annotations.Presubmit; +import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.mockito.Mock; + +import java.util.function.Consumer; + +/** + * Tests for {@link WindowContainer#forAllWindows} and various implementations. + */ +@SmallTest +@Presubmit +@RunWith(AndroidJUnit4.class) +public class WindowContainerTraversalTests extends WindowTestsBase { + + @Test + public void testDockedDividerPosition() throws Exception { + final WindowState splitScreenWindow = createWindowOnStack(null, + WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, TYPE_BASE_APPLICATION, + mDisplayContent, "splitScreenWindow"); + final WindowState splitScreenSecondaryWindow = createWindowOnStack(null, + WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_STANDARD, + TYPE_BASE_APPLICATION, mDisplayContent, "splitScreenSecondaryWindow"); + + sWm.mInputMethodTarget = splitScreenWindow; + + Consumer<WindowState> c = mock(Consumer.class); + mDisplayContent.forAllWindows(c, false); + + verify(c).accept(eq(mDockedDividerWindow)); + verify(c).accept(eq(mImeWindow)); + } +} diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java index 1be164395d23..942a07acbf9f 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java @@ -206,15 +206,14 @@ public class ScheduleCalendarTest extends UiServiceTestCase { assertTrue(mScheduleCalendar.shouldExitForAlarm(1000)); } - @Ignore @Test public void testShouldExitForAlarm_oldAlarm() { // Cal: today 2:15pm - Calendar cal = new GregorianCalendar(); - cal.set(Calendar.HOUR_OF_DAY, 14); - cal.set(Calendar.MINUTE, 15); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); + Calendar now = new GregorianCalendar(); + now.set(Calendar.HOUR_OF_DAY, 14); + now.set(Calendar.MINUTE, 15); + now.set(Calendar.SECOND, 0); + now.set(Calendar.MILLISECOND, 0); // ScheduleInfo: today 12:16pm - today 3:15pm mScheduleInfo.days = new int[] {getTodayDay()}; @@ -226,10 +225,45 @@ public class ScheduleCalendarTest extends UiServiceTestCase { mScheduleInfo.nextAlarm = 1000; // very old alarm mScheduleCalendar.setSchedule(mScheduleInfo); - assertTrue(mScheduleCalendar.isInSchedule(cal.getTimeInMillis())); + assertTrue(mScheduleCalendar.isInSchedule(now.getTimeInMillis())); // don't exit for an alarm if it's an old alarm - assertFalse(mScheduleCalendar.shouldExitForAlarm(1000)); + assertFalse(mScheduleCalendar.shouldExitForAlarm(now.getTimeInMillis())); + } + + @Test + public void testShouldExitForAlarm_oldAlarmInSchedule() { + // calNow: day 2 at 9pm + Calendar calNow = new GregorianCalendar(); + calNow.set(Calendar.HOUR_OF_DAY, 21); + calNow.set(Calendar.MINUTE, 0); + calNow.set(Calendar.SECOND, 0); + calNow.set(Calendar.MILLISECOND, 0); + calNow.add(Calendar.DATE, 1); // add a day + + // calAlarm: day 2 at 5am + Calendar calAlarm = new GregorianCalendar(); + calAlarm.set(Calendar.HOUR_OF_DAY, 5); + calAlarm.set(Calendar.MINUTE, 0); + calAlarm.set(Calendar.SECOND, 0); + calAlarm.set(Calendar.MILLISECOND, 0); + calAlarm.add(Calendar.DATE, 1); // add a day + + // ScheduleInfo: day 1, day 2: 9pm-7am + mScheduleInfo.days = new int[] {getTodayDay(), getTodayDay() + 1}; + mScheduleInfo.startHour = 21; + mScheduleInfo.endHour = 7; + mScheduleInfo.startMinute = 0; + mScheduleInfo.endMinute = 0; + mScheduleInfo.exitAtAlarm = true; + mScheduleInfo.nextAlarm = calAlarm.getTimeInMillis(); // old alarm (5am day 2) + + mScheduleCalendar.setSchedule(mScheduleInfo); + assertTrue(mScheduleCalendar.isInSchedule(calNow.getTimeInMillis())); + assertTrue(mScheduleCalendar.isInSchedule(calAlarm.getTimeInMillis())); + + // don't exit for an alarm if it's an old alarm + assertFalse(mScheduleCalendar.shouldExitForAlarm(calNow.getTimeInMillis())); } @Test @@ -369,6 +403,64 @@ public class ScheduleCalendarTest extends UiServiceTestCase { assertFalse(mScheduleCalendar.isInSchedule(cal.getTimeInMillis())); } + @Test + public void testIsAlarmInSchedule_alarmAndNowInSchedule_sameScheduleTrigger() { + Calendar alarm = new GregorianCalendar(); + alarm.set(Calendar.HOUR_OF_DAY, 23); + alarm.set(Calendar.MINUTE, 15); + alarm.set(Calendar.SECOND, 0); + alarm.set(Calendar.MILLISECOND, 0); + + Calendar now = new GregorianCalendar(); + now.set(Calendar.HOUR_OF_DAY, 2); + now.set(Calendar.MINUTE, 15); + now.set(Calendar.SECOND, 0); + now.set(Calendar.MILLISECOND, 0); + now.add(Calendar.DATE, 1); // add a day + + mScheduleInfo.days = new int[] {getTodayDay(), getTodayDay() + 1}; + mScheduleInfo.startHour = 22; + mScheduleInfo.startMinute = 15; + mScheduleInfo.endHour = 3; + mScheduleInfo.endMinute = 15; + mScheduleCalendar.setSchedule(mScheduleInfo); + + assertTrue(mScheduleCalendar.isInSchedule(alarm.getTimeInMillis())); + assertTrue(mScheduleCalendar.isInSchedule(now.getTimeInMillis())); + assertTrue(mScheduleCalendar.isAlarmInSchedule(alarm.getTimeInMillis(), + now.getTimeInMillis())); + } + + @Test + public void testIsAlarmInSchedule_alarmAndNowInSchedule_differentScheduleTrigger() { + Calendar alarm = new GregorianCalendar(); + alarm.set(Calendar.HOUR_OF_DAY, 23); + alarm.set(Calendar.MINUTE, 15); + alarm.set(Calendar.SECOND, 0); + alarm.set(Calendar.MILLISECOND, 0); + + Calendar now = new GregorianCalendar(); + now.set(Calendar.HOUR_OF_DAY, 23); + now.set(Calendar.MINUTE, 15); + now.set(Calendar.SECOND, 0); + now.set(Calendar.MILLISECOND, 0); + now.add(Calendar.DATE, 1); // add a day + + mScheduleInfo.days = new int[] {getTodayDay(), getTodayDay() + 1}; + mScheduleInfo.startHour = 22; + mScheduleInfo.startMinute = 15; + mScheduleInfo.endHour = 3; + mScheduleInfo.endMinute = 15; + mScheduleCalendar.setSchedule(mScheduleInfo); + + // even though both alarm and now are in schedule, they are not in the same part of + // the schedule (alarm is in schedule for the previous day's schedule compared to now) + assertTrue(mScheduleCalendar.isInSchedule(alarm.getTimeInMillis())); + assertTrue(mScheduleCalendar.isInSchedule(now.getTimeInMillis())); + assertFalse(mScheduleCalendar.isAlarmInSchedule(alarm.getTimeInMillis(), + now.getTimeInMillis())); + } + private int getTodayDay() { return new GregorianCalendar().get(Calendar.DAY_OF_WEEK); } diff --git a/services/usage/java/com/android/server/usage/AppTimeLimitController.java b/services/usage/java/com/android/server/usage/AppTimeLimitController.java index e20185114261..e7c54d8415d7 100644 --- a/services/usage/java/com/android/server/usage/AppTimeLimitController.java +++ b/services/usage/java/com/android/server/usage/AppTimeLimitController.java @@ -26,6 +26,7 @@ import android.text.TextUtils; import android.util.ArrayMap; import android.util.Slog; import android.util.SparseArray; +import android.util.SparseIntArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; @@ -58,6 +59,10 @@ public class AppTimeLimitController { private OnLimitReachedListener mListener; + private static final long MAX_OBSERVER_PER_UID = 1000; + + private static final long ONE_MINUTE = 60_000L; + @GuardedBy("mLock") private final SparseArray<UserData> mUsers = new SparseArray<>(); @@ -77,6 +82,9 @@ public class AppTimeLimitController { /** Map of observerId to details of the time limit group */ private SparseArray<TimeLimitGroup> groups = new SparseArray<>(); + /** Map of the number of observerIds registered by uid */ + private SparseIntArray observerIdCounts = new SparseIntArray(); + private UserData(@UserIdInt int userId) { this.userId = userId; } @@ -147,6 +155,18 @@ public class AppTimeLimitController { return SystemClock.uptimeMillis(); } + /** Overrideable for testing purposes */ + @VisibleForTesting + protected long getObserverPerUidLimit() { + return MAX_OBSERVER_PER_UID; + } + + /** Overrideable for testing purposes */ + @VisibleForTesting + protected long getMinTimeLimit() { + return ONE_MINUTE; + } + /** Returns an existing UserData object for the given userId, or creates one */ private UserData getOrCreateUserDataLocked(int userId) { UserData userData = mUsers.get(userId); @@ -171,10 +191,20 @@ public class AppTimeLimitController { */ public void addObserver(int requestingUid, int observerId, String[] packages, long timeLimit, PendingIntent callbackIntent, @UserIdInt int userId) { + + if (timeLimit < getMinTimeLimit()) { + throw new IllegalArgumentException("Time limit must be >= " + getMinTimeLimit()); + } synchronized (mLock) { UserData user = getOrCreateUserDataLocked(userId); + removeObserverLocked(user, requestingUid, observerId, /*readding =*/ true); - removeObserverLocked(user, requestingUid, observerId); + final int observerIdCount = user.observerIdCounts.get(requestingUid, 0); + if (observerIdCount >= getObserverPerUidLimit()) { + throw new IllegalStateException( + "Too many observers added by uid " + requestingUid); + } + user.observerIdCounts.put(requestingUid, observerIdCount + 1); TimeLimitGroup group = new TimeLimitGroup(); group.observerId = observerId; @@ -216,7 +246,7 @@ public class AppTimeLimitController { public void removeObserver(int requestingUid, int observerId, @UserIdInt int userId) { synchronized (mLock) { UserData user = getOrCreateUserDataLocked(userId); - removeObserverLocked(user, requestingUid, observerId); + removeObserverLocked(user, requestingUid, observerId, /*readding =*/ false); } } @@ -232,12 +262,19 @@ public class AppTimeLimitController { } @GuardedBy("mLock") - private void removeObserverLocked(UserData user, int requestingUid, int observerId) { + private void removeObserverLocked(UserData user, int requestingUid, int observerId, + boolean readding) { TimeLimitGroup group = user.groups.get(observerId); if (group != null && group.requestingUid == requestingUid) { removeGroupFromPackageMapLocked(user, group); user.groups.remove(observerId); mHandler.removeMessages(MyHandler.MSG_CHECK_TIMEOUT, group); + final int observerIdCount = user.observerIdCounts.get(requestingUid); + if (observerIdCount <= 1 && !readding) { + user.observerIdCounts.delete(requestingUid); + } else { + user.observerIdCounts.put(requestingUid, observerIdCount - 1); + } } } @@ -321,7 +358,7 @@ public class AppTimeLimitController { // Unregister since the limit has been met and observer was informed. synchronized (mLock) { UserData user = getOrCreateUserDataLocked(group.userId); - removeObserverLocked(user, group.requestingUid, group.observerId); + removeObserverLocked(user, group.requestingUid, group.observerId, false); } } diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index f777f1da47b2..243718a526e9 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -115,6 +115,7 @@ public class UsageStatsService extends SystemService implements PackageManagerInternal mPackageManagerInternal; PackageMonitor mPackageMonitor; IDeviceIdleController mDeviceIdleController; + // Do not use directly. Call getDpmInternal() instead DevicePolicyManagerInternal mDpmInternal; private final SparseArray<UserUsageStatsService> mUserState = new SparseArray<>(); @@ -159,7 +160,6 @@ public class UsageStatsService extends SystemService implements mUserManager = (UserManager) getContext().getSystemService(Context.USER_SERVICE); mPackageManager = getContext().getPackageManager(); mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class); - mDpmInternal = LocalServices.getService(DevicePolicyManagerInternal.class); mHandler = new H(BackgroundThread.get().getLooper()); mAppStandby = new AppStandbyController(getContext(), BackgroundThread.get().getLooper()); @@ -209,6 +209,8 @@ public class UsageStatsService extends SystemService implements public void onBootPhase(int phase) { if (phase == PHASE_SYSTEM_SERVICES_READY) { mAppStandby.onBootPhase(phase); + // initialize mDpmInternal + getDpmInternal(); mDeviceIdleController = IDeviceIdleController.Stub.asInterface( ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); @@ -228,6 +230,13 @@ public class UsageStatsService extends SystemService implements } } + private DevicePolicyManagerInternal getDpmInternal() { + if (mDpmInternal == null) { + mDpmInternal = LocalServices.getService(DevicePolicyManagerInternal.class); + } + return mDpmInternal; + } + private class UserActionsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { @@ -675,9 +684,10 @@ public class UsageStatsService extends SystemService implements private boolean hasObserverPermission(String callingPackage) { final int callingUid = Binder.getCallingUid(); + DevicePolicyManagerInternal dpmInternal = getDpmInternal(); if (callingUid == Process.SYSTEM_UID - || (mDpmInternal != null - && mDpmInternal.isActiveAdminWithPolicy(callingUid, + || (dpmInternal != null + && dpmInternal.isActiveAdminWithPolicy(callingUid, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER))) { // Caller is the system or the profile owner, so proceed. return true; @@ -1042,9 +1052,6 @@ public class UsageStatsService extends SystemService implements if (packages == null || packages.length == 0) { throw new IllegalArgumentException("Must specify at least one package"); } - if (timeLimitMs <= 0) { - throw new IllegalArgumentException("Time limit must be > 0"); - } if (callbackIntent == null) { throw new NullPointerException("callbackIntent can't be null"); } diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java index f4bb32de91ae..bafb0a2fd683 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java @@ -828,7 +828,12 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { // internalClearGlobalStateLocked() cleans up the telephony and power save listeners. private void internalClearGlobalStateLocked() { // Unregister from call state changes. - mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); + long token = Binder.clearCallingIdentity(); + try { + mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); + } finally { + Binder.restoreCallingIdentity(token); + } // Unregister from power save mode changes. if (mPowerSaveModeListener != null) { diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java index cd524a517376..1b842fe936ab 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java @@ -46,6 +46,10 @@ import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel; import android.hardware.soundtrigger.SoundTrigger.ModuleProperties; import android.hardware.soundtrigger.SoundTrigger.RecognitionConfig; import android.hardware.soundtrigger.SoundTrigger.SoundModel; +import android.media.AudioAttributes; +import android.media.AudioFormat; +import android.media.AudioRecord; +import android.media.MediaRecorder; import android.media.soundtrigger.ISoundTriggerDetectionService; import android.media.soundtrigger.ISoundTriggerDetectionServiceClient; import android.media.soundtrigger.SoundTriggerDetectionService; @@ -654,8 +658,45 @@ public class SoundTriggerService extends SystemService { } } - private interface Operation { - void run(int opId, ISoundTriggerDetectionService service) throws RemoteException; + /** + * A single operation run in a {@link RemoteSoundTriggerDetectionService}. + * + * <p>Once the remote service is connected either setup + execute or setup + stop is executed. + */ + private static class Operation { + private interface ExecuteOp { + void run(int opId, ISoundTriggerDetectionService service) throws RemoteException; + } + + private final @Nullable Runnable mSetupOp; + private final @NonNull ExecuteOp mExecuteOp; + private final @Nullable Runnable mDropOp; + + private Operation(@Nullable Runnable setupOp, @NonNull ExecuteOp executeOp, + @Nullable Runnable cancelOp) { + mSetupOp = setupOp; + mExecuteOp = executeOp; + mDropOp = cancelOp; + } + + private void setup() { + if (mSetupOp != null) { + mSetupOp.run(); + } + } + + void run(int opId, @NonNull ISoundTriggerDetectionService service) throws RemoteException { + setup(); + mExecuteOp.run(opId, service); + } + + void drop() { + setup(); + + if (mDropOp != null) { + mDropOp.run(); + } + } } /** @@ -902,6 +943,10 @@ public class SoundTriggerService extends SystemService { private void runOrAddOperation(Operation op) { synchronized (mRemoteServiceLock) { if (mIsDestroyed || mDestroyOnceRunningOpsDone) { + Slog.w(TAG, mPuuid + ": Dropped operation as already destroyed or marked for " + + "destruction"); + + op.drop(); return; } @@ -920,11 +965,18 @@ public class SoundTriggerService extends SystemService { MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY, Integer.MAX_VALUE); + // As we currently cannot dropping an op safely, disable throttling int opsAdded = mNumOps.getOpsAdded(); - if (mNumOps.getOpsAdded() >= opsAllowed) { - if (DEBUG || opsAllowed + 10 > opsAdded) { - Slog.w(TAG, mPuuid + ": Dropped operation as too many operations were " - + "run in last 24 hours"); + if (false && mNumOps.getOpsAdded() >= opsAllowed) { + try { + if (DEBUG || opsAllowed + 10 > opsAdded) { + Slog.w(TAG, mPuuid + ": Dropped operation as too many operations " + + "were run in last 24 hours"); + } + + op.drop(); + } catch (Exception e) { + Slog.e(TAG, mPuuid + ": Could not drop operation", e); } } else { mNumOps.addOp(currentTime); @@ -972,34 +1024,87 @@ public class SoundTriggerService extends SystemService { + ")"); } + /** + * Create an AudioRecord enough for starting and releasing the data buffered for the event. + * + * @param event The event that was received + * @return The initialized AudioRecord + */ + private @NonNull AudioRecord createAudioRecordForEvent( + @NonNull SoundTrigger.GenericRecognitionEvent event) { + AudioAttributes.Builder attributesBuilder = new AudioAttributes.Builder(); + attributesBuilder.setInternalCapturePreset(MediaRecorder.AudioSource.HOTWORD); + AudioAttributes attributes = attributesBuilder.build(); + + // Use same AudioFormat processing as in RecognitionEvent.fromParcel + AudioFormat originalFormat = event.getCaptureFormat(); + AudioFormat captureFormat = (new AudioFormat.Builder()) + .setChannelMask(originalFormat.getChannelMask()) + .setEncoding(originalFormat.getEncoding()) + .setSampleRate(originalFormat.getSampleRate()) + .build(); + + int bufferSize = AudioRecord.getMinBufferSize( + captureFormat.getSampleRate() == AudioFormat.SAMPLE_RATE_UNSPECIFIED + ? AudioFormat.SAMPLE_RATE_HZ_MAX + : captureFormat.getSampleRate(), + captureFormat.getChannelCount() == 2 + ? AudioFormat.CHANNEL_IN_STEREO + : AudioFormat.CHANNEL_IN_MONO, + captureFormat.getEncoding()); + + return new AudioRecord(attributes, captureFormat, bufferSize, + event.getCaptureSession()); + } + @Override public void onGenericSoundTriggerDetected(SoundTrigger.GenericRecognitionEvent event) { if (DEBUG) Slog.v(TAG, mPuuid + ": Generic sound trigger event: " + event); - runOrAddOperation((opId, service) -> { - if (!mRecognitionConfig.allowMultipleTriggers) { - synchronized (mCallbacksLock) { - mCallbacks.remove(mPuuid.getUuid()); - } - mDestroyOnceRunningOpsDone = true; - } - - service.onGenericRecognitionEvent(mPuuid, opId, event); - }); + runOrAddOperation(new Operation( + // always execute: + () -> { + if (!mRecognitionConfig.allowMultipleTriggers) { + // Unregister this remoteService once op is done + synchronized (mCallbacksLock) { + mCallbacks.remove(mPuuid.getUuid()); + } + mDestroyOnceRunningOpsDone = true; + } + }, + // execute if not throttled: + (opId, service) -> service.onGenericRecognitionEvent(mPuuid, opId, event), + // execute if throttled: + () -> { + if (event.isCaptureAvailable()) { + AudioRecord capturedData = createAudioRecordForEvent(event); + + // Currently we need to start and release the audio record to reset + // the DSP even if we don't want to process the event + capturedData.startRecording(); + capturedData.release(); + } + })); } @Override public void onError(int status) { if (DEBUG) Slog.v(TAG, mPuuid + ": onError: " + status); - runOrAddOperation((opId, service) -> { - synchronized (mCallbacksLock) { - mCallbacks.remove(mPuuid.getUuid()); - } - mDestroyOnceRunningOpsDone = true; - - service.onError(mPuuid, opId, status); - }); + runOrAddOperation( + new Operation( + // always execute: + () -> { + // Unregister this remoteService once op is done + synchronized (mCallbacksLock) { + mCallbacks.remove(mPuuid.getUuid()); + } + mDestroyOnceRunningOpsDone = true; + }, + // execute if not throttled: + (opId, service) -> service.onError(mPuuid, opId, status), + // nothing to do if throttled + null)); } @Override diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index 72c67d378158..29898ffbd343 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -1299,13 +1299,18 @@ public class TelecomManager { } /** - * Ends an ongoing call. - * TODO: L-release - need to convert all invocations of ITelecomService#endCall to use this - * method (clockwork & gearhead). - * @hide + * Ends the foreground call on the device. + * <p> + * If there is a ringing call, calling this method rejects the ringing call. Otherwise the + * foreground call is ended. + * <p> + * Requires permission {@link android.Manifest.permission#ANSWER_PHONE_CALLS}. + * + * @return {@code true} if there is a call which will be rejected or terminated, {@code false} + * otherwise. */ + @RequiresPermission(Manifest.permission.ANSWER_PHONE_CALLS) @SystemApi - @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean endCall() { try { if (isServiceConnected()) { diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index a9389bea2452..ece646ca7b2c 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -1016,6 +1016,8 @@ public class SubscriptionManager { if (iSub != null) { // FIXME: This returns 1 on success, 0 on error should should we return it? iSub.addSubInfoRecord(iccId, slotIndex); + } else { + logd("[addSubscriptionInfoRecord]- ISub service is null"); } } catch (RemoteException ex) { // ignore it diff --git a/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/SoundTriggerTestService.java b/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/SoundTriggerTestService.java index 00bf33ad691e..b185a26bb972 100644 --- a/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/SoundTriggerTestService.java +++ b/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/SoundTriggerTestService.java @@ -435,9 +435,10 @@ public class SoundTriggerTestService extends Service { if (!file.getName().endsWith(".properties")) { continue; } - try { + + try (FileInputStream in = new FileInputStream(file)) { Properties properties = new Properties(); - properties.load(new FileInputStream(file)); + properties.load(in); createModelInfo(properties); loadedModel = true; } catch (Exception e) { diff --git a/tools/aapt2/link/ManifestFixer.cpp b/tools/aapt2/link/ManifestFixer.cpp index 165702ca42cd..bfff1487d4be 100644 --- a/tools/aapt2/link/ManifestFixer.cpp +++ b/tools/aapt2/link/ManifestFixer.cpp @@ -275,6 +275,23 @@ bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor, options_.version_code_default.value()}); } } + + if (el->FindAttribute("", "platformBuildVersionCode") == nullptr) { + auto versionCode = el->FindAttribute(xml::kSchemaAndroid, "versionCode"); + if (versionCode != nullptr) { + el->attributes.push_back(xml::Attribute{"", "platformBuildVersionCode", + versionCode->value}); + } + } + + if (el->FindAttribute("", "platformBuildVersionName") == nullptr) { + auto versionName = el->FindAttribute(xml::kSchemaAndroid, "versionName"); + if (versionName != nullptr) { + el->attributes.push_back(xml::Attribute{"", "platformBuildVersionName", + versionName->value}); + } + } + return true; }); diff --git a/tools/aapt2/link/ManifestFixer_test.cpp b/tools/aapt2/link/ManifestFixer_test.cpp index 8db937439c55..5f406e81f65d 100644 --- a/tools/aapt2/link/ManifestFixer_test.cpp +++ b/tools/aapt2/link/ManifestFixer_test.cpp @@ -556,6 +556,58 @@ TEST_F(ManifestFixerTest, UnexpectedElementsInManifest) { ASSERT_THAT(manifest, IsNull()); } +TEST_F(ManifestFixerTest, InsertPlatformBuildVersions) { + // Test for insertion when versionCode and versionName are included in the manifest + { + std::string input = R"( + <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" + android:versionCode="27" android:versionName="O"/>)"; + std::unique_ptr<xml::XmlResource> manifest = Verify(input); + ASSERT_THAT(manifest, NotNull()); + + xml::Attribute* attr = manifest->root->FindAttribute("", "platformBuildVersionCode"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("27")); + attr = manifest->root->FindAttribute("", "platformBuildVersionName"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("O")); + } + + // Test for insertion when versionCode and versionName defaults are specified + { + std::string input = R"( + <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android"/>)"; + ManifestFixerOptions options; + options.version_code_default = {"27"}; + options.version_name_default = {"O"}; + std::unique_ptr<xml::XmlResource> manifest = VerifyWithOptions(input, options); + ASSERT_THAT(manifest, NotNull()); + + xml::Attribute* attr = manifest->root->FindAttribute("", "platformBuildVersionCode"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("27")); + attr = manifest->root->FindAttribute("", "platformBuildVersionName"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("O")); + } + + // Test that the platform build version attributes are not changed if they are currently present + { + std::string input = R"( + <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" + android:versionCode="28" android:versionName="P" + platformBuildVersionCode="27" platformBuildVersionName="O"/>)"; + std::unique_ptr<xml::XmlResource> manifest = Verify(input); + ASSERT_THAT(manifest, NotNull()); + + xml::Attribute* attr = manifest->root->FindAttribute("", "platformBuildVersionCode"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("27")); + attr = manifest->root->FindAttribute("", "platformBuildVersionName"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("O")); + } +} TEST_F(ManifestFixerTest, UsesLibraryMustHaveNonEmptyName) { std::string input = R"( diff --git a/tools/incident_section_gen/main.cpp b/tools/incident_section_gen/main.cpp index 3f9588acf827..4e202df3134e 100644 --- a/tools/incident_section_gen/main.cpp +++ b/tools/incident_section_gen/main.cpp @@ -14,13 +14,12 @@ * limitations under the License. */ - #include <frameworks/base/core/proto/android/os/incident.pb.h> #include <map> #include <set> -#include <string> #include <sstream> +#include <string> using namespace android; using namespace android::os; @@ -422,7 +421,8 @@ static bool generateSectionListCpp(Descriptor const* descriptor) { printf(" NULL),\n"); break; case SECTION_DUMPSYS: - printf(" new DumpsysSection(%d,", field->number()); + printf(" new DumpsysSection(%d, \"%s\",", field->number(), + s.userdebug_and_eng_only() ? "true" : "false"); splitAndPrint(s.args()); printf(" NULL),\n"); break; diff --git a/tools/stats_log_api_gen/Android.bp b/tools/stats_log_api_gen/Android.bp index 026b54f5618a..280afadebc0f 100644 --- a/tools/stats_log_api_gen/Android.bp +++ b/tools/stats_log_api_gen/Android.bp @@ -109,23 +109,3 @@ cc_library_shared { ], static_libs: ["libstatssocket"], } - -cc_library_static { - name: "libstatssocket", - srcs: [ - "stats_event_list.c", - "statsd_writer.c", - ], - cflags: [ - "-Wall", - "-Werror", - "-DLIBLOG_LOG_TAG=1006", - "-DWRITE_TO_STATSD=1", - "-DWRITE_TO_LOGD=0", - ], - export_include_dirs: ["include"], - shared_libs: [ - "liblog", - ], -} - diff --git a/tools/stats_log_api_gen/include/stats_event_list.h b/tools/stats_log_api_gen/include/stats_event_list.h deleted file mode 100644 index c198d97c3862..000000000000 --- a/tools/stats_log_api_gen/include/stats_event_list.h +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (C) 2018, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_STATS_LOG_STATS_EVENT_LIST_H -#define ANDROID_STATS_LOG_STATS_EVENT_LIST_H - -#include <log/log_event_list.h> - -#ifdef __cplusplus -extern "C" { -#endif -void reset_log_context(android_log_context ctx); -int write_to_logger(android_log_context context, log_id_t id); - -#ifdef __cplusplus -} -#endif - -#ifdef __cplusplus -/** - * A copy of android_log_event_list class. - * - * android_log_event_list is going to be deprecated soon, so copy it here to - * avoid creating dependency on upstream code. TODO(b/78304629): Rewrite this - * code. - */ -class stats_event_list { -private: - android_log_context ctx; - int ret; - - stats_event_list(const stats_event_list&) = delete; - void operator=(const stats_event_list&) = delete; - -public: - explicit stats_event_list(int tag) : ret(0) { - ctx = create_android_logger(static_cast<uint32_t>(tag)); - } - explicit stats_event_list(log_msg& log_msg) : ret(0) { - ctx = create_android_log_parser(log_msg.msg() + sizeof(uint32_t), - log_msg.entry.len - sizeof(uint32_t)); - } - ~stats_event_list() { android_log_destroy(&ctx); } - - int close() { - int retval = android_log_destroy(&ctx); - if (retval < 0) { - ret = retval; - } - return retval; - } - - /* To allow above C calls to use this class as parameter */ - operator android_log_context() const { return ctx; } - - /* return errors or transmit status */ - int status() const { return ret; } - - int begin() { - int retval = android_log_write_list_begin(ctx); - if (retval < 0) { - ret = retval; - } - return ret; - } - int end() { - int retval = android_log_write_list_end(ctx); - if (retval < 0) { - ret = retval; - } - return ret; - } - - stats_event_list& operator<<(int32_t value) { - int retval = android_log_write_int32(ctx, value); - if (retval < 0) { - ret = retval; - } - return *this; - } - - stats_event_list& operator<<(uint32_t value) { - int retval = android_log_write_int32(ctx, static_cast<int32_t>(value)); - if (retval < 0) { - ret = retval; - } - return *this; - } - - stats_event_list& operator<<(bool value) { - int retval = android_log_write_int32(ctx, value ? 1 : 0); - if (retval < 0) { - ret = retval; - } - return *this; - } - - stats_event_list& operator<<(int64_t value) { - int retval = android_log_write_int64(ctx, value); - if (retval < 0) { - ret = retval; - } - return *this; - } - - stats_event_list& operator<<(uint64_t value) { - int retval = android_log_write_int64(ctx, static_cast<int64_t>(value)); - if (retval < 0) { - ret = retval; - } - return *this; - } - - stats_event_list& operator<<(const char* value) { - int retval = android_log_write_string8(ctx, value); - if (retval < 0) { - ret = retval; - } - return *this; - } - -#if defined(_USING_LIBCXX) - stats_event_list& operator<<(const std::string& value) { - int retval = android_log_write_string8_len(ctx, value.data(), - value.length()); - if (retval < 0) { - ret = retval; - } - return *this; - } -#endif - - stats_event_list& operator<<(float value) { - int retval = android_log_write_float32(ctx, value); - if (retval < 0) { - ret = retval; - } - return *this; - } - - int write(log_id_t id = LOG_ID_EVENTS) { - /* facilitate -EBUSY retry */ - if ((ret == -EBUSY) || (ret > 0)) { - ret = 0; - } - int retval = write_to_logger(ctx, id); - /* existing errors trump transmission errors */ - if (!ret) { - ret = retval; - } - return ret; - } - - /* - * Append<Type> methods removes any integer promotion - * confusion, and adds access to string with length. - * Append methods are also added for all types for - * convenience. - */ - - bool AppendInt(int32_t value) { - int retval = android_log_write_int32(ctx, value); - if (retval < 0) { - ret = retval; - } - return ret >= 0; - } - - bool AppendLong(int64_t value) { - int retval = android_log_write_int64(ctx, value); - if (retval < 0) { - ret = retval; - } - return ret >= 0; - } - - bool AppendString(const char* value) { - int retval = android_log_write_string8(ctx, value); - if (retval < 0) { - ret = retval; - } - return ret >= 0; - } - - bool AppendString(const char* value, size_t len) { - int retval = android_log_write_string8_len(ctx, value, len); - if (retval < 0) { - ret = retval; - } - return ret >= 0; - } - -#if defined(_USING_LIBCXX) - bool AppendString(const std::string& value) { - int retval = android_log_write_string8_len(ctx, value.data(), - value.length()); - if (retval < 0) { - ret = retval; - } - return ret; - } - - bool Append(const std::string& value) { - int retval = android_log_write_string8_len(ctx, value.data(), - value.length()); - if (retval < 0) { - ret = retval; - } - return ret; - } -#endif - - bool AppendFloat(float value) { - int retval = android_log_write_float32(ctx, value); - if (retval < 0) { - ret = retval; - } - return ret >= 0; - } - - template <typename Tvalue> - bool Append(Tvalue value) { - *this << value; - return ret >= 0; - } - - bool Append(const char* value, size_t len) { - int retval = android_log_write_string8_len(ctx, value, len); - if (retval < 0) { - ret = retval; - } - return ret >= 0; - } - - android_log_list_element read() { return android_log_read_next(ctx); } - android_log_list_element peek() { return android_log_peek_next(ctx); } -}; - -#endif -#endif // ANDROID_STATS_LOG_STATS_EVENT_LIST_H diff --git a/tools/stats_log_api_gen/stats_event_list.c b/tools/stats_log_api_gen/stats_event_list.c deleted file mode 100644 index 0a342a817a46..000000000000 --- a/tools/stats_log_api_gen/stats_event_list.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (C) 2018, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "include/stats_event_list.h" - -#include <string.h> -#include "statsd_writer.h" - -#define MAX_EVENT_PAYLOAD (LOGGER_ENTRY_MAX_PAYLOAD - sizeof(int32_t)) - -typedef struct { - uint32_t tag; - unsigned pos; /* Read/write position into buffer */ - unsigned count[ANDROID_MAX_LIST_NEST_DEPTH + 1]; /* Number of elements */ - unsigned list[ANDROID_MAX_LIST_NEST_DEPTH + 1]; /* pos for list counter */ - unsigned list_nest_depth; - unsigned len; /* Length or raw buffer. */ - bool overflow; - bool list_stop; /* next call decrement list_nest_depth and issue a stop */ - enum { - kAndroidLoggerRead = 1, - kAndroidLoggerWrite = 2, - } read_write_flag; - uint8_t storage[LOGGER_ENTRY_MAX_PAYLOAD]; -} android_log_context_internal; - -extern struct android_log_transport_write statsdLoggerWrite; - -static int __write_to_statsd_init(struct iovec* vec, size_t nr); -static int (*write_to_statsd)(struct iovec* vec, - size_t nr) = __write_to_statsd_init; - -// Similar to create_android_logger(), but instead of allocation a new buffer, -// this function resets the buffer for resuse. -void reset_log_context(android_log_context ctx) { - if (!ctx) { - return; - } - android_log_context_internal* context = - (android_log_context_internal*)(ctx); - uint32_t tag = context->tag; - memset(context, 0, sizeof(android_log_context_internal)); - - context->tag = tag; - context->read_write_flag = kAndroidLoggerWrite; - size_t needed = sizeof(uint8_t) + sizeof(uint8_t); - if ((context->pos + needed) > MAX_EVENT_PAYLOAD) { - context->overflow = true; - } - /* Everything is a list */ - context->storage[context->pos + 0] = EVENT_TYPE_LIST; - context->list[0] = context->pos + 1; - context->pos += needed; -} - -int stats_write_list(android_log_context ctx) { - android_log_context_internal* context; - const char* msg; - ssize_t len; - - context = (android_log_context_internal*)(ctx); - if (!context || (kAndroidLoggerWrite != context->read_write_flag)) { - return -EBADF; - } - - if (context->list_nest_depth) { - return -EIO; - } - - /* NB: if there was overflow, then log is truncated. Nothing reported */ - context->storage[1] = context->count[0]; - len = context->len = context->pos; - msg = (const char*)context->storage; - /* it's not a list */ - if (context->count[0] <= 1) { - len -= sizeof(uint8_t) + sizeof(uint8_t); - if (len < 0) { - len = 0; - } - msg += sizeof(uint8_t) + sizeof(uint8_t); - } - - struct iovec vec[2]; - vec[0].iov_base = &context->tag; - vec[0].iov_len = sizeof(context->tag); - vec[1].iov_base = (void*)msg; - vec[1].iov_len = len; - return write_to_statsd(vec, 2); -} - -int write_to_logger(android_log_context ctx, log_id_t id) { - int retValue = 0; - - if (WRITE_TO_LOGD) { - retValue = android_log_write_list(ctx, id); - } - - if (WRITE_TO_STATSD) { - // log_event_list's cast operator is overloaded. - int ret = stats_write_list(ctx); - // In debugging phase, we may write to both logd and statsd. Prefer to - // return statsd socket write error code here. - if (ret < 0) { - retValue = ret; - } - } - - return retValue; -} - -/* log_init_lock assumed */ -static int __write_to_statsd_initialize_locked() { - if (!statsdLoggerWrite.open || ((*statsdLoggerWrite.open)() < 0)) { - if (statsdLoggerWrite.close) { - (*statsdLoggerWrite.close)(); - return -ENODEV; - } - } - return 1; -} - -static int __write_to_stats_daemon(struct iovec* vec, size_t nr) { - int ret, save_errno; - struct timespec ts; - size_t len, i; - - for (len = i = 0; i < nr; ++i) { - len += vec[i].iov_len; - } - if (!len) { - return -EINVAL; - } - - save_errno = errno; - clock_gettime(CLOCK_REALTIME, &ts); - - ret = 0; - - ssize_t retval; - retval = (*statsdLoggerWrite.write)(&ts, vec, nr); - if (ret >= 0) { - ret = retval; - } - - errno = save_errno; - return ret; -} - -static int __write_to_statsd_init(struct iovec* vec, size_t nr) { - int ret, save_errno = errno; - - statsd_writer_init_lock(); - - if (write_to_statsd == __write_to_statsd_init) { - ret = __write_to_statsd_initialize_locked(); - if (ret < 0) { - statsd_writer_init_unlock(); - errno = save_errno; - return ret; - } - - write_to_statsd = __write_to_stats_daemon; - } - - statsd_writer_init_unlock(); - - ret = write_to_statsd(vec, nr); - errno = save_errno; - return ret; -}
\ No newline at end of file diff --git a/tools/stats_log_api_gen/statsd_writer.c b/tools/stats_log_api_gen/statsd_writer.c deleted file mode 100644 index 3e1035899102..000000000000 --- a/tools/stats_log_api_gen/statsd_writer.c +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (C) 2018, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "statsd_writer.h" - -#include <cutils/sockets.h> -#include <endian.h> -#include <errno.h> -#include <fcntl.h> -#include <inttypes.h> -#include <poll.h> -#include <private/android_filesystem_config.h> -#include <private/android_logger.h> -#include <stdarg.h> -#include <stdatomic.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <sys/un.h> -#include <time.h> -#include <unistd.h> - -/* branchless on many architectures. */ -#define min(x, y) ((y) ^ (((x) ^ (y)) & -((x) < (y)))) - -static pthread_mutex_t log_init_lock = PTHREAD_MUTEX_INITIALIZER; - -void statsd_writer_init_lock() { - /* - * If we trigger a signal handler in the middle of locked activity and the - * signal handler logs a message, we could get into a deadlock state. - */ - pthread_mutex_lock(&log_init_lock); -} - -int statd_writer_trylock() { - return pthread_mutex_trylock(&log_init_lock); -} - -void statsd_writer_init_unlock() { - pthread_mutex_unlock(&log_init_lock); -} - -static int statsdAvailable(); -static int statsdOpen(); -static void statsdClose(); -static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr); - -struct android_log_transport_write statsdLoggerWrite = { - .name = "statsd", - .sock = -EBADF, - .available = statsdAvailable, - .open = statsdOpen, - .close = statsdClose, - .write = statsdWrite, -}; - -/* log_init_lock assumed */ -static int statsdOpen() { - int i, ret = 0; - - i = atomic_load(&statsdLoggerWrite.sock); - if (i < 0) { - int sock = TEMP_FAILURE_RETRY( - socket(PF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0)); - if (sock < 0) { - ret = -errno; - } else { - struct sockaddr_un un; - memset(&un, 0, sizeof(struct sockaddr_un)); - un.sun_family = AF_UNIX; - strcpy(un.sun_path, "/dev/socket/statsdw"); - - if (TEMP_FAILURE_RETRY(connect(sock, (struct sockaddr*)&un, - sizeof(struct sockaddr_un))) < 0) { - ret = -errno; - switch (ret) { - case -ENOTCONN: - case -ECONNREFUSED: - case -ENOENT: - i = atomic_exchange(&statsdLoggerWrite.sock, ret); - /* FALLTHRU */ - default: - break; - } - close(sock); - } else { - ret = atomic_exchange(&statsdLoggerWrite.sock, sock); - if ((ret >= 0) && (ret != sock)) { - close(ret); - } - ret = 0; - } - } - } - - return ret; -} - -static void __statsdClose(int negative_errno) { - int sock = atomic_exchange(&statsdLoggerWrite.sock, negative_errno); - if (sock >= 0) { - close(sock); - } -} - -static void statsdClose() { - __statsdClose(-EBADF); -} - -static int statsdAvailable() { - if (atomic_load(&statsdLoggerWrite.sock) < 0) { - if (access("/dev/socket/statsdw", W_OK) == 0) { - return 0; - } - return -EBADF; - } - return 1; -} - -static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr) { - ssize_t ret; - int sock; - static const unsigned headerLength = 1; - struct iovec newVec[nr + headerLength]; - android_log_header_t header; - size_t i, payloadSize; - static atomic_int dropped; - - sock = atomic_load(&statsdLoggerWrite.sock); - if (sock < 0) - switch (sock) { - case -ENOTCONN: - case -ECONNREFUSED: - case -ENOENT: - break; - default: - return -EBADF; - } - /* - * struct { - * // what we provide to socket - * android_log_header_t header; - * // caller provides - * union { - * struct { - * char prio; - * char payload[]; - * } string; - * struct { - * uint32_t tag - * char payload[]; - * } binary; - * }; - * }; - */ - - header.tid = gettid(); - header.realtime.tv_sec = ts->tv_sec; - header.realtime.tv_nsec = ts->tv_nsec; - - newVec[0].iov_base = (unsigned char*)&header; - newVec[0].iov_len = sizeof(header); - - // If we dropped events before, try to tell statsd. - if (sock >= 0) { - int32_t snapshot = - atomic_exchange_explicit(&dropped, 0, memory_order_relaxed); - if (snapshot) { - android_log_event_int_t buffer; - header.id = LOG_ID_STATS; - buffer.header.tag = htole32(LIBLOG_LOG_TAG); - buffer.payload.type = EVENT_TYPE_INT; - buffer.payload.data = htole32(snapshot); - - newVec[headerLength].iov_base = &buffer; - newVec[headerLength].iov_len = sizeof(buffer); - - ret = TEMP_FAILURE_RETRY(writev(sock, newVec, 2)); - if (ret != (ssize_t)(sizeof(header) + sizeof(buffer))) { - atomic_fetch_add_explicit(&dropped, snapshot, - memory_order_relaxed); - } - } - } - - header.id = LOG_ID_STATS; - - for (payloadSize = 0, i = headerLength; i < nr + headerLength; i++) { - newVec[i].iov_base = vec[i - headerLength].iov_base; - payloadSize += newVec[i].iov_len = vec[i - headerLength].iov_len; - - if (payloadSize > LOGGER_ENTRY_MAX_PAYLOAD) { - newVec[i].iov_len -= payloadSize - LOGGER_ENTRY_MAX_PAYLOAD; - if (newVec[i].iov_len) { - ++i; - } - break; - } - } - - /* - * The write below could be lost, but will never block. - * - * ENOTCONN occurs if statsd has died. - * ENOENT occurs if statsd is not running and socket is missing. - * ECONNREFUSED occurs if we can not reconnect to statsd. - * EAGAIN occurs if statsd is overloaded. - */ - if (sock < 0) { - ret = sock; - } else { - ret = TEMP_FAILURE_RETRY(writev(sock, newVec, i)); - if (ret < 0) { - ret = -errno; - } - } - switch (ret) { - case -ENOTCONN: - case -ECONNREFUSED: - case -ENOENT: - if (statd_writer_trylock()) { - return ret; /* in a signal handler? try again when less stressed - */ - } - __statsdClose(ret); - ret = statsdOpen(); - statsd_writer_init_unlock(); - - if (ret < 0) { - return ret; - } - - ret = TEMP_FAILURE_RETRY( - writev(atomic_load(&statsdLoggerWrite.sock), newVec, i)); - if (ret < 0) { - ret = -errno; - } - /* FALLTHRU */ - default: - break; - } - - if (ret > (ssize_t)sizeof(header)) { - ret -= sizeof(header); - } else if (ret == -EAGAIN) { - atomic_fetch_add_explicit(&dropped, 1, memory_order_relaxed); - } - - return ret; -} diff --git a/tools/stats_log_api_gen/statsd_writer.h b/tools/stats_log_api_gen/statsd_writer.h deleted file mode 100644 index 1043afbd10a4..000000000000 --- a/tools/stats_log_api_gen/statsd_writer.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2018, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_STATS_LOG_STATS_WRITER_H -#define ANDROID_STATS_LOG_STATS_WRITER_H - -#include <pthread.h> -#include <stdatomic.h> -#include <sys/socket.h> - -/** - * Internal lock should not be exposed. This is bad design. - * TODO: rewrite it in c++ code and encapsulate the functionality in a - * StatsdWriter class. - */ -void statsd_writer_init_lock(); -int statsd_writer_init_trylock(); -void statsd_writer_init_unlock(); - -struct android_log_transport_write { - const char* name; /* human name to describe the transport */ - atomic_int sock; - int (*available)(); /* Does not cause resources to be taken */ - int (*open)(); /* can be called multiple times, reusing current resources */ - void (*close)(); /* free up resources */ - /* write log to transport, returns number of bytes propagated, or -errno */ - int (*write)(struct timespec* ts, struct iovec* vec, size_t nr); -}; - - -#endif // ANDROID_STATS_LOG_STATS_WRITER_H |