Merge "androidfw changes to support /product-services."
diff --git a/Android.bp b/Android.bp
index 7658fb2..1586440 100644
--- a/Android.bp
+++ b/Android.bp
@@ -801,6 +801,40 @@
},
}
+// ==== java proto device library (for test only) ==============================
+java_library {
+ name: "platformprotosnano",
+ proto: {
+ type: "nano",
+ output_params: ["store_unknown_fields=true"],
+ include_dirs: ["external/protobuf/src"],
+ },
+
+ sdk_version: "current",
+ srcs: [
+ "core/proto/**/*.proto",
+ "libs/incident/proto/android/os/**/*.proto",
+ ],
+}
+
+// ==== java proto device library (for test only) ==============================
+java_library {
+ name: "platformprotoslite",
+ proto: {
+ type: "lite",
+ include_dirs: ["external/protobuf/src"],
+ },
+
+ srcs: [
+ "core/proto/**/*.proto",
+ "libs/incident/proto/android/os/**/*.proto",
+ ],
+ // Protos have lots of MissingOverride and similar.
+ errorprone: {
+ javacflags: ["-XepDisableAllChecks"],
+ },
+}
+
// ==== c++ proto device library ==============================
cc_library {
name: "libplatformprotos",
@@ -1022,10 +1056,6 @@
":openjdk_javadoc_files",
":non_openjdk_javadoc_files",
":android_icu4j_src_files_for_docs",
- ":gen-ojluni-jaif-annotated-srcs",
- ],
- exclude_srcs: [
- ":annotated_ojluni_files",
],
srcs_lib: "framework",
srcs_lib_whitelist_dirs: frameworks_base_subdirs,
@@ -1072,13 +1102,9 @@
":openjdk_javadoc_files",
":non_openjdk_javadoc_files",
":android_icu4j_src_files_for_docs",
- ":gen-ojluni-jaif-annotated-srcs",
"test-mock/src/**/*.java",
"test-runner/src/**/*.java",
],
- exclude_srcs: [
- ":annotated_ojluni_files",
- ],
srcs_lib: "framework",
srcs_lib_whitelist_dirs: frameworks_base_subdirs,
srcs_lib_whitelist_pkgs: packages_to_document,
@@ -1457,10 +1483,6 @@
":openjdk_javadoc_files",
":non_openjdk_javadoc_files",
":android_icu4j_src_files_for_docs",
- ":gen-ojluni-jaif-annotated-srcs",
- ],
- exclude_srcs: [
- ":annotated_ojluni_files",
],
srcs_lib: "framework",
srcs_lib_whitelist_dirs: frameworks_base_subdirs,
@@ -1497,6 +1519,12 @@
"core/res/AndroidManifest.xml",
],
args: metalava_framework_docs_args,
+ check_api: {
+ current: {
+ api_file: "api/current.txt",
+ removed_api_file: "api/removed.txt",
+ },
+ },
}
droiddoc {
@@ -1511,6 +1539,12 @@
"core/res/AndroidManifest.xml",
],
args: metalava_framework_docs_args + " --show-annotation android.annotation.SystemApi",
+ check_api: {
+ current: {
+ api_file: "api/system-current.txt",
+ removed_api_file: "api/system-removed.txt",
+ },
+ },
}
droiddoc {
@@ -1523,4 +1557,10 @@
"core/res/AndroidManifest.xml",
],
args: metalava_framework_docs_args + " --show-annotation android.annotation.TestApi",
+ check_api: {
+ current: {
+ api_file: "api/test-current.txt",
+ removed_api_file: "api/test-removed.txt",
+ },
+ },
}
diff --git a/Android.mk b/Android.mk
index edbb94d..29454e4 100644
--- a/Android.mk
+++ b/Android.mk
@@ -321,36 +321,6 @@
$(hide) mkdir -p $(OUT_DOCS)/offline-sdk
( unzip -qo $< -d $(OUT_DOCS)/offline-sdk && touch -f $@ ) || exit 1
-# ==== java proto device library (for test only) ==============================
-include $(CLEAR_VARS)
-LOCAL_MODULE := platformprotosnano
-LOCAL_MODULE_TAGS := tests
-LOCAL_PROTOC_OPTIMIZE_TYPE := nano
-LOCAL_PROTOC_FLAGS := \
- -Iexternal/protobuf/src
-LOCAL_PROTO_JAVA_OUTPUT_PARAMS := \
- store_unknown_fields = true
-LOCAL_SDK_VERSION := current
-LOCAL_SRC_FILES := \
- $(call all-proto-files-under, core/proto) \
- $(call all-proto-files-under, libs/incident/proto/android/os)
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-
-# ==== java proto device library (for test only) ==============================
-include $(CLEAR_VARS)
-LOCAL_MODULE := platformprotoslite
-LOCAL_MODULE_TAGS := tests
-LOCAL_PROTOC_OPTIMIZE_TYPE := lite
-LOCAL_PROTOC_FLAGS := \
- -Iexternal/protobuf/src
-LOCAL_SRC_FILES := \
- $(call all-proto-files-under, core/proto) \
- $(call all-proto-files-under, libs/incident/proto/android/os)
-# Protos have lots of MissingOverride and similar.
-LOCAL_ERROR_PRONE_FLAGS := -XepDisableAllChecks
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
# ==== hiddenapi lists =======================================
include $(CLEAR_VARS)
diff --git a/api/current.txt b/api/current.txt
index 4a4ccab..fc595ac 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -15190,7 +15190,7 @@
package android.graphics.fonts {
- public class Font {
+ public final class Font {
method public android.graphics.fonts.FontVariationAxis[] getAxes();
method public int getTtcIndex();
method public int getWeight();
@@ -15208,12 +15208,12 @@
public static class Font.Builder {
ctor public Font.Builder(java.nio.ByteBuffer);
- ctor public Font.Builder(java.io.File) throws java.io.IOException;
- ctor public Font.Builder(java.io.FileDescriptor) throws java.io.IOException;
- ctor public Font.Builder(java.io.FileDescriptor, long, long) throws java.io.IOException;
- ctor public Font.Builder(android.content.res.AssetManager, java.lang.String) throws java.io.IOException;
- ctor public Font.Builder(android.content.res.Resources, int) throws java.io.IOException;
- method public android.graphics.fonts.Font build();
+ ctor public Font.Builder(java.io.File);
+ ctor public Font.Builder(java.io.FileDescriptor);
+ ctor public Font.Builder(java.io.FileDescriptor, long, long);
+ ctor public Font.Builder(android.content.res.AssetManager, java.lang.String);
+ ctor public Font.Builder(android.content.res.Resources, int);
+ method public android.graphics.fonts.Font build() throws java.io.IOException;
method public android.graphics.fonts.Font.Builder setFontVariationSettings(java.lang.String);
method public android.graphics.fonts.Font.Builder setFontVariationSettings(android.graphics.fonts.FontVariationAxis[]);
method public android.graphics.fonts.Font.Builder setItalic(boolean);
@@ -15221,9 +15221,9 @@
method public android.graphics.fonts.Font.Builder setWeight(int);
}
- public class FontFamily {
+ public final class FontFamily {
method public android.graphics.fonts.Font getFont(int);
- method public int getFontCount();
+ method public int getSize();
}
public static class FontFamily.Builder {
@@ -39005,6 +39005,7 @@
public static class CustomDescription.Builder {
ctor public CustomDescription.Builder(android.widget.RemoteViews);
method public android.service.autofill.CustomDescription.Builder addChild(int, android.service.autofill.Transformation);
+ method public android.service.autofill.CustomDescription.Builder addOnClickAction(int, android.service.autofill.OnClickAction);
method public android.service.autofill.CustomDescription.Builder batchUpdate(android.service.autofill.Validator, android.service.autofill.BatchUpdates);
method public android.service.autofill.CustomDescription build();
}
@@ -39143,6 +39144,9 @@
field public static final android.os.Parcelable.Creator<android.service.autofill.LuhnChecksumValidator> CREATOR;
}
+ public abstract interface OnClickAction {
+ }
+
public final class RegexValidator implements android.os.Parcelable android.service.autofill.Validator {
ctor public RegexValidator(android.view.autofill.AutofillId, java.util.regex.Pattern);
method public int describeContents();
@@ -39238,6 +39242,18 @@
method public static android.service.autofill.Validator or(android.service.autofill.Validator...);
}
+ public final class VisibilitySetterAction implements android.service.autofill.OnClickAction android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.service.autofill.VisibilitySetterAction> CREATOR;
+ }
+
+ public static class VisibilitySetterAction.Builder {
+ ctor public VisibilitySetterAction.Builder(int, int);
+ method public android.service.autofill.VisibilitySetterAction build();
+ method public android.service.autofill.VisibilitySetterAction.Builder setVisibility(int, int);
+ }
+
}
package android.service.carrier {
diff --git a/api/test-current.txt b/api/test-current.txt
index 3fa202f..1657de5 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -8,6 +8,8 @@
field public static final java.lang.String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS";
field public static final java.lang.String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
field public static final java.lang.String READ_CELL_BROADCASTS = "android.permission.READ_CELL_BROADCASTS";
+ field public static final java.lang.String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES";
+ field public static final java.lang.String CHANGE_CONFIGURATION = "android.permission.CHANGE_CONFIGURATION";
}
}
@@ -30,6 +32,8 @@
method public long getTotalRam();
method public int getUidImportance(int);
method public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener);
+ method public void forceStopPackage(java.lang.String);
+ method public void scheduleApplicationInfoChanged(java.util.List<java.lang.String>, int);
}
public static abstract interface ActivityManager.OnUidImportanceListener {
@@ -56,6 +60,14 @@
method public void setTaskWindowingModeSplitScreenPrimary(int, int, boolean, boolean, android.graphics.Rect, boolean) throws java.lang.SecurityException;
method public static boolean supportsMultiWindow(android.content.Context);
method public static boolean supportsSplitScreenMultiWindow(android.content.Context);
+ method public boolean moveTopActivityToPinnedStack(int, android.graphics.Rect);
+ method public void startSystemLockTaskMode(int);
+ method public void stopSystemLockTaskMode();
+ method public void moveTaskToStack(int, int, boolean);
+ method public void resizeStack(int, android.graphics.Rect, boolean);
+ method public void resizeTask(int, android.graphics.Rect);
+ method public void resizeDockedStack(android.graphics.Rect,android.graphics.Rect);
+ method public java.lang.String listAllStacks();
field public static final int INVALID_STACK_ID = -1; // 0xffffffff
field public static final int SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT = 1; // 0x1
field public static final int SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT = 0; // 0x0
@@ -986,6 +998,10 @@
method public void apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int) throws java.lang.Exception;
}
+ public final class CustomDescription implements android.os.Parcelable {
+ method public android.util.SparseArray<android.service.autofill.InternalOnClickAction> getActions();
+ }
+
public final class DateTransformation extends android.service.autofill.InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
method public void apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int) throws java.lang.Exception;
}
@@ -1002,6 +1018,11 @@
method public void apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int) throws java.lang.Exception;
}
+ public abstract class InternalOnClickAction implements android.service.autofill.OnClickAction android.os.Parcelable {
+ ctor public InternalOnClickAction();
+ method public abstract void onClick(android.view.ViewGroup);
+ }
+
public abstract class InternalSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
ctor public InternalSanitizer();
}
@@ -1032,6 +1053,10 @@
method public abstract android.view.autofill.AutofillValue findRawValueByAutofillId(android.view.autofill.AutofillId);
}
+ public final class VisibilitySetterAction extends android.service.autofill.InternalOnClickAction implements android.service.autofill.OnClickAction android.os.Parcelable {
+ method public void onClick(android.view.ViewGroup);
+ }
+
}
package android.service.notification {
@@ -1456,6 +1481,7 @@
public final class MotionEvent extends android.view.InputEvent implements android.os.Parcelable {
method public void setActionButton(int);
method public void setButtonState(int);
+ method public void setDisplayId(int);
}
public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
index 043b7f9..a826ec7 100644
--- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
+++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
@@ -845,6 +845,7 @@
System.err.println(" bmgr fullbackup PACKAGE...");
System.err.println(" bmgr backupnow [--monitor|--monitor-verbose] --all|PACKAGE...");
System.err.println(" bmgr cancel backups");
+ System.err.println(" bmgr init TRANSPORT...");
System.err.println("");
System.err.println("The 'backup' command schedules a backup pass for the named package.");
System.err.println("Note that the backup pass will effectively be a no-op if the package");
@@ -902,7 +903,11 @@
System.err.println("For each package it will run key/value or full data backup ");
System.err.println("depending on the package's manifest declarations.");
System.err.println("The data is sent via the currently active transport.");
+ System.err.println("");
System.err.println("The 'cancel backups' command cancels all running backups.");
+ System.err.println("");
+ System.err.println("The 'init' command initializes the given transports, wiping all data");
+ System.err.println("from their backing data stores.");
}
private static class BackupMonitor extends IBackupManagerMonitor.Stub {
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index d7a926f..6065bbf 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -127,6 +127,7 @@
WTFOccurred wtf_occurred = 80;
LowMemReported low_mem_reported = 81;
GenericAtom generic_atom = 82;
+ KeyValuePairsAtom key_value_pairs_atom = 83;
}
// Pulled events will start at field 10000.
@@ -177,6 +178,20 @@
optional string tag = 2;
}
+message KeyValuePair {
+ optional int32 key = 1;
+ oneof value {
+ int64 value_int = 2;
+ string value_str = 3;
+ float value_float = 4;
+ }
+}
+
+message KeyValuePairsAtom {
+ optional int32 uid = 1;
+ repeated KeyValuePair pairs = 2;
+}
+
/*
* *****************************************************************************
* Below are all of the individual atoms that are logged by Android via statsd.
diff --git a/cmds/statsd/src/logd/LogEvent.cpp b/cmds/statsd/src/logd/LogEvent.cpp
index 04d34f3..73e6572 100644
--- a/cmds/statsd/src/logd/LogEvent.cpp
+++ b/cmds/statsd/src/logd/LogEvent.cpp
@@ -18,6 +18,7 @@
#include "logd/LogEvent.h"
#include "stats_log_util.h"
+#include "statslog.h"
namespace android {
namespace os {
@@ -51,6 +52,52 @@
}
}
+LogEvent::LogEvent(int32_t tagId, int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,
+ int32_t uid,
+ const std::map<int32_t, int64_t>& int_map,
+ const std::map<int32_t, std::string>& string_map,
+ const std::map<int32_t, float>& float_map) {
+ mLogdTimestampNs = wallClockTimestampNs;
+ mElapsedTimestampNs = elapsedTimestampNs;
+ mTagId = android::util::KEY_VALUE_PAIRS_ATOM;
+ mLogUid = uid;
+
+ int pos[] = {1, 1, 1};
+
+ mValues.push_back(FieldValue(Field(mTagId, pos, 0 /* depth */), Value(uid)));
+ pos[0]++;
+ for (const auto&itr : int_map) {
+ pos[2] = 1;
+ mValues.push_back(FieldValue(Field(mTagId, pos, 2 /* depth */), Value(itr.first)));
+ pos[2] = 2;
+ mValues.push_back(FieldValue(Field(mTagId, pos, 2 /* depth */), Value(itr.second)));
+ mValues.back().mField.decorateLastPos(2);
+ pos[1]++;
+ }
+
+ for (const auto&itr : string_map) {
+ pos[2] = 1;
+ mValues.push_back(FieldValue(Field(mTagId, pos, 2 /* depth */), Value(itr.first)));
+ pos[2] = 3;
+ mValues.push_back(FieldValue(Field(mTagId, pos, 2 /* depth */), Value(itr.second)));
+ mValues.back().mField.decorateLastPos(2);
+ pos[1]++;
+ }
+
+ for (const auto&itr : float_map) {
+ pos[2] = 1;
+ mValues.push_back(FieldValue(Field(mTagId, pos, 2 /* depth */), Value(itr.first)));
+ pos[2] = 4;
+ mValues.push_back(FieldValue(Field(mTagId, pos, 2 /* depth */), Value(itr.second)));
+ mValues.back().mField.decorateLastPos(2);
+ pos[1]++;
+ }
+ if (!mValues.empty()) {
+ mValues.back().mField.decorateLastPos(1);
+ mValues.at(mValues.size() - 2).mField.decorateLastPos(1);
+ }
+}
+
LogEvent::LogEvent(int32_t tagId, int64_t timestampNs) {
mLogdTimestampNs = timestampNs;
mTagId = tagId;
diff --git a/cmds/statsd/src/logd/LogEvent.h b/cmds/statsd/src/logd/LogEvent.h
index 24d624d..9ed09dd 100644
--- a/cmds/statsd/src/logd/LogEvent.h
+++ b/cmds/statsd/src/logd/LogEvent.h
@@ -69,6 +69,15 @@
// For testing. The timestamp is used as both elapsed real time and logd timestamp.
explicit LogEvent(int32_t tagId, int64_t timestampNs);
+ /**
+ * Constructs a KeyValuePairsAtom LogEvent from value maps.
+ */
+ explicit LogEvent(int32_t tagId, int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,
+ int32_t uid,
+ const std::map<int32_t, int64_t>& int_map,
+ const std::map<int32_t, std::string>& string_map,
+ const std::map<int32_t, float>& float_map);
+
~LogEvent();
/**
diff --git a/cmds/statsd/tests/LogEvent_test.cpp b/cmds/statsd/tests/LogEvent_test.cpp
index 2fcde29..acfa151 100644
--- a/cmds/statsd/tests/LogEvent_test.cpp
+++ b/cmds/statsd/tests/LogEvent_test.cpp
@@ -158,6 +158,96 @@
EXPECT_EQ((float)1.1, item7.mValue.float_value);
}
+TEST(LogEventTest, TestKeyValuePairsAtomParsing) {
+ std::map<int32_t, int64_t> int_map;
+ std::map<int32_t, std::string> string_map;
+ std::map<int32_t, float> float_map;
+
+ int_map[11] = 123L;
+ int_map[22] = 345L;
+
+ string_map[1] = "test2";
+ string_map[2] = "test1";
+
+ float_map[111] = 2.2f;
+ float_map[222] = 1.1f;
+
+ LogEvent event1(83, 2000, 2001, 10001, int_map, string_map, float_map);
+ event1.init();
+
+ EXPECT_EQ(83, event1.GetTagId());
+ EXPECT_EQ((int64_t)2000, event1.GetLogdTimestampNs());
+ EXPECT_EQ((int64_t)2001, event1.GetElapsedTimestampNs());
+
+ const auto& items = event1.getValues();
+ EXPECT_EQ((size_t)13, items.size());
+
+ const FieldValue& item0 = event1.getValues()[0];
+ EXPECT_EQ(0x00010000, item0.mField.getField());
+ EXPECT_EQ(Type::INT, item0.mValue.getType());
+ EXPECT_EQ(10001, item0.mValue.int_value);
+
+ const FieldValue& item1 = event1.getValues()[1];
+ EXPECT_EQ(0x2020101, item1.mField.getField());
+ EXPECT_EQ(Type::INT, item1.mValue.getType());
+ EXPECT_EQ(11, item1.mValue.int_value);
+
+ const FieldValue& item2 = event1.getValues()[2];
+ EXPECT_EQ(0x2020182, item2.mField.getField());
+ EXPECT_EQ(Type::LONG, item2.mValue.getType());
+ EXPECT_EQ(123L, item2.mValue.long_value);
+
+ const FieldValue& item3 = event1.getValues()[3];
+ EXPECT_EQ(0x2020201, item3.mField.getField());
+ EXPECT_EQ(Type::INT, item3.mValue.getType());
+ EXPECT_EQ(22, item3.mValue.int_value);
+
+ const FieldValue& item4 = event1.getValues()[4];
+ EXPECT_EQ(0x2020282, item4.mField.getField());
+ EXPECT_EQ(Type::LONG, item4.mValue.getType());
+ EXPECT_EQ(345L, item4.mValue.long_value);
+
+ const FieldValue& item5 = event1.getValues()[5];
+ EXPECT_EQ(0x2020301, item5.mField.getField());
+ EXPECT_EQ(Type::INT, item5.mValue.getType());
+ EXPECT_EQ(1, item5.mValue.int_value);
+
+ const FieldValue& item6 = event1.getValues()[6];
+ EXPECT_EQ(0x2020383, item6.mField.getField());
+ EXPECT_EQ(Type::STRING, item6.mValue.getType());
+ EXPECT_EQ("test2", item6.mValue.str_value);
+
+ const FieldValue& item7 = event1.getValues()[7];
+ EXPECT_EQ(0x2020401, item7.mField.getField());
+ EXPECT_EQ(Type::INT, item7.mValue.getType());
+ EXPECT_EQ(2, item7.mValue.int_value);
+
+ const FieldValue& item8 = event1.getValues()[8];
+ EXPECT_EQ(0x2020483, item8.mField.getField());
+ EXPECT_EQ(Type::STRING, item8.mValue.getType());
+ EXPECT_EQ("test1", item8.mValue.str_value);
+
+ const FieldValue& item9 = event1.getValues()[9];
+ EXPECT_EQ(0x2020501, item9.mField.getField());
+ EXPECT_EQ(Type::INT, item9.mValue.getType());
+ EXPECT_EQ(111, item9.mValue.int_value);
+
+ const FieldValue& item10 = event1.getValues()[10];
+ EXPECT_EQ(0x2020584, item10.mField.getField());
+ EXPECT_EQ(Type::FLOAT, item10.mValue.getType());
+ EXPECT_EQ(2.2f, item10.mValue.float_value);
+
+ const FieldValue& item11 = event1.getValues()[11];
+ EXPECT_EQ(0x2028601, item11.mField.getField());
+ EXPECT_EQ(Type::INT, item11.mValue.getType());
+ EXPECT_EQ(222, item11.mValue.int_value);
+
+ const FieldValue& item12 = event1.getValues()[12];
+ EXPECT_EQ(0x2028684, item12.mField.getField());
+ EXPECT_EQ(Type::FLOAT, item12.mValue.getType());
+ EXPECT_EQ(1.1f, item12.mValue.float_value);
+}
+
} // namespace statsd
} // namespace os
diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt
index 0e0a8c7..3a96cd3 100644
--- a/config/hiddenapi-light-greylist.txt
+++ b/config/hiddenapi-light-greylist.txt
@@ -455,6 +455,59 @@
Landroid/database/IContentObserver;->onChange(ZLandroid/net/Uri;I)V
Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_VENDOR_BASE:I
Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_VENDOR_BASE:I
+Landroid/hardware/camera2/CameraCharacteristics;->CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->CONTROL_MAX_REGIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->LED_AVAILABLE_LEDS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->LENS_INFO_SHADING_MAP_SIZE:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->LOGICAL_MULTI_CAMERA_PHYSICAL_IDS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->QUIRKS_USE_PARTIAL_RESULT:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_AVAILABLE_CHARACTERISTICS_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_AVAILABLE_REQUEST_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_AVAILABLE_RESULT_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_AVAILABLE_SESSION_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_MAX_NUM_OUTPUT_STREAMS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_FORMATS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_JPEG_MIN_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_JPEG_SIZES:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_MIN_FRAME_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+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;->JPEG_GPS_COORDINATES:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->JPEG_GPS_PROCESSING_METHOD:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->JPEG_GPS_TIMESTAMP:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->LED_TRANSMIT:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->REQUEST_ID:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->TONEMAP_CURVE_BLUE:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->TONEMAP_CURVE_GREEN:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->TONEMAP_CURVE_RED:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureResult;->JPEG_GPS_COORDINATES:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->JPEG_GPS_PROCESSING_METHOD:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->JPEG_GPS_TIMESTAMP:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->LED_TRANSMIT:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->QUIRKS_PARTIAL_RESULT:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->REQUEST_FRAME_COUNT:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->REQUEST_ID:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_FACE_IDS:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_FACE_LANDMARKS:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_FACE_RECTANGLES:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_FACE_SCORES:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_LENS_SHADING_MAP:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_OIS_TIMESTAMPS:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_OIS_X_SHIFTS:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_OIS_Y_SHIFTS:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_PREDICTED_COLOR_GAINS:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_PREDICTED_COLOR_TRANSFORM:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->SYNC_FRAME_NUMBER:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->TONEMAP_CURVE_BLUE:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->TONEMAP_CURVE_GREEN:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->TONEMAP_CURVE_RED:Landroid/hardware/camera2/CaptureResult$Key;
Landroid/hardware/display/IDisplayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/display/IDisplayManager;
Landroid/hardware/display/IDisplayManager;->getDisplayInfo(I)Landroid/view/DisplayInfo;
Landroid/hardware/fingerprint/IFingerprintService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
@@ -517,215 +570,6 @@
Landroid/location/ILocationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationManager;
Landroid/location/ILocationManager$Stub;->TRANSACTION_getAllProviders:I
Landroid/location/ILocationManager;->getAllProviders()Ljava/util/List;
-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;
-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
-Landroid/media/AudioGainConfig;->mIndex:I
-Landroid/media/AudioGainConfig;->mMode:I
-Landroid/media/AudioGainConfig;->mRampDurationMs:I
-Landroid/media/AudioGainConfig;->mValues:[I
-Landroid/media/AudioHandle;-><init>(I)V
-Landroid/media/AudioHandle;->mId:I
-Landroid/media/AudioManager;-><init>()V
-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
-Landroid/media/audiopolicy/AudioMix;->mFormat:Landroid/media/AudioFormat;
-Landroid/media/audiopolicy/AudioMix;->mMixType:I
-Landroid/media/audiopolicy/AudioMix;->mRouteFlags:I
-Landroid/media/audiopolicy/AudioMix;->mRule:Landroid/media/audiopolicy/AudioMixingRule;
-Landroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;->mAttr:Landroid/media/AudioAttributes;
-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
-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/AudioSystem;->STREAM_SYSTEM_ENFORCED:I
-Landroid/media/AudioTrack;->deferred_connect(J)V
-Landroid/media/AudioTrack;->getLatency()I
-Landroid/media/AudioTrack;->mJniData:J
-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/CamcorderProfile;->native_init()V
-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;->convertRationalLatLonToFloat(Ljava/lang/String;Ljava/lang/String;)F
-Landroid/media/ExifInterface;->getDateTime()J
-Landroid/media/ExifInterface;->getGpsDateTime()J
-Landroid/media/ExifInterface;->mAttributes:[Ljava/util/HashMap;
-Landroid/media/ExifInterface;->mFilename:Ljava/lang/String;
-Landroid/media/ExifInterface;->mHasThumbnail:Z
-Landroid/media/ExifInterface;->sFormatter:Ljava/text/SimpleDateFormat;
Landroid/media/IAudioFocusDispatcher;->dispatchAudioFocusChange(ILjava/lang/String;)V
Landroid/media/IAudioRoutesObserver$Stub;-><init>()V
Landroid/media/IAudioService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
@@ -735,8 +579,6 @@
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;
@@ -745,246 +587,9 @@
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
-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/MediaCodecInfo$VideoCapabilities;->create(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)Landroid/media/MediaCodecInfo$VideoCapabilities;
-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/MediaMetadata;->getKeyFromMetadataEditorKey(I)Ljava/lang/String;
-Landroid/media/MediaMetadataRetriever;->getEmbeddedPicture(I)[B
-Landroid/media/MediaMetadataRetriever;->native_finalize()V
-Landroid/media/MediaMetadataRetriever;->native_init()V
-Landroid/media/MediaMetadataRetriever;->native_setup()V
-Landroid/media/MediaMuxer;->mCloseGuard:Ldalvik/system/CloseGuard;
-Landroid/media/MediaMuxer;->mNativeObject:J
-Landroid/media/MediaMuxer;->mState:I
-Landroid/media/MediaMuxer;->MUXER_STATE_STARTED:I
-Landroid/media/MediaMuxer;->MUXER_STATE_STOPPED:I
-Landroid/media/MediaMuxer;->MUXER_STATE_UNINITIALIZED: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;->MEDIA_INFO_EXTERNAL_METADATA_UPDATE:I
-Landroid/media/MediaPlayer;->MEDIA_INFO_TIMED_TEXT_ERROR:I
-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;->mEventHandler:Landroid/media/MediaRecorder$EventHandler;
-Landroid/media/MediaRecorder;->mFd:Ljava/io/FileDescriptor;
-Landroid/media/MediaRecorder;->mOnErrorListener:Landroid/media/MediaRecorder$OnErrorListener;
-Landroid/media/MediaRecorder;->mOnInfoListener:Landroid/media/MediaRecorder$OnInfoListener;
-Landroid/media/MediaRecorder;->mPath:Ljava/lang/String;
-Landroid/media/MediaRecorder;->mSurface:Landroid/view/Surface;
-Landroid/media/MediaRecorder;->native_finalize()V
-Landroid/media/MediaRecorder;->native_init()V
-Landroid/media/MediaRecorder;->native_reset()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/MediaRecorder;->_prepare()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;->isDefault()Z
-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;->getSelectedRoute()Landroid/media/MediaRouter$RouteInfo;
-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
-Landroid/media/MiniThumbFile;->reset()V
-Landroid/media/PlaybackParams;->mAudioFallbackMode:I
-Landroid/media/PlaybackParams;->mAudioStretchMode:I
-Landroid/media/PlaybackParams;->mPitch:F
-Landroid/media/PlaybackParams;->mSet:I
-Landroid/media/PlaybackParams;->mSpeed:F
-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
-Landroid/media/soundtrigger/SoundTriggerManager;->loadSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;)I
-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;->closeSilently(Landroid/os/ParcelFileDescriptor;)V
-Landroid/media/ThumbnailUtils;->computeInitialSampleSize(Landroid/graphics/BitmapFactory$Options;II)I
-Landroid/media/ThumbnailUtils;->computeSampleSize(Landroid/graphics/BitmapFactory$Options;II)I
-Landroid/media/ThumbnailUtils;->createImageThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;
-Landroid/media/ThumbnailUtils;->createThumbnailFromEXIF(Ljava/lang/String;IILandroid/media/ThumbnailUtils$SizedThumbnailBitmap;)V
-Landroid/media/ThumbnailUtils;->makeInputStream(Landroid/net/Uri;Landroid/content/ContentResolver;)Landroid/os/ParcelFileDescriptor;
-Landroid/media/ThumbnailUtils;->TARGET_SIZE_MICRO_THUMBNAIL:I
-Landroid/media/ThumbnailUtils;->transform(Landroid/graphics/Matrix;Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;
-Landroid/media/TimedText;->getObject(I)Ljava/lang/Object;
-Landroid/media/ToneGenerator;->mNativeContext:J
-Landroid/media/TtmlRenderer;-><init>(Landroid/content/Context;)V
-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
-Landroid/media/VolumeShaper$Configuration;->mInterpolatorType:I
-Landroid/media/VolumeShaper$Configuration;->mOptionFlags:I
-Landroid/media/VolumeShaper$Configuration;->mTimes:[F
-Landroid/media/VolumeShaper$Configuration;->mType:I
-Landroid/media/VolumeShaper$Configuration;->mVolumes:[F
-Landroid/media/VolumeShaper$Operation;-><init>(IIF)V
-Landroid/media/VolumeShaper$Operation;->mFlags:I
-Landroid/media/VolumeShaper$Operation;->mReplaceId:I
-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/net/IConnectivityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveLinkProperties()Landroid/net/LinkProperties;
Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveNetworkInfo()Landroid/net/NetworkInfo;
@@ -1648,80 +1253,6 @@
Landroid/os/WorkSource;->updateLocked(Landroid/os/WorkSource;ZZ)Z
Landroid/os/ZygoteStartFailedEx;-><init>(Ljava/lang/String;)V
Landroid/os/ZygoteStartFailedEx;-><init>(Ljava/lang/Throwable;)V
-Landroid/preference/DialogPreference;->mBuilder:Landroid/app/AlertDialog$Builder;
-Landroid/preference/DialogPreference;->mDialog:Landroid/app/Dialog;
-Landroid/preference/DialogPreference;->mDialogIcon:Landroid/graphics/drawable/Drawable;
-Landroid/preference/DialogPreference;->mDialogMessage:Ljava/lang/CharSequence;
-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/R$styleable;->ActionBar:[I
Landroid/R$styleable;->ActionBar_background:I
Landroid/R$styleable;->ActionBar_backgroundSplit:I
@@ -2098,348 +1629,8 @@
Landroid/system/OsConstants;->XATTR_REPLACE:I
Landroid/system/OsConstants;->_LINUX_CAPABILITY_VERSION_3:I
Landroid/system/StructTimeval;->fromMillis(J)Landroid/system/StructTimeval;
-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/cdma/CdmaCellLocation;->equalsHandlesNulls(Ljava/lang/Object;Ljava/lang/Object;)Z
-Landroid/telephony/cdma/CdmaCellLocation;->mBaseStationId:I
-Landroid/telephony/cdma/CdmaCellLocation;->mBaseStationLatitude:I
-Landroid/telephony/cdma/CdmaCellLocation;->mBaseStationLongitude:I
-Landroid/telephony/cdma/CdmaCellLocation;->mNetworkId:I
-Landroid/telephony/cdma/CdmaCellLocation;->mSystemId:I
-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
-Landroid/telephony/CellSignalStrengthLte;->mRssnr:I
-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/ims/ImsSsInfo;-><init>()V
-Landroid/telephony/NeighboringCellInfo;->mCid:I
-Landroid/telephony/NeighboringCellInfo;->mLac:I
-Landroid/telephony/NeighboringCellInfo;->mNetworkType:I
-Landroid/telephony/NeighboringCellInfo;->mPsc:I
-Landroid/telephony/NeighboringCellInfo;->mRssi:I
-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;->isPotentialLocalEmergencyNumber(Landroid/content/Context;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;->callback:Lcom/android/internal/telephony/IPhoneStateListener;
-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;->equalsHandlesNulls(Ljava/lang/Object;Ljava/lang/Object;)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;->mCdmaDefaultRoamingIndicator:I
-Landroid/telephony/ServiceState;->mCdmaEriIconIndex:I
-Landroid/telephony/ServiceState;->mCdmaEriIconMode:I
-Landroid/telephony/ServiceState;->mCdmaRoamingIndicator:I
-Landroid/telephony/ServiceState;->mCssIndicator:Z
-Landroid/telephony/ServiceState;->mIsManualNetworkSelection:Z
-Landroid/telephony/ServiceState;->mIsUsingCarrierAggregation:Z
-Landroid/telephony/ServiceState;->mNetworkId:I
-Landroid/telephony/ServiceState;->mSystemId: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;->setFromNotifierBundle(Landroid/os/Bundle;)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/os/Parcel;)V
-Landroid/telephony/SignalStrength;-><init>(Landroid/telephony/SignalStrength;)V
-Landroid/telephony/SignalStrength;-><init>(Z)V
-Landroid/telephony/SignalStrength;->copyFrom(Landroid/telephony/SignalStrength;)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;->mCdmaDbm:I
-Landroid/telephony/SignalStrength;->mCdmaEcio:I
-Landroid/telephony/SignalStrength;->mEvdoDbm:I
-Landroid/telephony/SignalStrength;->mEvdoEcio:I
-Landroid/telephony/SignalStrength;->mEvdoSnr: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;->setFromNotifierBundle(Landroid/os/Bundle;)V
-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;->mSubId:I
-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/SubscriptionInfo;->getNameSource()I
-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;
-Landroid/telephony/SubscriptionManager;->getDefaultDataPhoneId()I
-Landroid/telephony/SubscriptionManager;->getDefaultDataSubscriptionInfo()Landroid/telephony/SubscriptionInfo;
-Landroid/telephony/SubscriptionManager;->getDefaultSmsPhoneId()I
-Landroid/telephony/SubscriptionManager;->getDefaultVoiceSubscriptionInfo()Landroid/telephony/SubscriptionInfo;
-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/SubscriptionManager;->setDisplayNumber(Ljava/lang/String;I)I
-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;-><init>(Landroid/content/Context;I)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;->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;->getImsConfig(II)Landroid/telephony/ims/aidl/IImsConfig;
-Landroid/telephony/TelephonyManager;->getImsRegistration(II)Landroid/telephony/ims/aidl/IImsRegistration;
-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
-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;->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/transition/ChangeBounds;->BOTTOM_RIGHT_ONLY_PROPERTY:Landroid/util/Property;
Landroid/transition/ChangeBounds;->POSITION_PROPERTY:Landroid/util/Property;
Landroid/transition/Scene;->mEnterAction:Ljava/lang/Runnable;
@@ -2452,37 +1643,6 @@
Landroid/transition/TransitionManager;->sPendingTransitions:Ljava/util/ArrayList;
Landroid/transition/TransitionManager;->sRunningTransitions:Ljava/lang/ThreadLocal;
Landroid/util/Singleton;-><init>()V
-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;->DALTONIZER_SIMULATE_MONOCHROMACY:I
-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
@@ -2491,129 +1651,12 @@
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/autofill/IAutoFillManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/view/autofill/IAutoFillManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/autofill/IAutoFillManager;
-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;
-Landroid/view/Choreographer;->scheduleVsyncLocked()V
-Landroid/view/Choreographer;->USE_VSYNC:Z
-Landroid/view/ContextThemeWrapper;->getThemeResId()I
-Landroid/view/ContextThemeWrapper;->initializeTheme()V
-Landroid/view/ContextThemeWrapper;->mInflater:Landroid/view/LayoutInflater;
-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;->drawCircle(Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;)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;)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;->isDefault(Landroid/content/Context;)Z
-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;->mCurMethod:Lcom/android/internal/view/IInputMethodSession;
-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
@@ -2670,1265 +1713,19 @@
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;->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
-Landroid/view/KeyEvent;->mMetaState:I
-Landroid/view/KeyEvent;->mRepeatCount:I
-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;
-Landroid/view/PointerIcon;->mDurationPerFrame:I
-Landroid/view/PointerIcon;->mHotSpotX:F
-Landroid/view/PointerIcon;->mHotSpotY:F
-Landroid/view/PointerIcon;->mType:I
-Landroid/view/RemoteAnimationDefinition;->addRemoteAnimation(IILandroid/view/RemoteAnimationAdapter;)V
-Landroid/view/RemoteAnimationTarget;->clipRect:Landroid/graphics/Rect;
-Landroid/view/RemoteAnimationTarget;->contentInsets:Landroid/graphics/Rect;
-Landroid/view/RemoteAnimationTarget;->isNotInRecents:Z
-Landroid/view/RemoteAnimationTarget;->isTranslucent:Z
-Landroid/view/RemoteAnimationTarget;->leash:Landroid/view/SurfaceControl;
-Landroid/view/RemoteAnimationTarget;->mode:I
-Landroid/view/RemoteAnimationTarget;->position:Landroid/graphics/Point;
-Landroid/view/RemoteAnimationTarget;->prefixOrderIndex:I
-Landroid/view/RemoteAnimationTarget;->sourceContainerBounds:Landroid/graphics/Rect;
-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/RenderNode;->setProjectBackwards(Z)Z
-Landroid/view/RenderNodeAnimator;-><init>(IF)V
-Landroid/view/RenderNodeAnimator;-><init>(Landroid/graphics/CanvasProperty;F)V
-Landroid/view/RenderNodeAnimator;-><init>(Landroid/graphics/CanvasProperty;IF)V
-Landroid/view/RenderNodeAnimator;->callOnFinished(Landroid/view/RenderNodeAnimator;)V
-Landroid/view/RenderNodeAnimator;->mapViewPropertyToRenderProperty(I)I
-Landroid/view/RenderNodeAnimator;->setStartValue(F)V
-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
-Landroid/view/SurfaceControl$PhysicalDisplayInfo;->density:F
-Landroid/view/SurfaceControl$PhysicalDisplayInfo;->height:I
-Landroid/view/SurfaceControl$PhysicalDisplayInfo;->presentationDeadlineNanos:J
-Landroid/view/SurfaceControl$PhysicalDisplayInfo;->refreshRate:F
-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;III)Landroid/graphics/Bitmap;
-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
-Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionAction(III)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;
-Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionAction(IIILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;
-Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(II)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;
-Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(IILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;
-Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(IILandroid/view/textclassifier/TextSelection;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;
-Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionStarted(I)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;
-Landroid/view/textclassifier/logging/SmartSelectionEventTracker;-><init>(Landroid/content/Context;I)V
-Landroid/view/textclassifier/logging/SmartSelectionEventTracker;->logEvent(Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;)V
-Landroid/view/textclassifier/TextClassificationManager;->getTextClassifier(I)Landroid/view/textclassifier/TextClassifier;
-Landroid/view/textclassifier/TextClassifier;->classifyText(Ljava/lang/CharSequence;IILandroid/view/textclassifier/TextClassification$Options;)Landroid/view/textclassifier/TextClassification;
-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/SpellCheckerSession;->mSpellCheckerSessionListener:Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;
-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
-Landroid/view/TextureView;->mLayer:Landroid/view/TextureLayer;
-Landroid/view/TextureView;->mNativeWindow:J
-Landroid/view/TextureView;->mOpaque:Z
-Landroid/view/TextureView;->mSurface:Landroid/graphics/SurfaceTexture;
-Landroid/view/TextureView;->mUpdateListener:Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;
-Landroid/view/TextureView;->mUpdateSurface:Z
-Landroid/view/TextureView;->nCreateNativeWindow(Landroid/graphics/SurfaceTexture;)V
-Landroid/view/TextureView;->nDestroyNativeWindow()V
-Landroid/view/TextureView;->onDetachedFromWindowInternal()V
-Landroid/view/ThreadedRenderer;->addRenderNode(Landroid/view/RenderNode;Z)V
-Landroid/view/ThreadedRenderer;->drawRenderNode(Landroid/view/RenderNode;)V
-Landroid/view/ThreadedRenderer;->removeRenderNode(Landroid/view/RenderNode;)V
-Landroid/view/ThreadedRenderer;->setContentDrawBounds(IIII)V
-Landroid/view/ThreadedRenderer;->setupDiskCache(Ljava/io/File;)V
-Landroid/view/TouchDelegate;->mDelegateTargeted:Z
-Landroid/view/VelocityTracker$Estimator;->confidence:F
-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;->DBG:Z
-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;->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;->getLocationInSurface([I)V
-Landroid/view/View;->getLocationOnScreen()[I
-Landroid/view/View;->getRawTextAlignment()I
-Landroid/view/View;->getRawTextDirection()I
-Landroid/view/View;->getScrollCache()Landroid/view/View$ScrollabilityCache;
-Landroid/view/View;->getThreadedRenderer()Landroid/view/ThreadedRenderer;
-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;->mAccessibilityViewId:I
-Landroid/view/View;->makeOptionalFitsSystemWindows()V
-Landroid/view/View;->mAnimator:Landroid/view/ViewPropertyAnimator;
-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
-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;
-Landroid/view/View;->mScrollX:I
-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;->onDetachedFromWindowInternal()V
-Landroid/view/View;->onDrawHorizontalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
-Landroid/view/View;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
-Landroid/view/View;->onFocusLost()V
-Landroid/view/View;->onInitializeAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)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
-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;->setDisabledSystemUiVisibility(I)V
-Landroid/view/View;->setFlags(II)V
-Landroid/view/View;->setFrame(IIII)Z
-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
-Landroid/view/View;->STATUS_BAR_DISABLE_EXPAND:I
-Landroid/view/View;->STATUS_BAR_DISABLE_HOME:I
-Landroid/view/View;->STATUS_BAR_DISABLE_RECENT:I
-Landroid/view/View;->toGlobalMotionEvent(Landroid/view/MotionEvent;)Z
-Landroid/view/View;->toLocalMotionEvent(Landroid/view/MotionEvent;)Z
-Landroid/view/View;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V
-Landroid/view/View;->transformMatrixToLocal(Landroid/graphics/Matrix;)V
-Landroid/view/View;->updateDisplayListIfDirty()Landroid/view/RenderNode;
-Landroid/view/ViewConfiguration;->getDoubleTapMinTime()I
-Landroid/view/ViewConfiguration;->getDoubleTapSlop()I
-Landroid/view/ViewConfiguration;->getHoverTapSlop()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;-><init>()V
-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;->DBG:Z
-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;->encodeProperties(Landroid/view/ViewHierarchyEncoder;)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;->mFocused:Landroid/view/View;
-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;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
-Landroid/view/ViewGroup;->removeTransientView(Landroid/view/View;)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;F)V
-Landroid/view/ViewHierarchyEncoder;->addProperty(Ljava/lang/String;I)V
-Landroid/view/ViewHierarchyEncoder;->addProperty(Ljava/lang/String;Ljava/lang/String;)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/ViewRootImpl;->sRunQueues:Ljava/lang/ThreadLocal;
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;->FEATURE_MAX:I
-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;->mWindowManager:Landroid/view/WindowManager;
-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/Window;->shouldCloseOnTouch(Landroid/content/Context;Landroid/view/MotionEvent;)Z
-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/WindowInsets;->inset(IIII)Landroid/view/WindowInsets;
-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;
-Landroid/webkit/CacheManager$CacheResult;->getETag()Ljava/lang/String;
-Landroid/webkit/CacheManager$CacheResult;->getExpires()J
-Landroid/webkit/CacheManager$CacheResult;->getExpiresString()Ljava/lang/String;
-Landroid/webkit/CacheManager$CacheResult;->getHttpStatusCode()I
-Landroid/webkit/CacheManager$CacheResult;->getInputStream()Ljava/io/InputStream;
-Landroid/webkit/CacheManager$CacheResult;->getLastModified()Ljava/lang/String;
-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/ConsoleMessage;->mLevel:Landroid/webkit/ConsoleMessage$MessageLevel;
-Landroid/webkit/ConsoleMessage;->mLineNumber:I
-Landroid/webkit/ConsoleMessage;->mMessage:Ljava/lang/String;
-Landroid/webkit/ConsoleMessage;->mSourceId:Ljava/lang/String;
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;->getCurrentWebViewPackageName()Ljava/lang/String;
Landroid/webkit/IWebViewUpdateService;->getValidWebViewPackages()[Landroid/webkit/WebViewProviderInfo;
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/UrlInterceptHandler;->getPluginData(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/PluginData;
-Landroid/webkit/UrlInterceptHandler;->service(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;
-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;->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
-Landroid/webkit/WebView;->mProvider:Landroid/webkit/WebViewProvider;
-Landroid/webkit/WebView;->mWebViewThread:Landroid/os/Looper;
-Landroid/webkit/WebView;->notifyFindDialogDismissed()V
-Landroid/webkit/WebView;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
-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/WebViewProviderInfo;-><init>(Landroid/os/Parcel;)V
-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
-Landroid/widget/AbsListView$LayoutParams;->scrappedFromPosition:I
-Landroid/widget/AbsListView$LayoutParams;->viewType:I
-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;->canScrollDown()Z
-Landroid/widget/AbsListView;->canScrollUp()Z
-Landroid/widget/AbsListView;->findMotionRow(I)I
-Landroid/widget/AbsListView;->invokeOnItemScrollListener()V
-Landroid/widget/AbsListView;->isVerticalScrollBarHidden()Z
-Landroid/widget/AbsListView;->mActivePointerId:I
-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;
-Landroid/widget/AbsListView;->mFastScroll:Landroid/widget/FastScroller;
-Landroid/widget/AbsListView;->mFlingRunnable:Landroid/widget/AbsListView$FlingRunnable;
-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
-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;->drawThumb(Landroid/graphics/Canvas;)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$ActionMenuChildView;->needsDividerBefore()Z
-Landroid/widget/ActionMenuView$LayoutParams;->cellsUsed:I
-Landroid/widget/ActionMenuView$LayoutParams;->expandable:Z
-Landroid/widget/ActionMenuView$LayoutParams;->expanded:Z
-Landroid/widget/ActionMenuView$LayoutParams;->extraPixels:I
-Landroid/widget/ActionMenuView$LayoutParams;->isOverflowButton:Z
-Landroid/widget/ActionMenuView$LayoutParams;->preventEdgeOffset:Z
-Landroid/widget/ActionMenuView;->hasDividerBeforeChildAt(I)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;->mNeedSync:Z
-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;->setDropDownDismissedOnCompletion(Z)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;->mSelectHandleCenter:Landroid/graphics/drawable/Drawable;
-Landroid/widget/Editor;->mSelectHandleLeft:Landroid/graphics/drawable/Drawable;
-Landroid/widget/Editor;->mSelectHandleRight: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
-Landroid/widget/FastScroller;->mMinimumTouchTarget:I
-Landroid/widget/FastScroller;->mThumbDrawable:Landroid/graphics/drawable/Drawable;
-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;->determineColumns(I)Z
-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;->mOverflingDistance:I
-Landroid/widget/HorizontalScrollView;->mOverscrollDistance: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;->resizeFromDrawable()V
-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;->isDropDownAlwaysVisible()Z
-Landroid/widget/ListPopupWindow;->mDropDownList:Landroid/widget/DropDownListView;
-Landroid/widget/ListPopupWindow;->mPopup:Landroid/widget/PopupWindow;
-Landroid/widget/ListPopupWindow;->setDropDownAlwaysVisible(Z)V
-Landroid/widget/ListPopupWindow;->setForceIgnoreOutsideTouch(Z)V
-Landroid/widget/ListPopupWindow;->setListItemExpandMax(I)V
-Landroid/widget/ListView;->arrowScroll(I)Z
-Landroid/widget/ListView;->correctTooHigh(I)V
-Landroid/widget/ListView;->correctTooLow(I)V
-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;->getHeightForPosition(I)I
-Landroid/widget/ListView;->isDirectChildHeaderOrFooter(Landroid/view/View;)Z
-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;->mNextButton:Landroid/widget/ImageButton;
-Landroid/widget/MediaController;->mPauseButton:Landroid/widget/ImageButton;
-Landroid/widget/MediaController;->mPlayer:Landroid/widget/MediaController$MediaPlayerControl;
-Landroid/widget/MediaController;->mPrevButton:Landroid/widget/ImageButton;
-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;->mTextSize:I
-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;->mInterpolator:Landroid/view/animation/Interpolator;
-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;->refreshProgress(IIZZ)V
-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
-Landroid/widget/RelativeLayout$LayoutParams;->mTop:I
-Landroid/widget/RelativeLayout;->mGravity:I
-Landroid/widget/RemoteViews$Action;->mergeBehavior()I
-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;
-Landroid/widget/RemoteViews;->mBitmapCache:Landroid/widget/RemoteViews$BitmapCache;
-Landroid/widget/RemoteViews;->mergeRemoteViews(Landroid/widget/RemoteViews;)V
-Landroid/widget/RemoteViews;->mLayoutId:I
-Landroid/widget/RemoteViews;->mPortrait:Landroid/widget/RemoteViews;
-Landroid/widget/RemoteViews;->setIsWidgetCollectionChild(Z)V
-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;-><init>()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/SimpleAdapter;->mData:Ljava/util/List;
-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;->mSwitchWidth: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;->canPaste()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;->getTransformedText(II)Ljava/lang/CharSequence;
-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;->mCurHintTextColor:I
-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;->mMinMode: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;->setRawTextSize(FZ)V
-Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V
-Landroid/widget/TextView;->startMarquee()V
-Landroid/widget/TextView;->startStopMarquee(Z)V
-Landroid/widget/TextView;->stopTextActionMode()V
-Landroid/widget/TextView;->updateTextServicesLocaleLocked()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;
@@ -3948,48 +1745,6 @@
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/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/IAppOpsCallback$Stub;-><init>()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
@@ -4060,181 +1815,13 @@
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
-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;->dropFile(Landroid/content/Context;Ljava/lang/String;)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;
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->getProcessStats()Landroid/util/ArrayMap;
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->getSensorStats()Landroid/util/SparseArray;
-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;->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;->getMobileRadioActiveTime(JI)J
-Lcom/android/internal/os/BatteryStatsImpl;->getNetworkActivityBytes(II)J
-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;JLjava/lang/String;)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
@@ -4890,34 +2477,8 @@
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/HexDump;->toHexString([BZ)Ljava/lang/String;
-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
@@ -4934,53 +2495,6 @@
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/ActionMenuItemView;->hasText()Z
-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;)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;->getHeaderIcon()Landroid/graphics/drawable/Drawable;
-Lcom/android/internal/view/menu/MenuBuilder;->getHeaderTitle()Ljava/lang/CharSequence;
-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;->removeMenuPresenter(Lcom/android/internal/view/menu/MenuPresenter;)V
-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;->setDefaultShowAsAction(I)Lcom/android/internal/view/menu/MenuBuilder;
-Lcom/android/internal/view/menu/MenuBuilder;->setOptionalIconsVisible(Z)V
-Lcom/android/internal/view/menu/MenuBuilder;->startDispatchingItemsChanged()V
-Lcom/android/internal/view/menu/MenuBuilder;->stopDispatchingItemsChanged()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;->setExclusiveCheckable(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;)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;->getPopup()Lcom/android/internal/view/menu/MenuPopup;
-Lcom/android/internal/view/menu/MenuPopupHelper;->mForceShowIcon:Z
-Lcom/android/internal/view/menu/MenuPopupHelper;->setAnchorView(Landroid/view/View;)V
-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
@@ -5000,16 +2514,6 @@
Lcom/android/internal/widget/IRemoteViewsFactory;->isCreated()Z
Lcom/android/internal/widget/IRemoteViewsFactory;->onDataSetChanged()V
Lcom/android/internal/widget/ScrollBarUtils;->getThumbLength(IIII)I
-Lcom/android/internal/widget/ScrollingTabContainerView;-><init>(Landroid/content/Context;)V
-Lcom/android/internal/widget/ScrollingTabContainerView;->addTab(Landroid/app/ActionBar$Tab;IZ)V
-Lcom/android/internal/widget/ScrollingTabContainerView;->addTab(Landroid/app/ActionBar$Tab;Z)V
-Lcom/android/internal/widget/ScrollingTabContainerView;->animateToTab(I)V
-Lcom/android/internal/widget/ScrollingTabContainerView;->animateToVisibility(I)V
-Lcom/android/internal/widget/ScrollingTabContainerView;->removeAllTabs()V
-Lcom/android/internal/widget/ScrollingTabContainerView;->removeTabAt(I)V
-Lcom/android/internal/widget/ScrollingTabContainerView;->setAllowCollapse(Z)V
-Lcom/android/internal/widget/ScrollingTabContainerView;->setTabSelected(I)V
-Lcom/android/internal/widget/ScrollingTabContainerView;->updateTab(I)V
Lcom/android/okhttp/Connection;->getSocket()Ljava/net/Socket;
Lcom/android/okhttp/ConnectionPool;->connections:Ljava/util/Deque;
Lcom/android/okhttp/ConnectionPool;->keepAliveDurationNs:J
@@ -5552,7 +3056,6 @@
Ljava/util/zip/ZipOutputStream;->method:I
Ljava/util/zip/ZipOutputStream;->names:Ljava/util/HashSet;
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;
diff --git a/config/hiddenapi-vendor-list.txt b/config/hiddenapi-vendor-list.txt
index 95d589a..9e6abe4 100644
--- a/config/hiddenapi-vendor-list.txt
+++ b/config/hiddenapi-vendor-list.txt
@@ -40,20 +40,6 @@
Landroid/location/ILocationManager;->reportLocation(Landroid/location/Location;Z)V
Landroid/location/INetInitiatedListener$Stub;-><init>()V
Landroid/location/INetInitiatedListener;->sendNiResponse(II)Z
-Landroid/media/AudioManager;->registerAudioPortUpdateListener(Landroid/media/AudioManager$OnAudioPortUpdateListener;)V
-Landroid/media/AudioManager;->unregisterAudioPortUpdateListener(Landroid/media/AudioManager$OnAudioPortUpdateListener;)V
-Landroid/media/AudioSystem;->checkAudioFlinger()I
-Landroid/media/AudioSystem;->getForceUse(I)I
-Landroid/media/AudioSystem;->getParameters(Ljava/lang/String;)Ljava/lang/String;
-Landroid/media/AudioSystem;->setForceUse(II)I
-Landroid/media/AudioSystem;->setParameters(Ljava/lang/String;)I
-Landroid/media/MediaDrm$Certificate;->getContent()[B
-Landroid/media/MediaDrm$Certificate;->getWrappedPrivateKey()[B
-Landroid/media/MediaDrm$CertificateRequest;->getData()[B
-Landroid/media/MediaDrm$CertificateRequest;->getDefaultUrl()Ljava/lang/String;
-Landroid/media/MediaDrm;->getCertificateRequest(ILjava/lang/String;)Landroid/media/MediaDrm$CertificateRequest;
-Landroid/media/MediaDrm;->provideCertificateResponse([B)Landroid/media/MediaDrm$Certificate;
-Landroid/media/MediaDrm;->signRSA([BLjava/lang/String;[B[B)[B
Landroid/media/tv/ITvRemoteProvider$Stub;-><init>()V
Landroid/media/tv/ITvRemoteServiceInput;->clearInputBridge(Landroid/os/IBinder;)V
Landroid/media/tv/ITvRemoteServiceInput;->closeInputBridge(Landroid/os/IBinder;)V
@@ -151,42 +137,10 @@
Landroid/system/Os;->setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V
Landroid/system/PacketSocketAddress;-><init>(I[B)V
Landroid/system/PacketSocketAddress;-><init>(SI)V
-Landroid/telephony/euicc/DownloadableSubscription;->encodedActivationCode:Ljava/lang/String;
-Landroid/telephony/euicc/DownloadableSubscription;->setAccessRules([Landroid/telephony/UiccAccessRule;)V
-Landroid/telephony/euicc/DownloadableSubscription;->setCarrierName(Ljava/lang/String;)V
-Landroid/telephony/ims/compat/feature/ImsFeature;->getFeatureState()I
-Landroid/telephony/ims/compat/feature/ImsFeature;->setFeatureState(I)V
Landroid/telephony/ims/compat/feature/MMTelFeature;-><init>()V
Landroid/telephony/ims/compat/ImsService;-><init>()V
-Landroid/telephony/ims/compat/ImsService;->mImsServiceController:Landroid/os/IBinder;
Landroid/telephony/ims/compat/stub/ImsCallSessionImplBase;-><init>()V
-Landroid/telephony/ims/compat/stub/ImsConfigImplBase;-><init>(Landroid/content/Context;)V
-Landroid/telephony/ims/compat/stub/ImsConfigImplBase;->getIImsConfig()Lcom/android/ims/internal/IImsConfig;
Landroid/telephony/ims/compat/stub/ImsUtListenerImplBase;-><init>()V
-Landroid/telephony/ims/ImsCallForwardInfo;-><init>()V
-Landroid/telephony/ims/ImsCallForwardInfo;->mCondition:I
-Landroid/telephony/ims/ImsCallForwardInfo;->mNumber:Ljava/lang/String;
-Landroid/telephony/ims/ImsCallForwardInfo;->mServiceClass:I
-Landroid/telephony/ims/ImsCallForwardInfo;->mStatus:I
-Landroid/telephony/ims/ImsCallForwardInfo;->mTimeSeconds:I
-Landroid/telephony/ims/ImsCallForwardInfo;->mToA:I
-Landroid/telephony/ims/ImsCallProfile;->mCallExtras:Landroid/os/Bundle;
-Landroid/telephony/ims/ImsCallProfile;->mCallType:I
-Landroid/telephony/ims/ImsCallProfile;->mMediaProfile:Landroid/telephony/ims/ImsStreamMediaProfile;
-Landroid/telephony/ims/ImsCallProfile;->mRestrictCause:I
-Landroid/telephony/ims/ImsCallProfile;->presentationToOIR(I)I
-Landroid/telephony/ims/ImsExternalCallState;-><init>(ILandroid/net/Uri;ZIIZ)V
-Landroid/telephony/ims/ImsReasonInfo;-><init>(II)V
-Landroid/telephony/ims/ImsReasonInfo;->mCode:I
-Landroid/telephony/ims/ImsReasonInfo;->mExtraCode:I
-Landroid/telephony/ims/ImsReasonInfo;->mExtraMessage:Ljava/lang/String;
-Landroid/telephony/ims/ImsSsInfo;->mIcbNum:Ljava/lang/String;
-Landroid/telephony/ims/ImsSsInfo;->mStatus:I
-Landroid/telephony/ims/ImsStreamMediaProfile;-><init>()V
-Landroid/telephony/ims/ImsStreamMediaProfile;->mAudioDirection:I
-Landroid/telephony/ims/ImsStreamMediaProfile;->mAudioQuality:I
-Landroid/telephony/ims/ImsStreamMediaProfile;->mVideoDirection:I
-Landroid/telephony/ims/ImsVideoCallProvider;->getInterface()Lcom/android/ims/internal/IImsVideoCallProvider;
Landroid/telephony/mbms/IMbmsStreamingSessionCallback$Stub;-><init>()V
Landroid/telephony/mbms/IStreamingServiceCallback$Stub;-><init>()V
Landroid/telephony/mbms/vendor/IMbmsStreamingService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/mbms/vendor/IMbmsStreamingService;
@@ -194,64 +148,7 @@
Landroid/telephony/mbms/vendor/IMbmsStreamingService;->initialize(Landroid/telephony/mbms/IMbmsStreamingSessionCallback;I)I
Landroid/telephony/mbms/vendor/IMbmsStreamingService;->requestUpdateStreamingServices(ILjava/util/List;)I
Landroid/telephony/mbms/vendor/IMbmsStreamingService;->startStreaming(ILjava/lang/String;Landroid/telephony/mbms/IStreamingServiceCallback;)I
-Landroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;I)Ljava/lang/String;
-Landroid/telephony/PhoneNumberUtils;->isEmergencyNumber(ILjava/lang/String;)Z
-Landroid/telephony/PhoneNumberUtils;->isPotentialEmergencyNumber(ILjava/lang/String;)Z
-Landroid/telephony/PhoneNumberUtils;->isPotentialLocalEmergencyNumber(Landroid/content/Context;ILjava/lang/String;)Z
-Landroid/telephony/PhoneStateListener;-><init>(Ljava/lang/Integer;)V
-Landroid/telephony/PhoneStateListener;-><init>(Ljava/lang/Integer;Landroid/os/Looper;)V
-Landroid/telephony/PreciseCallState;->getBackgroundCallState()I
-Landroid/telephony/PreciseCallState;->getForegroundCallState()I
-Landroid/telephony/RadioAccessFamily;-><init>(II)V
-Landroid/telephony/RadioAccessFamily;->getRafFromNetworkType(I)I
-Landroid/telephony/Rlog;->d(Ljava/lang/String;Ljava/lang/String;)I
-Landroid/telephony/Rlog;->e(Ljava/lang/String;Ljava/lang/String;)I
-Landroid/telephony/Rlog;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
-Landroid/telephony/Rlog;->i(Ljava/lang/String;Ljava/lang/String;)I
-Landroid/telephony/ServiceState;->bitmaskHasTech(II)Z
-Landroid/telephony/ServiceState;->getDataRegState()I
-Landroid/telephony/ServiceState;->getDataRoaming()Z
-Landroid/telephony/ServiceState;->getRilDataRadioTechnology()I
-Landroid/telephony/ServiceState;->getVoiceNetworkType()I
-Landroid/telephony/ServiceState;->getVoiceRegState()I
-Landroid/telephony/ServiceState;->isCdma(I)Z
-Landroid/telephony/ServiceState;->isEmergencyOnly()Z
-Landroid/telephony/ServiceState;->isGsm(I)Z
-Landroid/telephony/ServiceState;->mergeServiceStates(Landroid/telephony/ServiceState;Landroid/telephony/ServiceState;)Landroid/telephony/ServiceState;
-Landroid/telephony/ServiceState;->rilRadioTechnologyToString(I)Ljava/lang/String;
-Landroid/telephony/SubscriptionInfo;->setDisplayName(Ljava/lang/CharSequence;)V
-Landroid/telephony/SubscriptionInfo;->setIconTint(I)V
-Landroid/telephony/SubscriptionManager;->clearDefaultsForInactiveSubIds()V
-Landroid/telephony/SubscriptionManager;->getDefaultVoicePhoneId()I
-Landroid/telephony/SubscriptionManager;->getResourcesForSubId(Landroid/content/Context;I)Landroid/content/res/Resources;
-Landroid/telephony/SubscriptionManager;->isActiveSubId(I)Z
-Landroid/telephony/SubscriptionManager;->isUsableSubIdValue(I)Z
-Landroid/telephony/SubscriptionManager;->isValidPhoneId(I)Z
-Landroid/telephony/SubscriptionManager;->isValidSlotIndex(I)Z
-Landroid/telephony/SubscriptionManager;->isValidSubscriptionId(I)Z
-Landroid/telephony/SubscriptionManager;->putPhoneIdAndSubIdExtra(Landroid/content/Intent;I)V
-Landroid/telephony/SubscriptionManager;->putPhoneIdAndSubIdExtra(Landroid/content/Intent;II)V
-Landroid/telephony/SubscriptionManager;->setDisplayName(Ljava/lang/String;IJ)I
-Landroid/telephony/SubscriptionManager;->setIconTint(II)I
-Landroid/telephony/TelephonyManager$MultiSimVariants;->DSDA:Landroid/telephony/TelephonyManager$MultiSimVariants;
-Landroid/telephony/TelephonyManager$MultiSimVariants;->DSDS:Landroid/telephony/TelephonyManager$MultiSimVariants;
-Landroid/telephony/TelephonyManager;->getIntAtIndex(Landroid/content/ContentResolver;Ljava/lang/String;I)I
-Landroid/telephony/TelephonyManager;->getIsimDomain()Ljava/lang/String;
-Landroid/telephony/TelephonyManager;->getNetworkTypeName()Ljava/lang/String;
-Landroid/telephony/TelephonyManager;->getPreferredNetworkType(I)I
-Landroid/telephony/TelephonyManager;->getServiceStateForSubscriber(I)Landroid/telephony/ServiceState;
-Landroid/telephony/TelephonyManager;->getVoiceMessageCount()I
-Landroid/telephony/TelephonyManager;->getVoiceNetworkType(I)I
-Landroid/telephony/TelephonyManager;->isImsRegistered()Z
-Landroid/telephony/TelephonyManager;->nvResetConfig(I)Z
-Landroid/telephony/TelephonyManager;->putIntAtIndex(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
-Landroid/telephony/TelephonyManager;->setPreferredNetworkType(II)Z
-Landroid/view/AppTransitionAnimationSpec;-><init>(ILandroid/graphics/GraphicBuffer;Landroid/graphics/Rect;)V
-Landroid/view/BatchedInputEventReceiver;-><init>(Landroid/view/InputChannel;Landroid/os/Looper;Landroid/view/Choreographer;)V
-Landroid/view/Choreographer;->getSfInstance()Landroid/view/Choreographer;
-Landroid/view/DisplayListCanvas;->drawRenderNode(Landroid/view/RenderNode;)V
Landroid/view/IAppTransitionAnimationSpecsFuture$Stub;-><init>()V
-Landroid/view/InputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
Landroid/view/IRecentsAnimationController;->finish(Z)V
Landroid/view/IRecentsAnimationController;->screenshotTask(I)Landroid/app/ActivityManager$TaskSnapshot;
Landroid/view/IRecentsAnimationController;->setInputConsumerEnabled(Z)V
@@ -269,42 +166,6 @@
Landroid/view/IWindowManager;->overridePendingAppTransitionMultiThumbFuture(Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/os/IRemoteCallback;Z)V
Landroid/view/IWindowManager;->overridePendingAppTransitionRemote(Landroid/view/RemoteAnimationAdapter;)V
Landroid/view/IWindowManager;->setNavBarVirtualKeyHapticFeedbackEnabled(Z)V
-Landroid/view/RemoteAnimationAdapter;-><init>(Landroid/view/IRemoteAnimationRunner;JJ)V
-Landroid/view/RemoteAnimationDefinition;-><init>()V
-Landroid/view/RemoteAnimationDefinition;->addRemoteAnimation(ILandroid/view/RemoteAnimationAdapter;)V
-Landroid/view/RenderNode;->create(Ljava/lang/String;Landroid/view/View;)Landroid/view/RenderNode;
-Landroid/view/RenderNode;->end(Landroid/view/DisplayListCanvas;)V
-Landroid/view/RenderNode;->isValid()Z
-Landroid/view/RenderNode;->setClipToBounds(Z)Z
-Landroid/view/RenderNode;->setLeftTopRightBottom(IIII)Z
-Landroid/view/RenderNode;->start(II)Landroid/view/DisplayListCanvas;
-Landroid/view/Surface;->getNextFrameNumber()J
-Landroid/view/SurfaceControl$Transaction;-><init>()V
-Landroid/view/SurfaceControl$Transaction;->apply()V
-Landroid/view/SurfaceControl$Transaction;->deferTransactionUntil(Landroid/view/SurfaceControl;Landroid/os/IBinder;J)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->deferTransactionUntilSurface(Landroid/view/SurfaceControl;Landroid/view/Surface;J)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->hide(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->setAlpha(Landroid/view/SurfaceControl;F)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->setColor(Landroid/view/SurfaceControl;[F)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->setFinalCrop(Landroid/view/SurfaceControl;Landroid/graphics/Rect;)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->setLayer(Landroid/view/SurfaceControl;I)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->setMatrix(Landroid/view/SurfaceControl;FFFF)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->setMatrix(Landroid/view/SurfaceControl;Landroid/graphics/Matrix;[F)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->setPosition(Landroid/view/SurfaceControl;FF)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->setSize(Landroid/view/SurfaceControl;II)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->setWindowCrop(Landroid/view/SurfaceControl;Landroid/graphics/Rect;)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/SurfaceControl$Transaction;->show(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
-Landroid/view/ThreadedRenderer;->createHardwareBitmap(Landroid/view/RenderNode;II)Landroid/graphics/Bitmap;
-Landroid/view/View;->hideTooltip()V
-Landroid/view/View;->setTooltip(Ljava/lang/CharSequence;)V
-Landroid/webkit/WebSettings;->getPluginsPath()Ljava/lang/String;
-Landroid/webkit/WebSettings;->getUseDoubleTree()Z
-Landroid/webkit/WebSettings;->setPluginsPath(Ljava/lang/String;)V
-Landroid/webkit/WebSettings;->setUseDoubleTree(Z)V
-Landroid/webkit/WebView;->getPluginList()Landroid/webkit/PluginList;
-Landroid/webkit/WebView;->getZoomControls()Landroid/view/View;
-Landroid/webkit/WebView;->refreshPlugins(Z)V
-Landroid/widget/ListView;->lookForSelectablePosition(IZ)I
Lcom/android/ims/ImsConfigListener;->onSetFeatureResponse(IIII)V
Lcom/android/ims/internal/IImsCallSessionListener;->callSessionConferenceStateUpdated(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsConferenceState;)V
Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHandover(Lcom/android/ims/internal/IImsCallSession;IILandroid/telephony/ims/ImsReasonInfo;)V
@@ -387,19 +248,8 @@
Lcom/android/ims/internal/uce/uceservice/IUceService;->isServiceStarted()Z
Lcom/android/ims/internal/uce/uceservice/IUceService;->startService(Lcom/android/ims/internal/uce/uceservice/IUceListener;)Z
Lcom/android/ims/internal/uce/uceservice/IUceService;->stopService()Z
-Lcom/android/internal/app/AlertController$AlertParams;->mIconId:I
-Lcom/android/internal/app/AlertController$AlertParams;->mMessage:Ljava/lang/CharSequence;
-Lcom/android/internal/app/AlertController$AlertParams;->mNegativeButtonListener:Landroid/content/DialogInterface$OnClickListener;
-Lcom/android/internal/app/AlertController$AlertParams;->mNegativeButtonText:Ljava/lang/CharSequence;
-Lcom/android/internal/app/AlertController$AlertParams;->mPositiveButtonListener:Landroid/content/DialogInterface$OnClickListener;
-Lcom/android/internal/app/AlertController$AlertParams;->mPositiveButtonText:Ljava/lang/CharSequence;
-Lcom/android/internal/app/AlertController$AlertParams;->mTitle:Ljava/lang/CharSequence;
-Lcom/android/internal/app/AlertController$AlertParams;->mView:Landroid/view/View;
-Lcom/android/internal/app/AlertController;->getButton(I)Landroid/widget/Button;
Lcom/android/internal/app/IAppOpsService;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;)V
Lcom/android/internal/content/PackageMonitor;-><init>()V
-Lcom/android/internal/content/PackageMonitor;->register(Landroid/content/Context;Landroid/os/Looper;Landroid/os/UserHandle;Z)V
-Lcom/android/internal/content/PackageMonitor;->unregister()V
Lcom/android/internal/location/ILocationProvider$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/location/ILocationProvider;
Lcom/android/internal/location/ILocationProvider;->disable()V
Lcom/android/internal/location/ILocationProvider;->enable()V
@@ -408,21 +258,6 @@
Lcom/android/internal/location/ILocationProvider;->getStatusUpdateTime()J
Lcom/android/internal/location/ILocationProvider;->sendExtraCommand(Ljava/lang/String;Landroid/os/Bundle;)Z
Lcom/android/internal/location/ILocationProvider;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
-Lcom/android/internal/location/ProviderRequest;-><init>()V
-Lcom/android/internal/location/ProviderRequest;->interval:J
-Lcom/android/internal/location/ProviderRequest;->locationRequests:Ljava/util/List;
-Lcom/android/internal/location/ProviderRequest;->reportLocation:Z
-Lcom/android/internal/os/BatteryStatsImpl;->getDischargeCurrentLevel()I
-Lcom/android/internal/os/BatteryStatsImpl;->getDischargeStartLevel()I
-Lcom/android/internal/os/BatteryStatsImpl;->getPhoneOnTime(JI)J
-Lcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalScanningTime(JI)J
-Lcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalStrengthTime(IJI)J
-Lcom/android/internal/os/BatteryStatsImpl;->getScreenBrightnessTime(IJI)J
-Lcom/android/internal/os/BatteryStatsImpl;->getWifiOnTime(JI)J
-Lcom/android/internal/os/SomeArgs;->arg2:Ljava/lang/Object;
-Lcom/android/internal/os/SomeArgs;->arg3:Ljava/lang/Object;
-Lcom/android/internal/os/SomeArgs;->obtain()Lcom/android/internal/os/SomeArgs;
-Lcom/android/internal/os/SomeArgs;->recycle()V
Lcom/android/internal/R$styleable;->NumberPicker:[I
Lcom/android/internal/R$styleable;->TwoLineListItem:[I
Lcom/android/internal/telephony/GsmAlphabet;->gsm7BitPackedToString([BII)Ljava/lang/String;
@@ -436,14 +271,6 @@
Lcom/android/internal/telephony/OperatorInfo;->getOperatorAlphaShort()Ljava/lang/String;
Lcom/android/internal/telephony/OperatorInfo;->getOperatorNumeric()Ljava/lang/String;
Lcom/android/internal/telephony/OperatorInfo;->getState()Lcom/android/internal/telephony/OperatorInfo$State;
-Lcom/android/internal/util/AsyncChannel;-><init>()V
-Lcom/android/internal/util/AsyncChannel;->connect(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)V
-Lcom/android/internal/util/AsyncChannel;->sendMessage(Landroid/os/Message;)V
-Lcom/android/internal/util/IndentingPrintWriter;-><init>(Ljava/io/Writer;Ljava/lang/String;)V
-Lcom/android/internal/util/IndentingPrintWriter;->decreaseIndent()Lcom/android/internal/util/IndentingPrintWriter;
-Lcom/android/internal/util/IndentingPrintWriter;->increaseIndent()Lcom/android/internal/util/IndentingPrintWriter;
-Lcom/android/internal/util/XmlUtils;->beginDocument(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
-Lcom/android/internal/util/XmlUtils;->nextElement(Lorg/xmlpull/v1/XmlPullParser;)V
Ljava/lang/System;->arraycopy([BI[BII)V
Ljava/net/Inet4Address;->ALL:Ljava/net/InetAddress;
Ljava/net/Inet4Address;->ANY:Ljava/net/InetAddress;
diff --git a/config/preloaded-classes b/config/preloaded-classes
index 0014793..63c583f 100644
--- a/config/preloaded-classes
+++ b/config/preloaded-classes
@@ -6236,9 +6236,9 @@
org.json.JSONStringer
org.json.JSONStringer$Scope
org.json.JSONTokener
-org.kxml2.io.KXmlParser
-org.kxml2.io.KXmlParser$ValueContext
-org.kxml2.io.KXmlSerializer
+com.android.org.kxml2.io.KXmlParser
+com.android.org.kxml2.io.KXmlParser$ValueContext
+com.android.org.kxml2.io.KXmlSerializer
org.w3c.dom.CharacterData
org.w3c.dom.DOMImplementation
org.w3c.dom.Document
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index a0cfa8c..8d5b96b 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -6382,6 +6382,10 @@
}
void dumpInner(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+ if (args != null && args.length > 0 && args[0].equals("--autofill")) {
+ dumpAutofillManager(prefix, writer);
+ return;
+ }
writer.print(prefix); writer.print("Local Activity ");
writer.print(Integer.toHexString(System.identityHashCode(this)));
writer.println(" State:");
@@ -6409,16 +6413,20 @@
mHandler.getLooper().dump(new PrintWriterPrinter(writer), prefix);
+ dumpAutofillManager(prefix, writer);
+
+ ResourcesManager.getInstance().dump(prefix, writer);
+ }
+
+ void dumpAutofillManager(String prefix, PrintWriter writer) {
final AutofillManager afm = getAutofillManager();
if (afm != null) {
+ afm.dump(prefix, writer);
writer.print(prefix); writer.print("Autofill Compat Mode: ");
writer.println(isAutofillCompatibilityEnabled());
- afm.dump(prefix, writer);
} else {
writer.print(prefix); writer.println("No AutofillManager");
}
-
- ResourcesManager.getInstance().dump(prefix, writer);
}
/**
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 63ffa8b..c12d8e2 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -3360,7 +3360,7 @@
* @see #forceStopPackageAsUser(String, int)
* @hide
*/
- @SystemApi
+ @SystemApi @TestApi
@RequiresPermission(Manifest.permission.FORCE_STOP_PACKAGES)
public void forceStopPackage(String packageName) {
forceStopPackageAsUser(packageName, mContext.getUserId());
@@ -3987,6 +3987,19 @@
}
/**
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(Manifest.permission.CHANGE_CONFIGURATION)
+ public void scheduleApplicationInfoChanged(List<String> packages, int userId) {
+ try {
+ getService().scheduleApplicationInfoChanged(packages, userId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* The AppTask allows you to manage your own application's tasks.
* See {@link android.app.ActivityManager#getAppTasks()}
*/
diff --git a/core/java/android/app/ActivityTaskManager.java b/core/java/android/app/ActivityTaskManager.java
index 2f18b89..af8aa4e 100644
--- a/core/java/android/app/ActivityTaskManager.java
+++ b/core/java/android/app/ActivityTaskManager.java
@@ -29,6 +29,8 @@
import android.os.ServiceManager;
import android.util.Singleton;
+import java.util.List;
+
/**
* This class gives information about, and interacts with activities and their containers like task,
* stacks, and displays.
@@ -263,4 +265,140 @@
&& Resources.getSystem().getBoolean(
com.android.internal.R.bool.config_supportsSplitScreenMultiWindow);
}
+
+ /**
+ * Moves the top activity in the input stackId to the pinned stack.
+ * @param stackId Id of stack to move the top activity to pinned stack.
+ * @param bounds Bounds to use for pinned stack.
+ * @return True if the top activity of stack was successfully moved to the pinned stack.
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ public boolean moveTopActivityToPinnedStack(int stackId, Rect bounds) {
+ try {
+ return getService().moveTopActivityToPinnedStack(stackId, bounds);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Start to enter lock task mode for given task by system(UI).
+ * @param taskId Id of task to lock.
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ public void startSystemLockTaskMode(int taskId) {
+ try {
+ getService().startSystemLockTaskMode(taskId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Stop lock task mode by system(UI).
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ public void stopSystemLockTaskMode() {
+ try {
+ getService().stopSystemLockTaskMode();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Move task to stack with given id.
+ * @param taskId Id of the task to move.
+ * @param stackId Id of the stack for task moving.
+ * @param toTop Whether the given task should shown to top of stack.
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ public void moveTaskToStack(int taskId, int stackId, boolean toTop) {
+ try {
+ getService().moveTaskToStack(taskId, stackId, toTop);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Resize the input stack id to the given bounds with animate setting.
+ * @param stackId Id of the stack to resize.
+ * @param bounds Bounds to resize the stack to or {@code null} for fullscreen.
+ * @param animate Whether we should play an animation for resizing stack.
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ public void resizeStack(int stackId, Rect bounds, boolean animate) {
+ try {
+ getService().resizeStack(stackId, bounds, false, false, animate /* animate */,
+ -1 /* animationDuration */);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Resize task to given bounds.
+ * @param taskId Id of task to resize.
+ * @param bounds Bounds to resize task.
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ public void resizeTask(int taskId, Rect bounds) {
+ try {
+ getService().resizeTask(taskId, bounds, RESIZE_MODE_SYSTEM);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Resize docked stack & its task to given stack & task bounds.
+ * @param stackBounds Bounds to resize stack.
+ * @param taskBounds Bounds to resize task.
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ public void resizeDockedStack(Rect stackBounds, Rect taskBounds) {
+ try {
+ getService().resizeDockedStack(stackBounds, taskBounds, null, null, null);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * List all activity stacks information.
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ public String listAllStacks() {
+ final List<ActivityManager.StackInfo> stacks;
+ try {
+ stacks = getService().getAllStackInfos();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+
+ final StringBuilder sb = new StringBuilder();
+ if (stacks != null) {
+ for (ActivityManager.StackInfo info : stacks) {
+ sb.append(info).append("\n");
+ }
+ }
+ return sb.toString();
+ }
}
diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java
index 6d1383a..2d9fbf9 100644
--- a/core/java/android/app/ResourcesManager.java
+++ b/core/java/android/app/ResourcesManager.java
@@ -125,7 +125,7 @@
}
}
- private static final boolean ENABLE_APK_ASSETS_CACHE = true;
+ private static final boolean ENABLE_APK_ASSETS_CACHE = false;
/**
* The ApkAssets we are caching and intend to hold strong references to.
diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java
index 15bcbe3..173b766 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -41,18 +41,23 @@
import java.util.List;
/**
- * Assist data automatically created by the platform's implementation of assist and autofill.
+ * <p>This API automatically creates assist data from the platform's
+ * implementation of assist and autofill.
*
* <p>The structure is used for assist purposes when created by
* {@link android.app.Activity#onProvideAssistData}, {@link View#onProvideStructure(ViewStructure)},
* or {@link View#onProvideVirtualStructure(ViewStructure)}.
*
- * <p>The structure is used for autofill purposes when created by
+ * <p>The structure is also used for autofill purposes when created by
* {@link View#onProvideAutofillStructure(ViewStructure, int)},
* or {@link View#onProvideAutofillVirtualStructure(ViewStructure, int)}.
*
- * <p>For performance reasons, some properties of the assist data might be available just for assist
- * or autofill purposes; in those case, the property availability will be document in its javadoc.
+ * <p>For performance reasons, some properties of the assist data might only be available for
+ * assist or autofill purposes. In those cases, a property's availability will be documented
+ * in its javadoc.
+ *
+ * <p>To learn about using Autofill in your app, read the
+ * <a href="/guide/topics/text/autofill">Autofill Framework</a> guides.
*/
public class AssistStructure implements Parcelable {
static final String TAG = "AssistStructure";
diff --git a/core/java/android/app/job/JobSnapshot.java b/core/java/android/app/job/JobSnapshot.java
index d6cc70d..ceeaab7 100644
--- a/core/java/android/app/job/JobSnapshot.java
+++ b/core/java/android/app/job/JobSnapshot.java
@@ -50,6 +50,14 @@
}
/**
+ * Returning JobInfo bound to this snapshot
+ * @return JobInfo of this snapshot
+ */
+ public JobInfo getJobInfo() {
+ return mJob;
+ }
+
+ /**
* Is this job actually runnable at this moment?
*/
public boolean isRunnable() {
@@ -77,7 +85,7 @@
*/
public boolean isRequireDeviceIdleSatisfied() {
return !mJob.isRequireDeviceIdle()
- || satisfied(JobInfo.CONSTRAINT_FLAG_BATTERY_NOT_LOW);
+ || satisfied(JobInfo.CONSTRAINT_FLAG_DEVICE_IDLE);
}
public boolean isRequireStorageNotLowSatisfied() {
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 3c22905..4c655b5 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -446,6 +446,12 @@
*/
public static final int IO_CAPABILITY_UNKNOWN = 255;
+ /** @hide */
+ @IntDef({IO_CAPABILITY_OUT, IO_CAPABILITY_IO, IO_CAPABILITY_IN, IO_CAPABILITY_NONE,
+ IO_CAPABILITY_KBDISP})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface IoCapability {}
+
/**
* Broadcast Action: The local Bluetooth adapter has started the remote
* device discovery process.
@@ -1292,6 +1298,7 @@
* @hide
*/
@RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @IoCapability
public int getIoCapability() {
if (getState() != STATE_ON) return BluetoothAdapter.IO_CAPABILITY_UNKNOWN;
try {
@@ -1319,7 +1326,7 @@
* @hide
*/
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
- public boolean setIoCapability(int capability) {
+ public boolean setIoCapability(@IoCapability int capability) {
if (getState() != STATE_ON) return false;
try {
mServiceLock.readLock().lock();
@@ -1342,6 +1349,7 @@
* @hide
*/
@RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @IoCapability
public int getLeIoCapability() {
if (getState() != STATE_ON) return BluetoothAdapter.IO_CAPABILITY_UNKNOWN;
try {
@@ -1369,7 +1377,7 @@
* @hide
*/
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
- public boolean setLeIoCapability(int capability) {
+ public boolean setLeIoCapability(@IoCapability int capability) {
if (getState() != STATE_ON) return false;
try {
mServiceLock.readLock().lock();
diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java
index f5e2a09..ac126ae 100644
--- a/core/java/android/bluetooth/le/BluetoothLeScanner.java
+++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java
@@ -275,7 +275,9 @@
}
/**
- * Stops an ongoing Bluetooth LE scan started using a PendingIntent.
+ * Stops an ongoing Bluetooth LE scan started using a PendingIntent. When creating the
+ * PendingIntent parameter, please do not use the FLAG_CANCEL_CURRENT flag. Otherwise, the stop
+ * scan may have no effect.
*
* @param callbackIntent The PendingIntent that was used to start the scan.
* @see #startScan(List, ScanSettings, PendingIntent)
diff --git a/core/java/android/content/ClipboardManager.java b/core/java/android/content/ClipboardManager.java
index 3b6c8c1..3fe17840 100644
--- a/core/java/android/content/ClipboardManager.java
+++ b/core/java/android/content/ClipboardManager.java
@@ -95,6 +95,9 @@
* Sets the current primary clip on the clipboard. This is the clip that
* is involved in normal cut and paste operations.
*
+ * <em>If the application is not the default IME or does not have input focus this will have
+ * no effect.</em>
+ *
* @param clip The clipped data item to set.
* @see #getPrimaryClip()
* @see #clearPrimaryClip()
@@ -112,6 +115,9 @@
/**
* Clears any current primary clip on the clipboard.
*
+ * <em>If the application is not the default IME or does not have input focus this will have
+ * no effect.</em>
+ *
* @see #setPrimaryClip(ClipData)
*/
public void clearPrimaryClip() {
@@ -125,6 +131,9 @@
/**
* Returns the current primary clip on the clipboard.
*
+ * <em>If the application is not the default IME or does not have input focus this return
+ * {@code null}.</em>
+ *
* @see #setPrimaryClip(ClipData)
*/
public @Nullable ClipData getPrimaryClip() {
@@ -139,6 +148,9 @@
* Returns a description of the current primary clip on the clipboard
* but not a copy of its data.
*
+ * <em>If the application is not the default IME or does not have input focus this return
+ * {@code null}.</em>
+ *
* @see #setPrimaryClip(ClipData)
*/
public @Nullable ClipDescription getPrimaryClipDescription() {
@@ -151,6 +163,9 @@
/**
* Returns true if there is currently a primary clip on the clipboard.
+ *
+ * <em>If the application is not the default IME or the does not have input focus this will
+ * return {@code false}.</em>
*/
public boolean hasPrimaryClip() {
try {
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index a6b81b5..8c2b76f 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -2250,6 +2250,7 @@
* <p>Includes the following extras:
* <ul>
* <li> {@link #EXTRA_CHANGED_PACKAGE_LIST} is the set of packages which have been suspended
+ * <li> {@link #EXTRA_CHANGED_UID_LIST} is the set of uids which have been suspended
* </ul>
*
* <p class="note">This is a protected intent that can only be sent
@@ -2262,6 +2263,7 @@
* <p>Includes the following extras:
* <ul>
* <li> {@link #EXTRA_CHANGED_PACKAGE_LIST} is the set of packages which have been unsuspended
+ * <li> {@link #EXTRA_CHANGED_UID_LIST} is the set of uids which have been unsuspended
* </ul>
*
* <p class="note">This is a protected intent that can only be sent
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 83e287a..b7a5352 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -615,6 +615,13 @@
public static final int PRIVATE_FLAG_PRODUCT = 1 << 19;
/**
+ * Value for {@link #privateFlags}: whether this app is pre-installed on the
+ * google partition of the system image.
+ * @hide
+ */
+ public static final int PRIVATE_FLAG_PRODUCT_SERVICES = 1 << 21;
+
+ /**
* Value for {@link #privateFlags}: whether this app is signed with the
* platform key.
* @hide
@@ -639,6 +646,7 @@
PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE,
PRIVATE_FLAG_PRIVILEGED,
PRIVATE_FLAG_PRODUCT,
+ PRIVATE_FLAG_PRODUCT_SERVICES,
PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER,
PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY,
PRIVATE_FLAG_STATIC_SHARED_LIBRARY,
@@ -1888,6 +1896,11 @@
return (privateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT) != 0;
}
+ /** @hide */
+ public boolean isProductServices() {
+ return (privateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES) != 0;
+ }
+
/**
* Returns whether or not this application was installed as a virtual preload.
*/
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 876cf2b..83757c4 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -6785,6 +6785,11 @@
}
/** @hide */
+ public boolean isProductServices() {
+ return applicationInfo.isProductServices();
+ }
+
+ /** @hide */
public boolean isPrivileged() {
return applicationInfo.isPrivilegedApp();
}
diff --git a/core/java/android/hardware/biometrics/BiometricPrompt.java b/core/java/android/hardware/biometrics/BiometricPrompt.java
index bad418a..02bcff5 100644
--- a/core/java/android/hardware/biometrics/BiometricPrompt.java
+++ b/core/java/android/hardware/biometrics/BiometricPrompt.java
@@ -69,6 +69,7 @@
* @hide
*/
public static final int HIDE_DIALOG_DELAY = 2000; // ms
+
/**
* @hide
*/
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index f7d1b8d..35584ae 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -773,7 +773,6 @@
* @see CaptureRequest#CONTROL_AWB_REGIONS
* @hide
*/
- @UnsupportedAppUsage
public static final Key<int[]> CONTROL_MAX_REGIONS =
new Key<int[]>("android.control.maxRegions", int[].class);
@@ -879,7 +878,6 @@
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
* @hide
*/
- @UnsupportedAppUsage
public static final Key<android.hardware.camera2.params.HighSpeedVideoConfiguration[]> CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS =
new Key<android.hardware.camera2.params.HighSpeedVideoConfiguration[]>("android.control.availableHighSpeedVideoConfigurations", android.hardware.camera2.params.HighSpeedVideoConfiguration[].class);
@@ -1148,7 +1146,6 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @hide
*/
- @UnsupportedAppUsage
public static final Key<android.util.Size> LENS_INFO_SHADING_MAP_SIZE =
new Key<android.util.Size>("android.lens.info.shadingMapSize", android.util.Size.class);
@@ -1500,7 +1497,6 @@
* @hide
*/
@Deprecated
- @UnsupportedAppUsage
public static final Key<Byte> QUIRKS_USE_PARTIAL_RESULT =
new Key<Byte>("android.quirks.usePartialResult", byte.class);
@@ -1538,7 +1534,6 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @hide
*/
- @UnsupportedAppUsage
public static final Key<int[]> REQUEST_MAX_NUM_OUTPUT_STREAMS =
new Key<int[]>("android.request.maxNumOutputStreams", int[].class);
@@ -1778,7 +1773,6 @@
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
* @hide
*/
- @UnsupportedAppUsage
public static final Key<int[]> REQUEST_AVAILABLE_REQUEST_KEYS =
new Key<int[]>("android.request.availableRequestKeys", int[].class);
@@ -1804,7 +1798,6 @@
* @see CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<int[]> REQUEST_AVAILABLE_RESULT_KEYS =
new Key<int[]>("android.request.availableResultKeys", int[].class);
@@ -1817,7 +1810,6 @@
* <p>This key is available on all devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<int[]> REQUEST_AVAILABLE_CHARACTERISTICS_KEYS =
new Key<int[]>("android.request.availableCharacteristicsKeys", int[].class);
@@ -1864,7 +1856,6 @@
* <p>This key is available on all devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<int[]> REQUEST_AVAILABLE_SESSION_KEYS =
new Key<int[]>("android.request.availableSessionKeys", int[].class);
@@ -1885,7 +1876,6 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @hide
*/
- @UnsupportedAppUsage
public static final Key<int[]> REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS =
new Key<int[]>("android.request.availablePhysicalCameraRequestKeys", int[].class);
@@ -1901,7 +1891,6 @@
* @hide
*/
@Deprecated
- @UnsupportedAppUsage
public static final Key<int[]> SCALER_AVAILABLE_FORMATS =
new Key<int[]>("android.scaler.availableFormats", int[].class);
@@ -1924,7 +1913,6 @@
* @hide
*/
@Deprecated
- @UnsupportedAppUsage
public static final Key<long[]> SCALER_AVAILABLE_JPEG_MIN_DURATIONS =
new Key<long[]>("android.scaler.availableJpegMinDurations", long[].class);
@@ -1943,7 +1931,6 @@
* @hide
*/
@Deprecated
- @UnsupportedAppUsage
public static final Key<android.util.Size[]> SCALER_AVAILABLE_JPEG_SIZES =
new Key<android.util.Size[]>("android.scaler.availableJpegSizes", android.util.Size[].class);
@@ -1985,7 +1972,6 @@
* @hide
*/
@Deprecated
- @UnsupportedAppUsage
public static final Key<long[]> SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS =
new Key<long[]>("android.scaler.availableProcessedMinDurations", long[].class);
@@ -2010,7 +1996,6 @@
* @hide
*/
@Deprecated
- @UnsupportedAppUsage
public static final Key<android.util.Size[]> SCALER_AVAILABLE_PROCESSED_SIZES =
new Key<android.util.Size[]>("android.scaler.availableProcessedSizes", android.util.Size[].class);
@@ -2066,7 +2051,6 @@
* @see CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS
* @hide
*/
- @UnsupportedAppUsage
public static final Key<android.hardware.camera2.params.ReprocessFormatsMap> SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP =
new Key<android.hardware.camera2.params.ReprocessFormatsMap>("android.scaler.availableInputOutputFormatsMap", android.hardware.camera2.params.ReprocessFormatsMap.class);
@@ -2159,7 +2143,6 @@
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<android.hardware.camera2.params.StreamConfiguration[]> SCALER_AVAILABLE_STREAM_CONFIGURATIONS =
new Key<android.hardware.camera2.params.StreamConfiguration[]>("android.scaler.availableStreamConfigurations", android.hardware.camera2.params.StreamConfiguration[].class);
@@ -2182,7 +2165,6 @@
* @see CaptureRequest#SENSOR_FRAME_DURATION
* @hide
*/
- @UnsupportedAppUsage
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> SCALER_AVAILABLE_MIN_FRAME_DURATIONS =
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.scaler.availableMinFrameDurations", android.hardware.camera2.params.StreamConfigurationDuration[].class);
@@ -2251,7 +2233,6 @@
* @see CaptureRequest#SENSOR_FRAME_DURATION
* @hide
*/
- @UnsupportedAppUsage
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> SCALER_AVAILABLE_STALL_DURATIONS =
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.scaler.availableStallDurations", android.hardware.camera2.params.StreamConfigurationDuration[].class);
@@ -3159,7 +3140,6 @@
* @see #LED_AVAILABLE_LEDS_TRANSMIT
* @hide
*/
- @UnsupportedAppUsage
public static final Key<int[]> LED_AVAILABLE_LEDS =
new Key<int[]>("android.led.availableLeds", int[].class);
@@ -3346,7 +3326,6 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @hide
*/
- @UnsupportedAppUsage
public static final Key<android.hardware.camera2.params.StreamConfiguration[]> DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS =
new Key<android.hardware.camera2.params.StreamConfiguration[]>("android.depth.availableDepthStreamConfigurations", android.hardware.camera2.params.StreamConfiguration[].class);
@@ -3373,7 +3352,6 @@
* @see CaptureRequest#SENSOR_FRAME_DURATION
* @hide
*/
- @UnsupportedAppUsage
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS =
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.depth.availableDepthMinFrameDurations", android.hardware.camera2.params.StreamConfigurationDuration[].class);
@@ -3397,7 +3375,6 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @hide
*/
- @UnsupportedAppUsage
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS =
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.depth.availableDepthStallDurations", android.hardware.camera2.params.StreamConfigurationDuration[].class);
@@ -3441,7 +3418,6 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @hide
*/
- @UnsupportedAppUsage
public static final Key<byte[]> LOGICAL_MULTI_CAMERA_PHYSICAL_IDS =
new Key<byte[]>("android.logicalMultiCamera.physicalIds", byte[].class);
diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java
index 47bef12..4a20468 100644
--- a/core/java/android/hardware/camera2/CaptureRequest.java
+++ b/core/java/android/hardware/camera2/CaptureRequest.java
@@ -2140,7 +2140,6 @@
* <p>This key is available on all devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<double[]> JPEG_GPS_COORDINATES =
new Key<double[]>("android.jpeg.gpsCoordinates", double[].class);
@@ -2151,7 +2150,6 @@
* <p>This key is available on all devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<String> JPEG_GPS_PROCESSING_METHOD =
new Key<String>("android.jpeg.gpsProcessingMethod", String.class);
@@ -2162,7 +2160,6 @@
* <p>This key is available on all devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<Long> JPEG_GPS_TIMESTAMP =
new Key<Long>("android.jpeg.gpsTimestamp", long.class);
@@ -2498,7 +2495,6 @@
* <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<Integer> REQUEST_ID =
new Key<Integer>("android.request.id", int.class);
@@ -2914,7 +2910,6 @@
* @see CaptureRequest#TONEMAP_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<float[]> TONEMAP_CURVE_BLUE =
new Key<float[]>("android.tonemap.curveBlue", float[].class);
@@ -2932,7 +2927,6 @@
* @see CaptureRequest#TONEMAP_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<float[]> TONEMAP_CURVE_GREEN =
new Key<float[]>("android.tonemap.curveGreen", float[].class);
@@ -2995,7 +2989,6 @@
* @see CaptureRequest#TONEMAP_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<float[]> TONEMAP_CURVE_RED =
new Key<float[]>("android.tonemap.curveRed", float[].class);
@@ -3170,7 +3163,6 @@
* <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<Boolean> LED_TRANSMIT =
new Key<Boolean>("android.led.transmit", boolean.class);
diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java
index 007794f..3c6c11d 100644
--- a/core/java/android/hardware/camera2/CaptureResult.java
+++ b/core/java/android/hardware/camera2/CaptureResult.java
@@ -2464,7 +2464,6 @@
* <p>This key is available on all devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<double[]> JPEG_GPS_COORDINATES =
new Key<double[]>("android.jpeg.gpsCoordinates", double[].class);
@@ -2475,7 +2474,6 @@
* <p>This key is available on all devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<String> JPEG_GPS_PROCESSING_METHOD =
new Key<String>("android.jpeg.gpsProcessingMethod", String.class);
@@ -2486,7 +2484,6 @@
* <p>This key is available on all devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<Long> JPEG_GPS_TIMESTAMP =
new Key<Long>("android.jpeg.gpsTimestamp", long.class);
@@ -3125,7 +3122,6 @@
* @hide
*/
@Deprecated
- @UnsupportedAppUsage
public static final Key<Boolean> QUIRKS_PARTIAL_RESULT =
new Key<Boolean>("android.quirks.partialResult", boolean.class);
@@ -3144,7 +3140,6 @@
* @hide
*/
@Deprecated
- @UnsupportedAppUsage
public static final Key<Integer> REQUEST_FRAME_COUNT =
new Key<Integer>("android.request.frameCount", int.class);
@@ -3158,7 +3153,6 @@
* <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<Integer> REQUEST_ID =
new Key<Integer>("android.request.id", int.class);
@@ -3720,7 +3714,6 @@
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<int[]> STATISTICS_FACE_IDS =
new Key<int[]>("android.statistics.faceIds", int[].class);
@@ -3747,7 +3740,6 @@
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<int[]> STATISTICS_FACE_LANDMARKS =
new Key<int[]>("android.statistics.faceLandmarks", int[].class);
@@ -3774,7 +3766,6 @@
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<android.graphics.Rect[]> STATISTICS_FACE_RECTANGLES =
new Key<android.graphics.Rect[]>("android.statistics.faceRectangles", android.graphics.Rect[].class);
@@ -3789,7 +3780,6 @@
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<byte[]> STATISTICS_FACE_SCORES =
new Key<byte[]>("android.statistics.faceScores", byte[].class);
@@ -3949,7 +3939,6 @@
* @see CameraCharacteristics#SENSOR_INFO_LENS_SHADING_APPLIED
* @hide
*/
- @UnsupportedAppUsage
public static final Key<float[]> STATISTICS_LENS_SHADING_MAP =
new Key<float[]>("android.statistics.lensShadingMap", float[].class);
@@ -3973,7 +3962,6 @@
* @hide
*/
@Deprecated
- @UnsupportedAppUsage
public static final Key<float[]> STATISTICS_PREDICTED_COLOR_GAINS =
new Key<float[]>("android.statistics.predictedColorGains", float[].class);
@@ -4000,7 +3988,6 @@
* @hide
*/
@Deprecated
- @UnsupportedAppUsage
public static final Key<Rational[]> STATISTICS_PREDICTED_COLOR_TRANSFORM =
new Key<Rational[]>("android.statistics.predictedColorTransform", Rational[].class);
@@ -4143,7 +4130,6 @@
* @see CaptureResult#SENSOR_TIMESTAMP
* @hide
*/
- @UnsupportedAppUsage
public static final Key<long[]> STATISTICS_OIS_TIMESTAMPS =
new Key<long[]>("android.statistics.oisTimestamps", long[].class);
@@ -4163,7 +4149,6 @@
* <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<float[]> STATISTICS_OIS_X_SHIFTS =
new Key<float[]>("android.statistics.oisXShifts", float[].class);
@@ -4183,7 +4168,6 @@
* <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<float[]> STATISTICS_OIS_Y_SHIFTS =
new Key<float[]>("android.statistics.oisYShifts", float[].class);
@@ -4224,7 +4208,6 @@
* @see CaptureRequest#TONEMAP_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<float[]> TONEMAP_CURVE_BLUE =
new Key<float[]>("android.tonemap.curveBlue", float[].class);
@@ -4242,7 +4225,6 @@
* @see CaptureRequest#TONEMAP_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<float[]> TONEMAP_CURVE_GREEN =
new Key<float[]>("android.tonemap.curveGreen", float[].class);
@@ -4305,7 +4287,6 @@
* @see CaptureRequest#TONEMAP_MODE
* @hide
*/
- @UnsupportedAppUsage
public static final Key<float[]> TONEMAP_CURVE_RED =
new Key<float[]>("android.tonemap.curveRed", float[].class);
@@ -4480,7 +4461,6 @@
* <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
* @hide
*/
- @UnsupportedAppUsage
public static final Key<Boolean> LED_TRANSMIT =
new Key<Boolean>("android.led.transmit", boolean.class);
@@ -4570,7 +4550,6 @@
* @see #SYNC_FRAME_NUMBER_UNKNOWN
* @hide
*/
- @UnsupportedAppUsage
public static final Key<Long> SYNC_FRAME_NUMBER =
new Key<Long>("android.sync.frameNumber", long.class);
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index bf5ab90..15868f1 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -1162,24 +1162,9 @@
@Override // binder call
public void onError(long deviceId, int error, int vendorCode) {
if (mExecutor != null) {
- // BiometricPrompt case
- if (error == FingerprintManager.FINGERPRINT_ERROR_USER_CANCELED
- || error == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
- // User tapped somewhere to cancel, or authentication was cancelled by the app
- // or got kicked out. The prompt is already gone, so send the error immediately.
- mExecutor.execute(() -> {
- sendErrorResult(deviceId, error, vendorCode);
- });
- } else {
- // User got an error that needs to be displayed on the dialog, post a delayed
- // runnable on the FingerprintManager handler that sends the error message after
- // FingerprintDialog.HIDE_DIALOG_DELAY to send the error to the application.
- mHandler.postDelayed(() -> {
- mExecutor.execute(() -> {
- sendErrorResult(deviceId, error, vendorCode);
- });
- }, BiometricPrompt.HIDE_DIALOG_DELAY);
- }
+ mExecutor.execute(() -> {
+ sendErrorResult(deviceId, error, vendorCode);
+ });
} else {
mHandler.obtainMessage(MSG_ERROR, error, vendorCode, deviceId).sendToTarget();
}
diff --git a/core/java/android/hardware/location/ContextHubManager.java b/core/java/android/hardware/location/ContextHubManager.java
index de13c81..12d0531 100644
--- a/core/java/android/hardware/location/ContextHubManager.java
+++ b/core/java/android/hardware/location/ContextHubManager.java
@@ -549,7 +549,7 @@
* Set a callback to receive messages from the context hub
*
* @param callback Callback object
- * @param handler Handler object
+ * @param handler Handler object, if null uses the Handler of the main Looper
*
* @see Callback
*
@@ -568,7 +568,7 @@
return -1;
}
mCallback = callback;
- mCallbackHandler = handler;
+ mCallbackHandler = (handler == null) ? new Handler(mMainLooper) : handler;
}
return 0;
}
@@ -722,26 +722,31 @@
return 0;
}
+ /**
+ * Invokes the ContextHubManager.Callback callback registered with the ContextHubManager.
+ *
+ * @param hubId The ID of the Context Hub the message came from
+ * @param nanoAppId The instance ID of the nanoapp the message came from
+ * @param message The message to provide the callback
+ */
+ private synchronized void invokeOnMessageReceiptCallback(
+ int hubId, int nanoAppId, ContextHubMessage message) {
+ if (mCallback != null) {
+ mCallback.onMessageReceipt(hubId, nanoAppId, message);
+ }
+ }
+
private final IContextHubCallback.Stub mClientCallback = new IContextHubCallback.Stub() {
@Override
- public void onMessageReceipt(final int hubId, final int nanoAppId,
- final ContextHubMessage message) {
- if (mCallback != null) {
- synchronized(this) {
- final Callback callback = mCallback;
- Handler handler = mCallbackHandler == null ?
- new Handler(mMainLooper) : mCallbackHandler;
- handler.post(new Runnable() {
- @Override
- public void run() {
- callback.onMessageReceipt(hubId, nanoAppId, message);
- }
- });
- }
- } else if (mLocalCallback != null) {
- // we always ensure that mCallback takes precedence, because mLocalCallback is only
- // for internal compatibility
- synchronized (this) {
+ public void onMessageReceipt(
+ final int hubId, final int nanoAppId, final ContextHubMessage message) {
+ synchronized (ContextHubManager.this) {
+ if (mCallback != null) {
+ mCallbackHandler.post(
+ () -> invokeOnMessageReceiptCallback(hubId, nanoAppId, message));
+ } else if (mLocalCallback != null) {
+ // We always ensure that mCallback takes precedence, because mLocalCallback is
+ // only for internal compatibility
mLocalCallback.onMessageReceipt(hubId, nanoAppId, message);
}
}
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index e606964..6ddcbe0 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -1752,13 +1752,13 @@
public static native long getPss();
/**
- * Retrieves the PSS memory used by the process as given by the
- * smaps. Optionally supply a long array of 2 entries to also
- * receive the Uss and SwapPss of the process, and another array to also
- * retrieve the separate memtrack size.
+ * Retrieves the PSS memory used by the process as given by the smaps. Optionally supply a long
+ * array of up to 3 entries to also receive (up to 3 values in order): the Uss and SwapPss and
+ * Rss (only filled in as of {@link android.os.Build.VERSION_CODES#P}) of the process, and
+ * another array to also retrieve the separate memtrack size.
* @hide
*/
- public static native long getPss(int pid, long[] outUssSwapPss, long[] outMemtrack);
+ public static native long getPss(int pid, long[] outUssSwapPssRss, long[] outMemtrack);
/** @hide */
public static final int MEMINFO_TOTAL = 0;
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index e32ed9d..347f60f 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -45,6 +45,7 @@
private static final String ENV_ODM_ROOT = "ODM_ROOT";
private static final String ENV_VENDOR_ROOT = "VENDOR_ROOT";
private static final String ENV_PRODUCT_ROOT = "PRODUCT_ROOT";
+ private static final String ENV_PRODUCT_SERVICES_ROOT = "PRODUCT_SERVICES_ROOT";
/** {@hide} */
public static final String DIR_ANDROID = "Android";
@@ -67,6 +68,8 @@
private static final File DIR_ODM_ROOT = getDirectory(ENV_ODM_ROOT, "/odm");
private static final File DIR_VENDOR_ROOT = getDirectory(ENV_VENDOR_ROOT, "/vendor");
private static final File DIR_PRODUCT_ROOT = getDirectory(ENV_PRODUCT_ROOT, "/product");
+ private static final File DIR_PRODUCT_SERVICES_ROOT = getDirectory(ENV_PRODUCT_SERVICES_ROOT,
+ "/product_services");
private static UserEnvironment sCurrentUser;
private static boolean sUserRequired;
@@ -196,6 +199,16 @@
}
/**
+ * Return root directory of the "product_services" partition holding middleware
+ * services if any. If present, the partition is mounted read-only.
+ *
+ * @hide
+ */
+ public static File getProductServicesDirectory() {
+ return DIR_PRODUCT_SERVICES_ROOT;
+ }
+
+ /**
* Return the system directory for a user. This is for use by system
* services to store files relating to the user. This directory will be
* automatically deleted when the user is removed.
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 13e4e38..7ceeb52 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -56,6 +56,7 @@
void shutdown(boolean confirm, String reason, boolean wait);
void crash(String message);
int getLastShutdownReason();
+ int getLastSleepReason();
void setStayOnSetting(int val);
void boostScreenBrightness(long time);
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 463a6aa..89a5def 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -397,6 +397,23 @@
public static final int GO_TO_SLEEP_REASON_ACCESSIBILITY = 7;
/**
+ * @hide
+ */
+ public static String sleepReasonToString(int sleepReason) {
+ switch (sleepReason) {
+ case GO_TO_SLEEP_REASON_APPLICATION: return "application";
+ case GO_TO_SLEEP_REASON_DEVICE_ADMIN: return "device_admin";
+ case GO_TO_SLEEP_REASON_TIMEOUT: return "timeout";
+ case GO_TO_SLEEP_REASON_LID_SWITCH: return "lid_switch";
+ case GO_TO_SLEEP_REASON_POWER_BUTTON: return "power_button";
+ case GO_TO_SLEEP_REASON_HDMI: return "hdmi";
+ case GO_TO_SLEEP_REASON_SLEEP_BUTTON: return "sleep_button";
+ case GO_TO_SLEEP_REASON_ACCESSIBILITY: return "accessibility";
+ default: return Integer.toString(sleepReason);
+ }
+ }
+
+ /**
* Go to sleep flag: Skip dozing state and directly go to full sleep.
* @hide
*/
@@ -1310,6 +1327,22 @@
}
/**
+ * Returns the reason the device last went to sleep (i.e. the last value of
+ * the second argument of {@link #goToSleep(long, int, int) goToSleep}).
+ *
+ * @return One of the {@code GO_TO_SLEEP_REASON_*} constants.
+ *
+ * @hide
+ */
+ public int getLastSleepReason() {
+ try {
+ return mService.getLastSleepReason();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Intent that is broadcast when the state of {@link #isPowerSaveMode()} changes.
* This broadcast is only sent to registered receivers.
*/
diff --git a/core/java/android/preference/DialogPreference.java b/core/java/android/preference/DialogPreference.java
index ed29f74..4b5a7b4 100644
--- a/core/java/android/preference/DialogPreference.java
+++ b/core/java/android/preference/DialogPreference.java
@@ -20,6 +20,7 @@
import android.annotation.CallSuper;
import android.annotation.DrawableRes;
import android.annotation.StringRes;
+import android.annotation.UnsupportedAppUsage;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
@@ -53,19 +54,27 @@
public abstract class DialogPreference extends Preference implements
DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
PreferenceManager.OnActivityDestroyListener {
+ @UnsupportedAppUsage
private AlertDialog.Builder mBuilder;
+ @UnsupportedAppUsage
private CharSequence mDialogTitle;
+ @UnsupportedAppUsage
private CharSequence mDialogMessage;
+ @UnsupportedAppUsage
private Drawable mDialogIcon;
+ @UnsupportedAppUsage
private CharSequence mPositiveButtonText;
+ @UnsupportedAppUsage
private CharSequence mNegativeButtonText;
private int mDialogLayoutResId;
/** The dialog, if it is showing. */
+ @UnsupportedAppUsage
private Dialog mDialog;
/** Which button was clicked. */
+ @UnsupportedAppUsage
private int mWhichButtonClicked;
/** Dismiss the dialog on the UI thread, but not inline with handlers */
diff --git a/core/java/android/preference/EditTextPreference.java b/core/java/android/preference/EditTextPreference.java
index 9467c22..4d2ac67 100644
--- a/core/java/android/preference/EditTextPreference.java
+++ b/core/java/android/preference/EditTextPreference.java
@@ -17,6 +17,7 @@
package android.preference;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
@@ -46,6 +47,7 @@
/**
* The edit text shown in the dialog.
*/
+ @UnsupportedAppUsage
private EditText mEditText;
private String mText;
diff --git a/core/java/android/preference/ListPreference.java b/core/java/android/preference/ListPreference.java
index f9323ed..c0c71af 100644
--- a/core/java/android/preference/ListPreference.java
+++ b/core/java/android/preference/ListPreference.java
@@ -17,6 +17,7 @@
package android.preference;
import android.annotation.ArrayRes;
+import android.annotation.UnsupportedAppUsage;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
@@ -41,6 +42,7 @@
private CharSequence[] mEntryValues;
private String mValue;
private String mSummary;
+ @UnsupportedAppUsage
private int mClickedDialogEntryIndex;
private boolean mValueSet;
diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java
index 4306bc4..98b69a8 100644
--- a/core/java/android/preference/Preference.java
+++ b/core/java/android/preference/Preference.java
@@ -21,6 +21,7 @@
import android.annotation.LayoutRes;
import android.annotation.Nullable;
import android.annotation.StringRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -116,6 +117,7 @@
private int mOrder = DEFAULT_ORDER;
private CharSequence mTitle;
private int mTitleRes;
+ @UnsupportedAppUsage
private CharSequence mSummary;
/**
* mIconResId is overridden by mIcon, if mIcon is specified.
@@ -144,7 +146,9 @@
*/
private boolean mShouldDisableView = true;
+ @UnsupportedAppUsage
private int mLayoutResId = com.android.internal.R.layout.preference;
+ @UnsupportedAppUsage
private int mWidgetLayoutResId;
private OnPreferenceChangeInternalListener mListener;
@@ -974,6 +978,7 @@
*
* @return A unique ID for this Preference.
*/
+ @UnsupportedAppUsage
long getId() {
return mId;
}
@@ -1126,6 +1131,7 @@
* processing). May be {@code null}.
* @hide
*/
+ @UnsupportedAppUsage
public void performClick(PreferenceScreen preferenceScreen) {
if (!isEnabled()) {
@@ -1161,6 +1167,7 @@
* @return True if the Preference handled the key. Returns false by default.
* @hide
*/
+ @UnsupportedAppUsage
public boolean onKey(View v, int keyCode, KeyEvent event) {
return false;
}
@@ -1281,6 +1288,7 @@
* @param listener The listener.
* @see #notifyChanged()
*/
+ @UnsupportedAppUsage
final void setOnPreferenceChangeInternalListener(OnPreferenceChangeInternalListener listener) {
mListener = listener;
}
@@ -1399,6 +1407,7 @@
* @param dependent The dependent Preference that will be enabled/disabled
* according to the state of this Preference.
*/
+ @UnsupportedAppUsage
private void registerDependent(Preference dependent) {
if (mDependents == null) {
mDependents = new ArrayList<Preference>();
diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java
index 257f2cf..8ed2605 100644
--- a/core/java/android/preference/PreferenceActivity.java
+++ b/core/java/android/preference/PreferenceActivity.java
@@ -19,6 +19,7 @@
import android.animation.LayoutTransition;
import android.annotation.Nullable;
import android.annotation.StringRes;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.XmlRes;
import android.app.Fragment;
import android.app.FragmentBreadCrumbs;
@@ -198,6 +199,7 @@
private FrameLayout mListFooter;
+ @UnsupportedAppUsage
private ViewGroup mPrefsContainer;
// Backup of the original activity title. This is used when navigating back to the headers list
@@ -215,6 +217,7 @@
// --- State for old mode when showing a single preference list
+ @UnsupportedAppUsage
private PreferenceManager mPreferenceManager;
private Bundle mSavedInstanceState;
@@ -739,6 +742,7 @@
* Returns the Header list
* @hide
*/
+ @UnsupportedAppUsage
public List<Header> getHeaders() {
return mHeaders;
}
@@ -1441,6 +1445,7 @@
* Binding late is preferred as any custom preference types created in
* {@link #onCreate(Bundle)} are able to have their views recycled.
*/
+ @UnsupportedAppUsage
private void postBindPreferences() {
if (mHandler.hasMessages(MSG_BIND_PREFERENCES)) return;
mHandler.obtainMessage(MSG_BIND_PREFERENCES).sendToTarget();
@@ -1469,6 +1474,7 @@
return mPreferenceManager;
}
+ @UnsupportedAppUsage
private void requirePreferenceManager() {
if (mPreferenceManager == null) {
if (mAdapter == null) {
diff --git a/core/java/android/preference/PreferenceFragment.java b/core/java/android/preference/PreferenceFragment.java
index 4c556ef..548895e 100644
--- a/core/java/android/preference/PreferenceFragment.java
+++ b/core/java/android/preference/PreferenceFragment.java
@@ -17,6 +17,7 @@
package android.preference;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.XmlRes;
import android.app.Activity;
import android.app.Fragment;
@@ -113,6 +114,7 @@
private static final String PREFERENCES_TAG = "android:preferences";
+ @UnsupportedAppUsage
private PreferenceManager mPreferenceManager;
private ListView mList;
private boolean mHavePrefs;
@@ -402,6 +404,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public ListView getListView() {
ensureList();
return mList;
diff --git a/core/java/android/preference/PreferenceManager.java b/core/java/android/preference/PreferenceManager.java
index 6095e6f..c76c8d3 100644
--- a/core/java/android/preference/PreferenceManager.java
+++ b/core/java/android/preference/PreferenceManager.java
@@ -18,6 +18,7 @@
import android.annotation.Nullable;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.XmlRes;
import android.app.Activity;
import android.content.Context;
@@ -67,6 +68,7 @@
* Fragment that owns this instance.
*/
@Nullable
+ @UnsupportedAppUsage
private PreferenceFragment mFragment;
/**
@@ -90,6 +92,7 @@
* Cached shared preferences.
*/
@Nullable
+ @UnsupportedAppUsage
private SharedPreferences mSharedPreferences;
/**
@@ -152,6 +155,7 @@
* List of activity destroy listeners.
*/
@Nullable
+ @UnsupportedAppUsage
private List<OnActivityDestroyListener> mActivityDestroyListeners;
/**
@@ -161,11 +165,13 @@
@Nullable
private List<DialogInterface> mPreferencesScreens;
+ @UnsupportedAppUsage
private OnPreferenceTreeClickListener mOnPreferenceTreeClickListener;
/**
* @hide
*/
+ @UnsupportedAppUsage
public PreferenceManager(Activity activity, int firstRequestCode) {
mActivity = activity;
mNextRequestCode = firstRequestCode;
@@ -181,6 +187,7 @@
* should be used ANY time a preference will be displayed, since some preference
* types need an Activity for managed queries.
*/
+ @UnsupportedAppUsage
/*package*/ PreferenceManager(Context context) {
init(context);
}
@@ -194,6 +201,7 @@
/**
* Sets the owning preference fragment
*/
+ @UnsupportedAppUsage
void setFragment(PreferenceFragment fragment) {
mFragment = fragment;
}
@@ -202,6 +210,7 @@
* Returns the owning preference fragment, if any.
*/
@Nullable
+ @UnsupportedAppUsage
PreferenceFragment getFragment() {
return mFragment;
}
@@ -260,6 +269,7 @@
* @return The root hierarchy (if one was not provided, the new hierarchy's
* root).
*/
+ @UnsupportedAppUsage
PreferenceScreen inflateFromIntent(Intent queryIntent, PreferenceScreen rootPreferences) {
final List<ResolveInfo> activities = queryIntentActivities(queryIntent);
final HashSet<String> inflatedRes = new HashSet<String>();
@@ -315,6 +325,7 @@
* root).
* @hide
*/
+ @UnsupportedAppUsage
public PreferenceScreen inflateFromResource(Context context, @XmlRes int resId,
PreferenceScreen rootPreferences) {
// Block commits
@@ -546,6 +557,7 @@
* @return The {@link PreferenceScreen} object that is at the root of the hierarchy.
*/
@Nullable
+ @UnsupportedAppUsage
PreferenceScreen getPreferenceScreen() {
return mPreferenceScreen;
}
@@ -556,6 +568,7 @@
* @param preferenceScreen The root {@link PreferenceScreen} of the preference hierarchy.
* @return Whether the {@link PreferenceScreen} given is different than the previous.
*/
+ @UnsupportedAppUsage
boolean setPreferences(PreferenceScreen preferenceScreen) {
if (preferenceScreen != mPreferenceScreen) {
mPreferenceScreen = preferenceScreen;
@@ -670,6 +683,7 @@
* has been set, this method returns {@code null}.
* @see #shouldCommit()
*/
+ @UnsupportedAppUsage
SharedPreferences.Editor getEditor() {
if (mPreferenceDataStore != null) {
return null;
@@ -695,10 +709,12 @@
*
* @return Whether the client should commit.
*/
+ @UnsupportedAppUsage
boolean shouldCommit() {
return !mNoCommit;
}
+ @UnsupportedAppUsage
private void setNoCommit(boolean noCommit) {
if (!noCommit && mEditor != null) {
try {
@@ -725,6 +741,7 @@
* @see #mContext
*/
@Nullable
+ @UnsupportedAppUsage
Activity getActivity() {
return mActivity;
}
@@ -744,6 +761,7 @@
*
* @see OnActivityResultListener
*/
+ @UnsupportedAppUsage
void registerOnActivityResultListener(OnActivityResultListener listener) {
synchronized (this) {
if (mActivityResultListeners == null) {
@@ -761,6 +779,7 @@
*
* @see OnActivityResultListener
*/
+ @UnsupportedAppUsage
void unregisterOnActivityResultListener(OnActivityResultListener listener) {
synchronized (this) {
if (mActivityResultListeners != null) {
@@ -772,6 +791,7 @@
/**
* Called by the {@link PreferenceManager} to dispatch a subactivity result.
*/
+ @UnsupportedAppUsage
void dispatchActivityResult(int requestCode, int resultCode, Intent data) {
List<OnActivityResultListener> list;
@@ -794,6 +814,7 @@
* @see OnActivityStopListener
* @hide
*/
+ @UnsupportedAppUsage
public void registerOnActivityStopListener(OnActivityStopListener listener) {
synchronized (this) {
if (mActivityStopListeners == null) {
@@ -812,6 +833,7 @@
* @see OnActivityStopListener
* @hide
*/
+ @UnsupportedAppUsage
public void unregisterOnActivityStopListener(OnActivityStopListener listener) {
synchronized (this) {
if (mActivityStopListeners != null) {
@@ -824,6 +846,7 @@
* Called by the {@link PreferenceManager} to dispatch the activity stop
* event.
*/
+ @UnsupportedAppUsage
void dispatchActivityStop() {
List<OnActivityStopListener> list;
@@ -843,6 +866,7 @@
*
* @see OnActivityDestroyListener
*/
+ @UnsupportedAppUsage
void registerOnActivityDestroyListener(OnActivityDestroyListener listener) {
synchronized (this) {
if (mActivityDestroyListeners == null) {
@@ -860,6 +884,7 @@
*
* @see OnActivityDestroyListener
*/
+ @UnsupportedAppUsage
void unregisterOnActivityDestroyListener(OnActivityDestroyListener listener) {
synchronized (this) {
if (mActivityDestroyListeners != null) {
@@ -872,6 +897,7 @@
* Called by the {@link PreferenceManager} to dispatch the activity destroy
* event.
*/
+ @UnsupportedAppUsage
void dispatchActivityDestroy() {
List<OnActivityDestroyListener> list = null;
@@ -899,6 +925,7 @@
* @return A unique request code that will never be used by anyone other
* than the caller of this method.
*/
+ @UnsupportedAppUsage
int getNextRequestCode() {
synchronized (this) {
return mNextRequestCode++;
diff --git a/core/java/android/preference/PreferenceScreen.java b/core/java/android/preference/PreferenceScreen.java
index 2305b05..dd00a53 100644
--- a/core/java/android/preference/PreferenceScreen.java
+++ b/core/java/android/preference/PreferenceScreen.java
@@ -16,6 +16,7 @@
package android.preference;
+import android.annotation.UnsupportedAppUsage;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -89,10 +90,12 @@
public final class PreferenceScreen extends PreferenceGroup implements AdapterView.OnItemClickListener,
DialogInterface.OnDismissListener {
+ @UnsupportedAppUsage
private ListAdapter mRootAdapter;
private Dialog mDialog;
+ @UnsupportedAppUsage
private ListView mListView;
private int mLayoutResId = com.android.internal.R.layout.preference_list_fragment;
@@ -103,6 +106,7 @@
* Do NOT use this constructor, use {@link PreferenceManager#createPreferenceScreen(Context)}.
* @hide-
*/
+ @UnsupportedAppUsage
public PreferenceScreen(Context context, AttributeSet attrs) {
super(context, attrs, com.android.internal.R.attr.preferenceScreenStyle);
diff --git a/core/java/android/preference/RingtonePreference.java b/core/java/android/preference/RingtonePreference.java
index a76bb09..cd751cd 100644
--- a/core/java/android/preference/RingtonePreference.java
+++ b/core/java/android/preference/RingtonePreference.java
@@ -16,6 +16,7 @@
package android.preference;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
@@ -49,6 +50,7 @@
private boolean mShowDefault;
private boolean mShowSilent;
+ @UnsupportedAppUsage
private int mRequestCode;
public RingtonePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
diff --git a/core/java/android/preference/SeekBarDialogPreference.java b/core/java/android/preference/SeekBarDialogPreference.java
index eeb69a3..a8e5992 100644
--- a/core/java/android/preference/SeekBarDialogPreference.java
+++ b/core/java/android/preference/SeekBarDialogPreference.java
@@ -16,6 +16,7 @@
package android.preference;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
@@ -47,6 +48,7 @@
this(context, attrs, defStyleAttr, 0);
}
+ @UnsupportedAppUsage
public SeekBarDialogPreference(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.seekBarDialogPreferenceStyle);
}
diff --git a/core/java/android/preference/SeekBarPreference.java b/core/java/android/preference/SeekBarPreference.java
index 1fabf3d..cd35f3d 100644
--- a/core/java/android/preference/SeekBarPreference.java
+++ b/core/java/android/preference/SeekBarPreference.java
@@ -16,6 +16,7 @@
package android.preference;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Parcel;
@@ -55,14 +56,17 @@
setLayoutResource(layoutResId);
}
+ @UnsupportedAppUsage
public SeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
+ @UnsupportedAppUsage
public SeekBarPreference(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.seekBarPreferenceStyle);
}
+ @UnsupportedAppUsage
public SeekBarPreference(Context context) {
this(context, null);
}
diff --git a/core/java/android/preference/SeekBarVolumizer.java b/core/java/android/preference/SeekBarVolumizer.java
index 2a094bb..e8daf21 100644
--- a/core/java/android/preference/SeekBarVolumizer.java
+++ b/core/java/android/preference/SeekBarVolumizer.java
@@ -16,6 +16,7 @@
package android.preference;
+import android.annotation.UnsupportedAppUsage;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -54,12 +55,15 @@
void onMuted(boolean muted, boolean zenMuted);
}
+ @UnsupportedAppUsage
private final Context mContext;
private final H mUiHandler = new H();
private final Callback mCallback;
private final Uri mDefaultUri;
+ @UnsupportedAppUsage
private final AudioManager mAudioManager;
private final NotificationManager mNotificationManager;
+ @UnsupportedAppUsage
private final int mStreamType;
private final int mMaxStreamVolume;
private boolean mAffectedByRingerMode;
@@ -68,19 +72,24 @@
private Handler mHandler;
private Observer mVolumeObserver;
+ @UnsupportedAppUsage
private int mOriginalStreamVolume;
private int mLastAudibleStreamVolume;
// When the old handler is destroyed and a new one is created, there could be a situation where
// this is accessed at the same time in different handlers. So, access to this field needs to be
// synchronized.
@GuardedBy("this")
+ @UnsupportedAppUsage
private Ringtone mRingtone;
+ @UnsupportedAppUsage
private int mLastProgress = -1;
private boolean mMuted;
+ @UnsupportedAppUsage
private SeekBar mSeekBar;
private int mVolumeBeforeMute = -1;
private int mRingerMode;
private int mZenMode;
+ private boolean mPlaySample;
private static final int MSG_SET_STREAM_VOLUME = 0;
private static final int MSG_START_SAMPLE = 1;
@@ -93,7 +102,17 @@
private boolean mAllowMedia;
private boolean mAllowRinger;
+ @UnsupportedAppUsage
public SeekBarVolumizer(Context context, int streamType, Uri defaultUri, Callback callback) {
+ this(context, streamType, defaultUri, callback, true /* playSample */);
+ }
+
+ public SeekBarVolumizer(
+ Context context,
+ int streamType,
+ Uri defaultUri,
+ Callback callback,
+ boolean playSample) {
mContext = context;
mAudioManager = context.getSystemService(AudioManager.class);
mNotificationManager = context.getSystemService(NotificationManager.class);
@@ -116,6 +135,7 @@
mOriginalStreamVolume = mAudioManager.getStreamVolume(mStreamType);
mLastAudibleStreamVolume = mAudioManager.getLastAudibleStreamVolume(mStreamType);
mMuted = mAudioManager.isStreamMute(mStreamType);
+ mPlaySample = playSample;
if (mCallback != null) {
mCallback.onMuted(mMuted, isZenMuted());
}
@@ -190,13 +210,19 @@
AudioManager.FLAG_SHOW_UI_WARNINGS);
break;
case MSG_START_SAMPLE:
- onStartSample();
+ if (mPlaySample) {
+ onStartSample();
+ }
break;
case MSG_STOP_SAMPLE:
- onStopSample();
+ if (mPlaySample) {
+ onStopSample();
+ }
break;
case MSG_INIT_SAMPLE:
- onInitSample();
+ if (mPlaySample) {
+ onInitSample();
+ }
break;
default:
Log.e(TAG, "invalid SeekBarVolumizer message: "+msg.what);
@@ -258,6 +284,7 @@
}
}
+ @UnsupportedAppUsage
public void stop() {
if (mHandler == null) return; // already stopped
postStopSample();
diff --git a/core/java/android/preference/SwitchPreference.java b/core/java/android/preference/SwitchPreference.java
index aa8674e..1ec18bb 100644
--- a/core/java/android/preference/SwitchPreference.java
+++ b/core/java/android/preference/SwitchPreference.java
@@ -17,6 +17,7 @@
package android.preference;
import android.annotation.StringRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
@@ -37,6 +38,7 @@
* @attr ref android.R.styleable#SwitchPreference_disableDependentsState
*/
public class SwitchPreference extends TwoStatePreference {
+ @UnsupportedAppUsage
private final Listener mListener = new Listener();
// Switch text for on and off states
diff --git a/core/java/android/preference/TwoStatePreference.java b/core/java/android/preference/TwoStatePreference.java
index 7037aca..2079a63 100644
--- a/core/java/android/preference/TwoStatePreference.java
+++ b/core/java/android/preference/TwoStatePreference.java
@@ -17,6 +17,7 @@
package android.preference;
import android.annotation.StringRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
@@ -193,6 +194,7 @@
* Sync a summary view contained within view's subhierarchy with the correct summary text.
* @param view View where a summary should be located
*/
+ @UnsupportedAppUsage
void syncSummaryView(View view) {
// Sync the summary view
TextView summaryView = (TextView) view.findViewById(com.android.internal.R.id.summary);
diff --git a/core/java/android/preference/VolumePreference.java b/core/java/android/preference/VolumePreference.java
index 8a66c24..ea1d1eb 100644
--- a/core/java/android/preference/VolumePreference.java
+++ b/core/java/android/preference/VolumePreference.java
@@ -16,6 +16,7 @@
package android.preference;
+import android.annotation.UnsupportedAppUsage;
import android.app.Dialog;
import android.content.Context;
import android.content.res.TypedArray;
@@ -33,6 +34,7 @@
*/
public class VolumePreference extends SeekBarDialogPreference implements
PreferenceManager.OnActivityStopListener, View.OnKeyListener, SeekBarVolumizer.Callback {
+ @UnsupportedAppUsage
private int mStreamType;
/** May be null if the dialog isn't visible. */
@@ -52,6 +54,7 @@
this(context, attrs, defStyleAttr, 0);
}
+ @UnsupportedAppUsage
public VolumePreference(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.seekBarDialogPreferenceStyle);
}
@@ -196,7 +199,9 @@
}
public static class VolumeStore {
+ @UnsupportedAppUsage
public int volume = -1;
+ @UnsupportedAppUsage
public int originalVolume = -1;
}
diff --git a/core/java/android/service/autofill/CustomDescription.java b/core/java/android/service/autofill/CustomDescription.java
index fb468a8..b1ae7a5 100644
--- a/core/java/android/service/autofill/CustomDescription.java
+++ b/core/java/android/service/autofill/CustomDescription.java
@@ -20,11 +20,13 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TestApi;
import android.app.Activity;
import android.app.PendingIntent;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Pair;
+import android.util.SparseArray;
import android.widget.RemoteViews;
import com.android.internal.util.Preconditions;
@@ -90,11 +92,13 @@
private final RemoteViews mPresentation;
private final ArrayList<Pair<Integer, InternalTransformation>> mTransformations;
private final ArrayList<Pair<InternalValidator, BatchUpdates>> mUpdates;
+ private final SparseArray<InternalOnClickAction> mActions;
private CustomDescription(Builder builder) {
mPresentation = builder.mPresentation;
mTransformations = builder.mTransformations;
mUpdates = builder.mUpdates;
+ mActions = builder.mActions;
}
/** @hide */
@@ -115,6 +119,13 @@
return mUpdates;
}
+ /** @hide */
+ @Nullable
+ @TestApi
+ public SparseArray<InternalOnClickAction> getActions() {
+ return mActions;
+ }
+
/**
* Builder for {@link CustomDescription} objects.
*/
@@ -124,6 +135,7 @@
private boolean mDestroyed;
private ArrayList<Pair<Integer, InternalTransformation>> mTransformations;
private ArrayList<Pair<InternalValidator, BatchUpdates>> mUpdates;
+ private SparseArray<InternalOnClickAction> mActions;
/**
* Default constructor.
@@ -157,9 +169,12 @@
*
* @param id view id of the children view.
* @param transformation an implementation provided by the Android System.
+ *
* @return this builder.
+ *
* @throws IllegalArgumentException if {@code transformation} is not a class provided
* by the Android System.
+ * @throws IllegalStateException if {@link #build()} was already called.
*/
public Builder addChild(int id, @NonNull Transformation transformation) {
throwIfDestroyed();
@@ -250,8 +265,10 @@
* is satisfied.
*
* @return this builder
+ *
* @throws IllegalArgumentException if {@code condition} is not a class provided
* by the Android System.
+ * @throws IllegalStateException if {@link #build()} was already called.
*/
public Builder batchUpdate(@NonNull Validator condition, @NonNull BatchUpdates updates) {
throwIfDestroyed();
@@ -266,6 +283,58 @@
}
/**
+ * Sets an action to be applied to the {@link RemoteViews presentation template} when the
+ * child view with the given {@code id} is clicked.
+ *
+ * <p>Typically used when the presentation uses a masked field (like {@code ****}) for
+ * sensitive fields like passwords or credit cards numbers, but offers a an icon that the
+ * user can tap to show the value for that field.
+ *
+ * <p>Example:
+ *
+ * <pre class="prettyprint">
+ * customDescriptionBuilder
+ * .addChild(R.id.password_plain, new CharSequenceTransformation
+ * .Builder(passwordId, Pattern.compile("^(.*)$"), "$1").build())
+ * .addOnClickAction(R.id.showIcon, new VisibilitySetterAction
+ * .Builder(R.id.hideIcon, View.VISIBLE)
+ * .setVisibility(R.id.showIcon, View.GONE)
+ * .setVisibility(R.id.password_plain, View.VISIBLE)
+ * .setVisibility(R.id.password_masked, View.GONE)
+ * .build())
+ * .addOnClickAction(R.id.hideIcon, new VisibilitySetterAction
+ * .Builder(R.id.showIcon, View.VISIBLE)
+ * .setVisibility(R.id.hideIcon, View.GONE)
+ * .setVisibility(R.id.password_masked, View.VISIBLE)
+ * .setVisibility(R.id.password_plain, View.GONE)
+ * .build());
+ * </pre>
+ *
+ * <p><b>Note:</b> Currently only one action can be applied to a child; if this method
+ * is called multiple times passing the same {@code id}, only the last call will be used.
+ *
+ * @param id resource id of the child view.
+ * @param action action to be performed.
+ *
+ * @return this builder
+ *
+ * @throws IllegalArgumentException if {@code action} is not a class provided
+ * by the Android System.
+ * @throws IllegalStateException if {@link #build()} was already called.
+ */
+ public Builder addOnClickAction(int id, @NonNull OnClickAction action) {
+ throwIfDestroyed();
+ Preconditions.checkArgument((action instanceof InternalOnClickAction),
+ "not provided by Android System: " + action);
+ if (mActions == null) {
+ mActions = new SparseArray<InternalOnClickAction>();
+ }
+ mActions.put(id, (InternalOnClickAction) action);
+
+ return this;
+ }
+
+ /**
* Creates a new {@link CustomDescription} instance.
*/
public CustomDescription build() {
@@ -294,6 +363,8 @@
.append(mTransformations == null ? "N/A" : mTransformations.size())
.append(", updates=")
.append(mUpdates == null ? "N/A" : mUpdates.size())
+ .append(", actions=")
+ .append(mActions == null ? "N/A" : mActions.size())
.append("]").toString();
}
@@ -339,6 +410,19 @@
dest.writeParcelableArray(conditions, flags);
dest.writeParcelableArray(updates, flags);
}
+ if (mActions == null) {
+ dest.writeIntArray(null);
+ } else {
+ final int size = mActions.size();
+ final int[] ids = new int[size];
+ final InternalOnClickAction[] values = new InternalOnClickAction[size];
+ for (int i = 0; i < size; i++) {
+ ids[i] = mActions.keyAt(i);
+ values[i] = mActions.valueAt(i);
+ }
+ dest.writeIntArray(ids);
+ dest.writeParcelableArray(values, flags);
+ }
}
public static final Parcelable.Creator<CustomDescription> CREATOR =
new Parcelable.Creator<CustomDescription>() {
@@ -351,13 +435,13 @@
if (parentPresentation == null) return null;
final Builder builder = new Builder(parentPresentation);
- final int[] ids = parcel.createIntArray();
- if (ids != null) {
+ final int[] transformationIds = parcel.createIntArray();
+ if (transformationIds != null) {
final InternalTransformation[] values =
parcel.readParcelableArray(null, InternalTransformation.class);
- final int size = ids.length;
+ final int size = transformationIds.length;
for (int i = 0; i < size; i++) {
- builder.addChild(ids[i], values[i]);
+ builder.addChild(transformationIds[i], values[i]);
}
}
final InternalValidator[] conditions =
@@ -369,6 +453,15 @@
builder.batchUpdate(conditions[i], updates[i]);
}
}
+ final int[] actionIds = parcel.createIntArray();
+ if (actionIds != null) {
+ final InternalOnClickAction[] values =
+ parcel.readParcelableArray(null, InternalOnClickAction.class);
+ final int size = actionIds.length;
+ for (int i = 0; i < size; i++) {
+ builder.addOnClickAction(actionIds[i], values[i]);
+ }
+ }
return builder.build();
}
diff --git a/core/java/android/service/autofill/Dataset.java b/core/java/android/service/autofill/Dataset.java
index 5211767..f8408be 100644
--- a/core/java/android/service/autofill/Dataset.java
+++ b/core/java/android/service/autofill/Dataset.java
@@ -33,8 +33,13 @@
import java.util.regex.Pattern;
/**
- * A dataset object represents a group of fields (key / value pairs) used to autofill parts of a
- * screen.
+ * <p>A <code>Dataset</code> object represents a group of fields (key / value pairs) used
+ * to autofill parts of a screen.
+ *
+ * <p>For more information about the role of datasets in the autofill workflow, read
+ * <a href="/guide/topics/text/autofill-services">Build autofill services</a> and the
+ * <code><a href="/reference/android/service/autofill/AutofillService">AutofillService</a></code>
+ * documentation.
*
* <a name="BasicUsage"></a>
* <h3>Basic usage</h3>
@@ -88,10 +93,6 @@
* <li>All other datasets are hidden.
* </ol>
*
- * <a name="MoreInfo"></a>
- * <h3>More information</h3>
- * <p>See {@link android.service.autofill.AutofillService} for more information and examples about
- * the role of datasets in the autofill workflow.
*/
public final class Dataset implements Parcelable {
diff --git a/core/java/android/service/autofill/FillCallback.java b/core/java/android/service/autofill/FillCallback.java
index 0257891..1695c13 100644
--- a/core/java/android/service/autofill/FillCallback.java
+++ b/core/java/android/service/autofill/FillCallback.java
@@ -21,8 +21,11 @@
import android.os.RemoteException;
/**
- * Handles autofill requests from the {@link AutofillService} into the {@link Activity} being
- * autofilled.
+ * <p><code>FillCallback</code> handles autofill requests from the {@link AutofillService} into
+ * the {@link Activity} being autofilled.
+ *
+ * <p>To learn about using Autofill services in your app, read
+ * <a href="/guide/topics/text/autofill-services">Build autofill services</a>.
*/
public final class FillCallback {
private final IFillCallback mCallback;
diff --git a/core/java/android/service/autofill/InternalOnClickAction.java b/core/java/android/service/autofill/InternalOnClickAction.java
new file mode 100644
index 0000000..6602f2d
--- /dev/null
+++ b/core/java/android/service/autofill/InternalOnClickAction.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.service.autofill;
+
+import android.annotation.NonNull;
+import android.annotation.TestApi;
+import android.os.Parcelable;
+import android.view.ViewGroup;
+
+/**
+ * Superclass of all {@link OnClickAction} the system understands. As this is not public, all public
+ * subclasses have to implement {@link OnClickAction} again.
+ *
+ * @hide
+ */
+@TestApi
+public abstract class InternalOnClickAction implements OnClickAction, Parcelable {
+
+ /**
+ * Applies the action to the children of the {@code rootView} when clicked.
+ */
+ public abstract void onClick(@NonNull ViewGroup rootView);
+}
diff --git a/core/java/android/service/autofill/InternalSanitizer.java b/core/java/android/service/autofill/InternalSanitizer.java
index d77e41e..ccffc70 100644
--- a/core/java/android/service/autofill/InternalSanitizer.java
+++ b/core/java/android/service/autofill/InternalSanitizer.java
@@ -35,8 +35,6 @@
*
* @return sanitized value or {@code null} if value could not be sanitized (for example: didn't
* match regex, it's an invalid type, regex failed, etc).
- *
- * @hide
*/
@Nullable
public abstract AutofillValue sanitize(@NonNull AutofillValue value);
diff --git a/core/java/android/service/autofill/InternalTransformation.java b/core/java/android/service/autofill/InternalTransformation.java
index c9864a0..0dba2b9 100644
--- a/core/java/android/service/autofill/InternalTransformation.java
+++ b/core/java/android/service/autofill/InternalTransformation.java
@@ -44,8 +44,6 @@
* @param finder object used to find the value of a field in the screen.
* @param template the {@link RemoteViews presentation template}.
* @param childViewId resource id of the child view inside the template.
- *
- * @hide
*/
abstract void apply(@NonNull ValueFinder finder, @NonNull RemoteViews template,
int childViewId) throws Exception;
@@ -58,8 +56,6 @@
* @param template the {@link RemoteViews presentation template}.
* @param transformations map of resource id of the child view inside the template to
* transformation.
- *
- * @hide
*/
public static boolean batchApply(@NonNull ValueFinder finder, @NonNull RemoteViews template,
@NonNull ArrayList<Pair<Integer, InternalTransformation>> transformations) {
diff --git a/core/java/android/service/autofill/InternalValidator.java b/core/java/android/service/autofill/InternalValidator.java
index e08bb6c..4bea98d 100644
--- a/core/java/android/service/autofill/InternalValidator.java
+++ b/core/java/android/service/autofill/InternalValidator.java
@@ -33,9 +33,6 @@
*
* @param finder object used to find the value of a field in the screen.
* @return {@code true} if the contents are valid, {@code false} otherwise.
- *
- * @hide
*/
- @TestApi
public abstract boolean isValid(@NonNull ValueFinder finder);
}
diff --git a/core/java/android/service/autofill/OnClickAction.java b/core/java/android/service/autofill/OnClickAction.java
new file mode 100644
index 0000000..7439b00
--- /dev/null
+++ b/core/java/android/service/autofill/OnClickAction.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.service.autofill;
+
+/**
+ * Class used to define an action to be performed when a child view in a
+ * {@link android.widget.RemoteViews presentation} is clicked.
+ *
+ * <p>Typically used to switch the visibility of other views in a
+ * {@link CustomDescription custom save UI}.
+ */
+public interface OnClickAction {
+}
diff --git a/core/java/android/service/autofill/UserData.java b/core/java/android/service/autofill/UserData.java
index 55aecdd..fccb85b 100644
--- a/core/java/android/service/autofill/UserData.java
+++ b/core/java/android/service/autofill/UserData.java
@@ -145,6 +145,9 @@
// Non-persistent array used to limit the number of unique ids.
private final ArraySet<String> mUniqueCategoryIds;
+ // Non-persistent array used to ignore duplaicated value/category pairs.
+ private final ArraySet<String> mUniqueValueCategoryPairs;
+
/**
* Creates a new builder for the user data used for <a href="#FieldClassification">field
@@ -185,6 +188,7 @@
final int maxUserDataSize = getMaxUserDataSize();
mCategoryIds = new ArrayList<>(maxUserDataSize);
mValues = new ArrayList<>(maxUserDataSize);
+ mUniqueValueCategoryPairs = new ArraySet<>(maxUserDataSize);
mUniqueCategoryIds = new ArraySet<>(getMaxCategoryCount());
addMapping(value, categoryId);
@@ -222,7 +226,8 @@
* @throws IllegalStateException if:
* <ul>
* <li>{@link #build()} already called</li>
- * <li>the {@code value} has already been added</li>
+ * <li>the {@code value} has already been added (<b>Note: </b> this restriction was
+ * lifted on Android {@link android.os.Build.VERSION_CODES#Q} and later)</li>
* <li>the number of unique {@code categoryId} values added so far is more than
* {@link UserData#getMaxCategoryCount()}</li>
* <li>the number of {@code values} added so far is is more than
@@ -248,12 +253,8 @@
// New category - check size
Preconditions.checkState(mUniqueCategoryIds.size() < getMaxCategoryCount(),
"already added " + mUniqueCategoryIds.size() + " unique category ids");
-
}
- Preconditions.checkState(!mValues.contains(value),
- // Don't include value on message because it could contain PII
- "already has entry with same value");
Preconditions.checkState(mValues.size() < getMaxUserDataSize(),
"already added " + mValues.size() + " elements");
addMapping(value, categoryId);
@@ -262,9 +263,16 @@
}
private void addMapping(@NonNull String value, @NonNull String categoryId) {
+ final String pair = value + ":" + categoryId;
+ if (mUniqueValueCategoryPairs.contains(pair)) {
+ // Don't include value on message because it could contain PII
+ Log.w(TAG, "Ignoring entry with same value / category");
+ return;
+ }
mCategoryIds.add(categoryId);
mValues.add(value);
mUniqueCategoryIds.add(categoryId);
+ mUniqueValueCategoryPairs.add(pair);
}
private String checkNotEmpty(@NonNull String name, @Nullable String value) {
diff --git a/core/java/android/service/autofill/VisibilitySetterAction.java b/core/java/android/service/autofill/VisibilitySetterAction.java
new file mode 100644
index 0000000..9f977d7
--- /dev/null
+++ b/core/java/android/service/autofill/VisibilitySetterAction.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.service.autofill;
+
+import static android.view.autofill.Helper.sDebug;
+import static android.view.autofill.Helper.sVerbose;
+
+import android.annotation.IdRes;
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Slog;
+import android.util.SparseIntArray;
+import android.view.View;
+import android.view.View.Visibility;
+import android.view.ViewGroup;
+import android.widget.RemoteViews;
+
+import com.android.internal.util.Preconditions;
+
+/**
+ * Action used to change the visibility of other child view in a {@link CustomDescription}
+ * {@link RemoteViews presentation template}.
+ *
+ * <p>See {@link CustomDescription.Builder#addOnClickAction(int, OnClickAction)} for more details.
+ */
+public final class VisibilitySetterAction extends InternalOnClickAction implements
+ OnClickAction, Parcelable {
+ private static final String TAG = "VisibilitySetterAction";
+
+ @NonNull private final SparseIntArray mVisibilities;
+
+ private VisibilitySetterAction(@NonNull Builder builder) {
+ mVisibilities = builder.mVisibilities;
+ }
+
+ /** @hide */
+ @Override
+ public void onClick(@NonNull ViewGroup rootView) {
+ for (int i = 0; i < mVisibilities.size(); i++) {
+ final int id = mVisibilities.keyAt(i);
+ final View child = rootView.findViewById(id);
+ if (child == null) {
+ Slog.w(TAG, "Skipping view id " + id + " because it's not found on " + rootView);
+ continue;
+ }
+ final int visibility = mVisibilities.valueAt(i);
+ if (sVerbose) {
+ Slog.v(TAG, "Changing visibility of view " + child + " from "
+ + child.getVisibility() + " to " + visibility);
+ }
+ child.setVisibility(visibility);
+ }
+ }
+
+ /**
+ * Builder for {@link VisibilitySetterAction} objects.
+ */
+ public static class Builder {
+ private final SparseIntArray mVisibilities = new SparseIntArray();
+ private boolean mDestroyed;
+
+ /**
+ * Creates a new builder for an action that change the visibility of one child view.
+ *
+ * @param id view resource id of the children view.
+ * @param visibility one of {@link View#VISIBLE}, {@link View#INVISIBLE}, or
+ * {@link View#GONE}.
+ * @throws IllegalArgumentException if visibility is not one of {@link View#VISIBLE},
+ * {@link View#INVISIBLE}, or {@link View#GONE}.
+ */
+ public Builder(@IdRes int id, @Visibility int visibility) {
+ setVisibility(id, visibility);
+ }
+
+ /**
+ * Sets the action to changes the visibility of a child view.
+ *
+ * @param id view resource id of the children view.
+ * @param visibility one of {@link View#VISIBLE}, {@link View#INVISIBLE}, or
+ * {@link View#GONE}.
+ * @throws IllegalArgumentException if visibility is not one of {@link View#VISIBLE},
+ * {@link View#INVISIBLE}, or {@link View#GONE}.
+ */
+ public Builder setVisibility(@IdRes int id, @Visibility int visibility) {
+ throwIfDestroyed();
+ switch (visibility) {
+ case View.VISIBLE:
+ case View.INVISIBLE:
+ case View.GONE:
+ mVisibilities.put(id, visibility);
+ return this;
+ }
+ throw new IllegalArgumentException("Invalid visibility: " + visibility);
+ }
+
+ /**
+ * Creates a new {@link VisibilitySetterAction} instance.
+ */
+ public VisibilitySetterAction build() {
+ throwIfDestroyed();
+ mDestroyed = true;
+ return new VisibilitySetterAction(this);
+ }
+
+ private void throwIfDestroyed() {
+ Preconditions.checkState(!mDestroyed, "Already called build()");
+ }
+ }
+
+ /////////////////////////////////////
+ // Object "contract" methods. //
+ /////////////////////////////////////
+ @Override
+ public String toString() {
+ if (!sDebug) return super.toString();
+
+ return "VisibilitySetterAction: [" + mVisibilities + "]";
+ }
+
+ /////////////////////////////////////
+ // Parcelable "contract" methods. //
+ /////////////////////////////////////
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeSparseIntArray(mVisibilities);
+ }
+
+ public static final Parcelable.Creator<VisibilitySetterAction> CREATOR =
+ new Parcelable.Creator<VisibilitySetterAction>() {
+ @Override
+ public VisibilitySetterAction createFromParcel(Parcel parcel) {
+ // Always go through the builder to ensure the data ingested by
+ // the system obeys the contract of the builder to avoid attacks
+ final SparseIntArray visibilities = parcel.readSparseIntArray();
+ Builder builder = null;
+ for (int i = 0; i < visibilities.size(); i++) {
+ final int id = visibilities.keyAt(i);
+ final int visibility = visibilities.valueAt(i);
+ if (builder == null) {
+ builder = new Builder(id, visibility);
+ } else {
+ builder.setVisibility(id, visibility);
+ }
+ }
+ return builder == null ? null : builder.build();
+ }
+
+ @Override
+ public VisibilitySetterAction[] newArray(int size) {
+ return new VisibilitySetterAction[size];
+ }
+ };
+}
diff --git a/core/java/android/service/notification/INotificationListener.aidl b/core/java/android/service/notification/INotificationListener.aidl
index 2dff716..d8bd002 100644
--- a/core/java/android/service/notification/INotificationListener.aidl
+++ b/core/java/android/service/notification/INotificationListener.aidl
@@ -18,6 +18,7 @@
import android.app.NotificationChannel;
import android.app.NotificationChannelGroup;
+import android.content.pm.ParceledListSlice;
import android.os.UserHandle;
import android.service.notification.NotificationStats;
import android.service.notification.IStatusBarNotificationHolder;
@@ -45,4 +46,5 @@
// assistants only
void onNotificationEnqueuedWithChannel(in IStatusBarNotificationHolder notificationHolder, in NotificationChannel channel);
void onNotificationSnoozedUntilContext(in IStatusBarNotificationHolder notificationHolder, String snoozeCriterionId);
+ void onNotificationsSeen(in List<String> keys);
}
diff --git a/core/java/android/service/notification/NotificationAssistantService.java b/core/java/android/service/notification/NotificationAssistantService.java
index 3853fc5..3b820ca 100644
--- a/core/java/android/service/notification/NotificationAssistantService.java
+++ b/core/java/android/service/notification/NotificationAssistantService.java
@@ -149,6 +149,14 @@
}
/**
+ * Implement this to know when a user has seen notifications, as triggered by
+ * {@link #setNotificationsShown(String[])}.
+ */
+ public void onNotificationsSeen(List<String> keys) {
+
+ }
+
+ /**
* Updates a notification. N.B. this won’t cause
* an existing notification to alert, but might allow a future update to
* this notification to alert.
@@ -236,11 +244,20 @@
mHandler.obtainMessage(MyHandler.MSG_ON_NOTIFICATION_SNOOZED,
args).sendToTarget();
}
+
+ @Override
+ public void onNotificationsSeen(List<String> keys) {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = keys;
+ mHandler.obtainMessage(MyHandler.MSG_ON_NOTIFICATIONS_SEEN,
+ args).sendToTarget();
+ }
}
private final class MyHandler extends Handler {
public static final int MSG_ON_NOTIFICATION_ENQUEUED = 1;
public static final int MSG_ON_NOTIFICATION_SNOOZED = 2;
+ public static final int MSG_ON_NOTIFICATIONS_SEEN = 3;
public MyHandler(Looper looper) {
super(looper, null, false);
@@ -275,6 +292,13 @@
onNotificationSnoozedUntilContext(sbn, snoozeCriterionId);
break;
}
+ case MSG_ON_NOTIFICATIONS_SEEN: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ List<String> keys = (List<String>) args.arg1;
+ args.recycle();
+ onNotificationsSeen(keys);
+ break;
+ }
}
}
}
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index 98da569..1b588f4 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -1332,6 +1332,12 @@
}
@Override
+ public void onNotificationsSeen(List<String> keys)
+ throws RemoteException {
+ // no-op in the listener
+ }
+
+ @Override
public void onNotificationSnoozedUntilContext(
IStatusBarNotificationHolder notificationHolder, String snoozeCriterionId)
throws RemoteException {
diff --git a/core/java/android/service/notification/NotificationStats.java b/core/java/android/service/notification/NotificationStats.java
index 76d5328..9e23de1 100644
--- a/core/java/android/service/notification/NotificationStats.java
+++ b/core/java/android/service/notification/NotificationStats.java
@@ -52,7 +52,7 @@
/**
* Notification has not been dismissed yet.
*/
- public static final int DISMISSAL_NOT_DISMISSED = -1;
+ public static final int DISMISSAL_NOT_DISMISSED = -1000;
/**
* Notification has been dismissed from a {@link NotificationListenerService} or the app
* itself.
@@ -71,6 +71,37 @@
*/
public static final int DISMISSAL_SHADE = 3;
+ /** @hide */
+ @IntDef(prefix = { "DISMISS_SENTIMENT_" }, value = {
+ DISMISS_SENTIMENT_UNKNOWN, DISMISS_SENTIMENT_NEGATIVE, DISMISS_SENTIMENT_NEUTRAL,
+ DISMISS_SENTIMENT_POSITIVE
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface DismissalSentiment {}
+
+ /**
+ * No information is available about why this notification was dismissed, or the notification
+ * isn't dismissed yet.
+ */
+ public static final int DISMISS_SENTIMENT_UNKNOWN = -1000;
+ /**
+ * The user indicated while dismissing that they did not like the notification.
+ */
+ public static final int DISMISS_SENTIMENT_NEGATIVE = 0;
+ /**
+ * The user didn't indicate one way or another how they felt about the notification while
+ * dismissing it.
+ */
+ public static final int DISMISS_SENTIMENT_NEUTRAL = 1;
+ /**
+ * The user indicated while dismissing that they did like the notification.
+ */
+ public static final int DISMISS_SENTIMENT_POSITIVE = 2;
+
+
+ private @DismissalSentiment
+ int mDismissalSentiment = DISMISS_SENTIMENT_UNKNOWN;
+
public NotificationStats() {
}
@@ -82,6 +113,7 @@
mViewedSettings = in.readByte() != 0;
mInteracted = in.readByte() != 0;
mDismissalSurface = in.readInt();
+ mDismissalSentiment = in.readInt();
}
@Override
@@ -93,6 +125,7 @@
dest.writeByte((byte) (mViewedSettings ? 1 : 0));
dest.writeByte((byte) (mInteracted ? 1 : 0));
dest.writeInt(mDismissalSurface);
+ dest.writeInt(mDismissalSentiment);
}
@Override
@@ -212,6 +245,21 @@
mDismissalSurface = dismissalSurface;
}
+ /**
+ * Records whether the user indicated how they felt about a notification before or
+ * during dismissal.
+ */
+ public void setDismissalSentiment(@DismissalSentiment int dismissalSentiment) {
+ mDismissalSentiment = dismissalSentiment;
+ }
+
+ /**
+ * Returns how the user indicated they felt about a notification before or during dismissal.
+ */
+ public @DismissalSentiment int getDismissalSentiment() {
+ return mDismissalSentiment;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index ca952da..33c977b 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -50,9 +50,9 @@
public abstract class Layout {
/** @hide */
@IntDef(prefix = { "BREAK_STRATEGY_" }, value = {
- BREAK_STRATEGY_SIMPLE,
- BREAK_STRATEGY_HIGH_QUALITY,
- BREAK_STRATEGY_BALANCED
+ NativeLineBreaker.BREAK_STRATEGY_SIMPLE,
+ NativeLineBreaker.BREAK_STRATEGY_HIGH_QUALITY,
+ NativeLineBreaker.BREAK_STRATEGY_BALANCED
})
@Retention(RetentionPolicy.SOURCE)
public @interface BreakStrategy {}
@@ -63,19 +63,20 @@
* before it (which yields a more consistent user experience when editing), but layout may not
* be the highest quality.
*/
- public static final int BREAK_STRATEGY_SIMPLE = 0;
+ public static final int BREAK_STRATEGY_SIMPLE = NativeLineBreaker.BREAK_STRATEGY_SIMPLE;
/**
* Value for break strategy indicating high quality line breaking, including automatic
* hyphenation and doing whole-paragraph optimization of line breaks.
*/
- public static final int BREAK_STRATEGY_HIGH_QUALITY = 1;
+ public static final int BREAK_STRATEGY_HIGH_QUALITY =
+ NativeLineBreaker.BREAK_STRATEGY_HIGH_QUALITY;
/**
* Value for break strategy indicating balanced line breaking. The breaks are chosen to
* make all lines as close to the same length as possible, including automatic hyphenation.
*/
- public static final int BREAK_STRATEGY_BALANCED = 2;
+ public static final int BREAK_STRATEGY_BALANCED = NativeLineBreaker.BREAK_STRATEGY_BALANCED;
/** @hide */
@IntDef(prefix = { "HYPHENATION_FREQUENCY_" }, value = {
@@ -93,29 +94,32 @@
* layout and there is otherwise no valid break. Soft hyphens are ignored and will not be used
* as suggestions for potential line breaks.
*/
- public static final int HYPHENATION_FREQUENCY_NONE = 0;
+ public static final int HYPHENATION_FREQUENCY_NONE =
+ NativeLineBreaker.HYPHENATION_FREQUENCY_NONE;
/**
* Value for hyphenation frequency indicating a light amount of automatic hyphenation, which
* is a conservative default. Useful for informal cases, such as short sentences or chat
* messages.
*/
- public static final int HYPHENATION_FREQUENCY_NORMAL = 1;
+ public static final int HYPHENATION_FREQUENCY_NORMAL =
+ NativeLineBreaker.HYPHENATION_FREQUENCY_NORMAL;
/**
* Value for hyphenation frequency indicating the full amount of automatic hyphenation, typical
* in typography. Useful for running text and where it's important to put the maximum amount of
* text in a screen with limited space.
*/
- public static final int HYPHENATION_FREQUENCY_FULL = 2;
+ public static final int HYPHENATION_FREQUENCY_FULL =
+ NativeLineBreaker.HYPHENATION_FREQUENCY_FULL;
private static final ParagraphStyle[] NO_PARA_SPANS =
ArrayUtils.emptyArray(ParagraphStyle.class);
/** @hide */
@IntDef(prefix = { "JUSTIFICATION_MODE_" }, value = {
- JUSTIFICATION_MODE_NONE,
- JUSTIFICATION_MODE_INTER_WORD
+ NativeLineBreaker.JUSTIFICATION_MODE_NONE,
+ NativeLineBreaker.JUSTIFICATION_MODE_INTER_WORD
})
@Retention(RetentionPolicy.SOURCE)
public @interface JustificationMode {}
@@ -123,12 +127,13 @@
/**
* Value for justification mode indicating no justification.
*/
- public static final int JUSTIFICATION_MODE_NONE = 0;
+ public static final int JUSTIFICATION_MODE_NONE = NativeLineBreaker.JUSTIFICATION_MODE_NONE;
/**
* Value for justification mode indicating the text is justified by stretching word spacing.
*/
- public static final int JUSTIFICATION_MODE_INTER_WORD = 1;
+ public static final int JUSTIFICATION_MODE_INTER_WORD =
+ NativeLineBreaker.JUSTIFICATION_MODE_INTER_WORD;
/*
* Line spacing multiplier for default line spacing.
diff --git a/core/java/android/text/NativeLineBreaker.java b/core/java/android/text/NativeLineBreaker.java
index a31b336..2bcfa5f 100644
--- a/core/java/android/text/NativeLineBreaker.java
+++ b/core/java/android/text/NativeLineBreaker.java
@@ -17,6 +17,7 @@
package android.text;
import android.annotation.FloatRange;
+import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -26,12 +27,233 @@
import libcore.util.NativeAllocationRegistry;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
/**
* A native implementation of the line breaker.
* TODO: Consider to make this class public.
* @hide
*/
public class NativeLineBreaker {
+ @IntDef(prefix = { "BREAK_STRATEGY_" }, value = {
+ BREAK_STRATEGY_SIMPLE,
+ BREAK_STRATEGY_HIGH_QUALITY,
+ BREAK_STRATEGY_BALANCED
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface BreakStrategy {}
+
+ /**
+ * Value for break strategy indicating simple line breaking. Automatic hyphens are not added
+ * (though soft hyphens are respected), and modifying text generally doesn't affect the layout
+ * before it (which yields a more consistent user experience when editing), but layout may not
+ * be the highest quality.
+ */
+ public static final int BREAK_STRATEGY_SIMPLE = 0;
+
+ /**
+ * Value for break strategy indicating high quality line breaking, including automatic
+ * hyphenation and doing whole-paragraph optimization of line breaks.
+ */
+ public static final int BREAK_STRATEGY_HIGH_QUALITY = 1;
+
+ /**
+ * Value for break strategy indicating balanced line breaking. The breaks are chosen to
+ * make all lines as close to the same length as possible, including automatic hyphenation.
+ */
+ public static final int BREAK_STRATEGY_BALANCED = 2;
+
+ @IntDef(prefix = { "HYPHENATION_FREQUENCY_" }, value = {
+ HYPHENATION_FREQUENCY_NORMAL,
+ HYPHENATION_FREQUENCY_FULL,
+ HYPHENATION_FREQUENCY_NONE
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface HyphenationFrequency {}
+
+ /**
+ * Value for hyphenation frequency indicating no automatic hyphenation. Useful
+ * for backward compatibility, and for cases where the automatic hyphenation algorithm results
+ * in incorrect hyphenation. Mid-word breaks may still happen when a word is wider than the
+ * layout and there is otherwise no valid break. Soft hyphens are ignored and will not be used
+ * as suggestions for potential line breaks.
+ */
+ public static final int HYPHENATION_FREQUENCY_NONE = 0;
+
+ /**
+ * Value for hyphenation frequency indicating a light amount of automatic hyphenation, which
+ * is a conservative default. Useful for informal cases, such as short sentences or chat
+ * messages.
+ */
+ public static final int HYPHENATION_FREQUENCY_NORMAL = 1;
+
+ /**
+ * Value for hyphenation frequency indicating the full amount of automatic hyphenation, typical
+ * in typography. Useful for running text and where it's important to put the maximum amount of
+ * text in a screen with limited space.
+ */
+ public static final int HYPHENATION_FREQUENCY_FULL = 2;
+
+ @IntDef(prefix = { "JUSTIFICATION_MODE_" }, value = {
+ JUSTIFICATION_MODE_NONE,
+ JUSTIFICATION_MODE_INTER_WORD
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface JustificationMode {}
+
+ /**
+ * Value for justification mode indicating no justification.
+ */
+ public static final int JUSTIFICATION_MODE_NONE = 0;
+
+ /**
+ * Value for justification mode indicating the text is justified by stretching word spacing.
+ */
+ public static final int JUSTIFICATION_MODE_INTER_WORD = 1;
+
+ /**
+ * A builder class of NativeLineBreaker.
+ */
+ public static class Builder {
+ private @BreakStrategy int mBreakStrategy = BREAK_STRATEGY_SIMPLE;
+ private @HyphenationFrequency int mHyphenationFrequency = HYPHENATION_FREQUENCY_NONE;
+ private @JustificationMode int mJustified = JUSTIFICATION_MODE_NONE;
+ private @Nullable int[] mIndents = null;
+
+ /**
+ * Construct a builder class.
+ */
+ public Builder() {}
+
+ /**
+ * Set break strategy.
+ */
+ public Builder setBreakStrategy(@BreakStrategy int breakStrategy) {
+ mBreakStrategy = breakStrategy;
+ return this;
+ }
+
+ /**
+ * Set hyphenation frequency.
+ */
+ public Builder setHyphenationFrequency(@HyphenationFrequency int hyphenationFrequency) {
+ mHyphenationFrequency = hyphenationFrequency;
+ return this;
+ }
+
+ /**
+ * Set whether the text is justified.
+ */
+ public Builder setJustified(@JustificationMode int justified) {
+ mJustified = justified;
+ return this;
+ }
+
+ /**
+ * Set indents for entire text.
+ *
+ * Sets the total (left + right) indents in pixel per lines.
+ */
+ public Builder setIndents(@Nullable int[] indents) {
+ mIndents = indents;
+ return this;
+ }
+
+ /**
+ * Returns the NativeLineBreaker with given parameters.
+ */
+ NativeLineBreaker build() {
+ return new NativeLineBreaker(mBreakStrategy, mHyphenationFrequency, mJustified,
+ mIndents);
+ }
+ }
+
+ /**
+ * Line breaking constraints for single paragraph.
+ */
+ public static class ParagraphConstraints {
+ private @FloatRange(from = 0.0f) float mWidth = 0;
+ private @FloatRange(from = 0.0f) float mFirstWidth = 0;
+ private @IntRange(from = 0) int mFirstWidthLineCount = 0;
+ private @Nullable int[] mVariableTabStops = null;
+ private @IntRange(from = 0) int mDefaultTabStop = 0;
+
+ public ParagraphConstraints() {}
+
+ /**
+ * Set width for this paragraph.
+ */
+ public void setWidth(@FloatRange(from = 0.0f) float width) {
+ mWidth = width;
+ }
+
+ /**
+ * Set indent for this paragraph.
+ *
+ * @param firstWidth the line width of the starting of the paragraph
+ * @param firstWidthLineCount the number of lines that applies the firstWidth
+ */
+ public void setIndent(@FloatRange(from = 0.0f) float firstWidth,
+ @IntRange(from = 0) int firstWidthLineCount) {
+ mFirstWidth = firstWidth;
+ mFirstWidthLineCount = firstWidthLineCount;
+ }
+
+ /**
+ * Set tab stops for this paragraph.
+ *
+ * @param tabStops the array of pixels of tap stopping position
+ * @param defaultTabStop pixels of the default tab stopping position
+ */
+ public void setTabStops(@Nullable int[] tabStops, @IntRange(from = 0) int defaultTabStop) {
+ mVariableTabStops = tabStops;
+ mDefaultTabStop = defaultTabStop;
+ }
+
+ /**
+ * Return the width for this paragraph in pixels.
+ */
+ public @FloatRange(from = 0.0f) float getWidth() {
+ return mWidth;
+ }
+
+ /**
+ * Return the first line's width for this paragraph in pixel.
+ *
+ * @see #setIndent(float, int)
+ */
+ public @FloatRange(from = 0.0f) float getFirstWidth() {
+ return mFirstWidth;
+ }
+
+ /**
+ * Return the number of lines to apply the first line's width.
+ *
+ * @see #setIndent(float, int)
+ */
+ public @IntRange(from = 0) int getFirstWidthLineCount() {
+ return mFirstWidthLineCount;
+ }
+
+ /**
+ * Returns the array of tab stops in pixels.
+ *
+ * @see #setTabStops(int[], int)
+ */
+ public @Nullable int[] getTabStops() {
+ return mVariableTabStops;
+ }
+
+ /**
+ * Returns the default tab stops in pixels.
+ *
+ * @see #setTabStop(int[], int)
+ */
+ public @IntRange(from = 0) int getDefaultTabStop() {
+ return mDefaultTabStop;
+ }
+ }
/**
* A result object of a line breaking
@@ -43,6 +265,7 @@
public float[] widths = new float[INITIAL_SIZE];
public float[] ascents = new float[INITIAL_SIZE];
public float[] descents = new float[INITIAL_SIZE];
+ // TODO: Introduce Hyphenator for explaining the meaning of flags.
public int[] flags = new int[INITIAL_SIZE];
// breaks, widths, and flags should all have the same length
}
@@ -53,54 +276,44 @@
private final long mNativePtr;
/**
- * A constructor of NativeLineBreaker
+ * Use Builder instead.
*/
- public NativeLineBreaker(@Layout.BreakStrategy int breakStrategy,
- @Layout.HyphenationFrequency int hyphenationFrequency,
- boolean justify, @Nullable int[] indents) {
- mNativePtr = nInit(breakStrategy, hyphenationFrequency, justify, indents);
+ private NativeLineBreaker(@BreakStrategy int breakStrategy,
+ @HyphenationFrequency int hyphenationFrequency, @JustificationMode int justify,
+ @Nullable int[] indents) {
+ mNativePtr = nInit(breakStrategy, hyphenationFrequency,
+ justify == JUSTIFICATION_MODE_INTER_WORD, indents);
sRegistry.registerNativeAllocation(this, mNativePtr);
}
/**
- * Break text into lines
+ * Break paragraph into lines.
*
- * @param chars an array of characters
+ * The result is filled to out param.
+ *
* @param measuredPara a result of the text measurement
- * @param length a length of the target text from the begining
- * @param firstWidth a width of the first width of the line in this paragraph
- * @param firstWidthLineCount a number of lines that has the length of the firstWidth
- * @param restWidth a width of the rest of the lines.
- * @param variableTabStops an array of tab stop widths
- * @param defaultTabStop a width of the tab stop
- * @param indentsOffset an offset of the indents to be used.
- * @param out output buffer
- * @return a number of the lines
+ * @param constraints for a single paragraph
+ * @param lineNumber a line number of this paragraph
+ * @param out object to set line break information for the given paragraph
*/
- @NonNull public int computeLineBreaks(
- @NonNull char[] chars,
+ public void computeLineBreaks(
@NonNull NativeMeasuredParagraph measuredPara,
- @IntRange(from = 0) int length,
- @FloatRange(from = 0.0f) float firstWidth,
- @IntRange(from = 0) int firstWidthLineCount,
- @FloatRange(from = 0.0f) float restWidth,
- @Nullable int[] variableTabStops,
- int defaultTabStop,
- @IntRange(from = 0) int indentsOffset,
+ @NonNull ParagraphConstraints constraints,
+ @IntRange(from = 0) int lineNumber,
@NonNull LineBreaks out) {
- return nComputeLineBreaks(
+ out.breakCount = nComputeLineBreaks(
mNativePtr,
// Inputs
- chars,
+ measuredPara.getChars(),
measuredPara.getNativePtr(),
- length,
- firstWidth,
- firstWidthLineCount,
- restWidth,
- variableTabStops,
- defaultTabStop,
- indentsOffset,
+ measuredPara.getChars().length,
+ constraints.mFirstWidth,
+ constraints.mFirstWidthLineCount,
+ constraints.mWidth,
+ constraints.mVariableTabStops,
+ constraints.mDefaultTabStop,
+ lineNumber,
// Outputs
out,
@@ -114,10 +327,8 @@
}
@FastNative
- private static native long nInit(
- @Layout.BreakStrategy int breakStrategy,
- @Layout.HyphenationFrequency int hyphenationFrequency,
- boolean isJustified,
+ private static native long nInit(@BreakStrategy int breakStrategy,
+ @HyphenationFrequency int hyphenationFrequency, boolean isJustified,
@Nullable int[] indents);
@CriticalNative
diff --git a/core/java/android/text/NativeMeasuredParagraph.java b/core/java/android/text/NativeMeasuredParagraph.java
index d03674f..bfdccca 100644
--- a/core/java/android/text/NativeMeasuredParagraph.java
+++ b/core/java/android/text/NativeMeasuredParagraph.java
@@ -36,10 +36,19 @@
NativeMeasuredParagraph.class.getClassLoader(), nGetReleaseFunc(), 1024);
private long mNativePtr;
+ private @NonNull char[] mChars;
// Use builder instead.
- private NativeMeasuredParagraph(long ptr) {
+ private NativeMeasuredParagraph(long ptr, @NonNull char[] chars) {
mNativePtr = ptr;
+ mChars = chars;
+ }
+
+ /**
+ * Returns a characters of this paragraph.
+ */
+ public char[] getChars() {
+ return mChars;
}
/**
@@ -126,7 +135,7 @@
try {
long ptr = nBuildNativeMeasuredParagraph(mNativePtr, text, computeHyphenation,
computeLayout);
- NativeMeasuredParagraph res = new NativeMeasuredParagraph(ptr);
+ NativeMeasuredParagraph res = new NativeMeasuredParagraph(ptr, text);
sRegistry.registerNativeAllocation(res, ptr);
return res;
} finally {
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index dc01178..128f860 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -626,11 +626,16 @@
indents = null;
}
- final NativeLineBreaker lineBreaker = new NativeLineBreaker(
- b.mBreakStrategy, b.mHyphenationFrequency,
+ final NativeLineBreaker lineBreaker = new NativeLineBreaker.Builder()
+ .setBreakStrategy(b.mBreakStrategy)
+ .setHyphenationFrequency(b.mHyphenationFrequency)
// TODO: Support more justification mode, e.g. letter spacing, stretching.
- b.mJustificationMode != Layout.JUSTIFICATION_MODE_NONE,
- indents);
+ .setJustified(b.mJustificationMode)
+ .setIndents(indents)
+ .build();
+
+ NativeLineBreaker.ParagraphConstraints constraints =
+ new NativeLineBreaker.ParagraphConstraints();
PrecomputedText.ParagraphInfo[] paragraphInfo = null;
final Spanned spanned = (source instanceof Spanned) ? (Spanned) source : null;
@@ -721,18 +726,14 @@
final char[] chs = measuredPara.getChars();
final int[] spanEndCache = measuredPara.getSpanEndCache().getRawArray();
final int[] fmCache = measuredPara.getFontMetrics().getRawArray();
- int breakCount = lineBreaker.computeLineBreaks(
- measuredPara.getChars(),
- measuredPara.getNativeMeasuredParagraph(),
- paraEnd - paraStart,
- firstWidth,
- firstWidthLineCount,
- restWidth,
- variableTabStops,
- TAB_INCREMENT,
- mLineCount,
- lineBreaks);
+ constraints.setWidth(restWidth);
+ constraints.setIndent(firstWidth, firstWidthLineCount);
+ constraints.setTabStops(variableTabStops, TAB_INCREMENT);
+
+ lineBreaker.computeLineBreaks(measuredPara.getNativeMeasuredParagraph(),
+ constraints, mLineCount, lineBreaks);
+ int breakCount = lineBreaks.breakCount;
final int[] breaks = lineBreaks.breaks;
final float[] lineWidths = lineBreaks.widths;
final float[] ascents = lineBreaks.ascents;
diff --git a/core/java/android/transition/Scene.java b/core/java/android/transition/Scene.java
index 15ad7de..2c858cd 100644
--- a/core/java/android/transition/Scene.java
+++ b/core/java/android/transition/Scene.java
@@ -35,7 +35,8 @@
private int mLayoutId = -1;
private ViewGroup mSceneRoot;
private View mLayout; // alternative to layoutId
- Runnable mEnterAction, mExitAction;
+ Runnable mEnterAction;
+ Runnable mExitAction;
/**
* Returns a Scene described by the resource file associated with the given
@@ -265,4 +266,4 @@
boolean isCreatedFromLayoutResource() {
return (mLayoutId > 0);
}
-}
\ No newline at end of file
+}
diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java
index 887d96e..c037cd0 100644
--- a/core/java/android/util/FeatureFlagUtils.java
+++ b/core/java/android/util/FeatureFlagUtils.java
@@ -40,7 +40,6 @@
static {
DEFAULT_FLAGS = new HashMap<>();
DEFAULT_FLAGS.put("settings_battery_display_app_list", "false");
- DEFAULT_FLAGS.put("settings_condition_manager_v2", "false");
DEFAULT_FLAGS.put("settings_bluetooth_while_driving", "false");
DEFAULT_FLAGS.put("settings_audio_switcher", "true");
DEFAULT_FLAGS.put("settings_systemui_theme", "true");
diff --git a/core/java/android/view/AccessibilityIterators.java b/core/java/android/view/AccessibilityIterators.java
index ca54bef..9f7560c 100644
--- a/core/java/android/view/AccessibilityIterators.java
+++ b/core/java/android/view/AccessibilityIterators.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.content.res.Configuration;
import java.text.BreakIterator;
@@ -45,6 +46,7 @@
*/
public static abstract class AbstractTextSegmentIterator implements TextSegmentIterator {
+ @UnsupportedAppUsage
protected String mText;
private final int[] mSegment = new int[2];
diff --git a/core/java/android/view/ActionProvider.java b/core/java/android/view/ActionProvider.java
index 353b4c2..cd7e67e 100644
--- a/core/java/android/view/ActionProvider.java
+++ b/core/java/android/view/ActionProvider.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.util.Log;
@@ -218,6 +219,7 @@
/**
* @hide Internal use only
*/
+ @UnsupportedAppUsage
public void setSubUiVisibilityListener(SubUiVisibilityListener listener) {
mSubUiVisibilityListener = listener;
}
@@ -240,6 +242,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public void reset() {
mVisibilityListener = null;
mSubUiVisibilityListener = null;
diff --git a/core/java/android/view/AppTransitionAnimationSpec.java b/core/java/android/view/AppTransitionAnimationSpec.java
index 86a5fb7..6585e40 100644
--- a/core/java/android/view/AppTransitionAnimationSpec.java
+++ b/core/java/android/view/AppTransitionAnimationSpec.java
@@ -1,5 +1,6 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.GraphicBuffer;
import android.graphics.Rect;
import android.os.Parcel;
@@ -18,6 +19,7 @@
public final GraphicBuffer buffer;
public final Rect rect;
+ @UnsupportedAppUsage
public AppTransitionAnimationSpec(int taskId, GraphicBuffer buffer, Rect rect) {
this.taskId = taskId;
this.rect = rect;
diff --git a/core/java/android/view/BatchedInputEventReceiver.java b/core/java/android/view/BatchedInputEventReceiver.java
index b1d28e0..61ccac9 100644
--- a/core/java/android/view/BatchedInputEventReceiver.java
+++ b/core/java/android/view/BatchedInputEventReceiver.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Looper;
/**
@@ -26,6 +27,7 @@
Choreographer mChoreographer;
private boolean mBatchedInputScheduled;
+ @UnsupportedAppUsage
public BatchedInputEventReceiver(
InputChannel inputChannel, Looper looper, Choreographer choreographer) {
super(inputChannel, looper);
diff --git a/core/java/android/view/Choreographer.java b/core/java/android/view/Choreographer.java
index f8cfd0d..ce16ffc 100644
--- a/core/java/android/view/Choreographer.java
+++ b/core/java/android/view/Choreographer.java
@@ -20,6 +20,7 @@
import static android.view.DisplayEventReceiver.VSYNC_SOURCE_SURFACE_FLINGER;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.hardware.display.DisplayManagerGlobal;
import android.os.Handler;
import android.os.Looper;
@@ -130,6 +131,7 @@
};
// Enable/disable vsync for animations and drawing.
+ @UnsupportedAppUsage
private static final boolean USE_VSYNC = SystemProperties.getBoolean(
"debug.choreographer.vsync", true);
@@ -151,6 +153,7 @@
public String toString() { return "FRAME_CALLBACK_TOKEN"; }
};
+ @UnsupportedAppUsage
private final Object mLock = new Object();
private final Looper mLooper;
@@ -159,15 +162,19 @@
// The display event receiver can only be accessed by the looper thread to which
// it is attached. We take care to ensure that we post message to the looper
// if appropriate when interacting with the display event receiver.
+ @UnsupportedAppUsage
private final FrameDisplayEventReceiver mDisplayEventReceiver;
private CallbackRecord mCallbackPool;
+ @UnsupportedAppUsage
private final CallbackQueue[] mCallbackQueues;
private boolean mFrameScheduled;
private boolean mCallbacksRunning;
+ @UnsupportedAppUsage
private long mLastFrameTimeNanos;
+ @UnsupportedAppUsage
private long mFrameIntervalNanos;
private boolean mDebugPrintNextFrameTimeDelta;
private int mFPSDivisor = 1;
@@ -265,6 +272,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public static Choreographer getSfInstance() {
return sSfThreadInstance.get();
}
@@ -556,6 +564,7 @@
* @throws IllegalStateException if no frame is in progress.
* @hide
*/
+ @UnsupportedAppUsage
public long getFrameTime() {
return getFrameTimeNanos() / TimeUtils.NANOS_PER_MS;
}
@@ -568,6 +577,7 @@
* @throws IllegalStateException if no frame is in progress.
* @hide
*/
+ @UnsupportedAppUsage
public long getFrameTimeNanos() {
synchronized (mLock) {
if (!mCallbacksRunning) {
@@ -627,6 +637,7 @@
ThreadedRenderer.setFPSDivisor(divisor);
}
+ @UnsupportedAppUsage
void doFrame(long frameTimeNanos, int frame) {
final long startNanos;
synchronized (mLock) {
@@ -792,6 +803,7 @@
}
}
+ @UnsupportedAppUsage
private void scheduleVsyncLocked() {
mDisplayEventReceiver.scheduleVsync();
}
@@ -942,6 +954,7 @@
public Object action; // Runnable or FrameCallback
public Object token;
+ @UnsupportedAppUsage
public void run(long frameTimeNanos) {
if (token == FRAME_CALLBACK_TOKEN) {
((FrameCallback)action).doFrame(frameTimeNanos);
@@ -978,6 +991,7 @@
return callbacks;
}
+ @UnsupportedAppUsage
public void addCallbackLocked(long dueTime, Object action, Object token) {
CallbackRecord callback = obtainCallbackLocked(dueTime, action, token);
CallbackRecord entry = mHead;
diff --git a/core/java/android/view/ContextThemeWrapper.java b/core/java/android/view/ContextThemeWrapper.java
index d3cc175..c77500a 100644
--- a/core/java/android/view/ContextThemeWrapper.java
+++ b/core/java/android/view/ContextThemeWrapper.java
@@ -17,6 +17,7 @@
package android.view;
import android.annotation.StyleRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.AssetManager;
@@ -28,10 +29,14 @@
* wrapped context.
*/
public class ContextThemeWrapper extends ContextWrapper {
+ @UnsupportedAppUsage
private int mThemeResource;
+ @UnsupportedAppUsage
private Resources.Theme mTheme;
+ @UnsupportedAppUsage
private LayoutInflater mInflater;
private Configuration mOverrideConfiguration;
+ @UnsupportedAppUsage
private Resources mResources;
/**
@@ -143,6 +148,7 @@
/** @hide */
@Override
+ @UnsupportedAppUsage
public int getThemeResId() {
return mThemeResource;
}
@@ -186,6 +192,7 @@
theme.applyStyle(resId, true);
}
+ @UnsupportedAppUsage
private void initializeTheme() {
final boolean first = mTheme == null;
if (first) {
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 20f8066..4d96fc3 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -21,6 +21,7 @@
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
+import android.annotation.UnsupportedAppUsage;
import android.app.KeyguardManager;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
@@ -79,6 +80,7 @@
private final Resources mResources;
private DisplayAdjustments mDisplayAdjustments;
+ @UnsupportedAppUsage
private DisplayInfo mDisplayInfo; // never null
private boolean mIsValid;
@@ -231,6 +233,7 @@
* Display type: Unknown display type.
* @hide
*/
+ @UnsupportedAppUsage
public static final int TYPE_UNKNOWN = 0;
/**
@@ -243,12 +246,14 @@
* Display type: HDMI display.
* @hide
*/
+ @UnsupportedAppUsage
public static final int TYPE_HDMI = 2;
/**
* Display type: WiFi display.
* @hide
*/
+ @UnsupportedAppUsage
public static final int TYPE_WIFI = 3;
/**
@@ -261,6 +266,7 @@
* Display type: Virtual display.
* @hide
*/
+ @UnsupportedAppUsage
public static final int TYPE_VIRTUAL = 5;
/**
@@ -459,6 +465,7 @@
* @return True if the display is still valid.
* @hide
*/
+ @UnsupportedAppUsage
public boolean getDisplayInfo(DisplayInfo outDisplayInfo) {
synchronized (this) {
updateDisplayInfoLocked();
@@ -506,6 +513,7 @@
* @see #TYPE_VIRTUAL
* @hide
*/
+ @UnsupportedAppUsage
public int getType() {
return mType;
}
@@ -517,6 +525,7 @@
* @return The display address.
* @hide
*/
+ @UnsupportedAppUsage
public String getAddress() {
return mAddress;
}
@@ -543,6 +552,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public String getOwnerPackageName() {
return mOwnerPackageName;
}
@@ -553,6 +563,7 @@
* @return The display adjustments holder, or null if none is required.
* @hide
*/
+ @UnsupportedAppUsage
public DisplayAdjustments getDisplayAdjustments() {
if (mResources != null) {
final DisplayAdjustments currentAdjustements = mResources.getDisplayAdjustments();
@@ -676,6 +687,7 @@
* mostly for wallpapers.
* @hide
*/
+ @UnsupportedAppUsage
public int getMaximumSizeDimension() {
synchronized (this) {
updateDisplayInfoLocked();
@@ -1184,6 +1196,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public Mode(int modeId, int width, int height, float refreshRate) {
mModeId = modeId;
mWidth = width;
@@ -1360,6 +1373,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public HdrCapabilities(int[] supportedHdrTypes, float maxLuminance,
float maxAverageLuminance, float minLuminance) {
mSupportedHdrTypes = supportedHdrTypes;
diff --git a/core/java/android/view/DisplayAdjustments.java b/core/java/android/view/DisplayAdjustments.java
index 790029b..da4d92fa 100644
--- a/core/java/android/view/DisplayAdjustments.java
+++ b/core/java/android/view/DisplayAdjustments.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
@@ -28,6 +29,7 @@
private volatile CompatibilityInfo mCompatInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
private Configuration mConfiguration;
+ @UnsupportedAppUsage
public DisplayAdjustments() {
}
@@ -42,6 +44,7 @@
? daj.mConfiguration : Configuration.EMPTY);
}
+ @UnsupportedAppUsage
public void setCompatibilityInfo(CompatibilityInfo compatInfo) {
if (this == DEFAULT_DISPLAY_ADJUSTMENTS) {
throw new IllegalArgumentException(
@@ -67,6 +70,7 @@
mConfiguration.setTo(configuration != null ? configuration : Configuration.EMPTY);
}
+ @UnsupportedAppUsage
public Configuration getConfiguration() {
return mConfiguration;
}
diff --git a/core/java/android/view/DisplayCutout.java b/core/java/android/view/DisplayCutout.java
index 496bc9f..5f80d31 100644
--- a/core/java/android/view/DisplayCutout.java
+++ b/core/java/android/view/DisplayCutout.java
@@ -325,6 +325,7 @@
*
* @hide
*/
+ @VisibleForTesting
public static DisplayCutout fromBoundingRect(int left, int top, int right, int bottom) {
Region r = Region.obtain();
r.set(left, top, right, bottom);
@@ -422,8 +423,11 @@
m.postTranslate(offsetX, 0);
p.transform(m);
- addToRegion(p, r);
+ final Rect tmpRect = new Rect();
+ toRectAndAddToRegion(p, r, tmpRect);
+ final int topInset = tmpRect.bottom;
+ final int bottomInset;
if (bottomSpec != null) {
final Path bottomPath;
try {
@@ -436,10 +440,17 @@
m.postTranslate(0, displayHeight);
bottomPath.transform(m);
p.addPath(bottomPath);
- addToRegion(bottomPath, r);
+ toRectAndAddToRegion(bottomPath, r, tmpRect);
+ bottomInset = displayHeight - tmpRect.top;
+ } else {
+ bottomInset = 0;
}
- final Pair<Path, DisplayCutout> result = new Pair<>(p, fromBounds(r));
+ // Reuse tmpRect as the inset rect we store into the DisplayCutout instance.
+ tmpRect.set(0, topInset, 0, bottomInset);
+ final DisplayCutout cutout = new DisplayCutout(tmpRect, r, false /* copyArguments */);
+
+ final Pair<Path, DisplayCutout> result = new Pair<>(p, cutout);
synchronized (CACHE_LOCK) {
sCachedSpec = spec;
sCachedDisplayWidth = displayWidth;
@@ -450,12 +461,11 @@
return result;
}
- private static void addToRegion(Path p, Region r) {
+ private static void toRectAndAddToRegion(Path p, Region inoutRegion, Rect inoutRect) {
final RectF rectF = new RectF();
- final Rect rect = new Rect();
p.computeBounds(rectF, false /* unused */);
- rectF.round(rect);
- r.op(rect, Op.UNION);
+ rectF.round(inoutRect);
+ inoutRegion.op(inoutRect, Op.UNION);
}
private static Region boundingRectsToRegion(List<Rect> rects) {
diff --git a/core/java/android/view/DisplayEventReceiver.java b/core/java/android/view/DisplayEventReceiver.java
index cb98c88..edd3f1a 100644
--- a/core/java/android/view/DisplayEventReceiver.java
+++ b/core/java/android/view/DisplayEventReceiver.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Looper;
import android.os.MessageQueue;
import android.util.Log;
@@ -56,6 +57,7 @@
private final CloseGuard mCloseGuard = CloseGuard.get();
+ @UnsupportedAppUsage
private long mReceiverPtr;
// We keep a reference message queue object here so that it is not
@@ -73,6 +75,7 @@
*
* @param looper The looper to use when invoking callbacks.
*/
+ @UnsupportedAppUsage
public DisplayEventReceiver(Looper looper) {
this(looper, VSYNC_SOURCE_APP);
}
@@ -137,6 +140,7 @@
* {@link SurfaceControl#BUILT_IN_DISPLAY_ID_MAIN}.
* @param frame The frame number. Increases by one for each vertical sync interval.
*/
+ @UnsupportedAppUsage
public void onVsync(long timestampNanos, int builtInDisplayId, int frame) {
}
@@ -149,6 +153,7 @@
* {@link SurfaceControl#BUILT_IN_DISPLAY_ID_HDMI}.
* @param connected True if the display is connected, false if it disconnected.
*/
+ @UnsupportedAppUsage
public void onHotplug(long timestampNanos, int builtInDisplayId, boolean connected) {
}
@@ -156,6 +161,7 @@
* Schedules a single vertical sync pulse to be delivered when the next
* display frame begins.
*/
+ @UnsupportedAppUsage
public void scheduleVsync() {
if (mReceiverPtr == 0) {
Log.w(TAG, "Attempted to schedule a vertical sync pulse but the display event "
@@ -167,12 +173,14 @@
// Called from native code.
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private void dispatchVsync(long timestampNanos, int builtInDisplayId, int frame) {
onVsync(timestampNanos, builtInDisplayId, frame);
}
// Called from native code.
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private void dispatchHotplug(long timestampNanos, int builtInDisplayId, boolean connected) {
onHotplug(timestampNanos, builtInDisplayId, connected);
}
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index 2421ba4..34bcbdd 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -23,6 +23,7 @@
import static android.view.DisplayInfoProto.NAME;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
import android.graphics.Rect;
@@ -116,6 +117,7 @@
* Represents the usable size of the display which may be smaller than the
* physical size when the system is emulating a smaller display.
*/
+ @UnsupportedAppUsage
public int logicalWidth;
/**
@@ -123,6 +125,7 @@
* Represents the usable size of the display which may be smaller than the
* physical size when the system is emulating a smaller display.
*/
+ @UnsupportedAppUsage
public int logicalHeight;
/**
@@ -155,6 +158,7 @@
* @hide
*/
@Nullable
+ @UnsupportedAppUsage
public DisplayCutout displayCutout;
/**
@@ -168,6 +172,7 @@
* </p>
*/
@Surface.Rotation
+ @UnsupportedAppUsage
public int rotation;
/**
@@ -275,6 +280,7 @@
}
};
+ @UnsupportedAppUsage
public DisplayInfo() {
}
diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java
index df4d5c4..4b946d7 100644
--- a/core/java/android/view/DisplayListCanvas.java
+++ b/core/java/android/view/DisplayListCanvas.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Bitmap;
import android.graphics.CanvasProperty;
import android.graphics.Paint;
@@ -39,7 +40,7 @@
// view hierarchy because display lists are generated recursively.
private static final int POOL_LIMIT = 25;
- private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB
+ public static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB
private static final SynchronizedPool<DisplayListCanvas> sPool =
new SynchronizedPool<>(POOL_LIMIT);
@@ -155,6 +156,7 @@
*
* @param drawGLFunction A native function pointer
*/
+ @UnsupportedAppUsage
public void callDrawGLFunction2(long drawGLFunction) {
nCallDrawGLFunction(mNativeCanvasWrapper, drawGLFunction, null);
}
@@ -171,6 +173,7 @@
* any references to the functor, just that the reference from this specific
* canvas's display list has been released.
*/
+ @UnsupportedAppUsage
public void drawGLFunctor2(long drawGLFunctor, @Nullable Runnable releasedCallback) {
nCallDrawGLFunction(mNativeCanvasWrapper, drawGLFunctor, releasedCallback);
}
@@ -184,6 +187,7 @@
*
* @param renderNode The RenderNode to draw.
*/
+ @UnsupportedAppUsage
public void drawRenderNode(RenderNode renderNode) {
nDrawRenderNode(mNativeCanvasWrapper, renderNode.mNativeRenderNode);
}
@@ -205,6 +209,7 @@
// Drawing
///////////////////////////////////////////////////////////////////////////
+ @UnsupportedAppUsage
public void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy,
CanvasProperty<Float> radius, CanvasProperty<Paint> paint) {
nDrawCircle(mNativeCanvasWrapper, cx.getNativeContainer(), cy.getNativeContainer(),
diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java
index 2c9f871..bd4dda2 100644
--- a/core/java/android/view/DragEvent.java
+++ b/core/java/android/view/DragEvent.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.content.ClipData;
import android.content.ClipDescription;
import android.os.Parcel;
@@ -129,7 +130,9 @@
int mAction;
float mX, mY;
+ @UnsupportedAppUsage
ClipDescription mClipDescription;
+ @UnsupportedAppUsage
ClipData mClipData;
IDragAndDropPermissions mDragAndDropPermissions;
@@ -313,6 +316,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public static DragEvent obtain(DragEvent source) {
return obtain(source.mAction, source.mX, source.mY, source.mLocalState,
source.mClipDescription, source.mClipData, source.mDragAndDropPermissions,
diff --git a/core/java/android/view/FrameMetrics.java b/core/java/android/view/FrameMetrics.java
index 358a2d1..dcdef3e 100644
--- a/core/java/android/view/FrameMetrics.java
+++ b/core/java/android/view/FrameMetrics.java
@@ -17,6 +17,7 @@
package android.view;
import android.annotation.IntDef;
+import android.annotation.UnsupportedAppUsage;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -249,6 +250,7 @@
Index.INTENDED_VSYNC, Index.FRAME_COMPLETED,
};
+ @UnsupportedAppUsage
/* package */ final long[] mTimingData;
/**
diff --git a/core/java/android/view/FrameMetricsObserver.java b/core/java/android/view/FrameMetricsObserver.java
index 9e81de0..597089b 100644
--- a/core/java/android/view/FrameMetricsObserver.java
+++ b/core/java/android/view/FrameMetricsObserver.java
@@ -17,6 +17,7 @@
package android.view;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.os.Looper;
import android.os.MessageQueue;
@@ -31,10 +32,12 @@
* @hide
*/
public class FrameMetricsObserver {
+ @UnsupportedAppUsage
private MessageQueue mMessageQueue;
private WeakReference<Window> mWindow;
+ @UnsupportedAppUsage
private FrameMetrics mFrameMetrics;
/* package */ Window.OnFrameMetricsAvailableListener mListener;
@@ -63,6 +66,7 @@
// Called by native on the provided Handler
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private void notifyDataAvailable(int dropCount) {
final Window window = mWindow.get();
if (window != null) {
diff --git a/core/java/android/view/GestureDetector.java b/core/java/android/view/GestureDetector.java
index bc2953e..3ee5f1f 100644
--- a/core/java/android/view/GestureDetector.java
+++ b/core/java/android/view/GestureDetector.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
@@ -216,12 +217,15 @@
}
}
+ @UnsupportedAppUsage
private int mTouchSlopSquare;
private int mDoubleTapTouchSlopSquare;
private int mDoubleTapSlopSquare;
+ @UnsupportedAppUsage
private int mMinimumFlingVelocity;
private int mMaximumFlingVelocity;
+ @UnsupportedAppUsage
private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout();
private static final int TAP_TIMEOUT = ViewConfiguration.getTapTimeout();
private static final int DOUBLE_TAP_TIMEOUT = ViewConfiguration.getDoubleTapTimeout();
@@ -233,6 +237,7 @@
private static final int TAP = 3;
private final Handler mHandler;
+ @UnsupportedAppUsage
private final OnGestureListener mListener;
private OnDoubleTapListener mDoubleTapListener;
private OnContextClickListener mContextClickListener;
@@ -241,6 +246,7 @@
private boolean mDeferConfirmSingleTap;
private boolean mInLongPress;
private boolean mInContextClick;
+ @UnsupportedAppUsage
private boolean mAlwaysInTapRegion;
private boolean mAlwaysInBiggerTapRegion;
private boolean mIgnoreNextUpEvent;
diff --git a/core/java/android/view/GhostView.java b/core/java/android/view/GhostView.java
index d1b96ba..fa7b067 100644
--- a/core/java/android/view/GhostView.java
+++ b/core/java/android/view/GhostView.java
@@ -15,6 +15,7 @@
*/
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.widget.FrameLayout;
@@ -91,6 +92,7 @@
host.transformMatrixToLocal(matrix);
}
+ @UnsupportedAppUsage
public static GhostView addGhost(View view, ViewGroup viewGroup, Matrix matrix) {
if (!(view.getParent() instanceof ViewGroup)) {
throw new IllegalArgumentException("Ghosted views must be parented by a ViewGroup");
@@ -131,10 +133,12 @@
return ghostView;
}
+ @UnsupportedAppUsage
public static GhostView addGhost(View view, ViewGroup viewGroup) {
return addGhost(view, viewGroup, null);
}
+ @UnsupportedAppUsage
public static void removeGhost(View view) {
GhostView ghostView = view.mGhostView;
if (ghostView != null) {
diff --git a/core/java/android/view/InputChannel.java b/core/java/android/view/InputChannel.java
index de195ae..b2dd6ac 100644
--- a/core/java/android/view/InputChannel.java
+++ b/core/java/android/view/InputChannel.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Slog;
@@ -32,6 +33,7 @@
private static final boolean DEBUG = false;
+ @UnsupportedAppUsage
public static final Parcelable.Creator<InputChannel> CREATOR
= new Parcelable.Creator<InputChannel>() {
public InputChannel createFromParcel(Parcel source) {
@@ -46,6 +48,7 @@
};
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private long mPtr; // used by native code
private static native InputChannel[] nativeOpenInputChannelPair(String name);
@@ -63,6 +66,7 @@
* It can be initialized by reading from a Parcel or by transferring the state of
* another input channel into this one.
*/
+ @UnsupportedAppUsage
public InputChannel() {
}
diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java
index 8405d9e..7295259 100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
@@ -18,6 +18,7 @@
import android.annotation.RequiresPermission;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.hardware.input.InputDeviceIdentifier;
import android.hardware.input.InputManager;
@@ -53,6 +54,7 @@
private final int mProductId;
private final String mDescriptor;
private final InputDeviceIdentifier mIdentifier;
+ @UnsupportedAppUsage
private final boolean mIsExternal;
private final int mSources;
private final int mKeyboardType;
@@ -405,6 +407,7 @@
};
// Called by native code.
+ @UnsupportedAppUsage
private InputDevice(int id, int generation, int controllerNumber, String name, int vendorId,
int productId, String descriptor, boolean isExternal, int sources, int keyboardType,
KeyCharacterMap keyCharacterMap, boolean hasVibrator, boolean hasMicrophone,
@@ -608,6 +611,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isExternal() {
return mIsExternal;
}
@@ -739,6 +743,7 @@
}
// Called from native code.
+ @UnsupportedAppUsage
private void addMotionRange(int axis, int source,
float min, float max, float flat, float fuzz, float resolution) {
mMotionRanges.add(new MotionRange(axis, source, min, max, flat, fuzz, resolution));
diff --git a/core/java/android/view/InputEvent.java b/core/java/android/view/InputEvent.java
index c257364..c2848d4 100644
--- a/core/java/android/view/InputEvent.java
+++ b/core/java/android/view/InputEvent.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -227,6 +228,7 @@
* @return The unique sequence number of this event.
* @hide
*/
+ @UnsupportedAppUsage
public int getSequenceNumber() {
return mSeq;
}
diff --git a/core/java/android/view/InputEventConsistencyVerifier.java b/core/java/android/view/InputEventConsistencyVerifier.java
index 7e8ec04..e4b1a8d 100644
--- a/core/java/android/view/InputEventConsistencyVerifier.java
+++ b/core/java/android/view/InputEventConsistencyVerifier.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Build;
import android.util.Log;
@@ -115,6 +116,7 @@
* @param caller The object to which the verifier is attached.
* @param flags Flags to the verifier, or 0 if none.
*/
+ @UnsupportedAppUsage
public InputEventConsistencyVerifier(Object caller, int flags) {
this(caller, flags, null);
}
@@ -135,6 +137,7 @@
* Determines whether the instrumentation should be enabled.
* @return True if it should be enabled.
*/
+ @UnsupportedAppUsage
public static boolean isInstrumentationEnabled() {
return IS_ENG_BUILD;
}
@@ -319,6 +322,7 @@
* where a subclass dispatching method delegates to its superclass's dispatching method
* and both dispatching methods call into the consistency verifier.
*/
+ @UnsupportedAppUsage
public void onTouchEvent(MotionEvent event, int nestingLevel) {
if (!startEvent(event, nestingLevel, EVENT_TYPE_TOUCH)) {
return;
@@ -579,6 +583,7 @@
* where a subclass dispatching method delegates to its superclass's dispatching method
* and both dispatching methods call into the consistency verifier.
*/
+ @UnsupportedAppUsage
public void onUnhandledEvent(InputEvent event, int nestingLevel) {
if (nestingLevel != mLastNestingLevel) {
return;
diff --git a/core/java/android/view/InputEventReceiver.java b/core/java/android/view/InputEventReceiver.java
index 20ab539..7260a65 100644
--- a/core/java/android/view/InputEventReceiver.java
+++ b/core/java/android/view/InputEventReceiver.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Looper;
import android.os.MessageQueue;
import android.util.Log;
@@ -113,6 +114,7 @@
*
* @param event The input event that was received.
*/
+ @UnsupportedAppUsage
public void onInputEvent(InputEvent event) {
finishInputEvent(event, false);
}
@@ -180,6 +182,7 @@
// Called from native code.
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private void dispatchInputEvent(int seq, InputEvent event) {
mSeqMap.put(event.getSequenceNumber(), seq);
onInputEvent(event);
@@ -187,6 +190,7 @@
// Called from native code.
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private void dispatchBatchedInputEventPending() {
onBatchedInputEventPending();
}
diff --git a/core/java/android/view/InputEventSender.java b/core/java/android/view/InputEventSender.java
index b25fb65..c5f4c23 100644
--- a/core/java/android/view/InputEventSender.java
+++ b/core/java/android/view/InputEventSender.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Looper;
import android.os.MessageQueue;
import android.util.Log;
@@ -137,6 +138,7 @@
// Called from native code.
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private void dispatchInputEventFinished(int seq, boolean handled) {
onInputEventFinished(seq, handled);
}
diff --git a/core/java/android/view/InputFilter.java b/core/java/android/view/InputFilter.java
index 0ab4dc0..3aaf31e 100644
--- a/core/java/android/view/InputFilter.java
+++ b/core/java/android/view/InputFilter.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -117,6 +118,7 @@
*
* @param looper The looper to run callbacks on.
*/
+ @UnsupportedAppUsage
public InputFilter(Looper looper) {
mH = new H(looper);
}
@@ -186,6 +188,7 @@
* @param event The input event that was received.
* @param policyFlags The input event policy flags.
*/
+ @UnsupportedAppUsage
public void onInputEvent(InputEvent event, int policyFlags) {
sendInputEvent(event, policyFlags);
}
diff --git a/core/java/android/view/InputQueue.java b/core/java/android/view/InputQueue.java
index 582ae79..69ebc46 100644
--- a/core/java/android/view/InputQueue.java
+++ b/core/java/android/view/InputQueue.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Looper;
import android.os.MessageQueue;
import android.util.LongSparseArray;
@@ -100,6 +101,7 @@
mActiveEventArray.put(id, event);
}
+ @UnsupportedAppUsage
private void finishInputEvent(long id, boolean handled) {
int index = mActiveEventArray.indexOfKey(id);
if (index >= 0) {
diff --git a/core/java/android/view/KeyCharacterMap.java b/core/java/android/view/KeyCharacterMap.java
index b7b56e8..989bf67 100644
--- a/core/java/android/view/KeyCharacterMap.java
+++ b/core/java/android/view/KeyCharacterMap.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.hardware.input.InputManager;
import android.os.Parcel;
import android.os.Parcelable;
@@ -307,6 +308,7 @@
}
// Called from native
+ @UnsupportedAppUsage
private KeyCharacterMap(long ptr) {
mPtr = ptr;
}
@@ -748,7 +750,9 @@
private FallbackAction next;
+ @UnsupportedAppUsage
public int keyCode;
+ @UnsupportedAppUsage
public int metaState;
private FallbackAction() {
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index 715440c..8641d7f 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -20,6 +20,7 @@
import android.annotation.NonNull;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.method.MetaKeyKeyListener;
@@ -837,6 +838,7 @@
// Symbolic names of all metakeys in bit order from least significant to most significant.
// Accordingly there are exactly 32 values in this table.
+ @UnsupportedAppUsage
private static final String[] META_SYMBOLIC_NAMES = new String[] {
"META_SHIFT_ON",
"META_ALT_ON",
@@ -907,6 +909,7 @@
* Reserved for use by {@link MetaKeyKeyListener} for a published constant in its API.
* @hide
*/
+ @UnsupportedAppUsage
public static final int META_CAP_LOCKED = 0x100;
/**
@@ -914,6 +917,7 @@
* Reserved for use by {@link MetaKeyKeyListener} for a published constant in its API.
* @hide
*/
+ @UnsupportedAppUsage
public static final int META_ALT_LOCKED = 0x200;
/**
@@ -921,6 +925,7 @@
* Reserved for use by {@link MetaKeyKeyListener} for a published constant in its API.
* @hide
*/
+ @UnsupportedAppUsage
public static final int META_SYM_LOCKED = 0x400;
/**
@@ -929,6 +934,7 @@
* in its API that is currently being retained for legacy reasons.
* @hide
*/
+ @UnsupportedAppUsage
public static final int META_SELECTING = 0x800;
/**
@@ -1248,17 +1254,28 @@
private KeyEvent mNext;
+ @UnsupportedAppUsage
private int mDeviceId;
+ @UnsupportedAppUsage
private int mSource;
private int mDisplayId;
+ @UnsupportedAppUsage
private int mMetaState;
+ @UnsupportedAppUsage
private int mAction;
+ @UnsupportedAppUsage
private int mKeyCode;
+ @UnsupportedAppUsage
private int mScanCode;
+ @UnsupportedAppUsage
private int mRepeatCount;
+ @UnsupportedAppUsage
private int mFlags;
+ @UnsupportedAppUsage
private long mDownTime;
+ @UnsupportedAppUsage
private long mEventTime;
+ @UnsupportedAppUsage
private String mCharacters;
public interface Callback {
@@ -1595,6 +1612,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static KeyEvent obtain(long downTime, long eventTime, int action,
int code, int repeat, int metaState,
int deviceId, int scancode, int flags, int source, String characters) {
@@ -1640,6 +1658,7 @@
* @hide
*/
@Override
+ @UnsupportedAppUsage
public final void recycle() {
super.recycle();
mCharacters = null;
@@ -1760,6 +1779,7 @@
* @deprecated
* @hide
*/
+ @UnsupportedAppUsage
@Deprecated public final boolean isDown() {
return mAction == ACTION_DOWN;
}
@@ -1821,6 +1841,7 @@
/** Whether key will, by default, trigger a click on the focused view.
* @hide
*/
+ @UnsupportedAppUsage
public static final boolean isConfirmKey(int keyCode) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
@@ -2023,6 +2044,7 @@
}
// Mask of all modifier key meta states. Specifically excludes locked keys like caps lock.
+ @UnsupportedAppUsage
private static final int META_MODIFIER_MASK =
META_SHIFT_ON | META_SHIFT_LEFT_ON | META_SHIFT_RIGHT_ON
| META_ALT_ON | META_ALT_LEFT_ON | META_ALT_RIGHT_ON
@@ -2031,19 +2053,23 @@
| META_SYM_ON | META_FUNCTION_ON;
// Mask of all lock key meta states.
+ @UnsupportedAppUsage
private static final int META_LOCK_MASK =
META_CAPS_LOCK_ON | META_NUM_LOCK_ON | META_SCROLL_LOCK_ON;
// Mask of all valid meta states.
+ @UnsupportedAppUsage
private static final int META_ALL_MASK = META_MODIFIER_MASK | META_LOCK_MASK;
// Mask of all synthetic meta states that are reserved for API compatibility with
// historical uses in MetaKeyKeyListener.
+ @UnsupportedAppUsage
private static final int META_SYNTHETIC_MASK =
META_CAP_LOCKED | META_ALT_LOCKED | META_SYM_LOCKED | META_SELECTING;
// Mask of all meta states that are not valid use in specifying a modifier key.
// These bits are known to be used for purposes other than specifying modifiers.
+ @UnsupportedAppUsage
private static final int META_INVALID_MODIFIER_MASK =
META_LOCK_MASK | META_SYNTHETIC_MASK;
diff --git a/core/java/android/view/LayoutInflater.java b/core/java/android/view/LayoutInflater.java
index 47b8d92..c520a99 100644
--- a/core/java/android/view/LayoutInflater.java
+++ b/core/java/android/view/LayoutInflater.java
@@ -19,6 +19,7 @@
import android.annotation.LayoutRes;
import android.annotation.Nullable;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -76,20 +77,28 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected final Context mContext;
// these are optional, set by the caller
+ @UnsupportedAppUsage
private boolean mFactorySet;
+ @UnsupportedAppUsage
private Factory mFactory;
+ @UnsupportedAppUsage
private Factory2 mFactory2;
+ @UnsupportedAppUsage
private Factory2 mPrivateFactory;
private Filter mFilter;
+ @UnsupportedAppUsage
final Object[] mConstructorArgs = new Object[2];
+ @UnsupportedAppUsage
static final Class<?>[] mConstructorSignature = new Class[] {
Context.class, AttributeSet.class};
+ @UnsupportedAppUsage
private static final HashMap<String, Constructor<? extends View>> sConstructorMap =
new HashMap<String, Constructor<? extends View>>();
@@ -105,6 +114,7 @@
private static final String ATTR_LAYOUT = "layout";
+ @UnsupportedAppUsage
private static final int[] ATTRS_THEME = new int[] {
com.android.internal.R.attr.theme };
@@ -327,6 +337,7 @@
/**
* @hide for use by framework
*/
+ @UnsupportedAppUsage
public void setPrivateFactory(Factory2 factory) {
if (mPrivateFactory == null) {
mPrivateFactory = factory;
@@ -726,6 +737,7 @@
* argument and should be used for everything except {@code >include>}
* tag parsing.
*/
+ @UnsupportedAppUsage
private View createViewFromTag(View parent, String name, Context context, AttributeSet attrs) {
return createViewFromTag(parent, name, context, attrs, false);
}
@@ -745,6 +757,7 @@
* attribute (if set) for the view being inflated,
* {@code false} otherwise
*/
+ @UnsupportedAppUsage
View createViewFromTag(View parent, String name, Context context, AttributeSet attrs,
boolean ignoreThemeAttr) {
if (name.equals("view")) {
@@ -893,6 +906,7 @@
consumeChildElements(parser);
}
+ @UnsupportedAppUsage
private void parseInclude(XmlPullParser parser, Context context, View parent,
AttributeSet attrs) throws XmlPullParserException, IOException {
int type;
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java
index 344806a..29c58dc 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -19,6 +19,7 @@
import static android.view.Display.DEFAULT_DISPLAY;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Matrix;
import android.os.Parcel;
import android.os.Parcelable;
@@ -1441,6 +1442,7 @@
}
// Private value for history pos that obtains the current sample.
+ @UnsupportedAppUsage
private static final int HISTORY_CURRENT = -0x80000000;
private static final int MAX_RECYCLED = 10;
@@ -1469,6 +1471,7 @@
}
// Pointer to the native MotionEvent object that contains the actual data.
+ @UnsupportedAppUsage
private long mNativePtr;
private MotionEvent mNext;
@@ -1502,6 +1505,7 @@
@FastNative
private static native long nativeGetEventTimeNanos(long nativePtr, int historyPos);
@FastNative
+ @UnsupportedAppUsage
private static native float nativeGetRawAxisValue(long nativePtr,
int axis, int pointerIndex, int historyPos);
@FastNative
@@ -1590,6 +1594,7 @@
}
}
+ @UnsupportedAppUsage
static private MotionEvent obtain() {
final MotionEvent ev;
synchronized (gRecyclerLock) {
@@ -1886,6 +1891,7 @@
/** @hide */
@Override
+ @UnsupportedAppUsage
public MotionEvent copy() {
return obtain(this);
}
@@ -1918,6 +1924,7 @@
* @param scale The scale factor to apply.
* @hide
*/
+ @UnsupportedAppUsage
public final void scale(float scale) {
if (scale != 1.0f) {
nativeScale(mNativePtr, scale);
@@ -1949,6 +1956,7 @@
}
/** @hide */
+ @TestApi
@Override
public void setDisplayId(int displayId) {
nativeSetDisplayId(mNativePtr, displayId);
@@ -2068,6 +2076,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public final void setDownTime(long downTime) {
nativeSetDownTimeNanos(mNativePtr, downTime * NS_PER_MS);
}
@@ -2099,6 +2108,7 @@
* @hide
*/
@Override
+ @UnsupportedAppUsage
public final long getEventTimeNano() {
return nativeGetEventTimeNanos(mNativePtr, HISTORY_CURRENT);
}
@@ -3098,6 +3108,7 @@
* @return True if batching was performed or false if batching was not possible.
* @hide
*/
+ @UnsupportedAppUsage
public final boolean addBatch(MotionEvent event) {
final int action = nativeGetAction(mNativePtr);
if (action != ACTION_MOVE && action != ACTION_HOVER_MOVE) {
@@ -3212,6 +3223,7 @@
* Gets an integer where each pointer id present in the event is marked as a bit.
* @hide
*/
+ @UnsupportedAppUsage
public final int getPointerIdBits() {
int idBits = 0;
final int pointerCount = nativeGetPointerCount(mNativePtr);
@@ -3225,6 +3237,7 @@
* Splits a motion event such that it includes only a subset of pointer ids.
* @hide
*/
+ @UnsupportedAppUsage
public final MotionEvent split(int idBits) {
MotionEvent ev = obtain();
synchronized (gSharedTempLock) {
@@ -3535,7 +3548,9 @@
*/
public static final class PointerCoords {
private static final int INITIAL_PACKED_AXIS_VALUES = 8;
+ @UnsupportedAppUsage
private long mPackedAxisBits;
+ @UnsupportedAppUsage
private float[] mPackedAxisValues;
/**
@@ -3555,6 +3570,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public static PointerCoords[] createArray(int size) {
PointerCoords[] array = new PointerCoords[size];
for (int i = 0; i < size; i++) {
@@ -3848,6 +3864,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public static PointerProperties[] createArray(int size) {
PointerProperties[] array = new PointerProperties[size];
for (int i = 0; i < size; i++) {
diff --git a/core/java/android/view/NotificationHeaderView.java b/core/java/android/view/NotificationHeaderView.java
index a3676ba..81da76d 100644
--- a/core/java/android/view/NotificationHeaderView.java
+++ b/core/java/android/view/NotificationHeaderView.java
@@ -17,6 +17,7 @@
package android.view;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.AppOpsManager;
import android.app.Notification;
import android.content.Context;
@@ -85,6 +86,7 @@
this(context, null);
}
+ @UnsupportedAppUsage
public NotificationHeaderView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
diff --git a/core/java/android/view/PointerIcon.java b/core/java/android/view/PointerIcon.java
index 8cb46b7..dc097a1 100644
--- a/core/java/android/view/PointerIcon.java
+++ b/core/java/android/view/PointerIcon.java
@@ -17,6 +17,7 @@
package android.view;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.XmlRes;
import android.content.Context;
import android.content.res.Resources;
@@ -145,14 +146,20 @@
private static final SparseArray<PointerIcon> gSystemIcons = new SparseArray<PointerIcon>();
private static boolean sUseLargeIcons = false;
+ @UnsupportedAppUsage
private final int mType;
private int mSystemIconResourceId;
+ @UnsupportedAppUsage
private Bitmap mBitmap;
+ @UnsupportedAppUsage
private float mHotSpotX;
+ @UnsupportedAppUsage
private float mHotSpotY;
// The bitmaps for the additional frame of animated pointer icon. Note that the first frame
// will be stored in mBitmap.
+ @UnsupportedAppUsage
private Bitmap mBitmapFrames[];
+ @UnsupportedAppUsage
private int mDurationPerFrame;
private PointerIcon(int type) {
@@ -312,6 +319,7 @@
* @throws IllegalArgumentException if context is null.
* @hide
*/
+ @UnsupportedAppUsage
public PointerIcon load(@NonNull Context context) {
if (context == null) {
throw new IllegalArgumentException("context must not be null");
diff --git a/core/java/android/view/RemoteAnimationAdapter.java b/core/java/android/view/RemoteAnimationAdapter.java
index a864e55..3c9ce78 100644
--- a/core/java/android/view/RemoteAnimationAdapter.java
+++ b/core/java/android/view/RemoteAnimationAdapter.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityOptions;
import android.os.IBinder;
import android.os.Parcel;
@@ -61,6 +62,7 @@
* @param statusBarTransitionDelay The desired delay for all visual animations in the
* status bar caused by this app animation in millis.
*/
+ @UnsupportedAppUsage
public RemoteAnimationAdapter(IRemoteAnimationRunner runner, long duration,
long statusBarTransitionDelay) {
mRunner = runner;
diff --git a/core/java/android/view/RemoteAnimationDefinition.java b/core/java/android/view/RemoteAnimationDefinition.java
index d2240e1..beb1c1d 100644
--- a/core/java/android/view/RemoteAnimationDefinition.java
+++ b/core/java/android/view/RemoteAnimationDefinition.java
@@ -19,6 +19,7 @@
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.WindowConfiguration;
import android.app.WindowConfiguration.ActivityType;
import android.os.Parcel;
@@ -36,6 +37,7 @@
private final SparseArray<RemoteAnimationAdapterEntry> mTransitionAnimationMap;
+ @UnsupportedAppUsage
public RemoteAnimationDefinition() {
mTransitionAnimationMap = new SparseArray<>();
}
@@ -48,6 +50,7 @@
* parameter is involved in the transition.
* @param adapter The adapter that described how to run the remote animation.
*/
+ @UnsupportedAppUsage
public void addRemoteAnimation(@TransitionType int transition,
@ActivityType int activityTypeFilter, RemoteAnimationAdapter adapter) {
mTransitionAnimationMap.put(transition,
@@ -61,6 +64,7 @@
* @param transition The transition type. Must be one of WindowManager.TRANSIT_* values.
* @param adapter The adapter that described how to run the remote animation.
*/
+ @UnsupportedAppUsage
public void addRemoteAnimation(@TransitionType int transition, RemoteAnimationAdapter adapter) {
addRemoteAnimation(transition, ACTIVITY_TYPE_UNDEFINED, adapter);
}
diff --git a/core/java/android/view/RemoteAnimationTarget.java b/core/java/android/view/RemoteAnimationTarget.java
index 1c5c630..567b279 100644
--- a/core/java/android/view/RemoteAnimationTarget.java
+++ b/core/java/android/view/RemoteAnimationTarget.java
@@ -28,6 +28,7 @@
import static android.view.RemoteAnimationTargetProto.WINDOW_CONFIGURATION;
import android.annotation.IntDef;
+import android.annotation.UnsupportedAppUsage;
import android.app.WindowConfiguration;
import android.graphics.Point;
import android.graphics.Rect;
@@ -66,21 +67,25 @@
/**
* The {@link Mode} to describe whether this app is opening or closing.
*/
+ @UnsupportedAppUsage
public final @Mode int mode;
/**
* The id of the task this app belongs to.
*/
+ @UnsupportedAppUsage
public final int taskId;
/**
* The {@link SurfaceControl} object to actually control the transform of the app.
*/
+ @UnsupportedAppUsage
public final SurfaceControl leash;
/**
* Whether the app is translucent and may reveal apps behind.
*/
+ @UnsupportedAppUsage
public final boolean isTranslucent;
/**
@@ -89,11 +94,13 @@
* anything that extends beyond these bounds will not have any effect. This implies that any
* clip-rect animation should likely stop at these bounds.
*/
+ @UnsupportedAppUsage
public final Rect clipRect;
/**
* The insets of the main app window.
*/
+ @UnsupportedAppUsage
public final Rect contentInsets;
/**
@@ -101,6 +108,7 @@
* to preserve original z-layer order in the hierarchy tree assuming no "boosting" needs to
* happen.
*/
+ @UnsupportedAppUsage
public final int prefixOrderIndex;
/**
@@ -108,6 +116,7 @@
* is modified from the controlling app, any animation transform needs to be offset by this
* amount.
*/
+ @UnsupportedAppUsage
public final Point position;
/**
@@ -115,16 +124,19 @@
* of the leash is modified from the controlling app, it needs to take the source container
* bounds into account when calculating the crop.
*/
+ @UnsupportedAppUsage
public final Rect sourceContainerBounds;
/**
* The window configuration for the target.
*/
+ @UnsupportedAppUsage
public final WindowConfiguration windowConfiguration;
/**
* Whether the task is not presented in Recents UI.
*/
+ @UnsupportedAppUsage
public boolean isNotInRecents;
public RemoteAnimationTarget(int taskId, int mode, SurfaceControl leash, boolean isTranslucent,
diff --git a/core/java/android/view/RenderNode.java b/core/java/android/view/RenderNode.java
index e0df59f..fcea0c3 100644
--- a/core/java/android/view/RenderNode.java
+++ b/core/java/android/view/RenderNode.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Matrix;
import android.graphics.Outline;
import android.graphics.Paint;
@@ -172,6 +173,7 @@
*
* @return A new RenderNode.
*/
+ @UnsupportedAppUsage
public static RenderNode create(String name, @Nullable View owningView) {
return new RenderNode(name, owningView);
}
@@ -211,6 +213,7 @@
* @see #end(DisplayListCanvas)
* @see #isValid()
*/
+ @UnsupportedAppUsage
public DisplayListCanvas start(int width, int height) {
return DisplayListCanvas.obtain(this, width, height);
}
@@ -231,6 +234,7 @@
* @see #start(int, int)
* @see #isValid()
*/
+ @UnsupportedAppUsage
public void end(DisplayListCanvas canvas) {
long displayList = canvas.finishRecording();
nSetDisplayList(mNativeRenderNode, displayList);
@@ -242,6 +246,7 @@
* during destruction of hardware resources, to ensure that we do not hold onto
* obsolete resources after related resources are gone.
*/
+ @UnsupportedAppUsage
public void discardDisplayList() {
nSetDisplayList(mNativeRenderNode, 0);
}
@@ -252,6 +257,7 @@
*
* @return boolean true if the display list is able to be replayed, false otherwise.
*/
+ @UnsupportedAppUsage
public boolean isValid() {
return nIsValid(mNativeRenderNode);
}
@@ -298,6 +304,7 @@
*
* @param clipToBounds true if the display list should clip to its bounds
*/
+ @UnsupportedAppUsage
public boolean setClipToBounds(boolean clipToBounds) {
return nSetClipToBounds(mNativeRenderNode, clipToBounds);
}
@@ -309,6 +316,7 @@
* @param shouldProject true if the display list should be projected onto a
* containing volume.
*/
+ @UnsupportedAppUsage
public boolean setProjectBackwards(boolean shouldProject) {
return nSetProjectBackwards(mNativeRenderNode, shouldProject);
}
@@ -449,6 +457,7 @@
* @see android.view.View#hasOverlappingRendering()
* @see #hasOverlappingRendering()
*/
+ @UnsupportedAppUsage
public boolean setHasOverlappingRendering(boolean hasOverlappingRendering) {
return nSetHasOverlappingRendering(mNativeRenderNode, hasOverlappingRendering);
}
@@ -788,6 +797,7 @@
* @see View#setRight(int)
* @see View#setBottom(int)
*/
+ @UnsupportedAppUsage
public boolean setLeftTopRightBottom(int left, int top, int right, int bottom) {
return nSetLeftTopRightBottom(mNativeRenderNode, left, top, right, bottom);
}
@@ -800,6 +810,7 @@
*
* @see View#offsetLeftAndRight(int)
*/
+ @UnsupportedAppUsage
public boolean offsetLeftAndRight(int offset) {
return nOffsetLeftAndRight(mNativeRenderNode, offset);
}
@@ -820,6 +831,7 @@
* Outputs the display list to the log. This method exists for use by
* tools to output display lists for selected nodes to the log.
*/
+ @UnsupportedAppUsage
public void output() {
nOutput(mNativeRenderNode);
}
diff --git a/core/java/android/view/RenderNodeAnimator.java b/core/java/android/view/RenderNodeAnimator.java
index d26a2f6..e48bcfd 100644
--- a/core/java/android/view/RenderNodeAnimator.java
+++ b/core/java/android/view/RenderNodeAnimator.java
@@ -19,6 +19,7 @@
import android.animation.Animator;
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.CanvasProperty;
import android.graphics.Paint;
import android.util.SparseIntArray;
@@ -103,10 +104,12 @@
private long mStartDelay = 0;
private long mStartTime;
+ @UnsupportedAppUsage
public static int mapViewPropertyToRenderProperty(int viewProperty) {
return sViewPropertyAnimatorMap.get(viewProperty);
}
+ @UnsupportedAppUsage
public RenderNodeAnimator(int property, float finalValue) {
mRenderProperty = property;
mFinalValue = finalValue;
@@ -114,6 +117,7 @@
init(nCreateAnimator(property, finalValue));
}
+ @UnsupportedAppUsage
public RenderNodeAnimator(CanvasProperty<Float> property, float finalValue) {
init(nCreateCanvasPropertyFloatAnimator(
property.getNativeContainer(), finalValue));
@@ -128,6 +132,7 @@
* {@link #PAINT_STROKE_WIDTH}
* @param finalValue The target value for the property
*/
+ @UnsupportedAppUsage
public RenderNodeAnimator(CanvasProperty<Paint> property, int paintField, float finalValue) {
init(nCreateCanvasPropertyPaintAnimator(
property.getNativeContainer(), paintField, finalValue));
@@ -275,6 +280,7 @@
throw new UnsupportedOperationException();
}
+ @UnsupportedAppUsage
public void setTarget(View view) {
mViewTarget = view;
setTarget(mViewTarget.mRenderNode);
@@ -295,6 +301,7 @@
mTarget.addAnimator(this);
}
+ @UnsupportedAppUsage
public void setStartValue(float startValue) {
checkMutable();
nSetStartValue(mNativePtr.get(), startValue);
@@ -479,6 +486,7 @@
}
// Called by native
+ @UnsupportedAppUsage
private static void callOnFinished(RenderNodeAnimator animator) {
animator.onFinished();
}
diff --git a/core/java/android/view/ScaleGestureDetector.java b/core/java/android/view/ScaleGestureDetector.java
index 9787494..c189afe 100644
--- a/core/java/android/view/ScaleGestureDetector.java
+++ b/core/java/android/view/ScaleGestureDetector.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Resources;
import android.os.Build;
@@ -123,6 +124,7 @@
}
private final Context mContext;
+ @UnsupportedAppUsage
private final OnScaleGestureListener mListener;
private float mFocusX;
@@ -141,7 +143,9 @@
private long mCurrTime;
private long mPrevTime;
private boolean mInProgress;
+ @UnsupportedAppUsage
private int mSpanSlop;
+ @UnsupportedAppUsage
private int mMinSpan;
private final Handler mHandler;
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index df81a31..427f570 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -17,6 +17,7 @@
package android.view;
import android.annotation.IntDef;
+import android.annotation.UnsupportedAppUsage;
import android.content.res.CompatibilityInfo.Translator;
import android.graphics.Canvas;
import android.graphics.GraphicBuffer;
@@ -60,6 +61,7 @@
throws OutOfResourcesException;
private static native void nativeUnlockCanvasAndPost(long nativeObject, Canvas canvas);
+ @UnsupportedAppUsage
private static native void nativeRelease(long nativeObject);
private static native boolean nativeIsValid(long nativeObject);
private static native boolean nativeIsConsumerRunningBehind(long nativeObject);
@@ -102,9 +104,13 @@
private final CloseGuard mCloseGuard = CloseGuard.get();
// Guarded state.
+ @UnsupportedAppUsage
final Object mLock = new Object(); // protects the native state
+ @UnsupportedAppUsage
private String mName;
+ @UnsupportedAppUsage
long mNativeObject; // package scope only for SurfaceControl access
+ @UnsupportedAppUsage
private long mLockedObject;
private int mGenerationId; // incremented each time mNativeObject changes
private final Canvas mCanvas = new CompatibleCanvas();
@@ -172,6 +178,7 @@
* Create an empty surface, which will later be filled in by readFromParcel().
* @hide
*/
+ @UnsupportedAppUsage
public Surface() {
}
@@ -203,6 +210,7 @@
}
/* called from android_view_Surface_createFromIGraphicBufferProducer() */
+ @UnsupportedAppUsage
private Surface(long nativeObject) {
synchronized (mLock) {
setNativeObjectLocked(nativeObject);
@@ -245,6 +253,7 @@
* called from the process that created the service.
* @hide
*/
+ @UnsupportedAppUsage
public void destroy() {
release();
}
@@ -293,6 +302,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public long getNextFrameNumber() {
synchronized (mLock) {
checkNotReleasedLocked();
@@ -485,6 +495,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void copyFrom(SurfaceControl other) {
if (other == null) {
throw new IllegalArgumentException("other must not be null");
@@ -544,6 +555,7 @@
* @deprecated
*/
@Deprecated
+ @UnsupportedAppUsage
public void transferFrom(Surface other) {
if (other == null) {
throw new IllegalArgumentException("other must not be null");
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index ed8b005..d9c8f30 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -28,6 +28,7 @@
import static android.view.SurfaceControlProto.NAME;
import android.annotation.Size;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Bitmap;
import android.graphics.GraphicBuffer;
import android.graphics.Matrix;
@@ -179,6 +180,7 @@
/**
* Surface creation flag: Surface is created hidden
*/
+ @UnsupportedAppUsage
public static final int HIDDEN = 0x00000004;
/**
@@ -720,6 +722,7 @@
*/
/** start a transaction */
+ @UnsupportedAppUsage
public static void openTransaction() {
synchronized (SurfaceControl.class) {
if (sGlobalTransaction == null) {
@@ -756,6 +759,7 @@
}
/** end a transaction */
+ @UnsupportedAppUsage
public static void closeTransaction() {
closeTransaction(false);
}
@@ -811,6 +815,7 @@
}
}
+ @UnsupportedAppUsage
public void setLayer(int zorder) {
checkNotReleased();
synchronized(SurfaceControl.class) {
@@ -825,6 +830,7 @@
}
}
+ @UnsupportedAppUsage
public void setPosition(float x, float y) {
checkNotReleased();
synchronized(SurfaceControl.class) {
@@ -846,6 +852,7 @@
}
}
+ @UnsupportedAppUsage
public void hide() {
checkNotReleased();
synchronized(SurfaceControl.class) {
@@ -853,6 +860,7 @@
}
}
+ @UnsupportedAppUsage
public void show() {
checkNotReleased();
synchronized(SurfaceControl.class) {
@@ -986,16 +994,26 @@
* Describes the properties of a physical display known to surface flinger.
*/
public static final class PhysicalDisplayInfo {
+ @UnsupportedAppUsage
public int width;
+ @UnsupportedAppUsage
public int height;
+ @UnsupportedAppUsage
public float refreshRate;
+ @UnsupportedAppUsage
public float density;
+ @UnsupportedAppUsage
public float xDpi;
+ @UnsupportedAppUsage
public float yDpi;
+ @UnsupportedAppUsage
public boolean secure;
+ @UnsupportedAppUsage
public long appVsyncOffsetNanos;
+ @UnsupportedAppUsage
public long presentationDeadlineNanos;
+ @UnsupportedAppUsage
public PhysicalDisplayInfo() {
}
@@ -1055,6 +1073,7 @@
nativeSetDisplayPowerMode(displayToken, mode);
}
+ @UnsupportedAppUsage
public static SurfaceControl.PhysicalDisplayInfo[] getDisplayConfigs(IBinder displayToken) {
if (displayToken == null) {
throw new IllegalArgumentException("displayToken must not be null");
@@ -1097,6 +1116,7 @@
return nativeSetActiveColorMode(displayToken, colorMode);
}
+ @UnsupportedAppUsage
public static void setDisplayProjection(IBinder displayToken,
int orientation, Rect layerStackRect, Rect displayRect) {
synchronized (SurfaceControl.class) {
@@ -1105,12 +1125,14 @@
}
}
+ @UnsupportedAppUsage
public static void setDisplayLayerStack(IBinder displayToken, int layerStack) {
synchronized (SurfaceControl.class) {
sGlobalTransaction.setDisplayLayerStack(displayToken, layerStack);
}
}
+ @UnsupportedAppUsage
public static void setDisplaySurface(IBinder displayToken, Surface surface) {
synchronized (SurfaceControl.class) {
sGlobalTransaction.setDisplaySurface(displayToken, surface);
@@ -1130,6 +1152,7 @@
return nativeGetHdrCapabilities(displayToken);
}
+ @UnsupportedAppUsage
public static IBinder createDisplay(String name, boolean secure) {
if (name == null) {
throw new IllegalArgumentException("name must not be null");
@@ -1137,6 +1160,7 @@
return nativeCreateDisplay(name, secure);
}
+ @UnsupportedAppUsage
public static void destroyDisplay(IBinder displayToken) {
if (displayToken == null) {
throw new IllegalArgumentException("displayToken must not be null");
@@ -1144,6 +1168,7 @@
nativeDestroyDisplay(displayToken);
}
+ @UnsupportedAppUsage
public static IBinder getBuiltInDisplay(int builtInDisplayId) {
return nativeGetBuiltInDisplay(builtInDisplayId);
}
@@ -1229,6 +1254,7 @@
* if an error occurs. Make sure to call Bitmap.recycle() as soon as
* possible, once its content is not needed anymore.
*/
+ @UnsupportedAppUsage
public static Bitmap screenshot(Rect sourceCrop, int width, int height,
int minLayer, int maxLayer, boolean useIdentityTransform,
int rotation) {
@@ -1272,6 +1298,7 @@
* if an error occurs. Make sure to call Bitmap.recycle() as soon as
* possible, once its content is not needed anymore.
*/
+ @UnsupportedAppUsage
public static Bitmap screenshot(Rect sourceCrop, int width, int height, int rotation) {
// TODO: should take the display as a parameter
IBinder displayToken = SurfaceControl.getBuiltInDisplay(
@@ -1285,6 +1312,7 @@
false, rotation);
}
+ @UnsupportedAppUsage
private static void screenshot(IBinder display, Surface consumer, Rect sourceCrop,
int width, int height, int minLayer, int maxLayer, boolean allLayers,
boolean useIdentityTransform) {
@@ -1334,6 +1362,7 @@
private final ArrayMap<SurfaceControl, Point> mResizedSurfaces = new ArrayMap<>();
Runnable mFreeNativeResources;
+ @UnsupportedAppUsage
public Transaction() {
mNativeObject = nativeCreateTransaction();
mFreeNativeResources
@@ -1344,6 +1373,7 @@
* Apply the transaction, clearing it's state, and making it usable
* as a new transaction.
*/
+ @UnsupportedAppUsage
public void apply() {
apply(false);
}
@@ -1378,24 +1408,28 @@
mResizedSurfaces.clear();
}
+ @UnsupportedAppUsage
public Transaction show(SurfaceControl sc) {
sc.checkNotReleased();
nativeSetFlags(mNativeObject, sc.mNativeObject, 0, SURFACE_HIDDEN);
return this;
}
+ @UnsupportedAppUsage
public Transaction hide(SurfaceControl sc) {
sc.checkNotReleased();
nativeSetFlags(mNativeObject, sc.mNativeObject, SURFACE_HIDDEN, SURFACE_HIDDEN);
return this;
}
+ @UnsupportedAppUsage
public Transaction setPosition(SurfaceControl sc, float x, float y) {
sc.checkNotReleased();
nativeSetPosition(mNativeObject, sc.mNativeObject, x, y);
return this;
}
+ @UnsupportedAppUsage
public Transaction setSize(SurfaceControl sc, int w, int h) {
sc.checkNotReleased();
mResizedSurfaces.put(sc, new Point(w, h));
@@ -1403,6 +1437,7 @@
return this;
}
+ @UnsupportedAppUsage
public Transaction setLayer(SurfaceControl sc, int z) {
sc.checkNotReleased();
nativeSetLayer(mNativeObject, sc.mNativeObject, z);
@@ -1423,12 +1458,14 @@
return this;
}
+ @UnsupportedAppUsage
public Transaction setAlpha(SurfaceControl sc, float alpha) {
sc.checkNotReleased();
nativeSetAlpha(mNativeObject, sc.mNativeObject, alpha);
return this;
}
+ @UnsupportedAppUsage
public Transaction setMatrix(SurfaceControl sc,
float dsdx, float dtdx, float dtdy, float dsdy) {
sc.checkNotReleased();
@@ -1437,6 +1474,7 @@
return this;
}
+ @UnsupportedAppUsage
public Transaction setMatrix(SurfaceControl sc, Matrix matrix, float[] float9) {
matrix.getValues(float9);
setMatrix(sc, float9[MSCALE_X], float9[MSKEW_Y],
@@ -1445,6 +1483,7 @@
return this;
}
+ @UnsupportedAppUsage
public Transaction setWindowCrop(SurfaceControl sc, Rect crop) {
sc.checkNotReleased();
if (crop != null) {
@@ -1457,6 +1496,7 @@
return this;
}
+ @UnsupportedAppUsage
public Transaction setFinalCrop(SurfaceControl sc, Rect crop) {
sc.checkNotReleased();
if (crop != null) {
@@ -1475,6 +1515,7 @@
return this;
}
+ @UnsupportedAppUsage
public Transaction deferTransactionUntil(SurfaceControl sc, IBinder handle,
long frameNumber) {
if (frameNumber < 0) {
@@ -1485,6 +1526,7 @@
return this;
}
+ @UnsupportedAppUsage
public Transaction deferTransactionUntilSurface(SurfaceControl sc, Surface barrierSurface,
long frameNumber) {
if (frameNumber < 0) {
@@ -1527,6 +1569,7 @@
* Sets a color for the Surface.
* @param color A float array with three values to represent r, g, b in range [0..1]
*/
+ @UnsupportedAppUsage
public Transaction setColor(SurfaceControl sc, @Size(3) float[] color) {
sc.checkNotReleased();
nativeSetColor(mNativeObject, sc.mNativeObject, color);
diff --git a/core/java/android/view/SurfaceSession.java b/core/java/android/view/SurfaceSession.java
index ee08bf7..a4fa12a 100644
--- a/core/java/android/view/SurfaceSession.java
+++ b/core/java/android/view/SurfaceSession.java
@@ -16,6 +16,8 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
+
/**
* An instance of this class represents a connection to the surface
* flinger, from which you can create one or more Surface instances that will
@@ -24,6 +26,7 @@
*/
public final class SurfaceSession {
// Note: This field is accessed by native code.
+ @UnsupportedAppUsage
private long mNativeClient; // SurfaceComposerClient*
private static native long nativeCreate();
@@ -32,6 +35,7 @@
private static native void nativeKill(long ptr);
/** Create a new connection with the surface flinger. */
+ @UnsupportedAppUsage
public SurfaceSession() {
mNativeClient = nativeCreate();
}
@@ -62,6 +66,7 @@
* Unlike destroy(), after this call any surfaces that were created
* from the session will no longer work.
*/
+ @UnsupportedAppUsage
public void kill() {
nativeKill(mNativeClient);
}
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 44c1780..6319a8f 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -20,6 +20,7 @@
import static android.view.WindowManagerPolicyConstants.APPLICATION_MEDIA_SUBLAYER;
import static android.view.WindowManagerPolicyConstants.APPLICATION_PANEL_SUBLAYER;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.CompatibilityInfo.Translator;
import android.content.res.Configuration;
@@ -98,13 +99,17 @@
private static final String TAG = "SurfaceView";
private static final boolean DEBUG = false;
+ @UnsupportedAppUsage
final ArrayList<SurfaceHolder.Callback> mCallbacks
= new ArrayList<SurfaceHolder.Callback>();
final int[] mLocation = new int[2];
+ @UnsupportedAppUsage
final ReentrantLock mSurfaceLock = new ReentrantLock();
+ @UnsupportedAppUsage
final Surface mSurface = new Surface(); // Current surface in use
+ @UnsupportedAppUsage
boolean mDrawingStopped = true;
// We use this to track if the application has produced a frame
// in to the Surface. Up until that point, we should be careful not to punch
@@ -123,6 +128,7 @@
int mSubLayer = APPLICATION_MEDIA_SUBLAYER;
+ @UnsupportedAppUsage
boolean mIsCreating = false;
private volatile boolean mRtHandlingPositionUpdates = false;
@@ -134,6 +140,7 @@
}
};
+ @UnsupportedAppUsage
private final ViewTreeObserver.OnPreDrawListener mDrawListener =
new ViewTreeObserver.OnPreDrawListener() {
@Override
@@ -151,15 +158,20 @@
boolean mViewVisibility = false;
boolean mWindowStopped = false;
+ @UnsupportedAppUsage
int mRequestedWidth = -1;
+ @UnsupportedAppUsage
int mRequestedHeight = -1;
/* Set SurfaceView's format to 565 by default to maintain backward
* compatibility with applications assuming this format.
*/
+ @UnsupportedAppUsage
int mRequestedFormat = PixelFormat.RGB_565;
+ @UnsupportedAppUsage
boolean mHaveFrame = false;
boolean mSurfaceCreated = false;
+ @UnsupportedAppUsage
long mLastLockTime = 0;
boolean mVisible = false;
@@ -167,7 +179,9 @@
int mWindowSpaceTop = -1;
int mSurfaceWidth = -1;
int mSurfaceHeight = -1;
+ @UnsupportedAppUsage
int mFormat = -1;
+ @UnsupportedAppUsage
final Rect mSurfaceFrame = new Rect();
int mLastSurfaceWidth = -1, mLastSurfaceHeight = -1;
private Translator mTranslator;
@@ -340,6 +354,7 @@
/** @hide */
@Override
+ @UnsupportedAppUsage
protected boolean setFrame(int left, int top, int right, int bottom) {
boolean result = super.setFrame(left, top, right, bottom);
updateSurface();
@@ -814,6 +829,7 @@
* Called by native by a Rendering Worker thread to update the window position
* @hide
*/
+ @UnsupportedAppUsage
public final void updateSurfacePosition_renderWorker(long frameNumber,
int left, int top, int right, int bottom) {
if (mSurfaceControl == null) {
@@ -854,6 +870,7 @@
* draw tree. UI thread is blocked at this point.
* @hide
*/
+ @UnsupportedAppUsage
public final void surfacePositionLost_uiRtSync(long frameNumber) {
if (DEBUG) {
Log.d(TAG, String.format("%d windowPositionLost, frameNr = %d",
@@ -909,6 +926,7 @@
* @return true if the surface has dimensions that are fixed in size
* @hide
*/
+ @UnsupportedAppUsage
public boolean isFixedSize() {
return (mRequestedWidth != -1 || mRequestedHeight != -1);
}
@@ -928,6 +946,7 @@
mSurfaceControl.setBackgroundColor(bgColor);
}
+ @UnsupportedAppUsage
private final SurfaceHolder mSurfaceHolder = new SurfaceHolder() {
private static final String LOG_TAG = "SurfaceHolder";
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index 371794045..997e48fe 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -17,6 +17,7 @@
package android.view;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
@@ -106,11 +107,14 @@
public class TextureView extends View {
private static final String LOG_TAG = "TextureView";
+ @UnsupportedAppUsage
private TextureLayer mLayer;
+ @UnsupportedAppUsage
private SurfaceTexture mSurface;
private SurfaceTextureListener mListener;
private boolean mHadSurface;
+ @UnsupportedAppUsage
private boolean mOpaque = true;
private final Matrix mMatrix = new Matrix();
@@ -118,6 +122,7 @@
private final Object[] mLock = new Object[0];
private boolean mUpdateLayer;
+ @UnsupportedAppUsage
private boolean mUpdateSurface;
private Canvas mCanvas;
@@ -125,6 +130,7 @@
private final Object[] mNativeWindowLock = new Object[0];
// Set by native code, do not write!
+ @UnsupportedAppUsage
private long mNativeWindow;
/**
@@ -217,6 +223,7 @@
/** @hide */
@Override
+ @UnsupportedAppUsage
protected void onDetachedFromWindowInternal() {
destroyHardwareLayer();
releaseSurfaceTexture();
@@ -227,11 +234,13 @@
* @hide
*/
@Override
+ @UnsupportedAppUsage
protected void destroyHardwareResources() {
super.destroyHardwareResources();
destroyHardwareLayer();
}
+ @UnsupportedAppUsage
private void destroyHardwareLayer() {
if (mLayer != null) {
mLayer.detachSurfaceTexture();
@@ -786,6 +795,7 @@
mListener = listener;
}
+ @UnsupportedAppUsage
private final SurfaceTexture.OnFrameAvailableListener mUpdateListener =
new SurfaceTexture.OnFrameAvailableListener() {
@Override
@@ -839,7 +849,9 @@
public void onSurfaceTextureUpdated(SurfaceTexture surface);
}
+ @UnsupportedAppUsage
private native void nCreateNativeWindow(SurfaceTexture surface);
+ @UnsupportedAppUsage
private native void nDestroyNativeWindow();
private static native boolean nLockCanvas(long nativeWindow, Canvas canvas, Rect dirty);
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 2930699..6737839 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -18,6 +18,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.content.Context;
import android.content.res.TypedArray;
@@ -276,6 +277,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static void setupDiskCache(File cacheDir) {
ThreadedRenderer.setupShadersDiskCache(
new File(cacheDir, CACHE_PATH_SHADERS).getAbsolutePath(),
@@ -719,6 +721,7 @@
* @param placeFront If true, the render node will be placed in front of the content node,
* otherwise behind the content node.
*/
+ @UnsupportedAppUsage
public void addRenderNode(RenderNode node, boolean placeFront) {
nAddRenderNode(mNativeProxy, node.mNativeRenderNode, placeFront);
}
@@ -727,6 +730,7 @@
* Only especially added render nodes can be removed.
* @param node The node which was added via addRenderNode which should get removed again.
*/
+ @UnsupportedAppUsage
public void removeRenderNode(RenderNode node) {
nRemoveRenderNode(mNativeProxy, node.mNativeRenderNode);
}
@@ -736,6 +740,7 @@
* nodes will get drawn and the content remains untouched.
* @param node The node to be drawn.
*/
+ @UnsupportedAppUsage
public void drawRenderNode(RenderNode node) {
nDrawRenderNode(mNativeProxy, node.mNativeRenderNode);
}
@@ -749,6 +754,7 @@
* @param right The right side of the protected bounds.
* @param bottom The bottom side of the protected bounds.
*/
+ @UnsupportedAppUsage
public void setContentDrawBounds(int left, int top, int right, int bottom) {
nSetContentDrawBounds(mNativeProxy, left, top, right, bottom);
}
@@ -929,6 +935,7 @@
* RenderNode. Note that the RenderNode should be created as a root node (so x/y of 0,0), and
* not the RenderNode from a View.
**/
+ @UnsupportedAppUsage
public static Bitmap createHardwareBitmap(RenderNode node, int width, int height) {
return nCreateHardwareBitmap(node.mNativeRenderNode, width, height);
}
diff --git a/core/java/android/view/TouchDelegate.java b/core/java/android/view/TouchDelegate.java
index d6c43e8..b361ab4 100644
--- a/core/java/android/view/TouchDelegate.java
+++ b/core/java/android/view/TouchDelegate.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Rect;
/**
@@ -51,6 +52,7 @@
/**
* True if the delegate had been targeted on a down event (intersected mBounds).
*/
+ @UnsupportedAppUsage
private boolean mDelegateTargeted;
/**
diff --git a/core/java/android/view/VelocityTracker.java b/core/java/android/view/VelocityTracker.java
index 22b5cca..7154f2b 100644
--- a/core/java/android/view/VelocityTracker.java
+++ b/core/java/android/view/VelocityTracker.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.util.Pools.SynchronizedPool;
/**
@@ -68,6 +69,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static VelocityTracker obtain(String strategy) {
if (strategy == null) {
return obtain();
@@ -235,21 +237,25 @@
/**
* Polynomial coefficients describing motion in X.
*/
+ @UnsupportedAppUsage
public final float[] xCoeff = new float[MAX_DEGREE + 1];
/**
* Polynomial coefficients describing motion in Y.
*/
+ @UnsupportedAppUsage
public final float[] yCoeff = new float[MAX_DEGREE + 1];
/**
* Polynomial degree, or zero if only position information is available.
*/
+ @UnsupportedAppUsage
public int degree;
/**
* Confidence (coefficient of determination), between 0 (no fit) and 1 (perfect fit).
*/
+ @UnsupportedAppUsage
public float confidence;
/**
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index f3e2edd..9bc53ed 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -35,6 +35,7 @@
import android.annotation.Size;
import android.annotation.TestApi;
import android.annotation.UiThread;
+import android.annotation.UnsupportedAppUsage;
import android.content.ClipData;
import android.content.Context;
import android.content.ContextWrapper;
@@ -777,6 +778,7 @@
@UiThread
public class View implements Drawable.Callback, KeyEvent.Callback,
AccessibilityEventSource {
+ @UnsupportedAppUsage
private static final boolean DBG = false;
/** @hide */
@@ -799,6 +801,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static final String DEBUG_LAYOUT_PROPERTY = "debug.layout";
/**
@@ -2157,6 +2160,7 @@
/**
* Map used to store views' tags.
*/
+ @UnsupportedAppUsage
private SparseArray<Object> mKeyedTags;
/**
@@ -2175,6 +2179,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "measurement")
+ @UnsupportedAppUsage
int mMeasuredWidth;
/**
@@ -2182,6 +2187,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "measurement")
+ @UnsupportedAppUsage
int mMeasuredHeight;
/**
@@ -2193,6 +2199,7 @@
*
* {@hide}
*/
+ @UnsupportedAppUsage
boolean mRecreateDisplayList = false;
/**
@@ -2219,6 +2226,7 @@
private int mAutofillViewId = NO_ID;
// ID for accessibility purposes. This ID must be unique for every window
+ @UnsupportedAppUsage
private int mAccessibilityViewId = NO_ID;
private int mAccessibilityCursorPosition = ACCESSIBILITY_CURSOR_POSITION_UNDEFINED;
@@ -2230,6 +2238,7 @@
* @see #setTag(Object)
* @see #getTag()
*/
+ @UnsupportedAppUsage
protected Object mTag = null;
// for mPrivateFlags:
@@ -3522,6 +3531,7 @@
* Flag to make the status bar not expandable. Unless you also
* set {@link #STATUS_BAR_DISABLE_NOTIFICATION_ICONS}, new notifications will continue to show.
*/
+ @UnsupportedAppUsage
public static final int STATUS_BAR_DISABLE_EXPAND = 0x00010000;
/**
@@ -3576,6 +3586,7 @@
* Flag to hide only the home button. Don't use this
* unless you're a special part of the system UI (i.e., setup wizard, keyguard).
*/
+ @UnsupportedAppUsage
public static final int STATUS_BAR_DISABLE_HOME = 0x00200000;
/**
@@ -3587,6 +3598,7 @@
* Flag to hide only the back button. Don't use this
* unless you're a special part of the system UI (i.e., setup wizard, keyguard).
*/
+ @UnsupportedAppUsage
public static final int STATUS_BAR_DISABLE_BACK = 0x00400000;
/**
@@ -3609,6 +3621,7 @@
* Flag to hide only the recent apps button. Don't use this
* unless you're a special part of the system UI (i.e., setup wizard, keyguard).
*/
+ @UnsupportedAppUsage
public static final int STATUS_BAR_DISABLE_RECENT = 0x01000000;
/**
@@ -3640,6 +3653,7 @@
*
* Flag to specify that the navigation bar is displayed in transient mode.
*/
+ @UnsupportedAppUsage
public static final int NAVIGATION_BAR_TRANSIENT = 0x08000000;
/**
@@ -3813,11 +3827,13 @@
*
* @see #getParent()
*/
+ @UnsupportedAppUsage
protected ViewParent mParent;
/**
* {@hide}
*/
+ @UnsupportedAppUsage
AttachInfo mAttachInfo;
/**
@@ -3836,8 +3852,11 @@
}, formatToHexString = true)
/* @hide */
+ @UnsupportedAppUsage
public int mPrivateFlags;
+ @UnsupportedAppUsage
int mPrivateFlags2;
+ @UnsupportedAppUsage
int mPrivateFlags3;
/**
@@ -3949,6 +3968,7 @@
* laid out.
* {@hide}
*/
+ @UnsupportedAppUsage
protected ViewGroup.LayoutParams mLayoutParams;
/**
@@ -3956,6 +3976,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(formatToHexString = true)
+ @UnsupportedAppUsage
int mViewFlags;
static class TransformationInfo {
@@ -3993,6 +4014,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public TransformationInfo mTransformationInfo;
/**
@@ -4009,6 +4031,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
protected int mLeft;
/**
* The distance in pixels from the left edge of this view's parent
@@ -4016,6 +4039,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
protected int mRight;
/**
* The distance in pixels from the top edge of this view's parent
@@ -4023,6 +4047,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
protected int mTop;
/**
* The distance in pixels from the top edge of this view's parent
@@ -4030,6 +4055,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
protected int mBottom;
/**
@@ -4038,6 +4064,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "scrolling")
+ @UnsupportedAppUsage
protected int mScrollX;
/**
* The offset, in pixels, by which the content of this view is scrolled
@@ -4045,6 +4072,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "scrolling")
+ @UnsupportedAppUsage
protected int mScrollY;
/**
@@ -4053,6 +4081,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "padding")
+ @UnsupportedAppUsage
protected int mPaddingLeft = 0;
/**
* The right padding in pixels, that is the distance in pixels between the
@@ -4060,6 +4089,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "padding")
+ @UnsupportedAppUsage
protected int mPaddingRight = 0;
/**
* The top padding in pixels, that is the distance in pixels between the
@@ -4067,6 +4097,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "padding")
+ @UnsupportedAppUsage
protected int mPaddingTop;
/**
* The bottom padding in pixels, that is the distance in pixels between the
@@ -4074,6 +4105,7 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "padding")
+ @UnsupportedAppUsage
protected int mPaddingBottom;
/**
@@ -4199,6 +4231,7 @@
private LongSparseLongArray mMeasureCache;
@ViewDebug.ExportedProperty(deepExport = true, prefix = "bg_")
+ @UnsupportedAppUsage
private Drawable mBackground;
private TintInfo mBackgroundTint;
@@ -4216,6 +4249,7 @@
*/
private RenderNode mBackgroundRenderNode;
+ @UnsupportedAppUsage
private int mBackgroundResource;
private boolean mBackgroundSizeChanged;
@@ -4266,6 +4300,7 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected OnFocusChangeListener mOnFocusChangeListener;
/**
@@ -4285,6 +4320,7 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
public OnClickListener mOnClickListener;
/**
@@ -4292,6 +4328,7 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected OnLongClickListener mOnLongClickListener;
/**
@@ -4306,16 +4343,22 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected OnCreateContextMenuListener mOnCreateContextMenuListener;
+ @UnsupportedAppUsage
private OnKeyListener mOnKeyListener;
+ @UnsupportedAppUsage
private OnTouchListener mOnTouchListener;
+ @UnsupportedAppUsage
private OnHoverListener mOnHoverListener;
+ @UnsupportedAppUsage
private OnGenericMotionListener mOnGenericMotionListener;
+ @UnsupportedAppUsage
private OnDragListener mOnDragListener;
private OnSystemUiVisibilityChangeListener mOnSystemUiVisibilityChangeListener;
@@ -4327,6 +4370,7 @@
private ArrayList<OnUnhandledKeyEventListener> mUnhandledKeyListeners;
}
+ @UnsupportedAppUsage
ListenerInfo mListenerInfo;
private static class TooltipInfo {
@@ -4405,10 +4449,13 @@
* {@hide}
*/
@ViewDebug.ExportedProperty(deepExport = true)
+ @UnsupportedAppUsage
protected Context mContext;
+ @UnsupportedAppUsage
private final Resources mResources;
+ @UnsupportedAppUsage
private ScrollabilityCache mScrollCache;
private int[] mDrawableState = null;
@@ -4464,6 +4511,7 @@
boolean mDefaultFocusHighlightEnabled = true;
private CheckForLongPress mPendingCheckForLongPress;
+ @UnsupportedAppUsage
private CheckForTap mPendingCheckForTap = null;
private PerformClick mPerformClick;
private SendViewScrolledAccessibilityEvent mSendViewScrolledAccessibilityEvent;
@@ -4476,6 +4524,7 @@
* a long press could be performed before the tap is checked, in which case the tap's action
* should not be invoked.
*/
+ @UnsupportedAppUsage
private boolean mHasPerformedLongPress;
/**
@@ -4497,6 +4546,7 @@
* of this view to at least this amount.
*/
@ViewDebug.ExportedProperty(category = "measurement")
+ @UnsupportedAppUsage
private int mMinHeight;
/**
@@ -4504,6 +4554,7 @@
* of this view to at least this amount.
*/
@ViewDebug.ExportedProperty(category = "measurement")
+ @UnsupportedAppUsage
private int mMinWidth;
/**
@@ -4531,6 +4582,7 @@
/**
* Object that handles automatic animation of view properties.
*/
+ @UnsupportedAppUsage
private ViewPropertyAnimator mAnimator = null;
/**
@@ -4599,6 +4651,7 @@
/**
* Position of the vertical scroll bar.
*/
+ @UnsupportedAppUsage
private int mVerticalScrollbarPosition;
/**
@@ -4692,8 +4745,11 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean mCachingFailed;
+ @UnsupportedAppUsage
private Bitmap mDrawingCache;
+ @UnsupportedAppUsage
private Bitmap mUnscaledDrawingCache;
/**
@@ -4703,6 +4759,7 @@
* of the View content. Its DisplayList content is cleared on temporary detach and reset on
* cleanup.
*/
+ @UnsupportedAppUsage
final RenderNode mRenderNode;
/**
@@ -4714,6 +4771,7 @@
/**
* Delegate for injecting accessibility functionality.
*/
+ @UnsupportedAppUsage
AccessibilityDelegate mAccessibilityDelegate;
/**
@@ -4775,6 +4833,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
String mStartActivityRequestWho;
@Nullable
@@ -5670,6 +5729,7 @@
/**
* Non-public constructor for use in testing
*/
+ @UnsupportedAppUsage
View() {
mResources = null;
mRenderNode = RenderNode.create(getClass().getName(), this);
@@ -5993,6 +6053,7 @@
* @param a the styled attributes set to initialize the scrollbars from
* @hide
*/
+ @UnsupportedAppUsage
protected void initializeScrollbarsInternal(TypedArray a) {
initScrollCache();
@@ -6085,6 +6146,7 @@
}
}
+ @UnsupportedAppUsage
private ScrollabilityCache getScrollCache() {
initScrollCache();
return mScrollCache;
@@ -6140,6 +6202,7 @@
return false;
}
+ @UnsupportedAppUsage
boolean isOnScrollbarThumb(float x, float y) {
return isOnVerticalScrollbarThumb(x, y) || isOnHorizontalScrollbarThumb(x, y);
}
@@ -6199,6 +6262,7 @@
return false;
}
+ @UnsupportedAppUsage
boolean isDraggingScrollBar() {
return mScrollCache != null
&& mScrollCache.mScrollBarDraggingState != ScrollabilityCache.NOT_DRAGGING;
@@ -6287,6 +6351,7 @@
>>> SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
}
+ @UnsupportedAppUsage
ListenerInfo getListenerInfo() {
if (mListenerInfo != null) {
return mListenerInfo;
@@ -6811,6 +6876,7 @@
* @param requestCode The request code to use.
* @hide
*/
+ @UnsupportedAppUsage
public void startActivityForResult(Intent intent, int requestCode) {
mStartActivityRequestWho = "@android:view:" + System.identityHashCode(this);
getContext().startActivityForResult(mStartActivityRequestWho, intent, requestCode, null);
@@ -7594,6 +7660,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void onInitializeAccessibilityEventInternal(AccessibilityEvent event) {
event.setSource(this);
event.setClassName(getAccessibilityClassName());
@@ -7709,6 +7776,7 @@
* @param outRect The output location
* @hide
*/
+ @UnsupportedAppUsage
public void getBoundsOnScreen(Rect outRect) {
getBoundsOnScreen(outRect, false);
}
@@ -7720,6 +7788,7 @@
* @param clipToParent Whether to clip child bounds to the parent ones.
* @hide
*/
+ @UnsupportedAppUsage
public void getBoundsOnScreen(Rect outRect, boolean clipToParent) {
if (mAttachInfo == null) {
return;
@@ -8747,14 +8816,10 @@
info.setContentDescription(getContentDescription());
info.setEnabled(isEnabled());
- info.setClickable(isClickable());
- info.setFocusable(isFocusable());
info.setScreenReaderFocusable(isScreenReaderFocusable());
info.setFocused(isFocused());
info.setAccessibilityFocused(isAccessibilityFocused());
info.setSelected(isSelected());
- info.setLongClickable(isLongClickable());
- info.setContextClickable(isContextClickable());
info.setLiveRegion(getAccessibilityLiveRegion());
if ((mTooltipInfo != null) && (mTooltipInfo.mTooltipText != null)) {
info.setTooltipText(mTooltipInfo.mTooltipText);
@@ -8947,6 +9012,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isVisibleToUser() {
return isVisibleToUser(null);
}
@@ -8968,6 +9034,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
protected boolean isVisibleToUser(Rect boundInView) {
if (mAttachInfo != null) {
// Attached to invisible window means this view is not visible.
@@ -9075,6 +9142,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getAccessibilityViewId() {
if (mAccessibilityViewId == NO_ID) {
mAccessibilityViewId = sNextAccessibilityViewId++;
@@ -9294,6 +9362,7 @@
* @hide pending API council approval
*/
@CallSuper
+ @UnsupportedAppUsage
protected void onFocusLost() {
resetPressedState();
}
@@ -9819,6 +9888,7 @@
* @hide
* @param location an array of two integers in which to hold the coordinates
*/
+ @UnsupportedAppUsage
public void getLocationInSurface(@Size(2) int[] location) {
getLocationInWindow(location);
if (mAttachInfo != null && mAttachInfo.mViewRootImpl != null) {
@@ -9852,6 +9922,7 @@
* @return
*/
@Deprecated
+ @UnsupportedAppUsage
protected boolean computeFitSystemWindows(Rect inoutInsets, Rect outLocalInsets) {
WindowInsets innerInsets = computeSystemWindowInsets(new WindowInsets(inoutInsets),
outLocalInsets);
@@ -9927,6 +9998,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public boolean fitsSystemWindows() {
return getFitsSystemWindows();
}
@@ -9953,6 +10025,7 @@
* For use by PhoneWindow to make its own system window fitting optional.
* @hide
*/
+ @UnsupportedAppUsage
public void makeOptionalFitsSystemWindows() {
setFlags(OPTIONAL_FITS_SYSTEM_WINDOWS, OPTIONAL_FITS_SYSTEM_WINDOWS);
}
@@ -10297,6 +10370,7 @@
* @hide
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
public boolean isLayoutRtl() {
return (getLayoutDirection() == LAYOUT_DIRECTION_RTL);
}
@@ -10627,6 +10701,7 @@
* @see #onProvideVirtualStructure
* @attr ref android.R.styleable#View_assistBlocked
*/
+ @UnsupportedAppUsage
public void setAssistBlocked(boolean enabled) {
if (enabled) {
mPrivateFlags3 |= PFLAG3_ASSIST_BLOCKED;
@@ -11316,6 +11391,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean requestAccessibilityFocus() {
AccessibilityManager manager = AccessibilityManager.getInstance(mContext);
if (!manager.isEnabled() || !manager.isTouchExplorationEnabled()) {
@@ -11345,6 +11421,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void clearAccessibilityFocus() {
clearAccessibilityFocusNoCallbacks(0);
@@ -11859,6 +11936,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean includeForAccessibility() {
if (mAttachInfo != null) {
return (mAttachInfo.mAccessibilityFetchFlags
@@ -11905,6 +11983,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void notifyViewAccessibilityStateChangedIfNeeded(int changeType) {
if (!AccessibilityManager.getInstance(mContext).isEnabled() || mAttachInfo == null) {
return;
@@ -11964,6 +12043,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void notifySubtreeAccessibilityStateChangedIfNeeded() {
if (!AccessibilityManager.getInstance(mContext).isEnabled() || mAttachInfo == null) {
return;
@@ -12067,6 +12147,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean performAccessibilityActionInternal(int action, Bundle arguments) {
if (isNestedScrollingEnabled()
&& (action == AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD
@@ -12244,6 +12325,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public CharSequence getIterableTextForAccessibility() {
return getContentDescription();
}
@@ -12307,6 +12389,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public TextSegmentIterator getIteratorForGranularity(int granularity) {
switch (granularity) {
case AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER: {
@@ -12753,6 +12836,7 @@
* @return True if the event was handled by the view, false otherwise.
* @hide
*/
+ @UnsupportedAppUsage
public final boolean dispatchPointerEvent(MotionEvent event) {
if (event.isTouchEvent()) {
return dispatchTouchEvent(event);
@@ -13026,6 +13110,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void getWindowDisplayFrame(Rect outRect) {
if (mAttachInfo != null) {
try {
@@ -13888,6 +13973,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public boolean isInScrollingContainer() {
ViewParent p = getParent();
while (p != null && p instanceof ViewGroup) {
@@ -13911,6 +13997,7 @@
/**
* Remove the pending click action
*/
+ @UnsupportedAppUsage
private void removePerformClickCallback() {
if (mPerformClick != null) {
removeCallbacks(mPerformClick);
@@ -14009,6 +14096,7 @@
* @param flags Constant indicating the value which should be set
* @param mask Constant indicating the bit range that should be changed
*/
+ @UnsupportedAppUsage
void setFlags(int flags, int mask) {
final boolean accessibilityEnabled =
AccessibilityManager.getInstance(mContext).isEnabled();
@@ -14547,10 +14635,12 @@
*
* @return True if the transform matrix is the identity matrix, false otherwise.
*/
+ @UnsupportedAppUsage
final boolean hasIdentityMatrix() {
return mRenderNode.hasIdentityMatrix();
}
+ @UnsupportedAppUsage
void ensureTransformationInfo() {
if (mTransformationInfo == null) {
mTransformationInfo = new TransformationInfo();
@@ -14565,6 +14655,7 @@
* @return The inverse of the current matrix of this view.
* @hide
*/
+ @UnsupportedAppUsage
public final Matrix getInverseMatrix() {
ensureTransformationInfo();
if (mTransformationInfo.mInverseMatrix == null) {
@@ -15077,6 +15168,7 @@
* @return true if the View subclass handles alpha (the return value for onSetAlpha()) and
* the new value for the alpha property is different from the old value
*/
+ @UnsupportedAppUsage
boolean setAlphaNoInvalidation(float alpha) {
ensureTransformationInfo();
if (mTransformationInfo.mAlpha != alpha) {
@@ -15111,6 +15203,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setTransitionAlpha(float alpha) {
ensureTransformationInfo();
if (mTransformationInfo.mTransitionAlpha != alpha) {
@@ -15142,6 +15235,7 @@
* @hide
*/
@ViewDebug.ExportedProperty(category = "drawing")
+ @UnsupportedAppUsage
public float getTransitionAlpha() {
return mTransformationInfo != null ? mTransformationInfo.mTransitionAlpha : 1;
}
@@ -15627,6 +15721,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void setAnimationMatrix(Matrix matrix) {
invalidateViewProperty(true, false);
mRenderNode.setAnimationMatrix(matrix);
@@ -15901,6 +15996,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean pointInView(float localX, float localY, float slop) {
return localX >= -slop && localY >= -slop && localX < ((mRight - mLeft) + slop) &&
localY < ((mBottom - mTop) + slop);
@@ -16400,6 +16496,7 @@
* dimensions have not changed.
* @hide
*/
+ @UnsupportedAppUsage
public void invalidate(boolean invalidateCache) {
invalidateInternal(0, 0, mRight - mLeft, mBottom - mTop, invalidateCache, true);
}
@@ -16489,6 +16586,7 @@
* @param forceRedraw Mark the view as DRAWN to force the invalidation to propagate, if display
* list properties are not being used in this view
*/
+ @UnsupportedAppUsage
void invalidateViewProperty(boolean invalidateParent, boolean forceRedraw) {
if (!isHardwareAccelerated()
|| !mRenderNode.isValid()
@@ -16540,6 +16638,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
protected void invalidateParentCaches() {
if (mParent instanceof View) {
((View) mParent).mPrivateFlags |= PFLAG_INVALIDATED;
@@ -16555,6 +16654,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
protected void invalidateParentIfNeeded() {
if (isHardwareAccelerated() && mParent instanceof View) {
((View) mParent).invalidate(true);
@@ -16591,6 +16691,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
protected void computeOpaqueFlags() {
// Opaque if:
// - Has a background
@@ -16649,6 +16750,7 @@
* @return The view root, or null if none.
* @hide
*/
+ @UnsupportedAppUsage
public ViewRootImpl getViewRootImpl() {
if (mAttachInfo != null) {
return mAttachInfo.mViewRootImpl;
@@ -16659,6 +16761,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public ThreadedRenderer getThreadedRenderer() {
return mAttachInfo != null ? mAttachInfo.mThreadedRenderer : null;
}
@@ -17149,6 +17252,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
protected void recomputePadding() {
internalSetPadding(mUserPaddingLeft, mPaddingTop, mUserPaddingRight, mUserPaddingBottom);
}
@@ -17752,6 +17856,7 @@
* @see #computeHorizontalScrollOffset()
* @hide
*/
+ @UnsupportedAppUsage
protected void onDrawHorizontalScrollBar(Canvas canvas, Drawable scrollBar,
int l, int t, int r, int b) {
scrollBar.setBounds(l, t, r, b);
@@ -17771,6 +17876,7 @@
* @see #computeVerticalScrollOffset()
* @hide
*/
+ @UnsupportedAppUsage
protected void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar,
int l, int t, int r, int b) {
scrollBar.setBounds(l, t, r, b);
@@ -17789,6 +17895,7 @@
* Caller is responsible for calling requestLayout if necessary.
* (This allows addViewInLayout to not request a new layout.)
*/
+ @UnsupportedAppUsage
void assignParent(ViewParent parent) {
if (mParent == null) {
mParent = parent;
@@ -17934,6 +18041,7 @@
/**
* Return true if the application tag in the AndroidManifest has set "supportRtl" to true
*/
+ @UnsupportedAppUsage
private boolean hasRtlSupport() {
return mContext.getApplicationInfo().hasRtlSupport();
}
@@ -18080,6 +18188,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
boolean isPaddingResolved() {
return (mPrivateFlags2 & PFLAG2_PADDING_RESOLVED) == PFLAG2_PADDING_RESOLVED;
}
@@ -18090,6 +18199,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void resolvePadding() {
final int resolvedLayoutDirection = getLayoutDirection();
@@ -18187,6 +18297,7 @@
* @hide
*/
@CallSuper
+ @UnsupportedAppUsage
protected void onDetachedFromWindowInternal() {
mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
mPrivateFlags3 &= ~PFLAG3_IS_LAID_OUT;
@@ -18295,6 +18406,7 @@
* communicate with the window manager.
* @return the session object to communicate with the window manager
*/
+ @UnsupportedAppUsage
/*package*/ IWindowSession getWindowSession() {
return mAttachInfo != null ? mAttachInfo.mSession : null;
}
@@ -18320,6 +18432,7 @@
* @param info the {@link android.view.View.AttachInfo} to associated with
* this view
*/
+ @UnsupportedAppUsage
void dispatchAttachedToWindow(AttachInfo info, int visibility) {
mAttachInfo = info;
if (mOverlay != null) {
@@ -18384,6 +18497,7 @@
notifyEnterOrExitForAutoFillIfNeeded(true);
}
+ @UnsupportedAppUsage
void dispatchDetachedFromWindow() {
AttachInfo info = mAttachInfo;
if (info != null) {
@@ -18889,6 +19003,7 @@
* @hide
*/
@CallSuper
+ @UnsupportedAppUsage
protected void destroyHardwareResources() {
if (mOverlay != null) {
mOverlay.getOverlayView().destroyHardwareResources();
@@ -19024,6 +19139,7 @@
* @hide
*/
@NonNull
+ @UnsupportedAppUsage
public RenderNode updateDisplayListIfDirty() {
final RenderNode renderNode = mRenderNode;
if (!canHaveDisplayList()) {
@@ -19094,6 +19210,7 @@
return renderNode;
}
+ @UnsupportedAppUsage
private void resetDisplayList() {
mRenderNode.discardDisplayList();
if (mBackgroundRenderNode != null) {
@@ -19494,6 +19611,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public Bitmap createSnapshot(ViewDebug.CanvasProvider canvasProvider, boolean skipChildren) {
int width = mRight - mLeft;
int height = mBottom - mTop;
@@ -20382,6 +20500,7 @@
*
* @param canvas Canvas on which to draw the background
*/
+ @UnsupportedAppUsage
private void drawBackground(Canvas canvas) {
final Drawable background = mBackground;
if (background == null) {
@@ -20771,6 +20890,7 @@
* previous ones
* {@hide}
*/
+ @UnsupportedAppUsage
protected boolean setFrame(int left, int top, int right, int bottom) {
boolean changed = false;
@@ -20838,6 +20958,7 @@
* Same as setFrame, but public and hidden. For use in {@link android.transition.ChangeBounds}.
* @hide
*/
+ @UnsupportedAppUsage
public void setLeftTopRightBottom(int left, int top, int right, int bottom) {
setFrame(left, top, right, bottom);
}
@@ -22024,6 +22145,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
protected void internalSetPadding(int left, int top, int right, int bottom) {
mUserPaddingLeft = left;
mUserPaddingRight = right;
@@ -22218,6 +22340,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public void resetPaddingToInitialValues() {
if (isRtlCompatibilityMode()) {
mPaddingLeft = mUserPaddingLeftInitial;
@@ -22397,6 +22520,7 @@
* @return false if the transformation could not be applied
* @hide
*/
+ @UnsupportedAppUsage
public boolean toGlobalMotionEvent(MotionEvent ev) {
final AttachInfo info = mAttachInfo;
if (info == null) {
@@ -22418,6 +22542,7 @@
* @return false if the transformation could not be applied
* @hide
*/
+ @UnsupportedAppUsage
public boolean toLocalMotionEvent(MotionEvent ev) {
final AttachInfo info = mAttachInfo;
if (info == null) {
@@ -22438,6 +22563,7 @@
* @param m input matrix to modify
* @hide
*/
+ @UnsupportedAppUsage
public void transformMatrixToGlobal(Matrix m) {
final ViewParent parent = mParent;
if (parent instanceof View) {
@@ -22464,6 +22590,7 @@
* @param m input matrix to modify
* @hide
*/
+ @UnsupportedAppUsage
public void transformMatrixToLocal(Matrix m) {
final ViewParent parent = mParent;
if (parent instanceof View) {
@@ -22490,6 +22617,7 @@
@ViewDebug.IntToString(from = 0, to = "x"),
@ViewDebug.IntToString(from = 1, to = "y")
})
+ @UnsupportedAppUsage
public int[] getLocationOnScreen() {
int[] location = new int[2];
getLocationOnScreen(location);
@@ -22670,6 +22798,7 @@
* @param accessibilityId The searched accessibility id.
* @return The found view.
*/
+ @UnsupportedAppUsage
final <T extends View> T findViewByAccessibilityId(int accessibilityId) {
if (accessibilityId < 0) {
return null;
@@ -22820,6 +22949,7 @@
*
* @return true if the view belongs to the root namespace, false otherwise
*/
+ @UnsupportedAppUsage
public boolean isRootNamespace() {
return (mPrivateFlags&PFLAG_IS_ROOT_NAMESPACE) != 0;
}
@@ -22923,6 +23053,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setTagInternal(int key, Object tag) {
if ((key >>> 24) != 0x1) {
throw new IllegalArgumentException("The key must be a framework-specific "
@@ -22946,6 +23077,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void debug() {
debug(0);
}
@@ -22959,6 +23091,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
protected void debug(int depth) {
String output = debugIndent(depth - 1);
@@ -23581,6 +23714,7 @@
*
* {@hide}
*/
+ @UnsupportedAppUsage
public boolean gatherTransparentRegion(Region region) {
final AttachInfo attachInfo = mAttachInfo;
if (region != null && attachInfo != null) {
@@ -23808,6 +23942,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void setDisabledSystemUiVisibility(int flags) {
if (mAttachInfo != null) {
if (mAttachInfo.mDisabledSystemUiVisibility != flags) {
@@ -23848,6 +23983,7 @@
* </div>
*/
public static class DragShadowBuilder {
+ @UnsupportedAppUsage
private final WeakReference<View> mView;
/**
@@ -24275,6 +24411,7 @@
* it is ever exposed at all.
* @hide
*/
+ @UnsupportedAppUsage
public void onCloseSystemDialogs(String reason) {
}
@@ -24293,6 +24430,7 @@
* Drawable that are not transparent.
* {@hide}
*/
+ @UnsupportedAppUsage
public void applyDrawableToTransparentRegion(Drawable dr, Region region) {
if (DBG) {
Log.i("View", "Getting transparent region for: " + this);
@@ -24788,6 +24926,7 @@
* @return The vertical scroll scale factor.
* @hide
*/
+ @UnsupportedAppUsage
protected float getVerticalScrollFactor() {
if (mVerticalScrollFactor == 0) {
TypedValue outValue = new TypedValue();
@@ -24808,6 +24947,7 @@
* @return The horizontal scroll scale factor.
* @hide
*/
+ @UnsupportedAppUsage
protected float getHorizontalScrollFactor() {
// TODO: Should use something else.
return getVerticalScrollFactor();
@@ -24842,6 +24982,7 @@
@ViewDebug.IntToString(from = TEXT_DIRECTION_FIRST_STRONG_LTR, to = "FIRST_STRONG_LTR"),
@ViewDebug.IntToString(from = TEXT_DIRECTION_FIRST_STRONG_RTL, to = "FIRST_STRONG_RTL")
})
+ @UnsupportedAppUsage
public int getRawTextDirection() {
return (mPrivateFlags2 & PFLAG2_TEXT_DIRECTION_MASK) >> PFLAG2_TEXT_DIRECTION_MASK_SHIFT;
}
@@ -25080,6 +25221,7 @@
@ViewDebug.IntToString(from = TEXT_ALIGNMENT_VIEW_END, to = "VIEW_END")
})
@TextAlignment
+ @UnsupportedAppUsage
public int getRawTextAlignment() {
return (mPrivateFlags2 & PFLAG2_TEXT_ALIGNMENT_MASK) >> PFLAG2_TEXT_ALIGNMENT_MASK_SHIFT;
}
@@ -25769,6 +25911,7 @@
*
* @hide internal use only for compatibility with system widgets and older apps
*/
+ @UnsupportedAppUsage
public static int makeSafeMeasureSpec(int size, int mode) {
if (sUseZeroUnspecifiedMeasureSpec && mode == UNSPECIFIED) {
return 0;
@@ -26320,11 +26463,16 @@
private static final SynchronizedPool<InvalidateInfo> sPool =
new SynchronizedPool<InvalidateInfo>(POOL_LIMIT);
+ @UnsupportedAppUsage
View target;
+ @UnsupportedAppUsage
int left;
+ @UnsupportedAppUsage
int top;
+ @UnsupportedAppUsage
int right;
+ @UnsupportedAppUsage
int bottom;
public static InvalidateInfo obtain() {
@@ -26338,8 +26486,10 @@
}
}
+ @UnsupportedAppUsage
final IWindowSession mSession;
+ @UnsupportedAppUsage
final IWindow mWindow;
final IBinder mWindowToken;
@@ -26370,16 +26520,19 @@
* constants declared by {@link View} (there are more display states than
* screen states).
*/
+ @UnsupportedAppUsage
int mDisplayState = Display.STATE_UNKNOWN;
/**
* Scale factor used by the compatibility mode
*/
+ @UnsupportedAppUsage
float mApplicationScale;
/**
* Indicates whether the application is in compatibility mode
*/
+ @UnsupportedAppUsage
boolean mScalingRequired;
/**
@@ -26409,6 +26562,7 @@
* of the screen decorations, these are the current insets for the
* content of the window.
*/
+ @UnsupportedAppUsage
final Rect mContentInsets = new Rect();
/**
@@ -26416,6 +26570,7 @@
* of the screen decorations, these are the current insets for the
* actual visible parts of the window.
*/
+ @UnsupportedAppUsage
final Rect mVisibleInsets = new Rect();
/**
@@ -26423,6 +26578,7 @@
* of the screen decorations, these are the current insets for the
* stable system windows.
*/
+ @UnsupportedAppUsage
final Rect mStableInsets = new Rect();
final DisplayCutout.ParcelableWrapper mDisplayCutout =
@@ -26448,6 +26604,7 @@
* be given to the window manager when changed to be used in laying
* out windows behind it.
*/
+ @UnsupportedAppUsage
final ViewTreeObserver.InternalInsetsInfo mGivenInternalInsets
= new ViewTreeObserver.InternalInsetsInfo();
@@ -26461,14 +26618,17 @@
* used to determine if the window can be resized or must be panned
* to adjust for a soft input area.
*/
+ @UnsupportedAppUsage
final ArrayList<View> mScrollContainers = new ArrayList<View>();
+ @UnsupportedAppUsage
final KeyEvent.DispatcherState mKeyDispatchState
= new KeyEvent.DispatcherState();
/**
* Indicates whether the view's window currently has the focus.
*/
+ @UnsupportedAppUsage
boolean mHasWindowFocus;
/**
@@ -26479,11 +26639,13 @@
/**
* Indicates the time at which drawing started to occur.
*/
+ @UnsupportedAppUsage
long mDrawingTime;
/**
* Indicates whether the view's window is currently in touch mode.
*/
+ @UnsupportedAppUsage
boolean mInTouchMode;
/**
@@ -26496,6 +26658,7 @@
* Indicates that ViewAncestor should trigger a global layout change
* the next time it performs a traversal
*/
+ @UnsupportedAppUsage
boolean mRecomputeGlobalAttributes;
/**
@@ -26506,6 +26669,7 @@
/**
* Set during a traveral if any views want to keep the screen on.
*/
+ @UnsupportedAppUsage
boolean mKeepScreenOn;
/**
@@ -26543,11 +26707,13 @@
/**
* Set if the visibility of any views has changed.
*/
+ @UnsupportedAppUsage
boolean mViewVisibilityChanged;
/**
* Set to true if a view has been scrolled.
*/
+ @UnsupportedAppUsage
boolean mViewScrollChanged;
/**
@@ -26583,6 +26749,7 @@
* The view tree observer used to dispatch global events like
* layout, pre-draw, touch mode change, etc.
*/
+ @UnsupportedAppUsage
final ViewTreeObserver mTreeObserver;
/**
@@ -26599,6 +26766,7 @@
* A Handler supplied by a view's {@link android.view.ViewRootImpl}. This
* handler can be used to pump events in the UI events queue.
*/
+ @UnsupportedAppUsage
final Handler mHandler;
/**
@@ -26761,8 +26929,10 @@
public int scrollBarSize;
public int scrollBarMinTouchTarget;
+ @UnsupportedAppUsage
public ScrollBarDrawable scrollBar;
public float[] interpolatorValues;
+ @UnsupportedAppUsage
public View host;
public final Paint paint;
@@ -26784,6 +26954,7 @@
/**
* The current state of the scrollbars: ON, OFF, or FADING
*/
+ @UnsupportedAppUsage
public int state = OFF;
private int mLastColor;
@@ -26902,6 +27073,7 @@
* Remove the pending callback for sending a
* {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} accessibility event.
*/
+ @UnsupportedAppUsage
private void cancel(@Nullable SendViewScrolledAccessibilityEvent callback) {
if (callback == null || !callback.mIsPending) return;
removeCallbacks(callback);
@@ -27216,6 +27388,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public AccessibilityNodeInfo createAccessibilityNodeInfo(View host) {
return host.createAccessibilityNodeInfoInternal();
}
@@ -27484,6 +27657,7 @@
/**
* @hide Binary compatibility stub. To be removed when we finalize O APIs.
*/
+ @UnsupportedAppUsage
public void setTooltip(@Nullable CharSequence tooltipText) {
setTooltipText(tooltipText);
}
@@ -27533,6 +27707,7 @@
return true;
}
+ @UnsupportedAppUsage
void hideTooltip() {
if (mTooltipInfo == null) {
return;
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 075db8e..767cd33 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -17,6 +17,7 @@
package android.view;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.AppGlobals;
import android.content.Context;
import android.content.res.Configuration;
@@ -224,6 +225,7 @@
/**
* The coefficient of friction applied to flings/scrolls.
*/
+ @UnsupportedAppUsage
private static final float SCROLL_FRICTION = 0.015f;
/**
@@ -299,15 +301,19 @@
private final int mMaximumDrawingCacheSize;
private final int mOverscrollDistance;
private final int mOverflingDistance;
+ @UnsupportedAppUsage
private final boolean mFadingMarqueeEnabled;
private final long mGlobalActionsKeyTimeout;
private final float mVerticalScrollFactor;
private final float mHorizontalScrollFactor;
private final boolean mShowMenuShortcutsWhenKeyboardPresent;
+ @UnsupportedAppUsage
private boolean sHasPermanentMenuKey;
+ @UnsupportedAppUsage
private boolean sHasPermanentMenuKeySet;
+ @UnsupportedAppUsage
static final SparseArray<ViewConfiguration> sConfigurations =
new SparseArray<ViewConfiguration>(2);
@@ -589,6 +595,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static int getDoubleTapMinTime() {
return DOUBLE_TAP_MIN_TIME;
}
@@ -609,6 +616,7 @@
* to a hover movement gesture.
* @hide
*/
+ @UnsupportedAppUsage
public static int getHoverTapSlop() {
return HOVER_TAP_SLOP;
}
@@ -662,6 +670,7 @@
* potential double tap event
* @hide
*/
+ @UnsupportedAppUsage
public int getScaledDoubleTapTouchSlop() {
return mDoubleTapTouchSlop;
}
@@ -682,6 +691,7 @@
* for clients that still use its deprecated constructor.
*/
@Deprecated
+ @UnsupportedAppUsage
public static int getDoubleTapSlop() {
return DOUBLE_TAP_SLOP;
}
@@ -929,6 +939,7 @@
* @hide
* @return Whether or not marquee should use fading edges.
*/
+ @UnsupportedAppUsage
public boolean isFadingMarqueeEnabled() {
return mFadingMarqueeEnabled;
}
diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java
index e4c595b..8dd0347 100644
--- a/core/java/android/view/ViewDebug.java
+++ b/core/java/android/view/ViewDebug.java
@@ -17,6 +17,7 @@
package android.view;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
@@ -372,6 +373,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static long getViewInstanceCount() {
return Debug.countInstancesOfClass(View.class);
}
@@ -383,6 +385,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static long getViewRootImplCount() {
return Debug.countInstancesOfClass(ViewRootImpl.class);
}
@@ -434,6 +437,7 @@
public static void stopHierarchyTracing() {
}
+ @UnsupportedAppUsage
static void dispatchCommand(View view, String command, String parameters,
OutputStream clientStream) throws IOException {
@@ -803,6 +807,7 @@
* @hide
*/
@Deprecated
+ @UnsupportedAppUsage
public static void dump(View root, boolean skipChildren, boolean includeProperties,
OutputStream clientStream) throws IOException {
BufferedWriter out = null;
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 9f526cc..6268a4a 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -24,6 +24,7 @@
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.annotation.UiThread;
+import android.annotation.UnsupportedAppUsage;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
@@ -120,6 +121,7 @@
public abstract class ViewGroup extends View implements ViewParent, ViewManager {
private static final String TAG = "ViewGroup";
+ @UnsupportedAppUsage
private static final boolean DBG = false;
/**
@@ -128,6 +130,7 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected ArrayList<View> mDisappearingChildren;
/**
@@ -136,9 +139,11 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected OnHierarchyChangeListener mOnHierarchyChangeListener;
// The view contained within this ViewGroup that has or contains focus.
+ @UnsupportedAppUsage
private View mFocused;
// The view contained within this ViewGroup (excluding nested keyboard navigation clusters)
// that is or contains a default-focus view.
@@ -183,6 +188,7 @@
private Animation.AnimationListener mAnimationListener;
// First touch target in the linked list of touch targets.
+ @UnsupportedAppUsage
private TouchTarget mFirstTouchTarget;
// For debugging only. You can see these in hierarchyviewer.
@@ -230,6 +236,7 @@
@ViewDebug.FlagToString(mask = FLAG_PADDING_NOT_NULL, equals = FLAG_PADDING_NOT_NULL,
name = "PADDING_NOT_NULL")
}, formatToHexString = true)
+ @UnsupportedAppUsage
protected int mGroupFlags;
/**
@@ -290,6 +297,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
protected static final int FLAG_USE_CHILD_DRAWING_ORDER = 0x400;
/**
@@ -303,6 +311,7 @@
*
* {@hide}
*/
+ @UnsupportedAppUsage
protected static final int FLAG_SUPPORT_STATIC_TRANSFORMATIONS = 0x800;
// UNUSED FLAG VALUE: 0x1000;
@@ -356,6 +365,7 @@
* When set, this ViewGroup should not intercept touch events.
* {@hide}
*/
+ @UnsupportedAppUsage
protected static final int FLAG_DISALLOW_INTERCEPT = 0x80000;
/**
@@ -418,6 +428,7 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected int mPersistentDrawingCache;
/**
@@ -530,9 +541,11 @@
private static final int CHILD_TOP_INDEX = 1;
// Child views of this ViewGroup
+ @UnsupportedAppUsage
private View[] mChildren;
// Number of valid children in the mChildren array, the rest should be null or not
// considered as children
+ @UnsupportedAppUsage
private int mChildrenCount;
// Whether layout calls are currently being suppressed, controlled by calls to
@@ -1480,6 +1493,7 @@
* @hide
*/
@Override
+ @UnsupportedAppUsage
public void makeOptionalFitsSystemWindows() {
super.makeOptionalFitsSystemWindows();
final int count = mChildrenCount;
@@ -1508,6 +1522,7 @@
* @param newVisibility The new visibility value (GONE, INVISIBLE, or VISIBLE).
* @hide
*/
+ @UnsupportedAppUsage
protected void onChildVisibilityChanged(View child, int oldVisibility, int newVisibility) {
if (mTransition != null) {
if (newVisibility == VISIBLE) {
@@ -2907,6 +2922,7 @@
}
}
+ @UnsupportedAppUsage
private void cancelTouchTarget(View view) {
TouchTarget predecessor = null;
TouchTarget target = mFirstTouchTarget;
@@ -2955,6 +2971,7 @@
* Child must not be null.
* @hide
*/
+ @UnsupportedAppUsage
protected boolean isTransformedTouchPointInView(float x, float y, View child,
PointF outLocalPoint) {
final float[] point = getTempPoint();
@@ -2971,6 +2988,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public void transformPointToViewLocal(float[] point, View child) {
point[0] += mScrollX - child.mLeft;
point[1] += mScrollY - child.mTop;
@@ -3392,6 +3410,7 @@
}
@Override
+ @UnsupportedAppUsage
void dispatchAttachedToWindow(AttachInfo info, int visibility) {
mGroupFlags |= FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW;
super.dispatchAttachedToWindow(info, visibility);
@@ -3634,6 +3653,7 @@
/** @hide */
@Override
+ @UnsupportedAppUsage
public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfoInternal(info);
if (getAccessibilityNodeProvider() != null) {
@@ -3740,6 +3760,7 @@
}
@Override
+ @UnsupportedAppUsage
void dispatchDetachedFromWindow() {
// If we still have a touch target, we are still in the process of
// dispatching motion events to a child; we need to get rid of that
@@ -4281,6 +4302,7 @@
* @hide
*/
@Override
+ @UnsupportedAppUsage
protected void dispatchGetDisplayList() {
final int count = mChildrenCount;
final View[] children = mChildren;
@@ -4660,6 +4682,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void addTransientView(View view, int index) {
if (index < 0 || view == null) {
return;
@@ -4702,6 +4725,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void removeTransientView(View view) {
if (mTransientViews == null) {
return;
@@ -4731,6 +4755,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getTransientViewCount() {
return mTransientIndices == null ? 0 : mTransientIndices.size();
}
@@ -4764,6 +4789,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public View getTransientView(int position) {
if (mTransientViews == null || position >= mTransientViews.size()) {
return null;
@@ -4922,6 +4948,7 @@
mOnHierarchyChangeListener = listener;
}
+ @UnsupportedAppUsage
void dispatchViewAdded(View child) {
onViewAdded(child);
if (mOnHierarchyChangeListener != null) {
@@ -4938,6 +4965,7 @@
public void onViewAdded(View child) {
}
+ @UnsupportedAppUsage
void dispatchViewRemoved(View child) {
onViewRemoved(child);
if (mOnHierarchyChangeListener != null) {
@@ -6088,6 +6116,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void offsetChildrenTopAndBottom(int offset) {
final int count = mChildrenCount;
final View[] children = mChildren;
@@ -7006,6 +7035,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void suppressLayout(boolean suppress) {
mSuppressLayout = suppress;
if (!suppress) {
@@ -7303,6 +7333,7 @@
* @hide
*/
@Override
+ @UnsupportedAppUsage
public void resolvePadding() {
super.resolvePadding();
int count = getChildCount();
@@ -7750,6 +7781,7 @@
* Used internally by MarginLayoutParams.
* @hide
*/
+ @UnsupportedAppUsage
LayoutParams() {
}
@@ -7890,6 +7922,7 @@
* to this field.
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
private int startMargin = DEFAULT_MARGIN_RELATIVE;
/**
@@ -7898,6 +7931,7 @@
* to this field.
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
private int endMargin = DEFAULT_MARGIN_RELATIVE;
/**
@@ -8127,6 +8161,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setMarginsRelative(int start, int top, int end, int bottom) {
startMargin = start;
topMargin = top;
@@ -8350,6 +8385,7 @@
public static final int ALL_POINTER_IDS = -1; // all ones
// The touched child view.
+ @UnsupportedAppUsage
public View child;
// The combined bit mask of pointer ids for all pointers captured by the target.
@@ -8358,6 +8394,7 @@
// The next target in the target list.
public TouchTarget next;
+ @UnsupportedAppUsage
private TouchTarget() {
}
@@ -8754,6 +8791,7 @@
/** @hide */
@Override
+ @UnsupportedAppUsage
protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
super.encodeProperties(encoder);
diff --git a/core/java/android/view/ViewHierarchyEncoder.java b/core/java/android/view/ViewHierarchyEncoder.java
index 8770216..d5716bf 100644
--- a/core/java/android/view/ViewHierarchyEncoder.java
+++ b/core/java/android/view/ViewHierarchyEncoder.java
@@ -2,6 +2,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
@@ -90,6 +91,7 @@
endPropertyMap();
}
+ @UnsupportedAppUsage
public void addProperty(@NonNull String name, boolean v) {
writeShort(createPropertyIndex(name));
writeBoolean(v);
@@ -100,16 +102,19 @@
writeShort(s);
}
+ @UnsupportedAppUsage
public void addProperty(@NonNull String name, int v) {
writeShort(createPropertyIndex(name));
writeInt(v);
}
+ @UnsupportedAppUsage
public void addProperty(@NonNull String name, float v) {
writeShort(createPropertyIndex(name));
writeFloat(v);
}
+ @UnsupportedAppUsage
public void addProperty(@NonNull String name, @Nullable String s) {
writeShort(createPropertyIndex(name));
writeString(s);
diff --git a/core/java/android/view/ViewOverlay.java b/core/java/android/view/ViewOverlay.java
index 21123c1..e23c687 100644
--- a/core/java/android/view/ViewOverlay.java
+++ b/core/java/android/view/ViewOverlay.java
@@ -17,6 +17,7 @@
import android.animation.LayoutTransition;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -55,6 +56,7 @@
* of the overlay
* @return
*/
+ @UnsupportedAppUsage
ViewGroup getOverlayView() {
return mOverlayViewGroup;
}
@@ -94,6 +96,7 @@
mOverlayViewGroup.clear();
}
+ @UnsupportedAppUsage
boolean isEmpty() {
return mOverlayViewGroup.isEmpty();
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 97a2d79..23fc4d5 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -30,6 +30,7 @@
import android.animation.LayoutTransition;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.app.ActivityThread;
import android.app.ResourcesManager;
@@ -170,6 +171,7 @@
*/
static final int MAX_TRACKBALL_DELAY = 250;
+ @UnsupportedAppUsage
static final ThreadLocal<HandlerActionQueue> sRunQueues = new ThreadLocal<HandlerActionQueue>();
static final ArrayList<Runnable> sFirstDrawHandlers = new ArrayList();
@@ -233,7 +235,9 @@
*/
@GuardedBy("mWindowCallbacks")
final ArrayList<WindowCallbacks> mWindowCallbacks = new ArrayList<>();
+ @UnsupportedAppUsage
final Context mContext;
+ @UnsupportedAppUsage
final IWindowSession mWindowSession;
@NonNull Display mDisplay;
final DisplayManager mDisplayManager;
@@ -255,6 +259,7 @@
int mSeq;
+ @UnsupportedAppUsage
View mView;
View mAccessibilityFocusedHost;
@@ -287,6 +292,7 @@
// Set to true if the owner of this window is in the stopped state,
// so the window should no longer be active.
+ @UnsupportedAppUsage
boolean mStopped = false;
// Set to true if the owner of this window is in ambient mode,
@@ -306,8 +312,11 @@
final Region mTransparentRegion;
final Region mPreviousTransparentRegion;
+ @UnsupportedAppUsage
int mWidth;
+ @UnsupportedAppUsage
int mHeight;
+ @UnsupportedAppUsage
Rect mDirty;
public boolean mIsAnimating;
@@ -321,10 +330,12 @@
CompatibilityInfo.Translator mTranslator;
+ @UnsupportedAppUsage
final View.AttachInfo mAttachInfo;
InputChannel mInputChannel;
InputQueue.Callback mInputQueueCallback;
InputQueue mInputQueue;
+ @UnsupportedAppUsage
FallbackEventHandler mFallbackEventHandler;
Choreographer mChoreographer;
@@ -389,8 +400,10 @@
// These can be accessed by any thread, must be protected with a lock.
// Surface can never be reassigned or cleared (use Surface.clear()).
+ @UnsupportedAppUsage
public final Surface mSurface = new Surface();
+ @UnsupportedAppUsage
boolean mAdded;
boolean mAddedTouchMode;
@@ -425,6 +438,7 @@
boolean mScrollMayChange;
@SoftInputModeFlags
int mSoftInputMode;
+ @UnsupportedAppUsage
WeakReference<View> mLastScrolledFocus;
int mScrollY;
int mCurScrollY;
@@ -555,6 +569,7 @@
}
/** Add static config callback to be notified about global config changes. */
+ @UnsupportedAppUsage
public static void addConfigCallback(ConfigChangedCallback callback) {
synchronized (sConfigCallbacks) {
sConfigCallbacks.add(callback);
@@ -891,6 +906,7 @@
return (mWindowAttributes.flags & WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE) != 0;
}
+ @UnsupportedAppUsage
public int getWindowFlags() {
return mWindowAttributes.flags;
}
@@ -930,6 +946,7 @@
}
}
+ @UnsupportedAppUsage
public void detachFunctor(long functor) {
if (mAttachInfo.mThreadedRenderer != null) {
// Fence so that any pending invokeFunctor() messages will be processed
@@ -947,6 +964,7 @@
* has invoked. If false, the functor may be invoked
* asynchronously.
*/
+ @UnsupportedAppUsage
public static void invokeFunctor(long functor, boolean waitForCompletion) {
ThreadedRenderer.invokeFunctor(functor, waitForCompletion);
}
@@ -980,6 +998,7 @@
mNextRtFrameCallback = callback;
}
+ @UnsupportedAppUsage
private void enableHardwareAcceleration(WindowManager.LayoutParams attrs) {
mAttachInfo.mHardwareAccelerated = false;
mAttachInfo.mHardwareAccelerationRequested = false;
@@ -1040,6 +1059,7 @@
}
}
+ @UnsupportedAppUsage
public View getView() {
return mView;
}
@@ -1241,6 +1261,7 @@
invalidate();
}
+ @UnsupportedAppUsage
void invalidate() {
mDirty.set(0, 0, mWidth, mHeight);
if (!mWillDrawSoon) {
@@ -1422,6 +1443,7 @@
}
}
+ @UnsupportedAppUsage
void scheduleTraversals() {
if (!mTraversalScheduled) {
mTraversalScheduled = true;
@@ -3657,6 +3679,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public View getAccessibilityFocusedHost() {
return mAccessibilityFocusedHost;
}
@@ -3664,6 +3687,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public AccessibilityNodeInfo getAccessibilityFocusedVirtualView() {
return mAccessibilityFocusedVirtualView;
}
@@ -4281,6 +4305,7 @@
* @param inTouchMode Whether we want to be in touch mode.
* @return True if the touch mode changed and focus changed was changed as a result
*/
+ @UnsupportedAppUsage
boolean ensureTouchMode(boolean inTouchMode) {
if (DBG) Log.d("touchmode", "ensureTouchMode(" + inTouchMode + "), current "
+ "touch mode is " + mAttachInfo.mInTouchMode);
@@ -6276,6 +6301,7 @@
}
/* drag/drop */
+ @UnsupportedAppUsage
void setLocalDragState(Object obj) {
mLocalDragState = obj;
}
@@ -6423,6 +6449,7 @@
}
}
+ @UnsupportedAppUsage
public void getLastTouchPoint(Point outLocation) {
outLocation.x = (int) mLastTouchPoint.x;
outLocation.y = (int) mLastTouchPoint.y;
@@ -6821,6 +6848,7 @@
}
}
+ @UnsupportedAppUsage
private void dispatchResized(Rect frame, Rect overscanInsets, Rect contentInsets,
Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw,
MergedConfiguration mergedConfiguration, Rect backDropFrame, boolean forceLayout,
@@ -6985,10 +7013,12 @@
}
}
+ @UnsupportedAppUsage
void enqueueInputEvent(InputEvent event) {
enqueueInputEvent(event, null, 0, false);
}
+ @UnsupportedAppUsage
void enqueueInputEvent(InputEvent event,
InputEventReceiver receiver, int flags, boolean processImmediately) {
adjustInputEventForCompatibility(event);
@@ -7329,6 +7359,7 @@
mInvalidateOnAnimationRunnable.addViewRect(info);
}
+ @UnsupportedAppUsage
public void cancelInvalidate(View view) {
mHandler.removeMessages(MSG_INVALIDATE, view);
// fixme: might leak the AttachInfo.InvalidateInfo objects instead of returning
@@ -7337,10 +7368,12 @@
mInvalidateOnAnimationRunnable.removeView(view);
}
+ @UnsupportedAppUsage
public void dispatchInputEvent(InputEvent event) {
dispatchInputEvent(event, null);
}
+ @UnsupportedAppUsage
public void dispatchInputEvent(InputEvent event, InputEventReceiver receiver) {
SomeArgs args = SomeArgs.obtain();
args.arg1 = event;
@@ -7356,6 +7389,7 @@
mHandler.sendMessage(msg);
}
+ @UnsupportedAppUsage
public void dispatchKeyFromIme(KeyEvent event) {
Message msg = mHandler.obtainMessage(MSG_DISPATCH_KEY_FROM_IME, event);
msg.setAsynchronous(true);
@@ -7374,6 +7408,7 @@
* Note that it is the responsibility of the caller of this API to recycle the InputEvent it
* passes in.
*/
+ @UnsupportedAppUsage
public void dispatchUnhandledInputEvent(InputEvent event) {
if (event instanceof MotionEvent) {
event = MotionEvent.obtain((MotionEvent) event);
@@ -8076,6 +8111,7 @@
}
public static final class CalledFromWrongThreadException extends AndroidRuntimeException {
+ @UnsupportedAppUsage
public CalledFromWrongThreadException(String msg) {
super(msg);
}
diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java
index 3f7ab2a..38dcdd3 100644
--- a/core/java/android/view/ViewStructure.java
+++ b/core/java/android/view/ViewStructure.java
@@ -33,9 +33,14 @@
import java.util.List;
/**
- * Container for storing additional per-view data generated by {@link View#onProvideStructure
+ * <p><code>ViewStructure</code> is a container for storing additional
+ * per-view data generated by {@link View#onProvideStructure
* View.onProvideStructure} and {@link View#onProvideAutofillStructure
* View.onProvideAutofillStructure}.
+ *
+ * <p>To learn more about using Autofill in your app, read the
+ * <a href="/guide/topics/text/autofill">Autofill Framework</a> guides.
+ *
*/
public abstract class ViewStructure {
diff --git a/core/java/android/view/ViewTreeObserver.java b/core/java/android/view/ViewTreeObserver.java
index efc1807..f7c9a0b 100644
--- a/core/java/android/view/ViewTreeObserver.java
+++ b/core/java/android/view/ViewTreeObserver.java
@@ -19,6 +19,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.Region;
@@ -42,14 +43,18 @@
private CopyOnWriteArrayList<OnWindowFocusChangeListener> mOnWindowFocusListeners;
private CopyOnWriteArrayList<OnWindowAttachListener> mOnWindowAttachListeners;
private CopyOnWriteArrayList<OnGlobalFocusChangeListener> mOnGlobalFocusListeners;
+ @UnsupportedAppUsage
private CopyOnWriteArrayList<OnTouchModeChangeListener> mOnTouchModeChangeListeners;
private CopyOnWriteArrayList<OnEnterAnimationCompleteListener>
mOnEnterAnimationCompleteListeners;
// Non-recursive listeners use CopyOnWriteArray
// Any listener invoked from ViewRootImpl.performTraversals() should not be recursive
+ @UnsupportedAppUsage
private CopyOnWriteArray<OnGlobalLayoutListener> mOnGlobalLayoutListeners;
+ @UnsupportedAppUsage
private CopyOnWriteArray<OnComputeInternalInsetsListener> mOnComputeInternalInsetsListeners;
+ @UnsupportedAppUsage
private CopyOnWriteArray<OnScrollChangedListener> mOnScrollChangedListeners;
private CopyOnWriteArray<OnPreDrawListener> mOnPreDrawListeners;
private CopyOnWriteArray<OnWindowShownListener> mOnWindowShownListeners;
@@ -215,12 +220,14 @@
* Offsets from the frame of the window at which the content of
* windows behind it should be placed.
*/
+ @UnsupportedAppUsage
public final Rect contentInsets = new Rect();
/**
* Offsets from the frame of the window at which windows behind it
* are visible.
*/
+ @UnsupportedAppUsage
public final Rect visibleInsets = new Rect();
/**
@@ -228,6 +235,7 @@
* Only used when {@link #setTouchableInsets(int)} is called with
* the option {@link #TOUCHABLE_INSETS_REGION}.
*/
+ @UnsupportedAppUsage
public final Region touchableRegion = new Region();
/**
@@ -252,6 +260,7 @@
* Option for {@link #setTouchableInsets(int)}: the area inside of
* the provided touchable region in {@link #touchableRegion} can be touched.
*/
+ @UnsupportedAppUsage
public static final int TOUCHABLE_INSETS_REGION = 3;
/**
@@ -259,10 +268,12 @@
* {@link #TOUCHABLE_INSETS_FRAME}, {@link #TOUCHABLE_INSETS_CONTENT},
* {@link #TOUCHABLE_INSETS_VISIBLE}, or {@link #TOUCHABLE_INSETS_REGION}.
*/
+ @UnsupportedAppUsage
public void setTouchableInsets(int val) {
mTouchableInsets = val;
}
+ @UnsupportedAppUsage
int mTouchableInsets;
void reset() {
@@ -300,6 +311,7 @@
touchableRegion.equals(other.touchableRegion);
}
+ @UnsupportedAppUsage
void set(InternalInsetsInfo other) {
contentInsets.set(other.contentInsets);
visibleInsets.set(other.visibleInsets);
@@ -848,6 +860,7 @@
* We are not yet ready to commit to this API and support it, so
* @hide
*/
+ @UnsupportedAppUsage
public void addOnComputeInternalInsetsListener(OnComputeInternalInsetsListener listener) {
checkIsAlive();
@@ -871,6 +884,7 @@
* We are not yet ready to commit to this API and support it, so
* @hide
*/
+ @UnsupportedAppUsage
public void removeOnComputeInternalInsetsListener(OnComputeInternalInsetsListener victim) {
checkIsAlive();
if (mOnComputeInternalInsetsListeners == null) {
@@ -970,6 +984,7 @@
/**
* Notifies registered listeners that focus has changed.
*/
+ @UnsupportedAppUsage
final void dispatchOnGlobalFocusChange(View oldFocus, View newFocus) {
// NOTE: because of the use of CopyOnWriteArrayList, we *must* use an iterator to
// perform the dispatching. The iterator is a safe guard against listeners that
@@ -1081,6 +1096,7 @@
*
* @param inTouchMode True if the touch mode is now enabled, false otherwise.
*/
+ @UnsupportedAppUsage
final void dispatchOnTouchModeChanged(boolean inTouchMode) {
final CopyOnWriteArrayList<OnTouchModeChangeListener> listeners =
mOnTouchModeChangeListeners;
@@ -1094,6 +1110,7 @@
/**
* Notifies registered listeners that something has scrolled.
*/
+ @UnsupportedAppUsage
final void dispatchOnScrollChanged() {
// NOTE: because of the use of CopyOnWriteArrayList, we *must* use an iterator to
// perform the dispatching. The iterator is a safe guard against listeners that
@@ -1116,6 +1133,7 @@
/**
* Returns whether there are listeners for computing internal insets.
*/
+ @UnsupportedAppUsage
final boolean hasComputeInternalInsetsListeners() {
final CopyOnWriteArray<OnComputeInternalInsetsListener> listeners =
mOnComputeInternalInsetsListeners;
@@ -1125,6 +1143,7 @@
/**
* Calls all listeners to compute the current insets.
*/
+ @UnsupportedAppUsage
final void dispatchOnComputeInternalInsets(InternalInsetsInfo inoutInfo) {
// NOTE: because of the use of CopyOnWriteArrayList, we *must* use an iterator to
// perform the dispatching. The iterator is a safe guard against listeners that
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index b9f9e5e..f436962 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -25,6 +25,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StyleRes;
+import android.annotation.UnsupportedAppUsage;
import android.app.WindowConfiguration;
import android.content.Context;
import android.content.pm.ActivityInfo;
@@ -150,6 +151,7 @@
* Max value used as a feature ID
* @hide
*/
+ @UnsupportedAppUsage
public static final int FEATURE_MAX = FEATURE_ACTIVITY_TRANSITIONS;
/**
@@ -267,18 +269,25 @@
*/
public static final int DECOR_CAPTION_SHADE_DARK = 2;
+ @UnsupportedAppUsage
private final Context mContext;
+ @UnsupportedAppUsage
private TypedArray mWindowStyle;
+ @UnsupportedAppUsage
private Callback mCallback;
private OnWindowDismissedCallback mOnWindowDismissedCallback;
private OnWindowSwipeDismissedCallback mOnWindowSwipeDismissedCallback;
private WindowControllerCallback mWindowControllerCallback;
private OnRestrictedCaptionAreaChangedListener mOnRestrictedCaptionAreaChangedListener;
private Rect mRestrictedCaptionAreaRect;
+ @UnsupportedAppUsage
private WindowManager mWindowManager;
+ @UnsupportedAppUsage
private IBinder mAppToken;
+ @UnsupportedAppUsage
private String mAppName;
+ @UnsupportedAppUsage
private boolean mHardwareAccelerated;
private Window mContainer;
private Window mActiveChild;
@@ -288,7 +297,9 @@
private boolean mSetCloseOnTouchOutside = false;
private int mForcedWindowFlags = 0;
+ @UnsupportedAppUsage
private int mFeatures;
+ @UnsupportedAppUsage
private int mLocalFeatures;
private boolean mHaveWindowFormat = false;
@@ -297,12 +308,14 @@
private boolean mHasSoftInputMode = false;
+ @UnsupportedAppUsage
private boolean mDestroyed;
private boolean mOverlayWithDecorCaptionEnabled = false;
private boolean mCloseOnSwipeEnabled = false;
// The current window attributes.
+ @UnsupportedAppUsage
private final WindowManager.LayoutParams mWindowAttributes =
new WindowManager.LayoutParams();
@@ -729,6 +742,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public final boolean isDestroyed() {
return mDestroyed;
}
@@ -1066,6 +1080,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void addPrivateFlags(int flags) {
setPrivateFlags(flags, flags);
}
@@ -1116,6 +1131,7 @@
/**
* {@hide}
*/
+ @UnsupportedAppUsage
protected void setNeedsMenuKey(int value) {
final WindowManager.LayoutParams attrs = getAttributes();
attrs.needsMenuKey = value;
@@ -1236,12 +1252,14 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void setCloseOnTouchOutside(boolean close) {
mCloseOnTouchOutside = close;
mSetCloseOnTouchOutside = true;
}
/** @hide */
+ @UnsupportedAppUsage
public void setCloseOnTouchOutsideIfNotSet(boolean close) {
if (!mSetCloseOnTouchOutside) {
mCloseOnTouchOutside = close;
@@ -1250,9 +1268,11 @@
}
/** @hide */
+ @UnsupportedAppUsage
public abstract void alwaysReadCloseOnTouchAttr();
/** @hide */
+ @UnsupportedAppUsage
public boolean shouldCloseOnTouch(Context context, MotionEvent event) {
final boolean isOutside =
event.getAction() == MotionEvent.ACTION_DOWN && isOutOfBounds(context, event)
diff --git a/core/java/android/view/WindowAnimationFrameStats.java b/core/java/android/view/WindowAnimationFrameStats.java
index c60b96c..0233c86 100644
--- a/core/java/android/view/WindowAnimationFrameStats.java
+++ b/core/java/android/view/WindowAnimationFrameStats.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -47,6 +48,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void init(long refreshPeriodNano, long[] framesPresentedTimeNano) {
mRefreshPeriodNano = refreshPeriodNano;
mFramesPresentedTimeNano = framesPresentedTimeNano;
diff --git a/core/java/android/view/WindowContentFrameStats.java b/core/java/android/view/WindowContentFrameStats.java
index c6da2fb..96878e9 100644
--- a/core/java/android/view/WindowContentFrameStats.java
+++ b/core/java/android/view/WindowContentFrameStats.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -60,6 +61,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void init(long refreshPeriodNano, long[] framesPostedTimeNano,
long[] framesPresentedTimeNano, long[] framesReadyTimeNano) {
mRefreshPeriodNano = refreshPeriodNano;
diff --git a/core/java/android/view/WindowInsets.java b/core/java/android/view/WindowInsets.java
index fbd8141..8628da3 100644
--- a/core/java/android/view/WindowInsets.java
+++ b/core/java/android/view/WindowInsets.java
@@ -18,6 +18,7 @@
package android.view;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Rect;
import com.android.internal.util.Preconditions;
@@ -69,6 +70,7 @@
* since it would allow them to inadvertently consume unknown insets by returning it.
* @hide
*/
+ @UnsupportedAppUsage
public static final WindowInsets CONSUMED;
static {
@@ -115,6 +117,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public WindowInsets(Rect systemWindowInsets) {
this(systemWindowInsets, null, null, false, false, null);
}
@@ -124,6 +127,7 @@
* to the existing fitSystemWindows method and other similar internals.
* @hide
*/
+ @UnsupportedAppUsage
public Rect getSystemWindowInsets() {
if (mTempRect == null) {
mTempRect = new Rect();
@@ -578,6 +582,7 @@
*
* @hide pending API
*/
+ @UnsupportedAppUsage
public WindowInsets inset(int left, int top, int right, int bottom) {
Preconditions.checkArgumentNonnegative(left);
Preconditions.checkArgumentNonnegative(top);
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index d7a5d68..0404df0 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -50,6 +50,7 @@
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.KeyguardManager;
import android.app.Presentation;
import android.content.Context;
@@ -674,6 +675,7 @@
* is a big ugly hack so:
* @hide
*/
+ @UnsupportedAppUsage
public static final int TYPE_APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW + 4;
/**
@@ -826,6 +828,7 @@
* In multiuser systems shows only on the owning user's window.
* @hide
*/
+ @UnsupportedAppUsage
public static final int TYPE_SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+15;
/**
@@ -901,6 +904,7 @@
* In multiuser systems shows on all users' windows.
* @hide
*/
+ @UnsupportedAppUsage
public static final int TYPE_DISPLAY_OVERLAY = FIRST_SYSTEM_WINDOW+26;
/**
@@ -1391,6 +1395,7 @@
*
* {@hide}
*/
+ @UnsupportedAppUsage
public static final int FLAG_SLIPPERY = 0x20000000;
/**
@@ -1554,6 +1559,7 @@
* to determine its default behavior.
*
* {@hide} */
+ @UnsupportedAppUsage
public static final int PRIVATE_FLAG_SHOW_FOR_ALL_USERS = 0x00000010;
/**
@@ -1813,6 +1819,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static final int NEEDS_MENU_SET_TRUE = 1;
/**
@@ -1821,6 +1828,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static final int NEEDS_MENU_SET_FALSE = 2;
/**
@@ -1834,6 +1842,7 @@
*
* {@hide}
*/
+ @UnsupportedAppUsage
public int needsMenuKey = NEEDS_MENU_UNSET;
/**
@@ -2238,6 +2247,7 @@
* The ui visibility as requested by the views in this hierarchy.
* the combined value should be systemUiVisibility | subtreeSystemUiVisibility.
*/
+ @UnsupportedAppUsage
public int subtreeSystemUiVisibility;
/**
@@ -2247,6 +2257,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean hasSystemUiListeners;
@@ -2398,6 +2409,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static final int INPUT_FEATURE_DISABLE_USER_ACTIVITY = 0x00000004;
/**
@@ -2408,6 +2420,7 @@
* @see #INPUT_FEATURE_DISABLE_USER_ACTIVITY
* @hide
*/
+ @UnsupportedAppUsage
public int inputFeatures;
/**
@@ -2423,6 +2436,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public long userActivityTimeout = -1;
/**
@@ -2454,6 +2468,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public long hideTimeoutMilliseconds = -1;
/**
@@ -3124,6 +3139,7 @@
* Backup the layout parameters used in compatibility mode.
* @see LayoutParams#restore()
*/
+ @UnsupportedAppUsage
void backup() {
int[] backup = mCompatibilityParamsBackup;
if (backup == null) {
@@ -3140,6 +3156,7 @@
* Restore the layout params' coordinates, size and gravity
* @see LayoutParams#backup()
*/
+ @UnsupportedAppUsage
void restore() {
int[] backup = mCompatibilityParamsBackup;
if (backup != null) {
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index 08c2d0b..d810067 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -17,6 +17,7 @@
package android.view;
import android.animation.ValueAnimator;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.content.ComponentCallbacks2;
import android.content.Context;
@@ -131,14 +132,21 @@
public static final int ADD_INVALID_DISPLAY = -9;
public static final int ADD_INVALID_TYPE = -10;
+ @UnsupportedAppUsage
private static WindowManagerGlobal sDefaultWindowManager;
+ @UnsupportedAppUsage
private static IWindowManager sWindowManagerService;
+ @UnsupportedAppUsage
private static IWindowSession sWindowSession;
+ @UnsupportedAppUsage
private final Object mLock = new Object();
+ @UnsupportedAppUsage
private final ArrayList<View> mViews = new ArrayList<View>();
+ @UnsupportedAppUsage
private final ArrayList<ViewRootImpl> mRoots = new ArrayList<ViewRootImpl>();
+ @UnsupportedAppUsage
private final ArrayList<WindowManager.LayoutParams> mParams =
new ArrayList<WindowManager.LayoutParams>();
private final ArraySet<View> mDyingViews = new ArraySet<View>();
@@ -148,10 +156,12 @@
private WindowManagerGlobal() {
}
+ @UnsupportedAppUsage
public static void initialize() {
getWindowManagerService();
}
+ @UnsupportedAppUsage
public static WindowManagerGlobal getInstance() {
synchronized (WindowManagerGlobal.class) {
if (sDefaultWindowManager == null) {
@@ -161,6 +171,7 @@
}
}
+ @UnsupportedAppUsage
public static IWindowManager getWindowManagerService() {
synchronized (WindowManagerGlobal.class) {
if (sWindowManagerService == null) {
@@ -179,6 +190,7 @@
}
}
+ @UnsupportedAppUsage
public static IWindowSession getWindowSession() {
synchronized (WindowManagerGlobal.class) {
if (sWindowSession == null) {
@@ -201,12 +213,14 @@
}
}
+ @UnsupportedAppUsage
public static IWindowSession peekWindowSession() {
synchronized (WindowManagerGlobal.class) {
return sWindowSession;
}
}
+ @UnsupportedAppUsage
public String[] getViewRootNames() {
synchronized (mLock) {
final int numRoots = mRoots.size();
@@ -218,6 +232,7 @@
}
}
+ @UnsupportedAppUsage
public ArrayList<ViewRootImpl> getRootViews(IBinder token) {
ArrayList<ViewRootImpl> views = new ArrayList<>();
synchronized (mLock) {
@@ -264,6 +279,7 @@
return null;
}
+ @UnsupportedAppUsage
public View getRootView(String name) {
synchronized (mLock) {
for (int i = mRoots.size() - 1; i >= 0; --i) {
@@ -385,6 +401,7 @@
}
}
+ @UnsupportedAppUsage
public void removeView(View view, boolean immediate) {
if (view == null) {
throw new IllegalArgumentException("view must not be null");
@@ -500,6 +517,7 @@
return false;
}
+ @UnsupportedAppUsage
public void trimMemory(int level) {
if (ThreadedRenderer.isAvailable()) {
if (shouldDestroyEglContext(level)) {
@@ -647,6 +665,7 @@
}
final class WindowLeaked extends AndroidRuntimeException {
+ @UnsupportedAppUsage
public WindowLeaked(String msg) {
super(msg);
}
diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java
index a8722f1..2339d35 100644
--- a/core/java/android/view/WindowManagerImpl.java
+++ b/core/java/android/view/WindowManagerImpl.java
@@ -17,6 +17,7 @@
package android.view;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.graphics.Region;
import android.os.Bundle;
@@ -54,6 +55,7 @@
* @hide
*/
public final class WindowManagerImpl implements WindowManager {
+ @UnsupportedAppUsage
private final WindowManagerGlobal mGlobal = WindowManagerGlobal.getInstance();
private final Context mContext;
private final Window mParentWindow;
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index a6b8eb3..3eca854 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -17,6 +17,7 @@
package android.view.accessibility;
import android.annotation.IntDef;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
@@ -755,10 +756,12 @@
private static final SynchronizedPool<AccessibilityEvent> sPool =
new SynchronizedPool<>(MAX_POOL_SIZE);
+ @UnsupportedAppUsage
private @EventType int mEventType;
private CharSequence mPackageName;
private long mEventTime;
int mMovementGranularity;
+ @UnsupportedAppUsage
int mAction;
int mContentChangeTypes;
int mWindowChangeTypes;
diff --git a/core/java/android/view/accessibility/AccessibilityInteractionClient.java b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
index d60c481..4db6f4f 100644
--- a/core/java/android/view/accessibility/AccessibilityInteractionClient.java
+++ b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
@@ -17,6 +17,7 @@
package android.view.accessibility;
import android.accessibilityservice.IAccessibilityServiceConnection;
+import android.annotation.UnsupportedAppUsage;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
@@ -112,6 +113,7 @@
/**
* @return The client for the current thread.
*/
+ @UnsupportedAppUsage
public static AccessibilityInteractionClient getInstance() {
final long threadId = Thread.currentThread().getId();
return getInstanceForThread(threadId);
@@ -190,6 +192,7 @@
*
* @param message The message.
*/
+ @UnsupportedAppUsage
public void setSameThreadMessage(Message message) {
synchronized (mInstanceLock) {
mSameThreadMessage = message;
@@ -625,6 +628,7 @@
return false;
}
+ @UnsupportedAppUsage
public void clearCache() {
sAccessibilityCache.clear();
}
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index cbb23f1..c59c491 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -25,6 +25,7 @@
import android.annotation.Nullable;
import android.annotation.SdkConstant;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -88,6 +89,7 @@
public static final int DALTONIZER_DISABLED = -1;
/** @hide */
+ @UnsupportedAppUsage
public static final int DALTONIZER_SIMULATE_MONOCHROMACY = 0;
/** @hide */
@@ -112,30 +114,39 @@
public static final String ACTION_CHOOSE_ACCESSIBILITY_BUTTON =
"com.android.internal.intent.action.CHOOSE_ACCESSIBILITY_BUTTON";
+ @UnsupportedAppUsage
static final Object sInstanceSync = new Object();
+ @UnsupportedAppUsage
private static AccessibilityManager sInstance;
+ @UnsupportedAppUsage
private final Object mLock = new Object();
+ @UnsupportedAppUsage
private IAccessibilityManager mService;
+ @UnsupportedAppUsage
final int mUserId;
+ @UnsupportedAppUsage
final Handler mHandler;
final Handler.Callback mCallback;
+ @UnsupportedAppUsage
boolean mIsEnabled;
int mRelevantEventTypes = AccessibilityEvent.TYPES_ALL_MASK;
boolean mIsTouchExplorationEnabled;
+ @UnsupportedAppUsage
boolean mIsHighTextContrastEnabled;
AccessibilityPolicy mAccessibilityPolicy;
+ @UnsupportedAppUsage
private final ArrayMap<AccessibilityStateChangeListener, Handler>
mAccessibilityStateChangeListeners = new ArrayMap<>();
@@ -318,6 +329,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static AccessibilityManager getInstance(Context context) {
synchronized (sInstanceSync) {
if (sInstance == null) {
@@ -430,6 +442,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isHighTextContrastEnabled() {
synchronized (mLock) {
IAccessibilityManager service = getServiceLocked();
@@ -916,6 +929,7 @@
*
* @param stateFlags The state flags.
*/
+ @UnsupportedAppUsage
private void setStateLocked(int stateFlags) {
final boolean enabled = (stateFlags & STATE_FLAG_ACCESSIBILITY_ENABLED) != 0;
final boolean touchExplorationEnabled =
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index f2429bd..a3fa2ce 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -25,6 +25,7 @@
import android.accessibilityservice.AccessibilityServiceInfo;
import android.annotation.Nullable;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Parcel;
@@ -652,6 +653,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static int getAccessibilityViewId(long accessibilityNodeId) {
return (int) accessibilityNodeId;
}
@@ -665,6 +667,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static int getVirtualDescendantId(long accessibilityNodeId) {
return (int) ((accessibilityNodeId & VIRTUAL_DESCENDANT_ID_MASK)
>> VIRTUAL_DESCENDANT_ID_SHIFT);
@@ -692,10 +695,12 @@
private static final AccessibilityNodeInfo DEFAULT = new AccessibilityNodeInfo();
+ @UnsupportedAppUsage
private boolean mSealed;
// Data.
private int mWindowId = AccessibilityWindowInfo.UNDEFINED_WINDOW_ID;
+ @UnsupportedAppUsage
private long mSourceNodeId = UNDEFINED_NODE_ID;
private long mParentNodeId = UNDEFINED_NODE_ID;
private long mLabelForId = UNDEFINED_NODE_ID;
@@ -721,6 +726,7 @@
private String mViewIdResourceName;
private ArrayList<String> mExtraDataKeys;
+ @UnsupportedAppUsage
private LongArray mChildNodeIds;
private ArrayList<AccessibilityAction> mActions;
@@ -855,6 +861,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean refresh(Bundle arguments, boolean bypassCache) {
enforceSealed();
if (!canPerformRequestOverConnection(mSourceNodeId)) {
@@ -1159,7 +1166,13 @@
}
private boolean hasActionWithId(int actionId) {
- return getActionList().stream().anyMatch(action -> action.getId() == actionId);
+ List<AccessibilityAction> actions = getActionList();
+ for (int i = 0; i < actions.size(); i++) {
+ if (actions.get(i).getId() == actionId) {
+ return true;
+ }
+ }
+ return false;
}
/**
@@ -1761,7 +1774,7 @@
* @return True if the node is focusable.
*/
public boolean isFocusable() {
- return hasActionWithId(ACTION_FOCUS);
+ return hasActionWithId(ACTION_FOCUS) || hasActionWithId(ACTION_CLEAR_FOCUS);
}
/**
@@ -3015,6 +3028,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public long getSourceNodeId() {
return mSourceNodeId;
}
@@ -3026,6 +3040,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setSealed(boolean sealed) {
mSealed = sealed;
}
@@ -3037,6 +3052,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isSealed() {
return mSealed;
}
diff --git a/core/java/android/view/accessibility/AccessibilityRecord.java b/core/java/android/view/accessibility/AccessibilityRecord.java
index c2ddc92..b382a18 100644
--- a/core/java/android/view/accessibility/AccessibilityRecord.java
+++ b/core/java/android/view/accessibility/AccessibilityRecord.java
@@ -19,6 +19,7 @@
import static com.android.internal.util.CollectionUtils.isEmpty;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcelable;
import android.view.View;
@@ -82,6 +83,7 @@
private AccessibilityRecord mNext;
private boolean mIsInPool;
+ @UnsupportedAppUsage
boolean mSealed;
int mBooleanProperties = 0;
int mCurrentItemIndex = UNDEFINED;
@@ -98,6 +100,7 @@
int mAddedCount= UNDEFINED;
int mRemovedCount = UNDEFINED;
+ @UnsupportedAppUsage
long mSourceNodeId = AccessibilityNodeInfo.UNDEFINED_NODE_ID;
int mSourceWindowId = AccessibilityWindowInfo.UNDEFINED_WINDOW_ID;
@@ -696,6 +699,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public long getSourceNodeId() {
return mSourceNodeId;
}
diff --git a/core/java/android/view/accessibility/CaptioningManager.java b/core/java/android/view/accessibility/CaptioningManager.java
index d6455e7..c42e9fe 100644
--- a/core/java/android/view/accessibility/CaptioningManager.java
+++ b/core/java/android/view/accessibility/CaptioningManager.java
@@ -19,6 +19,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
@@ -286,6 +287,7 @@
public static final CaptionStyle DEFAULT;
/** @hide */
+ @UnsupportedAppUsage
public static final CaptionStyle[] PRESETS;
/** @hide */
diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java
index 2cc175f..2cd4b2b 100644
--- a/core/java/android/view/autofill/AutofillManager.java
+++ b/core/java/android/view/autofill/AutofillManager.java
@@ -81,11 +81,16 @@
import sun.misc.Cleaner;
/**
- * The {@link AutofillManager} provides ways for apps and custom views to integrate with the
- * Autofill Framework lifecycle.
+ * <p>The {@link AutofillManager} class provides ways for apps and custom views to
+ * integrate with the Autofill Framework lifecycle.
+ *
+ * <p>To learn about using Autofill in your app, read
+ * the <a href="/guide/topics/text/autofill">Autofill Framework</a> guides.
+ *
+ * <h3 id="autofill-lifecycle">Autofill lifecycle</h3>
*
* <p>The autofill lifecycle starts with the creation of an autofill context associated with an
- * activity context; the autofill context is created when one of the following methods is called for
+ * activity context. The autofill context is created when one of the following methods is called for
* the first time in an activity context, and the current user has an enabled autofill service:
*
* <ul>
@@ -94,7 +99,7 @@
* <li>{@link #requestAutofill(View)}
* </ul>
*
- * <p>Tipically, the context is automatically created when the first view of the activity is
+ * <p>Typically, the context is automatically created when the first view of the activity is
* focused because {@code View.onFocusChanged()} indirectly calls
* {@link #notifyViewEntered(View)}. App developers can call {@link #requestAutofill(View)} to
* explicitly create it (for example, a custom view developer could offer a contextual menu action
@@ -138,7 +143,9 @@
* shows an autofill save UI if the value of savable views have changed. If the user selects the
* option to Save, the current value of the views is then sent to the autofill service.
*
- * <p>It is safe to call into its methods from any thread.
+ * <h3 id="additional-notes">Additional notes</h3>
+ *
+ * <p>It is safe to call <code>AutofillManager</code> methods from any thread.
*/
@SystemService(Context.AUTOFILL_MANAGER_SERVICE)
@RequiresFeature(PackageManager.FEATURE_AUTOFILL)
@@ -2152,7 +2159,11 @@
pw.print(pfx); pw.print("sessionId: "); pw.println(mSessionId);
pw.print(pfx); pw.print("state: "); pw.println(getStateAsStringLocked());
pw.print(pfx); pw.print("context: "); pw.println(mContext);
- pw.print(pfx); pw.print("client: "); pw.println(getClient());
+ final AutofillClient client = getClient();
+ if (client != null) {
+ pw.print(pfx); pw.print("client: "); pw.print(client);
+ pw.print(" ("); pw.print(client.autofillClientGetActivityToken()); pw.println(')');
+ }
pw.print(pfx); pw.print("enabled: "); pw.println(mEnabled);
pw.print(pfx); pw.print("hasService: "); pw.println(mService != null);
pw.print(pfx); pw.print("hasCallback: "); pw.println(mCallback != null);
@@ -2172,8 +2183,24 @@
pw.print(pfx); pw.print("entered ids: "); pw.println(mEnteredIds);
pw.print(pfx); pw.print("save trigger id: "); pw.println(mSaveTriggerId);
pw.print(pfx); pw.print("save on finish(): "); pw.println(mSaveOnFinish);
- pw.print(pfx); pw.print("compat mode enabled: "); pw.println(
- isCompatibilityModeEnabledLocked());
+ pw.print(pfx); pw.print("compat mode enabled: ");
+ synchronized (mLock) {
+ if (mCompatibilityBridge != null) {
+ final String pfx2 = pfx + " ";
+ pw.println("true");
+ pw.print(pfx2); pw.print("windowId: ");
+ pw.println(mCompatibilityBridge.mFocusedWindowId);
+ pw.print(pfx2); pw.print("nodeId: ");
+ pw.println(mCompatibilityBridge.mFocusedNodeId);
+ pw.print(pfx2); pw.print("virtualId: ");
+ pw.println(AccessibilityNodeInfo
+ .getVirtualDescendantId(mCompatibilityBridge.mFocusedNodeId));
+ pw.print(pfx2); pw.print("focusedBounds: ");
+ pw.println(mCompatibilityBridge.mFocusedBounds);
+ } else {
+ pw.println("false");
+ }
+ }
pw.print(pfx); pw.print("debug: "); pw.print(sDebug);
pw.print(" verbose: "); pw.println(sVerbose);
}
@@ -2311,8 +2338,9 @@
if (sVerbose) {
// NOTE: this is waaay spammy, but that's life.
Log.v(TAG, "onAccessibilityEvent(" + AccessibilityEvent.eventTypeToString(type)
- + "): "
- + AccessibilityNodeInfo.getVirtualDescendantId(event.getSourceNodeId()));
+ + "): virtualId="
+ + AccessibilityNodeInfo.getVirtualDescendantId(event.getSourceNodeId())
+ + ", client=" + getClient());
}
switch (type) {
case AccessibilityEvent.TYPE_VIEW_FOCUSED: {
diff --git a/core/java/android/view/inputmethod/InputMethodInfo.java b/core/java/android/view/inputmethod/InputMethodInfo.java
index 372362f..04028ae 100644
--- a/core/java/android/view/inputmethod/InputMethodInfo.java
+++ b/core/java/android/view/inputmethod/InputMethodInfo.java
@@ -17,6 +17,7 @@
package android.view.inputmethod;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -94,6 +95,7 @@
/**
* An array-like container of the subtypes.
*/
+ @UnsupportedAppUsage
private final InputMethodSubtypeArray mSubtypes;
private final boolean mIsAuxIme;
@@ -445,6 +447,7 @@
* Return whether or not this ime is a default ime or not.
* @hide
*/
+ @UnsupportedAppUsage
public boolean isDefault(Context context) {
if (mForceDefault) {
return true;
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index bb93af5..7762ecf 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -24,6 +24,7 @@
import android.annotation.RequiresPermission;
import android.annotation.SystemService;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Rect;
@@ -223,6 +224,7 @@
static final String PENDING_EVENT_COUNTER = "aq:imm";
+ @UnsupportedAppUsage
static InputMethodManager sInstance;
/**
@@ -270,11 +272,13 @@
/** @hide */
public static final int SHOW_IM_PICKER_MODE_EXCLUDE_AUXILIARY_SUBTYPES = 2;
+ @UnsupportedAppUsage
final IInputMethodManager mService;
final Looper mMainLooper;
// For scheduling work on the main thread. This also serves as our
// global lock.
+ @UnsupportedAppUsage
final H mH;
// Our generic input connection if the current target does not have its own.
@@ -302,16 +306,19 @@
* This is the root view of the overall window that currently has input
* method focus.
*/
+ @UnsupportedAppUsage
View mCurRootView;
/**
* This is the view that should currently be served by an input method,
* regardless of the state of setting that up.
*/
+ @UnsupportedAppUsage
View mServedView;
/**
* This is then next view that will be served by the input method, when
* we get around to updating things.
*/
+ @UnsupportedAppUsage
View mNextServedView;
/**
* This is set when we are in the process of connecting, to determine
@@ -327,6 +334,7 @@
/**
* The InputConnection that was last retrieved from the served view.
*/
+ @UnsupportedAppUsage
ControlledInputConnectionWrapper mServedInputConnectionWrapper;
/**
* The completions that were last provided by the served view.
@@ -334,7 +342,9 @@
CompletionInfo[] mCompletions;
// Cursor position on the screen.
+ @UnsupportedAppUsage
Rect mTmpCursorRect = new Rect();
+ @UnsupportedAppUsage
Rect mCursorRect = new Rect();
int mCursorSelStart;
int mCursorSelEnd;
@@ -377,10 +387,12 @@
/**
* ID of the method we are bound to.
*/
+ @UnsupportedAppUsage
String mCurId;
/**
* The actual instance of the method to make calls on it.
*/
+ @UnsupportedAppUsage
IInputMethodSession mCurMethod;
InputChannel mCurChannel;
ImeInputEventSender mCurSender;
@@ -677,6 +689,7 @@
* doesn't already exist.
* @hide
*/
+ @UnsupportedAppUsage
public static InputMethodManager getInstance() {
synchronized (InputMethodManager.class) {
if (sInstance == null) {
@@ -695,16 +708,19 @@
* if it exists.
* @hide
*/
+ @UnsupportedAppUsage
public static InputMethodManager peekInstance() {
return sInstance;
}
/** @hide */
+ @UnsupportedAppUsage
public IInputMethodClient getClient() {
return mClient;
}
/** @hide */
+ @UnsupportedAppUsage
public IInputContext getInputContext() {
return mIInputContext;
}
@@ -816,6 +832,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void registerSuggestionSpansForNotification(SuggestionSpan[] spans) {
try {
mService.registerSuggestionSpansForNotification(spans);
@@ -825,6 +842,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void notifySuggestionPicked(SuggestionSpan span, String originalString, int index) {
try {
mService.notifySuggestionPicked(span, originalString, index);
@@ -930,6 +948,7 @@
/**
* Disconnect any existing input connection, clearing the served view.
*/
+ @UnsupportedAppUsage
void finishInputLocked() {
mNextServedView = null;
if (mServedView != null) {
@@ -1094,6 +1113,7 @@
* @hide
*/
@Deprecated
+ @UnsupportedAppUsage
public void showSoftInputUnchecked(int flags, ResultReceiver resultReceiver) {
try {
Log.w(TAG, "showSoftInputUnchecked() is a hidden method, which will be removed "
@@ -1414,6 +1434,7 @@
* input method started before.
* @hide
*/
+ @UnsupportedAppUsage
public void windowDismissed(IBinder appWindowToken) {
checkFocus();
synchronized (mH) {
@@ -1428,6 +1449,7 @@
* Call this when a view receives focus.
* @hide
*/
+ @UnsupportedAppUsage
public void focusIn(View view) {
synchronized (mH) {
focusInLocked(view);
@@ -1458,6 +1480,7 @@
* Call this when a view loses focus.
* @hide
*/
+ @UnsupportedAppUsage
public void focusOut(View view) {
synchronized (mH) {
if (DEBUG) Log.v(TAG, "focusOut: view=" + dumpViewInfo(view)
@@ -1502,6 +1525,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public void checkFocus() {
if (checkFocusNoStartInput(false)) {
startInputInner(InputMethodClient.START_INPUT_REASON_CHECK_FOCUS, null, 0, 0, 0);
@@ -1549,6 +1573,7 @@
return true;
}
+ @UnsupportedAppUsage
void closeCurrentInput() {
try {
mService.hideSoftInput(mClient, HIDE_NOT_ALWAYS, null);
@@ -1616,6 +1641,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void onPreWindowFocus(View rootView, boolean hasWindowFocus) {
synchronized (mH) {
if (rootView == null) {
@@ -1719,6 +1745,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isCursorAnchorInfoEnabled() {
synchronized (mH) {
final boolean isImmediate = (mRequestUpdateCursorAnchorInfoMonitorMode &
@@ -1734,6 +1761,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setUpdateCursorAnchorInfoMode(int flags) {
synchronized (mH) {
mRequestUpdateCursorAnchorInfoMonitorMode = flags;
@@ -2243,6 +2271,7 @@
* Notify that a user took some action with this input method.
* @hide
*/
+ @UnsupportedAppUsage
public void notifyUserAction() {
synchronized (mH) {
if (mLastSentUserActionNotificationSequenceNumber ==
@@ -2311,6 +2340,7 @@
* @return The current height of the input method window.
* @hide
*/
+ @UnsupportedAppUsage
public int getInputMethodWindowVisibleHeight() {
synchronized (mH) {
try {
diff --git a/core/java/android/view/inputmethod/InputMethodSubtypeArray.java b/core/java/android/view/inputmethod/InputMethodSubtypeArray.java
index 6a748ce..8dd0dcd 100644
--- a/core/java/android/view/inputmethod/InputMethodSubtypeArray.java
+++ b/core/java/android/view/inputmethod/InputMethodSubtypeArray.java
@@ -16,6 +16,7 @@
package android.view.inputmethod;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.util.Slog;
@@ -49,6 +50,7 @@
* @param subtypes A list of {@link InputMethodSubtype} from which
* {@link InputMethodSubtypeArray} will be created.
*/
+ @UnsupportedAppUsage
public InputMethodSubtypeArray(final List<InputMethodSubtype> subtypes) {
if (subtypes == null) {
mCount = 0;
diff --git a/core/java/android/view/textclassifier/TextClassificationManager.java b/core/java/android/view/textclassifier/TextClassificationManager.java
index 201218ba..ed86206 100644
--- a/core/java/android/view/textclassifier/TextClassificationManager.java
+++ b/core/java/android/view/textclassifier/TextClassificationManager.java
@@ -19,6 +19,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.database.ContentObserver;
import android.os.ServiceManager;
@@ -108,6 +109,7 @@
* @see TextClassifier#SYSTEM
* @hide
*/
+ @UnsupportedAppUsage
public TextClassifier getTextClassifier(@TextClassifierType int type) {
switch (type) {
case TextClassifier.LOCAL:
diff --git a/core/java/android/view/textclassifier/TextClassifier.java b/core/java/android/view/textclassifier/TextClassifier.java
index 1505863..9692579 100644
--- a/core/java/android/view/textclassifier/TextClassifier.java
+++ b/core/java/android/view/textclassifier/TextClassifier.java
@@ -21,6 +21,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringDef;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.WorkerThread;
import android.os.LocaleList;
import android.os.Looper;
@@ -213,6 +214,7 @@
// TODO: Remove once apps can build against the latest sdk.
/** @hide */
+ @UnsupportedAppUsage
default TextSelection suggestSelection(
@NonNull CharSequence text,
@IntRange(from = 0) int selectionStartIndex,
@@ -292,6 +294,7 @@
// TODO: Remove once apps can build against the latest sdk.
/** @hide */
+ @UnsupportedAppUsage
default TextClassification classifyText(
@NonNull CharSequence text,
@IntRange(from = 0) int startIndex,
@@ -333,6 +336,7 @@
// TODO: Remove once apps can build against the latest sdk.
/** @hide */
+ @UnsupportedAppUsage
default TextLinks generateLinks(
@NonNull CharSequence text, @Nullable TextLinks.Options options) {
if (options == null) {
diff --git a/core/java/android/view/textclassifier/TextLinks.java b/core/java/android/view/textclassifier/TextLinks.java
index e7faf14..1cac3ed 100644
--- a/core/java/android/view/textclassifier/TextLinks.java
+++ b/core/java/android/view/textclassifier/TextLinks.java
@@ -20,6 +20,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.os.LocaleList;
import android.os.Parcel;
@@ -652,6 +653,7 @@
private String mCallingPackageName;
+ @UnsupportedAppUsage
public Options() {
this(null, null);
}
diff --git a/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java b/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java
index f7d75cd..b530ddf 100644
--- a/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java
+++ b/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.metrics.LogMaker;
import android.util.Log;
@@ -99,6 +100,7 @@
private boolean mSmartSelectionTriggered;
private String mModelName;
+ @UnsupportedAppUsage
public SmartSelectionEventTracker(@NonNull Context context, @WidgetType int widgetType) {
mWidgetType = widgetType;
mWidgetVersion = null;
@@ -117,6 +119,7 @@
*
* @param event the selection event
*/
+ @UnsupportedAppUsage
public void logEvent(@NonNull SelectionEvent event) {
Preconditions.checkNotNull(event);
@@ -440,6 +443,7 @@
*
* @param start the word index of the selected word
*/
+ @UnsupportedAppUsage
public static SelectionEvent selectionStarted(int start) {
return new SelectionEvent(
start, start + 1, EventType.SELECTION_STARTED,
@@ -453,6 +457,7 @@
* @param start the start word (inclusive) index of the selection
* @param end the end word (exclusive) index of the selection
*/
+ @UnsupportedAppUsage
public static SelectionEvent selectionModified(int start, int end) {
return new SelectionEvent(
start, end, EventType.SELECTION_MODIFIED,
@@ -468,6 +473,7 @@
* @param classification the TextClassification object returned by the TextClassifier that
* classified the selected text
*/
+ @UnsupportedAppUsage
public static SelectionEvent selectionModified(
int start, int end, @NonNull TextClassification classification) {
final String entityType = classification.getEntityCount() > 0
@@ -487,6 +493,7 @@
* @param selection the TextSelection object returned by the TextClassifier for the
* specified selection
*/
+ @UnsupportedAppUsage
public static SelectionEvent selectionModified(
int start, int end, @NonNull TextSelection selection) {
final boolean smartSelection = getSourceClassifier(selection.getId())
@@ -515,6 +522,7 @@
* @param end the end word (exclusive) index of the selection
* @param actionType the action that was performed on the selection
*/
+ @UnsupportedAppUsage
public static SelectionEvent selectionAction(
int start, int end, @ActionType int actionType) {
return new SelectionEvent(
@@ -532,6 +540,7 @@
* @param classification the TextClassification object returned by the TextClassifier that
* classified the selected text
*/
+ @UnsupportedAppUsage
public static SelectionEvent selectionAction(
int start, int end, @ActionType int actionType,
@NonNull TextClassification classification) {
diff --git a/core/java/android/view/textservice/SpellCheckerSession.java b/core/java/android/view/textservice/SpellCheckerSession.java
index 886f5c8..9733701 100644
--- a/core/java/android/view/textservice/SpellCheckerSession.java
+++ b/core/java/android/view/textservice/SpellCheckerSession.java
@@ -16,6 +16,7 @@
package android.view.textservice;
+import android.annotation.UnsupportedAppUsage;
import android.os.Binder;
import android.os.Handler;
import android.os.HandlerThread;
@@ -97,6 +98,7 @@
private final InternalListener mInternalListener;
private final ITextServicesManager mTextServicesManager;
private final SpellCheckerInfo mSpellCheckerInfo;
+ @UnsupportedAppUsage
private final SpellCheckerSessionListener mSpellCheckerSessionListener;
private final SpellCheckerSessionListenerImpl mSpellCheckerSessionListenerImpl;
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java
index 6644a85..4c6862c 100644
--- a/core/java/android/view/textservice/TextServicesManager.java
+++ b/core/java/android/view/textservice/TextServicesManager.java
@@ -17,6 +17,7 @@
package android.view.textservice;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.os.Bundle;
import android.os.RemoteException;
@@ -85,6 +86,7 @@
* Retrieve the global TextServicesManager instance, creating it if it doesn't already exist.
* @hide
*/
+ @UnsupportedAppUsage
public static TextServicesManager getInstance() {
synchronized (TextServicesManager.class) {
if (sInstance == null) {
@@ -192,6 +194,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public SpellCheckerInfo[] getEnabledSpellCheckers() {
try {
final SpellCheckerInfo[] retval = mService.getEnabledSpellCheckers();
@@ -207,6 +210,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public SpellCheckerInfo getCurrentSpellChecker() {
try {
// Passing null as a locale for ICS
@@ -219,6 +223,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public SpellCheckerSubtype getCurrentSpellCheckerSubtype(
boolean allowImplicitlySelectedSubtype) {
try {
@@ -231,6 +236,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public boolean isSpellCheckerEnabled() {
try {
return mService.isSpellCheckerEnabled();
diff --git a/core/java/android/webkit/CacheManager.java b/core/java/android/webkit/CacheManager.java
index fc76029..563e00e 100644
--- a/core/java/android/webkit/CacheManager.java
+++ b/core/java/android/webkit/CacheManager.java
@@ -17,6 +17,7 @@
package android.webkit;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import java.io.File;
import java.io.IOException;
@@ -50,22 +51,37 @@
@Deprecated
public static class CacheResult {
// these fields are saved to the database
+ @UnsupportedAppUsage
int httpStatusCode;
+ @UnsupportedAppUsage
long contentLength;
+ @UnsupportedAppUsage
long expires;
+ @UnsupportedAppUsage
String expiresString;
+ @UnsupportedAppUsage
String localPath;
+ @UnsupportedAppUsage
String lastModified;
+ @UnsupportedAppUsage
String etag;
+ @UnsupportedAppUsage
String mimeType;
+ @UnsupportedAppUsage
String location;
+ @UnsupportedAppUsage
String encoding;
+ @UnsupportedAppUsage
String contentdisposition;
+ @UnsupportedAppUsage
String crossDomain;
// these fields are NOT saved to the database
+ @UnsupportedAppUsage
InputStream inStream;
+ @UnsupportedAppUsage
OutputStream outStream;
+ @UnsupportedAppUsage
File outFile;
/**
@@ -73,6 +89,7 @@
*
* @return the status code of this cache entry
*/
+ @UnsupportedAppUsage
public int getHttpStatusCode() {
return httpStatusCode;
}
@@ -82,6 +99,7 @@
*
* @return the content length of this cache entry
*/
+ @UnsupportedAppUsage
public long getContentLength() {
return contentLength;
}
@@ -93,6 +111,7 @@
*
* @return the path of the file used to store this cache entry
*/
+ @UnsupportedAppUsage
public String getLocalPath() {
return localPath;
}
@@ -103,6 +122,7 @@
*
* @return the expiry date of this cache entry
*/
+ @UnsupportedAppUsage
public long getExpires() {
return expires;
}
@@ -113,6 +133,7 @@
* @return the expiry date of this cache entry
*
*/
+ @UnsupportedAppUsage
public String getExpiresString() {
return expiresString;
}
@@ -123,6 +144,7 @@
*
* @return the date at which this cache entry was last modified
*/
+ @UnsupportedAppUsage
public String getLastModified() {
return lastModified;
}
@@ -132,6 +154,7 @@
*
* @return the entity tag of this cache entry
*/
+ @UnsupportedAppUsage
public String getETag() {
return etag;
}
@@ -141,6 +164,7 @@
*
* @return the MIME type of this cache entry
*/
+ @UnsupportedAppUsage
public String getMimeType() {
return mimeType;
}
@@ -151,6 +175,7 @@
*
* @return the HTTP 'Location' header for this cache entry
*/
+ @UnsupportedAppUsage
public String getLocation() {
return location;
}
@@ -160,6 +185,7 @@
*
* @return the encoding of this cache entry
*/
+ @UnsupportedAppUsage
public String getEncoding() {
return encoding;
}
@@ -171,6 +197,7 @@
* @return the HTTP 'Content-Disposition' header for this cache entry
*
*/
+ @UnsupportedAppUsage
public String getContentDisposition() {
return contentdisposition;
}
@@ -182,6 +209,7 @@
*
* @return an input stream to the content of this cache entry
*/
+ @UnsupportedAppUsage
public InputStream getInputStream() {
return inStream;
}
@@ -194,6 +222,7 @@
* @return an output stream to the content of this cache entry
*/
// Note that this is always null for objects returned by getCacheFile()!
+ @UnsupportedAppUsage
public OutputStream getOutputStream() {
return outStream;
}
@@ -204,6 +233,7 @@
*
* @param stream an input stream to the content of this cache entry
*/
+ @UnsupportedAppUsage
public void setInputStream(InputStream stream) {
this.inStream = stream;
}
@@ -213,6 +243,7 @@
*
* @param encoding the encoding of this cache entry
*/
+ @UnsupportedAppUsage
public void setEncoding(String encoding) {
this.encoding = encoding;
}
@@ -235,6 +266,7 @@
*/
@Deprecated
@Nullable
+ @UnsupportedAppUsage
public static File getCacheFileBaseDir() {
return null;
}
@@ -246,6 +278,7 @@
* @deprecated This method no longer has any effect and always returns {@code false}.
*/
@Deprecated
+ @UnsupportedAppUsage
public static boolean cacheDisabled() {
return false;
}
@@ -259,6 +292,7 @@
* @deprecated This method no longer has any effect and always returns {@code false}.
*/
@Deprecated
+ @UnsupportedAppUsage
public static boolean startCacheTransaction() {
return false;
}
@@ -271,6 +305,7 @@
* @deprecated This method no longer has any effect and always returns {@code false}.
*/
@Deprecated
+ @UnsupportedAppUsage
public static boolean endCacheTransaction() {
return false;
}
@@ -290,6 +325,7 @@
*/
@Deprecated
@Nullable
+ @UnsupportedAppUsage
public static CacheResult getCacheFile(String url,
Map<String, String> headers) {
return null;
@@ -304,10 +340,12 @@
* @deprecated Access to the HTTP cache will be removed in a future release.
*/
@Deprecated
+ @UnsupportedAppUsage
public static void saveCacheFile(String url, CacheResult cacheResult) {
saveCacheFile(url, 0, cacheResult);
}
+ @UnsupportedAppUsage
static void saveCacheFile(String url, long postIdentifier,
CacheResult cacheRet) {
try {
diff --git a/core/java/android/webkit/ConsoleMessage.java b/core/java/android/webkit/ConsoleMessage.java
index a9c351a..6051956 100644
--- a/core/java/android/webkit/ConsoleMessage.java
+++ b/core/java/android/webkit/ConsoleMessage.java
@@ -16,6 +16,8 @@
package android.webkit;
+import android.annotation.UnsupportedAppUsage;
+
/**
* Public class representing a JavaScript console message from WebCore. This could be a issued
* by a call to one of the <code>console</code> logging functions (e.g.
@@ -34,9 +36,13 @@
DEBUG
};
+ @UnsupportedAppUsage
private MessageLevel mLevel;
+ @UnsupportedAppUsage
private String mMessage;
+ @UnsupportedAppUsage
private String mSourceId;
+ @UnsupportedAppUsage
private int mLineNumber;
public ConsoleMessage(String message, String sourceId, int lineNumber, MessageLevel msgLevel) {
diff --git a/core/java/android/webkit/JsResult.java b/core/java/android/webkit/JsResult.java
index d36ab418..5bf6aab 100644
--- a/core/java/android/webkit/JsResult.java
+++ b/core/java/android/webkit/JsResult.java
@@ -17,6 +17,7 @@
package android.webkit;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
/**
* An instance of this class is passed as a parameter in various {@link WebChromeClient} action
@@ -34,6 +35,7 @@
public void onJsResultComplete(JsResult result);
}
// This is the caller of the prompt and is the object that is waiting.
+ @UnsupportedAppUsage
private final ResultReceiver mReceiver;
// This is a basic result of a confirm or prompt dialog.
private boolean mResult;
diff --git a/core/java/android/webkit/PluginData.java b/core/java/android/webkit/PluginData.java
index 88fc9b7..8aeeb1c 100644
--- a/core/java/android/webkit/PluginData.java
+++ b/core/java/android/webkit/PluginData.java
@@ -16,6 +16,7 @@
package android.webkit;
+import android.annotation.UnsupportedAppUsage;
import java.io.InputStream;
import java.util.Map;
@@ -69,6 +70,7 @@
* deprecated, so is this class.
*/
@Deprecated
+ @UnsupportedAppUsage
public PluginData(
InputStream stream,
long length,
@@ -90,6 +92,7 @@
* deprecated, so is this class.
*/
@Deprecated
+ @UnsupportedAppUsage
public InputStream getInputStream() {
return mStream;
}
@@ -104,6 +107,7 @@
* deprecated, so is this class.
*/
@Deprecated
+ @UnsupportedAppUsage
public long getContentLength() {
return mContentLength;
}
@@ -121,6 +125,7 @@
* deprecated, so is this class.
*/
@Deprecated
+ @UnsupportedAppUsage
public Map<String, String[]> getHeaders() {
return mHeaders;
}
@@ -135,6 +140,7 @@
* deprecated, so is this class.
*/
@Deprecated
+ @UnsupportedAppUsage
public int getStatusCode() {
return mStatusCode;
}
diff --git a/core/java/android/webkit/URLUtil.java b/core/java/android/webkit/URLUtil.java
index ed122a6..5d704cb0 100644
--- a/core/java/android/webkit/URLUtil.java
+++ b/core/java/android/webkit/URLUtil.java
@@ -17,6 +17,7 @@
package android.webkit;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.net.ParseException;
import android.net.Uri;
import android.net.WebAddress;
@@ -139,6 +140,7 @@
/**
* @return {@code true} if the url is correctly URL encoded
*/
+ @UnsupportedAppUsage
static boolean verifyURLEncoding(String url) {
int count = url.length();
if (count == 0) {
@@ -181,6 +183,7 @@
* @return {@code true} if the url is a resource file.
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isResourceUrl(String url) {
return (null != url) && url.startsWith(RESOURCE_BASE);
}
@@ -398,6 +401,7 @@
* Unfortunately some servers do not quote the value so to maintain
* consistent behaviour with other browsers, we allow unquoted values too.
*/
+ @UnsupportedAppUsage
static String parseContentDisposition(String contentDisposition) {
try {
Matcher m = CONTENT_DISPOSITION_PATTERN.matcher(contentDisposition);
diff --git a/core/java/android/webkit/UrlInterceptHandler.java b/core/java/android/webkit/UrlInterceptHandler.java
index 0a6e51f..f23aae6 100644
--- a/core/java/android/webkit/UrlInterceptHandler.java
+++ b/core/java/android/webkit/UrlInterceptHandler.java
@@ -17,6 +17,7 @@
package android.webkit;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.webkit.CacheManager.CacheResult;
import android.webkit.PluginData;
@@ -44,6 +45,7 @@
*/
@Deprecated
@Nullable
+ @UnsupportedAppUsage
CacheResult service(String url, @Nullable Map<String, String> headers);
/**
@@ -60,5 +62,6 @@
*/
@Deprecated
@Nullable
+ @UnsupportedAppUsage
PluginData getPluginData(String url, @Nullable Map<String, String> headers);
}
diff --git a/core/java/android/webkit/UrlInterceptRegistry.java b/core/java/android/webkit/UrlInterceptRegistry.java
index 700d6d9..eeb28d7 100644
--- a/core/java/android/webkit/UrlInterceptRegistry.java
+++ b/core/java/android/webkit/UrlInterceptRegistry.java
@@ -17,6 +17,7 @@
package android.webkit;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.webkit.CacheManager.CacheResult;
import android.webkit.PluginData;
import android.webkit.UrlInterceptHandler;
@@ -55,6 +56,7 @@
* deprecated, so is this class.
*/
@Deprecated
+ @UnsupportedAppUsage
public static synchronized void setUrlInterceptDisabled(boolean disabled) {
mDisabled = disabled;
}
@@ -85,6 +87,7 @@
* deprecated, so is this class.
*/
@Deprecated
+ @UnsupportedAppUsage
public static synchronized boolean registerHandler(
UrlInterceptHandler handler) {
if (!getHandlers().contains(handler)) {
@@ -106,6 +109,7 @@
* deprecated, so is this class.
*/
@Deprecated
+ @UnsupportedAppUsage
public static synchronized boolean unregisterHandler(
UrlInterceptHandler handler) {
return getHandlers().remove(handler);
@@ -152,6 +156,7 @@
*/
@Deprecated
@Nullable
+ @UnsupportedAppUsage
public static synchronized PluginData getPluginData(
String url, Map<String, String> headers) {
if (urlInterceptDisabled()) {
diff --git a/core/java/android/webkit/WebResourceResponse.java b/core/java/android/webkit/WebResourceResponse.java
index 7bc7b07..aae3056 100644
--- a/core/java/android/webkit/WebResourceResponse.java
+++ b/core/java/android/webkit/WebResourceResponse.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import java.io.InputStream;
import java.io.StringBufferInputStream;
@@ -29,9 +30,11 @@
* response when the WebView requests a particular resource.
*/
public class WebResourceResponse {
+ @UnsupportedAppUsage
private boolean mImmutable;
private String mMimeType;
private String mEncoding;
+ @UnsupportedAppUsage
private int mStatusCode;
private String mReasonPhrase;
private Map<String, String> mResponseHeaders;
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index a085395..c30edd3 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import java.lang.annotation.ElementType;
@@ -92,6 +93,7 @@
TextSize(int size) {
value = size;
}
+ @UnsupportedAppUsage
int value;
}
@@ -579,6 +581,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
+ @UnsupportedAppUsage
public void setUseDoubleTree(boolean use) {
// Specified to do nothing, so no need for derived classes to override.
}
@@ -591,6 +594,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
+ @UnsupportedAppUsage
public boolean getUseDoubleTree() {
// Returns false unconditionally, so no need for derived classes to override.
return false;
@@ -1004,6 +1008,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2}
*/
@Deprecated
+ @UnsupportedAppUsage
public void setPluginsPath(String pluginsPath) {
// Specified to do nothing, so no need for derived classes to override.
}
@@ -1201,6 +1206,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2}
*/
@Deprecated
+ @UnsupportedAppUsage
public String getPluginsPath() {
// Unconditionally returns empty string, so no need for derived classes to override.
return "";
diff --git a/core/java/android/webkit/WebSyncManager.java b/core/java/android/webkit/WebSyncManager.java
index 03b94e7..3fa1b01 100644
--- a/core/java/android/webkit/WebSyncManager.java
+++ b/core/java/android/webkit/WebSyncManager.java
@@ -16,6 +16,7 @@
package android.webkit;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
/**
@@ -65,5 +66,6 @@
protected void onSyncInit() {
}
+ @UnsupportedAppUsage
abstract void syncFromRamToFlash();
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 9573f48..f343a52 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -20,6 +20,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.Widget;
import android.content.Context;
import android.content.Intent;
@@ -107,6 +108,7 @@
// Throwing an exception for incorrect thread usage if the
// build target is JB MR2 or newer. Defaults to false, and is
// set in the WebView constructor.
+ @UnsupportedAppUsage
private static volatile boolean sEnforceThreadChecking = false;
/**
@@ -389,6 +391,7 @@
* @hide This is used internally by dumprendertree, as it requires the JavaScript interfaces to
* be added synchronously, before a subsequent loadUrl call takes effect.
*/
+ @UnsupportedAppUsage
protected WebView(Context context, AttributeSet attrs, int defStyleAttr,
Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) {
this(context, attrs, defStyleAttr, 0, javaScriptInterfaces, privateBrowsing);
@@ -398,6 +401,7 @@
* @hide
*/
@SuppressWarnings("deprecation") // for super() call into deprecated base class constructor.
+ @UnsupportedAppUsage
protected WebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes,
Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) {
super(context, attrs, defStyleAttr, defStyleRes);
@@ -475,6 +479,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
+ @UnsupportedAppUsage
public int getVisibleTitleHeight() {
checkThread();
return mProvider.getVisibleTitleHeight();
@@ -579,6 +584,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
+ @UnsupportedAppUsage
public static void enablePlatformNotifications() {
// noop
}
@@ -591,6 +597,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
+ @UnsupportedAppUsage
public static void disablePlatformNotifications() {
// noop
}
@@ -600,6 +607,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static void freeMemoryForTests() {
getFactory().getStatics().freeMemoryForTests();
}
@@ -644,6 +652,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
+ @UnsupportedAppUsage
public boolean savePicture(Bundle b, final File dest) {
checkThread();
return mProvider.savePicture(b, dest);
@@ -661,6 +670,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
+ @UnsupportedAppUsage
public boolean restorePicture(Bundle b, File src) {
checkThread();
return mProvider.restorePicture(b, src);
@@ -1275,6 +1285,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public String getTouchIconUrl() {
return mProvider.getTouchIconUrl();
}
@@ -1307,6 +1318,7 @@
* @hide
*/
@ViewDebug.ExportedProperty(category = "webview")
+ @UnsupportedAppUsage
public int getContentWidth() {
return mProvider.getContentWidth();
}
@@ -1357,6 +1369,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isPaused() {
return mProvider.isPaused();
}
@@ -1866,6 +1879,7 @@
* @hide
*/
@Deprecated
+ @UnsupportedAppUsage
public static synchronized PluginList getPluginList() {
return new PluginList();
}
@@ -1933,6 +1947,7 @@
* @hide
*/
@Deprecated
+ @UnsupportedAppUsage
public void refreshPlugins(boolean reloadOpenPages) {
checkThread();
}
@@ -1945,6 +1960,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
+ @UnsupportedAppUsage
public void emulateShiftHeld() {
checkThread();
}
@@ -2005,6 +2021,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN}
*/
@Deprecated
+ @UnsupportedAppUsage
public View getZoomControls() {
checkThread();
return mProvider.getZoomControls();
@@ -2080,6 +2097,7 @@
* @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
+ @UnsupportedAppUsage
public void debugDump() {
checkThread();
}
@@ -2365,6 +2383,7 @@
}
// Only used by android.webkit.FindActionModeCallback.
+ @UnsupportedAppUsage
void notifyFindDialogDismissed() {
checkThread();
mProvider.notifyFindDialogDismissed();
@@ -2374,6 +2393,7 @@
// Private internal stuff
//-------------------------------------------------------------------------
+ @UnsupportedAppUsage
private WebViewProvider mProvider;
/**
@@ -2417,12 +2437,15 @@
}
}
+ @UnsupportedAppUsage
private static WebViewFactoryProvider getFactory() {
return WebViewFactory.getProvider();
}
+ @UnsupportedAppUsage
private final Looper mWebViewThread = Looper.myLooper();
+ @UnsupportedAppUsage
private void checkThread() {
// Ignore mWebViewThread == null because this can be called during in the super class
// constructor, before this class's own constructor has even started.
@@ -2703,6 +2726,7 @@
/** @hide */
@Override
+ @UnsupportedAppUsage
protected void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar,
int l, int t, int r, int b) {
mProvider.getViewDelegate().onDrawVerticalScrollBar(canvas, scrollBar, l, t, r, b);
@@ -2774,6 +2798,7 @@
/** @hide */
@Override
+ @UnsupportedAppUsage
protected boolean setFrame(int left, int top, int right, int bottom) {
return mProvider.getViewDelegate().setFrame(left, top, right, bottom);
}
diff --git a/core/java/android/webkit/WebViewDelegate.java b/core/java/android/webkit/WebViewDelegate.java
index f067091..ba66571 100644
--- a/core/java/android/webkit/WebViewDelegate.java
+++ b/core/java/android/webkit/WebViewDelegate.java
@@ -19,6 +19,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.app.Application;
import android.app.ResourcesManager;
@@ -45,6 +46,7 @@
@SystemApi
public final class WebViewDelegate {
+ @UnsupportedAppUsage
/* package */ WebViewDelegate() { }
/**
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index e0ccda9..e9a9e8f 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -17,6 +17,7 @@
package android.webkit;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.Application;
@@ -59,8 +60,10 @@
// Cache the factory both for efficiency, and ensure any one process gets all webviews from the
// same provider.
+ @UnsupportedAppUsage
private static WebViewFactoryProvider sProviderInstance;
private static final Object sProviderLock = new Object();
+ @UnsupportedAppUsage
private static PackageInfo sPackageInfo;
private static Boolean sWebViewSupported;
private static boolean sWebViewDisabled;
@@ -222,6 +225,7 @@
return loadNativeRet;
}
+ @UnsupportedAppUsage
static WebViewFactoryProvider getProvider() {
synchronized (sProviderLock) {
// For now the main purpose of this function (and the factory abstraction) is to keep
@@ -359,6 +363,7 @@
}
}
+ @UnsupportedAppUsage
private static Context getWebViewContextAndSetProvider() throws MissingWebViewPackageException {
Application initialApplication = AppGlobals.getInitialApplication();
try {
@@ -428,6 +433,7 @@
}
}
+ @UnsupportedAppUsage
private static Class<WebViewFactoryProvider> getProviderClass() {
Context webViewContext = null;
Application initialApplication = AppGlobals.getInitialApplication();
@@ -509,6 +515,7 @@
private static String WEBVIEW_UPDATE_SERVICE_NAME = "webviewupdate";
/** @hide */
+ @UnsupportedAppUsage
public static IWebViewUpdateService getUpdateService() {
if (isWebViewSupported()) {
return getUpdateServiceUnchecked();
diff --git a/core/java/android/webkit/WebViewProviderInfo.java b/core/java/android/webkit/WebViewProviderInfo.java
index b0e9f01..1704757 100644
--- a/core/java/android/webkit/WebViewProviderInfo.java
+++ b/core/java/android/webkit/WebViewProviderInfo.java
@@ -17,6 +17,7 @@
package android.webkit;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.content.pm.Signature;
import android.os.Parcel;
import android.os.Parcelable;
@@ -56,6 +57,7 @@
}
};
+ @UnsupportedAppUsage
private WebViewProviderInfo(Parcel in) {
packageName = in.readString();
description = in.readString();
diff --git a/core/java/android/webkit/WebViewProviderResponse.java b/core/java/android/webkit/WebViewProviderResponse.java
index c0aeb59..0edcb6f 100644
--- a/core/java/android/webkit/WebViewProviderResponse.java
+++ b/core/java/android/webkit/WebViewProviderResponse.java
@@ -16,6 +16,7 @@
package android.webkit;
+import android.annotation.UnsupportedAppUsage;
import android.content.pm.PackageInfo;
import android.os.Parcel;
import android.os.Parcelable;
@@ -56,6 +57,7 @@
out.writeInt(status);
}
+ @UnsupportedAppUsage
public final PackageInfo packageInfo;
public final int status;
}
diff --git a/core/java/android/webkit/WebViewUpdateService.java b/core/java/android/webkit/WebViewUpdateService.java
index 629891c..12d3221 100644
--- a/core/java/android/webkit/WebViewUpdateService.java
+++ b/core/java/android/webkit/WebViewUpdateService.java
@@ -17,6 +17,7 @@
package android.webkit;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.RemoteException;
/**
@@ -25,6 +26,7 @@
@SystemApi
public final class WebViewUpdateService {
+ @UnsupportedAppUsage
private WebViewUpdateService () {}
/**
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 1475cc9..07096e8 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -20,6 +20,7 @@
import android.annotation.DrawableRes;
import android.annotation.NonNull;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
@@ -248,6 +249,7 @@
/**
* Controls CHOICE_MODE_MULTIPLE_MODAL. null when inactive.
*/
+ @UnsupportedAppUsage
ActionMode mChoiceActionMode;
/**
@@ -276,16 +278,19 @@
/**
* Controls how the next layout will happen
*/
+ @UnsupportedAppUsage
int mLayoutMode = LAYOUT_NORMAL;
/**
* Should be used by subclasses to listen to changes in the dataset
*/
+ @UnsupportedAppUsage
AdapterDataSetObserver mDataSetObserver;
/**
* The adapter containing the data to be displayed by this view
*/
+ @UnsupportedAppUsage
ListAdapter mAdapter;
/**
@@ -311,22 +316,26 @@
/**
* The drawable used to draw the selector
*/
+ @UnsupportedAppUsage
Drawable mSelector;
/**
* The current position of the selector in the list.
*/
+ @UnsupportedAppUsage
int mSelectorPosition = INVALID_POSITION;
/**
* Defines the selector's location and dimension at drawing time
*/
+ @UnsupportedAppUsage
Rect mSelectorRect = new Rect();
/**
* The data set used to store unused views that should be reused during the next layout
* to avoid creating new ones
*/
+ @UnsupportedAppUsage
final RecycleBin mRecycler = new RecycleBin();
/**
@@ -337,6 +346,7 @@
/**
* The selection's top padding
*/
+ @UnsupportedAppUsage
int mSelectionTopPadding = 0;
/**
@@ -347,6 +357,7 @@
/**
* The selection's bottom padding
*/
+ @UnsupportedAppUsage
int mSelectionBottomPadding = 0;
/**
@@ -379,6 +390,7 @@
/**
* The position of the view that received the down motion event
*/
+ @UnsupportedAppUsage
int mMotionPosition;
/**
@@ -399,12 +411,14 @@
/**
* The Y value associated with the the down motion event
*/
+ @UnsupportedAppUsage
int mMotionY;
/**
* One of TOUCH_MODE_REST, TOUCH_MODE_DOWN, TOUCH_MODE_TAP, TOUCH_MODE_SCROLL, or
* TOUCH_MODE_DONE_WAITING
*/
+ @UnsupportedAppUsage
int mTouchMode = TOUCH_MODE_REST;
/**
@@ -420,16 +434,19 @@
/**
* Determines speed during touch scrolling
*/
+ @UnsupportedAppUsage
private VelocityTracker mVelocityTracker;
/**
* Handles one frame of a fling
*/
+ @UnsupportedAppUsage
private FlingRunnable mFlingRunnable;
/**
* Handles scrolling between positions within the list.
*/
+ @UnsupportedAppUsage
AbsPositionScroller mPositionScroller;
/**
@@ -463,11 +480,13 @@
/**
* Optional callback to notify client when scroll position has changed
*/
+ @UnsupportedAppUsage
private OnScrollListener mOnScrollListener;
/**
* Keeps track of our accessory window
*/
+ @UnsupportedAppUsage
PopupWindow mPopup;
/**
@@ -501,6 +520,7 @@
*/
int mResurrectToPosition = INVALID_POSITION;
+ @UnsupportedAppUsage
private ContextMenuInfo mContextMenuInfo = null;
/**
@@ -547,11 +567,13 @@
/**
* The last CheckForLongPress runnable we posted, if any
*/
+ @UnsupportedAppUsage
private CheckForLongPress mPendingCheckForLongPress;
/**
* The last CheckForTap runnable we posted, if any
*/
+ @UnsupportedAppUsage
private CheckForTap mPendingCheckForTap;
/**
@@ -590,6 +612,7 @@
/**
* The select child's view (from the adapter's getView) is enabled.
*/
+ @UnsupportedAppUsage
private boolean mIsChildViewEnabled;
/**
@@ -606,6 +629,7 @@
/**
* Helper object that renders and controls the fast scroll thumb.
*/
+ @UnsupportedAppUsage
private FastScroller mFastScroll;
/**
@@ -616,6 +640,7 @@
private boolean mGlobalLayoutListenerAddedFilter;
+ @UnsupportedAppUsage
private int mTouchSlop;
private float mDensityScale;
@@ -627,6 +652,7 @@
private Runnable mClearScrollingCache;
Runnable mPositionScrollAfterLayout;
private int mMinimumVelocity;
+ @UnsupportedAppUsage
private int mMaximumVelocity;
private float mVelocityScale = 1.0f;
@@ -651,6 +677,7 @@
* ID of the active pointer. This is used to retain consistency during
* drags/flings if multiple pointers are used.
*/
+ @UnsupportedAppUsage
private int mActivePointerId = INVALID_POINTER;
/**
@@ -662,11 +689,13 @@
/**
* Maximum distance to overscroll by during edge effects
*/
+ @UnsupportedAppUsage
int mOverscrollDistance;
/**
* Maximum distance to overfling during edge effects
*/
+ @UnsupportedAppUsage
int mOverflingDistance;
// These two EdgeGlows are always set and used together.
@@ -675,11 +704,13 @@
/**
* Tracks the state of the top edge glow.
*/
+ @UnsupportedAppUsage
private EdgeEffect mEdgeGlowTop;
/**
* Tracks the state of the bottom edge glow.
*/
+ @UnsupportedAppUsage
private EdgeEffect mEdgeGlowBottom;
/**
@@ -1418,6 +1449,7 @@
* @hide
*/
@Override
+ @UnsupportedAppUsage
protected boolean isVerticalScrollBarHidden() {
return isFastScrollEnabled();
}
@@ -1469,6 +1501,7 @@
/**
* Notify our scroll listener (if there is one) of a change in scroll state
*/
+ @UnsupportedAppUsage
void invokeOnItemScrollListener() {
if (mFastScroll != null) {
mFastScroll.onScroll(mFirstPosition, getChildCount(), mItemCount);
@@ -1691,7 +1724,9 @@
static class SavedState extends BaseSavedState {
long selectedId;
+ @UnsupportedAppUsage
long firstId;
+ @UnsupportedAppUsage
int viewTop;
int position;
int height;
@@ -2228,6 +2263,7 @@
}
}
+ @UnsupportedAppUsage
private boolean canScrollUp() {
boolean canScrollUp;
// 0th element is not visible
@@ -2244,6 +2280,7 @@
return canScrollUp;
}
+ @UnsupportedAppUsage
private boolean canScrollDown() {
boolean canScrollDown;
int count = getChildCount();
@@ -2571,6 +2608,7 @@
positionSelector(position, sel, false, -1, -1);
}
+ @UnsupportedAppUsage
private void positionSelector(int position, View sel, boolean manageHotspot, float x, float y) {
final boolean positionChanged = position != mSelectorPosition;
if (position != INVALID_POSITION) {
@@ -2857,6 +2895,7 @@
mScrollDown = down;
}
+ @UnsupportedAppUsage
void updateSelectorState() {
final Drawable selector = mSelector;
if (selector != null && selector.isStateful()) {
@@ -3219,6 +3258,7 @@
return false;
}
+ @UnsupportedAppUsage
boolean performLongPress(final View child,
final int longPressPosition, final long longPressId) {
return performLongPress(
@@ -3229,6 +3269,7 @@
CheckForLongPress.INVALID_COORD);
}
+ @UnsupportedAppUsage
boolean performLongPress(final View child,
final int longPressPosition, final long longPressId, float x, float y) {
// CHOICE_MODE_MULTIPLE_MODAL takes over long press.
@@ -4555,6 +4596,7 @@
*
* @param newState The new scroll state.
*/
+ @UnsupportedAppUsage
void reportScrollStateChange(int newState) {
if (newState != mLastScrollState) {
if (mOnScrollListener != null) {
@@ -4574,6 +4616,7 @@
/**
* Tracks the decay of a fling scroll
*/
+ @UnsupportedAppUsage
private final OverScroller mScroller;
/**
@@ -4618,6 +4661,7 @@
mScroller = new OverScroller(getContext());
}
+ @UnsupportedAppUsage
void start(int initialVelocity) {
int initialY = initialVelocity < 0 ? Integer.MAX_VALUE : 0;
mLastFlingY = initialY;
@@ -4695,6 +4739,7 @@
postOnAnimation(this);
}
+ @UnsupportedAppUsage
void endFling() {
mTouchMode = TOUCH_MODE_REST;
@@ -4949,6 +4994,7 @@
smoothScrollBy(distance, duration, false, false);
}
+ @UnsupportedAppUsage
void smoothScrollBy(int distance, int duration, boolean linear,
boolean suppressEndFlingStateChangeCall) {
if (mFlingRunnable == null) {
@@ -5091,6 +5137,7 @@
* @param incrementalDeltaY Change in deltaY from the previous event.
* @return true if we're already at the beginning/end of the list and have nothing to do.
*/
+ @UnsupportedAppUsage
boolean trackMotionScroll(int deltaY, int incrementalDeltaY) {
final int childCount = getChildCount();
if (childCount == 0) {
@@ -5326,6 +5373,7 @@
* @param y Where the user touched
* @return The position of the first (or only) item in the row containing y
*/
+ @UnsupportedAppUsage
abstract int findMotionRow(int y);
/**
@@ -5358,6 +5406,7 @@
* If there is a selection returns false.
* Otherwise resurrects the selection and returns true if resurrected.
*/
+ @UnsupportedAppUsage
boolean resurrectSelectionIfNeeded() {
if (mSelectedPosition < 0 && resurrectSelection()) {
updateSelectorState();
@@ -6522,6 +6571,7 @@
@ViewDebug.IntToString(from = ITEM_VIEW_TYPE_IGNORE, to = "ITEM_VIEW_TYPE_IGNORE"),
@ViewDebug.IntToString(from = ITEM_VIEW_TYPE_HEADER_OR_FOOTER, to = "ITEM_VIEW_TYPE_HEADER_OR_FOOTER")
})
+ @UnsupportedAppUsage
int viewType;
/**
@@ -6549,6 +6599,7 @@
* scrap heap.
* @hide
*/
+ @UnsupportedAppUsage
int scrappedFromPosition;
/**
@@ -6617,6 +6668,7 @@
* @see android.widget.AbsListView.RecyclerListener
*/
class RecycleBin {
+ @UnsupportedAppUsage
private RecyclerListener mRecyclerListener;
/**
@@ -6698,6 +6750,7 @@
/**
* Clears the scrap heap.
*/
+ @UnsupportedAppUsage
void clear() {
if (mViewTypeCount == 1) {
final ArrayList<View> scrap = mCurrentScrap;
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index 61a5873..a85c585 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
@@ -43,6 +44,7 @@
public abstract class AbsSeekBar extends ProgressBar {
private final Rect mTempRect = new Rect();
+ @UnsupportedAppUsage
private Drawable mThumb;
private ColorStateList mThumbTintList = null;
private PorterDuff.Mode mThumbTintMode = null;
@@ -56,17 +58,20 @@
private boolean mHasTickMarkTintMode = false;
private int mThumbOffset;
+ @UnsupportedAppUsage
private boolean mSplitTrack;
/**
* On touch, this offset plus the scaled value from the position of the
* touch will form the progress value. Usually 0.
*/
+ @UnsupportedAppUsage
float mTouchProgressOffset;
/**
* Whether this is user seekable.
*/
+ @UnsupportedAppUsage
boolean mIsUserSeekable = true;
/**
@@ -76,10 +81,12 @@
private int mKeyProgressIncrement = 1;
private static final int NO_ALPHA = 0xFF;
+ @UnsupportedAppUsage
private float mDisabledAlpha;
private int mScaledTouchSlop;
private float mTouchDownX;
+ @UnsupportedAppUsage
private boolean mIsDragging;
public AbsSeekBar(Context context) {
@@ -729,6 +736,7 @@
/**
* Draw the thumb.
*/
+ @UnsupportedAppUsage
void drawThumb(Canvas canvas) {
if (mThumb != null) {
final int saveCount = canvas.save();
@@ -834,6 +842,7 @@
}
}
+ @UnsupportedAppUsage
private void trackTouchEvent(MotionEvent event) {
final int x = Math.round(event.getX());
final int y = Math.round(event.getY());
diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java
index 46269c6..eb20a76 100644
--- a/core/java/android/widget/ActionMenuPresenter.java
+++ b/core/java/android/widget/ActionMenuPresenter.java
@@ -22,6 +22,7 @@
import android.animation.PropertyValuesHolder;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -586,6 +587,7 @@
* Dismiss all popup menus - overflow and submenus.
* @return true if popups were dismissed, false otherwise. (This can be because none were open.)
*/
+ @UnsupportedAppUsage
public boolean dismissPopupMenus() {
boolean result = hideOverflowMenu();
result |= hideSubMenus();
@@ -608,6 +610,7 @@
/**
* @return true if the overflow menu is currently showing
*/
+ @UnsupportedAppUsage
public boolean isOverflowMenuShowing() {
return mOverflowPopup != null && mOverflowPopup.isShowing();
}
@@ -766,6 +769,7 @@
}
@Override
+ @UnsupportedAppUsage
public Parcelable onSaveInstanceState() {
SavedState state = new SavedState();
state.openSubMenuId = mOpenSubMenuId;
@@ -773,6 +777,7 @@
}
@Override
+ @UnsupportedAppUsage
public void onRestoreInstanceState(Parcelable state) {
SavedState saved = (SavedState) state;
if (saved.openSubMenuId > 0) {
diff --git a/core/java/android/widget/ActionMenuView.java b/core/java/android/widget/ActionMenuView.java
index c4bbdb0..7e58622 100644
--- a/core/java/android/widget/ActionMenuView.java
+++ b/core/java/android/widget/ActionMenuView.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StyleRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
@@ -564,6 +565,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public boolean isOverflowReserved() {
return mReserveOverflow;
}
@@ -655,6 +657,7 @@
* Must be called before the first call to getMenu()
* @hide
*/
+ @UnsupportedAppUsage
public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {
mActionMenuPresenterCallback = pcb;
mMenuBuilderCallback = mcb;
@@ -664,6 +667,7 @@
* Returns the current menu or null if one has not yet been configured.
* @hide Internal use only for action bar integration
*/
+ @UnsupportedAppUsage
public MenuBuilder peekMenu() {
return mMenu;
}
@@ -697,6 +701,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public boolean isOverflowMenuShowPending() {
return mPresenter != null && mPresenter.isOverflowMenuShowPending();
}
@@ -714,6 +719,7 @@
* @hide Private LinearLayout (superclass) API. Un-hide if LinearLayout API is made public.
*/
@Override
+ @UnsupportedAppUsage
protected boolean hasDividerBeforeChildAt(int childIndex) {
if (childIndex == 0) {
return false;
@@ -736,6 +742,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void setExpandedActionViewsExclusive(boolean exclusive) {
mPresenter.setExpandedActionViewsExclusive(exclusive);
}
@@ -783,6 +790,7 @@
/** @hide */
public interface ActionMenuChildView {
+ @UnsupportedAppUsage
public boolean needsDividerBefore();
public boolean needsDividerAfter();
}
@@ -790,25 +798,31 @@
public static class LayoutParams extends LinearLayout.LayoutParams {
/** @hide */
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
public boolean isOverflowButton;
/** @hide */
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
public int cellsUsed;
/** @hide */
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
public int extraPixels;
/** @hide */
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
public boolean expandable;
/** @hide */
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
public boolean preventEdgeOffset;
/** @hide */
+ @UnsupportedAppUsage
public boolean expanded;
public LayoutParams(Context c, AttributeSet attrs) {
diff --git a/core/java/android/widget/ActivityChooserModel.java b/core/java/android/widget/ActivityChooserModel.java
index 75c857c..f5bf759 100644
--- a/core/java/android/widget/ActivityChooserModel.java
+++ b/core/java/android/widget/ActivityChooserModel.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
@@ -339,6 +340,7 @@
*
* @return The model.
*/
+ @UnsupportedAppUsage
public static ActivityChooserModel get(Context context, String historyFileName) {
synchronized (sRegistryLock) {
ActivityChooserModel dataModel = sDataModelRegistry.get(historyFileName);
@@ -376,6 +378,7 @@
*
* @param intent The intent.
*/
+ @UnsupportedAppUsage
public void setIntent(Intent intent) {
synchronized (mInstanceLock) {
if (mIntent == intent) {
@@ -405,6 +408,7 @@
*
* @see #setIntent(Intent)
*/
+ @UnsupportedAppUsage
public int getActivityCount() {
synchronized (mInstanceLock) {
ensureConsistentState();
@@ -420,6 +424,7 @@
* @see ActivityResolveInfo
* @see #setIntent(Intent)
*/
+ @UnsupportedAppUsage
public ResolveInfo getActivity(int index) {
synchronized (mInstanceLock) {
ensureConsistentState();
@@ -467,6 +472,7 @@
* @see HistoricalRecord
* @see OnChooseActivityListener
*/
+ @UnsupportedAppUsage
public Intent chooseActivity(int index) {
synchronized (mInstanceLock) {
if (mIntent == null) {
@@ -507,6 +513,7 @@
*
* @param listener The listener.
*/
+ @UnsupportedAppUsage
public void setOnChooseActivityListener(OnChooseActivityListener listener) {
synchronized (mInstanceLock) {
mActivityChoserModelPolicy = listener;
diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java
index 121a8c5..58715ee 100644
--- a/core/java/android/widget/ActivityChooserView.java
+++ b/core/java/android/widget/ActivityChooserView.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.StringRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -323,6 +324,7 @@
*
* @param drawable The drawable.
*/
+ @UnsupportedAppUsage
public void setExpandActivityOverflowButtonDrawable(Drawable drawable) {
mExpandActivityOverflowButtonImage.setImageDrawable(drawable);
}
diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java
index 4e77f0b..dd6c923 100644
--- a/core/java/android/widget/AdapterView.java
+++ b/core/java/android/widget/AdapterView.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.database.DataSetObserver;
import android.os.Parcelable;
@@ -68,6 +69,7 @@
* The position of the first child displayed
*/
@ViewDebug.ExportedProperty(category = "scrolling")
+ @UnsupportedAppUsage
int mFirstPosition = 0;
/**
@@ -79,6 +81,7 @@
/**
* Position from which to start looking for mSyncRowId
*/
+ @UnsupportedAppUsage
int mSyncPosition;
/**
@@ -94,6 +97,7 @@
/**
* True if we need to sync to mSyncRowId
*/
+ @UnsupportedAppUsage
boolean mNeedSync = false;
/**
@@ -131,11 +135,13 @@
/**
* The listener that receives notifications when an item is selected.
*/
+ @UnsupportedAppUsage
OnItemSelectedListener mOnItemSelectedListener;
/**
* The listener that receives notifications when an item is clicked.
*/
+ @UnsupportedAppUsage
OnItemClickListener mOnItemClickListener;
/**
@@ -146,6 +152,7 @@
/**
* True if the data has changed since the last layout
*/
+ @UnsupportedAppUsage
boolean mDataChanged;
/**
@@ -153,17 +160,20 @@
* during the next layout.
*/
@ViewDebug.ExportedProperty(category = "list")
+ @UnsupportedAppUsage
int mNextSelectedPosition = INVALID_POSITION;
/**
* The item id of the item to select during the next layout.
*/
+ @UnsupportedAppUsage
long mNextSelectedRowId = INVALID_ROW_ID;
/**
* The position within the adapter's data set of the currently selected item.
*/
@ViewDebug.ExportedProperty(category = "list")
+ @UnsupportedAppUsage
int mSelectedPosition = INVALID_POSITION;
/**
@@ -201,6 +211,7 @@
/**
* The last selected position we used when notifying
*/
+ @UnsupportedAppUsage
int mOldSelectedPosition = INVALID_POSITION;
/**
@@ -900,6 +911,7 @@
}
}
+ @UnsupportedAppUsage
void selectionChanged() {
// We're about to post or run the selection notifier, so we don't need
// a pending notifier.
@@ -1217,6 +1229,7 @@
* Utility to keep mSelectedPosition and mSelectedRowId in sync
* @param position Our current position
*/
+ @UnsupportedAppUsage
void setSelectedPositionInt(int position) {
mSelectedPosition = position;
mSelectedRowId = getItemIdAtPosition(position);
@@ -1227,6 +1240,7 @@
* @param position Intended value for mSelectedPosition the next time we go
* through layout
*/
+ @UnsupportedAppUsage
void setNextSelectedPositionInt(int position) {
mNextSelectedPosition = position;
mNextSelectedRowId = getItemIdAtPosition(position);
diff --git a/core/java/android/widget/AnalogClock.java b/core/java/android/widget/AnalogClock.java
index bde5f7f..795b034 100644
--- a/core/java/android/widget/AnalogClock.java
+++ b/core/java/android/widget/AnalogClock.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -46,8 +47,11 @@
public class AnalogClock extends View {
private Time mCalendar;
+ @UnsupportedAppUsage
private Drawable mHourHand;
+ @UnsupportedAppUsage
private Drawable mMinuteHand;
+ @UnsupportedAppUsage
private Drawable mDial;
private int mDialWidth;
diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java
index e6f948f..b754d84 100644
--- a/core/java/android/widget/AppSecurityPermissions.java
+++ b/core/java/android/widget/AppSecurityPermissions.java
@@ -16,6 +16,7 @@
*/
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -257,6 +258,7 @@
mNewPermPrefix = mContext.getText(R.string.perms_new_perm_prefix);
}
+ @UnsupportedAppUsage
public AppSecurityPermissions(Context context, String packageName) {
this(context);
mPackageName = packageName;
@@ -418,6 +420,7 @@
}
}
+ @UnsupportedAppUsage
public int getPermissionCount() {
return getPermissionCount(WHICH_ALL);
}
@@ -438,6 +441,7 @@
return N;
}
+ @UnsupportedAppUsage
public View getPermissionsView() {
return getPermissionsView(WHICH_ALL, false);
}
diff --git a/core/java/android/widget/ArrayAdapter.java b/core/java/android/widget/ArrayAdapter.java
index f18f217..c3c2c0d 100644
--- a/core/java/android/widget/ArrayAdapter.java
+++ b/core/java/android/widget/ArrayAdapter.java
@@ -21,6 +21,7 @@
import android.annotation.LayoutRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Resources;
import android.util.Log;
@@ -77,6 +78,7 @@
* used by the filter (see {@link #getFilter()} to make a synchronized copy of
* the original array of data.
*/
+ @UnsupportedAppUsage
private final Object mLock = new Object();
private final LayoutInflater mInflater;
@@ -99,6 +101,7 @@
* Contains the list of objects that represent the data of this ArrayAdapter.
* The content of this list is referred to as "the array" in the documentation.
*/
+ @UnsupportedAppUsage
private List<T> mObjects;
/**
@@ -121,6 +124,7 @@
// A copy of the original mObjects array, initialized from and then used instead as soon as
// the mFilter ArrayFilter is used. mObjects will then only contain the filtered values.
+ @UnsupportedAppUsage
private ArrayList<T> mOriginalValues;
private ArrayFilter mFilter;
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index 49741d4..71d13a9 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.DrawableRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Resources.Theme;
import android.content.res.TypedArray;
@@ -102,10 +103,13 @@
/** Context used to inflate the popup window or dialog. */
private final Context mPopupContext;
+ @UnsupportedAppUsage
private final ListPopupWindow mPopup;
+ @UnsupportedAppUsage
private final PassThroughClickListener mPassThroughClickListener;
private CharSequence mHintText;
+ @UnsupportedAppUsage
private TextView mHintView;
private int mHintResource;
@@ -132,6 +136,7 @@
// Set to false when the list is hidden to prevent asynchronous updates to popup the list again.
private boolean mPopupCanBeUpdated = true;
+ @UnsupportedAppUsage
private PopupDataSetObserver mObserver;
/**
@@ -528,6 +533,7 @@
*
* @hide Pending API council approval
*/
+ @UnsupportedAppUsage
public void setDropDownAnimationStyle(int animationStyle) {
mPopup.setAnimationStyle(animationStyle);
}
@@ -566,6 +572,7 @@
*
* @hide Pending API council approval
*/
+ @UnsupportedAppUsage
public void setDropDownAlwaysVisible(boolean dropDownAlwaysVisible) {
mPopup.setDropDownAlwaysVisible(dropDownAlwaysVisible);
}
@@ -587,6 +594,7 @@
*
* @hide Pending API council approval
*/
+ @UnsupportedAppUsage
public void setDropDownDismissedOnCompletion(boolean dropDownDismissedOnCompletion) {
mDropDownDismissedOnCompletion = dropDownDismissedOnCompletion;
}
@@ -866,6 +874,7 @@
}
}
+ @UnsupportedAppUsage
void doBeforeTextChanged() {
if (mBlockCompletion) return;
@@ -875,6 +884,7 @@
if (DEBUG) Log.v(TAG, "before text changed: open=" + mOpenBefore);
}
+ @UnsupportedAppUsage
void doAfterTextChanged() {
if (mBlockCompletion) return;
@@ -1171,6 +1181,7 @@
*
* @hide internal used only by SearchDialog
*/
+ @UnsupportedAppUsage
public void showDropDownAfterLayout() {
mPopup.postShow();
}
@@ -1181,6 +1192,7 @@
* the background.
* @hide internal used only here and SearchDialog
*/
+ @UnsupportedAppUsage
public void ensureImeVisible(boolean visible) {
mPopup.setInputMethodMode(visible
? ListPopupWindow.INPUT_METHOD_NEEDED : ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
@@ -1192,6 +1204,7 @@
/**
* @hide internal used only here and SearchDialog
*/
+ @UnsupportedAppUsage
public boolean isInputMethodNotNeeded() {
return mPopup.getInputMethodMode() == ListPopupWindow.INPUT_METHOD_NOT_NEEDED;
}
@@ -1225,6 +1238,7 @@
*
* @hide used only by SearchDialog
*/
+ @UnsupportedAppUsage
public void setForceIgnoreOutsideTouch(boolean forceIgnoreOutsideTouch) {
mPopup.setForceIgnoreOutsideTouch(forceIgnoreOutsideTouch);
}
diff --git a/core/java/android/widget/BaseAdapter.java b/core/java/android/widget/BaseAdapter.java
index 5838cc1..7b9365b 100644
--- a/core/java/android/widget/BaseAdapter.java
+++ b/core/java/android/widget/BaseAdapter.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.database.DataSetObservable;
import android.database.DataSetObserver;
import android.view.View;
@@ -29,6 +30,7 @@
* specialized {@link SpinnerAdapter} interface).
*/
public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {
+ @UnsupportedAppUsage
private final DataSetObservable mDataSetObservable = new DataSetObservable();
private CharSequence[] mAutofillOptions;
diff --git a/core/java/android/widget/CalendarView.java b/core/java/android/widget/CalendarView.java
index db50e34..2ff815d 100644
--- a/core/java/android/widget/CalendarView.java
+++ b/core/java/android/widget/CalendarView.java
@@ -23,6 +23,7 @@
import android.annotation.Nullable;
import android.annotation.StyleRes;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.Widget;
import android.content.Context;
import android.content.res.Configuration;
@@ -72,6 +73,7 @@
private static final int MODE_HOLO = 0;
private static final int MODE_MATERIAL = 1;
+ @UnsupportedAppUsage
private final CalendarViewDelegate mDelegate;
/**
diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java
index 92bfd56..1472b01 100644
--- a/core/java/android/widget/CheckedTextView.java
+++ b/core/java/android/widget/CheckedTextView.java
@@ -19,6 +19,7 @@
import android.annotation.DrawableRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
@@ -53,6 +54,7 @@
private boolean mChecked;
private int mCheckMarkResource;
+ @UnsupportedAppUsage
private Drawable mCheckMarkDrawable;
private ColorStateList mCheckMarkTintList = null;
private PorterDuff.Mode mCheckMarkTintMode = null;
@@ -61,6 +63,7 @@
private int mBasePadding;
private int mCheckMarkWidth;
+ @UnsupportedAppUsage
private int mCheckMarkGravity = Gravity.END;
private boolean mNeedRequestlayout;
diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java
index 0762b15..8d09489 100644
--- a/core/java/android/widget/CompoundButton.java
+++ b/core/java/android/widget/CompoundButton.java
@@ -19,6 +19,7 @@
import android.annotation.DrawableRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
@@ -59,14 +60,17 @@
private static final String LOG_TAG = CompoundButton.class.getSimpleName();
private boolean mChecked;
+ @UnsupportedAppUsage
private boolean mBroadcasting;
+ @UnsupportedAppUsage
private Drawable mButtonDrawable;
private ColorStateList mButtonTintList = null;
private PorterDuff.Mode mButtonTintMode = null;
private boolean mHasButtonTint = false;
private boolean mHasButtonTintMode = false;
+ @UnsupportedAppUsage
private OnCheckedChangeListener mOnCheckedChangeListener;
private OnCheckedChangeListener mOnCheckedChangeWidgetListener;
diff --git a/core/java/android/widget/CursorAdapter.java b/core/java/android/widget/CursorAdapter.java
index 9fb98db..cc8b550 100644
--- a/core/java/android/widget/CursorAdapter.java
+++ b/core/java/android/widget/CursorAdapter.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.WorkerThread;
import android.content.Context;
import android.content.res.Resources;
@@ -43,6 +44,7 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected boolean mDataValid;
/**
* This field should be made private, so it is hidden from the SDK.
@@ -53,11 +55,13 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected Cursor mCursor;
/**
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected Context mContext;
/**
* Context used for {@link #getDropDownView(int, View, ViewGroup)}.
@@ -68,16 +72,19 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected int mRowIDColumn;
/**
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected ChangeObserver mChangeObserver;
/**
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected DataSetObserver mDataSetObserver;
/**
* This field should be made private, so it is hidden from the SDK.
diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java
index b2b93fa..df53795 100644
--- a/core/java/android/widget/DatePicker.java
+++ b/core/java/android/widget/DatePicker.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.Widget;
import android.content.Context;
import android.content.res.Configuration;
@@ -114,6 +115,7 @@
@Retention(RetentionPolicy.SOURCE)
public @interface DatePickerMode {}
+ @UnsupportedAppUsage
private final DatePickerDelegate mDelegate;
@DatePickerMode
@@ -329,6 +331,7 @@
* @param callback the callback, may be null
* @hide
*/
+ @UnsupportedAppUsage
public void setValidationCallback(@Nullable ValidationCallback callback) {
mDelegate.setValidationCallback(callback);
}
diff --git a/core/java/android/widget/DateTimeView.java b/core/java/android/widget/DateTimeView.java
index 2b1e900..bf2762a 100644
--- a/core/java/android/widget/DateTimeView.java
+++ b/core/java/android/widget/DateTimeView.java
@@ -22,6 +22,7 @@
import static android.text.format.DateUtils.YEAR_IN_MILLIS;
import static android.text.format.Time.getJulianDay;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -76,6 +77,7 @@
this(context, null);
}
+ @UnsupportedAppUsage
public DateTimeView(Context context, AttributeSet attrs) {
super(context, attrs);
final TypedArray a = context.obtainStyledAttributes(attrs,
@@ -124,6 +126,7 @@
}
@android.view.RemotableViewMethod
+ @UnsupportedAppUsage
public void setTime(long time) {
Time t = new Time();
t.set(time);
@@ -149,6 +152,7 @@
}
}
+ @UnsupportedAppUsage
void update() {
if (mTime == null || getVisibility() == GONE) {
return;
diff --git a/core/java/android/widget/EdgeEffect.java b/core/java/android/widget/EdgeEffect.java
index f9f5901..7e42862 100644
--- a/core/java/android/widget/EdgeEffect.java
+++ b/core/java/android/widget/EdgeEffect.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.ColorInt;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
@@ -79,6 +80,7 @@
private static final float RADIUS_FACTOR = 0.6f;
private float mGlowAlpha;
+ @UnsupportedAppUsage
private float mGlowScaleY;
private float mGlowAlphaStart;
@@ -106,6 +108,7 @@
private float mPullDistance;
private final Rect mBounds = new Rect();
+ @UnsupportedAppUsage
private final Paint mPaint = new Paint();
private float mRadius;
private float mBaseGlowScale;
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 058736a..47ce90b 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -21,6 +21,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.app.RemoteAction;
@@ -201,7 +202,9 @@
SelectionModifierCursorController mSelectionModifierCursorController;
// Action mode used when text is selected or when actions on an insertion cursor are triggered.
private ActionMode mTextActionMode;
+ @UnsupportedAppUsage
private boolean mInsertionControllerEnabled;
+ @UnsupportedAppUsage
private boolean mSelectionControllerEnabled;
private final boolean mHapticTextHandleEnabled;
@@ -268,6 +271,7 @@
boolean mDiscardNextActionUp;
boolean mIgnoreActionUpEvent;
+ @UnsupportedAppUsage
private long mShowCursor;
private boolean mRenderCursorRegardlessTiming;
private Blink mBlink;
@@ -289,6 +293,7 @@
private boolean mShowErrorAfterAttach;
boolean mInBatchEditControllers;
+ @UnsupportedAppUsage
boolean mShowSoftInputOnFocus = true;
private boolean mPreserveSelection;
private boolean mRestartActionModeOnNextRefresh;
@@ -304,8 +309,11 @@
Drawable mDrawableForCursor = null;
+ @UnsupportedAppUsage
private Drawable mSelectHandleLeft;
+ @UnsupportedAppUsage
private Drawable mSelectHandleRight;
+ @UnsupportedAppUsage
private Drawable mSelectHandleCenter;
// Global listener that detects changes in the global position of the TextView
@@ -318,6 +326,7 @@
Callback mCustomInsertionActionModeCallback;
// Set when this TextView gained focus with some text selected. Will start selection mode.
+ @UnsupportedAppUsage
boolean mCreatedWithASelection;
// Indicates the current tap state (first tap, double tap, or triple click).
@@ -2024,6 +2033,7 @@
}
}
+ @UnsupportedAppUsage
void invalidateTextDisplayList() {
if (mTextRenderNodes != null) {
for (int i = 0; i < mTextRenderNodes.length; i++) {
@@ -6299,6 +6309,7 @@
static class InputContentType {
int imeOptions = EditorInfo.IME_NULL;
+ @UnsupportedAppUsage
String privateImeOptions;
CharSequence imeActionLabel;
int imeActionId;
diff --git a/core/java/android/widget/ExpandableListView.java b/core/java/android/widget/ExpandableListView.java
index 8d9848d..33d1539 100644
--- a/core/java/android/widget/ExpandableListView.java
+++ b/core/java/android/widget/ExpandableListView.java
@@ -18,6 +18,7 @@
import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
@@ -127,15 +128,18 @@
private static final long PACKED_POSITION_INT_MASK_GROUP = 0x7FFFFFFF;
/** Serves as the glue/translator between a ListView and an ExpandableListView */
+ @UnsupportedAppUsage
private ExpandableListConnector mConnector;
/** Gives us Views through group+child positions */
private ExpandableListAdapter mAdapter;
/** Left bound for drawing the indicator. */
+ @UnsupportedAppUsage
private int mIndicatorLeft;
/** Right bound for drawing the indicator. */
+ @UnsupportedAppUsage
private int mIndicatorRight;
/** Start bound for drawing the indicator. */
@@ -180,6 +184,7 @@
private static final int INDICATOR_UNDEFINED = -2;
/** The indicator drawn next to a group. */
+ @UnsupportedAppUsage
private Drawable mGroupIndicator;
/** The indicator drawn next to a child. */
@@ -200,6 +205,7 @@
{R.attr.state_expanded, R.attr.state_empty};
/** States for the group where the 0th bit is expanded and 1st bit is empty. */
+ @UnsupportedAppUsage
private static final int[][] GROUP_STATE_SETS = {
EMPTY_STATE_SET, // 00
GROUP_EXPANDED_STATE_SET, // 01
@@ -212,6 +218,7 @@
{R.attr.state_last};
/** Drawable to be used as a divider when it is adjacent to any children */
+ @UnsupportedAppUsage
private Drawable mChildDivider;
// Bounds of the indicator to be drawn
@@ -793,6 +800,7 @@
void onGroupCollapse(int groupPosition);
}
+ @UnsupportedAppUsage
private OnGroupCollapseListener mOnGroupCollapseListener;
public void setOnGroupCollapseListener(
@@ -811,6 +819,7 @@
void onGroupExpand(int groupPosition);
}
+ @UnsupportedAppUsage
private OnGroupExpandListener mOnGroupExpandListener;
public void setOnGroupExpandListener(
@@ -837,6 +846,7 @@
long id);
}
+ @UnsupportedAppUsage
private OnGroupClickListener mOnGroupClickListener;
public void setOnGroupClickListener(OnGroupClickListener onGroupClickListener) {
@@ -864,6 +874,7 @@
int childPosition, long id);
}
+ @UnsupportedAppUsage
private OnChildClickListener mOnChildClickListener;
public void setOnChildClickListener(OnChildClickListener onChildClickListener) {
diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java
index 198bf27..2c09185 100644
--- a/core/java/android/widget/FastScroller.java
+++ b/core/java/android/widget/FastScroller.java
@@ -23,6 +23,7 @@
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.annotation.StyleRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
@@ -98,13 +99,16 @@
private final Rect mTempBounds = new Rect();
private final Rect mTempMargins = new Rect();
+ @UnsupportedAppUsage
private final Rect mContainerRect = new Rect();
private final AbsListView mList;
private final ViewGroupOverlay mOverlay;
private final TextView mPrimaryText;
private final TextView mSecondaryText;
+ @UnsupportedAppUsage
private final ImageView mThumbImage;
+ @UnsupportedAppUsage
private final ImageView mTrackImage;
private final View mPreviewImage;
/**
@@ -114,6 +118,7 @@
private final int[] mPreviewResId = new int[2];
/** The minimum touch target size in pixels. */
+ @UnsupportedAppUsage
private final int mMinimumTouchTarget;
/**
@@ -133,7 +138,9 @@
/** Theme-specified text color. Used only if text appearance is not set. */
private ColorStateList mTextColor;
+ @UnsupportedAppUsage
private Drawable mThumbDrawable;
+ @UnsupportedAppUsage
private Drawable mTrackDrawable;
private int mTextAppearance;
private int mThumbPosition;
@@ -161,6 +168,7 @@
private int mFirstVisibleItem;
/** The number of headers at the top of the view. */
+ @UnsupportedAppUsage
private int mHeaderCount;
/** The index of the current section. */
@@ -170,6 +178,7 @@
private int mScrollbarPosition = -1;
/** Whether the list is long enough to need a fast scroller. */
+ @UnsupportedAppUsage
private boolean mLongList;
private Object[] mSections;
@@ -245,6 +254,7 @@
}
};
+ @UnsupportedAppUsage
public FastScroller(AbsListView listView, int styleResId) {
mList = listView;
mOldItemCount = listView.getCount();
@@ -392,6 +402,7 @@
/**
* Removes this FastScroller overlay from the host view.
*/
+ @UnsupportedAppUsage
public void remove() {
mOverlay.remove(mTrackImage);
mOverlay.remove(mThumbImage);
@@ -507,6 +518,7 @@
return mWidth;
}
+ @UnsupportedAppUsage
public void onSizeChanged(int w, int h, int oldw, int oldh) {
updateLayout();
}
@@ -816,6 +828,7 @@
mThumbRange = max - min;
}
+ @UnsupportedAppUsage
private void setState(int state) {
mList.removeCallbacks(mDeferHide);
@@ -1380,6 +1393,7 @@
cancelFling();
}
+ @UnsupportedAppUsage
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (!isEnabled()) {
return false;
@@ -1449,6 +1463,7 @@
return null;
}
+ @UnsupportedAppUsage
public boolean onTouchEvent(MotionEvent me) {
if (!isEnabled()) {
return false;
diff --git a/core/java/android/widget/Filter.java b/core/java/android/widget/Filter.java
index d901540..16f4ee2 100644
--- a/core/java/android/widget/Filter.java
+++ b/core/java/android/widget/Filter.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
@@ -65,6 +66,7 @@
* @param delayer The delayer.
* @hide
*/
+ @UnsupportedAppUsage
public void setDelayer(Delayer delayer) {
synchronized (mLock) {
mDelayer = delayer;
diff --git a/core/java/android/widget/FrameLayout.java b/core/java/android/widget/FrameLayout.java
index dc8ee01..865f520 100644
--- a/core/java/android/widget/FrameLayout.java
+++ b/core/java/android/widget/FrameLayout.java
@@ -20,6 +20,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StyleRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
@@ -58,18 +59,23 @@
private static final int DEFAULT_CHILD_GRAVITY = Gravity.TOP | Gravity.START;
@ViewDebug.ExportedProperty(category = "measurement")
+ @UnsupportedAppUsage
boolean mMeasureAllChildren = false;
@ViewDebug.ExportedProperty(category = "padding")
+ @UnsupportedAppUsage
private int mForegroundPaddingLeft = 0;
@ViewDebug.ExportedProperty(category = "padding")
+ @UnsupportedAppUsage
private int mForegroundPaddingTop = 0;
@ViewDebug.ExportedProperty(category = "padding")
+ @UnsupportedAppUsage
private int mForegroundPaddingRight = 0;
@ViewDebug.ExportedProperty(category = "padding")
+ @UnsupportedAppUsage
private int mForegroundPaddingBottom = 0;
private final ArrayList<View> mMatchParentChildren = new ArrayList<>(1);
diff --git a/core/java/android/widget/Gallery.java b/core/java/android/widget/Gallery.java
index 7655f3d..ea1bfc2 100644
--- a/core/java/android/widget/Gallery.java
+++ b/core/java/android/widget/Gallery.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.Widget;
import android.content.Context;
import android.content.res.TypedArray;
@@ -75,6 +76,7 @@
/**
* Horizontal spacing between items.
*/
+ @UnsupportedAppUsage
private int mSpacing = 0;
/**
@@ -103,21 +105,25 @@
/**
* Helper for detecting touch gestures.
*/
+ @UnsupportedAppUsage
private GestureDetector mGestureDetector;
/**
* The position of the item that received the user's down touch.
*/
+ @UnsupportedAppUsage
private int mDownTouchPosition;
/**
* The view of the item that received the user's down touch.
*/
+ @UnsupportedAppUsage
private View mDownTouchView;
/**
* Executes the delta scrolls from a fling or scroll movement.
*/
+ @UnsupportedAppUsage
private FlingRunnable mFlingRunnable = new FlingRunnable();
/**
@@ -143,6 +149,7 @@
/**
* The currently selected item's child.
*/
+ @UnsupportedAppUsage
private View mSelectedChild;
/**
@@ -380,6 +387,7 @@
*
* @param deltaX Change in X from the previous event.
*/
+ @UnsupportedAppUsage
void trackMotionScroll(int deltaX) {
if (getChildCount() == 0) {
@@ -472,6 +480,7 @@
/**
* @return The center of this Gallery.
*/
+ @UnsupportedAppUsage
private int getCenterOfGallery() {
return (getWidth() - mPaddingLeft - mPaddingRight) / 2 + mPaddingLeft;
}
@@ -479,6 +488,7 @@
/**
* @return The center of the given view.
*/
+ @UnsupportedAppUsage
private static int getCenterOfView(View view) {
return view.getLeft() + view.getWidth() / 2;
}
@@ -696,6 +706,7 @@
updateSelectedItemMetadata();
}
+ @UnsupportedAppUsage
private void fillToGalleryLeft() {
if (mIsRtl) {
fillToGalleryLeftRtl();
@@ -767,6 +778,7 @@
}
}
+ @UnsupportedAppUsage
private void fillToGalleryRight() {
if (mIsRtl) {
fillToGalleryRightRtl();
@@ -851,6 +863,7 @@
* building from left to right)?
* @return A view that has been added to the gallery
*/
+ @UnsupportedAppUsage
private View makeAndAddView(int position, int offset, int x, boolean fromLeft) {
View child;
@@ -1289,6 +1302,7 @@
return super.onKeyUp(keyCode, event);
}
+ @UnsupportedAppUsage
boolean moveDirection(int direction) {
direction = isLayoutRtl() ? -direction : direction;
int targetPosition = mSelectedPosition + direction;
@@ -1468,6 +1482,7 @@
removeCallbacks(this);
}
+ @UnsupportedAppUsage
public void startUsingVelocity(int initialVelocity) {
if (initialVelocity == 0) return;
diff --git a/core/java/android/widget/GridLayout.java b/core/java/android/widget/GridLayout.java
index 4b76c18..13c086c 100644
--- a/core/java/android/widget/GridLayout.java
+++ b/core/java/android/widget/GridLayout.java
@@ -31,6 +31,7 @@
import static java.lang.Math.min;
import android.annotation.IntDef;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
@@ -2797,6 +2798,7 @@
}
}
+ @UnsupportedAppUsage
static final Alignment UNDEFINED_ALIGNMENT = new Alignment() {
@Override
int getGravityOffset(View view, int cellDelta) {
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index 1ec9b2f..9ccd321 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -18,6 +18,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
@@ -106,14 +107,21 @@
*/
public static final int AUTO_FIT = -1;
+ @UnsupportedAppUsage
private int mNumColumns = AUTO_FIT;
+ @UnsupportedAppUsage
private int mHorizontalSpacing = 0;
+ @UnsupportedAppUsage
private int mRequestedHorizontalSpacing;
+ @UnsupportedAppUsage
private int mVerticalSpacing = 0;
private int mStretchMode = STRETCH_COLUMN_WIDTH;
+ @UnsupportedAppUsage
private int mColumnWidth;
+ @UnsupportedAppUsage
private int mRequestedColumnWidth;
+ @UnsupportedAppUsage
private int mRequestedNumColumns;
private View mReferenceView = null;
@@ -300,6 +308,7 @@
* @return The view that is currently selected, if it happens to be in the
* range that we draw.
*/
+ @UnsupportedAppUsage
private View fillDown(int pos, int nextTop) {
View selectedView = null;
@@ -399,6 +408,7 @@
*
* @return The view that is currently selected
*/
+ @UnsupportedAppUsage
private View fillUp(int pos, int nextBottom) {
View selectedView = null;
@@ -965,6 +975,7 @@
return sel;
}
+ @UnsupportedAppUsage
private boolean determineColumns(int availableSpace) {
final int requestedHorizontalSpacing = mRequestedHorizontalSpacing;
final int stretchMode = mStretchMode;
@@ -1884,6 +1895,7 @@
* Goes to the next or previous item according to the order set by the
* adapter.
*/
+ @UnsupportedAppUsage
boolean sequenceScroll(int direction) {
int selectedPosition = mSelectedPosition;
int numColumns = mNumColumns;
diff --git a/core/java/android/widget/HeaderViewListAdapter.java b/core/java/android/widget/HeaderViewListAdapter.java
index f9d8f92..10d50b8 100644
--- a/core/java/android/widget/HeaderViewListAdapter.java
+++ b/core/java/android/widget/HeaderViewListAdapter.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.database.DataSetObserver;
import android.view.View;
import android.view.ViewGroup;
@@ -31,11 +32,14 @@
*/
public class HeaderViewListAdapter implements WrapperListAdapter, Filterable {
+ @UnsupportedAppUsage
private final ListAdapter mAdapter;
// These two ArrayList are assumed to NOT be null.
// They are indeed created when declared in ListView and then shared.
+ @UnsupportedAppUsage
ArrayList<ListView.FixedViewInfo> mHeaderViewInfos;
+ @UnsupportedAppUsage
ArrayList<ListView.FixedViewInfo> mFooterViewInfos;
// Used as a placeholder in case the provided info views are indeed null.
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 0bf2460..bf9dffd 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
@@ -76,13 +77,17 @@
private long mLastScroll;
private final Rect mTempRect = new Rect();
+ @UnsupportedAppUsage
private OverScroller mScroller;
+ @UnsupportedAppUsage
private EdgeEffect mEdgeGlowLeft;
+ @UnsupportedAppUsage
private EdgeEffect mEdgeGlowRight;
/**
* Position of the last motion event.
*/
+ @UnsupportedAppUsage
private int mLastMotionX;
/**
@@ -96,6 +101,7 @@
* layout is dirty. This prevents the scroll from being wrong if the child has not been
* laid out before requesting focus.
*/
+ @UnsupportedAppUsage
private View mChildToScrollTo = null;
/**
@@ -103,11 +109,13 @@
* not the same as 'is being flinged', which can be checked by
* mScroller.isFinished() (flinging begins when the user lifts his finger).
*/
+ @UnsupportedAppUsage
private boolean mIsBeingDragged = false;
/**
* Determines speed during touch scrolling
*/
+ @UnsupportedAppUsage
private VelocityTracker mVelocityTracker;
/**
@@ -126,7 +134,9 @@
private int mMinimumVelocity;
private int mMaximumVelocity;
+ @UnsupportedAppUsage
private int mOverscrollDistance;
+ @UnsupportedAppUsage
private int mOverflingDistance;
private float mHorizontalScrollFactor;
@@ -437,6 +447,7 @@
}
}
+ @UnsupportedAppUsage
private void recycleVelocityTracker() {
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index 51e481d..0fef9a5 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -20,6 +20,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -96,13 +97,18 @@
private static final String LOG_TAG = "ImageView";
// settable by the client
+ @UnsupportedAppUsage
private Uri mUri;
+ @UnsupportedAppUsage
private int mResource = 0;
private Matrix mMatrix;
private ScaleType mScaleType;
private boolean mHaveFrame = false;
+ @UnsupportedAppUsage
private boolean mAdjustViewBounds = false;
+ @UnsupportedAppUsage
private int mMaxWidth = Integer.MAX_VALUE;
+ @UnsupportedAppUsage
private int mMaxHeight = Integer.MAX_VALUE;
// these are applied to the drawable
@@ -110,11 +116,14 @@
private boolean mHasColorFilter = false;
private Xfermode mXfermode;
private boolean mHasXfermode = false;
+ @UnsupportedAppUsage
private int mAlpha = 255;
private boolean mHasAlpha = false;
private final int mViewAlphaScale = 256;
+ @UnsupportedAppUsage
private Drawable mDrawable = null;
+ @UnsupportedAppUsage
private BitmapDrawable mRecycleableBitmapDrawable = null;
private ColorStateList mDrawableTintList = null;
private PorterDuff.Mode mDrawableTintMode = null;
@@ -124,14 +133,18 @@
private int[] mState = null;
private boolean mMergeState = false;
private int mLevel = 0;
+ @UnsupportedAppUsage
private int mDrawableWidth;
+ @UnsupportedAppUsage
private int mDrawableHeight;
+ @UnsupportedAppUsage
private Matrix mDrawMatrix = null;
// Avoid allocations...
private final RectF mTempSrc = new RectF();
private final RectF mTempDst = new RectF();
+ @UnsupportedAppUsage
private boolean mCropToPadding;
private int mBaseline = -1;
@@ -485,6 +498,7 @@
}
/** @hide **/
+ @UnsupportedAppUsage
public Runnable setImageResourceAsync(@DrawableRes int resId) {
Drawable d = null;
if (resId != 0) {
@@ -540,6 +554,7 @@
}
/** @hide **/
+ @UnsupportedAppUsage
public Runnable setImageURIAsync(@Nullable Uri uri) {
if (mResource != 0 || (mUri != uri && (uri == null || mUri == null || !uri.equals(mUri)))) {
Drawable d = uri == null ? null : getDrawableFromUri(uri);
@@ -899,6 +914,7 @@
}
}
+ @UnsupportedAppUsage
private void resolveUri() {
if (mDrawable != null) {
return;
@@ -974,6 +990,7 @@
}
}
+ @UnsupportedAppUsage
private void updateDrawable(Drawable d) {
if (d != mRecycleableBitmapDrawable && mRecycleableBitmapDrawable != null) {
mRecycleableBitmapDrawable.setBitmap(null);
@@ -1018,6 +1035,7 @@
}
}
+ @UnsupportedAppUsage
private void resizeFromDrawable() {
final Drawable d = mDrawable;
if (d != null) {
@@ -1049,6 +1067,7 @@
Matrix.ScaleToFit.END
};
+ @UnsupportedAppUsage
private static Matrix.ScaleToFit scaleTypeToScaleToFit(ScaleType st) {
// ScaleToFit enum to their corresponding Matrix.ScaleToFit values
return sS2FArray[st.nativeInt - 1];
@@ -1313,6 +1332,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void animateTransform(Matrix matrix) {
if (mDrawable == null) {
return;
diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java
index 40f9652..452e903 100644
--- a/core/java/android/widget/LinearLayout.java
+++ b/core/java/android/widget/LinearLayout.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
@@ -188,27 +189,35 @@
@ViewDebug.FlagToString(mask = Gravity.RELATIVE_LAYOUT_DIRECTION,
equals = Gravity.RELATIVE_LAYOUT_DIRECTION, name = "RELATIVE")
}, formatToHexString = true)
+ @UnsupportedAppUsage
private int mGravity = Gravity.START | Gravity.TOP;
@ViewDebug.ExportedProperty(category = "measurement")
+ @UnsupportedAppUsage
private int mTotalLength;
@ViewDebug.ExportedProperty(category = "layout")
private float mWeightSum;
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
private boolean mUseLargestChild;
+ @UnsupportedAppUsage
private int[] mMaxAscent;
+ @UnsupportedAppUsage
private int[] mMaxDescent;
private static final int VERTICAL_GRAVITY_COUNT = 4;
private static final int INDEX_CENTER_VERTICAL = 0;
+ @UnsupportedAppUsage
private static final int INDEX_TOP = 1;
+ @UnsupportedAppUsage
private static final int INDEX_BOTTOM = 2;
private static final int INDEX_FILL = 3;
+ @UnsupportedAppUsage
private Drawable mDivider;
private int mDividerWidth;
private int mDividerHeight;
@@ -2062,6 +2071,7 @@
/** @hide */
@Override
+ @UnsupportedAppUsage
protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
super.encodeProperties(encoder);
diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java
index adf366a..f9564b4 100644
--- a/core/java/android/widget/ListPopupWindow.java
+++ b/core/java/android/widget/ListPopupWindow.java
@@ -20,6 +20,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StyleRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.database.DataSetObserver;
@@ -67,6 +68,7 @@
private Context mContext;
private ListAdapter mAdapter;
+ @UnsupportedAppUsage
private DropDownListView mDropDownList;
private int mDropDownHeight = ViewGroup.LayoutParams.WRAP_CONTENT;
@@ -115,6 +117,7 @@
private boolean mModal;
+ @UnsupportedAppUsage
PopupWindow mPopup;
/**
@@ -310,6 +313,7 @@
*
* @hide Used only by AutoCompleteTextView to handle some internal special cases.
*/
+ @UnsupportedAppUsage
public void setForceIgnoreOutsideTouch(boolean forceIgnoreOutsideTouch) {
mForceIgnoreOutsideTouch = forceIgnoreOutsideTouch;
}
@@ -325,6 +329,7 @@
*
* @hide Only used by AutoCompleteTextView under special conditions.
*/
+ @UnsupportedAppUsage
public void setDropDownAlwaysVisible(boolean dropDownAlwaysVisible) {
mDropDownAlwaysVisible = dropDownAlwaysVisible;
}
@@ -334,6 +339,7 @@
*
* @hide Only used by AutoCompleteTextView under special conditions.
*/
+ @UnsupportedAppUsage
public boolean isDropDownAlwaysVisible() {
return mDropDownAlwaysVisible;
}
@@ -898,6 +904,7 @@
*
* @param max Max number of items that can be visible and still allow the list to expand.
*/
+ @UnsupportedAppUsage
void setListItemExpandMax(int max) {
mListItemExpandMaximum = max;
}
@@ -1093,6 +1100,7 @@
*
* @return the content's height or -1 if content already exists
*/
+ @UnsupportedAppUsage
private int buildDropDown() {
ViewGroup dropDownView;
int otherHeights = 0;
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index fc9e8e7..ee04bcf 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -19,6 +19,7 @@
import android.annotation.IdRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
@@ -181,10 +182,14 @@
public boolean isSelectable;
}
+ @UnsupportedAppUsage
ArrayList<FixedViewInfo> mHeaderViewInfos = Lists.newArrayList();
+ @UnsupportedAppUsage
ArrayList<FixedViewInfo> mFooterViewInfos = Lists.newArrayList();
+ @UnsupportedAppUsage
Drawable mDivider;
+ @UnsupportedAppUsage
int mDividerHeight;
Drawable mOverScrollHeader;
@@ -196,6 +201,7 @@
private boolean mHeaderDividersEnabled;
private boolean mFooterDividersEnabled;
+ @UnsupportedAppUsage
private boolean mAreAllItemsSelectable = true;
private boolean mItemsCanFocus = false;
@@ -772,6 +778,7 @@
* @return The view that is currently selected, if it happens to be in the
* range that we draw.
*/
+ @UnsupportedAppUsage
private View fillDown(int pos, int nextTop) {
View selectedView = null;
@@ -806,6 +813,7 @@
*
* @return The view that is currently selected
*/
+ @UnsupportedAppUsage
private View fillUp(int pos, int nextBottom) {
View selectedView = null;
@@ -1382,6 +1390,7 @@
* startPosition is 0).
* @return The height of this ListView with the given children.
*/
+ @UnsupportedAppUsage
final int measureHeightOfChildren(int widthMeasureSpec, int startPosition, int endPosition,
int maxHeight, int disallowPartialChildPosition) {
final ListAdapter adapter = mAdapter;
@@ -1477,6 +1486,7 @@
* @return The selected view, or null if the selected view is outside the
* visible area.
*/
+ @UnsupportedAppUsage
private View fillSpecific(int position, int top) {
boolean tempIsSelected = position == mSelectedPosition;
View temp = makeAndAddView(position, top, true, mListPadding.left, tempIsSelected);
@@ -1523,6 +1533,7 @@
*
* @param childCount Number of children
*/
+ @UnsupportedAppUsage
private void correctTooHigh(int childCount) {
// First see if the last item is visible. If it is not, it is OK for the
// top of the list to be pushed up.
@@ -1572,6 +1583,7 @@
*
* @param childCount Number of children
*/
+ @UnsupportedAppUsage
private void correctTooLow(int childCount) {
// First see if the first item is visible. If it is not, it is OK for the
// bottom of the list to be pushed down.
@@ -1967,6 +1979,7 @@
}
@Override
+ @UnsupportedAppUsage
boolean trackMotionScroll(int deltaY, int incrementalDeltaY) {
final boolean result = super.trackMotionScroll(deltaY, incrementalDeltaY);
removeUnusedFixedViews(mHeaderViewInfos);
@@ -2000,6 +2013,7 @@
* @param child a direct child of this list.
* @return Whether child is a header or footer view.
*/
+ @UnsupportedAppUsage
private boolean isDirectChildHeaderOrFooter(View child) {
final ArrayList<FixedViewInfo> headers = mHeaderViewInfos;
final int numHeaders = headers.size();
@@ -2034,6 +2048,7 @@
* otherwise
* @return the view that was added
*/
+ @UnsupportedAppUsage
private View makeAndAddView(int position, int y, boolean flow, int childrenLeft,
boolean selected) {
if (!mDataChanged) {
@@ -2195,6 +2210,7 @@
* @param position the position of the item to select
*/
@Override
+ @UnsupportedAppUsage
void setSelectionInt(int position) {
setNextSelectedPositionInt(position);
boolean awakeScrollbars = false;
@@ -2229,6 +2245,7 @@
* down. Returns {@link #INVALID_POSITION} if nothing can be found.
*/
@Override
+ @UnsupportedAppUsage
int lookForSelectablePosition(int position, boolean lookDown) {
final ListAdapter adapter = mAdapter;
if (adapter == null || isInTouchMode()) {
@@ -2636,6 +2653,7 @@
*
* @return whether selection was moved
*/
+ @UnsupportedAppUsage
boolean arrowScroll(int direction) {
try {
mInLayout = true;
@@ -3235,6 +3253,7 @@
*
* @param amount The amount (positive or negative) to scroll.
*/
+ @UnsupportedAppUsage
private void scrollListItemsBy(int amount) {
offsetChildrenTopAndBottom(amount);
@@ -4001,6 +4020,7 @@
}
@Override
+ @UnsupportedAppUsage
int getHeightForPosition(int position) {
final int height = super.getHeightForPosition(position);
if (shouldAdjustHeightForDivider(position)) {
diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java
index 8e04f1c..82d77c5 100644
--- a/core/java/android/widget/MediaController.java
+++ b/core/java/android/widget/MediaController.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.PixelFormat;
@@ -68,16 +69,29 @@
*/
public class MediaController extends FrameLayout {
+ @UnsupportedAppUsage
private MediaPlayerControl mPlayer;
+ @UnsupportedAppUsage
private final Context mContext;
+ @UnsupportedAppUsage
private View mAnchor;
+ @UnsupportedAppUsage
private View mRoot;
+ @UnsupportedAppUsage
private WindowManager mWindowManager;
+ @UnsupportedAppUsage
private Window mWindow;
+ @UnsupportedAppUsage
private View mDecor;
+ @UnsupportedAppUsage
private WindowManager.LayoutParams mDecorLayoutParams;
+ @UnsupportedAppUsage
private ProgressBar mProgress;
- private TextView mEndTime, mCurrentTime;
+ @UnsupportedAppUsage
+ private TextView mEndTime;
+ @UnsupportedAppUsage
+ private TextView mCurrentTime;
+ @UnsupportedAppUsage
private boolean mShowing;
private boolean mDragging;
private static final int sDefaultTimeout = 3000;
@@ -87,10 +101,15 @@
private View.OnClickListener mNextListener, mPrevListener;
StringBuilder mFormatBuilder;
Formatter mFormatter;
+ @UnsupportedAppUsage
private ImageButton mPauseButton;
+ @UnsupportedAppUsage
private ImageButton mFfwdButton;
+ @UnsupportedAppUsage
private ImageButton mRewButton;
+ @UnsupportedAppUsage
private ImageButton mNextButton;
+ @UnsupportedAppUsage
private ImageButton mPrevButton;
private CharSequence mPlayDescription;
private CharSequence mPauseDescription;
@@ -535,6 +554,7 @@
}
};
+ @UnsupportedAppUsage
private void updatePausePlay() {
if (mRoot == null || mPauseButton == null)
return;
@@ -568,6 +588,7 @@
// The second scenario involves the user operating the scroll ball, in this
// case there WON'T BE onStartTrackingTouch/onStopTrackingTouch notifications,
// we will simply apply the updated position without suspending regular updates.
+ @UnsupportedAppUsage
private final OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
@Override
public void onStartTrackingTouch(SeekBar bar) {
@@ -641,6 +662,7 @@
return MediaController.class.getName();
}
+ @UnsupportedAppUsage
private final View.OnClickListener mRewListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -653,6 +675,7 @@
}
};
+ @UnsupportedAppUsage
private final View.OnClickListener mFfwdListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
index d98b865..b6ed22c 100644
--- a/core/java/android/widget/NumberPicker.java
+++ b/core/java/android/widget/NumberPicker.java
@@ -19,6 +19,7 @@
import android.annotation.CallSuper;
import android.annotation.IntDef;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.Widget;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -98,6 +99,7 @@
/**
* The number of items show in the selector wheel.
*/
+ @UnsupportedAppUsage
private static final int SELECTOR_WHEEL_ITEM_COUNT = 3;
/**
@@ -108,6 +110,7 @@
/**
* The index of the middle selector item.
*/
+ @UnsupportedAppUsage
private static final int SELECTOR_MIDDLE_ITEM_INDEX = SELECTOR_WHEEL_ITEM_COUNT / 2;
/**
@@ -204,6 +207,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public static final Formatter getTwoDigitFormatter() {
return sTwoDigitFormatter;
}
@@ -221,6 +225,7 @@
/**
* The text for showing the current value.
*/
+ @UnsupportedAppUsage
private final EditText mInputText;
/**
@@ -231,6 +236,7 @@
/**
* The min height of this widget.
*/
+ @UnsupportedAppUsage
private final int mMinHeight;
/**
@@ -241,6 +247,7 @@
/**
* The max width of this widget.
*/
+ @UnsupportedAppUsage
private final int mMinWidth;
/**
@@ -256,6 +263,7 @@
/**
* The height of the text.
*/
+ @UnsupportedAppUsage
private final int mTextSize;
/**
@@ -276,6 +284,7 @@
/**
* Upper value of the range of numbers allowed for the NumberPicker
*/
+ @UnsupportedAppUsage
private int mMaxValue;
/**
@@ -286,6 +295,7 @@
/**
* Listener to be notified upon current value change.
*/
+ @UnsupportedAppUsage
private OnValueChangeListener mOnValueChangeListener;
/**
@@ -311,11 +321,13 @@
/**
* The selector indices whose value are show by the selector.
*/
+ @UnsupportedAppUsage
private final int[] mSelectorIndices = new int[SELECTOR_WHEEL_ITEM_COUNT];
/**
* The {@link Paint} for drawing the selector.
*/
+ @UnsupportedAppUsage
private final Paint mSelectorWheelPaint;
/**
@@ -341,6 +353,7 @@
/**
* The {@link Scroller} responsible for flinging the selector.
*/
+ @UnsupportedAppUsage
private final Scroller mFlingScroller;
/**
@@ -402,6 +415,7 @@
/**
* @see ViewConfiguration#getScaledMaximumFlingVelocity()
*/
+ @UnsupportedAppUsage
private int mMaximumFlingVelocity;
/**
@@ -422,11 +436,13 @@
/**
* Divider for showing item to be selected while scrolling
*/
+ @UnsupportedAppUsage
private final Drawable mSelectionDivider;
/**
* The height of the selection divider.
*/
+ @UnsupportedAppUsage
private final int mSelectionDividerHeight;
/**
@@ -1715,6 +1731,7 @@
* Resets the selector indices and clear the cached string representation of
* these indices.
*/
+ @UnsupportedAppUsage
private void initializeSelectorWheelIndices() {
mSelectorIndexToStringCache.clear();
int[] selectorIndices = mSelectorIndices;
@@ -1766,6 +1783,7 @@
*
* @param increment True to increment, false to decrement.
*/
+ @UnsupportedAppUsage
private void changeValueByOne(boolean increment) {
if (mHasSelectorWheel) {
hideSoftInput();
diff --git a/core/java/android/widget/OverScroller.java b/core/java/android/widget/OverScroller.java
index 9938789..e7a96be 100644
--- a/core/java/android/widget/OverScroller.java
+++ b/core/java/android/widget/OverScroller.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.hardware.SensorManager;
import android.util.Log;
@@ -32,8 +33,10 @@
private int mMode;
private final SplineOverScroller mScrollerX;
+ @UnsupportedAppUsage
private final SplineOverScroller mScrollerY;
+ @UnsupportedAppUsage
private Interpolator mInterpolator;
private final boolean mFlywheel;
@@ -68,6 +71,7 @@
* @param flywheel If true, successive fling motions will keep on increasing scroll speed.
* @hide
*/
+ @UnsupportedAppUsage
public OverScroller(Context context, Interpolator interpolator, boolean flywheel) {
if (interpolator == null) {
mInterpolator = new Scroller.ViscousFluidInterpolator();
@@ -116,6 +120,7 @@
this(context, interpolator, flywheel);
}
+ @UnsupportedAppUsage
void setInterpolator(Interpolator interpolator) {
if (interpolator == null) {
mInterpolator = new Scroller.ViscousFluidInterpolator();
@@ -250,6 +255,7 @@
* to begin a new animation.
*/
@Deprecated
+ @UnsupportedAppUsage
public void extendDuration(int extend) {
mScrollerX.extendDuration(extend);
mScrollerY.extendDuration(extend);
@@ -530,6 +536,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public boolean isScrollingInDirection(float xvel, float yvel) {
final int dx = mScrollerX.mFinal - mScrollerX.mStart;
final int dy = mScrollerY.mFinal - mScrollerY.mStart;
@@ -551,6 +558,7 @@
private int mVelocity;
// Current velocity
+ @UnsupportedAppUsage
private float mCurrVelocity;
// Constant current deceleration
diff --git a/core/java/android/widget/PopupMenu.java b/core/java/android/widget/PopupMenu.java
index 59bbc3b..d82e56c 100644
--- a/core/java/android/widget/PopupMenu.java
+++ b/core/java/android/widget/PopupMenu.java
@@ -18,6 +18,7 @@
import android.annotation.MenuRes;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.view.Gravity;
import android.view.Menu;
@@ -39,9 +40,11 @@
* it.
*/
public class PopupMenu {
+ @UnsupportedAppUsage
private final Context mContext;
private final MenuBuilder mMenu;
private final View mAnchor;
+ @UnsupportedAppUsage
private final MenuPopupHelper mPopup;
private OnMenuItemClickListener mMenuItemClickListener;
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index 9553cf5..0da47fd 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -24,6 +24,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.PixelFormat;
@@ -141,7 +142,9 @@
private final int[] mTmpAppLocation = new int[2];
private final Rect mTempRect = new Rect();
+ @UnsupportedAppUsage
private Context mContext;
+ @UnsupportedAppUsage
private WindowManager mWindowManager;
/**
@@ -150,17 +153,22 @@
*/
private WeakReference<View> mParentRootView;
+ @UnsupportedAppUsage
private boolean mIsShowing;
private boolean mIsTransitioningToDismiss;
+ @UnsupportedAppUsage
private boolean mIsDropdown;
/** View that handles event dispatch and content transitions. */
+ @UnsupportedAppUsage
private PopupDecorView mDecorView;
/** View that holds the background and may animate during a transition. */
+ @UnsupportedAppUsage
private View mBackgroundView;
/** The contents of the popup. May be identical to the background view. */
+ @UnsupportedAppUsage
private View mContentView;
private boolean mFocusable;
@@ -171,39 +179,52 @@
private boolean mOutsideTouchable = false;
private boolean mClippingEnabled = true;
private int mSplitTouchEnabled = -1;
+ @UnsupportedAppUsage
private boolean mLayoutInScreen;
private boolean mClipToScreen;
private boolean mAllowScrollingAnchorParent = true;
private boolean mLayoutInsetDecor = false;
+ @UnsupportedAppUsage
private boolean mNotTouchModal;
private boolean mAttachedInDecor = true;
private boolean mAttachedInDecorSet = false;
+ @UnsupportedAppUsage
private OnTouchListener mTouchInterceptor;
+ @UnsupportedAppUsage
private int mWidthMode;
private int mWidth = LayoutParams.WRAP_CONTENT;
+ @UnsupportedAppUsage
private int mLastWidth;
+ @UnsupportedAppUsage
private int mHeightMode;
private int mHeight = LayoutParams.WRAP_CONTENT;
+ @UnsupportedAppUsage
private int mLastHeight;
private float mElevation;
private Drawable mBackground;
+ @UnsupportedAppUsage
private Drawable mAboveAnchorBackgroundDrawable;
+ @UnsupportedAppUsage
private Drawable mBelowAnchorBackgroundDrawable;
private Transition mEnterTransition;
private Transition mExitTransition;
private Rect mEpicenterBounds;
+ @UnsupportedAppUsage
private boolean mAboveAnchor;
+ @UnsupportedAppUsage
private int mWindowLayoutType = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;
+ @UnsupportedAppUsage
private OnDismissListener mOnDismissListener;
private boolean mIgnoreCheekPress = false;
+ @UnsupportedAppUsage
private int mAnimationStyle = ANIMATION_STYLE_DEFAULT;
private int mGravity = Gravity.NO_GRAVITY;
@@ -238,10 +259,12 @@
}
};
+ @UnsupportedAppUsage
private WeakReference<View> mAnchor;
private WeakReference<View> mAnchorRoot;
private boolean mIsAnchorRootAttached;
+ @UnsupportedAppUsage
private final OnScrollChangedListener mOnScrollChangedListener = this::alignToAnchor;
private final View.OnLayoutChangeListener mOnLayoutChangeListener =
@@ -250,6 +273,7 @@
private int mAnchorXoff;
private int mAnchorYoff;
private int mAnchoredGravity;
+ @UnsupportedAppUsage
private boolean mOverlapAnchor;
private boolean mPopupViewInitialLayoutDirectionInherited;
@@ -466,6 +490,7 @@
* @see #getTransitionEpicenter()
* @hide
*/
+ @UnsupportedAppUsage
public void setEpicenterBounds(Rect bounds) {
mEpicenterBounds = bounds;
}
@@ -845,6 +870,7 @@
* @param enabled True to clip to the screen.
* @hide
*/
+ @UnsupportedAppUsage
public void setClipToScreenEnabled(boolean enabled) {
mClipToScreen = enabled;
}
@@ -855,6 +881,7 @@
*
* @param enabled True to scroll the anchor's parent when more room is desired by the popup.
*/
+ @UnsupportedAppUsage
void setAllowScrollingAnchorParent(boolean enabled) {
mAllowScrollingAnchorParent = enabled;
}
@@ -914,6 +941,7 @@
* @param enabled true if the popup should always be positioned in screen coordinates
* @hide
*/
+ @UnsupportedAppUsage
public void setLayoutInScreenEnabled(boolean enabled) {
mLayoutInScreen = enabled;
}
@@ -960,6 +988,7 @@
* the way that decor views behave for full-screen windows.
* @hide
*/
+ @UnsupportedAppUsage
public void setLayoutInsetDecor(boolean enabled) {
mLayoutInsetDecor = enabled;
}
@@ -996,6 +1025,7 @@
* other windows behind it.
* @hide
*/
+ @UnsupportedAppUsage
public void setTouchModal(boolean touchModal) {
mNotTouchModal = !touchModal;
}
@@ -1181,6 +1211,7 @@
* @hide Internal use only. Applications should use
* {@link #showAtLocation(View, int, int, int)} instead.
*/
+ @UnsupportedAppUsage
public void showAtLocation(IBinder token, int gravity, int x, int y) {
if (isShowing() || mContentView == null) {
return;
@@ -1285,6 +1316,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
protected final void updateAboveAnchor(boolean aboveAnchor) {
if (aboveAnchor != mAboveAnchor) {
mAboveAnchor = aboveAnchor;
@@ -1328,6 +1360,7 @@
*
* @param p the layout parameters of the popup's content view
*/
+ @UnsupportedAppUsage
private void preparePopup(WindowManager.LayoutParams p) {
if (mContentView == null || mContext == null || mWindowManager == null) {
throw new IllegalStateException("You must specify a valid content view by "
@@ -1421,6 +1454,7 @@
*
* @param p the layout parameters of the popup's content view
*/
+ @UnsupportedAppUsage
private void invokePopup(WindowManager.LayoutParams p) {
if (mContext != null) {
p.packageName = mContext.getPackageName();
@@ -1464,6 +1498,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
protected final WindowManager.LayoutParams createPopupLayoutParams(IBinder token) {
final WindowManager.LayoutParams p = new WindowManager.LayoutParams();
@@ -1552,6 +1587,7 @@
return curFlags;
}
+ @UnsupportedAppUsage
private int computeAnimationResource() {
if (mAnimationStyle == ANIMATION_STYLE_DEFAULT) {
if (mIsDropdown) {
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index e7c3a47..1fc72f5 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -20,6 +20,7 @@
import android.annotation.InterpolatorRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
@@ -167,9 +168,12 @@
/** Duration of smooth progress animations. */
private static final int PROGRESS_ANIM_DURATION = 80;
+ @UnsupportedAppUsage
int mMinWidth;
int mMaxWidth;
+ @UnsupportedAppUsage
int mMinHeight;
+ @UnsupportedAppUsage
int mMaxHeight;
private int mProgress;
@@ -180,8 +184,11 @@
private boolean mMaxInitialized;
private int mBehavior;
+ @UnsupportedAppUsage
private int mDuration;
+ @UnsupportedAppUsage
private boolean mIndeterminate;
+ @UnsupportedAppUsage
private boolean mOnlyIndeterminate;
private Transformation mTransformation;
private AlphaAnimation mAnimation;
@@ -189,6 +196,7 @@
private Drawable mIndeterminateDrawable;
private Drawable mProgressDrawable;
+ @UnsupportedAppUsage
private Drawable mCurrentDrawable;
private ProgressTintInfo mProgressTintInfo;
@@ -206,6 +214,7 @@
/** Value used to track progress animation, in the range [0...1]. */
private float mVisualProgress;
+ @UnsupportedAppUsage
boolean mMirrorForRtl = false;
private boolean mAggregatedIsVisible;
@@ -424,6 +433,7 @@
* Converts a drawable to a tiled version of itself. It will recursively
* traverse layer and state list drawables.
*/
+ @UnsupportedAppUsage
private Drawable tileify(Drawable drawable, boolean clip) {
// TODO: This is a terrible idea that potentially destroys any drawable
// that extends any of these classes. We *really* need to remove this.
@@ -1347,6 +1357,7 @@
// Stub method.
}
+ @UnsupportedAppUsage
private synchronized void refreshProgress(int id, int progress, boolean fromUser,
boolean animate) {
if (mUiThreadId == Thread.currentThread().getId()) {
@@ -1401,6 +1412,7 @@
}
@android.view.RemotableViewMethod
+ @UnsupportedAppUsage
synchronized boolean setProgressInternal(int progress, boolean fromUser, boolean animate) {
if (mIndeterminate) {
// Not applicable.
@@ -1599,6 +1611,7 @@
/**
* <p>Start the indeterminate progress animation.</p>
*/
+ @UnsupportedAppUsage
void startAnimation() {
if (getVisibility() != VISIBLE || getWindowVisibility() != VISIBLE) {
return;
@@ -1638,6 +1651,7 @@
/**
* <p>Stop the indeterminate progress animation.</p>
*/
+ @UnsupportedAppUsage
void stopAnimation() {
mHasAnimation = false;
if (mIndeterminateDrawable instanceof Animatable) {
diff --git a/core/java/android/widget/QuickContactBadge.java b/core/java/android/widget/QuickContactBadge.java
index 8f6b0d5..c1a217c 100644
--- a/core/java/android/widget/QuickContactBadge.java
+++ b/core/java/android/widget/QuickContactBadge.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.content.Context;
@@ -46,6 +47,7 @@
private Uri mContactUri;
private String mContactEmail;
private String mContactPhone;
+ @UnsupportedAppUsage
private Drawable mOverlay;
private QueryHandler mQueryHandler;
private Drawable mDefaultAvatar;
diff --git a/core/java/android/widget/RadioGroup.java b/core/java/android/widget/RadioGroup.java
index c987147..327a5c1 100644
--- a/core/java/android/widget/RadioGroup.java
+++ b/core/java/android/widget/RadioGroup.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.IdRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
@@ -60,9 +61,11 @@
// holds the checked id; the selection is empty by default
private int mCheckedId = -1;
// tracks children radio buttons checked state
+ @UnsupportedAppUsage
private CompoundButton.OnCheckedChangeListener mChildOnCheckedChangeListener;
// when true, mOnCheckedChangeListener discards events
private boolean mProtectFromCheckedChange = false;
+ @UnsupportedAppUsage
private OnCheckedChangeListener mOnCheckedChangeListener;
private PassThroughHierarchyChangeListener mPassThroughListener;
diff --git a/core/java/android/widget/RatingBar.java b/core/java/android/widget/RatingBar.java
index 70b70bc..d343d49 100644
--- a/core/java/android/widget/RatingBar.java
+++ b/core/java/android/widget/RatingBar.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.shapes.RectShape;
@@ -79,6 +80,7 @@
private int mProgressOnStartTracking;
+ @UnsupportedAppUsage
private OnRatingBarChangeListener mOnRatingBarChangeListener;
public RatingBar(Context context, AttributeSet attrs, int defStyleAttr) {
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java
index d1de498..74051e2 100644
--- a/core/java/android/widget/RelativeLayout.java
+++ b/core/java/android/widget/RelativeLayout.java
@@ -19,6 +19,7 @@
import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
@@ -203,6 +204,7 @@
private View mBaselineView = null;
+ @UnsupportedAppUsage
private int mGravity = Gravity.START | Gravity.TOP;
private final Rect mContentBounds = new Rect();
private final Rect mSelfBounds = new Rect();
@@ -1247,9 +1249,13 @@
private int[] mRules = new int[VERB_COUNT];
private int[] mInitialRules = new int[VERB_COUNT];
+ @UnsupportedAppUsage
private int mLeft;
+ @UnsupportedAppUsage
private int mTop;
+ @UnsupportedAppUsage
private int mRight;
+ @UnsupportedAppUsage
private int mBottom;
/**
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 22c840b..8fa8ef8 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -22,6 +22,7 @@
import android.annotation.DimenRes;
import android.annotation.NonNull;
import android.annotation.StyleRes;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityOptions;
import android.app.ActivityThread;
import android.app.Application;
@@ -159,22 +160,26 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public ApplicationInfo mApplication;
/**
* The resource ID of the layout file. (Added to the parcel)
*/
+ @UnsupportedAppUsage
private final int mLayoutId;
/**
* An array of actions to perform on the view tree once it has been
* inflated
*/
+ @UnsupportedAppUsage
private ArrayList<Action> mActions;
/**
* Maps bitmaps to unique indicies to avoid Bitmap duplication.
*/
+ @UnsupportedAppUsage
private BitmapCache mBitmapCache;
/**
@@ -208,6 +213,7 @@
* RemoteViews.
*/
private RemoteViews mLandscape = null;
+ @UnsupportedAppUsage
private RemoteViews mPortrait = null;
/**
@@ -360,6 +366,7 @@
private int mEnterAnimationId;
+ @UnsupportedAppUsage
public boolean onClickHandler(View view, PendingIntent pendingIntent,
Intent fillInIntent) {
return onClickHandler(view, pendingIntent, fillInIntent, WINDOWING_MODE_UNDEFINED);
@@ -422,6 +429,7 @@
// Do nothing
}
+ @UnsupportedAppUsage
public int mergeBehavior() {
return MERGE_REPLACE;
}
@@ -457,6 +465,7 @@
// Nothing to visit by default
}
+ @UnsupportedAppUsage
int viewId;
}
@@ -489,6 +498,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void mergeRemoteViews(RemoteViews newRv) {
if (newRv == null) return;
// We first copy the new RemoteViews, as the process of merging modifies the way the actions
@@ -764,6 +774,7 @@
return SET_PENDING_INTENT_TEMPLATE_TAG;
}
+ @UnsupportedAppUsage
PendingIntent pendingIntentTemplate;
}
@@ -963,6 +974,7 @@
return SET_ON_CLICK_PENDING_INTENT_TAG;
}
+ @UnsupportedAppUsage
PendingIntent pendingIntent;
}
@@ -1154,6 +1166,7 @@
private static class BitmapCache {
+ @UnsupportedAppUsage
ArrayList<Bitmap> mBitmaps;
int mBitmapMemory = -1;
@@ -1205,7 +1218,9 @@
private class BitmapReflectionAction extends Action {
int bitmapId;
+ @UnsupportedAppUsage
Bitmap bitmap;
+ @UnsupportedAppUsage
String methodName;
BitmapReflectionAction(int viewId, String methodName, Bitmap bitmap) {
@@ -1271,8 +1286,10 @@
static final int COLOR_STATE_LIST = 15;
static final int ICON = 16;
+ @UnsupportedAppUsage
String methodName;
int type;
+ @UnsupportedAppUsage
Object value;
ReflectionAction(int viewId, String methodName, int type, Object value) {
@@ -1565,6 +1582,7 @@
* ViewGroup methods that are related to adding Views.
*/
private class ViewGroupActionAdd extends Action {
+ @UnsupportedAppUsage
private RemoteViews mNestedViews;
private int mIndex;
@@ -2421,6 +2439,7 @@
* setting on click extras and setting on click pending intents. The former is enabled,
* and the latter disabled when this flag is true.
*/
+ @UnsupportedAppUsage
void setIsWidgetCollectionChild(boolean isWidgetCollectionChild) {
mIsWidgetCollectionChild = isWidgetCollectionChild;
}
@@ -2447,6 +2466,7 @@
* Returns an estimate of the bitmap heap memory usage for this RemoteViews.
*/
/** @hide */
+ @UnsupportedAppUsage
public int estimateMemoryUsage() {
return mBitmapCache.getBitmapMemory();
}
@@ -2494,6 +2514,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void addView(int viewId, RemoteViews nestedView, int index) {
addAction(new ViewGroupActionAdd(viewId, nestedView, index));
}
@@ -2941,6 +2962,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setRemoteAdapter(int viewId, ArrayList<RemoteViews> list, int viewTypeCount) {
addAction(new SetRemoteViewsAdapterList(viewId, list, viewTypeCount));
}
diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java
index e5ae0ca..d17c7c5 100644
--- a/core/java/android/widget/RemoteViewsAdapter.java
+++ b/core/java/android/widget/RemoteViewsAdapter.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.WorkerThread;
import android.app.IServiceConnection;
import android.appwidget.AppWidgetHostView;
@@ -99,6 +100,7 @@
private final Executor mAsyncViewLoadExecutor;
private OnClickHandler mRemoteViewsOnClickHandler;
+ @UnsupportedAppUsage
private final FixedSizeRemoteViewsCache mCache;
private int mVisibleWindowLowerBound;
private int mVisibleWindowUpperBound;
@@ -107,6 +109,7 @@
// loaded.
private RemoteViewsFrameLayoutRefSet mRequestedViews;
+ @UnsupportedAppUsage
private final HandlerThread mWorkerThread;
// items may be interrupted within the normally processed queues
private final Handler mMainHandler;
@@ -869,14 +872,17 @@
}
}
+ @UnsupportedAppUsage
public boolean isDataReady() {
return mDataReady;
}
+ @UnsupportedAppUsage
public void setRemoteViewsOnClickHandler(OnClickHandler handler) {
mRemoteViewsOnClickHandler = handler;
}
+ @UnsupportedAppUsage
public void saveRemoteViewsCache() {
final RemoteViewsCacheKey key = new RemoteViewsCacheKey(
new Intent.FilterComparison(mIntent), mAppWidgetId);
@@ -1021,6 +1027,7 @@
}
}
+ @UnsupportedAppUsage
public Intent getRemoteViewsServiceIntent() {
return mIntent;
}
@@ -1067,6 +1074,7 @@
* views are currently being displayed. This allows for certain optimizations and preloading
* which wouldn't otherwise be possible.
*/
+ @UnsupportedAppUsage
public void setVisibleRangeHint(int lowerBound, int upperBound) {
mVisibleWindowLowerBound = lowerBound;
mVisibleWindowUpperBound = upperBound;
diff --git a/core/java/android/widget/ScrollBarDrawable.java b/core/java/android/widget/ScrollBarDrawable.java
index 2ae38c9..e91f87e 100644
--- a/core/java/android/widget/ScrollBarDrawable.java
+++ b/core/java/android/widget/ScrollBarDrawable.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
@@ -35,6 +36,7 @@
public class ScrollBarDrawable extends Drawable implements Drawable.Callback {
private Drawable mVerticalTrack;
private Drawable mHorizontalTrack;
+ @UnsupportedAppUsage
private Drawable mVerticalThumb;
private Drawable mHorizontalThumb;
@@ -224,6 +226,7 @@
}
}
+ @UnsupportedAppUsage
public void setVerticalThumbDrawable(Drawable thumb) {
if (mVerticalThumb != null) {
mVerticalThumb.setCallback(null);
@@ -242,6 +245,7 @@
mVerticalTrack = track;
}
+ @UnsupportedAppUsage
public void setHorizontalThumbDrawable(Drawable thumb) {
if (mHorizontalThumb != null) {
mHorizontalThumb.setCallback(null);
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 97d32f1..4658d73 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
@@ -81,16 +82,21 @@
private static final String TAG = "ScrollView";
+ @UnsupportedAppUsage
private long mLastScroll;
private final Rect mTempRect = new Rect();
+ @UnsupportedAppUsage
private OverScroller mScroller;
+ @UnsupportedAppUsage
private EdgeEffect mEdgeGlowTop;
+ @UnsupportedAppUsage
private EdgeEffect mEdgeGlowBottom;
/**
* Position of the last motion event.
*/
+ @UnsupportedAppUsage
private int mLastMotionY;
/**
@@ -104,6 +110,7 @@
* layout is dirty. This prevents the scroll from being wrong if the child has not been
* laid out before requesting focus.
*/
+ @UnsupportedAppUsage
private View mChildToScrollTo = null;
/**
@@ -111,11 +118,13 @@
* not the same as 'is being flinged', which can be checked by
* mScroller.isFinished() (flinging begins when the user lifts his finger).
*/
+ @UnsupportedAppUsage
private boolean mIsBeingDragged = false;
/**
* Determines speed during touch scrolling
*/
+ @UnsupportedAppUsage
private VelocityTracker mVelocityTracker;
/**
@@ -131,10 +140,13 @@
private boolean mSmoothScrollingEnabled = true;
private int mTouchSlop;
+ @UnsupportedAppUsage
private int mMinimumVelocity;
private int mMaximumVelocity;
+ @UnsupportedAppUsage
private int mOverscrollDistance;
+ @UnsupportedAppUsage
private int mOverflingDistance;
private float mVerticalScrollFactor;
@@ -159,6 +171,7 @@
* These are no-ops on user builds.
*/
private StrictMode.Span mScrollStrictSpan = null; // aka "drag"
+ @UnsupportedAppUsage
private StrictMode.Span mFlingStrictSpan = null;
/**
@@ -294,6 +307,7 @@
/**
* @return Returns true this ScrollView can be scrolled
*/
+ @UnsupportedAppUsage
private boolean canScroll() {
View child = getChildAt(0);
if (child != null) {
@@ -1644,6 +1658,7 @@
}
}
+ @UnsupportedAppUsage
private void endDrag() {
mIsBeingDragged = false;
diff --git a/core/java/android/widget/Scroller.java b/core/java/android/widget/Scroller.java
index 357c9c3..229eaf0 100644
--- a/core/java/android/widget/Scroller.java
+++ b/core/java/android/widget/Scroller.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.hardware.SensorManager;
import android.os.Build;
@@ -60,6 +61,7 @@
* }</pre>
*/
public class Scroller {
+ @UnsupportedAppUsage
private final Interpolator mInterpolator;
private int mMode;
@@ -77,6 +79,7 @@
private int mCurrX;
private int mCurrY;
private long mStartTime;
+ @UnsupportedAppUsage
private int mDuration;
private float mDurationReciprocal;
private float mDeltaX;
@@ -94,7 +97,9 @@
private static final int SCROLL_MODE = 0;
private static final int FLING_MODE = 1;
+ @UnsupportedAppUsage
private static float DECELERATION_RATE = (float) (Math.log(0.78) / Math.log(0.9));
+ @UnsupportedAppUsage
private static final float INFLEXION = 0.35f; // Tension lines cross at (INFLEXION, 1)
private static final float START_TENSION = 0.5f;
private static final float END_TENSION = 1.0f;
@@ -105,10 +110,12 @@
private static final float[] SPLINE_POSITION = new float[NB_SAMPLES + 1];
private static final float[] SPLINE_TIME = new float[NB_SAMPLES + 1];
+ @UnsupportedAppUsage
private float mDeceleration;
private final float mPpi;
// A context-specific coefficient adjusted to physical values.
+ @UnsupportedAppUsage
private float mPhysicalCoeff;
static {
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java
index 225497b..5b5950d 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -19,6 +19,7 @@
import static android.widget.SuggestionsAdapter.getColumnString;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.app.SearchManager;
import android.app.SearchableInfo;
@@ -105,13 +106,20 @@
*/
private static final String IME_OPTION_NO_MICROPHONE = "nm";
+ @UnsupportedAppUsage
private final SearchAutoComplete mSearchSrcTextView;
+ @UnsupportedAppUsage
private final View mSearchEditFrame;
+ @UnsupportedAppUsage
private final View mSearchPlate;
+ @UnsupportedAppUsage
private final View mSubmitArea;
+ @UnsupportedAppUsage
private final ImageView mSearchButton;
private final ImageView mGoButton;
+ @UnsupportedAppUsage
private final ImageView mCloseButton;
+ @UnsupportedAppUsage
private final ImageView mVoiceButton;
private final View mDropDownAnchor;
@@ -125,6 +133,7 @@
private final ImageView mCollapsedIcon;
/** Drawable used as an EditText hint. */
+ @UnsupportedAppUsage
private final Drawable mSearchHintIcon;
// Resources used by SuggestionsAdapter to display suggestions.
@@ -137,24 +146,33 @@
private final CharSequence mDefaultQueryHint;
+ @UnsupportedAppUsage
private OnQueryTextListener mOnQueryChangeListener;
private OnCloseListener mOnCloseListener;
private OnFocusChangeListener mOnQueryTextFocusChangeListener;
private OnSuggestionListener mOnSuggestionListener;
private OnClickListener mOnSearchClickListener;
+ @UnsupportedAppUsage
private boolean mIconifiedByDefault;
+ @UnsupportedAppUsage
private boolean mIconified;
+ @UnsupportedAppUsage
private CursorAdapter mSuggestionsAdapter;
private boolean mSubmitButtonEnabled;
private CharSequence mQueryHint;
private boolean mQueryRefinement;
+ @UnsupportedAppUsage
private boolean mClearingFocus;
private int mMaxWidth;
+ @UnsupportedAppUsage
private boolean mVoiceButtonEnabled;
private CharSequence mOldQueryText;
+ @UnsupportedAppUsage
private CharSequence mUserQuery;
+ @UnsupportedAppUsage
private boolean mExpandedInActionView;
+ @UnsupportedAppUsage
private int mCollapsedImeOptions;
private SearchableInfo mSearchable;
@@ -853,6 +871,7 @@
.getDimensionPixelSize(R.dimen.search_view_preferred_height);
}
+ @UnsupportedAppUsage
private void updateViewsVisibility(final boolean collapsed) {
mIconified = collapsed;
// Visibility of views that are visible when collapsed
@@ -898,6 +917,7 @@
return (mSubmitButtonEnabled || mVoiceButtonEnabled) && !isIconified();
}
+ @UnsupportedAppUsage
private void updateSubmitButton(boolean hasText) {
int visibility = GONE;
if (mSubmitButtonEnabled && isSubmitAreaEnabled() && hasFocus()
@@ -907,6 +927,7 @@
mGoButton.setVisibility(visibility);
}
+ @UnsupportedAppUsage
private void updateSubmitArea() {
int visibility = GONE;
if (isSubmitAreaEnabled()
@@ -962,6 +983,7 @@
setQuery(queryText);
}
+ @UnsupportedAppUsage
private final OnClickListener mOnClickListener = new OnClickListener() {
public void onClick(View v) {
@@ -1270,6 +1292,7 @@
mSearchSrcTextView.dismissDropDown();
}
+ @UnsupportedAppUsage
private void onCloseClicked() {
CharSequence text = mSearchSrcTextView.getText();
if (TextUtils.isEmpty(text)) {
@@ -1467,6 +1490,7 @@
return false;
}
+ @UnsupportedAppUsage
private final OnItemClickListener mOnItemClickListener = new OnItemClickListener() {
/**
@@ -1566,6 +1590,7 @@
/**
* Sets the text in the query box, without updating the suggestions.
*/
+ @UnsupportedAppUsage
private void setQuery(CharSequence query) {
mSearchSrcTextView.setText(query, true);
// Move the cursor to the end
@@ -1892,6 +1917,7 @@
mThreshold = getThreshold();
}
+ @UnsupportedAppUsage
public SearchAutoComplete(Context context, AttributeSet attrs) {
super(context, attrs);
mThreshold = getThreshold();
diff --git a/core/java/android/widget/SeekBar.java b/core/java/android/widget/SeekBar.java
index f9aced0..e8cf1e8 100644
--- a/core/java/android/widget/SeekBar.java
+++ b/core/java/android/widget/SeekBar.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.util.AttributeSet;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -69,6 +70,7 @@
void onStopTrackingTouch(SeekBar seekBar);
}
+ @UnsupportedAppUsage
private OnSeekBarChangeListener mOnSeekBarChangeListener;
public SeekBar(Context context) {
@@ -88,6 +90,7 @@
}
@Override
+ @UnsupportedAppUsage
void onProgressRefresh(float scale, boolean fromUser, int progress) {
super.onProgressRefresh(scale, fromUser, progress);
diff --git a/core/java/android/widget/SimpleAdapter.java b/core/java/android/widget/SimpleAdapter.java
index 9190117..a27354d 100644
--- a/core/java/android/widget/SimpleAdapter.java
+++ b/core/java/android/widget/SimpleAdapter.java
@@ -18,6 +18,7 @@
import android.annotation.IdRes;
import android.annotation.LayoutRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Resources;
import android.net.Uri;
@@ -58,6 +59,7 @@
private String[] mFrom;
private ViewBinder mViewBinder;
+ @UnsupportedAppUsage
private List<? extends Map<String, ?>> mData;
private int mResource;
diff --git a/core/java/android/widget/SimpleCursorAdapter.java b/core/java/android/widget/SimpleCursorAdapter.java
index 3dd0a95..b670e6c 100644
--- a/core/java/android/widget/SimpleCursorAdapter.java
+++ b/core/java/android/widget/SimpleCursorAdapter.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
@@ -51,12 +52,14 @@
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected int[] mFrom;
/**
* A list of View ids representing the views to which the data must be bound.
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected int[] mTo;
private int mStringConversionColumn = -1;
diff --git a/core/java/android/widget/SlidingDrawer.java b/core/java/android/widget/SlidingDrawer.java
index 9f48397..8011c3a 100644
--- a/core/java/android/widget/SlidingDrawer.java
+++ b/core/java/android/widget/SlidingDrawer.java
@@ -17,6 +17,7 @@
package android.widget;
import android.R;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
@@ -104,14 +105,17 @@
private final Rect mFrame = new Rect();
private final Rect mInvalidate = new Rect();
+ @UnsupportedAppUsage
private boolean mTracking;
private boolean mLocked;
+ @UnsupportedAppUsage
private VelocityTracker mVelocityTracker;
private boolean mVertical;
private boolean mExpanded;
private int mBottomOffset;
+ @UnsupportedAppUsage
private int mTopOffset;
private int mHandleHeight;
private int mHandleWidth;
@@ -125,6 +129,7 @@
private float mAnimationPosition;
private long mAnimationLastTime;
private long mCurrentAnimationTime;
+ @UnsupportedAppUsage
private int mTouchDelta;
private boolean mAnimating;
private boolean mAllowSingleTap;
@@ -555,6 +560,7 @@
stopTracking(notifyScrollListener);
}
+ @UnsupportedAppUsage
private void prepareTracking(int position) {
mTracking = true;
mVelocityTracker = VelocityTracker.obtain();
@@ -646,6 +652,7 @@
}
}
+ @UnsupportedAppUsage
private void prepareContent() {
if (mAnimating) {
return;
diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java
index ddf0e74..1705ba8 100644
--- a/core/java/android/widget/Spinner.java
+++ b/core/java/android/widget/Spinner.java
@@ -19,6 +19,7 @@
import android.annotation.DrawableRes;
import android.annotation.Nullable;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.Widget;
import android.app.AlertDialog;
import android.content.Context;
@@ -93,11 +94,13 @@
private final Context mPopupContext;
/** Forwarding listener used to implement drag-to-open. */
+ @UnsupportedAppUsage
private ForwardingListener mForwardingListener;
/** Temporary holder for setAdapter() calls from the super constructor. */
private SpinnerAdapter mTempAdapter;
+ @UnsupportedAppUsage
private SpinnerPopup mPopup;
int mDropDownWidth;
@@ -584,6 +587,7 @@
/**
* @hide internal use only
*/
+ @UnsupportedAppUsage
public void setOnItemClickListenerInt(OnItemClickListener l) {
super.setOnItemClickListener(l);
}
@@ -1069,6 +1073,7 @@
/**
* @return true if the popup is showing, false otherwise.
*/
+ @UnsupportedAppUsage
public boolean isShowing();
/**
@@ -1099,6 +1104,7 @@
}
}
+ @UnsupportedAppUsage
public boolean isShowing() {
return mPopup != null ? mPopup.isShowing() : false;
}
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index 604575f..8bfc151 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -21,6 +21,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StyleRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
@@ -93,12 +94,14 @@
private static final int SERIF = 2;
private static final int MONOSPACE = 3;
+ @UnsupportedAppUsage
private Drawable mThumbDrawable;
private ColorStateList mThumbTintList = null;
private PorterDuff.Mode mThumbTintMode = null;
private boolean mHasThumbTint = false;
private boolean mHasThumbTintMode = false;
+ @UnsupportedAppUsage
private Drawable mTrackDrawable;
private ColorStateList mTrackTintList = null;
private PorterDuff.Mode mTrackTintMode = null;
@@ -106,6 +109,7 @@
private boolean mHasTrackTintMode = false;
private int mThumbTextPadding;
+ @UnsupportedAppUsage
private int mSwitchMinWidth;
private int mSwitchPadding;
private boolean mSplitTrack;
@@ -127,18 +131,21 @@
* Width required to draw the switch track and thumb. Includes padding and
* optical bounds for both the track and thumb.
*/
+ @UnsupportedAppUsage
private int mSwitchWidth;
/**
* Height required to draw the switch track and thumb. Includes padding and
* optical bounds for both the track and thumb.
*/
+ @UnsupportedAppUsage
private int mSwitchHeight;
/**
* Width of the thumb's content region. Does not include padding or
* optical bounds.
*/
+ @UnsupportedAppUsage
private int mThumbWidth;
/** Left bound for drawing the switch track and thumb. */
@@ -155,7 +162,9 @@
private TextPaint mTextPaint;
private ColorStateList mTextColors;
+ @UnsupportedAppUsage
private Layout mOnLayout;
+ @UnsupportedAppUsage
private Layout mOffLayout;
private TransformationMethod2 mSwitchTransformationMethod;
private ObjectAnimator mPositionAnimator;
@@ -1050,6 +1059,7 @@
mPositionAnimator.start();
}
+ @UnsupportedAppUsage
private void cancelPositionAnimator() {
if (mPositionAnimator != null) {
mPositionAnimator.cancel();
@@ -1065,6 +1075,7 @@
*
* @param position new position between [0,1]
*/
+ @UnsupportedAppUsage
private void setThumbPosition(float position) {
mThumbPosition = position;
invalidate();
diff --git a/core/java/android/widget/TabHost.java b/core/java/android/widget/TabHost.java
index 8696d0d..b1fcbc3 100644
--- a/core/java/android/widget/TabHost.java
+++ b/core/java/android/widget/TabHost.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.LocalActivityManager;
import android.content.Context;
import android.content.Intent;
@@ -54,11 +55,13 @@
private static final int TABWIDGET_LOCATION_BOTTOM = 3;
private TabWidget mTabWidget;
private FrameLayout mTabContent;
+ @UnsupportedAppUsage
private List<TabSpec> mTabSpecs = new ArrayList<TabSpec>(2);
/**
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected int mCurrentTab = -1;
private View mCurrentView = null;
/**
@@ -66,6 +69,7 @@
* {@hide}
*/
protected LocalActivityManager mLocalActivityManager = null;
+ @UnsupportedAppUsage
private OnTabChangeListener mOnTabChangeListener;
private OnKeyListener mTabKeyListener;
@@ -504,7 +508,9 @@
private final @NonNull String mTag;
+ @UnsupportedAppUsage
private IndicatorStrategy mIndicatorStrategy;
+ @UnsupportedAppUsage
private ContentStrategy mContentStrategy;
/**
@@ -767,6 +773,7 @@
mIntent = intent;
}
+ @UnsupportedAppUsage
public View getContentView() {
if (mLocalActivityManager == null) {
throw new IllegalStateException("Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?");
@@ -796,6 +803,7 @@
return mLaunchedView;
}
+ @UnsupportedAppUsage
public void tabClosed() {
if (mLaunchedView != null) {
mLaunchedView.setVisibility(View.GONE);
diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java
index f8b6837..a90741b4 100644
--- a/core/java/android/widget/TabWidget.java
+++ b/core/java/android/widget/TabWidget.java
@@ -18,6 +18,7 @@
import android.annotation.DrawableRes;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
@@ -59,6 +60,7 @@
private OnTabSelectionChanged mSelectionChangedListener;
// This value will be set to 0 as soon as the first tab is added to TabHost.
+ @UnsupportedAppUsage
private int mSelectedTab = -1;
@Nullable
@@ -67,6 +69,7 @@
@Nullable
private Drawable mRightStrip;
+ @UnsupportedAppUsage
private boolean mDrawBottomStrips = true;
private boolean mStripMoved;
@@ -541,6 +544,7 @@
* Provides a way for {@link TabHost} to be notified that the user clicked
* on a tab indicator.
*/
+ @UnsupportedAppUsage
void setTabSelectionListener(OnTabSelectionChanged listener) {
mSelectionChangedListener = listener;
}
diff --git a/core/java/android/widget/TextClock.java b/core/java/android/widget/TextClock.java
index d8a9cca..4865808 100644
--- a/core/java/android/widget/TextClock.java
+++ b/core/java/android/widget/TextClock.java
@@ -21,6 +21,7 @@
import android.annotation.NonNull;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
@@ -485,6 +486,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public CharSequence getFormat() {
return mFormat;
}
@@ -623,6 +625,7 @@
/**
* Update the displayed time if this view and its ancestors and window is visible
*/
+ @UnsupportedAppUsage
private void onTimeChanged() {
// mShouldRunTicker always equals the last value passed into onVisibilityAggregated
if (mShouldRunTicker) {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 3941d6a..31b1d99 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -34,6 +34,7 @@
import android.annotation.Size;
import android.annotation.StringRes;
import android.annotation.StyleRes;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.XmlRes;
import android.app.Activity;
import android.app.PendingIntent;
@@ -365,6 +366,7 @@
*/
private static final int MARQUEE_FADE_SWITCH_SHOW_FADE = 2;
+ @UnsupportedAppUsage
private static final int LINES = 1;
private static final int EMS = LINES;
private static final int PIXELS = 2;
@@ -414,15 +416,22 @@
private ColorStateList mHintTextColor;
private ColorStateList mLinkTextColor;
@ViewDebug.ExportedProperty(category = "text")
+ @UnsupportedAppUsage
private int mCurTextColor;
+ @UnsupportedAppUsage
private int mCurHintTextColor;
private boolean mFreezesText;
+ @UnsupportedAppUsage
private Editable.Factory mEditableFactory = Editable.Factory.getInstance();
+ @UnsupportedAppUsage
private Spannable.Factory mSpannableFactory = Spannable.Factory.getInstance();
+ @UnsupportedAppUsage
private float mShadowRadius;
+ @UnsupportedAppUsage
private float mShadowDx;
+ @UnsupportedAppUsage
private float mShadowDy;
private int mShadowColor;
@@ -624,11 +633,15 @@
}
}
+ @UnsupportedAppUsage
Drawables mDrawables;
+ @UnsupportedAppUsage
private CharWrapper mCharWrapper;
+ @UnsupportedAppUsage
private Marquee mMarquee;
+ @UnsupportedAppUsage
private boolean mRestartMarquee;
private int mMarqueeRepeatLimit = 3;
@@ -640,37 +653,49 @@
* extensively in the same layout. This mode indicates how the marquee
* is currently being shown, if applicable. (mEllipsize will == MARQUEE)
*/
+ @UnsupportedAppUsage
private int mMarqueeFadeMode = MARQUEE_FADE_NORMAL;
/**
* When mMarqueeFadeMode is not MARQUEE_FADE_NORMAL, this stores
* the layout that should be used when the mode switches.
*/
+ @UnsupportedAppUsage
private Layout mSavedMarqueeModeLayout;
// Do not update following mText/mSpannable/mPrecomputed except for setTextInternal()
@ViewDebug.ExportedProperty(category = "text")
+ @UnsupportedAppUsage
private @Nullable CharSequence mText;
private @Nullable Spannable mSpannable;
private @Nullable PrecomputedText mPrecomputed;
+ @UnsupportedAppUsage
private CharSequence mTransformed;
+ @UnsupportedAppUsage
private BufferType mBufferType = BufferType.NORMAL;
private CharSequence mHint;
+ @UnsupportedAppUsage
private Layout mHintLayout;
private MovementMethod mMovement;
private TransformationMethod mTransformation;
+ @UnsupportedAppUsage
private boolean mAllowTransformationLengthChange;
+ @UnsupportedAppUsage
private ChangeWatcher mChangeWatcher;
+ @UnsupportedAppUsage
private ArrayList<TextWatcher> mListeners;
// display attributes
+ @UnsupportedAppUsage
private final TextPaint mTextPaint;
+ @UnsupportedAppUsage
private boolean mUserSetTextScaleX;
+ @UnsupportedAppUsage
private Layout mLayout;
private boolean mLocalesChanged = false;
@@ -682,34 +707,51 @@
/* package */ boolean mUseFallbackLineSpacing;
@ViewDebug.ExportedProperty(category = "text")
+ @UnsupportedAppUsage
private int mGravity = Gravity.TOP | Gravity.START;
+ @UnsupportedAppUsage
private boolean mHorizontallyScrolling;
private int mAutoLinkMask;
private boolean mLinksClickable = true;
+ @UnsupportedAppUsage
private float mSpacingMult = 1.0f;
+ @UnsupportedAppUsage
private float mSpacingAdd = 0.0f;
private int mBreakStrategy;
private int mHyphenationFrequency;
private int mJustificationMode;
+ @UnsupportedAppUsage
private int mMaximum = Integer.MAX_VALUE;
+ @UnsupportedAppUsage
private int mMaxMode = LINES;
+ @UnsupportedAppUsage
private int mMinimum = 0;
+ @UnsupportedAppUsage
private int mMinMode = LINES;
+ @UnsupportedAppUsage
private int mOldMaximum = mMaximum;
+ @UnsupportedAppUsage
private int mOldMaxMode = mMaxMode;
+ @UnsupportedAppUsage
private int mMaxWidth = Integer.MAX_VALUE;
+ @UnsupportedAppUsage
private int mMaxWidthMode = PIXELS;
+ @UnsupportedAppUsage
private int mMinWidth = 0;
+ @UnsupportedAppUsage
private int mMinWidthMode = PIXELS;
+ @UnsupportedAppUsage
private boolean mSingleLine;
+ @UnsupportedAppUsage
private int mDesiredHeightAtMeasure = -1;
+ @UnsupportedAppUsage
private boolean mIncludePad = true;
private int mDeferScroll = -1;
@@ -719,11 +761,16 @@
private Scroller mScroller;
private TextPaint mTempTextPaint;
+ @UnsupportedAppUsage
private BoringLayout.Metrics mBoring;
+ @UnsupportedAppUsage
private BoringLayout.Metrics mHintBoring;
+ @UnsupportedAppUsage
private BoringLayout mSavedLayout;
+ @UnsupportedAppUsage
private BoringLayout mSavedHintLayout;
+ @UnsupportedAppUsage
private TextDirectionHeuristic mTextDir;
private InputFilter[] mFilters = NO_FILTERS;
@@ -732,21 +779,28 @@
// It is possible to have a selection even when mEditor is null (programmatically set, like when
// a link is pressed). These highlight-related fields do not go in mEditor.
+ @UnsupportedAppUsage
int mHighlightColor = 0x6633B5E5;
private Path mHighlightPath;
+ @UnsupportedAppUsage
private final Paint mHighlightPaint;
+ @UnsupportedAppUsage
private boolean mHighlightPathBogus = true;
// Although these fields are specific to editable text, they are not added to Editor because
// they are defined by the TextView's style and are theme-dependent.
+ @UnsupportedAppUsage
int mCursorDrawableRes;
// These six fields, could be moved to Editor, since we know their default values and we
// could condition the creation of the Editor to a non standard value. This is however
// brittle since the hardcoded values here (such as
// com.android.internal.R.drawable.text_select_handle_left) would have to be updated if the
// default style is modified.
+ @UnsupportedAppUsage
int mTextSelectHandleLeftRes;
+ @UnsupportedAppUsage
int mTextSelectHandleRightRes;
+ @UnsupportedAppUsage
int mTextSelectHandleRes;
int mTextEditSuggestionItemLayout;
int mTextEditSuggestionContainerLayout;
@@ -756,6 +810,7 @@
* {@link EditText} specific data, created on demand when one of the Editor fields is used.
* See {@link #createEditorIfNeeded()}.
*/
+ @UnsupportedAppUsage
private Editor mEditor;
private static final int DEVICE_PROVISIONED_UNKNOWN = 0;
@@ -2235,6 +2290,7 @@
* @return the {@link android.text.Layout} that is currently being used to
* display the hint text. This can be null.
*/
+ @UnsupportedAppUsage
final Layout getHintLayout() {
return mHintLayout;
}
@@ -3884,6 +3940,7 @@
shouldRequestLayout);
}
+ @UnsupportedAppUsage
private void setRawTextSize(float size, boolean shouldRequestLayout) {
if (size != mTextPaint.getTextSize()) {
mTextPaint.setTextSize(size);
@@ -4776,6 +4833,7 @@
* @attr ref android.R.styleable#TextView_scrollHorizontally
* @hide
*/
+ @UnsupportedAppUsage
public boolean getHorizontallyScrolling() {
return mHorizontallyScrolling;
}
@@ -5637,6 +5695,7 @@
}
}
+ @UnsupportedAppUsage
private void setText(CharSequence text, BufferType type,
boolean notifyBefore, int oldlen) {
mTextSetFromXmlOrResourceId = false;
@@ -5982,6 +6041,7 @@
return mHint;
}
+ @UnsupportedAppUsage
boolean isSingleLine() {
return mSingleLine;
}
@@ -6150,6 +6210,7 @@
return locales.get(0);
}
+ @UnsupportedAppUsage
private void setInputType(int type, boolean direct) {
final int cls = type & EditorInfo.TYPE_MASK_CLASS;
KeyListener input;
@@ -6626,6 +6687,7 @@
return getMeasuredHeight() - padding + opticalInsets.top + opticalInsets.bottom;
}
+ @UnsupportedAppUsage
int getVerticalOffset(boolean forceNormal) {
int voffset = 0;
final int gravity = mGravity & Gravity.VERTICAL_GRAVITY_MASK;
@@ -7093,6 +7155,7 @@
return drawableState;
}
+ @UnsupportedAppUsage
private Path getUpdatedHighlightPath() {
Path highlight = null;
Paint highlightPaint = mHighlightPaint;
@@ -8135,6 +8198,7 @@
/** @hide */
@VisibleForTesting
+ @UnsupportedAppUsage
public void nullLayouts() {
if (mLayout instanceof BoringLayout && mSavedLayout == null) {
mSavedLayout = (BoringLayout) mLayout;
@@ -8155,6 +8219,7 @@
* Make a new Layout based on the already-measured size of the view,
* on the assumption that it was measured correctly at some point.
*/
+ @UnsupportedAppUsage
private void assumeLayout() {
int width = mRight - mLeft - getCompoundPaddingLeft() - getCompoundPaddingRight();
@@ -8172,6 +8237,7 @@
physicalWidth, false);
}
+ @UnsupportedAppUsage
private Layout.Alignment getLayoutAlignment() {
Layout.Alignment alignment;
switch (getTextAlignment()) {
@@ -8230,6 +8296,7 @@
* {@hide}
*/
@VisibleForTesting
+ @UnsupportedAppUsage
public void makeNewLayout(int wantWidth, int hintWidth,
BoringLayout.Metrics boring,
BoringLayout.Metrics hintBoring,
@@ -8454,6 +8521,7 @@
return result;
}
+ @UnsupportedAppUsage
private boolean compressText(float width) {
if (isHardwareAccelerated()) return false;
@@ -8922,6 +8990,7 @@
* Check whether entirely new text requires a new view layout
* or merely a new text layout.
*/
+ @UnsupportedAppUsage
private void checkForRelayout() {
// If we have a fixed width, we can just swap in a new text layout
// if the text height stays the same or if the view height is fixed.
@@ -8996,6 +9065,7 @@
/**
* Returns true if anything changed.
*/
+ @UnsupportedAppUsage
private boolean bringTextIntoView() {
Layout layout = isShowingHint() ? mHintLayout : mLayout;
int line = 0;
@@ -9364,6 +9434,7 @@
return getCompoundPaddingLeft() - mScrollX;
}
+ @UnsupportedAppUsage
int viewportToContentVerticalOffset() {
int offset = getExtendedPaddingTop() - mScrollY;
if ((mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {
@@ -9649,6 +9720,7 @@
&& mSavedMarqueeModeLayout.getLineWidth(0) > width));
}
+ @UnsupportedAppUsage
private void startMarquee() {
// Do not ellipsize EditText
if (getKeyListener() != null) return;
@@ -9691,6 +9763,7 @@
}
}
+ @UnsupportedAppUsage
private void startStopMarquee(boolean start) {
if (mEllipsize == TextUtils.TruncateAt.MARQUEE) {
if (start) {
@@ -10235,6 +10308,7 @@
* @return True iff this TextView contains a text that can be edited, or if this is
* a selectable TextView.
*/
+ @UnsupportedAppUsage
boolean isTextEditable() {
return mText instanceof Editable && onCheckIsTextEditor() && isEnabled();
}
@@ -10497,6 +10571,7 @@
|| (isTextSelectable() && mText instanceof Spannable && isEnabled());
}
+ @UnsupportedAppUsage
private Locale getTextServicesLocale(boolean allowNullLocale) {
// Start fetching the text services locale asynchronously.
updateTextServicesLocaleAsync();
@@ -10576,6 +10651,7 @@
});
}
+ @UnsupportedAppUsage
private void updateTextServicesLocaleLocked() {
final TextServicesManager textServicesManager = (TextServicesManager)
mContext.getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
@@ -11254,6 +11330,7 @@
* be {@code null} if no text is set
*/
@Nullable
+ @UnsupportedAppUsage
private CharSequence getTextForAccessibility() {
// If the text is empty, we must be showing the hint text.
if (TextUtils.isEmpty(mText)) {
@@ -11391,6 +11468,7 @@
return false;
}
+ @UnsupportedAppUsage
CharSequence getTransformedText(int start, int end) {
return removeSuggestionSpans(mTransformed.subSequence(start, end));
}
@@ -11692,6 +11770,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
protected void stopTextActionMode() {
if (mEditor != null) {
mEditor.stopTextActionMode();
@@ -11755,6 +11834,7 @@
return mDeviceProvisionedState == DEVICE_PROVISIONED_YES;
}
+ @UnsupportedAppUsage
boolean canPaste() {
return (mText instanceof Editable
&& mEditor != null && mEditor.mKeyListener != null
@@ -11894,6 +11974,7 @@
return x;
}
+ @UnsupportedAppUsage
int getLineAtCoordinate(float y) {
y -= getTotalPaddingTop();
// Clamp the position to inside of the view.
@@ -11970,6 +12051,7 @@
* @return the current {@link TextDirectionHeuristic}.
* @hide
*/
+ @UnsupportedAppUsage
protected TextDirectionHeuristic getTextDirectionHeuristic() {
if (hasPasswordTransformationMethod()) {
// passwords fields should be LTR
@@ -12081,6 +12163,7 @@
* Deletes the range of text [start, end[.
* @hide
*/
+ @UnsupportedAppUsage
protected void deleteText_internal(int start, int end) {
((Editable) mText).delete(start, end);
}
@@ -12121,6 +12204,7 @@
* Also note that for performance reasons, the mEditor is created when needed, but not
* reset when no more edit-specific fields are needed.
*/
+ @UnsupportedAppUsage
private void createEditorIfNeeded() {
if (mEditor == null) {
mEditor = new Editor(this);
@@ -12131,6 +12215,7 @@
* @hide
*/
@Override
+ @UnsupportedAppUsage
public CharSequence getIterableTextForAccessibility() {
return mText;
}
@@ -12240,6 +12325,7 @@
public static class SavedState extends BaseSavedState {
int selStart = -1;
int selEnd = -1;
+ @UnsupportedAppUsage
CharSequence text;
boolean frozenWithFocus;
CharSequence error;
diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java
index cfec3f2..6a5c8cc 100644
--- a/core/java/android/widget/TimePicker.java
+++ b/core/java/android/widget/TimePicker.java
@@ -20,6 +20,7 @@
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.Widget;
import android.content.Context;
import android.content.res.TypedArray;
@@ -84,6 +85,7 @@
@Retention(RetentionPolicy.SOURCE)
public @interface TimePickerMode {}
+ @UnsupportedAppUsage
private final TimePickerDelegate mDelegate;
@TimePickerMode
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index f6071d8..3fbc819 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -20,6 +20,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringRes;
+import android.annotation.UnsupportedAppUsage;
import android.app.INotificationManager;
import android.app.ITransientNotification;
import android.content.Context;
@@ -93,7 +94,9 @@
public static final int LENGTH_LONG = 1;
final Context mContext;
+ @UnsupportedAppUsage
final TN mTN;
+ @UnsupportedAppUsage
int mDuration;
View mNextView;
@@ -253,6 +256,7 @@
* Gets the LayoutParams for the Toast window.
* @hide
*/
+ @UnsupportedAppUsage
public WindowManager.LayoutParams getWindowParams() {
return mTN.mParams;
}
@@ -336,8 +340,10 @@
// the proper ordering of these system-wide.
// =======================================================================================
+ @UnsupportedAppUsage
private static INotificationManager sService;
+ @UnsupportedAppUsage
static private INotificationManager getService() {
if (sService != null) {
return sService;
@@ -347,6 +353,7 @@
}
private static class TN extends ITransientNotification.Stub {
+ @UnsupportedAppUsage
private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
private static final int SHOW = 0;
@@ -354,14 +361,18 @@
private static final int CANCEL = 2;
final Handler mHandler;
+ @UnsupportedAppUsage
int mGravity;
int mX;
+ @UnsupportedAppUsage
int mY;
float mHorizontalMargin;
float mVerticalMargin;
+ @UnsupportedAppUsage
View mView;
+ @UnsupportedAppUsage
View mNextView;
int mDuration;
@@ -432,6 +443,7 @@
* schedule handleShow into the right thread
*/
@Override
+ @UnsupportedAppUsage
public void show(IBinder windowToken) {
if (localLOGV) Log.v(TAG, "SHOW: " + this);
mHandler.obtainMessage(SHOW, windowToken).sendToTarget();
@@ -522,6 +534,7 @@
accessibilityManager.sendAccessibilityEvent(event);
}
+ @UnsupportedAppUsage
public void handleHide() {
if (localLOGV) Log.v(TAG, "HANDLE HIDE: " + this + " mView=" + mView);
if (mView != null) {
diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java
index 79c1902..1bbd7e8 100644
--- a/core/java/android/widget/Toolbar.java
+++ b/core/java/android/widget/Toolbar.java
@@ -24,6 +24,7 @@
import android.annotation.StringRes;
import android.annotation.StyleRes;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActionBar;
import android.content.Context;
import android.content.res.TypedArray;
@@ -133,8 +134,10 @@
private static final String TAG = "Toolbar";
private ActionMenuView mMenuView;
+ @UnsupportedAppUsage
private TextView mTitleTextView;
private TextView mSubtitleTextView;
+ @UnsupportedAppUsage
private ImageButton mNavButtonView;
private ImageView mLogoView;
@@ -157,9 +160,13 @@
private int mMaxButtonHeight;
+ @UnsupportedAppUsage
private int mTitleMarginStart;
+ @UnsupportedAppUsage
private int mTitleMarginEnd;
+ @UnsupportedAppUsage
private int mTitleMarginTop;
+ @UnsupportedAppUsage
private int mTitleMarginBottom;
private RtlSpacingHelper mContentInsets;
diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java
index 58a2b0f..14881eb 100644
--- a/core/java/android/widget/VideoView.java
+++ b/core/java/android/widget/VideoView.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -84,6 +85,7 @@
// all possible internal states
private static final int STATE_ERROR = -1;
+ @UnsupportedAppUsage
private static final int STATE_IDLE = 0;
private static final int STATE_PREPARING = 1;
private static final int STATE_PREPARED = 2;
@@ -94,7 +96,9 @@
private final Vector<Pair<InputStream, MediaFormat>> mPendingSubtitleTracks = new Vector<>();
// settable by the client
+ @UnsupportedAppUsage
private Uri mUri;
+ @UnsupportedAppUsage
private Map<String, String> mHeaders;
// mCurrentState is a VideoView object's current state.
@@ -102,20 +106,28 @@
// For instance, regardless the VideoView object's current state,
// calling pause() intends to bring the object to a target state
// of STATE_PAUSED.
+ @UnsupportedAppUsage
private int mCurrentState = STATE_IDLE;
+ @UnsupportedAppUsage
private int mTargetState = STATE_IDLE;
// All the stuff we need for playing and showing a video
+ @UnsupportedAppUsage
private SurfaceHolder mSurfaceHolder = null;
+ @UnsupportedAppUsage
private MediaPlayer mMediaPlayer = null;
private int mAudioSession;
+ @UnsupportedAppUsage
private int mVideoWidth;
+ @UnsupportedAppUsage
private int mVideoHeight;
private int mSurfaceWidth;
private int mSurfaceHeight;
+ @UnsupportedAppUsage
private MediaController mMediaController;
private OnCompletionListener mOnCompletionListener;
private MediaPlayer.OnPreparedListener mOnPreparedListener;
+ @UnsupportedAppUsage
private int mCurrentBufferPercentage;
private OnErrorListener mOnErrorListener;
private OnInfoListener mOnInfoListener;
@@ -462,6 +474,7 @@
}
};
+ @UnsupportedAppUsage
MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
mCurrentState = STATE_PREPARED;
@@ -551,6 +564,7 @@
}
};
+ @UnsupportedAppUsage
private MediaPlayer.OnErrorListener mErrorListener =
new MediaPlayer.OnErrorListener() {
public boolean onError(MediaPlayer mp, int framework_err, int impl_err) {
@@ -655,6 +669,7 @@
mOnInfoListener = l;
}
+ @UnsupportedAppUsage
SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback()
{
public void surfaceChanged(SurfaceHolder holder, int format,
@@ -690,6 +705,7 @@
/*
* release the media player in any state
*/
+ @UnsupportedAppUsage
private void release(boolean cleartargetstate) {
if (mMediaPlayer != null) {
mMediaPlayer.reset();
diff --git a/core/java/android/widget/VideoView2.java b/core/java/android/widget/VideoView2.java
index 388eae2..0724294a 100644
--- a/core/java/android/widget/VideoView2.java
+++ b/core/java/android/widget/VideoView2.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.media.AudioAttributes;
import android.media.AudioManager;
@@ -202,6 +203,7 @@
* @throws IllegalStateException if interal MediaSession is not created yet.
* @hide TODO: remove
*/
+ @UnsupportedAppUsage
public MediaController getMediaController() {
return mProvider.getMediaController_impl();
}
@@ -285,6 +287,7 @@
*
* @hide TODO remove
*/
+ @UnsupportedAppUsage
public void setVideoPath(String path) {
mProvider.setVideoPath_impl(path);
}
@@ -380,6 +383,7 @@
* @hide
*/
@VisibleForTesting
+ @UnsupportedAppUsage
public void setOnViewTypeChangedListener(OnViewTypeChangedListener l) {
mProvider.setOnViewTypeChangedListener_impl(l);
}
@@ -410,6 +414,7 @@
* <li>{@link #VIEW_TYPE_TEXTUREVIEW}
* </ul>
*/
+ @UnsupportedAppUsage
void onViewTypeChanged(View view, @ViewType int viewType);
}
diff --git a/core/java/android/widget/ViewAnimator.java b/core/java/android/widget/ViewAnimator.java
index 1580f51..598a407 100644
--- a/core/java/android/widget/ViewAnimator.java
+++ b/core/java/android/widget/ViewAnimator.java
@@ -18,6 +18,7 @@
import android.annotation.AnimRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
@@ -36,7 +37,9 @@
*/
public class ViewAnimator extends FrameLayout {
+ @UnsupportedAppUsage
int mWhichChild = 0;
+ @UnsupportedAppUsage
boolean mFirstTime = true;
boolean mAnimateFirstTime = true;
@@ -147,6 +150,7 @@
* @param animate Whether or not to use the in and out animations, defaults
* to true.
*/
+ @UnsupportedAppUsage
void showOnly(int childIndex, boolean animate) {
final int count = getChildCount();
for (int i = 0; i < count; i++) {
diff --git a/core/java/android/widget/ViewFlipper.java b/core/java/android/widget/ViewFlipper.java
index e769d71..5e72b2e 100644
--- a/core/java/android/widget/ViewFlipper.java
+++ b/core/java/android/widget/ViewFlipper.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -47,6 +48,7 @@
private boolean mRunning = false;
private boolean mStarted = false;
private boolean mVisible = false;
+ @UnsupportedAppUsage
private boolean mUserPresent = true;
public ViewFlipper(Context context) {
@@ -168,6 +170,7 @@
* addition to queuing future flips. If omitted, defaults to
* true.
*/
+ @UnsupportedAppUsage
private void updateRunning(boolean flipNow) {
boolean running = mVisible && mStarted && mUserPresent;
if (running != mRunning) {
diff --git a/core/java/android/widget/ZoomControls.java b/core/java/android/widget/ZoomControls.java
index 66c052b..dd6a27b8f 100644
--- a/core/java/android/widget/ZoomControls.java
+++ b/core/java/android/widget/ZoomControls.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.Widget;
import android.content.Context;
import android.util.AttributeSet;
@@ -33,7 +34,9 @@
@Widget
public class ZoomControls extends LinearLayout {
+ @UnsupportedAppUsage
private final ZoomButton mZoomIn;
+ @UnsupportedAppUsage
private final ZoomButton mZoomOut;
public ZoomControls(Context context) {
diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java
index 7321721..d7031ea 100644
--- a/core/java/com/android/internal/app/AlertController.java
+++ b/core/java/com/android/internal/app/AlertController.java
@@ -21,6 +21,7 @@
import com.android.internal.R;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -71,9 +72,11 @@
private final DialogInterface mDialogInterface;
protected final Window mWindow;
+ @UnsupportedAppUsage
private CharSequence mTitle;
protected CharSequence mMessage;
protected ListView mListView;
+ @UnsupportedAppUsage
private View mView;
private int mViewLayoutResId;
@@ -107,8 +110,10 @@
private MovementMethod mMessageMovementMethod;
@Layout.HyphenationFrequency
private Integer mMessageHyphenationFrequency;
+ @UnsupportedAppUsage
private View mCustomTitleView;
+ @UnsupportedAppUsage
private boolean mForceInverseBackground;
private ListAdapter mAdapter;
@@ -198,6 +203,7 @@
}
}
+ @UnsupportedAppUsage
protected AlertController(Context context, DialogInterface di, Window window) {
mContext = context;
mDialogInterface = di;
@@ -258,6 +264,7 @@
installContent();
}
+ @UnsupportedAppUsage
public void installContent() {
int contentView = selectContentView();
mWindow.setContentView(contentView);
@@ -275,6 +282,7 @@
return mAlertDialogLayout;
}
+ @UnsupportedAppUsage
public void setTitle(CharSequence title) {
mTitle = title;
if (mTitleView != null) {
@@ -285,10 +293,12 @@
/**
* @see AlertDialog.Builder#setCustomTitle(View)
*/
+ @UnsupportedAppUsage
public void setCustomTitle(View customTitleView) {
mCustomTitleView = customTitleView;
}
+ @UnsupportedAppUsage
public void setMessage(CharSequence message) {
mMessage = message;
if (mMessageView != null) {
@@ -323,6 +333,7 @@
/**
* Set the view to display in the dialog.
*/
+ @UnsupportedAppUsage
public void setView(View view) {
mView = view;
mViewLayoutResId = 0;
@@ -362,6 +373,7 @@
* @param listener The {@link DialogInterface.OnClickListener} to use.
* @param msg The {@link Message} to be sent when clicked.
*/
+ @UnsupportedAppUsage
public void setButton(int whichButton, CharSequence text,
DialogInterface.OnClickListener listener, Message msg) {
@@ -397,6 +409,7 @@
* @param resId the resource identifier of the drawable to use as the icon,
* or 0 for no icon
*/
+ @UnsupportedAppUsage
public void setIcon(int resId) {
mIcon = null;
mIconId = resId;
@@ -416,6 +429,7 @@
*
* @param icon the drawable to use as the icon or null for no icon
*/
+ @UnsupportedAppUsage
public void setIcon(Drawable icon) {
mIcon = icon;
mIconId = 0;
@@ -446,10 +460,12 @@
mForceInverseBackground = forceInverseBackground;
}
+ @UnsupportedAppUsage
public ListView getListView() {
return mListView;
}
+ @UnsupportedAppUsage
public Button getButton(int whichButton) {
switch (whichButton) {
case DialogInterface.BUTTON_POSITIVE:
@@ -464,11 +480,13 @@
}
@SuppressWarnings({"UnusedDeclaration"})
+ @UnsupportedAppUsage
public boolean onKeyDown(int keyCode, KeyEvent event) {
return mScrollView != null && mScrollView.executeKeyEvent(event);
}
@SuppressWarnings({"UnusedDeclaration"})
+ @UnsupportedAppUsage
public boolean onKeyUp(int keyCode, KeyEvent event) {
return mScrollView != null && mScrollView.executeKeyEvent(event);
}
@@ -932,10 +950,12 @@
boolean mRecycleOnMeasure = true;
+ @UnsupportedAppUsage
public RecycleListView(Context context) {
this(context, null);
}
+ @UnsupportedAppUsage
public RecycleListView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -964,44 +984,74 @@
}
public static class AlertParams {
+ @UnsupportedAppUsage
public final Context mContext;
+ @UnsupportedAppUsage
public final LayoutInflater mInflater;
+ @UnsupportedAppUsage
public int mIconId = 0;
+ @UnsupportedAppUsage
public Drawable mIcon;
public int mIconAttrId = 0;
+ @UnsupportedAppUsage
public CharSequence mTitle;
+ @UnsupportedAppUsage
public View mCustomTitleView;
+ @UnsupportedAppUsage
public CharSequence mMessage;
+ @UnsupportedAppUsage
public CharSequence mPositiveButtonText;
+ @UnsupportedAppUsage
public DialogInterface.OnClickListener mPositiveButtonListener;
+ @UnsupportedAppUsage
public CharSequence mNegativeButtonText;
+ @UnsupportedAppUsage
public DialogInterface.OnClickListener mNegativeButtonListener;
+ @UnsupportedAppUsage
public CharSequence mNeutralButtonText;
+ @UnsupportedAppUsage
public DialogInterface.OnClickListener mNeutralButtonListener;
+ @UnsupportedAppUsage
public boolean mCancelable;
+ @UnsupportedAppUsage
public DialogInterface.OnCancelListener mOnCancelListener;
+ @UnsupportedAppUsage
public DialogInterface.OnDismissListener mOnDismissListener;
+ @UnsupportedAppUsage
public DialogInterface.OnKeyListener mOnKeyListener;
+ @UnsupportedAppUsage
public CharSequence[] mItems;
+ @UnsupportedAppUsage
public ListAdapter mAdapter;
+ @UnsupportedAppUsage
public DialogInterface.OnClickListener mOnClickListener;
public int mViewLayoutResId;
+ @UnsupportedAppUsage
public View mView;
public int mViewSpacingLeft;
public int mViewSpacingTop;
public int mViewSpacingRight;
public int mViewSpacingBottom;
public boolean mViewSpacingSpecified = false;
+ @UnsupportedAppUsage
public boolean[] mCheckedItems;
+ @UnsupportedAppUsage
public boolean mIsMultiChoice;
+ @UnsupportedAppUsage
public boolean mIsSingleChoice;
+ @UnsupportedAppUsage
public int mCheckedItem = -1;
+ @UnsupportedAppUsage
public DialogInterface.OnMultiChoiceClickListener mOnCheckboxClickListener;
+ @UnsupportedAppUsage
public Cursor mCursor;
+ @UnsupportedAppUsage
public String mLabelColumn;
+ @UnsupportedAppUsage
public String mIsCheckedColumn;
public boolean mForceInverseBackground;
+ @UnsupportedAppUsage
public AdapterView.OnItemSelectedListener mOnItemSelectedListener;
public OnPrepareListViewListener mOnPrepareListViewListener;
public boolean mRecycleOnMeasure = true;
@@ -1019,12 +1069,14 @@
void onPrepareListView(ListView listView);
}
+ @UnsupportedAppUsage
public AlertParams(Context context) {
mContext = context;
mCancelable = true;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
+ @UnsupportedAppUsage
public void apply(AlertController dialog) {
if (mCustomTitleView != null) {
dialog.setCustomTitle(mCustomTitleView);
diff --git a/core/java/com/android/internal/app/procstats/ProcessStats.java b/core/java/com/android/internal/app/procstats/ProcessStats.java
index 14faf66..b6624a2 100644
--- a/core/java/com/android/internal/app/procstats/ProcessStats.java
+++ b/core/java/com/android/internal/app/procstats/ProcessStats.java
@@ -48,8 +48,8 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.Objects;
-import java.util.regex.Pattern;
import java.util.regex.Matcher;
+import java.util.regex.Pattern;
public final class ProcessStats implements Parcelable {
public static final String TAG = "ProcessStats";
diff --git a/core/java/com/android/internal/content/PackageMonitor.java b/core/java/com/android/internal/content/PackageMonitor.java
index 3f8fd9b..c928f3f 100644
--- a/core/java/com/android/internal/content/PackageMonitor.java
+++ b/core/java/com/android/internal/content/PackageMonitor.java
@@ -16,6 +16,7 @@
package com.android.internal.content;
+import android.annotation.UnsupportedAppUsage;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
@@ -70,10 +71,12 @@
String[] mTempArray = new String[1];
+ @UnsupportedAppUsage
public void register(Context context, Looper thread, boolean externalStorage) {
register(context, thread, null, externalStorage);
}
+ @UnsupportedAppUsage
public void register(Context context, Looper thread, UserHandle user,
boolean externalStorage) {
register(context, user, externalStorage,
@@ -107,6 +110,7 @@
return mRegisteredHandler;
}
+ @UnsupportedAppUsage
public void unregister() {
if (mRegisteredContext == null) {
throw new IllegalStateException("Not registered");
@@ -134,6 +138,7 @@
/**
* Called when a package is really removed (and not replaced).
*/
+ @UnsupportedAppUsage
public void onPackageRemoved(String packageName, int uid) {
}
@@ -167,6 +172,7 @@
* default implementation returns true if this is a change to the entire
* package.
*/
+ @UnsupportedAppUsage
public boolean onPackageChanged(String packageName, int uid, String[] components) {
if (components != null) {
for (String name : components) {
@@ -246,6 +252,7 @@
return mAppearingPackages != null;
}
+ @UnsupportedAppUsage
public int isPackageDisappearing(String packageName) {
if (mDisappearingPackages != null) {
for (int i=mDisappearingPackages.length-1; i>=0; i--) {
@@ -265,6 +272,7 @@
return mChangeType == PACKAGE_UPDATING;
}
+ @UnsupportedAppUsage
public boolean isPackageModified(String packageName) {
if (mModifiedPackages != null) {
for (int i=mModifiedPackages.length-1; i>=0; i--) {
diff --git a/core/java/com/android/internal/content/ReferrerIntent.java b/core/java/com/android/internal/content/ReferrerIntent.java
index 76dcc9b..6d05f7e 100644
--- a/core/java/com/android/internal/content/ReferrerIntent.java
+++ b/core/java/com/android/internal/content/ReferrerIntent.java
@@ -16,6 +16,7 @@
package com.android.internal.content;
+import android.annotation.UnsupportedAppUsage;
import android.content.Intent;
import android.os.Parcel;
@@ -25,8 +26,10 @@
* Subclass of Intent that also contains referrer (as a package name) information.
*/
public class ReferrerIntent extends Intent {
+ @UnsupportedAppUsage
public final String mReferrer;
+ @UnsupportedAppUsage
public ReferrerIntent(Intent baseIntent, String referrer) {
super(baseIntent);
mReferrer = referrer;
diff --git a/core/java/com/android/internal/logging/MetricsLogger.java b/core/java/com/android/internal/logging/MetricsLogger.java
index a482929..e99e39e 100644
--- a/core/java/com/android/internal/logging/MetricsLogger.java
+++ b/core/java/com/android/internal/logging/MetricsLogger.java
@@ -15,6 +15,7 @@
*/
package com.android.internal.logging;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.metrics.LogMaker;
import android.os.Build;
@@ -47,6 +48,7 @@
public static final int VIEW_UNKNOWN = MetricsEvent.VIEW_UNKNOWN;
public static final int LOGTAG = EventLogTags.SYSUI_MULTI_ACTION;
+ @UnsupportedAppUsage
public void write(LogMaker content) {
if (content.getType() == MetricsEvent.TYPE_UNKNOWN) {
content.setType(MetricsEvent.TYPE_ACTION);
diff --git a/core/java/com/android/internal/net/LegacyVpnInfo.java b/core/java/com/android/internal/net/LegacyVpnInfo.java
index d6f6d0b..9ee9710 100644
--- a/core/java/com/android/internal/net/LegacyVpnInfo.java
+++ b/core/java/com/android/internal/net/LegacyVpnInfo.java
@@ -16,6 +16,7 @@
package com.android.internal.net;
+import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.net.NetworkInfo;
import android.os.Parcel;
@@ -38,7 +39,9 @@
public static final int STATE_TIMEOUT = 4;
public static final int STATE_FAILED = 5;
+ @UnsupportedAppUsage
public String key;
+ @UnsupportedAppUsage
public int state = -1;
public PendingIntent intent;
@@ -54,6 +57,7 @@
out.writeParcelable(intent, flags);
}
+ @UnsupportedAppUsage
public static final Parcelable.Creator<LegacyVpnInfo> CREATOR =
new Parcelable.Creator<LegacyVpnInfo>() {
@Override
diff --git a/core/java/com/android/internal/net/VpnConfig.java b/core/java/com/android/internal/net/VpnConfig.java
index 5ce5bcd..fd03b3f 100644
--- a/core/java/com/android/internal/net/VpnConfig.java
+++ b/core/java/com/android/internal/net/VpnConfig.java
@@ -16,6 +16,7 @@
package com.android.internal.net;
+import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
diff --git a/core/java/com/android/internal/net/VpnProfile.java b/core/java/com/android/internal/net/VpnProfile.java
index b46bfef..bc4b5fe 100644
--- a/core/java/com/android/internal/net/VpnProfile.java
+++ b/core/java/com/android/internal/net/VpnProfile.java
@@ -16,6 +16,7 @@
package com.android.internal.net;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
@@ -45,10 +46,15 @@
public static final int TYPE_MAX = 5;
// Entity fields.
+ @UnsupportedAppUsage
public final String key; // -1
+ @UnsupportedAppUsage
public String name = ""; // 0
+ @UnsupportedAppUsage
public int type = TYPE_PPTP; // 1
+ @UnsupportedAppUsage
public String server = ""; // 2
+ @UnsupportedAppUsage
public String username = ""; // 3
public String password = ""; // 4
public String dnsServers = ""; // 5
@@ -63,12 +69,14 @@
public String ipsecServerCert = "";// 14
// Helper fields.
+ @UnsupportedAppUsage
public boolean saveLogin = false;
public VpnProfile(String key) {
this.key = key;
}
+ @UnsupportedAppUsage
public VpnProfile(Parcel in) {
key = in.readString();
name = in.readString();
@@ -110,6 +118,7 @@
out.writeInt(saveLogin ? 1 : 0);
}
+ @UnsupportedAppUsage
public static VpnProfile decode(String key, byte[] value) {
try {
if (key == null) {
diff --git a/core/java/com/android/internal/os/AtomicFile.java b/core/java/com/android/internal/os/AtomicFile.java
index 5a83f33..e177fe3 100644
--- a/core/java/com/android/internal/os/AtomicFile.java
+++ b/core/java/com/android/internal/os/AtomicFile.java
@@ -16,6 +16,7 @@
package com.android.internal.os;
+import android.annotation.UnsupportedAppUsage;
import android.os.FileUtils;
import android.util.Log;
@@ -44,15 +45,18 @@
private final File mBaseName;
private final File mBackupName;
+ @UnsupportedAppUsage
public AtomicFile(File baseName) {
mBaseName = baseName;
mBackupName = new File(baseName.getPath() + ".bak");
}
+ @UnsupportedAppUsage
public File getBaseFile() {
return mBaseName;
}
+ @UnsupportedAppUsage
public FileOutputStream startWrite() throws IOException {
// Rename the current file so it may be used as a backup during the next read
if (mBaseName.exists()) {
@@ -86,6 +90,7 @@
return str;
}
+ @UnsupportedAppUsage
public void finishWrite(FileOutputStream str) {
if (str != null) {
FileUtils.sync(str);
@@ -98,6 +103,7 @@
}
}
+ @UnsupportedAppUsage
public void failWrite(FileOutputStream str) {
if (str != null) {
FileUtils.sync(str);
@@ -111,6 +117,7 @@
}
}
+ @UnsupportedAppUsage
public FileOutputStream openAppend() throws IOException {
try {
return new FileOutputStream(mBaseName, true);
@@ -119,6 +126,7 @@
}
}
+ @UnsupportedAppUsage
public void truncate() throws IOException {
try {
FileOutputStream fos = new FileOutputStream(mBaseName);
@@ -139,6 +147,7 @@
mBackupName.delete();
}
+ @UnsupportedAppUsage
public FileInputStream openRead() throws FileNotFoundException {
if (mBackupName.exists()) {
mBaseName.delete();
@@ -147,6 +156,7 @@
return new FileInputStream(mBaseName);
}
+ @UnsupportedAppUsage
public byte[] readFully() throws IOException {
FileInputStream stream = openRead();
try {
diff --git a/core/java/com/android/internal/os/BatterySipper.java b/core/java/com/android/internal/os/BatterySipper.java
index 5abc6d4..0baf73c 100644
--- a/core/java/com/android/internal/os/BatterySipper.java
+++ b/core/java/com/android/internal/os/BatterySipper.java
@@ -15,6 +15,7 @@
*/
package com.android.internal.os;
+import android.annotation.UnsupportedAppUsage;
import android.os.BatteryStats.Uid;
import java.util.List;
@@ -23,8 +24,11 @@
* Contains power usage of an application, system service, or hardware type.
*/
public class BatterySipper implements Comparable<BatterySipper> {
+ @UnsupportedAppUsage
public int userId;
+ @UnsupportedAppUsage
public Uid uidObj;
+ @UnsupportedAppUsage
public DrainType drainType;
/**
@@ -53,6 +57,7 @@
/**
* Total power before smearing
*/
+ @UnsupportedAppUsage
public double totalPowerMah;
/**
@@ -65,6 +70,7 @@
/**
* Generic usage time in milliseconds.
*/
+ @UnsupportedAppUsage
public long usageTimeMs;
/**
@@ -76,12 +82,17 @@
public long audioTimeMs;
public long bluetoothRunningTimeMs;
public long cameraTimeMs;
+ @UnsupportedAppUsage
public long cpuFgTimeMs;
+ @UnsupportedAppUsage
public long cpuTimeMs;
public long flashlightTimeMs;
+ @UnsupportedAppUsage
public long gpsTimeMs;
public long videoTimeMs;
+ @UnsupportedAppUsage
public long wakeLockTimeMs;
+ @UnsupportedAppUsage
public long wifiRunningTimeMs;
public long mobileRxPackets;
@@ -99,7 +110,9 @@
public long btTxBytes;
public double percent;
public double noCoveragePercent;
+ @UnsupportedAppUsage
public String[] mPackages;
+ @UnsupportedAppUsage
public String packageWithHighestDrain;
// Measured in mAh (milli-ampere per hour).
@@ -107,6 +120,7 @@
public double audioPowerMah;
public double bluetoothPowerMah;
public double cameraPowerMah;
+ @UnsupportedAppUsage
public double cpuPowerMah;
public double flashlightPowerMah;
public double gpsPowerMah;
@@ -118,6 +132,7 @@
public enum DrainType {
AMBIENT_DISPLAY,
+ @UnsupportedAppUsage
APP,
BLUETOOTH,
CAMERA,
@@ -133,6 +148,7 @@
WIFI,
}
+ @UnsupportedAppUsage
public BatterySipper(DrainType drainType, Uid uid, double value) {
this.totalPowerMah = value;
this.drainType = drainType;
@@ -162,10 +178,12 @@
/**
* Gets a list of packages associated with the current user
*/
+ @UnsupportedAppUsage
public String[] getPackages() {
return mPackages;
}
+ @UnsupportedAppUsage
public int getUid() {
// Bail out if the current sipper is not an App sipper.
if (uidObj == null) {
@@ -177,6 +195,7 @@
/**
* Add stats from other to this BatterySipper.
*/
+ @UnsupportedAppUsage
public void add(BatterySipper other) {
totalPowerMah += other.totalPowerMah;
usageTimeMs += other.usageTimeMs;
diff --git a/core/java/com/android/internal/os/BatteryStatsHelper.java b/core/java/com/android/internal/os/BatteryStatsHelper.java
index 061011b..ead98e7 100644
--- a/core/java/com/android/internal/os/BatteryStatsHelper.java
+++ b/core/java/com/android/internal/os/BatteryStatsHelper.java
@@ -16,6 +16,7 @@
package com.android.internal.os;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -75,9 +76,11 @@
final private boolean mCollectBatteryBroadcast;
final private boolean mWifiOnly;
+ @UnsupportedAppUsage
private IBatteryStats mBatteryInfo;
private BatteryStats mStats;
private Intent mBatteryBroadcast;
+ @UnsupportedAppUsage
private PowerProfile mPowerProfile;
private String[] mSystemPackageArray;
@@ -87,6 +90,7 @@
/**
* List of apps using power.
*/
+ @UnsupportedAppUsage
private final List<BatterySipper> mUsageList = new ArrayList<>();
/**
@@ -166,14 +170,17 @@
profile.getAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_TX) != 0;
}
+ @UnsupportedAppUsage
public BatteryStatsHelper(Context context) {
this(context, true);
}
+ @UnsupportedAppUsage
public BatteryStatsHelper(Context context, boolean collectBatteryBroadcast) {
this(context, collectBatteryBroadcast, checkWifiOnly(context));
}
+ @UnsupportedAppUsage
public BatteryStatsHelper(Context context, boolean collectBatteryBroadcast, boolean wifiOnly) {
mContext = context;
mCollectBatteryBroadcast = collectBatteryBroadcast;
@@ -241,6 +248,7 @@
ServiceManager.getService(BatteryStats.SERVICE_NAME)));
}
+ @UnsupportedAppUsage
public static void dropFile(Context context, String fname) {
makeFilePath(context, fname).delete();
}
@@ -250,10 +258,12 @@
}
/** Clears the current stats and forces recreating for future use. */
+ @UnsupportedAppUsage
public void clearStats() {
mStats = null;
}
+ @UnsupportedAppUsage
public BatteryStats getStats() {
if (mStats == null) {
load();
@@ -261,6 +271,7 @@
return mStats;
}
+ @UnsupportedAppUsage
public Intent getBatteryBroadcast() {
if (mBatteryBroadcast == null && mCollectBatteryBroadcast) {
load();
@@ -277,6 +288,7 @@
mStats = stats;
}
+ @UnsupportedAppUsage
public void create(Bundle icicle) {
if (icicle != null) {
mStats = sStatsXfer;
@@ -287,6 +299,7 @@
mPowerProfile = new PowerProfile(mContext);
}
+ @UnsupportedAppUsage
public void storeState() {
sStatsXfer = mStats;
sBatteryBroadcastXfer = mBatteryBroadcast;
@@ -323,6 +336,7 @@
/**
* Refreshes the power usage list.
*/
+ @UnsupportedAppUsage
public void refreshStats(int statsType, int asUser) {
SparseArray<UserHandle> users = new SparseArray<>(1);
users.put(asUser, new UserHandle(asUser));
@@ -332,6 +346,7 @@
/**
* Refreshes the power usage list.
*/
+ @UnsupportedAppUsage
public void refreshStats(int statsType, List<UserHandle> asUsers) {
final int n = asUsers.size();
SparseArray<UserHandle> users = new SparseArray<>(n);
@@ -345,6 +360,7 @@
/**
* Refreshes the power usage list.
*/
+ @UnsupportedAppUsage
public void refreshStats(int statsType, SparseArray<UserHandle> asUsers) {
refreshStats(statsType, asUsers, SystemClock.elapsedRealtime() * 1000,
SystemClock.uptimeMillis() * 1000);
@@ -783,6 +799,7 @@
return bs;
}
+ @UnsupportedAppUsage
public List<BatterySipper> getUsageList() {
return mUsageList;
}
@@ -799,6 +816,7 @@
return mStatsType;
}
+ @UnsupportedAppUsage
public double getMaxPower() {
return mMaxPower;
}
@@ -807,6 +825,7 @@
return mMaxRealPower;
}
+ @UnsupportedAppUsage
public double getTotalPower() {
return mTotalPower;
}
@@ -1017,6 +1036,7 @@
mServicepackageArray = array;
}
+ @UnsupportedAppUsage
private void load() {
if (mBatteryInfo == null) {
return;
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index f314872..c65dd6f 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.bluetooth.BluetoothActivityEnergyInfo;
import android.bluetooth.UidTraffic;
@@ -602,8 +603,11 @@
// In order to do this, we must refresh each timer whenever the number of active timers
// changes.
@VisibleForTesting
+ @UnsupportedAppUsage
protected ArrayList<StopwatchTimer> mPartialTimers = new ArrayList<>();
+ @UnsupportedAppUsage
final ArrayList<StopwatchTimer> mFullTimers = new ArrayList<>();
+ @UnsupportedAppUsage
final ArrayList<StopwatchTimer> mWindowTimers = new ArrayList<>();
final ArrayList<StopwatchTimer> mDrawTimers = new ArrayList<>();
final SparseArray<ArrayList<StopwatchTimer>> mSensorTimers = new SparseArray<>();
@@ -982,6 +986,7 @@
*/
private final HashMap<String, SamplingTimer> mKernelWakelockStats = new HashMap<>();
+ @UnsupportedAppUsage
public Map<String, ? extends Timer> getKernelWakelockStats() {
return mKernelWakelockStats;
}
@@ -1298,6 +1303,7 @@
* State for keeping track of counting information.
*/
public static class Counter extends BatteryStats.Counter implements TimeBaseObs {
+ @UnsupportedAppUsage
final AtomicInteger mCount = new AtomicInteger();
final TimeBase mTimeBase;
int mLoadedCount;
@@ -1853,6 +1859,7 @@
* @param out the Parcel to be written to.
* @param timer a Timer, or null.
*/
+ @UnsupportedAppUsage
public static void writeTimerToParcel(Parcel out, Timer timer, long elapsedRealtimeUs) {
if (timer == null) {
out.writeInt(0); // indicates null
@@ -1864,6 +1871,7 @@
}
@Override
+ @UnsupportedAppUsage
public long getTotalTimeLocked(long elapsedRealtimeUs, int which) {
long val = computeRunTimeLocked(mTimeBase.getRealtime(elapsedRealtimeUs));
if (which == STATS_SINCE_UNPLUGGED) {
@@ -1876,6 +1884,7 @@
}
@Override
+ @UnsupportedAppUsage
public int getCountLocked(int which) {
int val = computeCurrentCountLocked();
if (which == STATS_SINCE_UNPLUGGED) {
@@ -2651,6 +2660,7 @@
}
@Override
+ @UnsupportedAppUsage
public void detach() {
super.detach();
if (mTimerPool != null) {
@@ -4931,6 +4941,7 @@
}
}
+ @UnsupportedAppUsage
public void noteScreenBrightnessLocked(int brightness) {
// Bin the brightness.
int bin = brightness / (256/NUM_SCREEN_BRIGHTNESS_BINS);
@@ -4954,6 +4965,7 @@
}
}
+ @UnsupportedAppUsage
public void noteUserActivityLocked(int uid, int event) {
if (mOnBatteryInternal) {
uid = mapUid(uid);
@@ -5188,6 +5200,7 @@
}
}
+ @UnsupportedAppUsage
public void notePhoneOnLocked() {
if (!mPhoneOn) {
final long elapsedRealtime = mClocks.elapsedRealtime();
@@ -5201,6 +5214,7 @@
}
}
+ @UnsupportedAppUsage
public void notePhoneOffLocked() {
if (mPhoneOn) {
final long elapsedRealtime = mClocks.elapsedRealtime();
@@ -5370,12 +5384,14 @@
updateAllPhoneStateLocked(state, simState, mPhoneSignalStrengthBinRaw);
}
+ @UnsupportedAppUsage
public void notePhoneSignalStrengthLocked(SignalStrength signalStrength) {
// Bin the strength.
int bin = signalStrength.getLevel();
updateAllPhoneStateLocked(mPhoneServiceStateRaw, mPhoneSimStateRaw, bin);
}
+ @UnsupportedAppUsage
public void notePhoneDataConnectionStateLocked(int dataType, boolean hasData) {
// BatteryStats uses 0 to represent no network type.
// Telephony does not have a concept of no network type, and uses 0 to represent unknown.
@@ -5434,6 +5450,7 @@
}
}
+ @UnsupportedAppUsage
public void noteAudioOnLocked(int uid) {
uid = mapUid(uid);
final long elapsedRealtime = mClocks.elapsedRealtime();
@@ -5449,6 +5466,7 @@
getUidStatsLocked(uid).noteAudioTurnedOnLocked(elapsedRealtime);
}
+ @UnsupportedAppUsage
public void noteAudioOffLocked(int uid) {
if (mAudioOnNesting == 0) {
return;
@@ -5466,6 +5484,7 @@
getUidStatsLocked(uid).noteAudioTurnedOffLocked(elapsedRealtime);
}
+ @UnsupportedAppUsage
public void noteVideoOnLocked(int uid) {
uid = mapUid(uid);
final long elapsedRealtime = mClocks.elapsedRealtime();
@@ -5481,6 +5500,7 @@
getUidStatsLocked(uid).noteVideoTurnedOnLocked(elapsedRealtime);
}
+ @UnsupportedAppUsage
public void noteVideoOffLocked(int uid) {
if (mVideoOnNesting == 0) {
return;
@@ -5956,6 +5976,7 @@
int mWifiFullLockNesting = 0;
+ @UnsupportedAppUsage
public void noteFullWifiLockAcquiredLocked(int uid) {
final long elapsedRealtime = mClocks.elapsedRealtime();
final long uptime = mClocks.uptimeMillis();
@@ -5969,6 +5990,7 @@
getUidStatsLocked(uid).noteFullWifiLockAcquiredLocked(elapsedRealtime);
}
+ @UnsupportedAppUsage
public void noteFullWifiLockReleasedLocked(int uid) {
final long elapsedRealtime = mClocks.elapsedRealtime();
final long uptime = mClocks.uptimeMillis();
@@ -6024,6 +6046,7 @@
int mWifiMulticastNesting = 0;
+ @UnsupportedAppUsage
public void noteWifiMulticastEnabledLocked(int uid) {
uid = mapUid(uid);
final long elapsedRealtime = mClocks.elapsedRealtime();
@@ -6044,6 +6067,7 @@
getUidStatsLocked(uid).noteWifiMulticastEnabledLocked(elapsedRealtime);
}
+ @UnsupportedAppUsage
public void noteWifiMulticastDisabledLocked(int uid) {
uid = mapUid(uid);
final long elapsedRealtime = mClocks.elapsedRealtime();
@@ -6240,6 +6264,7 @@
}
}
+ @UnsupportedAppUsage
@Override public long getScreenOnTime(long elapsedRealtimeUs, int which) {
return mScreenOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
}
@@ -6256,6 +6281,7 @@
return mScreenDozeTimer.getCountLocked(which);
}
+ @UnsupportedAppUsage
@Override public long getScreenBrightnessTime(int brightnessBin,
long elapsedRealtimeUs, int which) {
return mScreenBrightnessTimer[brightnessBin].getTotalTimeLocked(
@@ -6365,6 +6391,7 @@
return (long) energyUsedMaMs;
}
+ @UnsupportedAppUsage
@Override public long getPhoneOnTime(long elapsedRealtimeUs, int which) {
return mPhoneOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
}
@@ -6373,12 +6400,14 @@
return mPhoneOnTimer.getCountLocked(which);
}
+ @UnsupportedAppUsage
@Override public long getPhoneSignalStrengthTime(int strengthBin,
long elapsedRealtimeUs, int which) {
return mPhoneSignalStrengthsTimer[strengthBin].getTotalTimeLocked(
elapsedRealtimeUs, which);
}
+ @UnsupportedAppUsage
@Override public long getPhoneSignalScanningTime(
long elapsedRealtimeUs, int which) {
return mPhoneSignalScanningTimer.getTotalTimeLocked(
@@ -6389,6 +6418,7 @@
return mPhoneSignalScanningTimer;
}
+ @UnsupportedAppUsage
@Override public int getPhoneSignalStrengthCount(int strengthBin, int which) {
return mPhoneSignalStrengthsTimer[strengthBin].getCountLocked(which);
}
@@ -6397,12 +6427,14 @@
return mPhoneSignalStrengthsTimer[strengthBin];
}
+ @UnsupportedAppUsage
@Override public long getPhoneDataConnectionTime(int dataType,
long elapsedRealtimeUs, int which) {
return mPhoneDataConnectionsTimer[dataType].getTotalTimeLocked(
elapsedRealtimeUs, which);
}
+ @UnsupportedAppUsage
@Override public int getPhoneDataConnectionCount(int dataType, int which) {
return mPhoneDataConnectionsTimer[dataType].getCountLocked(which);
}
@@ -6411,6 +6443,7 @@
return mPhoneDataConnectionsTimer[dataType];
}
+ @UnsupportedAppUsage
@Override public long getMobileRadioActiveTime(long elapsedRealtimeUs, int which) {
return mMobileRadioActiveTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
}
@@ -6441,6 +6474,7 @@
return mWifiMulticastWakelockTimer.getCountLocked(which);
}
+ @UnsupportedAppUsage
@Override public long getWifiOnTime(long elapsedRealtimeUs, int which) {
return mWifiOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
}
@@ -6449,6 +6483,7 @@
return mWifiActiveTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
}
+ @UnsupportedAppUsage
@Override public long getGlobalWifiRunningTime(long elapsedRealtimeUs, int which) {
return mGlobalWifiRunningTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
}
@@ -6546,6 +6581,7 @@
}
@Override
+ @UnsupportedAppUsage
public long getNetworkActivityBytes(int type, int which) {
if (type >= 0 && type < mNetworkByteActivityCounters.length) {
return mNetworkByteActivityCounters[type].getCountLocked(which);
@@ -6588,6 +6624,7 @@
return mOnBattery;
}
+ @UnsupportedAppUsage
@Override public SparseArray<? extends BatteryStats.Uid> getUidStats() {
return mUidStats;
}
@@ -7005,6 +7042,7 @@
}
@Override
+ @UnsupportedAppUsage
public ArrayMap<String, ? extends BatteryStats.Uid.Wakelock> getWakelockStats() {
return mWakelockStats.getMap();
}
@@ -7030,11 +7068,13 @@
}
@Override
+ @UnsupportedAppUsage
public SparseArray<? extends BatteryStats.Uid.Sensor> getSensorStats() {
return mSensorStats;
}
@Override
+ @UnsupportedAppUsage
public ArrayMap<String, ? extends BatteryStats.Uid.Proc> getProcessStats() {
return mProcessStats;
}
@@ -7045,6 +7085,7 @@
}
@Override
+ @UnsupportedAppUsage
public int getUid() {
return mUid;
}
@@ -7432,6 +7473,7 @@
}
@Override
+ @UnsupportedAppUsage
public long getWifiRunningTime(long elapsedRealtimeUs, int which) {
if (mWifiRunningTimer == null) {
return 0;
@@ -7448,6 +7490,7 @@
}
@Override
+ @UnsupportedAppUsage
public long getWifiScanTime(long elapsedRealtimeUs, int which) {
if (mWifiScanTimer == null) {
return 0;
@@ -8893,6 +8936,7 @@
}
@Override
+ @UnsupportedAppUsage
public Timer getWakeTime(int type) {
switch (type) {
case WAKE_TYPE_FULL: return mTimerFull;
@@ -8962,6 +9006,7 @@
}
@Override
+ @UnsupportedAppUsage
public Timer getSensorTime() {
return mTimer;
}
@@ -8975,6 +9020,7 @@
}
@Override
+ @UnsupportedAppUsage
public int getHandle() {
return mHandle;
}
@@ -9231,6 +9277,7 @@
readExcessivePowerFromParcelLocked(in);
}
+ @UnsupportedAppUsage
public void addCpuTimeLocked(int utime, int stime) {
addCpuTimeLocked(utime, stime, mBsi.mOnBatteryTimeBase.isRunning());
}
@@ -9242,10 +9289,12 @@
}
}
+ @UnsupportedAppUsage
public void addForegroundTimeLocked(long ttime) {
mForegroundTime += ttime;
}
+ @UnsupportedAppUsage
public void incStartsLocked() {
mStarts++;
}
@@ -9264,6 +9313,7 @@
}
@Override
+ @UnsupportedAppUsage
public long getUserTime(int which) {
long val = mUserTime;
if (which == STATS_CURRENT) {
@@ -9275,6 +9325,7 @@
}
@Override
+ @UnsupportedAppUsage
public long getSystemTime(int which) {
long val = mSystemTime;
if (which == STATS_CURRENT) {
@@ -9286,6 +9337,7 @@
}
@Override
+ @UnsupportedAppUsage
public long getForegroundTime(int which) {
long val = mForegroundTime;
if (which == STATS_CURRENT) {
@@ -9297,6 +9349,7 @@
}
@Override
+ @UnsupportedAppUsage
public int getStarts(int which) {
int val = mStarts;
if (which == STATS_CURRENT) {
@@ -9621,6 +9674,7 @@
return mStartTime + batteryUptime - mRunningSince;
}
+ @UnsupportedAppUsage
public void startLaunchedLocked() {
if (!mLaunched) {
mLaunches++;
@@ -9629,6 +9683,7 @@
}
}
+ @UnsupportedAppUsage
public void stopLaunchedLocked() {
if (mLaunched) {
long time = mBsi.getBatteryUptimeLocked() - mLaunchedSince;
@@ -9641,6 +9696,7 @@
}
}
+ @UnsupportedAppUsage
public void startRunningLocked() {
if (!mRunning) {
mStarts++;
@@ -9649,6 +9705,7 @@
}
}
+ @UnsupportedAppUsage
public void stopRunningLocked() {
if (mRunning) {
long time = mBsi.getBatteryUptimeLocked() - mRunningSince;
@@ -9661,6 +9718,7 @@
}
}
+ @UnsupportedAppUsage
public BatteryStatsImpl getBatteryStats() {
return mBsi;
}
@@ -10160,6 +10218,7 @@
mUserInfoProvider = userInfoProvider;
}
+ @UnsupportedAppUsage
public BatteryStatsImpl(Parcel p) {
this(new SystemClocks(), p);
}
@@ -10601,6 +10660,7 @@
}
@Override
+ @UnsupportedAppUsage
public boolean startIteratingHistoryLocked() {
mBatteryStatsHistory.startIteratingHistory();
mReadOverflow = false;
@@ -10641,6 +10701,7 @@
}
@Override
+ @UnsupportedAppUsage
public boolean getNextHistoryLocked(HistoryItem out) {
Parcel p = mBatteryStatsHistory.getNextParcel(out);
if (p == null) {
@@ -10674,6 +10735,7 @@
return mStartCount;
}
+ @UnsupportedAppUsage
public boolean isOnBattery() {
return mOnBattery;
}
@@ -12694,10 +12756,12 @@
}
}
+ @UnsupportedAppUsage
public long getAwakeTimeBattery() {
return computeBatteryUptime(getBatteryUptimeLocked(), STATS_CURRENT);
}
+ @UnsupportedAppUsage
public long getAwakeTimePlugged() {
return (mClocks.uptimeMillis() * 1000) - getAwakeTimeBattery();
}
@@ -12723,11 +12787,13 @@
}
@Override
+ @UnsupportedAppUsage
public long computeBatteryUptime(long curTime, int which) {
return mOnBatteryTimeBase.computeUptime(curTime, which);
}
@Override
+ @UnsupportedAppUsage
public long computeBatteryRealtime(long curTime, int which) {
return mOnBatteryTimeBase.computeRealtime(curTime, which);
}
@@ -12781,6 +12847,7 @@
}
@Override
+ @UnsupportedAppUsage
public long computeBatteryTimeRemaining(long curTime) {
if (!mOnBattery) {
return -1;
@@ -12979,11 +13046,13 @@
}
@Override
+ @UnsupportedAppUsage
public long getBatteryRealtime(long curTime) {
return mOnBatteryTimeBase.getRealtime(curTime);
}
@Override
+ @UnsupportedAppUsage
public int getDischargeStartLevel() {
synchronized(this) {
return getDischargeStartLevelLocked();
@@ -12995,6 +13064,7 @@
}
@Override
+ @UnsupportedAppUsage
public int getDischargeCurrentLevel() {
synchronized(this) {
return getDischargeCurrentLevelLocked();
@@ -13028,6 +13098,7 @@
}
@Override
+ @UnsupportedAppUsage
public int getDischargeAmount(int which) {
int dischargeAmount = which == STATS_SINCE_CHARGED
? getHighDischargeAmountSinceCharge()
@@ -13039,6 +13110,7 @@
}
@Override
+ @UnsupportedAppUsage
public int getDischargeAmountScreenOn() {
synchronized(this) {
int val = mDischargeAmountScreenOn;
@@ -13063,6 +13135,7 @@
}
@Override
+ @UnsupportedAppUsage
public int getDischargeAmountScreenOff() {
synchronized(this) {
int val = mDischargeAmountScreenOff;
@@ -13115,6 +13188,7 @@
/**
* Retrieve the statistics object for a particular uid, creating if needed.
*/
+ @UnsupportedAppUsage
public Uid getUidStatsLocked(int uid) {
Uid u = mUidStats.get(uid);
if (u == null) {
@@ -13159,6 +13233,7 @@
/**
* Remove the statistics object for a particular uid.
*/
+ @UnsupportedAppUsage
public void removeUidStatsLocked(int uid) {
final Uid u = mUidStats.get(uid);
if (u != null) {
@@ -13172,6 +13247,7 @@
* Retrieve the statistics object for a particular process, creating
* if needed.
*/
+ @UnsupportedAppUsage
public Uid.Proc getProcessStatsLocked(int uid, String name) {
uid = mapUid(uid);
Uid u = getUidStatsLocked(uid);
@@ -13182,6 +13258,7 @@
* Retrieve the statistics object for a particular process, creating
* if needed.
*/
+ @UnsupportedAppUsage
public Uid.Pkg getPackageStatsLocked(int uid, String pkg) {
uid = mapUid(uid);
Uid u = getUidStatsLocked(uid);
@@ -13192,6 +13269,7 @@
* Retrieve the statistics object for a particular service, creating
* if needed.
*/
+ @UnsupportedAppUsage
public Uid.Pkg.Serv getServiceStatsLocked(int uid, String pkg, String name) {
uid = mapUid(uid);
Uid u = getUidStatsLocked(uid);
@@ -13523,6 +13601,7 @@
}
}
+ @UnsupportedAppUsage
public void readLocked() {
if (mDailyFile != null) {
readDailyStatsLocked();
@@ -15146,6 +15225,7 @@
}
}
+ @UnsupportedAppUsage
public static final Parcelable.Creator<BatteryStatsImpl> CREATOR =
new Parcelable.Creator<BatteryStatsImpl>() {
public BatteryStatsImpl createFromParcel(Parcel in) {
diff --git a/core/java/com/android/internal/os/FuseAppLoop.java b/core/java/com/android/internal/os/FuseAppLoop.java
index 67fbe5e..d08930b 100644
--- a/core/java/com/android/internal/os/FuseAppLoop.java
+++ b/core/java/com/android/internal/os/FuseAppLoop.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.os.ProxyFileDescriptorCallback;
import android.os.Handler;
import android.os.Message;
@@ -226,6 +227,7 @@
// Called by JNI.
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private void onCommand(int command, long unique, long inode, long offset, int size,
byte[] data) {
synchronized (mLock) {
@@ -254,6 +256,7 @@
// Called by JNI.
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private byte[] onOpen(long unique, long inode) {
synchronized (mLock) {
try {
diff --git a/core/java/com/android/internal/os/HandlerCaller.java b/core/java/com/android/internal/os/HandlerCaller.java
index ae7c5f2..c8bfa1b 100644
--- a/core/java/com/android/internal/os/HandlerCaller.java
+++ b/core/java/com/android/internal/os/HandlerCaller.java
@@ -16,11 +16,18 @@
package com.android.internal.os;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+/**
+ * @deprecated Use {@link com.android.internal.util.function.pooled.PooledLambda#obtainMessage}
+ * to achieve the same effect of storing multiple values in a message with the added typesafety
+ * and code continuity benefits.
+ */
+@Deprecated
public class HandlerCaller {
final Looper mMainLooper;
final Handler mH;
@@ -82,6 +89,7 @@
mH.removeMessages(what, obj);
}
+ @UnsupportedAppUsage
public void sendMessage(Message msg) {
mH.sendMessage(msg);
}
@@ -106,6 +114,7 @@
return args;
}
+ @UnsupportedAppUsage
public Message obtainMessage(int what) {
return mH.obtainMessage(what);
}
@@ -121,6 +130,7 @@
return mH.obtainMessage(what, arg1 ? 1 : 0, 0, args);
}
+ @UnsupportedAppUsage
public Message obtainMessageO(int what, Object arg1) {
return mH.obtainMessage(what, 0, 0, arg1);
}
@@ -133,6 +143,7 @@
return mH.obtainMessage(what, arg1, arg2);
}
+ @UnsupportedAppUsage
public Message obtainMessageIO(int what, int arg1, Object arg2) {
return mH.obtainMessage(what, arg1, 0, arg2);
}
@@ -149,6 +160,7 @@
return mH.obtainMessage(what, arg1, arg2, args);
}
+ @UnsupportedAppUsage
public Message obtainMessageIOO(int what, int arg1, Object arg2, Object arg3) {
SomeArgs args = SomeArgs.obtain();
args.arg1 = arg2;
@@ -183,6 +195,7 @@
return mH.obtainMessage(what, arg1, arg2, args);
}
+ @UnsupportedAppUsage
public Message obtainMessageOO(int what, Object arg1, Object arg2) {
SomeArgs args = SomeArgs.obtain();
args.arg1 = arg1;
@@ -190,6 +203,7 @@
return mH.obtainMessage(what, 0, 0, args);
}
+ @UnsupportedAppUsage
public Message obtainMessageOOO(int what, Object arg1, Object arg2, Object arg3) {
SomeArgs args = SomeArgs.obtain();
args.arg1 = arg1;
diff --git a/core/java/com/android/internal/os/PowerProfile.java b/core/java/com/android/internal/os/PowerProfile.java
index 246a50f..997b722 100644
--- a/core/java/com/android/internal/os/PowerProfile.java
+++ b/core/java/com/android/internal/os/PowerProfile.java
@@ -17,6 +17,7 @@
package com.android.internal.os;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
@@ -57,22 +58,27 @@
* + core_power.cluster1 * num running cores in cluster 1
*/
public static final String POWER_CPU_SUSPEND = "cpu.suspend";
+ @UnsupportedAppUsage
public static final String POWER_CPU_IDLE = "cpu.idle";
+ @UnsupportedAppUsage
public static final String POWER_CPU_ACTIVE = "cpu.active";
/**
* Power consumption when WiFi driver is scanning for networks.
*/
+ @UnsupportedAppUsage
public static final String POWER_WIFI_SCAN = "wifi.scan";
/**
* Power consumption when WiFi driver is on.
*/
+ @UnsupportedAppUsage
public static final String POWER_WIFI_ON = "wifi.on";
/**
* Power consumption when WiFi driver is transmitting/receiving.
*/
+ @UnsupportedAppUsage
public static final String POWER_WIFI_ACTIVE = "wifi.active";
//
@@ -101,6 +107,7 @@
/**
* Power consumption when GPS is on.
*/
+ @UnsupportedAppUsage
public static final String POWER_GPS_ON = "gps.on";
/**
@@ -115,6 +122,7 @@
* @deprecated
*/
@Deprecated
+ @UnsupportedAppUsage
public static final String POWER_BLUETOOTH_ON = "bluetooth.on";
/**
@@ -131,6 +139,7 @@
* @deprecated
*/
@Deprecated
+ @UnsupportedAppUsage
public static final String POWER_BLUETOOTH_AT_CMD = "bluetooth.at";
/**
@@ -141,27 +150,32 @@
/**
* Power consumption when screen is on, not including the backlight power.
*/
+ @UnsupportedAppUsage
public static final String POWER_SCREEN_ON = "screen.on";
/**
* Power consumption when cell radio is on but not on a call.
*/
+ @UnsupportedAppUsage
public static final String POWER_RADIO_ON = "radio.on";
/**
* Power consumption when cell radio is hunting for a signal.
*/
+ @UnsupportedAppUsage
public static final String POWER_RADIO_SCANNING = "radio.scanning";
/**
* Power consumption when talking on the phone.
*/
+ @UnsupportedAppUsage
public static final String POWER_RADIO_ACTIVE = "radio.active";
/**
* Power consumption at full backlight brightness. If the backlight is at
* 50% brightness, then this should be multiplied by 0.5
*/
+ @UnsupportedAppUsage
public static final String POWER_SCREEN_FULL = "screen.full";
/**
@@ -224,6 +238,7 @@
private static final Object sLock = new Object();
@VisibleForTesting
+ @UnsupportedAppUsage
public PowerProfile(Context context) {
this(context, false);
}
@@ -371,6 +386,7 @@
}
}
+ @UnsupportedAppUsage
public int getNumCpuClusters() {
return mCpuClusters.length;
}
@@ -379,6 +395,7 @@
return mCpuClusters[cluster].numCpus;
}
+ @UnsupportedAppUsage
public int getNumSpeedStepsInCpuCluster(int cluster) {
if (cluster < 0 || cluster >= mCpuClusters.length) {
return 0; // index out of bound
@@ -442,6 +459,7 @@
* @param type the subsystem type
* @return the average current in milliAmps.
*/
+ @UnsupportedAppUsage
public double getAveragePower(String type) {
return getAveragePowerOrDefault(type, 0);
}
@@ -455,6 +473,7 @@
* If there is no data for multiple levels, the level is ignored.
* @return the average current in milliAmps.
*/
+ @UnsupportedAppUsage
public double getAveragePower(String type, int level) {
if (sPowerItemMap.containsKey(type)) {
return sPowerItemMap.get(type);
@@ -478,6 +497,7 @@
*
* @return the battery capacity in mAh
*/
+ @UnsupportedAppUsage
public double getBatteryCapacity() {
return getAveragePower(POWER_BATTERY_CAPACITY);
}
diff --git a/core/java/com/android/internal/os/SomeArgs.java b/core/java/com/android/internal/os/SomeArgs.java
index d9aa325..b9d53c1 100644
--- a/core/java/com/android/internal/os/SomeArgs.java
+++ b/core/java/com/android/internal/os/SomeArgs.java
@@ -16,6 +16,8 @@
package com.android.internal.os;
+import android.annotation.UnsupportedAppUsage;
+
/**
* Helper class for passing more arguments though a message
* and avoiding allocation of a custom class for wrapping the
@@ -40,8 +42,11 @@
static final int WAIT_FINISHED = 2;
int mWaitState = WAIT_NONE;
+ @UnsupportedAppUsage
public Object arg1;
+ @UnsupportedAppUsage
public Object arg2;
+ @UnsupportedAppUsage
public Object arg3;
public Object arg4;
public Object arg5;
@@ -50,7 +55,9 @@
public Object arg8;
public Object arg9;
public int argi1;
+ @UnsupportedAppUsage
public int argi2;
+ @UnsupportedAppUsage
public int argi3;
public int argi4;
public int argi5;
@@ -60,6 +67,7 @@
/* do nothing - reduce visibility */
}
+ @UnsupportedAppUsage
public static SomeArgs obtain() {
synchronized (sPoolLock) {
if (sPoolSize > 0) {
@@ -85,6 +93,7 @@
}
}
+ @UnsupportedAppUsage
public void recycle() {
if (mInPool) {
throw new IllegalStateException("Already recycled.");
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index a79e15a..b3af147 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -60,7 +60,7 @@
int uid, int initialPid, String message, int userId);
void onClearAllNotifications(int userId);
void onNotificationClear(String pkg, String tag, int id, int userId, String key,
- int dismissalSurface, in NotificationVisibility nv);
+ int dismissalSurface, int dismissalSentiment, in NotificationVisibility nv);
void onNotificationVisibilityChanged( in NotificationVisibility[] newlyVisibleKeys,
in NotificationVisibility[] noLongerVisibleKeys);
void onNotificationExpansionChanged(in String key, in boolean userAction, in boolean expanded);
diff --git a/core/java/com/android/internal/util/AsyncChannel.java b/core/java/com/android/internal/util/AsyncChannel.java
index e760f25..69297b5 100644
--- a/core/java/com/android/internal/util/AsyncChannel.java
+++ b/core/java/com/android/internal/util/AsyncChannel.java
@@ -16,6 +16,7 @@
package com.android.internal.util;
+import android.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -105,6 +106,7 @@
* msg.obj == the AsyncChannel
* msg.replyTo == dstMessenger if successful
*/
+ @UnsupportedAppUsage
public static final int CMD_CHANNEL_HALF_CONNECTED = BASE + 0;
/**
@@ -114,6 +116,7 @@
*
* msg.replyTo = srcMessenger.
*/
+ @UnsupportedAppUsage
public static final int CMD_CHANNEL_FULL_CONNECTION = BASE + 1;
/**
@@ -159,6 +162,7 @@
sCmdToString[CMD_CHANNEL_DISCONNECT - BASE] = "CMD_CHANNEL_DISCONNECT";
sCmdToString[CMD_CHANNEL_DISCONNECTED - BASE] = "CMD_CHANNEL_DISCONNECTED";
}
+ @UnsupportedAppUsage
protected static String cmdToString(int cmd) {
cmd -= BASE;
if ((cmd >= 0) && (cmd < sCmdToString.length)) {
@@ -169,6 +173,7 @@
}
/** Successful status always 0, !0 is an unsuccessful status */
+ @UnsupportedAppUsage
public static final int STATUS_SUCCESSFUL = 0;
/** Error attempting to bind on a connect */
@@ -204,6 +209,7 @@
/**
* AsyncChannel constructor
*/
+ @UnsupportedAppUsage
public AsyncChannel() {
}
@@ -255,6 +261,7 @@
*
* @return STATUS_SUCCESSFUL on success any other value is an error.
*/
+ @UnsupportedAppUsage
public int connectSync(Context srcContext, Handler srcHandler, Messenger dstMessenger) {
if (DBG) log("halfConnectSync srcHandler to the dstMessenger E");
@@ -370,6 +377,7 @@
* @param srcHandler
* @param dstMessenger
*/
+ @UnsupportedAppUsage
public void connect(Context srcContext, Handler srcHandler, Messenger dstMessenger) {
if (DBG) log("connect srcHandler to the dstMessenger E");
@@ -392,6 +400,7 @@
* @param srcHandler
* @param dstMessenger
*/
+ @UnsupportedAppUsage
public void connected(Context srcContext, Handler srcHandler, Messenger dstMessenger) {
if (DBG) log("connected srcHandler to the dstMessenger E");
@@ -446,6 +455,7 @@
/**
* Disconnect
*/
+ @UnsupportedAppUsage
public void disconnect() {
if ((mConnection != null) && (mSrcContext != null)) {
mSrcContext.unbindService(mConnection);
@@ -475,6 +485,7 @@
*
* @param msg
*/
+ @UnsupportedAppUsage
public void sendMessage(Message msg) {
msg.replyTo = mSrcMessenger;
try {
@@ -489,6 +500,7 @@
*
* @param what
*/
+ @UnsupportedAppUsage
public void sendMessage(int what) {
Message msg = Message.obtain();
msg.what = what;
@@ -501,6 +513,7 @@
* @param what
* @param arg1
*/
+ @UnsupportedAppUsage
public void sendMessage(int what, int arg1) {
Message msg = Message.obtain();
msg.what = what;
@@ -515,6 +528,7 @@
* @param arg1
* @param arg2
*/
+ @UnsupportedAppUsage
public void sendMessage(int what, int arg1, int arg2) {
Message msg = Message.obtain();
msg.what = what;
@@ -531,6 +545,7 @@
* @param arg2
* @param obj
*/
+ @UnsupportedAppUsage
public void sendMessage(int what, int arg1, int arg2, Object obj) {
Message msg = Message.obtain();
msg.what = what;
@@ -559,6 +574,7 @@
* @param srcMsg
* @param dstMsg
*/
+ @UnsupportedAppUsage
public void replyToMessage(Message srcMsg, Message dstMsg) {
try {
dstMsg.replyTo = mSrcMessenger;
@@ -575,6 +591,7 @@
* @param srcMsg
* @param what
*/
+ @UnsupportedAppUsage
public void replyToMessage(Message srcMsg, int what) {
Message msg = Message.obtain();
msg.what = what;
@@ -588,6 +605,7 @@
* @param what
* @param arg1
*/
+ @UnsupportedAppUsage
public void replyToMessage(Message srcMsg, int what, int arg1) {
Message msg = Message.obtain();
msg.what = what;
@@ -620,6 +638,7 @@
* @param arg2
* @param obj
*/
+ @UnsupportedAppUsage
public void replyToMessage(Message srcMsg, int what, int arg1, int arg2, Object obj) {
Message msg = Message.obtain();
msg.what = what;
@@ -636,6 +655,7 @@
* @param what
* @param obj
*/
+ @UnsupportedAppUsage
public void replyToMessage(Message srcMsg, int what, Object obj) {
Message msg = Message.obtain();
msg.what = what;
@@ -649,6 +669,7 @@
* @param msg to send
* @return reply message or null if an error.
*/
+ @UnsupportedAppUsage
public Message sendMessageSynchronously(Message msg) {
Message resultMsg = SyncMessenger.sendMessageSynchronously(mDstMessenger, msg);
return resultMsg;
@@ -690,6 +711,7 @@
* @param arg2
* @return reply message or null if an error.
*/
+ @UnsupportedAppUsage
public Message sendMessageSynchronously(int what, int arg1, int arg2) {
Message msg = Message.obtain();
msg.what = what;
diff --git a/core/java/com/android/internal/util/FastPrintWriter.java b/core/java/com/android/internal/util/FastPrintWriter.java
index cc2c4cf..981fbaa 100644
--- a/core/java/com/android/internal/util/FastPrintWriter.java
+++ b/core/java/com/android/internal/util/FastPrintWriter.java
@@ -16,6 +16,7 @@
package com.android.internal.util;
+import android.annotation.UnsupportedAppUsage;
import android.util.Log;
import android.util.Printer;
@@ -77,6 +78,7 @@
* @throws NullPointerException
* if {@code out} is {@code null}.
*/
+ @UnsupportedAppUsage
public FastPrintWriter(OutputStream out) {
this(out, false, 8192);
}
diff --git a/core/java/com/android/internal/util/IndentingPrintWriter.java b/core/java/com/android/internal/util/IndentingPrintWriter.java
index e453866..03a555e 100644
--- a/core/java/com/android/internal/util/IndentingPrintWriter.java
+++ b/core/java/com/android/internal/util/IndentingPrintWriter.java
@@ -16,6 +16,7 @@
package com.android.internal.util;
+import android.annotation.UnsupportedAppUsage;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Arrays;
@@ -47,6 +48,7 @@
private char[] mSingleChar = new char[1];
+ @UnsupportedAppUsage
public IndentingPrintWriter(Writer writer, String singleIndent) {
this(writer, singleIndent, -1);
}
@@ -72,12 +74,14 @@
return this;
}
+ @UnsupportedAppUsage
public IndentingPrintWriter increaseIndent() {
mIndentBuilder.append(mSingleIndent);
mCurrentIndent = null;
return this;
}
+ @UnsupportedAppUsage
public IndentingPrintWriter decreaseIndent() {
mIndentBuilder.delete(0, mSingleIndent.length());
mCurrentIndent = null;
diff --git a/core/java/com/android/internal/util/JournaledFile.java b/core/java/com/android/internal/util/JournaledFile.java
index 5372fc0..258db2a 100644
--- a/core/java/com/android/internal/util/JournaledFile.java
+++ b/core/java/com/android/internal/util/JournaledFile.java
@@ -16,6 +16,8 @@
package com.android.internal.util;
+import android.annotation.UnsupportedAppUsage;
+
import java.io.File;
import java.io.IOException;
@@ -33,6 +35,7 @@
File mTemp;
boolean mWriting;
+ @UnsupportedAppUsage
public JournaledFile(File real, File temp) {
mReal = real;
mTemp = temp;
@@ -44,6 +47,7 @@
* it to the real one. If there is both a real file and a temp one, assumes that the
* temp one isn't fully written and deletes it.
*/
+ @UnsupportedAppUsage
public File chooseForRead() {
File result;
if (mReal.exists()) {
@@ -68,6 +72,7 @@
* <p>
* Call {@link #commit} to commit the changes, or {@link #rollback} to forget the changes.
*/
+ @UnsupportedAppUsage
public File chooseForWrite() {
if (mWriting) {
throw new IllegalStateException("uncommitted write already in progress");
@@ -95,6 +100,7 @@
/**
* Commit changes.
*/
+ @UnsupportedAppUsage
public void commit() {
if (!mWriting) {
throw new IllegalStateException("no file to commit");
@@ -106,6 +112,7 @@
/**
* Roll back changes.
*/
+ @UnsupportedAppUsage
public void rollback() {
if (!mWriting) {
throw new IllegalStateException("no file to roll back");
diff --git a/core/java/com/android/internal/util/XmlUtils.java b/core/java/com/android/internal/util/XmlUtils.java
index 3188d30..5da587b 100644
--- a/core/java/com/android/internal/util/XmlUtils.java
+++ b/core/java/com/android/internal/util/XmlUtils.java
@@ -16,6 +16,7 @@
package com.android.internal.util;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;
@@ -48,6 +49,7 @@
private static final String STRING_ARRAY_SEPARATOR = ":";
+ @UnsupportedAppUsage
public static void skipCurrentTag(XmlPullParser parser)
throws XmlPullParserException, IOException {
int outerDepth = parser.getDepth();
@@ -71,6 +73,7 @@
return defaultValue;
}
+ @UnsupportedAppUsage
public static final boolean
convertValueToBoolean(CharSequence value, boolean defaultValue)
{
@@ -87,6 +90,7 @@
return result;
}
+ @UnsupportedAppUsage
public static final int
convertValueToInt(CharSequence charSeq, int defaultValue)
{
@@ -183,6 +187,7 @@
* @see #writeValueXml
* @see #readMapXml
*/
+ @UnsupportedAppUsage
public static final void writeMapXml(Map val, OutputStream out)
throws XmlPullParserException, java.io.IOException {
XmlSerializer serializer = new FastXmlSerializer();
@@ -732,6 +737,7 @@
* #see #writeMapXml
*/
@SuppressWarnings("unchecked")
+ @UnsupportedAppUsage
public static final HashMap<String, ?> readMapXml(InputStream in)
throws XmlPullParserException, java.io.IOException
{
@@ -1550,6 +1556,7 @@
}
}
+ @UnsupportedAppUsage
public static final void beginDocument(XmlPullParser parser, String firstElementName) throws XmlPullParserException, IOException
{
int type;
@@ -1568,6 +1575,7 @@
}
}
+ @UnsupportedAppUsage
public static final void nextElement(XmlPullParser parser) throws XmlPullParserException, IOException
{
int type;
diff --git a/core/java/com/android/internal/view/BaseIWindow.java b/core/java/com/android/internal/view/BaseIWindow.java
index 7178a0d..e3490f1 100644
--- a/core/java/com/android/internal/view/BaseIWindow.java
+++ b/core/java/com/android/internal/view/BaseIWindow.java
@@ -16,6 +16,7 @@
package com.android.internal.view;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Rect;
import android.hardware.input.InputManager;
import android.os.Bundle;
diff --git a/core/java/com/android/internal/view/IInputConnectionWrapper.java b/core/java/com/android/internal/view/IInputConnectionWrapper.java
index 28291ae..189c8d5 100644
--- a/core/java/com/android/internal/view/IInputConnectionWrapper.java
+++ b/core/java/com/android/internal/view/IInputConnectionWrapper.java
@@ -21,6 +21,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -67,10 +68,12 @@
@GuardedBy("mLock")
@Nullable
+ @UnsupportedAppUsage
private InputConnection mInputConnection;
private Looper mMainLooper;
private Handler mH;
+ @UnsupportedAppUsage
private Object mLock = new Object();
@GuardedBy("mLock")
private boolean mFinished = false;
diff --git a/core/java/com/android/internal/view/InputBindResult.java b/core/java/com/android/internal/view/InputBindResult.java
index f05bd32..9d4383f 100644
--- a/core/java/com/android/internal/view/InputBindResult.java
+++ b/core/java/com/android/internal/view/InputBindResult.java
@@ -19,6 +19,7 @@
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.annotation.IntDef;
+import android.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
@@ -151,6 +152,7 @@
/**
* The input method service.
*/
+ @UnsupportedAppUsage
public final IInputMethodSession method;
/**
@@ -230,6 +232,7 @@
/**
* Used to make this class parcelable.
*/
+ @UnsupportedAppUsage
public static final Parcelable.Creator<InputBindResult> CREATOR =
new Parcelable.Creator<InputBindResult>() {
@Override
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index 92e1d80..eb94db3 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -16,6 +16,7 @@
package com.android.internal.view.menu;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -224,6 +225,7 @@
updateTextButtonVisibility();
}
+ @UnsupportedAppUsage
public boolean hasText() {
return !TextUtils.isEmpty(getText());
}
diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java
index 48485e0..0e07ca7 100644
--- a/core/java/com/android/internal/view/menu/MenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/MenuBuilder.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -64,6 +65,7 @@
0, /* SELECTED_ALTERNATIVE */
};
+ @UnsupportedAppUsage
private final Context mContext;
private final Resources mResources;
@@ -173,6 +175,7 @@
* @param item The menu item that is selected
* @return whether the menu item selection was handled
*/
+ @UnsupportedAppUsage
public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item);
/**
@@ -180,6 +183,7 @@
*
* @param menu the menu that has changed modes
*/
+ @UnsupportedAppUsage
public void onMenuModeChange(MenuBuilder menu);
}
@@ -190,6 +194,7 @@
public boolean invokeItem(MenuItemImpl item);
}
+ @UnsupportedAppUsage
public MenuBuilder(Context context) {
mContext = context;
mResources = context.getResources();
@@ -205,6 +210,7 @@
setShortcutsVisibleInner(true);
}
+ @UnsupportedAppUsage
public MenuBuilder setDefaultShowAsAction(int defaultShowAsAction) {
mDefaultShowAsAction = defaultShowAsAction;
return this;
@@ -217,6 +223,7 @@
*
* @param presenter The presenter to add
*/
+ @UnsupportedAppUsage
public void addMenuPresenter(MenuPresenter presenter) {
addMenuPresenter(presenter, mContext);
}
@@ -230,6 +237,7 @@
* @param presenter The presenter to add
* @param menuContext The context used to inflate menu items
*/
+ @UnsupportedAppUsage
public void addMenuPresenter(MenuPresenter presenter, Context menuContext) {
mPresenters.add(new WeakReference<MenuPresenter>(presenter));
presenter.initForMenu(menuContext, this);
@@ -242,6 +250,7 @@
*
* @param presenter The presenter to remove
*/
+ @UnsupportedAppUsage
public void removeMenuPresenter(MenuPresenter presenter) {
for (WeakReference<MenuPresenter> ref : mPresenters) {
final MenuPresenter item = ref.get();
@@ -401,6 +410,7 @@
return ACTION_VIEW_STATES_KEY;
}
+ @UnsupportedAppUsage
public void setCallback(Callback cb) {
mCallback = cb;
}
@@ -768,6 +778,7 @@
return mResources;
}
+ @UnsupportedAppUsage
public Context getContext() {
return mContext;
}
@@ -1004,6 +1015,7 @@
* {@link #startDispatchingItemsChanged()} is called. Useful when
* many menu operations are going to be performed as a batch.
*/
+ @UnsupportedAppUsage
public void stopDispatchingItemsChanged() {
if (!mPreventDispatchingItemsChanged) {
mPreventDispatchingItemsChanged = true;
@@ -1011,6 +1023,7 @@
}
}
+ @UnsupportedAppUsage
public void startDispatchingItemsChanged() {
mPreventDispatchingItemsChanged = false;
@@ -1041,6 +1054,7 @@
}
@NonNull
+ @UnsupportedAppUsage
public ArrayList<MenuItemImpl> getVisibleItems() {
if (!mIsVisibleItemsStale) return mVisibleItems;
@@ -1131,6 +1145,7 @@
return mActionItems;
}
+ @UnsupportedAppUsage
public ArrayList<MenuItemImpl> getNonActionItems() {
flagActionItems();
return mNonActionItems;
@@ -1235,10 +1250,12 @@
return this;
}
+ @UnsupportedAppUsage
public CharSequence getHeaderTitle() {
return mHeaderTitle;
}
+ @UnsupportedAppUsage
public Drawable getHeaderIcon() {
return mHeaderIcon;
}
@@ -1251,6 +1268,7 @@
* Gets the root menu (if this is a submenu, find its root menu).
* @return The root menu.
*/
+ @UnsupportedAppUsage
public MenuBuilder getRootMenu() {
return this;
}
@@ -1262,10 +1280,12 @@
*
* @param menuInfo The extra menu information to add.
*/
+ @UnsupportedAppUsage
public void setCurrentMenuInfo(ContextMenuInfo menuInfo) {
mCurrentMenuInfo = menuInfo;
}
+ @UnsupportedAppUsage
void setOptionalIconsVisible(boolean visible) {
mOptionalIconsVisible = visible;
}
@@ -1296,6 +1316,7 @@
return expanded;
}
+ @UnsupportedAppUsage
public boolean collapseItemActionView(MenuItemImpl item) {
if (mPresenters.isEmpty() || mExpandedItem != item) return false;
diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java
index 0c5ea63..994a9c1 100644
--- a/core/java/com/android/internal/view/menu/MenuItemImpl.java
+++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java
@@ -19,6 +19,7 @@
import com.android.internal.view.menu.MenuView.ItemView;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
@@ -67,6 +68,7 @@
* needed (if the Drawable isn't already obtained--only one of the two is
* needed).
*/
+ @UnsupportedAppUsage
private int mIconResId = NO_ICON;
private ColorStateList mIconTintList = null;
@@ -139,6 +141,7 @@
*
* @return true if the invocation was handled, false otherwise
*/
+ @UnsupportedAppUsage
public boolean invoke() {
if (mClickListener != null &&
mClickListener.onMenuItemClick(this)) {
@@ -565,6 +568,7 @@
return this;
}
+ @UnsupportedAppUsage
public void setExclusiveCheckable(boolean exclusive) {
mFlags = (mFlags & ~EXCLUSIVE) | (exclusive ? EXCLUSIVE : 0);
}
@@ -638,6 +642,7 @@
return mTitle != null ? mTitle.toString() : null;
}
+ @UnsupportedAppUsage
void setMenuInfo(ContextMenuInfo menuInfo) {
mMenuInfo = menuInfo;
}
@@ -657,14 +662,17 @@
return mMenu.getOptionalIconsVisible();
}
+ @UnsupportedAppUsage
public boolean isActionButton() {
return (mFlags & IS_ACTION) == IS_ACTION;
}
+ @UnsupportedAppUsage
public boolean requestsActionButton() {
return (mShowAsAction & SHOW_AS_ACTION_IF_ROOM) == SHOW_AS_ACTION_IF_ROOM;
}
+ @UnsupportedAppUsage
public boolean requiresActionButton() {
return (mShowAsAction & SHOW_AS_ACTION_ALWAYS) == SHOW_AS_ACTION_ALWAYS;
}
@@ -806,6 +814,7 @@
return false;
}
+ @UnsupportedAppUsage
public void setActionViewExpanded(boolean isExpanded) {
mIsActionViewExpanded = isExpanded;
mMenu.onItemsChanged(false);
diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
index 324f923..e6d3460 100644
--- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java
+++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
@@ -22,6 +22,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StyleRes;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.graphics.Point;
import android.graphics.Rect;
@@ -49,16 +50,19 @@
// Mutable cached popup menu properties.
private View mAnchorView;
private int mDropDownGravity = Gravity.START;
+ @UnsupportedAppUsage
private boolean mForceShowIcon;
private Callback mPresenterCallback;
private MenuPopup mPopup;
private OnDismissListener mOnDismissListener;
+ @UnsupportedAppUsage
public MenuPopupHelper(@NonNull Context context, @NonNull MenuBuilder menu) {
this(context, menu, null, false, com.android.internal.R.attr.popupMenuStyle, 0);
}
+ @UnsupportedAppUsage
public MenuPopupHelper(@NonNull Context context, @NonNull MenuBuilder menu,
@NonNull View anchorView) {
this(context, menu, anchorView, false, com.android.internal.R.attr.popupMenuStyle, 0);
@@ -92,6 +96,7 @@
*
* @param anchor the view to which the popup window should be anchored
*/
+ @UnsupportedAppUsage
public void setAnchorView(@NonNull View anchor) {
mAnchorView = anchor;
}
@@ -105,6 +110,7 @@
* @param forceShowIcon {@code true} to force icons to be shown, or
* {@code false} for icons to be optionally shown
*/
+ @UnsupportedAppUsage
public void setForceShowIcon(boolean forceShowIcon) {
mForceShowIcon = forceShowIcon;
if (mPopup != null) {
@@ -119,6 +125,7 @@
*
* @param gravity alignment of the popup relative to the anchor
*/
+ @UnsupportedAppUsage
public void setGravity(int gravity) {
mDropDownGravity = gravity;
}
@@ -130,6 +137,7 @@
return mDropDownGravity;
}
+ @UnsupportedAppUsage
public void show() {
if (!tryShow()) {
throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor");
@@ -143,6 +151,7 @@
}
@NonNull
+ @UnsupportedAppUsage
public MenuPopup getPopup() {
if (mPopup == null) {
mPopup = createPopup();
@@ -156,6 +165,7 @@
* @return {@code true} if the popup was shown or was already showing prior to calling this
* method, {@code false} otherwise
*/
+ @UnsupportedAppUsage
public boolean tryShow() {
if (isShowing()) {
return true;
@@ -280,6 +290,7 @@
* Dismisses the popup, if showing.
*/
@Override
+ @UnsupportedAppUsage
public void dismiss() {
if (isShowing()) {
mPopup.dismiss();
diff --git a/core/java/com/android/internal/view/menu/MenuPresenter.java b/core/java/com/android/internal/view/menu/MenuPresenter.java
index 65bdc09..c5df8ad 100644
--- a/core/java/com/android/internal/view/menu/MenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/MenuPresenter.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.os.Parcelable;
import android.view.ViewGroup;
@@ -47,6 +48,7 @@
* @return true if the Callback will handle presenting the submenu, false if
* the presenter should attempt to do so.
*/
+ @UnsupportedAppUsage
public boolean onOpenSubMenu(MenuBuilder subMenu);
}
diff --git a/core/java/com/android/internal/view/menu/MenuView.java b/core/java/com/android/internal/view/menu/MenuView.java
index 407caae..67a5530 100644
--- a/core/java/com/android/internal/view/menu/MenuView.java
+++ b/core/java/com/android/internal/view/menu/MenuView.java
@@ -19,6 +19,7 @@
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuItemImpl;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.drawable.Drawable;
/**
@@ -40,6 +41,7 @@
* Returns the default animations to be used for this menu when entering/exiting.
* @return A resource ID for the default animations to be used for this menu.
*/
+ @UnsupportedAppUsage
public int getWindowAnimations();
/**
@@ -61,6 +63,7 @@
* Gets the item data that this view is displaying.
* @return the item data, or null if there is not one
*/
+ @UnsupportedAppUsage
public MenuItemImpl getItemData();
/**
diff --git a/core/java/com/android/internal/view/menu/SubMenuBuilder.java b/core/java/com/android/internal/view/menu/SubMenuBuilder.java
index 897440e..cf6d974 100644
--- a/core/java/com/android/internal/view/menu/SubMenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/SubMenuBuilder.java
@@ -16,6 +16,7 @@
package com.android.internal.view.menu;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.Menu;
@@ -67,11 +68,13 @@
}
@Override
+ @UnsupportedAppUsage
public void setCallback(Callback callback) {
mParentMenu.setCallback(callback);
}
@Override
+ @UnsupportedAppUsage
public MenuBuilder getRootMenu() {
return mParentMenu.getRootMenu();
}
diff --git a/core/java/com/android/internal/widget/CachingIconView.java b/core/java/com/android/internal/widget/CachingIconView.java
index f3b6552..35bff6d 100644
--- a/core/java/com/android/internal/widget/CachingIconView.java
+++ b/core/java/com/android/internal/widget/CachingIconView.java
@@ -18,6 +18,7 @@
import android.annotation.DrawableRes;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
@@ -44,6 +45,7 @@
private boolean mForceHidden;
private int mDesiredVisibility;
+ @UnsupportedAppUsage
public CachingIconView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
diff --git a/core/java/com/android/internal/widget/MessagingLinearLayout.java b/core/java/com/android/internal/widget/MessagingLinearLayout.java
index 64b1f24..0c8613b 100644
--- a/core/java/com/android/internal/widget/MessagingLinearLayout.java
+++ b/core/java/com/android/internal/widget/MessagingLinearLayout.java
@@ -111,14 +111,16 @@
final int childHeight = child.getMeasuredHeight();
int newHeight = Math.max(totalHeight, totalHeight + childHeight + lp.topMargin +
lp.bottomMargin + spacing);
- first = false;
int measureType = MessagingChild.MEASURED_NORMAL;
if (messagingChild != null) {
measureType = messagingChild.getMeasuredType();
linesRemaining -= messagingChild.getConsumedLines();
}
- boolean isShortened = measureType == MessagingChild.MEASURED_SHORTENED;
- boolean isTooSmall = measureType == MessagingChild.MEASURED_TOO_SMALL;
+
+ // We never measure the first item as too small, we want to at least show something.
+ boolean isTooSmall = measureType == MessagingChild.MEASURED_TOO_SMALL && !first;
+ boolean isShortened = measureType == MessagingChild.MEASURED_SHORTENED
+ || measureType == MessagingChild.MEASURED_TOO_SMALL && first;
if (newHeight <= targetHeight && !isTooSmall) {
totalHeight = newHeight;
measuredWidth = Math.max(measuredWidth,
@@ -131,6 +133,7 @@
} else {
break;
}
+ first = false;
}
setMeasuredDimension(
diff --git a/core/java/com/android/internal/widget/ScrollingTabContainerView.java b/core/java/com/android/internal/widget/ScrollingTabContainerView.java
index 311bfac..5d48ab9 100644
--- a/core/java/com/android/internal/widget/ScrollingTabContainerView.java
+++ b/core/java/com/android/internal/widget/ScrollingTabContainerView.java
@@ -20,6 +20,7 @@
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.animation.TimeInterpolator;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActionBar;
import android.content.Context;
import android.content.res.Configuration;
@@ -67,6 +68,7 @@
private static final int FADE_DURATION = 200;
+ @UnsupportedAppUsage
public ScrollingTabContainerView(Context context) {
super(context);
setHorizontalScrollBarEnabled(false);
@@ -134,6 +136,7 @@
return mTabSpinner != null && mTabSpinner.getParent() == this;
}
+ @UnsupportedAppUsage
public void setAllowCollapse(boolean allowCollapse) {
mAllowCollapse = allowCollapse;
}
@@ -169,6 +172,7 @@
return false;
}
+ @UnsupportedAppUsage
public void setTabSelected(int position) {
mSelectedTabIndex = position;
final int tabCount = mTabLayout.getChildCount();
@@ -220,6 +224,7 @@
mStackedTabMaxWidth = abp.getStackedTabMaxWidth();
}
+ @UnsupportedAppUsage
public void animateToVisibility(int visibility) {
if (mVisibilityAnim != null) {
mVisibilityAnim.cancel();
@@ -244,6 +249,7 @@
}
}
+ @UnsupportedAppUsage
public void animateToTab(final int position) {
final View tabView = mTabLayout.getChildAt(position);
if (mTabSelector != null) {
@@ -293,6 +299,7 @@
return tabView;
}
+ @UnsupportedAppUsage
public void addTab(ActionBar.Tab tab, boolean setSelected) {
TabView tabView = createTabView(mContext, tab, false);
mTabLayout.addView(tabView, new LinearLayout.LayoutParams(0,
@@ -308,6 +315,7 @@
}
}
+ @UnsupportedAppUsage
public void addTab(ActionBar.Tab tab, int position, boolean setSelected) {
final TabView tabView = createTabView(mContext, tab, false);
mTabLayout.addView(tabView, position, new LinearLayout.LayoutParams(
@@ -323,6 +331,7 @@
}
}
+ @UnsupportedAppUsage
public void updateTab(int position) {
((TabView) mTabLayout.getChildAt(position)).update();
if (mTabSpinner != null) {
@@ -333,6 +342,7 @@
}
}
+ @UnsupportedAppUsage
public void removeTabAt(int position) {
mTabLayout.removeViewAt(position);
if (mTabSpinner != null) {
@@ -343,6 +353,7 @@
}
}
+ @UnsupportedAppUsage
public void removeAllTabs() {
mTabLayout.removeAllViews();
if (mTabSpinner != null) {
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java
index c5be8e4..0a787b9 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -169,6 +169,10 @@
final ArrayMap<String, ArraySet<String>> mProductPrivAppPermissions = new ArrayMap<>();
final ArrayMap<String, ArraySet<String>> mProductPrivAppDenyPermissions = new ArrayMap<>();
+ final ArrayMap<String, ArraySet<String>> mProductServicesPrivAppPermissions = new ArrayMap<>();
+ final ArrayMap<String, ArraySet<String>> mProductServicesPrivAppDenyPermissions =
+ new ArrayMap<>();
+
final ArrayMap<String, ArrayMap<String, Boolean>> mOemPermissions = new ArrayMap<>();
public static SystemConfig getInstance() {
@@ -276,6 +280,14 @@
return mProductPrivAppDenyPermissions.get(packageName);
}
+ public ArraySet<String> getProductServicesPrivAppPermissions(String packageName) {
+ return mProductServicesPrivAppPermissions.get(packageName);
+ }
+
+ public ArraySet<String> getProductServicesPrivAppDenyPermissions(String packageName) {
+ return mProductServicesPrivAppDenyPermissions.get(packageName);
+ }
+
public Map<String, Boolean> getOemPermissions(String packageName) {
final Map<String, Boolean> oemPermissions = mOemPermissions.get(packageName);
if (oemPermissions != null) {
@@ -326,6 +338,17 @@
Environment.getProductDirectory(), "etc", "sysconfig"), productPermissionFlag);
readPermissions(Environment.buildPath(
Environment.getProductDirectory(), "etc", "permissions"), productPermissionFlag);
+
+ // Allow /product_services to customize system configs around libs, features, permissions
+ // and apps.
+ int productServicesPermissionFlag = ALLOW_LIBS | ALLOW_FEATURES | ALLOW_PERMISSIONS |
+ ALLOW_APP_CONFIGS | ALLOW_PRIVAPP_PERMISSIONS;
+ readPermissions(Environment.buildPath(
+ Environment.getProductServicesDirectory(), "etc", "sysconfig"),
+ productServicesPermissionFlag);
+ readPermissions(Environment.buildPath(
+ Environment.getProductServicesDirectory(), "etc", "permissions"),
+ productServicesPermissionFlag);
}
void readPermissions(File libraryDir, int permissionFlag) {
@@ -659,22 +682,27 @@
}
XmlUtils.skipCurrentTag(parser);
} else if ("privapp-permissions".equals(name) && allowPrivappPermissions) {
- // privapp permissions from system, vendor and product partitions are stored
- // separately. This is to prevent xml files in the vendor partition from
- // granting permissions to priv apps in the system partition and vice
- // versa.
+ // privapp permissions from system, vendor, product and product_services
+ // partitions are stored separately. This is to prevent xml files in the vendor
+ // partition from granting permissions to priv apps in the system partition and
+ // vice versa.
boolean vendor = permFile.toPath().startsWith(
- Environment.getVendorDirectory().toPath())
+ Environment.getVendorDirectory().toPath() + "/")
|| permFile.toPath().startsWith(
- Environment.getOdmDirectory().toPath());
+ Environment.getOdmDirectory().toPath() + "/");
boolean product = permFile.toPath().startsWith(
- Environment.getProductDirectory().toPath());
+ Environment.getProductDirectory().toPath() + "/");
+ boolean productServices = permFile.toPath().startsWith(
+ Environment.getProductServicesDirectory().toPath() + "/");
if (vendor) {
readPrivAppPermissions(parser, mVendorPrivAppPermissions,
mVendorPrivAppDenyPermissions);
} else if (product) {
readPrivAppPermissions(parser, mProductPrivAppPermissions,
mProductPrivAppDenyPermissions);
+ } else if (productServices) {
+ readPrivAppPermissions(parser, mProductServicesPrivAppPermissions,
+ mProductServicesPrivAppDenyPermissions);
} else {
readPrivAppPermissions(parser, mPrivAppPermissions,
mPrivAppDenyPermissions);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 5b36d7c..8f176e8 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -359,6 +359,7 @@
<protected-broadcast android:name="android.net.wifi.action.PASSPOINT_ICON" />
<protected-broadcast android:name="android.net.wifi.action.PASSPOINT_OSU_PROVIDERS_LIST" />
<protected-broadcast android:name="android.net.wifi.action.PASSPOINT_SUBSCRIPTION_REMEDIATION" />
+ <protected-broadcast android:name="android.net.wifi.action.PASSPOINT_LAUNCH_OSU_VIEW" />
<protected-broadcast android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
<protected-broadcast android:name="android.net.wifi.supplicant.STATE_CHANGE" />
<protected-broadcast android:name="android.net.wifi.p2p.STATE_CHANGED" />
@@ -2150,11 +2151,11 @@
<!-- @SystemApi @TestApi @hide Allows an application to create/manage/remove stacks -->
<permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"
- android:protectionLevel="signature|privileged|development" />
+ android:protectionLevel="signature|privileged" />
<!-- @SystemApi @TestApi @hide Allows an application to embed other activities -->
<permission android:name="android.permission.ACTIVITY_EMBEDDING"
- android:protectionLevel="signature|privileged|development" />
+ android:protectionLevel="signature|privileged" />
<!-- Allows an application to start any activity, regardless of permission
protection or exported state.
@@ -2387,7 +2388,7 @@
<permission android:name="android.permission.SET_SCREEN_COMPATIBILITY"
android:protectionLevel="signature" />
- <!-- @SystemApi Allows an application to modify the current configuration, such
+ <!-- @SystemApi @TestApi Allows an application to modify the current configuration, such
as locale. -->
<permission android:name="android.permission.CHANGE_CONFIGURATION"
android:protectionLevel="signature|privileged|development" />
@@ -2414,7 +2415,7 @@
<permission android:name="android.permission.WRITE_GSERVICES"
android:protectionLevel="signature|privileged" />
- <!-- @SystemApi Allows an application to call
+ <!-- @SystemApi @TestApi Allows an application to call
{@link android.app.ActivityManager#forceStopPackage}.
@hide -->
<permission android:name="android.permission.FORCE_STOP_PACKAGES"
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index c93d266..703ecf7 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Liggaamsensors"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"toegang te verkry tot sensordata oor jou lewenstekens"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Gee <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang tot sensordata oor jou lewenstekens?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Venster-inhoud ophaal"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Die inhoud ondersoek van \'n venster waarmee jy interaksie het."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Verken deur raak aanskakel"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Laat die program toe om metodes te benut om vingerafdruksjablone vir gebruik by te voeg en uit te vee."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"gebruik vingerafdrukhardeware"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Laat die program toe om vingerafdrukhardeware vir stawing te gebruik"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Gedeeltelike vingerafdruk is bespeur. Probeer asseblief weer."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Kon nie vingerafdruk verwerk nie. Probeer asseblief weer."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Vingerafdruksensor is vuil. Maak dit skoon en probeer weer."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Stoor <xliff:g id="TYPE">%1$s</xliff:g> in <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Stoor <xliff:g id="TYPE_0">%1$s</xliff:g> en <xliff:g id="TYPE_1">%2$s</xliff:g> in <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Stoor <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> en <xliff:g id="TYPE_2">%3$s</xliff:g> in <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Stoor"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nee, dankie"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"wagwoord"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adres"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredietkaart"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 400f304..5a7e643 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"የሰውነት ዳሳሾች"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"ስለአስፈላጊ ምልክቶችዎ ያሉ የዳሳሽ ውሂብ ይድረሱ"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> የሰውነትዎ መሠረታዊ ምልክቶች የዳሳሽ ውሂብ እንዲደርስ ይፈቀድለት?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"ሙዚቃ"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"ሙዚቃዎን መድረስ"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ቀን ሙዚቃዎን እንዲደርስ ይፈቀድለት?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"ፎቶዎች እና ቪዲዮዎች"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"የእርስዎን ፎቶዎች እና ቪዲዮዎች መድረስ"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> የእርስዎን ፎቶዎች እና ቪዲዮዎች እንዲደርስ ይፈቀድለት?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"የመስኮት ይዘት ሰርስረው ያውጡ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"መስተጋበር የሚፈጥሩት የመስኮት ይዘት ይመርምሩ።"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"በመንካት ያስሱን ያብሩ"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"መተግበሪያው ጥቅም ላይ እንዲውሉ የጣት አሻራ ቅንብር ደንቦችን ለማከል እና ለመሰረዝ የሚያስችሉ ስልቶችን እንዲያስጀምር ያስችለዋል።"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"የጣት አሻራ ሃርድዌርን ተጠቀም"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"መተግበሪያው የጣት አሻራ ሃርድዌር ለማረጋገጥ ስራ እንዲጠቀም ያስችለዋል"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"የሙዚቃ ስብስብዎን ማንበብ"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"መተግበሪያው የሙዚቃ ስብስብዎን እንዲያነብብ ያስችለዋል።"</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"የሙዚቃ ስብስብዎን መቀየር"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"መተግበሪያው የሙዚቃ ስብስብዎን እንዲቀይረው ያስችለዋል።"</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"የቪዲዮ ስብስብዎን ማንበብ"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"መተግበሪያው የቪዲዮ ስብስብዎን እንዲያነብብ ያስችለዋል።"</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"የቪዲዮ ስብስብዎን መቀየር"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"መተግበሪያው የፎቶ ስብስብዎን እንዲቀይረው ያስችለዋል።"</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"የፎቶ ስብስብዎን ማንበብ"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"መተግበሪያው የፎቶ ስብስብዎን እንዲያነብብ ያስችለዋል።"</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"የፎቶ ስብስብዎን መቀየር"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"መተግበሪያው የፎቶ ስብስብዎን እንዲቀይረው ያስችለዋል።"</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"አካባቢዎችን ከሚዲያ ስብስብዎ ማንበብ"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"መተግበሪያው አካባቢዎችን ከሚዲያ ስብስብዎ እንዲያነብብ ያስችለዋል።"</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"ከፊል የጣት አሻራ ተገኝቷል። እባክዎ እንደገና ይሞክሩ።"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ጣት አሻራን መስራት አልተቻለም። እባክዎ እንደገና ይሞክሩ።"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"የጣት አሻራ ዳሳሽ ቆሽሿል። እባክዎ ያጽዱት እና እንደገና ይሞክሩ።"</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> ወደ <b><xliff:g id="LABEL">%2$s</xliff:g></b> ይቀመጥ?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> እና <xliff:g id="TYPE_1">%2$s</xliff:g> ወደ <b><xliff:g id="LABEL">%3$s</xliff:g></b> ይቀመጡ?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>፣ <xliff:g id="TYPE_1">%2$s</xliff:g> እና <xliff:g id="TYPE_2">%3$s</xliff:g> ወደ <b><xliff:g id="LABEL">%4$s</xliff:g></b> ይቀመጡ?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"ወደ <b><xliff:g id="LABEL">%1$s</xliff:g></b> ይዘመን?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"<xliff:g id="TYPE">%1$s</xliff:g> ወደ <b><xliff:g id="LABEL">%2$s</xliff:g></b> ይዘመን?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"<xliff:g id="TYPE_0">%1$s</xliff:g> እና <xliff:g id="TYPE_1">%2$s</xliff:g> ወደ <b><xliff:g id="LABEL">%3$s</xliff:g></b> ይዘመኑ?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"<xliff:g id="TYPE_0">%1$s</xliff:g>፣ <xliff:g id="TYPE_1">%2$s</xliff:g> እና <xliff:g id="TYPE_2">%3$s</xliff:g> ወደ <b><xliff:g id="LABEL">%4$s</xliff:g></b> ይዘመኑ?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"አስቀምጥ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"አይ፣ አመሰግናለሁ"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"አዘምን"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"የይለፍ ቃል"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"አድራሻ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ክሬዲት ካርድ"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 6d5ee11..d46f758 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -312,6 +312,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"أجهزة استشعار الجسم"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"الوصول إلى بيانات المستشعر حول علاماتك الحيوية"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالدخول إلى بيانات المستشعر حول علاماتك الحيوية؟"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"الموسيقى"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"الوصول إلى الموسيقى"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالوصول إلى الموسيقى؟"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"الصور والفيديوهات"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"الوصول إلى صورك وفيديوهاتك"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالوصول إلى صورك وفيديوهاتك؟"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"استرداد محتوى النافذة"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"فحص محتوى نافذة يتم التفاعل معها"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"تشغيل الاستكشاف باللمس"</string>
@@ -506,6 +512,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"للسماح للتطبيق باستدعاء طرق لإضافة نماذج من بصمات الأصابع وحذفها."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"لاستخدام أجهزة بصمة الإصبع"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"للسماح للتطبيق باستخدام أجهزة بصمة الإصبع للمصادقة"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"قراءة مجموعتك الموسيقية"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"للسماح للتطبيق بقراءة مجموعتك الموسيقية."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"تعديل مجموعتك الموسيقية"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"للسماح للتطبيق بتعديل مجموعتك الموسيقية."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"قراءة مجموعة الفيديو التابعة لك"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"للسماح للتطبيق بقراءة مجموعة الفيديوهات التابعة لك."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"تعديل مجموعة الفيديو التابعة لك"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"يسمح للتطبيق بتعديل مجموعة الفيديوهات التابعة لك."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"قراءة مجموعة صورك"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"للسماح للتطبيق بقراءة مجموعة صورك."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"تعديل مجموعة صورك"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"للسماح للتطبيق بتعديل مجموعة صورك."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"قراءة المواقع من مجموعة الوسائط التابعة لك"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"للسماح للتطبيق بقراءة المواقع من مجموعة الوسائط التابعة لك."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"تم اكتشاف بصمة الإصبع بشكل جزئي؛ يرجى إعادة المحاولة."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"تعذرت معالجة بصمة الإصبع. يُرجى إعادة المحاولة."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"جهاز استشعار بصمات الأصابع متسخ، يرجى تنظيفه وإعادة المحاولة."</string>
@@ -2012,8 +2032,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"هل تريد حفظ <xliff:g id="TYPE">%1$s</xliff:g> في <b><xliff:g id="LABEL">%2$s</xliff:g></b>؟"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"هل تريد حفظ <xliff:g id="TYPE_0">%1$s</xliff:g> و<xliff:g id="TYPE_1">%2$s</xliff:g> في <b><xliff:g id="LABEL">%3$s</xliff:g></b>؟"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"هل تريد حفظ <xliff:g id="TYPE_0">%1$s</xliff:g> و<xliff:g id="TYPE_1">%2$s</xliff:g> و<xliff:g id="TYPE_2">%3$s</xliff:g> في <b><xliff:g id="LABEL">%4$s</xliff:g></b>؟"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"هل تريد التعديل إلى <b><xliff:g id="LABEL">%1$s</xliff:g></b>؟"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"هل تريد تعديل <xliff:g id="TYPE">%1$s</xliff:g> إلى <b><xliff:g id="LABEL">%2$s</xliff:g></b>؟"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"هل تريد تعديل <xliff:g id="TYPE_0">%1$s</xliff:g> و<xliff:g id="TYPE_1">%2$s</xliff:g> إلى <b><xliff:g id="LABEL">%3$s</xliff:g></b>؟"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"هل تريد تعديل <xliff:g id="TYPE_0">%1$s</xliff:g> و<xliff:g id="TYPE_1">%2$s</xliff:g> و<xliff:g id="TYPE_2">%3$s</xliff:g> إلى <b><xliff:g id="LABEL">%4$s</xliff:g></b>؟"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"حفظ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"لا، شكرًا"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"تعديل"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"كلمة مرور"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"عنوان"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"بطاقة ائتمان"</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 2f9e444..0e8aa00 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"শৰীৰৰ ছেন্সৰসমূহ"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"আপোনাৰ দেহৰ গুৰুত্বপূৰ্ণ অংগসমূহৰ অৱস্থাৰ বিষয়ে ছেন্সৰৰ ডেটা লাভ কৰিব পাৰে"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ক আপোনাৰ দেহৰ গুৰুত্বপূৰ্ণ অংগসমূহৰ অৱস্থাৰ বিষয়ে ছেন্সৰৰ ডেটা লাভ কৰিবলৈ অনুমতি দিবনে?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ৱিণ্ড\' সমল বিচাৰি উলিয়াওক"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"আপুনি যোগাযোগ কৰি থকা ৱিণ্ড\'খনৰ সমল পৰীক্ষা কৰক।"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"স্পৰ্শৰদ্বাৰা অন্বেষণ কৰাৰ সুবিধা অন কৰক"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"ফিংগাৰপ্ৰিণ্ট টেম্প্লেটসমূহ যোগ কৰা বা মচাৰ পদ্ধতিসমূহ কামত লগাবলৈ নিৰ্দেশ দিবলৈ এপটোক অনুমতি দিয়ে।"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ফিংগাৰপ্ৰিণ্ট হাৰ্ডৱেৰ ব্যৱহাৰ কৰিব পাৰে"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"প্ৰমাণীকৰণৰ বাবে ফিংগাৰপ্ৰিণ্ট হাৰ্ডৱেৰ ব্য়ৱহাৰ কৰিবলৈ এপটোক অনুমতি দিয়ে"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"ফিংগাৰপ্ৰিণ্ট আংশিকভাৱে চিনাক্ত কৰা হৈছে। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক৷"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ফিগাৰপ্ৰিণ্টৰ প্ৰক্ৰিয়া সম্পাদন কৰিবপৰা নগ\'ল। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক৷"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ফিংগাৰপ্ৰিণ্ট ছেন্সৰটো লেতেৰা হৈ আছে। অনুগ্ৰহ কৰি পৰিষ্কাৰ কৰি আকৌ চেষ্টা কৰক।"</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g>ক <b><xliff:g id="LABEL">%2$s</xliff:g></b>ত ছেভ কৰিবনে?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> আৰু <xliff:g id="TYPE_1">%2$s</xliff:g>ক <b><xliff:g id="LABEL">%3$s</xliff:g></b>ত ছেভ কৰিবনে?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, আৰু <xliff:g id="TYPE_2">%3$s</xliff:g>ক <b><xliff:g id="LABEL">%4$s</xliff:g></b>ত ছেভ কৰিবনে?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"ছেভ কৰক"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"নালাগে, ধন্যবাদ"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"পাছৱৰ্ড"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ঠিকনা"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ক্ৰেডিট কাৰ্ড"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 7ddd88c2..6464c61 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Bədən Sensorları"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"Həyati əlamətlər haqqında sensor dataya daxil olun"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tətbiqinə həyati əlamətlər haqqında sensor dataya daxil olmaq icazəsi verilsin?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Musiqi"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"musiqiyə daxil olun"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tətbiqinin musiqiyə daxil olmağına icazə verilsin?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Foto və Videolar"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"foto və videolara daxil olun"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tətbiqinin foto və videolarınıza daxil olmağına icazə verilsin?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Pəncərənin məzmununu əldə edin"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Əlaqədə olduğunuz pəncərənin məzmununu nəzərdən keçirin."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Toxunaraq Kəşf et funksiyasını yandırın"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Proqrama istifadə üçün barmaq izi şablonlarını əlavə etmək və silmək üçün üsullara müraciət etməyə imkan verir."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"barmaq izi avadanlığından istifadə edin"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Proqrama əsilliyi yoxlama üçün barmaq izi avadanlığından istifadə etməyə imkan verir"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"musiqi kolleksiyanızı oxuyun"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Tətbiqin musiqi kolleksiyanızı oxumasına icazə verir."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"musiqi kolleksiyanıza düzəliş edin"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Tətbiqin musiqi kolleksiyanıza düzəliş etməsinə icazə verir."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"video kolleksiyanızı oxuyun"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Tətbiqin video kolleksiyanızı oxumasına icazə verin."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"video kolleksiyanıza düzəliş edin"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Tətbiqin video kolleksiyanıza düzəliş etməsinə icazə verin."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"foto kolleksiyanızı oxuyun"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Tətbiqin foto kolleksiyanızı oxumasına icazə verir."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"foto kolleksiyanıza düzəliş edin"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Tətbiqin foto kolleksiyanıza düzəliş etməsinə icazə verir."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"media kolleksiyanızdan məkanları oxuyun"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Tətbiqin media kolleksiyanızdan məkanları oxumasına icazə verin."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Barmaq qismən müəyyən olundu. Lütfən, yenidən cəhd edin."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Barmaq izi tanınmadı. Lütfən, yenidən cəhd edin."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Barmaq izi sensoru çirklidir. Lütfən, təmizləyin və yenidən cəhd edin."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> <b><xliff:g id="LABEL">%2$s</xliff:g><b> etiketində yadda saxlansın?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> və <xliff:g id="TYPE_1">%2$s</xliff:g> <b><xliff:g id="LABEL">%3$s</xliff:g></b> etiketində yadda saxlansın?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> və <xliff:g id="TYPE_2">%3$s</xliff:g> <b><xliff:g id="LABEL">%4$s</xliff:g></b> etiketində yadda saxlansın?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"<b><xliff:g id="LABEL">%1$s</xliff:g></b> etiketində yenilənsin?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"<xliff:g id="TYPE">%1$s</xliff:g> <b><xliff:g id="LABEL">%2$s</xliff:g><b> etiketində yenilənsin?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"<xliff:g id="TYPE_0">%1$s</xliff:g> və <xliff:g id="TYPE_1">%2$s</xliff:g> <b><xliff:g id="LABEL">%3$s</xliff:g></b> etiketində yenilənsin?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> və <xliff:g id="TYPE_2">%3$s</xliff:g> <b><xliff:g id="LABEL">%4$s</xliff:g></b> etiketində yenilənsin?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Yadda saxlayın"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Xeyr, çox sağ olun"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Yeniləyin"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"parol"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ünvan"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredit kartı"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 6338e69..dcb7e21 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -303,6 +303,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Senzori za telo"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"pristupa podacima senzora o vitalnim funkcijama"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Želite li da omogućite da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>pristupa podacima senzora o vitalnim funkcijama?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"da preuzima sadržaj prozora"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Proverava sadržaj prozora sa kojim ostvarujete interakciju."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"da uključi Istraživanja dodirom"</string>
@@ -497,6 +509,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Dozvoljava aplikaciji da aktivira metode za dodavanje i brisanje šablona otisaka prstiju koji će se koristiti."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"koristi hardver za otiske prstiju"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Dozvoljava aplikaciji da koristi hardver za otiske prstiju radi potvrde autentičnosti"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Otkriven je delimični otisak prsta. Probajte ponovo."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Nije uspela obrada otiska prsta. Probajte ponovo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzor za otiske prstiju je prljav. Očistite ga i pokušajte ponovo."</string>
@@ -1907,8 +1947,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Želite li da sačuvate stavku <xliff:g id="TYPE">%1$s</xliff:g> u: <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Želite li da sačuvate stavke <xliff:g id="TYPE_0">%1$s</xliff:g> i <xliff:g id="TYPE_1">%2$s</xliff:g> u: <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Želite li da sačuvate stavke <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> i <xliff:g id="TYPE_2">%3$s</xliff:g> u: <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Sačuvaj"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, hvala"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"lozinka"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresa"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditna kartica"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index c93fa51..9041156 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -306,6 +306,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Датчыкі цела"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"атрымліваць з датчыка даныя асноўных фізіялагічных паказчыкаў"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Дазволіць праграме <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ да даных з датчыкаў пра вашы асноўныя фізіялагічныя паказчыкі?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Атрымліваць змесціва вакна"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Аналізаваць змесціва актыўнага вакна."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Уключаць Азнаямленне дотыкам"</string>
@@ -500,6 +512,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Дазваляе праграме выкарыстоўваць спосабы дадання і выдалення шаблонаў адбіткаў пальцаў для выкарыстання."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"выкарыстоўваць апаратныя сродкі для адбіткаў пальцаў"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Дазваляе праграме выкарыстоўваць апаратныя сродкі распазнання адбіткаў пальцаў для аўтэнтыфікацыі"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Выяўлена частка адбіткаў пальцаў. Паспрабуйце яшчэ раз."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Не атрымалася апрацаваць адбітак пальца. Паспрабуйце яшчэ раз."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Датчык адбіткаў пальцаў брудны. Ачысціце яго і паспрабуйце яшчэ раз."</string>
@@ -1942,8 +1982,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Захаваць <xliff:g id="TYPE">%1$s</xliff:g> у <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Захаваць <xliff:g id="TYPE_0">%1$s</xliff:g> і <xliff:g id="TYPE_1">%2$s</xliff:g> у <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Захаваць <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> і <xliff:g id="TYPE_2">%3$s</xliff:g> у <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Захаваць"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Не, дзякуй"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"пароль"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"адрас"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"крэдытная картка"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index d05d78c..80c6ceb 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Телесни сензори"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"достъп до сензорните данни за жизнените ви показатели"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Да се разреши ли на <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да осъществява достъп до данните от сензорите за жизнените ви показатели?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Извличане на съдържанието от прозореца"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Инспектиране на съдържанието на прозорец, с който взаимодействате."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Включване на изследването чрез докосване"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Разрешава на приложението да извиква начини за добавяне и изтриване на шаблони за отпечатъци, които да се използват."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"използване на хардуера за отпечатъци"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Разрешава на приложението да използва хардуера за отпечатъци с цел удостоверяване"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Открит е частичен отпечатък. Моля, опитайте отново."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Отпечатъкът не можа да се обработи. Моля, опитайте отново."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Сензорът за отпечатъци е мръсен. Моля, почистете го и опитайте отново."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> да се запази ли в/ъв <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> и <xliff:g id="TYPE_1">%2$s</xliff:g> да се запазят ли в/ъв <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> и <xliff:g id="TYPE_2">%3$s</xliff:g> да се запазят ли в/ъв <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Запазване"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Не, благодаря"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"Паролата"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"Адресът"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"Кредитната карта"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 61232e0..026a759 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"বডি সেন্সরগুলি"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"আপনার অত্যাবশ্যক লক্ষণগুলির সম্পর্কে সেন্সর ডেটা অ্যাক্সেস করে"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-কে সেন্সর থেকে আপনার ভাইটাল সাইনের ডেটা অ্যাক্সেস করতে দেবেন?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"উইন্ডোর কন্টেন্ট পুনরুদ্ধার করে"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"আপনি ইন্টারঅ্যাক্ট করছেন এমন একটি উইন্ডোর সামগ্রীকে সযত্নে নিরীক্ষণ করে৷"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"স্পর্শের মাধ্যমে অন্বেষণ করা চালু করুন"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"ব্যবহার করার জন্য আঙ্গুলের ছাপের টেম্প্লেটগুলি যোগ করা এবং মোছার পদ্ধতিগুলি গ্রহন করতে অ্যাপ্লিকেশানটিতে অমুমতি দেয়৷"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"আঙ্গুলের ছাপ নেওয়ার হার্ডওয়্যার ব্যবহার করুন"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"অনুমোদনের জন্য আঙ্গুলের ছাপ নেওয়ার হার্ডওয়্যার ব্যবহার করতে অ্যাপ্লিকেশানটিতে অনুমতি দেয়"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"আঙ্গুলের ছাপ আংশিক শনাক্ত করা হয়েছে৷ অনুগ্রহ করে আবার চেষ্টা করুন৷"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"আঙ্গুলের ছাপ প্রক্রিয়া করা যায়নি৷ অনুগ্রহ করে আবার চেষ্টা করুন৷"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"আঙ্গুলের ছাপ নেওয়ার সেন্সরটি অপরিস্কার৷ অনুগ্রহ করে পরিষ্কার করে আবার চেষ্টা করুন৷"</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> কে <b><xliff:g id="LABEL">%2$s</xliff:g></b>এ সংরক্ষণ করবেন?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> এবং <xliff:g id="TYPE_1">%2$s</xliff:g> কে <b><xliff:g id="LABEL">%3$s</xliff:g></b> এ সংরক্ষণ করবেন?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, এবং <xliff:g id="TYPE_2">%3$s</xliff:g> কে <b><xliff:g id="LABEL">%4$s</xliff:g></b> এ সংরক্ষণ করবেন?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"সেভ করুন"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"না থাক"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"পাসওয়ার্ড"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ঠিকানা"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ক্রেডিট কার্ড"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index ccf8aa6..049b383 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -303,6 +303,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Tjelesni senzori"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"pristupa podacima senzora o vašim vitalnim funkcijama"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristup senzornim podacima o vašim vitalnim znacima?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Preuzima sadržaj prozora"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Pregleda sadržaj prozora koji trenutno koristite."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Uključi opciju Istraživanje dodirom"</string>
@@ -497,6 +509,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Omogućava aplikaciji da koristi metode za dodavanje i brisanje šablona otisaka prstiju za upotrebu."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"korištenje hardvera za otiske prstiju"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Omogućava aplikaciji da za provjeru vjerodostojnosti koristi hardver za otiske prstiju"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Otkriven je djelomičan otisak prsta. Pokušajte ponovo."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Nije uspjela obrada otiska prsta. Pokušajte ponovo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzor za otisak prsta je prljav. Očistite ga i pokušajte ponovo."</string>
@@ -1909,8 +1949,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Želite li da se <xliff:g id="TYPE">%1$s</xliff:g> sačuva u <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Želite li da se <xliff:g id="TYPE_0">%1$s</xliff:g> i <xliff:g id="TYPE_1">%2$s</xliff:g> sačuvaju u <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Želite li da se <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, i <xliff:g id="TYPE_2">%3$s</xliff:g> sačuvaju <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Sačuvaj"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, hvala"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"lozinka"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresa"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditna kartica"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index da816a1..c75fc74 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Sensors corporals"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"accedir a les dades del sensor sobre els signes vitals"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> accedeixi a les dades del sensor de constants vitals?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperar el contingut de la finestra"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecciona el contingut d\'una finestra amb què estàs interaccionant."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Activar Exploració tàctil"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permet que l\'aplicació invoqui mètodes per afegir i suprimir plantilles d\'empremtes digitals que es puguin fer servir."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Utilitzar el maquinari d\'empremtes digitals"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Permet que l\'aplicació faci servir maquinari d\'empremtes digitals per a l\'autenticació"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"S\'ha detectat una empremta digital parcial. Torna-ho a provar."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No s\'ha pogut processar l\'empremta digital. Torna-ho a provar."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"El sensor d\'empremtes digitals està brut. Neteja\'l i torna-ho a provar."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Vols desar <xliff:g id="TYPE">%1$s</xliff:g> a <xliff:g id="LABEL">%2$s</xliff:g>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Vols desar <xliff:g id="TYPE_0">%1$s</xliff:g> i <xliff:g id="TYPE_1">%2$s</xliff:g> a <xliff:g id="LABEL">%3$s</xliff:g>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Vols desar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> i <xliff:g id="TYPE_2">%3$s</xliff:g> a <xliff:g id="LABEL">%4$s</xliff:g>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Desa"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, gràcies"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"contrasenya"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adreça"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"targeta de crèdit"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 40b5e29..7d9c3c5 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -306,6 +306,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Tělesné senzory"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"přístup k datům ze snímačů vašich životních funkcí"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Povolit aplikaci <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> přístup k údajům ze snímačů vašich životních funkcí?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Načítat obsah oken"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Může prozkoumávat obsah oken, se kterými pracujete."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Zapnout funkci Prozkoumání dotykem"</string>
@@ -500,6 +512,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Umožňuje aplikaci volat metody k přidání a smazání šablon otisků prstů, které budou použity."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"použití hardwaru na čtení otisků prstů"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Umožňuje aplikaci použít k ověření hardware na čtení otisků prstů"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Byla zjištěna jen část otisku prstu. Zkuste to znovu."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Zpracování otisku prstu se nezdařilo. Zkuste to znovu."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzor otisků prstů je znečištěn. Vyčistěte jej a zkuste to znovu."</string>
@@ -1942,8 +1982,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Uložit položku <xliff:g id="TYPE">%1$s</xliff:g> do služby <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Uložit položky <xliff:g id="TYPE_0">%1$s</xliff:g> a <xliff:g id="TYPE_1">%2$s</xliff:g> do služby <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Uložit položky <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> a <xliff:g id="TYPE_2">%3$s</xliff:g> do služby <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Uložit"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, děkuji"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"heslo"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresa"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"platební karta"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 947754f..909cd10 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Kropssensorer"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"få adgang til sensordata om dine livstegn"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Vil du give <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> adgang til sensordata om dine livstegn?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Hente indholdet i vinduet"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Undersøge indholdet i et vindue, du interagerer med."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Aktivere Udforsk ved berøring"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Tillader, at appen kan køre metoder til at tilføje og slette fingeraftryksskabeloner"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"bruge fingeraftrykhardware"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Tillader, at appen kan bruge fingeraftrykhardware til godkendelse"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Der blev registreret et delvist fingeraftryk. Prøv igen."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Fingeraftrykket kunne ikke behandles. Prøv igen."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Sensoren til registrering af fingeraftryk er beskidt. Tør den af, og prøv igen."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Vil du gemme <xliff:g id="TYPE">%1$s</xliff:g> i <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Vil du gemme <xliff:g id="TYPE_0">%1$s</xliff:g> og <xliff:g id="TYPE_1">%2$s</xliff:g> i <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Vil du gemme <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> og <xliff:g id="TYPE_2">%3$s</xliff:g> i <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Gem"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nej tak"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"adgangskode"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresse"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditkort"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 8dc0ba4..e843488 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Körpersensoren"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"auf Sensordaten zu deinen Vitaldaten zugreifen"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> erlauben, auf Sensordaten zu deinen Vitalfunktionen zuzugreifen?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Fensterinhalte abrufen"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Die Inhalte eines Fensters, mit dem du interagierst, werden abgerufen."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"\"Tippen & Entdecken\" aktivieren"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Erlaubt der App, Methoden zum Hinzufügen und Löschen zu verwendender Fingerabdruckvorlagen aufzurufen"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Fingerabdruckhardware verwenden"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Erlaubt der App, Fingerabdruckhardware zur Authentifizierung zu verwenden"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Fingerabdruck teilweise erkannt. Versuche es erneut."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Fingerabdruck konnte nicht verarbeitet werden. Versuche es erneut."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingerabdrucksensor ist verschmutzt. Reinige ihn und versuche es erneut."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> in <b><xliff:g id="LABEL">%2$s</xliff:g></b> speichern?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> und <xliff:g id="TYPE_1">%2$s</xliff:g> in <b><xliff:g id="LABEL">%3$s</xliff:g></b> speichern?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> und <xliff:g id="TYPE_2">%3$s</xliff:g> in <b><xliff:g id="LABEL">%4$s</xliff:g></b> speichern?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Speichern"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nein danke"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"Passwort"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"Adresse"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"Kreditkarte"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index c6acc9e..ef8b072 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Αισθητήρες σώματος"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"πρόσβαση στα δεδομένα αισθητήρα σχετικά με τις ζωτικές ενδείξεις σας"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Να επιτρέπεται στην εφαρμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> να έχει πρόσβαση στα δεδομένα αισθητήρα σχετικά με τις ζωτικές ενδείξεις σας;"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Ανάκτηση του περιεχομένου του παραθύρου"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Έλεγχος του περιεχομένου ενός παραθύρου με το οποίο αλληλεπιδράτε."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Ενεργοποίηση της \"Εξερεύνησης με άγγιγμα\""</string>
@@ -320,7 +332,7 @@
<string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Επιτρέπει στην εφαρμογή να αναπτύξει ή να συμπτύξει τη γραμμή κατάστασης."</string>
<string name="permlab_install_shortcut" msgid="4279070216371564234">"εγκαθιστά συντομεύσεις"</string>
<string name="permdesc_install_shortcut" msgid="8341295916286736996">"Επιτρέπει σε μια εφαρμογή την προσθήκη συντομεύσεων στην Αρχική οθόνη χωρίς την παρέμβαση του χρήστη."</string>
- <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"καταργεί την εγκατάσταση συντομεύσεων"</string>
+ <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"απεγκατάσταση συντομεύσεων"</string>
<string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Επιτρέπει στην εφαρμογή την κατάργηση συντομεύσεων από την Αρχική οθόνη χωρίς την παρέμβαση του χρήστη."</string>
<string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"αναδρομολογεί τις εξερχόμενες κλήσεις"</string>
<string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Επιτρέπει στην εφαρμογή να βλέπει τον αριθμό που καλέσατε κατά τη διάρκεια μιας εξερχόμενης κλήσης με επιλογή ανακατεύθυνσης της κλήσης σε έναν διαφορετικό αριθμό ή διακοπής της κλήσης."</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Επιτρέπει στην εφαρμογή να επικαλείται μεθόδους για την προσθήκη και τη διαγραφή προτύπων μοναδικού χαρακτηριστικού για χρήση."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"χρησιμοποιεί τον εξοπλισμό δακτυλικού αποτυπώματος"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Επιτρέπει στην εφαρμογή να χρησιμοποιεί εξοπλισμό μοναδικού χαρακτηριστικού για έλεγχο ταυτότητας"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Εντοπίστηκε μερικό μοναδικό χαρακτηριστικό. Δοκιμάστε ξανά."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Δεν ήταν δυνατή η επεξεργασία του μοναδικού χαρακτηριστικού. Δοκιμάστε ξανά."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Ο αισθητήρας μοναδικού χαρακτηριστικού δεν είναι καθαρός. Καθαρίστε τον και δοκιμάστε ξανά."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Αποθήκευση <xliff:g id="TYPE">%1$s</xliff:g> σε <b><xliff:g id="LABEL">%2$s</xliff:g></b>;"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Αποθήκευση <xliff:g id="TYPE_0">%1$s</xliff:g> και <xliff:g id="TYPE_1">%2$s</xliff:g> σε <b><xliff:g id="LABEL">%3$s</xliff:g></b>;"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Αποθήκευση <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> και <xliff:g id="TYPE_2">%3$s</xliff:g> σε <b><xliff:g id="LABEL">%4$s</xliff:g></b>;"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Αποθήκευση"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Όχι, ευχαριστώ"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"κωδικός πρόσβασης"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"διεύθυνση"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"πιστωτική κάρτα"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index f70ba3b..19d0916 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Body sensors"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"access sensor data about your vital signs"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access sensor data about your vital signs?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Music"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"access your music"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your music?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Photos & Videos"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"access your photos & videos"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your photos & videos?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Retrieve window content"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspect the content of a window that you\'re interacting with."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Turn on Explore by Touch"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Allows the app to invoke methods to add and delete fingerprint templates for use."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Use fingerprint hardware"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Allows the app to use fingerprint hardware for authentication"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"read your music collection"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Allows the app to read your music collection."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"modify your music collection"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Allows the app to modify your music collection."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"read your video collection"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Allows the app to read your video collection."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"modify your video collection"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Allows the app to modify your video collection."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"read your photo collection"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Allows the app to read your photo collection."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"modify your photo collection"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Allows the app to modify your photo collection."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"read locations from your media collection"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Allows the app to read locations from your media collection."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Partial fingerprint detected. Please try again."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Couldn\'t process fingerprint. Please try again."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingerprint sensor is dirty. Please clean and try again."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Save <xliff:g id="TYPE">%1$s</xliff:g> to <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Save <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Save <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, and <xliff:g id="TYPE_2">%3$s</xliff:g> to <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Update to <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Update <xliff:g id="TYPE">%1$s</xliff:g> to <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Update <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Update <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> and <xliff:g id="TYPE_2">%3$s</xliff:g> to <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, thanks"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 1ab78f1..1e2e081 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Body sensors"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"access sensor data about your vital signs"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access sensor data about your vital signs?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Music"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"access your music"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your music?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Photos & Videos"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"access your photos & videos"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your photos & videos?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Retrieve window content"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspect the content of a window that you\'re interacting with."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Turn on Explore by Touch"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Allows the app to invoke methods to add and delete fingerprint templates for use."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Use fingerprint hardware"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Allows the app to use fingerprint hardware for authentication"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"read your music collection"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Allows the app to read your music collection."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"modify your music collection"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Allows the app to modify your music collection."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"read your video collection"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Allows the app to read your video collection."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"modify your video collection"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Allows the app to modify your video collection."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"read your photo collection"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Allows the app to read your photo collection."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"modify your photo collection"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Allows the app to modify your photo collection."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"read locations from your media collection"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Allows the app to read locations from your media collection."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Partial fingerprint detected. Please try again."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Couldn\'t process fingerprint. Please try again."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingerprint sensor is dirty. Please clean and try again."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Save <xliff:g id="TYPE">%1$s</xliff:g> to <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Save <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Save <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, and <xliff:g id="TYPE_2">%3$s</xliff:g> to <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Update to <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Update <xliff:g id="TYPE">%1$s</xliff:g> to <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Update <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Update <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> and <xliff:g id="TYPE_2">%3$s</xliff:g> to <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, thanks"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index f70ba3b..19d0916 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Body sensors"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"access sensor data about your vital signs"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access sensor data about your vital signs?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Music"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"access your music"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your music?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Photos & Videos"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"access your photos & videos"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your photos & videos?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Retrieve window content"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspect the content of a window that you\'re interacting with."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Turn on Explore by Touch"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Allows the app to invoke methods to add and delete fingerprint templates for use."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Use fingerprint hardware"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Allows the app to use fingerprint hardware for authentication"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"read your music collection"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Allows the app to read your music collection."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"modify your music collection"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Allows the app to modify your music collection."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"read your video collection"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Allows the app to read your video collection."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"modify your video collection"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Allows the app to modify your video collection."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"read your photo collection"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Allows the app to read your photo collection."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"modify your photo collection"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Allows the app to modify your photo collection."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"read locations from your media collection"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Allows the app to read locations from your media collection."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Partial fingerprint detected. Please try again."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Couldn\'t process fingerprint. Please try again."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingerprint sensor is dirty. Please clean and try again."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Save <xliff:g id="TYPE">%1$s</xliff:g> to <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Save <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Save <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, and <xliff:g id="TYPE_2">%3$s</xliff:g> to <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Update to <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Update <xliff:g id="TYPE">%1$s</xliff:g> to <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Update <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Update <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> and <xliff:g id="TYPE_2">%3$s</xliff:g> to <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, thanks"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index f70ba3b..19d0916 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Body sensors"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"access sensor data about your vital signs"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access sensor data about your vital signs?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Music"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"access your music"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your music?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Photos & Videos"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"access your photos & videos"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your photos & videos?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Retrieve window content"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspect the content of a window that you\'re interacting with."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Turn on Explore by Touch"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Allows the app to invoke methods to add and delete fingerprint templates for use."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Use fingerprint hardware"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Allows the app to use fingerprint hardware for authentication"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"read your music collection"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Allows the app to read your music collection."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"modify your music collection"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Allows the app to modify your music collection."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"read your video collection"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Allows the app to read your video collection."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"modify your video collection"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Allows the app to modify your video collection."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"read your photo collection"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Allows the app to read your photo collection."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"modify your photo collection"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Allows the app to modify your photo collection."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"read locations from your media collection"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Allows the app to read locations from your media collection."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Partial fingerprint detected. Please try again."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Couldn\'t process fingerprint. Please try again."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingerprint sensor is dirty. Please clean and try again."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Save <xliff:g id="TYPE">%1$s</xliff:g> to <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Save <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Save <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, and <xliff:g id="TYPE_2">%3$s</xliff:g> to <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Update to <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Update <xliff:g id="TYPE">%1$s</xliff:g> to <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Update <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Update <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> and <xliff:g id="TYPE_2">%3$s</xliff:g> to <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, thanks"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index a4c8615..68bc261 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Body Sensors"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"access sensor data about your vital signs"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access sensor data about your vital signs?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Music"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"access your music"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your music?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Photos & Videos"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"access your photos & videos"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your photos & videos?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Retrieve window content"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspect the content of a window you\'re interacting with."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Turn on Explore by Touch"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Allows the app to invoke methods to add and delete fingerprint templates for use."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"use fingerprint hardware"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Allows the app to use fingerprint hardware for authentication"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"read your music collection"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Allows the app to read your music collection."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"modify your music collection"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Allows the app to modify your music collection."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"read your video collection"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Allows the app to read your video collection."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"modify your video collection"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Allows the app to modify your video collection."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"read your photo collection"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Allows the app to read your photo collection."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"modify your photo collection"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Allows the app to modify your photo collection."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"read locations from your media collection"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Allows the app to read locations from your media collection."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Partial fingerprint detected. Please try again."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Couldn\'t process fingerprint. Please try again."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingerprint sensor is dirty. Please clean and try again."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Save <xliff:g id="TYPE">%1$s</xliff:g> to <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Save <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Save <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, and <xliff:g id="TYPE_2">%3$s</xliff:g> to <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Update to <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Update <xliff:g id="TYPE">%1$s</xliff:g> to <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Update <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Update <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, and <xliff:g id="TYPE_2">%3$s</xliff:g> to <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No thanks"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 2b7c4bf..9969af3 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores corporales"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"acceder a los datos del sensor acerca de tus signos vitales"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"¿Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a los datos del sensor de tus signos vitales?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Música"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"acceder a tu música"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a tu música?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Fotos y videos"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"acceder a tus fotos y videos"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a tus fotos y videos?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperar el contenido de las ventanas"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecciona el contenido de la ventana con la que estés interactuando."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Activar la Exploración táctil"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permite que la aplicación emplee métodos para agregar y eliminar plantillas de huellas digitales para su uso."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Utilizar hardware de huellas digitales"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Permite que la aplicación utilice el hardware de huellas digitales para realizar la autenticación."</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"leer tu colección de música"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Permite que la app lea tu colección de música."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"modificar tu colección de música"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Permite que la app modifique tu colección de música."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"leer tu colección de videos"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Permite que la app lea tu colección de videos."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"modificar tu colección de videos"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Permite que la app modifique tu colección de videos."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"leer tu colección de fotos"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Permite que la app lea tu colección de fotos."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"modificar tu colección de fotos"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Permite que la app modifique tu colección de fotos."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"leer ubicaciones de tu colección de contenido multimedia"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Permite que la app lea las ubicaciones de tu colección de contenido multimedia."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"La huella digital se detectó parcialmente. Vuelve a intentarlo."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No se pudo procesar la huella digital. Vuelve a intentarlo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"El sensor de huellas digitales está sucio. Limpia el sensor y vuelve a intentarlo."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"¿Quieres guardar tu <xliff:g id="TYPE">%1$s</xliff:g> en <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"¿Quieres guardar tu <xliff:g id="TYPE_0">%1$s</xliff:g> y <xliff:g id="TYPE_1">%2$s</xliff:g> en <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"¿Quieres guardar tu <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> y <xliff:g id="TYPE_2">%3$s</xliff:g> en <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"¿Quieres actualizar los datos en <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"¿Quieres actualizar tu <xliff:g id="TYPE">%1$s</xliff:g> en <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"¿Quieres actualizar tu <xliff:g id="TYPE_0">%1$s</xliff:g> y <xliff:g id="TYPE_1">%2$s</xliff:g> en <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"¿Quieres actualizar tu <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, y <xliff:g id="TYPE_2">%3$s</xliff:g> en <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Guardar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, gracias"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Actualizar"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"contraseña"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"dirección"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"tarjeta de crédito"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 36d0eb7..55e0526 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores corporales"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"acceder a datos de sensores de tus constantes vitales"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a los datos del sensor sobre tus constantes vitales?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Comprobar el contenido de la ventana"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecciona el contenido de una ventana con la que estés interactuando."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Activar la exploración táctil"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permite que la aplicación invoque métodos para añadir y eliminar plantillas de huellas digitales y utilizarlas."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"utilizar hardware de huellas digitales"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Permite que la aplicación utilice el hardware de huellas digitales para realizar la autenticación"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Se ha detectado una huella digital parcial. Vuelve a intentarlo."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No se ha podido procesar la huella digital. Vuelve a intentarlo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"El sensor de huellas digitales está sucio. Límpialo y vuelve a intentarlo."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"¿Guardar <xliff:g id="TYPE">%1$s</xliff:g> en <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"¿Guardar <xliff:g id="TYPE_0">%1$s</xliff:g> y <xliff:g id="TYPE_1">%2$s</xliff:g> en <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"¿Guardar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> y <xliff:g id="TYPE_2">%3$s</xliff:g> en <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Guardar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, gracias"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"contraseña"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"dirección"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"tarjeta de crédito"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 1e73bf1..758bf44 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Kehaandurid"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"juurdepääs anduri andmetele teie eluliste näitajate kohta"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Kas lubada rakendusele <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> juurdepääs anduri andmetele teie eluliste näitajate kohta?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Akna sisu toomine"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Kasutatava akna sisu kontrollimine."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Puudutusega sirvimise sisselülitamine"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Võimaldab rakendusel tühistada meetodid kasutatavate sõrmejäljemallide lisamiseks ja kustutamiseks."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"sõrmejälje riistvara kasutamine"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Võimaldab rakendusel autentimiseks kasutada sõrmejälje riistvara"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Tuvastati osaline sõrmejälg. Proovige uuesti."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Sõrmejälge ei õnnestunud töödelda. Proovige uuesti."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Sõrmejäljeandur on must. Puhastage see ja proovige uuesti."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Kas salvestada üksus <xliff:g id="TYPE">%1$s</xliff:g> teenusesse <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Kas salvestada üksused <xliff:g id="TYPE_0">%1$s</xliff:g> ja <xliff:g id="TYPE_1">%2$s</xliff:g> teenusesse <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Kas salvestada üksused <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ja <xliff:g id="TYPE_2">%3$s</xliff:g> teenusesse <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Salvesta"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Tänan, ei"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"parool"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"aadress"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"krediitkaart"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index aa6edaa..567ca18 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -59,7 +59,7 @@
<string name="ClipMmi" msgid="6952821216480289285">"Sarrerako deien identifikazio-zerbitzua"</string>
<string name="ClirMmi" msgid="7784673673446833091">"Irteerako deien identifikazio-zerbitzua"</string>
<string name="ColpMmi" msgid="3065121483740183974">"Konektatutako linearen IDa"</string>
- <string name="ColrMmi" msgid="4996540314421889589">"Konektatutako linearen ID murrizketa"</string>
+ <string name="ColrMmi" msgid="4996540314421889589">"Konektatutako linearen ID murriztapena"</string>
<string name="CfMmi" msgid="5123218989141573515">"Dei-desbideratzea"</string>
<string name="CwMmi" msgid="9129678056795016867">"Deia zain"</string>
<string name="BaMmi" msgid="455193067926770581">"Deien debekuak"</string>
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Gorputz-sentsoreak"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"atzitu bizi-konstanteei buruzko sentsorearen datuak"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Bizi-konstanteei buruzko sentsorearen datuak atzitzea baimendu nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Eskuratu leihoko edukia"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Arakatu irekita daukazun leihoko edukia."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Aktibatu \"Arakatu ukituta\""</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Erreferentzia-gako digitalen txantiloiak gehitzeko eta ezabatzeko metodoei dei egitea baimentzen die aplikazioei."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"erabili erreferentzia-gako digitalen hardwarea"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Autentifikatzeko erreferentzia-gako digitalen hardwarea erabiltzea baimentzen die aplikazioei."</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Hatz-marka digitala ez da osorik hauteman. Saiatu berriro."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Ezin izan da prozesatu hatz-marka. Saiatu berriro."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Hatz-marka digitalen sentsorea zikina dago. Garbi ezazu, eta saiatu berriro."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> <b><xliff:g id="LABEL">%2$s</xliff:g></b> zerbitzuan gorde nahi duzu?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> eta <xliff:g id="TYPE_1">%2$s</xliff:g> <b><xliff:g id="LABEL">%3$s</xliff:g></b> zerbitzuan gorde nahi dituzu?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> eta <xliff:g id="TYPE_2">%3$s</xliff:g> <b><xliff:g id="LABEL">%4$s</xliff:g></b> zerbitzuan gorde nahi dituzu?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Gorde"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ez, eskerrik asko"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"pasahitza"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"helbidea"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditu-txartela"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index d8067f0..b64937c 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"حسگرهای بدن"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"دسترسی به دادههای حسگر در رابطه با علائم حیاتی شما"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"به <b><xliff:g id="APP_NAME">%1$s</xliff:g><b> اجازه داده شود به دادههای حسگر مربوط به علائم حیاتی شما دسترسی پیدا کند؟"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"موسیقی"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"دسترسی به موسیقی شما"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"به <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> اجازه داده شود به موسیقی شما دسترسی پیدا کند؟"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"عکس و ویدیو"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"دسترسی به عکسها و ویدیوهایتان"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"به <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> اجازه داده شود به عکسها و ویدیوهای شما دسترسی پیدا کند؟"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"محتوای پنجره را بازیابی کند"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"محتوای پنجرهای را که درحال تعامل با آن هستید بررسی میکند."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"فعالسازی کاوش لمسی"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"به برنامه امکان میدهد روشهایی را برای افزودن و حذف الگوهای اثر انگشت جهت استفاده، فعال کند."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"استفاده از سختافزار اثر انگشت"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"به برنامه امکان میدهد از سختافزار اثر انگشت برای احراز هویت استفاده کند"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"خواندن مجموعه موسیقی شما"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"به برنامه اجازه میدهد مجموعه موسیقیتان را بخواند."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"تغییر مجموعه موسیقی شما"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"به برنامه اجازه میدهد مجموعه موسیقیتان را تغییر دهد."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"خواندن مجموعه ویدیوی شما"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"به برنامه اجازه میدهد مجموعه ویدیویتان را بخواند."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"تغییر مجموعه ویدیوی شما"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"به برنامه اجازه میدهد مجموعه ویدیویتان را تغییر دهد."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"خواندن مجموعه عکس شما"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"به برنامه اجازه میدهد مجموعه عکستان را بخواند."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"تغییر مجموعه عکس شما"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"به برنامه اجازه میدهد مجموعه عکستان را تغییر دهد."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"خواندن مکانها از مجموعه رسانه شما"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"به برنامه اجازه میدهد مکانها را از مجموعه رسانهتان بخواند."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"بخشی از اثر انگشت شناسایی شد. لطفاً دوباره امتحان کنید."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"اثرانگشت پردازش نشد. لطفاً دوباره امتحان کنید."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"حسگر اثر انگشت کثیف است. لطفاً آن را تمیز کنید و دوباره امتحان نمایید."</string>
@@ -1410,7 +1430,7 @@
<string name="disable_tether_notification_message" msgid="2913366428516852495">"برای جزئیات، با سرپرستتان تماس بگیرید"</string>
<string name="back_button_label" msgid="2300470004503343439">"برگشت"</string>
<string name="next_button_label" msgid="1080555104677992408">"بعدی"</string>
- <string name="skip_button_label" msgid="1275362299471631819">"پرش"</string>
+ <string name="skip_button_label" msgid="1275362299471631819">"رد شدن"</string>
<string name="no_matches" msgid="8129421908915840737">"مورد منطبقی موجود نیست"</string>
<string name="find_on_page" msgid="1946799233822820384">"یافتن در صفحه"</string>
<plurals name="matches_found" formatted="false" msgid="1210884353962081884">
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> در <b><xliff:g id="LABEL">%2$s</xliff:g></b> ذخیره شود؟"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> و <xliff:g id="TYPE_1">%2$s</xliff:g> در <b><xliff:g id="LABEL">%3$s</xliff:g></b> ذخیره شوند؟"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>، <xliff:g id="TYPE_1">%2$s</xliff:g> و <xliff:g id="TYPE_2">%3$s</xliff:g> در <b><xliff:g id="LABEL">%4$s</xliff:g></b> ذخیره شوند؟"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"به <b><xliff:g id="LABEL">%1$s</xliff:g></b> بهروزرسانی شود؟"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"<xliff:g id="TYPE">%1$s</xliff:g> به <b><xliff:g id="LABEL">%2$s</xliff:g></b> بهروزرسانی شود؟"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"<xliff:g id="TYPE_0">%1$s</xliff:g> و <xliff:g id="TYPE_1">%2$s</xliff:g> به <b><xliff:g id="LABEL">%3$s</xliff:g></b> بهروزرسانی شود؟"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"<xliff:g id="TYPE_0">%1$s</xliff:g>، <xliff:g id="TYPE_1">%2$s</xliff:g>، و <xliff:g id="TYPE_2">%3$s</xliff:g> به <b><xliff:g id="LABEL">%4$s</xliff:g></b> بهروزرسانی شود؟"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"ذخیره"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"نه سپاسگزارم"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"بهروزرسانی"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"گذرواژه"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"نشانی"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"کارت اعتباری"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 36a656b0..e13a01f 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Kehon anturit"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"käyttää anturitietoja elintoiminnoistasi"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Saako <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> käyttää anturitietoja elintoiminnoistasi?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Musiikki"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"käyttää musiikkiasi"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Saako <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> käyttää musiikkiasi?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Kuvat ja videot"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"käyttää kuvia ja videoita"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Saako <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> käyttää kuviasi ja videoitasi?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Noutaa ikkunan sisältöä"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Tarkistaa käyttämäsi ikkunan sisältö."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Ottaa kosketuksella tutkimisen käyttöön"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Sallii sovelluksen käyttää menetelmiä, joilla voidaan lisätä tai poistaa sormenjälkimalleja."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"sormenjälkilaitteiston käyttö"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Sallii sovelluksen käyttää sormenjälkilaitteistoa todennukseen."</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"lukea musiikkikokoelmaasi"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Antaa sovelluksen lukea musiikkikokoelmaasi."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"muokata musiikkikokoelmaasi"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Antaa sovelluksen muokata musiikkikokoelmaasi."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"lukea videokokoelmaasi"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Antaa sovelluksen lukea videokokoelmaasi."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"muokata videokokoelmaasi"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Antaa sovelluksen muokata videokokoelmaasi."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"lukea kuvakokoelmaasi"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Antaa sovelluksen lukea kuvakokoelmaasi."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"muokata kuvakokoelmaasi"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Antaa sovelluksen muokata kuvakokoelmaasi."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"lukea mediakokoelmasi sijainteja"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Antaa sovelluksen lukea mediakokoelmasi sijainteja."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Sormenjälki havaittiin vain osittain. Yritä uudelleen."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Sormenjäljen käsittely epäonnistui. Yritä uudelleen."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Sormenjälkitunnistin on likainen. Puhdista tunnistin ja yritä uudelleen."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Tallennetaanko <xliff:g id="TYPE">%1$s</xliff:g> palveluun <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Tallennetaanko <xliff:g id="TYPE_0">%1$s</xliff:g> ja <xliff:g id="TYPE_1">%2$s</xliff:g> palveluun <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Tallennetaanko <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ja <xliff:g id="TYPE_2">%3$s</xliff:g> palveluun <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Muutetaanko tämä palvelussa <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Muutetaanko <xliff:g id="TYPE">%1$s</xliff:g>, jonka <b><xliff:g id="LABEL">%2$s</xliff:g></b> on tallentanut?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Muutetaanko <xliff:g id="TYPE_0">%1$s</xliff:g> ja <xliff:g id="TYPE_1">%2$s</xliff:g>, jotka <b><xliff:g id="LABEL">%3$s</xliff:g></b> on tallentanut?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Muutetaanko <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ja <xliff:g id="TYPE_2">%3$s</xliff:g>, jotka <b><xliff:g id="LABEL">%4$s</xliff:g></b> on tallentanut?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Tallenna"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ei kiitos"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Muuta"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"salasana"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"osoite"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"luottokortti"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index eaa2ba0..fda01a0 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Capteurs corporels"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"accéder aux données des capteurs sur vos signes vitaux"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Autoriser « <xliff:g id="APP_NAME">%1$s</xliff:g> » à accéder aux données des capteurs pour vos signes vitaux?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Musique"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"accéder à votre musique"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à accéder à votre musique?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Photos et vidéos"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"accéder à vos photos et vos vidéos"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à accéder à vos photos et vos videos?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Récupérer le contenu d\'une fenêtre"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecter le contenu d\'une fenêtre avec laquelle vous interagissez."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Activer la fonctionnalité Explorer au toucher"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permet à l\'application de faire appel à des méthodes d\'ajout et de suppression de modèles d\'empreinte digitale que vous pouvez utiliser."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"utiliser le matériel d\'empreinte digitale"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Permet à l\'application d\'utiliser du matériel d\'empreinte digitale pour l\'authentification"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"lire votre collection de musique"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Autoriser l\'application à lire votre collection de musique."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"modifier votre collection de musique"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Autoriser l\'application à modifier votre collection de musique."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"lire votre collection de vidéos"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Autoriser l\'application à lire votre collection de vidéos."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"modifier votre collection de vidéos"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Autoriser l\'application à modifier votre collection de vidéos."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"lire votre collection de photos"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Autoriser l\'application à lire votre collection de photos."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"modifier votre collection de photos"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Autoriser l\'application à modifier votre collection de photos."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"lire les positions indiquées dans votre collection multimédia"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Autoriser l\'application à lire les positions indiquées dans votre collection multimédia."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Empreinte digitale partielle détectée. Veuillez essayer de nouveau."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Impossible de traiter les empreintes digitales. Veuillez essayer de nouveau."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Le capteur d\'empreintes digitales est sale. Veuillez le nettoyer et essayer de nouveau."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Enregistrer <xliff:g id="TYPE">%1$s</xliff:g> dans <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Enregistrer <xliff:g id="TYPE_0">%1$s</xliff:g> et <xliff:g id="TYPE_1">%2$s</xliff:g> dans <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Enregistrer <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> et <xliff:g id="TYPE_2">%3$s</xliff:g> dans <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Mettre à jour vers <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Mettre à jour <xliff:g id="TYPE">%1$s</xliff:g> vers <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Mettre à jour <xliff:g id="TYPE_0">%1$s</xliff:g> et <xliff:g id="TYPE_1">%2$s</xliff:g> vers <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Mettre à jour <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> et <xliff:g id="TYPE_2">%3$s</xliff:g> vers <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Enregistrer"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Non, merci"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Mettre à jour"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"mot de passe"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresse"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"carte de crédit"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 4e15595..94d33db 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Capteurs corporels"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"accéder aux données des capteurs relatives à vos signes vitaux"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Permettre à <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> d\'accéder aux données des capteurs relatives à vos signes vitaux ?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Récupérer le contenu d\'une fenêtre"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecte le contenu d\'une fenêtre avec laquelle vous interagissez."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Activer la fonctionnalité Explorer au toucher"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Autoriser l\'application à invoquer des méthodes pour ajouter et supprimer des modèles d\'empreintes digitales"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Utiliser le matériel d\'empreintes digitales"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Autoriser l\'application à utiliser le matériel d\'empreintes digitales pour l\'authentification"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Empreinte numérique partiellement détectée. Veuillez réessayer."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Impossible de reconnaître l\'empreinte numérique. Veuillez réessayer."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Le lecteur d\'empreintes numériques est sale. Veuillez le nettoyer, puis réessayer."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Enregistrer <xliff:g id="TYPE">%1$s</xliff:g> dans <b><xliff:g id="LABEL">%2$s</xliff:g></b> ?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Enregistrer <xliff:g id="TYPE_0">%1$s</xliff:g> et <xliff:g id="TYPE_1">%2$s</xliff:g> dans <b><xliff:g id="LABEL">%3$s</xliff:g></b> ?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Enregistrer <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> et <xliff:g id="TYPE_2">%3$s</xliff:g> dans <b><xliff:g id="LABEL">%4$s</xliff:g></b> ?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Enregistrer"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Non, merci"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"mot de passe"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresse"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"carte de paiement"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index cf55840..a32a36e 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores corporais"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"acceder aos datos do sensor sobre as túas constantes vitais"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Queres permitir que a aplicación <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda aos datos do sensor sobre as túas constantes vitais?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperar contido da ventá"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecciona o contido dunha ventá coa que estás interactuando."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Activar a exploración táctil"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permite que a aplicación invoque métodos para engadir e eliminar modelos de uso de impresión dixital."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"usar hardware de impresión dixital"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Permite que a aplicación utilice hardware de impresión dixital para a autenticación"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Detectouse unha impresión dixital parcial. Téntao de novo."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Non se puido procesar a impresión dixital. Téntao de novo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"O sensor de impresión dixital está sucio. Límpao e téntao de novo."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Queres gardar <xliff:g id="TYPE">%1$s</xliff:g> en: <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Queres gardar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> en: <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Queres gardar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> en: <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Gardar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Non, grazas"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"contrasinal"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"enderezo"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"tarxeta de crédito"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index d41a923..1cf8892 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"બોડી સેન્સર્સ"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"તમારા મહત્વપૂર્ણ ચિહ્નો વિશે સેન્સર ડેટા ઍક્સેસ કરો"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ને તમારી મહત્વપૂર્ણ સહી વિશેના સેન્સર ડેટાને ઍક્સેસ કરવાની મંજૂરી આપીએ?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"વિંડો કન્ટેન્ટ પુનઃપ્રાપ્ત કરો"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"તમે જેની સાથે ક્રિયા-પ્રતિક્રિયા કરી રહ્યાં છો તે વિંડોનું કન્ટેન્ટ તપાસો."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"સ્પર્શ કરીને શોધખોળ કરવું ચાલુ કરો"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"એપ્લિકેશનને ઉપયોગ માટે ફિંગરપ્રિન્ટ નમૂના ઉમેરવા અને કાઢી નાખવા માટે પદ્ધતિઓની વિનંતી કરવાની મંજૂરી આપે છે."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ફિંગરપ્રિન્ટ હાર્ડવેરનો ઉપયોગ કરો"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"એપ્લિકેશનને પ્રમાણીકરણ માટે ફિંગરપ્રિન્ટ હાર્ડવેરનો ઉપયોગ કરવાની મંજૂરી આપે છે"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"આંશિક ફિંગરપ્રિન્ટ મળી. કૃપા કરીને ફરી પ્રયાસ કરો."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ફિંગરપ્રિન્ટ પ્રક્રિયા કરી શકાઈ નથી. કૃપા કરીને ફરી પ્રયાસ કરો."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ફિંગરપ્રિન્ટ સેન્સર ગંદું છે. કૃપા કરીને સાફ કરો અને ફરી પ્રયાસ કરો."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g>ને <b><xliff:g id="LABEL">%2$s</xliff:g></b>માં સાચવીએ?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> અને <xliff:g id="TYPE_1">%2$s</xliff:g>ને <b><xliff:g id="LABEL">%3$s</xliff:g></b>માં સાચવીએ?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> અને <xliff:g id="TYPE_2">%3$s</xliff:g>ને <b><xliff:g id="LABEL">%4$s</xliff:g></b>માં સાચવીએ?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"સાચવો"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ના, આભાર"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"પાસવર્ડ"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"સરનામું"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ક્રેડિટ કાર્ડ"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 8c7a0d3..a85d6fa 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"शरीर संवेदक"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"अपने महत्वपूर्ण संकेतों के बारे में सेंसर डेटा को ऐक्सेस करें"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को अपने स्वास्थ्य से जुड़ी ज़रूरी जानकारी इस्तेमाल करने की अनुमति देना चाहते हैं?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"विंडो की सामग्री वापस पाएं"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"उस विंडो की सामग्री की जाँच करें, जिसका आप इस्तेमाल कर रहे हैं."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"छूकर, किसी चीज़ से जुड़ी जानकारी सुनने की सुविधा चालू करें"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"उंगली की छाप वाले टेम्पलेट का उपयोग करने के लिए जोड़ने और हटाने हेतु ऐप को विधियां प्रारंभ करने देती है."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"उंगली की छाप के लिए हार्डवेयर का उपयोग करें"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"ऐप के प्रमाणीकरण के लिए उंगली की छाप हार्डवेयर का उपयोग करने देती है"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"आंशिक फ़िंगरप्रिंट की पहचान की गई. कृपया पुनः प्रयास करें."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"फ़िंगरप्रिंट संसाधित नहीं हो सका. कृपया पुन: प्रयास करें."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"फ़िंगरप्रिंट सेंसर गंदा है. कृपया साफ़ करें और फिर कोशिश करें."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> को <b><xliff:g id="LABEL">%2$s</xliff:g></b> में सेव करें?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> और <xliff:g id="TYPE_1">%2$s</xliff:g> को <b><xliff:g id="LABEL">%3$s</xliff:g></b> में सेव करें?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> और <xliff:g id="TYPE_2">%3$s</xliff:g> को <b><xliff:g id="LABEL">%4$s</xliff:g></b> में सेव करें?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"सेव करें"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"नहीं, धन्यवाद"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"पासवर्ड"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"पता"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"क्रेडिट कार्ड"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 3baaf01..f9576e0 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -303,6 +303,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Biometrijski senzori"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"pristupiti podacima senzora o vašim vitalnim znakovima"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Želite li dopustiti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> da pristupa podacima senzora o vašim vitalnim znakovima?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Dohvaćati sadržaj prozora"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Pregledat će sadržaj prozora koji upotrebljavate."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Uključiti značajku Istraži dodirom"</string>
@@ -497,6 +509,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Aplikaciji omogućuje pozivanje načina za dodavanje i brisanje predložaka otisaka prstiju koji će se upotrijebiti."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"upotreba hardvera za čitanje otisaka prstiju"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Aplikaciji omogućuje upotrebu hardvera za čitanje otisaka prstiju radi autentifikacije."</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Otkriven je djelomični otisak prsta. Pokušajte ponovo."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Obrada otiska prsta nije uspjela. Pokušajte ponovo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzor otiska prsta nije čist. Očistite ga i pokušajte ponovo."</string>
@@ -1907,8 +1947,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Želite li da se podatak (<xliff:g id="TYPE">%1$s</xliff:g>) spremi na uslugu <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Želite li da se <xliff:g id="TYPE_0">%1$s</xliff:g> i <xliff:g id="TYPE_1">%2$s</xliff:g> spreme na uslugu <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Želite li da se <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> i <xliff:g id="TYPE_2">%3$s</xliff:g> spreme na uslugu <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Spremi"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, hvala"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"zaporku"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresu"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditnu karticu"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 106f497..f957384 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Testérzékelők"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"az érzékelők által mért, életjelekkel kapcsolatos adatok elérése"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Engedélyezi a(z) <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> számára, hogy hozzáférjen az életjelekkel kapcsolatos szenzoradatokhoz?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Ablaktartalom lekérdezése"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"A használt ablak tartalmának vizsgálata."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Felfedezés érintéssel bekapcsolása"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Lehetővé teszi az alkalmazás számára a használni kívánt ujjlenyomatsablonok hozzáadására és törlésére szolgáló metódusok indítását."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ujjlenyomat-olvasó hardver használata"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Lehetővé teszi az alkalmazás számára az ujjlenyomat-olvasó hardver hitelesítésre való használatát"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"A rendszer az ujjlenyomatnak csak egy részletét érzékelte. Próbálkozzon újra."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Nem sikerült feldolgozni az ujjlenyomatot. Próbálkozzon újra."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Az ujjlenyomat-olvasó koszos. Tisztítsa meg, majd próbálkozzon újra."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Menti a következőt: <xliff:g id="TYPE">%1$s</xliff:g> ide: <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Menti a következőket: <xliff:g id="TYPE_0">%1$s</xliff:g> és <xliff:g id="TYPE_1">%2$s</xliff:g> ide: <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Menti a következőket: <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> és <xliff:g id="TYPE_2">%3$s</xliff:g> ide: <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Mentés"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nem, köszönöm"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"jelszó"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"cím"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"hitelkártya"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 96a03bf..978e661 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Մարմնի սենսորներ"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"օգտագործել սենսորների տվյալները ձեր օրգանիզմի վիճակի մասին"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Թույլ տա՞լ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> հավելվածին սենսորից ստանալ ձեր կենսագործունեության հիմնական տվյալները:"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Առբերել պատուհանի բովանդակությունը"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Վերլուծել գործող պատուհանի բովանդակությունը"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Միացնել Հպման միջոցով հետազոտումը"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Հավելվածին թույլ է տալիս կատարել այնպիսի գործառույթներ, որոնց միջոցով կարելի է օգտագործման համար ավելացնել և հեռացնել մատնահետքերի նմուշներ:"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"օգտագործել մատնահետքերի գրանցման սարքը"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Հավելվածին թույլ է տալիս նույնականացման համար օգտագործել մատնահետքերի գրանցման սարքը"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Մատնահետքը հայտնաբերվել է մասամբ: Փորձեք նորից:"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Չհաջողվեց մշակել մատնահետքը: Նորից փորձեք:"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Մատնահետքերի սենսորն աղտոտված է: Մաքրեք այն և փորձեք նորից:"</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Պահե՞լ <xliff:g id="TYPE">%1$s</xliff:g>ը <b><xliff:g id="LABEL">%2$s</xliff:g></b> ծառայությունում"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Պահե՞լ <xliff:g id="TYPE_0">%1$s</xliff:g>ն ու <xliff:g id="TYPE_1">%2$s</xliff:g>ը <b><xliff:g id="LABEL">%3$s</xliff:g></b> ծառայությունում"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Պահե՞լ <xliff:g id="TYPE_0">%1$s</xliff:g>ը, <xliff:g id="TYPE_1">%2$s</xliff:g>ն ու <xliff:g id="TYPE_2">%3$s</xliff:g>ը <b><xliff:g id="LABEL">%4$s</xliff:g></b> ծառայությունում"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Պահել"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ոչ"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"գաղտնաբառ"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"հասցե"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"վարկային քարտ"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 5bc03cd..7ba8e2c 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Sensor Tubuh"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"mengakses data sensor tentang tanda-tanda vital"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Izinkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengakses data sensor tentang tanda-tanda vital Anda?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Mengambil konten jendela"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Memeriksa konten jendela tempat Anda berinteraksi."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Mengaktifkan Jelajahi dengan Sentuhan"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Mengizinkan aplikasi memanggil metode untuk menambahkan dan menghapus template sidik jari untuk digunakan."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"gunakan hardware sidik jari"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Mengizinkan aplikasi untuk menggunakan hardware sidik jari untuk otentikasi"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Sebagian sidik jari terdeteksi. Coba lagi."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Tidak dapat memproses sidik jari. Coba lagi."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Sensor sidik jari kotor. Bersihkan dan coba lagi."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Simpan <xliff:g id="TYPE">%1$s</xliff:g> ke <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Simpan <xliff:g id="TYPE_0">%1$s</xliff:g> dan <xliff:g id="TYPE_1">%2$s</xliff:g> ke <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Simpan <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, dan <xliff:g id="TYPE_2">%3$s</xliff:g> ke <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Simpan"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Lain kali"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"sandi"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"alamat"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kartu kredit"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index a915202..a2c79c0 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Líkamsskynjarar"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"aðgangur að skynjaragögnum yfir lífsmörk þín"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Viltu veita <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aðgang að skynjaragögnum yfir lífsmörk þín?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Sækja innihald glugga"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Kanna innihald glugga sem þú ert að nota."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Kveikja á snertikönnun"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Gerir forritinu kleift að beita aðferðum til að bæta við og eyða fingrafarasniðmátum til notkunar."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"nota fingrafarabúnað"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Leyfir forritinu að nota fingrafarabúnað til auðkenningar"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Hluti fingrafars greindist. Reyndu aftur."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Ekki var hægt að vinna úr fingrafarinu. Reyndu aftur."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingrafaraskynjarinn er óhreinn. Hreinsaðu hann og reyndu aftur."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Vista <xliff:g id="TYPE">%1$s</xliff:g> á <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Vista <xliff:g id="TYPE_0">%1$s</xliff:g> og <xliff:g id="TYPE_1">%2$s</xliff:g> á <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Vista <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> og <xliff:g id="TYPE_2">%3$s</xliff:g> á <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Vista"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nei, takk"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"aðgangsorð"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"heimilisfang"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditkort"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index de0b528..a7c1ae2 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Sensori per il corpo"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"accedere ai dati dei sensori relativi ai tuoi parametri vitali"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Consentire a <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere ai dati dei sensori relativi ai parametri vitali?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Musica"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"Accesso alla tua musica"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Vuoi consentire all\'app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere alla tua musica?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Foto e video"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"Accesso alle tue foto e ai tuoi video"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Vuoi consentire all\'app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere alle tue foto e ai tuoi video?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperare contenuti della finestra"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Esaminare i contenuti di una finestra con cui interagisci."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Attivare Esplora al tocco"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Consente all\'app di richiamare metodi per aggiungere e rimuovere modelli di impronte digitali da utilizzare."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"utilizzo di hardware per il riconoscimento delle impronte digitali"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Consente all\'app di utilizzare l\'hardware per il riconoscimento delle impronte digitali per eseguire l\'autenticazione"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"Lettura della tua raccolta musicale"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Consente all\'app di leggere la tua raccolta musicale."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"Modifica della tua raccolta musicale"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Consente all\'app di modificare la tua raccolta musicale."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"Lettura della tua raccolta di video"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Consente all\'app di leggere la tua raccolta di video."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"Modifica della tua raccolta di video"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Consente all\'app di modificare la tua raccolta di video."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"Lettura della tua raccolta di foto"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Consente all\'app di leggere la tua raccolta di foto."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"Modifica della tua raccolta di foto"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Consente all\'app di modificare la tua raccolta di foto."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"Lettura delle posizioni dalla tua raccolta multimediale"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Consente all\'app di leggere le posizioni dalla tua raccolta multimediale."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Rilevata impronta digitale parziale. Riprova."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Impossibile elaborare l\'impronta digitale. Riprova."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Il sensore di impronte digitali è sporco. Puliscilo e riprova."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Salvare <xliff:g id="TYPE">%1$s</xliff:g> in <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Salvare <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> in <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Salvare <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> in <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Vuoi eseguire l\'aggiornamento a <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Vuoi eseguire l\'aggiornamento di <xliff:g id="TYPE">%1$s</xliff:g> a <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Vuoi eseguire l\'aggiornamento di <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> a <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Vuoi eseguire l\'aggiornamento di <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> a <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Salva"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, grazie"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Aggiorna"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"indirizzo"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"carta di credito"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 0c0e0ab..60eb471 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -306,6 +306,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"חיישני גוף"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"גישה אל נתוני חיישנים של הסימנים החיוניים שלך"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"לתת לאפליקציה <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> הרשאת גישה לנתוני חיישנים העוקבים אחר הסימנים החיוניים שלך?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"אחזור תוכן של חלון"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"בדוק את התוכן של חלון שאיתו אתה מבצע אינטראקציה."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"הפעלה של \'גילוי באמצעות מגע\'"</string>
@@ -500,6 +512,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"מאפשר לאפליקציה להפעיל שיטות להוספה ומחיקה של תבניות טביעות אצבעות שבהן ייעשה שימוש."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"חומרה של טביעות אצבעות"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"מאפשר לאפליקציה להשתמש בחומרה של טביעות אצבעות לצורך אימות"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"זוהתה טביעת אצבע חלקית. נסה שוב."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"לא ניתן היה לעבד את טביעת האצבע. נסה שוב."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"החיישן של טביעות האצבעות מלוכלך. נקה אותו ונסה שוב."</string>
@@ -1942,8 +1982,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"האם לשמור <xliff:g id="TYPE">%1$s</xliff:g> בשירות <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"האם לשמור <xliff:g id="TYPE_0">%1$s</xliff:g> ו<xliff:g id="TYPE_1">%2$s</xliff:g> בשירות <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"האם לשמור <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ו<xliff:g id="TYPE_2">%3$s</xliff:g> בשירות <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"שמירה"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"לא, תודה"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"סיסמה"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"כתובת"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"כרטיס אשראי"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 00d1b5d..ec2ada4 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"ボディーセンサー"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"バイタルサインに関するセンサーデータへのアクセス"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"バイタルサインに関するセンサーデータへのアクセスを <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可しますか?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"音楽"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"音楽へのアクセス"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"音楽へのアクセスを <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可しますか?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"写真と動画"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"写真と動画へのアクセス"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"写真と動画へのアクセスを <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可しますか?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ウィンドウコンテンツの取得"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ユーザーがアクセスしているウィンドウのコンテンツを検査します。"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"タッチガイドの有効化"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"使用する指紋テンプレートの追加や削除を行う方法の呼び出しをアプリに許可します。"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"指紋ハードウェアの使用"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"指紋ハードウェアを認証に使用することをアプリに許可します"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"音楽コレクションの読み取り"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"音楽コレクションの読み取りをアプリに許可します。"</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"音楽コレクションの変更"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"音楽コレクションの変更をアプリに許可します。"</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"動画コレクションの読み取り"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"動画コレクションの読み取りをアプリに許可します。"</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"動画コレクションの変更"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"動画コレクションの変更をアプリに許可します。"</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"写真コレクションの読み取り"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"写真コレクションの読み取りをアプリに許可します。"</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"写真コレクションの変更"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"写真コレクションの変更をアプリに許可します。"</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"メディア コレクションの位置情報の読み取り"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"メディア コレクションの位置情報の読み取りをアプリに許可します。"</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"指紋を一部しか検出できませんでした。もう一度お試しください。"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"指紋を処理できませんでした。もう一度お試しください。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"指紋認証センサーに汚れがあります。汚れを落としてもう一度お試しください。"</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g>を <b><xliff:g id="LABEL">%2$s</xliff:g></b> に保存しますか?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g>、<xliff:g id="TYPE_1">%2$s</xliff:g>を <b><xliff:g id="LABEL">%3$s</xliff:g></b> に保存しますか?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>、<xliff:g id="TYPE_1">%2$s</xliff:g>、<xliff:g id="TYPE_2">%3$s</xliff:g>を <b><xliff:g id="LABEL">%4$s</xliff:g></b> に保存しますか?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"<b><xliff:g id="LABEL">%1$s</xliff:g></b> に更新しますか?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"<xliff:g id="TYPE">%1$s</xliff:g>を <b><xliff:g id="LABEL">%2$s</xliff:g></b> に更新しますか?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"<xliff:g id="TYPE_0">%1$s</xliff:g>と<xliff:g id="TYPE_1">%2$s</xliff:g>を <b><xliff:g id="LABEL">%3$s</xliff:g></b> に更新しますか?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"<xliff:g id="TYPE_0">%1$s</xliff:g>、<xliff:g id="TYPE_1">%2$s</xliff:g>、<xliff:g id="TYPE_2">%3$s</xliff:g>を <b><xliff:g id="LABEL">%4$s</xliff:g></b> に更新しますか?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"はい"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"いいえ"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"更新"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"パスワード"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"住所"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"クレジット カード"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index ab65348..e728762 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"სხეულის სენსორები"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"თქვენი სასიცოცხლო ფუნქციების შესახებ სენსორის მონაცემებზე წვდომა"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"გსურთ, მიანიჭოთ <b><xliff:g id="APP_NAME">%1$s</xliff:g>-ს</b> თქვენი სასიცოცხლო ფუნქციების შესახებ სენსორის მონაცემებზე წვდომის ნებართვა?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ფანჯრის კონტენტის მოძიება"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"იმ ფანჯრის კონტენტის შემოწმება, რომელშიც მუშაობთ."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"„შეხებით აღმოჩენის“ ჩართვა"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"საშუალებას აძლევს აპლიკაციას დაამატოს ან ამოშალოს გამოსაყენებელი თითის ანაბეჭდის ნიმუშები,"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"თითის ანაბეჭდის აპარატის გამოყენება"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"საშუალებას აძლევს აპლიკაციას გამოიყენოს ავტენთიფიკაციისათვის თითის ანაბეჭდის აპარატი"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"აღმოჩენილია თითის ნაწილობრივი ანაბეჭდი. გთხოვთ, სცადოთ ხელახლა."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"თითის ანაბეჭდი ვერ მუშავდება. გთხოვთ, სცადოთ ხელახლა."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"თითის ანაბეჭდის სენსორი დაბინძურებულია. გთხოვთ, გაასუფთაოთ და სცადოთ ხელახლა."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"გსურთ, შეინახოთ <xliff:g id="TYPE">%1$s</xliff:g> <b><xliff:g id="LABEL">%2$s</xliff:g>-ში</b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"გსურთ, შეინახოთ <xliff:g id="TYPE_0">%1$s</xliff:g> და <xliff:g id="TYPE_1">%2$s</xliff:g> <b><xliff:g id="LABEL">%3$s</xliff:g>-ში</b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"გსურთ, შეინახოთ <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, და <xliff:g id="TYPE_2">%3$s</xliff:g> <b><xliff:g id="LABEL">%4$s</xliff:g>-ში</b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"შენახვა"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"არა, გმადლობთ"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"პაროლი"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"მისამართი"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"საკრედიტო ბარათი"</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index 3d4749f..2e3ba64 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Дене датчиктері"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"ағза күйінің көрсеткіштері туралы сенсор деректеріне қатынасу"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасына негізгі физиологиялық көрсеткіштерді көрсететін сенсорлық деректерді пайдалануға рұқсат берілсін бе?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Терезе мазмұнын оқып отыру"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Ашық тұрған терезе мазмұнын тексеру."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Explore by Touch функциясын қосу"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Қолданбаға пайдаланатын саусақ ізі үлгілерін қосу және жою әдістерін шақыруға мүмкіндік береді."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"саусақ ізі жабдығын пайдалану"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Қолданбаға аутентификацияалу үшін саусақ ізі жабдығын пайдалануға мүмкіндік береді"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Саусақ ізі ішінара анықталды. Әрекетті қайталаңыз."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Саусақ ізін өңдеу мүмкін емес. Әрекетті қайталаңыз."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Саусақ ізі сенсоры лас. Тазалап, әрекетті қайталаңыз."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> \"<xliff:g id="LABEL">%2$s</xliff:g>\" қызметінде сақталсын ба?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> және <xliff:g id="TYPE_1">%2$s</xliff:g> \"<xliff:g id="LABEL">%3$s</xliff:g>\" қызметінде сақталсын ба?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> және <xliff:g id="TYPE_2">%3$s</xliff:g> \"<xliff:g id="LABEL">%4$s</xliff:g>\" қызметінде сақталсын ба?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Сақтау"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Жоқ, рақмет"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"құпия сөз"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"мекенжай"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"несие картасы"</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index d65e886..6e2d41b 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"ឧបករណ៍ចាប់សញ្ញារាងកាយ"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"ចូលដំណើរការទិន្នន័យឧបករណ៍ចាប់សញ្ញាអំពីស្ថានភាពសុខភាពរបស់អ្នក"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"អនុញ្ញាតឱ្យ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ចូលប្រើទិន្នន័យឧបករណ៍ចាប់សញ្ញាអំពីស្ថានភាពសុខភាពរបស់អ្នក?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ទាញយកខ្លឹមសារវិនដូ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ពិនិត្យខ្លឹមសារវិនដូដែលអ្នកកំពុងទាក់ទងជាមួយ។"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"បើកការរកមើលដោយប៉ះ"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"អនុញ្ញាតឲ្យកម្មវិធីប្រើវិធីសាស្ត្របន្ថែម និងលុបពុម្ពម្រាមដៃសម្រាប់ប្រើប្រាស់។"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ប្រើផ្នែករឹងស្នាមម្រាមដៃ"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"អនុញ្ញាតឲ្យកម្មវិធីប្រើផ្នែករឹងស្នាមម្រាមដៃសម្រាប់ការផ្ទៀងផ្ទាត់"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"បានផ្តិតយកស្នាមម្រាមដៃមិនពេញលក្ខណៈ។ សូមព្យាយាមម្តងទៀត។"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"មិនអាចដំណើរការស្នាមម្រាមដៃបានទេ។ សូមព្យាយាមម្តងទៀត។"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ឧបករណ៍ផ្តិតម្រាមដៃប្រលាក់ហើយ។ សូមសម្អាត ហើយព្យាយាមម្តងទៀត។"</string>
@@ -1874,8 +1914,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"រក្សាទុក <xliff:g id="TYPE">%1$s</xliff:g> ទៅក្នុង <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"រក្សាទុក <xliff:g id="TYPE_0">%1$s</xliff:g> និង <xliff:g id="TYPE_1">%2$s</xliff:g> ទៅក្នុង <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"រក្សាទុក <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, និង <xliff:g id="TYPE_2">%3$s</xliff:g> ទៅក្នុង <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"រក្សាទុក"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ទេ អរគុណ"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"ពាក្យសម្ងាត់"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"អាសយដ្ឋាន"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"បណ្ណឥណទាន"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index c28e8e8..e99d53a 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"ದೇಹ ಸೆನ್ಸರ್ಗಳು"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"ನಿಮ್ಮ ಮುಖ್ಯ ಲಕ್ಷಣಗಳ ಕುರಿತು ಸೆನ್ಸಾರ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"ನಿಮ್ಮ ಮುಖ್ಯ ಲಕ್ಷಣಗಳ ಕುರಿತು ಸೆನ್ಸರ್ ಡೇಟಾವನ್ನು <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ವಿಂಡೋ ವಿಷಯವನ್ನು ಹಿಂಪಡೆಯುತ್ತದೆ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ನೀವು ಬಳಸುತ್ತಿರುವ ವಿಂಡೋದ ವಿಷಯ ಪರೀಕ್ಷಿಸುತ್ತದೆ."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"ಸ್ಪರ್ಶ-ಎಕ್ಸ್ಪ್ಲೋರ್ ಆನ್ ಮಾಡುತ್ತದೆ"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"ಬಳಕೆಗೆ ಬೆರಳಚ್ಚು ಟೆಂಪ್ಲೇಟ್ಗಳನ್ನು ಸೇರಿಸಲು ಮತ್ತು ಅಳಿಸಲು ವಿಧಾನಗಳನ್ನು ಮನವಿ ಮಾಡಲು ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ಬೆರಳಚ್ಚು ಹಾರ್ಡ್ವೇರ್ ಬಳಸಿ"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"ಪ್ರಮಾಣೀಕರಣಕ್ಕಾಗಿ ಬೆರಳಚ್ಚು ಹಾರ್ಡ್ವೇರ್ ಬಳಸಲು ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"ಭಾಗಶಃ ಬೆರಳಚ್ಚು ಪತ್ತೆಯಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ಬೆರಳಚ್ಚು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ಬೆರಳಚ್ಚು ಸೆನ್ಸಾರ್ ಕೊಳೆಯಾಗಿದೆ. ದಯವಿಟ್ಟು ಅದನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> ಅನ್ನು <b><xliff:g id="LABEL">%2$s</xliff:g></b>ನಲ್ಲಿ ಉಳಿಸುವುದೇ?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> ಹಾಗೂ <xliff:g id="TYPE_1">%2$s</xliff:g> ಅನ್ನು <b><xliff:g id="LABEL">%3$s</xliff:g></b>ನಲ್ಲಿ ಉಳಿಸುವುದೇ?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, ಹಾಗೂ <xliff:g id="TYPE_2">%3$s</xliff:g> ಅನ್ನು <b><xliff:g id="LABEL">%4$s</xliff:g></b>ನಲ್ಲಿ ಉಳಿಸುವುದೇ?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"ಉಳಿಸಿ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ಬೇಡ"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"ಪಾಸ್ವರ್ಡ್"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ವಿಳಾಸ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 076b65f..89e7269 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"인체 감지 센서"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"생체 신호에 관한 센서 데이터에 액세스"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>에서 생체 신호에 관한 센서 데이터에 액세스하도록 허용하시겠습니까?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"창 콘텐츠 가져오기"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"상호작용 중인 창의 콘텐츠를 검사합니다."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"터치하여 탐색 사용"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"사용할 지문 템플릿의 추가 및 삭제 메소드를 앱에서 실행하도록 허용합니다."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"지문 하드웨어 사용"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"앱에서 지문 하드웨어를 인증에 사용하도록 허용합니다."</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"지문이 일부만 인식되었습니다. 다시 시도해 주세요."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"지문을 인식할 수 없습니다. 다시 시도해 주세요."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"지문 센서를 깨끗이 닦고 다시 시도하세요."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g>을(를) <b><xliff:g id="LABEL">%2$s</xliff:g></b>에 저장하시겠습니까?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> 및 <xliff:g id="TYPE_1">%2$s</xliff:g>을(를) <b><xliff:g id="LABEL">%3$s</xliff:g></b>에 저장하시겠습니까?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, <xliff:g id="TYPE_2">%3$s</xliff:g>을(를) <b><xliff:g id="LABEL">%4$s</xliff:g></b>에 저장하시겠습니까?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"저장"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"사용 안함"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"비밀번호"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"주소"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"신용카드"</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index a75a00c..55a721e 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Дене сенсорлору"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"организмдин абалына көз салган сенсордун дайындарына мүмкүнчүлүк алуу"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> колдонмосуна организмдин абалына көз салган сенсордун дайындарын пайдаланууга уруксат берилсинби?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Терезедеги мазмунду алып турат"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Учурда ачылып турган терезедеги маалыматты талдайт."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"\"Сыйпалап изилдөө\" мүмкүнчүлүгүн иштетет"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Колдонмого пайдалануу үчүн манжа изинин үлгүлөрүн кошуу жана жок кылуу мүмкүндүгүн берет."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"манжа изинин аппараттык камсыздоосун колдонуу"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Колдонмого аныктыгын текшерүү үчүн манжа изинин аппараттык камсыздоосун пайдалануу мүмкүндүгүн берет"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Манжа изи жарым-жартылай аныкталды. Кайра аракет кылыңыз."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Манжа изи иштелбей койду. Кайра аракет кылыңыз."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Манжа изинин сенсору кирдеп калган. Тазалап, кайра аракет кылыңыз."</string>
@@ -1874,8 +1914,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> <b><xliff:g id="LABEL">%2$s</xliff:g></b> кызматында сакталсынбы?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> жана <xliff:g id="TYPE_1">%2$s</xliff:g> <b><xliff:g id="LABEL">%3$s</xliff:g></b> кызматында сакталсынбы?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> жана <xliff:g id="TYPE_2">%3$s</xliff:g> <b><xliff:g id="LABEL">%4$s</xliff:g></b> кызматында сакталсынбы?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Сактоо"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Жок, рахмат"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"сырсөз"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"дарек"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"насыя картасы"</string>
diff --git a/core/res/res/values-land/dimens_package_installer.xml b/core/res/res/values-land/dimens_permission_controller.xml
similarity index 100%
rename from core/res/res/values-land/dimens_package_installer.xml
rename to core/res/res/values-land/dimens_permission_controller.xml
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index ef2cede..24cef03 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"ເຊັນເຊີຮ່າງກາຍ"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"ເຂົ້າຫາຂໍ້ມູນເຊັນເຊີກ່ຽວກັບສັນຍານຊີບຂອງທ່ານ"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"ອະນຸຍາດ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ໃຫ້ເຂົ້າເຖິງຂໍ້ມູນເຊັນເຊີກ່ຽວກັບສັນຍານຊີບຂອງທ່ານບໍ?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ດຶງຂໍ້ມູນເນື້ອຫາໃນໜ້າຈໍ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ກວດກາເນື້ອຫາຂອງໜ້າຈໍທີ່ທ່ານກຳລັງມີປະຕິສຳພັນນຳ."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"ເປີດໃຊ້ \"ການສຳຫຼວດໂດຍສຳຜັດ\""</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"ອະນຸຍາດໃຫ້ແອັບເຮັດໃຫ້ວິທີການຕ່າງໆເພີ່ມ ແລະລຶບແມ່ແບບລາຍນີ້ວມືສຳລັບການໃຊ້."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ໃຊ້ຮາດແວລາຍນີ້ວມື"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"ອະນຸຍາດໃຫ້ແອັບນຳໃຊ້ຮາດແວລາຍນີ້ວມືສຳລັບການຮັບຮອງ"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"ກວດພົບລາຍນີ້ວມືບາງສ່ວນແລ້ວ. ກະລຸນາລອງໃໝ່ອີກ."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ບໍ່ສາມາດດຳເນີນການລາຍນີ້ວມືໄດ້. ກະລຸນາລອງໃໝ່ອີກ."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ເຊັນເຊີລາຍນີ້ວມືເປື້ອນ. ກະລຸນາທຳຄວາມສະອາດ ແລະລອງໃໝ່ອີກ."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"ບັນທຶກ <xliff:g id="TYPE">%1$s</xliff:g> ໃສ່ <b><xliff:g id="LABEL">%2$s</xliff:g></b> ບໍ?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"ບັນທຶກ <xliff:g id="TYPE_0">%1$s</xliff:g> ແລະ <xliff:g id="TYPE_1">%2$s</xliff:g> ໃສ່ <b><xliff:g id="LABEL">%3$s</xliff:g></b> ບໍ?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"ບັນທຶກ <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ແລະ <xliff:g id="TYPE_2">%3$s</xliff:g> ໃສ່ <b><xliff:g id="LABEL">%4$s</xliff:g></b> ບໍ?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"ບັນທຶກ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ບໍ່, ຂອບໃຈ"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"ລະຫັດຜ່ານ"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ທີ່ຢູ່"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ບັດເຄຣດິດ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index e72b1a9..c61c30f 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -306,6 +306,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Kūno jutikliai"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"pasiekti jutiklių duomenis apie gyvybinius ženklus"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Suteikti <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> galimybę pasiekti jutiklių duomenis apie gyvybinius ženklus?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Gauti lango turinį"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Tikrinti lango, su kuriuo sąveikaujate, turinį."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Įjungti „Naršyti paliečiant“"</string>
@@ -500,6 +512,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Leidžiama programai aktyvinti metodus, norint pridėti ir ištrinti naudojamus kontrolinių kodų šablonus."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"naudoti kontrolinio kodo aparatinę įrangą"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Leidžiama programai naudoti kontrolinio kodo aparatinę įrangą tapatybei nustatyti"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Aptiktas dalinis kontrolinis kodas. Bandykite dar kartą."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Nepavyko apdoroti kontrolinio kodo. Bandykite dar kartą."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Kontrolinio kodo jutiklis purvinas. Nuvalykite ir bandykite dar kartą."</string>
@@ -1942,8 +1982,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Išsaugoti <xliff:g id="TYPE">%1$s</xliff:g> sistemoje <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Išsaugoti <xliff:g id="TYPE_0">%1$s</xliff:g> ir <xliff:g id="TYPE_1">%2$s</xliff:g> sistemoje <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Išsaugoti <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ir <xliff:g id="TYPE_2">%3$s</xliff:g> sistemoje <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Išsaugoti"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, ačiū"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"slaptažodį"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresą"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredito kortelę"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index a5116e4..ea7140b 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -303,6 +303,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Ķermeņa sensori"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"piekļūt sensoru datiem par jūsu veselības rādījumiem"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Vai atļaut lietotnei <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> piekļūt sensoru uztvertajiem veselības rādījumiem?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Izgūt loga saturu."</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Skatīt tā loga saturu, ar kuru mijiedarbojaties."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Aktivizēt funkciju “Pārlūkot pieskaroties”."</string>
@@ -497,6 +509,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Atļauj lietotnei izsaukt metodes izmantojamo pirkstu nospiedumu veidņu pievienošanai un dzēšanai."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"lietot pirkstu nospiedumu aparatūru"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Atļauj lietotnei izmantot pirkstu nospiedumu aparatūru autentificēšanai."</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Noteikts daļējs pirksta nospiedums. Lūdzu, mēģiniet vēlreiz."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Nevarēja apstrādāt pirksta nospiedumu. Lūdzu, mēģiniet vēlreiz."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Pirkstu nospiedumu sensors ir netīrs. Lūdzu, notīriet to un mēģiniet vēlreiz."</string>
@@ -1907,8 +1947,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Vai saglabāt vienumu “<xliff:g id="TYPE">%1$s</xliff:g>” pakalpojumā <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Vai saglabāt vienumus “<xliff:g id="TYPE_0">%1$s</xliff:g>” un “<xliff:g id="TYPE_1">%2$s</xliff:g>” pakalpojumā <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Vai saglabāt vienumus “<xliff:g id="TYPE_0">%1$s</xliff:g>”, “<xliff:g id="TYPE_1">%2$s</xliff:g>” un “<xliff:g id="TYPE_2">%3$s</xliff:g>” pakalpojumā <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Saglabāt"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nē, paldies"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"paroli"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresi"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredītkartes informāciju"</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 47f388d..b2beb3a 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Телесни сензори"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"пристапува до податоците од сензорите за виталните знаци"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Дали да се дозволи <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да пристапува до податоците на сензорот за витални знаци?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Музика"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"пристапува до музиката"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Дали да се дозволи <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да пристапува до музиката?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Фотографии и видеа"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"пристапува до фотографиите и видеата"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Дали да се дозволи <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да пристапува до фотографиите и видеата?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Преземе содржина на прозорец"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Ја следи содржината на прозорецот со кој се комуницира."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Вклучи „Истражувај со допир“"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Дозволува апликацијата да повика начини за додавање и бришење шаблони на отпечатоци за користење."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"користи хардвер за отпечатоци"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Дозволува апликацијата да користи хардвер за отпечатоци за проверка"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"да ја чита вашата музичка збирка"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Дозволува апликацијата да ја чита вашата музичка збирка."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"да ја менува вашата музичка збирка"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Дозволува апликацијата да ја менува вашата музичка збирка."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"да ја чита вашата збирка на видеа"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Дозволува апликацијата да ја чита вашата збирка на видеа."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"да ја менува вашата збирка на видеа"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Дозволува апликацијата да ја менува вашата збирка на видеа."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"да ја чита вашата збирка на фотографии"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Дозволува апликацијата да ја чита вашата збирка на фотографии."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"да ја менува вашата збирка на фотографии"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Дозволува апликацијата да ја менува вашата збирка на фотографии."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"да чита локации од вашата збирка на аудиовизуелни содржини"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Дозволува апликацијата да чита локации од вашата збирка на аудиовизуелни содржини."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Откриен е делумен отпечаток. Обидете се повторно."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Отпечатокот не можеше да се обработи. Обидете се повторно."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Сензорот за отпечатоци е валкан. Исчистете го и обидете се повторно."</string>
@@ -1875,8 +1895,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Да се зачува <xliff:g id="TYPE">%1$s</xliff:g> во <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Да се зачуваат <xliff:g id="TYPE_0">%1$s</xliff:g> и <xliff:g id="TYPE_1">%2$s</xliff:g> во <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Да се зачуваат <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> и <xliff:g id="TYPE_2">%3$s</xliff:g> во <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Дали да се ажурира на <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Дали да се ажурира <xliff:g id="TYPE">%1$s</xliff:g> на <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Дали да се ажурираат <xliff:g id="TYPE_0">%1$s</xliff:g> и <xliff:g id="TYPE_1">%2$s</xliff:g> на <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Дали да се ажурираат <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> и <xliff:g id="TYPE_2">%3$s</xliff:g> на <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Зачувај"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Не, фала"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Ажурирај"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"лозинка"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"адреса"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"кредитна картичка"</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index 1a3556c..db2aa1e 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"ബോഡി സെൻസറുകൾ"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"നിങ്ങളുടെ ജീവാധാര ലക്ഷണങ്ങളെ കുറിച്ചുള്ള സെൻസർ വിവരങ്ങൾ ആക്സസ് ചെയ്യുക"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"നിങ്ങളുടെ ജീവധാരണ ലക്ഷണങ്ങളെ കുറിച്ചുള്ള സെൻസർ ഡാറ്റ ആക്സസ് ചെയ്യാൻ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ആപ്പിനെ അനുവദിക്കണോ?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"വിൻഡോ ഉള്ളടക്കം വീണ്ടെടുക്കുക"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"നിങ്ങൾ സംവദിക്കുന്ന ഒരു വിൻഡോയുടെ ഉള്ളടക്കം പരിശോധിക്കുക."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"സ്പർശനം വഴി പര്യവേക്ഷണം ചെയ്യുക, ഓണാക്കുക"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"ഉപയോഗിക്കാനായി വിരലടയാള ടെംപ്ലേറ്റുകൾ ചേർക്കാനും ഇല്ലാതാക്കാനുമുള്ള രീതികൾ അഭ്യർത്ഥിക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ഫിംഗർപ്രിന്റ് ഹാർഡ്വെയർ ഉപയോഗിക്കുക"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"പ്രാമാണീകരണത്തിനായി വിരലടയാളം ഉപയോഗിക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"വിരലടയാളം ഭാഗികമായി തിരിച്ചറിഞ്ഞു. വീണ്ടും ശ്രമിക്കുക."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"വിരലടയാളം പ്രോസസ്സ് ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"വിരലടയാള സെൻസറിന് വൃത്തിയില്ല. അത് ശുചിയാക്കി വീണ്ടും ശ്രമിക്കുക."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> എന്നതിനെ <b><xliff:g id="LABEL">%2$s</xliff:g></b>എന്നതിലേക്ക് സംരക്ഷിക്കണോ?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> എന്നിവ<b><xliff:g id="LABEL">%3$s</xliff:g></b>എന്നതിലേക്ക് സംരക്ഷിക്കണോ?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, <xliff:g id="TYPE_2">%3$s</xliff:g> എന്നിവ<b><xliff:g id="LABEL">%4$s</xliff:g></b>എന്നതിലേക്ക് സംരക്ഷിക്കണോ?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"സംരക്ഷിക്കുക"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"വേണ്ട, നന്ദി"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"പാസ്വേഡ്"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"വിലാസം"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ക്രെഡിറ്റ് കാർഡ്"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index e1b9670..ddf1bc6 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Биеийн мэдрэгч"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"таны биеийн байдлын талаарх мэдрэгч бүхий өгөгдөлд нэвтрэх"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-д таны биеийн ерөнхий байдлын үзүүлэлтүүдийн мэдрэгчийн өгөгдөлд хандахыг зөвшөөрөх үү?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Хөгжим"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"хөгжимдөө хандах"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-д таны хөгжимд хандахыг зөвшөөрөх үү?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Зураг & видео"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"зураг & видеондоо хандах"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-д таны зураг & видеонд хандахыг зөвшөөрөх үү?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Цонхны агуулгыг авах"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Таны харилцан үйлчлэх цонхны контентоос шалгах."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Хүрч танихыг асаах"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Хурууны хээний загварыг нэмэх эсвэл усгтах үйлдлийг хийх зөвшөөрлийг програмд олгодог."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"хурууны хээний програм хангамжийг ашиглах"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Баталгаажуулалт хийх зорилгоор хурууны хээний апп хамгамжийг ашиглах зөвшөөрлийг аппд олгодог"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"хөгжмийн цуглуулгаа унших"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Таны хөгжмийн цуглуулгыг унших зөвшөөрлийг аппад олгодог."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"хөгжмийн цуглуулгаа тохируулах"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Таны хөгжмийн цуглуулгыг тохируулах зөвшөөрлийг аппад олгодог."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"видео цуглуулгаа унших"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Таны видео цуглуулгыг унших зөвшөөрлийг аппад олгодог."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"видео цуглуулгаа тохируулах"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Таны видео цуглуулгыг тохируулах зөвшөөрлийг аппад олгодог."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"зургийн цуглуулгаа унших"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Таны зургийн цуглуулгыг унших зөвшөөрлийг аппад олгодог."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"зургийн цуглуулгаа тохируулах"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Таны зургийн цуглуулгыг тохируулах зөвшөөрлийг аппад олгодог."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"медиа цуглуулгаасаа байршлыг унших"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Таны медиа цуглуулгаас байршлыг унших зөвшөөрлийг аппад олгодог."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Хурууны хээг дутуу уншуулсан байна. Дахин оролдоно уу."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Хурууны хээ боловсруулж чадахгүй байна. Дахин оролдоно уу."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Хурууны хээ мэдрэгч бохирдсон байна. Та цэвэрлэсний дараагаар дахин оролдоно уу."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g>-г <b><xliff:g id="LABEL">%2$s</xliff:g></b>-д хадгалах уу?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>-г <b><xliff:g id="LABEL">%3$s</xliff:g></b>-д хадгалах уу?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, <xliff:g id="TYPE_2">%3$s</xliff:g>-г <b><xliff:g id="LABEL">%4$s</xliff:g></b>-д хадгалах уу?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"<b><xliff:g id="LABEL">%1$s</xliff:g></b>-д шинэчлэх үү?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"<xliff:g id="TYPE">%1$s</xliff:g>-г <b><xliff:g id="LABEL">%2$s</xliff:g></b>-д шинэчлэх үү?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>-г <b><xliff:g id="LABEL">%3$s</xliff:g></b>-д шинэчлэх үү?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, <xliff:g id="TYPE_2">%3$s</xliff:g>-г <b><xliff:g id="LABEL">%4$s</xliff:g></b>-д шинэчлэх үү?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Хадгалах"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Үгүй, баярлалаа"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Шинэчлэх"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"нууц үг"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"хаяг"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"кредит карт"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 65c8828..4b01543 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"शरीर सेन्सर"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"आपल्या महत्त्वाच्या मापनांविषयी सेंसर डेटा अॅक्सेस करा"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ला तुमच्या महत्त्वाच्या लक्षणांविषयीचा सेन्सर डेटा अॅक्सेस करू द्यायचे?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"विंडो सामग्री पुनर्प्राप्त करा"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"तुम्ही परस्परसंवाद करीत असलेल्या विंडोची सामग्री तपासा."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"स्पर्श करून अन्वेषण चालू करा"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"वापर करण्याकरिता फिंगरप्रिंट टेम्पलेट जोडण्यासाठी आणि हटविण्यासाठी पद्धती रद्द करण्यास अॅपला अनुमती देते."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"फिंगरप्रिंट हार्डवेअर वापरा"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"प्रमाणीकरणाकरिता फिंगरप्रिंट हार्डवेअरचा वापर करण्यासाठी अॅपला अनुमती देते"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"आंशिक फिंगरप्रिंट आढळली. कृपया पुन्हा प्रयत्न करा."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"फिंगरप्रिंटवर प्रक्रिया करणे शक्य झाले नाही. कृपया पुन्हा प्रयत्न करा."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"फिंगरप्रिंट सेन्सर खराब आहे. कृपया साफ करा आणि पुन्हा प्रयत्न करा."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<b><xliff:g id="LABEL">%2$s</xliff:g></b>मध्ये <xliff:g id="TYPE">%1$s</xliff:g> सेव्ह करायची?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<b><xliff:g id="LABEL">%3$s</xliff:g></b>मध्ये <xliff:g id="TYPE_0">%1$s</xliff:g> आणि <xliff:g id="TYPE_1">%2$s</xliff:g> सेव्ह करायची?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<b><xliff:g id="LABEL">%4$s</xliff:g></b>मध्ये <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> आणि <xliff:g id="TYPE_2">%3$s</xliff:g> सेव्ह करायची?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"सेव्ह करा"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"नाही, नको"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"पासवर्ड"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"पत्ता"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"क्रेडिट कार्ड"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index b2f10c1..3df4e95 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Penderia Badan"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"akses data penderia tentang tanda vital anda"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Benarkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengakses data penderia tentang tanda vital anda?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Dapatkan kembali kandungan tetingkap"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Periksa kandungan tetingkap yang berinteraksi dengan anda."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Hidupkan Jelajah melalui Sentuhan"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Membenarkan apl menggunakan kaedah untuk menambahkan dan memadamkan templat cap jari untuk digunakan."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"gunakan perkakasan cap jari"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Membenarkan apl menggunakan perkakasan cap jari untuk pengesahan"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Cap jari separa dikesan. Sila cuba lagi."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Tidak dapat memproses cap jari. Sila cuba lagi."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Penderia cap jari kotor. Sila bersihkan dan cuba lagi."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Simpan <xliff:g id="TYPE">%1$s</xliff:g> ke <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Simpan <xliff:g id="TYPE_0">%1$s</xliff:g> dan <xliff:g id="TYPE_1">%2$s</xliff:g> ke <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Simpan <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> dan <xliff:g id="TYPE_2">%3$s</xliff:g> ke <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Simpan"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Tidak, terima kasih"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"kata laluan"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"alamat"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kad kredit"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index f9049f5..db3fdd3 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"ခန္ဓာကိုယ် အာရုံခံကိရိယာများ"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"သင်၏ အဓိကကျသော လက္ခဏာများအကြောင်း အာရုံခံကိရိယာဒေတာကို ရယူသုံးစွဲရန်"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> အား သင်၏ အရေးကြီးသောလက္ခဏာ အာရုံခံကိရိယာ ဒေတာများကို သုံးခွင့်ပေးလိုပါသလား။"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"တေးဂီတ"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"သင့်တေးဂီတကို ဝင်သုံးသည်"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> အား သင့်တေးဂီတကို ဝင်သုံးခွင့်ပေးလိုပါသလား။"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"ဓာတ်ပုံနှင့် ဗီဒီယိုများ"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"သင့်ဓာတ်ပုံနှင့် ဗီဒီယိုများကို ဝင်သုံးသည်"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> အား သင့်ဓာတ်ပုံနှင့် ဗီဒီယိုများကို ဝင်သုံးခွင့်ပေးလိုပါသလား။"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ဝင်းဒိုးတွင် ပါရှိသည်များကို ပြန်လည်ရယူရန်"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"သင်အသုံးပြုနေသော ဝင်းဒိုးတွင် ပါရှိသည်များကို ကြည့်ရှုစစ်ဆေးသည်။"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"တို့ထိခြင်းဖြင့် ရှာဖွေမှုကို ဖွင့်ရန်"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"အသုံးပြုရန်အတွက် လက်ဗွေရာပုံစံများကို ပေါင်းထည့်ရန် သို့မဟုတ် ဖျက်ရန်နည်းလမ်းများကို အပ်ဖ်အား အသုံးပြုခွင့်ပြုသည်။"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"လက်ဗွေရာပစ္စည်းကို အသုံးပြုမည်"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"စစ်မှန်ကြောင်းအထောက်အထားပြသခြင်းအတွက် လက်ဗွေရာပစ္စည်းကို အသုံးပြုရန် အပ်ဖ်အားခွင့်ပြုသည်။"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"သင့်တေးဂီတ စုစည်းမှုကို ဖတ်ခြင်း"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"အက်ပ်အား သင့်တေးဂီတစုစည်းမှုကို ဖတ်ခွင့်ပေးသည်။"</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"သင့်တေးဂီတ စုစည်းမှုကို ပြုပြင်ခြင်း"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"အက်ပ်အား သင့်တေးဂီတစုစည်းမှုကို ပြုပြင်ခွင့်ပေးသည်။"</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"သင့်ဗီဒီယို စုစည်းမှုကို ဖတ်ခြင်း"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"အက်ပ်အား သင့်ဗီဒီယိုစုစည်းမှုကို ဖတ်ခွင့်ပေးသည်။"</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"သင့်ဗီဒီယို စုစည်းမှုကို ပြုပြင်ခြင်း"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"အက်ပ်အား သင့်ဗီဒီယိုစုစည်းမှုကို ပြုပြင်ခွင့်ပေးသည်။"</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"သင့်ဓာတ်ပုံ စုစည်းမှုကို ဖတ်ခြင်း"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"အက်ပ်အား သင့်ဓာတ်ပုံစုစည်းမှုကို ဖတ်ခွင့်ပေးသည်။"</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"သင့်ဓာတ်ပုံ စုစည်းမှုကို ပြုပြင်ခြင်း"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"အက်ပ်အား သင့်ဓာတ်ပုံစုစည်းမှုကို ပြုပြင်ခွင့်ပေးသည်။"</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"သင့်မီဒီယာစုစည်းမှုမှ တည်နေရာများကို ဖတ်ခြင်း"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"အက်ပ်အား သင့်မီဒီယာစုစည်းမှုမှ တည်နေရာများကို ဖတ်ခွင့်ပေးသည်။"</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"လက်ဗွေရဦ တစ်ပိုင်းတစ်စ တွေ့ရှိသည်။ ကျေးဇူးပြု၍ ထပ်မံကြိုးစားပါ။"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"လက်ဗွေရာယူခြင်း မဆောင်ရွက်နိုင်ပါ။ ထပ်မံကြိုးစားပါ။"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"လက်ဗွေရာဖတ်ကိရိယာ ညစ်ပေနေသည်။ ကျေးဇူးပြု၍ ရှင်းလင်းကာ ထပ်မံကြိုးစားပါ။"</string>
@@ -1873,8 +1893,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> ကို <b><xliff:g id="LABEL">%2$s</xliff:g></b> တွင် သိမ်းဆည်းလိုပါသလား။"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> နှင့် <xliff:g id="TYPE_1">%2$s</xliff:g> ကို <b><xliff:g id="LABEL">%3$s</xliff:g></b> တွင် သိမ်းဆည်းလိုပါသလား။"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>၊ <xliff:g id="TYPE_1">%2$s</xliff:g> နှင့် <xliff:g id="TYPE_2">%3$s</xliff:g> ကို <b><xliff:g id="LABEL">%4$s</xliff:g></b> တွင် သိမ်းဆည်းလိုပါသလား။"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"<b><xliff:g id="LABEL">%1$s</xliff:g></b> သို့ အပ်ဒိတ်လုပ်လိုပါသလား။"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"<xliff:g id="TYPE">%1$s</xliff:g> ကို <b><xliff:g id="LABEL">%2$s</xliff:g></b> သို့ အပ်ဒိတ်လုပ်လိုပါသလား။"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"<xliff:g id="TYPE_0">%1$s</xliff:g> နှင့် <xliff:g id="TYPE_1">%2$s</xliff:g> ကို <b><xliff:g id="LABEL">%3$s</xliff:g></b> သို့ အပ်ဒိတ်လုပ်လိုပါသလား။"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"<xliff:g id="TYPE_0">%1$s</xliff:g>၊ <xliff:g id="TYPE_1">%2$s</xliff:g> နှင့် <xliff:g id="TYPE_2">%3$s</xliff:g> ကို <b><xliff:g id="LABEL">%4$s</xliff:g></b> သို့ အပ်ဒိတ်လုပ်လိုပါသလား။"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"သိမ်းရန်"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"မလိုပါ"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"အပ်ဒိတ်လုပ်ရန်"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"စကားဝှက်"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"လိပ်စာ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ခရက်တစ်ကတ်"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index a5bd899..da47ea7 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Kroppssensorer"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"få tilgang til sensordata om de vitale tegnene dine"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Vil du gi <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tilgang til sensordata om de vitale tegnene dine?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"hente innhold i vinduer"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Appen analyserer innholdet i vinduer du samhandler med."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"slå på berøringsutforsking"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Lar appen fremkalle metoder for å legge til og slette fingeravtrykkmaler for bruk."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"bruke fingeravtrykkmaskinvare"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Lar appen bruke fingeravtrykkmaskinvare til godkjenning"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Deler av fingeravtrykket er registrert. Prøv på nytt."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Kunne ikke registrere fingeravtrykket. Prøv på nytt."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingeravtrykksensoren er skitten. Rengjør den og prøv på nytt."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Vil du lagre <xliff:g id="TYPE">%1$s</xliff:g> i <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Vil du lagre <xliff:g id="TYPE_0">%1$s</xliff:g> og <xliff:g id="TYPE_1">%2$s</xliff:g> i <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Vil du lagre <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> og <xliff:g id="TYPE_2">%3$s</xliff:g> i <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Lagre"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nei takk"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"passord"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresse"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredittkort"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index eac241b..c39b7c8 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"शारीरिक सेन्सर"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"तपाईंको महत्त्वपूर्ण संकेत बारे सेन्सर डेटा पहुँच गर्नुहोस्"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> लाई आफ्ना महत्त्वपूर्ण लक्षणहरूसम्बन्धी सेन्सर डेटामाथि पहुँच राख्न दिने हो?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"विन्डो सामग्रीको पुनःबहाली गर्नुहोस्।"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"तपाईँको अन्तरक्रिया भइरहेको विन्डोको सामग्रीको निरीक्षण गर्नुहोस्।"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"छोएर गरिने खोजलाई सुचारु गर्नुहोस्"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"अनुप्रयोगलाई प्रयोगको लागि औठाछाप टेम्प्लेट थप्न र मेटाउने तरिका आह्वान गर्न अनुमति दिन्छ।"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"औठाछाप हार्डवेयर प्रयोग गर्नुहोस्"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"अनुप्रयोगलाई प्रमाणीकरणको लागि औठाछाप हार्डवेयर प्रयोग गर्न अनुमति दिन्छ"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"आंशिक औठाछाप पत्ता लाग्यो। कृपया फेरि प्रयास गर्नुहोस्।"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"औठाछाप प्रशोधन गर्न सकिएन। कृपया फेरि प्रयास गर्नुहोस्।"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"औँठाछाप सेन्सर फोहोर छ। कृपया सफा गरेर फेरि प्रयास गर्नुहोस्।"</string>
@@ -1878,8 +1918,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> लाई <b><xliff:g id="LABEL">%2$s</xliff:g></b> मा सुरक्षित गर्ने हो?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> र <xliff:g id="TYPE_1">%2$s</xliff:g> लाई <b><xliff:g id="LABEL">%3$s</xliff:g></b> मा सुरक्षित गर्ने हो?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> र <xliff:g id="TYPE_2">%3$s</xliff:g> लाई to <b><xliff:g id="LABEL">%4$s</xliff:g></b> मा सुरक्षित गर्ने हो?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"सुरक्षित गर्नुहोस्"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"पर्दैन, धन्यवाद"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"पासवर्ड"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ठेगाना"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"क्रेडिट कार्ड"</string>
diff --git a/core/res/res/values-night/themes_package_installer.xml b/core/res/res/values-night/themes_permission_controller.xml
similarity index 100%
rename from core/res/res/values-night/themes_package_installer.xml
rename to core/res/res/values-night/themes_permission_controller.xml
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 0981442..0e13132 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Lichaamssensoren"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"toegang krijgen tot sensorgegevens over je vitale functies"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang geven tot sensorgegevens over je vitale functies?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Muziek"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"toegang tot je muziek"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang geven tot je muziek?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Foto\'s en video\'s"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"toegang tot je foto\'s en video\'s"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Wil je <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang geven tot je foto\'s en video\'s?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Content van vensters ophalen"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"De content inspecteren van een venster waarmee je interactie hebt."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"\'Verkennen via aanraking\' inschakelen"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Hiermee kan de app methoden aanroepen om vingerafdruksjablonen toe te voegen en te verwijderen voor gebruik."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Vingerafdrukhardware gebruiken"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Hiermee kan de app vingerafdrukhardware gebruiken voor verificatie"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"je muziekcollectie bekijken"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Hiermee sta je de app toe je muziekcollectie te bekijken."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"je muziekcollectie aanpassen"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Hiermee sta je de app toe je muziekcollectie aan te passen."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"je videocollectie bekijken"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Hiermee sta je de app toe je videocollectie te bekijken."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"je videocollectie aanpassen"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Hiermee sta je de app toe je videocollectie aan te passen."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"je fotocollectie bekijken"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Hiermee sta je de app toe je fotocollectie te bekijken."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"je fotocollectie aanpassen"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Hiermee sta je de app toe je fotocollectie aan te passen."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"locaties van je mediacollecties bekijken"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Hiermee sta je de app toe locaties van je mediacollectie te bekijken."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Gedeeltelijke vingerafdruk gedetecteerd. Probeer het opnieuw."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Kan vingerafdruk niet verwerken. Probeer het opnieuw."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"De vingerafdruksensor moet worden schoongemaakt. Probeer het daarna opnieuw."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> opslaan in <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> en <xliff:g id="TYPE_1">%2$s</xliff:g> opslaan in <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> en <xliff:g id="TYPE_2">%3$s</xliff:g> opslaan in <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Updaten naar <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"<xliff:g id="TYPE">%1$s</xliff:g> updaten naar <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"<xliff:g id="TYPE_0">%1$s</xliff:g> en <xliff:g id="TYPE_1">%2$s</xliff:g> updaten naar <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> en <xliff:g id="TYPE_2">%3$s</xliff:g> updaten naar <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Opslaan"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nee, bedankt"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Updaten"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"Wachtwoord"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"Adres"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"Creditcard"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index c86fab8..4d5dd42 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"ବଡୀ ସେନ୍ସର୍"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"ଆପଣଙ୍କ ଗୁରୁତପୂର୍ଣ୍ଣ ସଂକେତଗୁଡ଼ିକ ବିଷୟରେ ସେନ୍ସର୍ ଡାଟା ଆକ୍ସେସ୍ କରେ"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>କୁ ଆପଣଙ୍କ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ଲକ୍ଷଣଗୁଡ଼ିକ ବିଷୟରେ ସେନ୍ସର୍ ଡାଟା ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଅନୁମତି ଦେବେ କି?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ୱିଣ୍ଡୋ କଣ୍ଟେଣ୍ଟ ହାସଲ କରନ୍ତୁ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ଆପଣ କାମ କରୁଥିବା ୱିଣ୍ଡୋର କଣ୍ଟେଣ୍ଟକୁ ଯାଞ୍ଚ କରନ୍ତୁ।"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"ସ୍ପର୍ଶ ଦ୍ୱାରା ଏକ୍ସପ୍ଲୋର୍ ଅନ୍ କରନ୍ତୁ"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"ବ୍ୟବହାର କରିବା ପାଇଁ ଆଙ୍ଗୁଠି ଚିହ୍ନ ଯୋଡ଼ିବାକୁ ଓ ଡିଲିଟ୍ କରିବାକୁ ଆପକୁ ବିଧି ଆରମ୍ଭ କରିବାକୁ ଦେଇଥାଏ।"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ଆଙ୍ଗୁଠି ଚିହ୍ନ ହାର୍ଡୱେର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"ସ୍ୱୀକୃତି ପାଇଁ ଆଙ୍ଗୁଠି ଚିହ୍ନ ହାର୍ଡୱେର୍ ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ଦିଏ"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"ଆଙ୍ଗୁଠି ଚିହ୍ନ ଆଂଶିକ ଚିହ୍ନଟ ହେଲା। ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ଆଙ୍ଗୁଠି ଚିହ୍ନ ପ୍ରୋସେସ୍ କରାଯାଇପାରିଲା ନାହିଁ। ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେନ୍ସର୍ ମଇଳା ହୋଇଯାଇଛି। ଦୟାକରି ସଫା କରନ୍ତୁ ଓ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> <b><xliff:g id="LABEL">%2$s</xliff:g></b>ରେ ସେଭ୍ କରିବେ?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> ଏବଂ <xliff:g id="TYPE_1">%2$s</xliff:g> <b><xliff:g id="LABEL">%3$s</xliff:g></b>ରେ ସେଭ୍ କରିବେ?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, ଏବଂ <xliff:g id="TYPE_2">%3$s</xliff:g> <b><xliff:g id="LABEL">%4$s</xliff:g></b>ରେ ସେଭ୍ କରିବେ?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"ସେଭ୍ କରନ୍ତୁ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ନାଁ, ପଚାରିଥିବାରୁ ଧନ୍ୟବାଦ"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"ପାସୱର୍ଡ୍"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ଠିକଣା"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"କ୍ରେଡିଟ୍ କାର୍ଡ"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 48c1a38..96fd692 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"ਸਰੀਰ ਸੰਵੇਦਕ"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"ਆਪਣੇ ਸਰੀਰ ਦੇ ਅਹਿਮ ਚਿੰਨ੍ਹਾਂ ਬਾਰੇ ਸੰਵੇਦਕ ਡਾਟਾ ਤੱਕ ਪਹੁੰਚ ਕਰਨ"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"ਕੀ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ਨੂੰ ਤੁਹਾਡੇ ਸਰੀਰ ਦੇ ਅਹਿਮ ਲੱਛਣਾਂ ਸੰਬੰਧੀ ਸੈਂਸਰ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ਵਿੰਡੋ ਸਮੱਗਰੀ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨਾ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ਇੱਕ ਵਿੰਡੋ ਦੀ ਸਮੱਗਰੀ ਦੀ ਜਾਂਚ ਕਰੋ, ਜਿਸ ਨਾਲ ਤੁਸੀਂ ਅੰਤਰਕਿਰਿਆ ਕਰ ਰਹੇ ਹੋ"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"\'ਸਪੱਰਸ਼ ਰਾਹੀਂ ਪੜਚੋਲ ਕਰੋ\' ਚਾਲੂ ਕਰਨਾ"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"ਐਪ ਨੂੰ ਵਰਤੋਂ ਲਈ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸ਼ਾਮਲ ਕਰਨ ਅਤੇ ਮਿਟਾਉਣ ਦੀਆਂ ਵਿਧੀਆਂ ਦੀ ਬੇਨਤੀ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਹਾਰਡਵੇਅਰ ਵਰਤੋ"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"ਐਪ ਨੂੰ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਫਿੰਗਰਪ੍ਰਿੰਟ ਹਾਰਡਵੇਅਰ ਵਰਤਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"ਅਧੂਰਾ ਫਿੰਗਰਪ੍ਰਿਟ ਮਿਲਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਪ੍ਰਕਿਰਿਆ ਨਹੀਂ ਕਰ ਸਕਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੰਵੇਦਕ ਗੰਦਾ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਇਸਨੂੰ ਸਾਫ਼ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"ਕੀ <xliff:g id="TYPE">%1$s</xliff:g> ਨੂੰ <b><xliff:g id="LABEL">%2$s</xliff:g></b> ਵਿੱਚ ਰੱਖਿਅਤ ਕਰਨਾ ਹੈ?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"ਕੀ <xliff:g id="TYPE_0">%1$s</xliff:g> ਅਤੇ <xliff:g id="TYPE_1">%2$s</xliff:g> ਨੂੰ <b><xliff:g id="LABEL">%3$s</xliff:g></b> ਵਿੱਚ ਰੱਖਿਅਤ ਕਰਨਾ ਹੈ?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"ਕੀ <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, ਅਤੇ <xliff:g id="TYPE_2">%3$s</xliff:g> ਨੂੰ <b><xliff:g id="LABEL">%4$s</xliff:g></b> ਵਿੱਚ ਰੱਖਿਅਤ ਕਰਨਾ ਹੈ?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"ਰੱਖਿਅਤ ਕਰੋ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ਨਹੀਂ ਧੰਨਵਾਦ"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"ਪਾਸਵਰਡ"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ਪਤਾ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ਕ੍ਰੈਡਿਟ ਕਾਰਡ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 76e5529..dbc5779 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -306,6 +306,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Czujniki na ciele"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"dostęp do danych czujnika podstawowych funkcji życiowych"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Zezwolić aplikacji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na dostęp do danych z czujnika podstawowych funkcji życiowych?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Pobieranie zawartości okna"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Sprawdzanie zawartości okna, z którego korzystasz."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Włączenie czytania dotykiem"</string>
@@ -500,6 +512,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Zezwala aplikacji aktywować metody dodawania i usuwania szablonów odcisków palców."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"używanie czytnika linii papilarnych"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Zezwala aplikacji na używanie czytnika linii papilarnych na potrzeby autoryzacji"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Odcisk palca został odczytany tylko częściowo. Spróbuj ponownie."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Nie udało się przetworzyć odcisku palca. Spróbuj ponownie."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Czytnik linii papilarnych jest zabrudzony. Wyczyść go i spróbuj ponownie."</string>
@@ -1942,8 +1982,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> – zapisać w: <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> i <xliff:g id="TYPE_1">%2$s</xliff:g> – zapisać w: <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> i <xliff:g id="TYPE_2">%3$s</xliff:g> – zapisać w: <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Zapisz"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nie, dziękuję"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"hasło"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adres"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"karta kredytowa"</string>
diff --git a/core/res/res/values-port/dimens_package_installer.xml b/core/res/res/values-port/dimens_permission_controller.xml
similarity index 100%
rename from core/res/res/values-port/dimens_package_installer.xml
rename to core/res/res/values-port/dimens_permission_controller.xml
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 1260627..ad68dde 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores corporais"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"acesse dados do sensor sobre seus sinais vitais"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse os dados do sensor sobre seus sinais vitais?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Músicas"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"acessar suas músicas"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse suas músicas?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Fotos e vídeos"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"acessar suas fotos e seus vídeos"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse suas fotos e seus vídeos?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Acessar conteúdo de uma janela"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspeciona o conteúdo de uma janela com a qual você está interagindo."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Ativar Explorar por toque"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permite que o app execute métodos para adicionar e excluir modelos de impressão digital para uso."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"usar hardware de impressão digital"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Permite que o app use hardware de impressão digital para autenticação."</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"ler sua coleção de músicas"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Permite que o app leia sua coleção de músicas."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"modificar sua coleção de músicas"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Permite que o app modifique sua coleção de músicas."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"ler sua coleção de vídeos"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Permite que o app leia sua coleção de vídeos."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"modificar sua coleção de vídeos"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Permite que o app modifique sua coleção de vídeos."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"ler sua coleção de fotos"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Permite que o app leia sua coleção de fotos."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"modificar sua coleção de fotos"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Permite que o app modifique sua coleção de fotos."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"ler locais na sua coleção de mídias"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Permite que o app leia os locais na sua coleção de mídias."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Impressão digital parcial detectada. Tente novamente."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Não foi possível processar a impressão digital. Tente novamente."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"O sensor de impressão digital está sujo. Limpe-o e tente novamente."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Salvar <xliff:g id="TYPE">%1$s</xliff:g> em <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Salvar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> em <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Salvar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> em <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Atualizar no <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Atualizar <xliff:g id="TYPE">%1$s</xliff:g> no <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Atualizar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> no <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Atualizar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> no <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Salvar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Não, obrigado"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Atualizar"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"senha"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"endereço"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"cartão de crédito"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 597be12..631e9f3 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores de corpo"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"aceder a dados do sensor acerca dos seus sinais vitais"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Pretende permitir que a aplicação <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aceda aos dados do sensor acerca dos seus sinais vitais?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Música"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"aceder à sua música"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Pretende permitir que a aplicação <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aceda à sua música?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Fotos e vídeos"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"aceder aos seus vídeos e fotos"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Pretende permitir que a aplicação <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aceda às suas fotos e vídeos?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Obter conteúdo da janela"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecionar o conteúdo de uma janela com a qual está a interagir."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Ativar Explorar Através do Toque"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permite que a aplicação invoque métodos para adicionar e eliminar modelos de impressão digital para utilização."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"utilizar o hardware de impressão digital"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Permite que a aplicação utilize o hardware de impressão digital para autenticação"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"ler a sua coleção de música"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Permite que a aplicação leia a sua coleção de música."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"modificar a sua coleção de música"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Permite que a aplicação modifique a sua coleção de música."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"ler a sua coleção de vídeos"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Permite que a aplicação leia a sua coleção de vídeos."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"modificar a sua coleção de vídeos"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Permite que a aplicação modifique a sua coleção de vídeos."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"ler a sua coleção de fotos"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Permite que a aplicação leia a sua coleção de fotos."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"modificar a sua coleção de fotos"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Permite que a aplicação modifique a sua coleção de fotos."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"ler as localizações a partir da sua coleção de multimédia"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Permite que a aplicação leia as localizações a partir da sua coleção de multimédia."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Impressão digital detetada. Tente novamente."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Não foi possível processar a impressão digital. Tente novamente."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"O sensor de impressões digitais está sujo. Limpe-o e tente novamente."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Pretende guardar <xliff:g id="TYPE">%1$s</xliff:g> no <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Pretende guardar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> no <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Pretende guardar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> no <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Pretende atualizar para o <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Pretende atualizar <xliff:g id="TYPE">%1$s</xliff:g> para o <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Pretende atualizar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> para o <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Pretende atualizar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> para o <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Guardar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Não, obrigado"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Atualizar"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"palavra-passe"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"endereço"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"cartão de crédito"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 1260627..ad68dde 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores corporais"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"acesse dados do sensor sobre seus sinais vitais"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse os dados do sensor sobre seus sinais vitais?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Músicas"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"acessar suas músicas"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse suas músicas?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Fotos e vídeos"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"acessar suas fotos e seus vídeos"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse suas fotos e seus vídeos?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Acessar conteúdo de uma janela"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspeciona o conteúdo de uma janela com a qual você está interagindo."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Ativar Explorar por toque"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permite que o app execute métodos para adicionar e excluir modelos de impressão digital para uso."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"usar hardware de impressão digital"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Permite que o app use hardware de impressão digital para autenticação."</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"ler sua coleção de músicas"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Permite que o app leia sua coleção de músicas."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"modificar sua coleção de músicas"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Permite que o app modifique sua coleção de músicas."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"ler sua coleção de vídeos"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Permite que o app leia sua coleção de vídeos."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"modificar sua coleção de vídeos"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Permite que o app modifique sua coleção de vídeos."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"ler sua coleção de fotos"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Permite que o app leia sua coleção de fotos."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"modificar sua coleção de fotos"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Permite que o app modifique sua coleção de fotos."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"ler locais na sua coleção de mídias"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Permite que o app leia os locais na sua coleção de mídias."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Impressão digital parcial detectada. Tente novamente."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Não foi possível processar a impressão digital. Tente novamente."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"O sensor de impressão digital está sujo. Limpe-o e tente novamente."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Salvar <xliff:g id="TYPE">%1$s</xliff:g> em <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Salvar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> em <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Salvar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> em <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Atualizar no <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Atualizar <xliff:g id="TYPE">%1$s</xliff:g> no <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Atualizar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> no <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Atualizar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> no <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Salvar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Não, obrigado"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Atualizar"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"senha"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"endereço"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"cartão de crédito"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index de01af6..ab276df 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -303,6 +303,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Senzori corporali"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"acceseze datele de la senzori despre semnele vitale"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Permiteți <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> să acceseze datele de la senzori despre semnele dvs. vitale?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Analizează conținutul ferestrei"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspectează conținutul unei ferestre cu care interacționați."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Activează funcția Explorați prin atingere"</string>
@@ -497,6 +509,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permite aplicației să invoce metode pentru a adăuga și pentru a șterge șabloane de amprentă pentru utilizare."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"folosește hardware-ul pentru amprentă"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Permite aplicației să folosească hardware pentru amprentă pentru autentificare"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"S-a detectat parțial amprenta. Încercați din nou."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Amprenta nu a putut fi procesată. Încercați din nou."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzorul pentru amprente este murdar. Curățați-l și încercați din nou."</string>
@@ -1907,8 +1947,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Salvați <xliff:g id="TYPE">%1$s</xliff:g> în <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Salvați <xliff:g id="TYPE_0">%1$s</xliff:g> și <xliff:g id="TYPE_1">%2$s</xliff:g> în <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Salvați <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> și <xliff:g id="TYPE_2">%3$s</xliff:g> în <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Salvați"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nu, mulțumesc"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"parolă"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresă"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"card de credit"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 63a8574..de009a6 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -306,6 +306,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Нательные датчики"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"доступ к данным датчиков о состоянии организма"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Разрешить приложению <b>\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"</b> доступ к данным датчиков о состоянии организма?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Получать содержимое окна"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Анализировать содержимое активного окна."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Включать Изучение касанием"</string>
@@ -500,6 +512,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Приложение сможет добавлять и удалять шаблоны отпечатков пальцев."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Использование сканера отпечатков"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Приложение сможет использовать сканер отпечатков пальцев для аутентификации."</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Отсканирована только часть пальца. Повторите попытку."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Не удалось распознать отпечаток. Повторите попытку."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Очистите сканер и повторите попытку."</string>
@@ -1942,8 +1982,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Сохранить <xliff:g id="TYPE">%1$s</xliff:g> в <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Сохранить <xliff:g id="TYPE_0">%1$s</xliff:g> и <xliff:g id="TYPE_1">%2$s</xliff:g> в <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Сохранить <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> и <xliff:g id="TYPE_2">%3$s</xliff:g> в <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Сохранить"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Нет, спасибо"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"Пароль"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"Адрес"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"Банковская карта"</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index a3e3ea0..bdc0c7b 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"ශරීර සංවේදක"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"ඔබේ ජෛව ලක්ෂණ පිළිබඳ සංවේදක දත්ත වෙත පිවිසෙන්න"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g><b> වෙත ඔබගේ ජෛව ලක්ෂණ පිළිබඳ සංවේදක දත්ත වෙත ප්රවේශ වීමට ඉඩ දෙන්නද?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"කවුළු අන්න්තර්ගතය ලබාගන්න"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ඔබ අන්තර්ක්රියාකාරී වන කවුළුවේ අන්තර්ගතය පරීක්ෂා කරන්න."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"ස්පර්ශයෙන් ගවේෂණය සක්රිය කරන්න"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"ඇඟිලි සලකුණු සැකිලි එකතු කිරීමට සහ ඉවත් කිරීමට අදාළ විධික්රම භාවිතය සඳහා මෙම යෙදුමට අවසර දෙයි."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ඇඟිලි සලකුණු දෘඩාංග භාවිතා කරන්න."</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"අනන්යතාවය තහවුරු කරගැනීමට ඇඟිලි සලකුණු දෘඩාංග භාවිතා කිරීමට මෙම යෙදුමට ඉඩ දෙන්න."</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"ඇඟිලි සලකුණ අඩ වශයෙන් අනාවරණය කර ගැනිණි. කරුණාකර නැවත උත්සාහ කරන්න."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ඇඟිලි සලකුණ පිරිසැකසීමට නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ඇඟිලි සලකුණු සංවේදකය අපිරිසිදුයි. කරුණාකර පිරිසිදු කර නැවත උත්සාහ කරන්න."</string>
@@ -1874,8 +1914,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> <b><xliff:g id="LABEL">%2$s</xliff:g></b> වෙත සුරකින්නද?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> සහ <xliff:g id="TYPE_1">%2$s</xliff:g> <b><xliff:g id="LABEL">%3$s</xliff:g></b> වෙත සුරකින්නද?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, සහ <xliff:g id="TYPE_2">%3$s</xliff:g> <b><xliff:g id="LABEL">%4$s</xliff:g></b> වෙත සුරකින්නද?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"සුරකින්න"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"එපා ස්තූතියි"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"මුරපදය"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ලිපිනය"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ණය කාඩ්පත"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 3f2f46d..f46771a 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -306,6 +306,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Telesné senzory"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"prístup k dátam senzorov vašich životných funkcií"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Povoliť aplikácii <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> používať údaje senzorov o vašich životných funkciách?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Načítať obsah okna"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Môžete preskúmať obsah okna, s ktorým pracujete."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Zapnúť funkciu Preskúmanie dotykom"</string>
@@ -500,6 +512,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Umožňuje aplikácii zavolať metódy, ktoré pridávajú a odstraňujú vzory odtlačkov prstov."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"použiť hardvér na snímanie odtlačkov prstov"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Umožňuje aplikácii používať na overenie totožnosti hardvér na snímanie odtlačkov prstov."</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Podarilo sa rozpoznať iba časť odtlačku prsta. Skúste to znova."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Odtlačok prsta sa nepodarilo spracovať. Skúste to znova."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Snímač odtlačkov je špinavý. Vyčistite ho a skúste to znova."</string>
@@ -1942,8 +1982,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Uložiť <xliff:g id="TYPE">%1$s</xliff:g> do služby <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Uložiť <xliff:g id="TYPE_0">%1$s</xliff:g> a <xliff:g id="TYPE_1">%2$s</xliff:g> do služby <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Uložiť <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> a <xliff:g id="TYPE_2">%3$s</xliff:g> do služby <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Uložiť"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nie, vďaka"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"heslo"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresa"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditná karta"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 90ab23b..0f9d038 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -306,6 +306,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Tipala telesnih funkcij"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"dostop do podatkov tipala o vaših vitalnih znakih"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Želite aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> omogočiti dostop do podatkov tipala o vitalnih znakih?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Glasba"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"dostop do glasbe"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Želite aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> omogočiti dostop do glasbe?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Fotografije in videoposnetki"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"dostop do fotografij in videoposnetkov"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Želite aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> omogočiti dostop do fotografij in videoposnetkov?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Pridobiti vsebino okna"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Preverjanje vsebine okna, ki ga uporabljate."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Vklopiti raziskovanje z dotikom"</string>
@@ -500,6 +506,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Aplikaciji omogoča sprožanje načinov za dodajanje in brisanje predlog s prstnimi odtisi za uporabo."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"uporaba strojne opreme za prstne odtise"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Aplikaciji omogoča uporabo strojne opreme za prstne odtise za preverjanje pristnosti"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"branje glasbene zbirke"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Aplikaciji omogoča branje glasbene zbirke."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"spreminjanje glasbene zbirke"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Aplikaciji omogoča spreminjanje glasbene zbirke."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"branje zbirke videoposnetkov"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Aplikaciji omogoča branje zbirke videoposnetkov."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"spreminjanje zbirke videoposnetkov"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Aplikaciji omogoča spreminjanje zbirke videoposnetkov."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"branje zbirke fotografij"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Aplikaciji omogoča branje zbirke fotografij."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"spreminjanje zbirke fotografij"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Aplikaciji omogoča spreminjanje zbirke fotografij."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"branje lokacij v predstavnostni zbirki"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Aplikaciji omogoča branje lokacij v predstavnostni zbirki."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Zaznan delni prstni odtis. Poskusite znova."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Prstnega odtisa ni bilo mogoče obdelati. Poskusite znova."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Tipalo prstnih odtisov je umazano. Očistite ga in poskusite znova."</string>
@@ -1942,8 +1962,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Želite <xliff:g id="TYPE">%1$s</xliff:g> shraniti pod oznako <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Želite <xliff:g id="TYPE_0">%1$s</xliff:g> in <xliff:g id="TYPE_1">%2$s</xliff:g> shraniti pod oznako <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Želite <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> in <xliff:g id="TYPE_2">%3$s</xliff:g> shraniti pod oznako <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Želite posodobiti na oznako <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Želite <xliff:g id="TYPE">%1$s</xliff:g> posodobiti na oznako <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Želite <xliff:g id="TYPE_0">%1$s</xliff:g> in <xliff:g id="TYPE_1">%2$s</xliff:g> posodobiti na oznako <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Želite <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> in <xliff:g id="TYPE_2">%3$s</xliff:g> posodobiti na oznako <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Shrani"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, hvala"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Posodobi"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"geslo"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"naslov"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditno kartico"</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index bb42da4..15888fb 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Sensorët e trupit"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"qasu tek të dhënat e sensorëve rreth shenjave të tua jetësore"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Të lejohet që <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> të ketë qasje te të dhënat e sensorëve rreth shenjave të tua jetësore?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Nxjerrë përmbajtjen e dritares"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspekton përmbajtjen e dritares me të cilën po ndërvepron."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Aktivizojë funksionin \"Eksploro me prekje\""</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"E lejon aplikacionin që të aktivizojë metoda për të shtuar dhe për të fshirë shabllonet e gjurmës së gishtit për përdorim."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"përdor harduerin e gjurmës së gishtit"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"E lejon aplikacionin që të përdorë harduerin e gjurmës së gishtit për verifikim"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"U zbulua një gjurmë gishti e pjesshme. Provo përsëri."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Gjurma e gishtit nuk mund të përpunohej. Provo përsëri."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Sensori i gjurmës së gishtit nuk është i pastër. Pastroje dhe provo përsëri."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Të ruhet <xliff:g id="TYPE">%1$s</xliff:g> te <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Të ruhen <xliff:g id="TYPE_0">%1$s</xliff:g> dhe <xliff:g id="TYPE_1">%2$s</xliff:g> te <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Të ruhen <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> dhe <xliff:g id="TYPE_2">%3$s</xliff:g> te <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Ruaj"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Jo, faleminderit"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"fjalëkalimi"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresa"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"karta e kreditit"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index fa1dc59..4c86605 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -303,6 +303,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Сензори за тело"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"приступа подацима сензора о виталним функцијама"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Желите ли да омогућите да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>приступа подацима сензора о виталним функцијама?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"да преузима садржај прозора"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Проверава садржај прозора са којим остварујете интеракцију."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"да укључи Истраживања додиром"</string>
@@ -497,6 +509,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Дозвољава апликацији да активира методе за додавање и брисање шаблона отисака прстију који ће се користити."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"користи хардвер за отиске прстију"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Дозвољава апликацији да користи хардвер за отиске прстију ради потврде аутентичности"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Откривен је делимични отисак прста. Пробајте поново."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Није успела обрада отиска прста. Пробајте поново."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Сензор за отиске прстију је прљав. Очистите га и покушајте поново."</string>
@@ -1907,8 +1947,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Желите ли да сачувате ставку <xliff:g id="TYPE">%1$s</xliff:g> у: <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Желите ли да сачувате ставке <xliff:g id="TYPE_0">%1$s</xliff:g> и <xliff:g id="TYPE_1">%2$s</xliff:g> у: <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Желите ли да сачувате ставке <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> и <xliff:g id="TYPE_2">%3$s</xliff:g> у: <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Сачувај"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Не, хвала"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"лозинка"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"адреса"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"кредитна картица"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 7b9005c50..1f3efe0 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Kroppssensorer"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"få åtkomst till sensordata om dina vitalparametrar"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Vill du ge <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> åtkomst till sensordata om vitalparametrar?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Hämta fönsterinnehåll"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Granska innehållet i ett fönster som du interagerar med."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Aktivera Explore by touch"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Tillåter att appen anropar metoder för att lägga till och radera fingeravtrycksmallar."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"använda maskinvara för fingeravtryck"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Tillåter att appen använder maskinvara för fingeravtryck vid autentisering"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Ofullständigt fingeravtryck. Försök igen."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Det gick inte att bearbeta fingeravtrycket. Försök igen."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingeravtryckssensorn är smutsig. Rengör den och försök igen."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Vill du spara <xliff:g id="TYPE">%1$s</xliff:g> i <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Vill du spara <xliff:g id="TYPE_0">%1$s</xliff:g> och <xliff:g id="TYPE_1">%2$s</xliff:g> i <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Vill du spara <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> och <xliff:g id="TYPE_2">%3$s</xliff:g> i <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Spara"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nej tack"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"lösenordet"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adressen"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditkortet"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 9d8790d..5a7dcca 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -298,6 +298,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Vihisi vya Mwili"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"fikia data ya kitambuzi kuhusu alama zako muhimu"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie data ya vitambuzi kuhusu viashiria muhimu vya mwili wako?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Muziki"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"kufikia muziki wako"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie muziki wako?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Picha na Video"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"kufikia picha na video zako"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Ungependa kuruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie picha na video zako?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Kufikia maudhui ya dirisha"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Kuchunguza maudhui ya dirisha unalotumia."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Kuwasha \'Chunguza kwa Kugusa\'"</string>
@@ -492,6 +498,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Huruhusu programu kuomba njia za kuongeza na kufuta violezo vya kitambulisho kwa matumizi."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"tumia maunzi ya kitambulisho"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Huruhusu programu kutumia maunzi ya kitambulisho kwa uthibitisho"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"kusoma mkusanyiko muziki wako"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Inaruhusu programu kusoma mkusanyiko wa muziki wako."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"kubadilisha mkusanyiko wa muziki wako"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Inaruhusu programu kubadilisha mkusanyiko wa muziki wako."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"kusoma mkusanyiko wa video zako"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Inaruhusu programu kusoma mkusanyiko wa video zako."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"kubadilisha mkusanyiko wa video zako"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Inaruhusu programu kubadilisha mkusanyiko wa video zako."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"kusoma mkusanyiko wa picha zako"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Inaruhusu programu kusoma mkusanyiko wa picha zako."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"kubadilisha mkusanyiko wa picha zako"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Inaruhusu programu kubadilisha mkusanyiko wa picha zako."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"kusoma maeneo kwenye mkusanyiko wa vipengee vyako"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Inaruhusu programu kusoma maeneo kwenye mkusanyiko wa vipengee vyako."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Kitambuzi kimegundua sehemu ya kitambulisho. Tafadhali jaribu tena."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Haikuweza kuchakata kitambulisho. Tafadhali jaribu tena."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Kitambuzi alama ya kidole ni kichafu. Tafadhali kisafishe na ujaribu tena."</string>
@@ -1870,8 +1890,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Ungependa kuhifadhi <xliff:g id="TYPE">%1$s</xliff:g> kwenye <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Ungependa kuhifadhi <xliff:g id="TYPE_0">%1$s</xliff:g> na <xliff:g id="TYPE_1">%2$s</xliff:g> kwenye <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Ungependa kuhifadhi <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, na <xliff:g id="TYPE_2">%3$s</xliff:g> kwenye <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Ungependa kusasisha kuwa <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Ungependa kusasisha <xliff:g id="TYPE">%1$s</xliff:g> kuwa <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Ungependa kusasisha <xliff:g id="TYPE_0">%1$s</xliff:g> na <xliff:g id="TYPE_1">%2$s</xliff:g> kuwa <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Ungependa kusasisha <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> na <xliff:g id="TYPE_2">%3$s</xliff:g> kuwa <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Hifadhi"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Hapana, asante"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Sasisha"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"nenosiri"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"anwani"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kadi ya mikopo"</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index f390445..00143b9 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"உடல் சென்சார்கள்"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"உங்கள் உடல் இயக்கம் பற்றி உணர்விகள் கூறும் தகவலைப் பார்க்கலாம்"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"உங்கள் உடலியக்கக் குறிகள் பற்றிய சென்சார் தரவை அணுகுவதற்கு <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> பயன்பாட்டை அனுமதிக்கவா?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"சாளர உள்ளடக்கத்தைப் பெறும்"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"நீங்கள் பணியாற்றிக் கொண்டிருக்கும் சாளரத்தின் உள்ளடக்கத்தைப் பார்க்கலாம்."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"தொடுவதன் மூலம் அறிவதை இயக்கும்"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"பயன்படுத்துவதற்காக, கைரேகை டெம்ப்ளேட்களைச் சேர்க்க மற்றும் நீக்குவதற்கான செயல்முறைகளை இயக்குவதற்குப் பயன்பாட்டை அனுமதிக்கும்."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"கைரேகை வன்பொருளைப் பயன்படுத்து"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"அங்கீகரிப்பதற்கு, கைரேகை வன்பொருளைப் பயன்படுத்த, பயன்பாட்டை அனுமதிக்கும்"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"கைரேகையை ஓரளவுதான் கண்டறிய முடிந்தது. மீண்டும் முயலவும்."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"கைரேகையைச் செயலாக்க முடியவில்லை. மீண்டும் முயலவும்."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"கைரேகை உணர்வியில் தூசி உள்ளது. சுத்தம் செய்து, முயலவும்."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g>ஐ <b><xliff:g id="LABEL">%2$s</xliff:g></b> இல் சேமிக்கவா?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> மற்றும் <xliff:g id="TYPE_1">%2$s</xliff:g>ஐ <b><xliff:g id="LABEL">%3$s</xliff:g></b> இல் சேமிக்கவா?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, <xliff:g id="TYPE_2">%3$s</xliff:g> ஆகியவற்றை <b><xliff:g id="LABEL">%4$s</xliff:g></b> இல் சேமிக்கவா?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"சேமி"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"வேண்டாம்"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"கடவுச்சொல்"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"முகவரி"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"கிரெடிட் கார்டு"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 98b737f..e3f089a 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"శరీర సెన్సార్లు"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"మీ అత్యంత కీలకమైన గుర్తుల గురించి సెన్సార్ డేటాని యాక్సెస్ చేస్తుంది"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"మీ అత్యంత కీలకమైన గుర్తుల గురించి సెన్సార్ డేటాని యాక్సెస్ చేయడానికి <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ని అనుమతించాలా?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"విండో కంటెంట్ను తిరిగి పొందుతుంది"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"మీరు పరస్పర చర్య చేస్తున్న విండో కంటెంట్ను పరిశీలిస్తుంది."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"తాకడం ద్వారా విశ్లేషణను ప్రారంభిస్తుంది"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"వినియోగం కోసం వేలిముద్ర టెంప్లేట్లను జోడించే మరియు తొలగించే పద్ధతులను అమలు చేయడానికి యాప్ను అనుమతిస్తుంది."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"వేలిముద్ర హార్డ్వేర్ని ఉపయోగించడానికి అనుమతి"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"ప్రామాణీకరణ కోసం వేలిముద్ర హార్డ్వేర్ను ఉపయోగించడానికి అనువర్తనాన్ని అనుమతిస్తుంది"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"పాక్షిక వేలిముద్ర గుర్తించబడింది. దయచేసి మళ్లీ ప్రయత్నించండి."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"వేలిముద్రను ప్రాసెస్ చేయడం సాధ్యపడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"వేలిముద్ర సెన్సార్ మురికిగా ఉంది. దయచేసి శుభ్రపరిచి, మళ్లీ ప్రయత్నించండి."</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g>ని <b><xliff:g id="LABEL">%2$s</xliff:g></b>కు సేవ్ చేయాలా?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> మరియు <xliff:g id="TYPE_1">%2$s</xliff:g>లను <b><xliff:g id="LABEL">%3$s</xliff:g></b>కు సేవ్ చేయాలా?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> మరియు <xliff:g id="TYPE_2">%3$s</xliff:g>లను <b><xliff:g id="LABEL">%4$s</xliff:g></b>కు సేవ్ చేయాలా?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"సేవ్ చేయి"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"వద్దు, ధన్యవాదాలు"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"పాస్వర్డ్"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"చిరునామా"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"క్రెడిట్ కార్డ్"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 89c2e44..5375278 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"เซ็นเซอร์ร่างกาย"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"เข้าถึงข้อมูลเซ็นเซอร์เกี่ยวกับสัญญาณชีพของคุณ"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"อนุญาตให้ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> เข้าถึงข้อมูลเซ็นเซอร์เกี่ยวกับสัญญาณชีพไหม"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"เรียกข้อมูลเนื้อหาของหน้าต่าง"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ตรวจสอบเนื้อหาของหน้าต่างที่คุณกำลังโต้ตอบอยู่"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"เปิด \"แตะเพื่อสำรวจ\""</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"อนุญาตให้แอปเรียกใช้วิธีการเพื่อเพิ่มและลบเทมเพลตลายนิ้วมือสำหรับการใช้งาน"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"ใช้ฮาร์ดแวร์ลายนิ้วมือ"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"อนุญาตให้แอปใช้ฮาร์ดแวร์ลายนิ้วมือเพื่อตรวจสอบสิทธิ์"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"ตรวจพบลายนิ้วมือเพียงบางส่วน โปรดลองอีกครั้ง"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ไม่สามารถประมวลผลลายนิ้วมือได้ โปรดลองอีกครั้ง"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"เซ็นเซอร์ลายนิ้วมือไม่สะอาด โปรดทำความสะอาดและลองอีกครั้ง"</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"บันทึก <xliff:g id="TYPE">%1$s</xliff:g> ไปยัง <b><xliff:g id="LABEL">%2$s</xliff:g></b> ใช่ไหม"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"บันทึก <xliff:g id="TYPE_0">%1$s</xliff:g> และ <xliff:g id="TYPE_1">%2$s</xliff:g> ไปยัง <b><xliff:g id="LABEL">%3$s</xliff:g></b> ใช่ไหม"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"บันทึก <xliff:g id="TYPE_0">%1$s</xliff:g> <xliff:g id="TYPE_1">%2$s</xliff:g> และ <xliff:g id="TYPE_2">%3$s</xliff:g> ไปยัง <b><xliff:g id="LABEL">%4$s</xliff:g></b> ใช่ไหม"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"บันทึก"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ไม่เป็นไร"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"รหัสผ่าน"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ที่อยู่"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"บัตรเครดิต"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 4453309..c4b14f7 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Mga Sensor ng Katawan"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"i-access ang data ng sensor tungkol sa iyong vital signs"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Payagan ang <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na i-access ang data ng sensor tungkol sa iyong mga vital sign?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Musika"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"i-access ang iyong musika"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Payagan ang <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na i-access ang iyong musika?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Mga Larawan at Video"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"i-access ang iyong mga larawan at video"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Payagan ang <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na i-access ang iyong mga larawan at video?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Kunin ang content ng window"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Siyasatin ang nilalaman ng isang window kung saan ka nakikipag-ugnayan."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"I-on ang Explore by Touch"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Pinapayagan ang app na mag-invoke ng mga paraan upang magdagdag at mag-delete ng mga template ng fingerprint na magagamit."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"gamitin ang hardware ng fingerprint"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Pinapayagan ang app na gumamit ng hardware ng fingerprint para sa pagpapatotoo"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"basahin ang iyong koleksyon ng musika"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Pinapayagan ang app na basahin ang iyong koleksyon ng musika."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"baguhin ang iyong koleksyon ng musika"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Pinapayagan ang app na baguhin ang iyong koleksyon ng musika."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"basahin ang iyong koleksyon ng video"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Pinapayagan ang app na basahin ang iyong koleksyon ng video."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"baguhin ang iyong koleksyon ng video"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Pinapayagan ang app na baguhin ang iyong koleksyon ng video."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"basahin ang iyong koleksyon ng larawan"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Pinapayagan ang app na basahin ang iyong koleksyon ng larawan."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"baguhin ang iyong koleksyon ng larawan"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Pinapayagan ang app na baguhin ang iyong koleksyon ng larawan."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"basahin ang mga lokasyon mula sa iyong koleksyon ng media"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Pinapayagan ang app na basahin ang mga lokasyon mula sa iyong koleksyon ng media."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Hindi buo ang natukoy na fingerprint. Pakisubukang muli."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Hindi maproseso ang fingerprint. Pakisubukang muli."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Marumi ang sensor ng fingerprint. Pakilinis at subukang muli."</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"I-save ang <xliff:g id="TYPE">%1$s</xliff:g> sa <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"I-save ang <xliff:g id="TYPE_0">%1$s</xliff:g> at <xliff:g id="TYPE_1">%2$s</xliff:g> sa <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"I-save ang <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, at <xliff:g id="TYPE_2">%3$s</xliff:g> sa <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"I-update sa <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"I-update ang <xliff:g id="TYPE">%1$s</xliff:g> sa <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"I-update ang <xliff:g id="TYPE_0">%1$s</xliff:g> at <xliff:g id="TYPE_1">%2$s</xliff:g> sa <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"I-update ang <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, at <xliff:g id="TYPE_2">%3$s</xliff:g> sa <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"I-save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Hindi, salamat na lang"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"I-update"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 54f92e1..7ed5859 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Vücut Sensörleri"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"hayati belirtilerinizle ilgili sensör verilerine erişme"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasının hayati belirtilerinizle ilgili sensör verilerine erişmesine izin verilsin mi?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Pencere içeriğini alma"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Etkileşim kurduğunuz pencerenin içeriğini inceler."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Dokunarak Keşfet\'i açma"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Uygulamanın, kullanılacak parmak izi şablonlarını ekleme ve silme yöntemlerini başlatmasına izin verir."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"parmak izi donanımını kullanma"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Uygulamanın kimlik doğrulama için parmak izi donanımını kullanmasına izin verir."</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Parmak izinin tümü algılanamadı. Lütfen tekrar deneyin."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Parmak izi işlenemedi. Lütfen tekrar deneyin."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Parmak izi sensörü kirli. Lütfen temizleyin ve tekrar deneyin."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g>, <b><xliff:g id="LABEL">%2$s</xliff:g></b> hizmetine kaydedilsin mi?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> ve <xliff:g id="TYPE_1">%2$s</xliff:g>, <b><xliff:g id="LABEL">%3$s</xliff:g></b> hizmetine kaydedilsin mi?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ve <xliff:g id="TYPE_2">%3$s</xliff:g>, <b><xliff:g id="LABEL">%4$s</xliff:g></b> hizmetine kaydedilsin mi?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Kaydet"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Hayır, teşekkürler"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"şifre"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adres"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredi kartı"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 6476134..45b8dd4 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -306,6 +306,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Датчики на тілі"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"отримувати доступ до інформації датчиків про ваші життєві показники"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Надати додатку <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ до життєвих показників із датчиків?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Музика"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"доступ до музики"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"Надати додатку <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ до музики?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Фото й відео"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"доступ до фото й відео"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"Надати додатку <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ до фото й відео?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Отримувати вміст вікна"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Перевіряти вміст вікна, з яким ви взаємодієте."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Увімкнути функцію дослідження дотиком"</string>
@@ -500,6 +506,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Увімкнути в додатку функції для додавання й видалення шаблонів цифрових відбитків."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"використання сканера цифрових відбитків"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Дозволити додатку використовувати апаратне забезпечення для автентифікації"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"розпізнавати колекцію музики"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Додаток зможе розпізнавати вашу колекцію музики."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"змінювати колекцію музики"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Додаток зможе змінювати вашу колекцію музики."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"розпізнавати колекцію відео"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Додаток зможе розпізнавати вашу колекцію відео."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"змінювати колекцію відео"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Додаток зможе змінювати вашу колекцію відео."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"розпізнавати колекцію фотографій"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Додаток зможе розпізнавати вашу колекцію фотографій."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"змінювати колекцію фотографій"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Додаток зможе змінювати вашу колекцію фотографій."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"розпізнавати геодані з колекції медіа-вмісту"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Додаток зможе розпізнавати геодані з вашої колекції медіа-вмісту."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Відбиток розпізнано частково. Повторіть спробу."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Не вдалось обробити відбиток. Повторіть спробу."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Датчик відбитків забруднився. Очистьте його та повторіть спробу."</string>
@@ -1942,8 +1962,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Зберегти дані (<xliff:g id="TYPE">%1$s</xliff:g>) у службі <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Зберегти дані (<xliff:g id="TYPE_0">%1$s</xliff:g> і <xliff:g id="TYPE_1">%2$s</xliff:g>) у службі <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Зберегти дані (<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> і <xliff:g id="TYPE_2">%3$s</xliff:g>) у службі <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"Оновити дані в сервісі <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"Оновити дані (<xliff:g id="TYPE">%1$s</xliff:g>) у сервісі <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"Оновити дані (<xliff:g id="TYPE_0">%1$s</xliff:g> і <xliff:g id="TYPE_1">%2$s</xliff:g>) у сервісі <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"Оновити дані (<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> і <xliff:g id="TYPE_2">%3$s</xliff:g>) у сервісі <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Зберегти"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ні, дякую"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Оновити"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"пароль"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"адреса"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"кредитна картка"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 2ed0e6c..3c92c3d 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"باڈی سینسرز"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"اپنی علامات حیات کے متعلق سنسر ڈیٹا تک رسائی حاصل کریں"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو آپ کے اہم اشاروں کے متعلق سینسر ڈیٹا تک رسائی کی اجازت دیں؟"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ونڈو مواد بازیافت کرنے کی"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"کسی ایسی ونڈو کے مواد کا معائنہ کریں جس کے ساتھ آپ تعامل کر رہے ہیں۔"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"ٹچ کے ذریعے دریافت کریں کو آن کرنے کی"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"ایپ کو استعمال کیلئے فنگر پرنٹ کی تمثیلات شامل کرنے اور حذف کرنے کیلئے طریقوں کو کالعدم قرار دینے کی اجازت دیتا ہے۔"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"فنگر پرنٹ ہارڈ ویئر استعمال کریں"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"ایپ کو توثیق کیلئے فنگر پرنٹ ہارڈ ویئر استعمال کرنے کی اجازت دیتا ہے"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"جزوی فنگر پرنٹ کی شناخت ہوئی۔ براہ کرم دوبارہ کوشش کریں۔"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"فنگر پرنٹ پر کارروائی نہیں کی جا سکی۔ براہ کرم دوبارہ کوشش کریں۔"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"فنگر پرنٹ سینسر گندا ہے۔ براہ کرم صاف کریں اور دوبارہ کوشش کریں۔"</string>
@@ -1873,8 +1913,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> کو <b><xliff:g id="LABEL">%2$s</xliff:g></b> میں محفوظ کریں؟"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> اور <xliff:g id="TYPE_1">%2$s</xliff:g> کو <b><xliff:g id="LABEL">%3$s</xliff:g></b> میں محفوظ کریں؟"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>،<xliff:g id="TYPE_1">%2$s</xliff:g>، اور <xliff:g id="TYPE_2">%3$s</xliff:g> کو <b><xliff:g id="LABEL">%4$s</xliff:g></b> میں محفوظ کریں؟"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"محفوظ کریں"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"نہیں، شکریہ"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"پاس ورڈ"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"پتہ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"کریڈٹ کارڈ"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index 1d4c074..684e78a 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Tana sezgichlari"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"organizm holati haqidagi sezgich ma’lumotlariga kirish"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun organizm holati haqidagi sezgichlar axborotlariga ruxsat berilsinmi?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"Musiqa"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"musiqaga kirish"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun musiqangizga kirishga ruxsat berilsinmi?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"Surat va videolar"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"surat va videolarga kirish"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun surat va videolaringizga kirishga ruxsat berilsinmi?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Oynadagi kontentni o‘qiydi"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Joriy oynadagi kontent mazmunini aniqlaydi."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Teginib o‘rganish xizmatini yoqadi"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Ilova foydalanish uchun barmoq izi namunalarini qo‘shish va o‘chirish usullarini qo‘llashi mumkin."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"barmoq izi sensoridan foydalanish"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Ilova haqiqiylikni tekshirish uchun barmoq izi sensoridan foydalanishi mumkin"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"musiqiy to‘plamni o‘qish"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"Ilovaga musiqiy to‘plamingizni o‘qishga ruxsat beradi."</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"musiqiy to‘plamni o‘zgartirish"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"Ilovaga musiqiy to‘plamni o‘zgartirishga ruxsat beradi."</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"video to‘plamni o‘qish"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"Ilovaga video to‘plamingizni o‘qishga ruxsat beradi."</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"video to‘plamni o‘zgartirish"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"Ilovaga video to‘plamingizni o‘zgartirishga ruxsat beradi."</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"suratlar to‘plamini o‘qish"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"Ilovaga suratlar to‘plamingizni o‘qishga ruxsat beradi."</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"suratlar to‘plamini o‘zgartirish"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Ilovaga suratlar to‘plamingizni o‘zgartirishga ruxsat beradi."</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"multimedia to‘plamidan joylashuv axborotini o‘qish"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Ilovaga multimedia to‘plamingizdan joylashuv axborotini o‘qishga ruxsat beradi."</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Barmoq izi qisman aniqlandi. Qayta urinib ko‘ring."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Barmoq izi aniqlanmadi. Qayta urinib ko‘ring."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Barmoq izi skaneri kirlangan. Uni tozalab, keyin qayta urinib ko‘ring."</string>
@@ -1873,8 +1893,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"<xliff:g id="TYPE">%1$s</xliff:g> <b><xliff:g id="LABEL">%2$s</xliff:g></b> xizmatiga saqlansinmi?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"<xliff:g id="TYPE_0">%1$s</xliff:g> va <xliff:g id="TYPE_1">%2$s</xliff:g> <b><xliff:g id="LABEL">%3$s</xliff:g></b> xizmatiga saqlansinmi?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> va <xliff:g id="TYPE_2">%3$s</xliff:g> <b><xliff:g id="LABEL">%4$s</xliff:g></b> xizmatiga saqlansinmi?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"<b><xliff:g id="LABEL">%1$s</xliff:g></b> xizmatidagi ma’lumot yangilansinmi?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"<b><xliff:g id="LABEL">%2$s</xliff:g></b> xizmatida <xliff:g id="TYPE">%1$s</xliff:g> ma’lumotlari yangilansinmi?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"<b><xliff:g id="LABEL">%3$s</xliff:g></b> xizmatidagi <xliff:g id="TYPE_0">%1$s</xliff:g> va <xliff:g id="TYPE_1">%2$s</xliff:g> ma’lumotlari yangilansinmi?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"<b><xliff:g id="LABEL">%4$s</xliff:g></b> xizmatidagi <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> va <xliff:g id="TYPE_2">%3$s</xliff:g> ma’lumotlari yangilansinmi?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"Saqlash"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Kerak emas"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"Yangilash"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"parol"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"manzil"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredit karta"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index a45118f..4e84f62 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Cảm biến cơ thể"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"truy cập dữ liệu cảm biến về dấu hiệu sinh tồn của bạn"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Cho phép <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> truy cập vào dữ liệu cảm biến về các dấu hiệu sinh tồn của bạn?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Truy xuất nội dung cửa sổ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Kiểm tra nội dung của cửa sổ bạn đang tương tác."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Bật Khám phá bằng cách chạm"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Cho phép ứng dụng gọi các phương pháp để thêm và xóa các mẫu vân tay để sử dụng."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"sử dụng phần cứng vân tay"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Cho phép ứng dụng sử dụng phần cứng vân tay để xác thực"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Đã phát hiện được một phần vân tay. Vui lòng thử lại."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Không thể xử lý vân tay. Vui lòng thử lại."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Cảm biến vân tay bị bẩn. Hãy làm sạch và thử lại."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Lưu <xliff:g id="TYPE">%1$s</xliff:g> vào <b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Lưu <xliff:g id="TYPE_0">%1$s</xliff:g> và <xliff:g id="TYPE_1">%2$s</xliff:g> vào <b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Lưu <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> và <xliff:g id="TYPE_2">%3$s</xliff:g> vào <b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Lưu"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Không, cảm ơn"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"mật khẩu"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"địa chỉ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"thẻ tín dụng"</string>
diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml
index 8e82479..a96a96d 100644
--- a/core/res/res/values-watch/config.xml
+++ b/core/res/res/values-watch/config.xml
@@ -64,9 +64,8 @@
Set to true for watch devices. -->
<bool name="config_focusScrollContainersInTouchMode">true</bool>
- <!-- Enable generic multi-window in order to support Activity in virtual display. -->
- <bool name="config_supportsMultiWindow">true</bool>
- <bool name="config_supportsMultiDisplay">true</bool>
+ <bool name="config_supportsMultiWindow">false</bool>
+ <bool name="config_supportsMultiDisplay">false</bool>
<bool name="config_supportsSplitScreenMultiWindow">false</bool>
<!-- Default Gravity setting for the system Toast view. Equivalent to: Gravity.CENTER -->
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 8a55d01..0de78ce 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"身体传感器"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"访问与您的生命体征相关的传感器数据"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>访问与您的生命体征相关的传感器数据吗?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"检索窗口内容"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"检测您正访问的窗口的内容。"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"启用触摸浏览"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"允许该应用调用方法来添加和删除可用的指纹模板。"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"使用指纹硬件"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"允许该应用使用指纹硬件进行身份验证"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"仅检测到部分指纹,请重试。"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"无法处理指纹,请重试。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"指纹传感器有脏污。请擦拭干净,然后重试。"</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"要将<xliff:g id="TYPE">%1$s</xliff:g>保存到<b><xliff:g id="LABEL">%2$s</xliff:g></b>吗?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"要将<xliff:g id="TYPE_0">%1$s</xliff:g>和<xliff:g id="TYPE_1">%2$s</xliff:g>保存到<b><xliff:g id="LABEL">%3$s</xliff:g></b>吗?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"要将<xliff:g id="TYPE_0">%1$s</xliff:g>、<xliff:g id="TYPE_1">%2$s</xliff:g>和<xliff:g id="TYPE_2">%3$s</xliff:g>保存到<b><xliff:g id="LABEL">%4$s</xliff:g></b>吗?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"保存"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"不用了"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"密码"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"地址"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"信用卡"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 0b75202..91633cd 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"人體感應器"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"存取與您生命體徵相關的感應器資料"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>存取與您身體機能相關的感應器資料嗎?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"音樂"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"存取你的音樂"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>存取你的音樂嗎?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"相片和影片"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"存取你的相片和影片"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>存取你的相片和影片嗎?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"擷取視窗內容"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"檢查您使用中的視窗內容。"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"開啟「輕觸探索」功能"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"允許應用程式調用加入和刪除指紋模板的方法以供使用。"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"使用指紋硬件"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"允許應用程式使用指紋硬件驗證"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"讀取你的音樂收藏"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"允許應用程式讀取你的音樂收藏。"</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"修改你的音樂收藏"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"允許應用程式修改你的音樂收藏。"</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"讀取你的影片收藏"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"允許應用程式讀取你的影片收藏。"</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"修改你的影片收藏"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"允許應用程式修改你的影片收藏。"</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"讀取你的相片收藏"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"允許應用程式讀取你的相片收藏。"</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"修改你的相片收藏"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"允許應用程式修改你的相片收藏。"</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"讀取你的媒體收藏的位置資訊"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"允許應用程式讀取你的媒體收藏的位置資訊。"</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"只偵測到部分指紋。請再試一次。"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"無法處理指紋。請再試一次。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"指紋感應器不乾淨。請清潔後再試一次。"</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"要將<xliff:g id="TYPE">%1$s</xliff:g>儲存至「<b><xliff:g id="LABEL">%2$s</xliff:g></b>」嗎?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"要將<xliff:g id="TYPE_0">%1$s</xliff:g>和<xliff:g id="TYPE_1">%2$s</xliff:g>儲存至「<b><xliff:g id="LABEL">%3$s</xliff:g></b>」嗎?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"要將<xliff:g id="TYPE_0">%1$s</xliff:g>、<xliff:g id="TYPE_1">%2$s</xliff:g>和<xliff:g id="TYPE_2">%3$s</xliff:g>儲存至「<b><xliff:g id="LABEL">%4$s</xliff:g></b>」嗎?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"要更新為「<xliff:g id="LABEL">%1$s</xliff:g>」<b></b>嗎?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"要將<xliff:g id="TYPE">%1$s</xliff:g>更新為「<xliff:g id="LABEL">%2$s</xliff:g>」<b></b>嗎?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"要將<xliff:g id="TYPE_0">%1$s</xliff:g>和<xliff:g id="TYPE_1">%2$s</xliff:g>更新為「<xliff:g id="LABEL">%3$s</xliff:g>」<b></b>嗎?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"要將<xliff:g id="TYPE_0">%1$s</xliff:g>、<xliff:g id="TYPE_1">%2$s</xliff:g>和<xliff:g id="TYPE_2">%3$s</xliff:g>更新為「<xliff:g id="LABEL">%4$s</xliff:g>」<b></b>嗎?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"儲存"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"不用了,謝謝"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"更新"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"密碼"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"地址"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"信用卡"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index d130fba..219f137 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -300,6 +300,12 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"人體感應器"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"存取與你生命徵象相關的感應器資料"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」存取與你生命徵象相關的感應器資料嗎?"</string>
+ <string name="permgrouplab_aural" msgid="965607064083134896">"音樂"</string>
+ <string name="permgroupdesc_aural" msgid="4870189506255958055">"存取你的音樂"</string>
+ <string name="permgrouprequest_aural" msgid="6787926123071735620">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>存取你的音樂嗎?"</string>
+ <string name="permgrouplab_visual" msgid="8030190588123857921">"相片和影片"</string>
+ <string name="permgroupdesc_visual" msgid="3415827902566663546">"存取你的相片和影片"</string>
+ <string name="permgrouprequest_visual" msgid="6907523945030290376">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>存取你的相片和影片嗎?"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"擷取視窗內容"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"檢查你存取的視窗內容。"</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"啟用輕觸探索功能"</string>
@@ -494,6 +500,20 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"允許應用程式呼叫方法來新增及移除可用的指紋範本"</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"使用指紋硬體"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"允許應用程式使用指紋硬體進行驗證"</string>
+ <string name="permlab_audioRead" msgid="6617225220728465565">"讀取你的音樂收藏"</string>
+ <string name="permdesc_audioRead" msgid="5034032570243484805">"允許應用程式讀取你的音樂收藏。"</string>
+ <string name="permlab_audioWrite" msgid="2661772059799779292">"修改你的音樂收藏"</string>
+ <string name="permdesc_audioWrite" msgid="8888544708166230494">"允許應用程式修改你的音樂收藏。"</string>
+ <string name="permlab_videoRead" msgid="9182618678674737229">"讀取你的影片收藏"</string>
+ <string name="permdesc_videoRead" msgid="7045676429859396194">"允許應用程式讀取你的影片收藏。"</string>
+ <string name="permlab_videoWrite" msgid="128769316366746446">"修改你的影片收藏"</string>
+ <string name="permdesc_videoWrite" msgid="5448565757490640841">"允許應用程式修改你的影片收藏。"</string>
+ <string name="permlab_imagesRead" msgid="3015078545742665304">"讀取你的相片收藏"</string>
+ <string name="permdesc_imagesRead" msgid="3144263806038695580">"允許應用程式讀取你的相片收藏。"</string>
+ <string name="permlab_imagesWrite" msgid="3391306186247235510">"修改你的相片收藏"</string>
+ <string name="permdesc_imagesWrite" msgid="7073662756617474375">"允許應用程式修改你的相片收藏。"</string>
+ <string name="permlab_mediaLocation" msgid="8675148183726247864">"讀取你的媒體收藏的位置資訊"</string>
+ <string name="permdesc_mediaLocation" msgid="2237023389178865130">"允許應用程式讀取你的媒體收藏的位置資訊。"</string>
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"僅偵測到部分指紋,請再試一次。"</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"無法處理指紋,請再試一次。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"指紋感應器有髒汙。請清潔感應器,然後再試一次。"</string>
@@ -1872,8 +1892,13 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"要將<xliff:g id="TYPE">%1$s</xliff:g>儲存到「<xliff:g id="LABEL">%2$s</xliff:g>」嗎?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"要將<xliff:g id="TYPE_0">%1$s</xliff:g>和<xliff:g id="TYPE_1">%2$s</xliff:g>儲存到「<xliff:g id="LABEL">%3$s</xliff:g>」嗎?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"要將<xliff:g id="TYPE_0">%1$s</xliff:g>、<xliff:g id="TYPE_1">%2$s</xliff:g>和<xliff:g id="TYPE_2">%3$s</xliff:g>儲存到「<xliff:g id="LABEL">%4$s</xliff:g>」嗎?"</string>
+ <string name="autofill_update_title" msgid="4879673117448810818">"要更新為「<xliff:g id="LABEL">%1$s</xliff:g>」<b></b>嗎?"</string>
+ <string name="autofill_update_title_with_type" msgid="339733442087186755">"要將<xliff:g id="TYPE">%1$s</xliff:g>更新為「<xliff:g id="LABEL">%2$s</xliff:g>」<b></b>嗎?"</string>
+ <string name="autofill_update_title_with_2types" msgid="6321714204167424745">"要將<xliff:g id="TYPE_0">%1$s</xliff:g>和<xliff:g id="TYPE_1">%2$s</xliff:g>更新為「<xliff:g id="LABEL">%3$s</xliff:g>」<b></b>嗎?"</string>
+ <string name="autofill_update_title_with_3types" msgid="5866735124066629287">"要將<xliff:g id="TYPE_0">%1$s</xliff:g>、<xliff:g id="TYPE_1">%2$s</xliff:g>和<xliff:g id="TYPE_2">%3$s</xliff:g>更新為「<xliff:g id="LABEL">%4$s</xliff:g>」<b></b>嗎?"</string>
<string name="autofill_save_yes" msgid="6398026094049005921">"儲存"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"不用了,謝謝"</string>
+ <string name="autofill_update_yes" msgid="310358413273276958">"更新"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"密碼"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"地址"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"信用卡"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index fed4824..37a2e20 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -300,6 +300,18 @@
<string name="permgrouplab_sensors" msgid="416037179223226722">"Izinzwa zomzimba"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"finyelela idatha yesizweli mayelana nezimpawu zakho ezibalulekile"</string>
<string name="permgrouprequest_sensors" msgid="6349806962814556786">"Vumela i-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ukuthi ifinyelele kudatha yenzwa emayelana nezimpawu zakho ezibalulekile?"</string>
+ <!-- no translation found for permgrouplab_aural (965607064083134896) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_aural (4870189506255958055) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_aural (6787926123071735620) -->
+ <skip />
+ <!-- no translation found for permgrouplab_visual (8030190588123857921) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_visual (3415827902566663546) -->
+ <skip />
+ <!-- no translation found for permgrouprequest_visual (6907523945030290376) -->
+ <skip />
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Thola okuqukethwe kwewindi"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Hlola okuqukethwe kwewindi ohlanganyela nalo."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Vula ukuhlola ngokuthinta"</string>
@@ -494,6 +506,34 @@
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Ivumela uhlelo lokusebenza ukuthi libuyisele izindlela zokungeza nokususa izifanekiso zezigxivizo zeminwe ngokusetshenziswa."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"sebenzisa izingxenyekazi zekhompyutha zezigxivizo zeminwe"</string>
<string name="permdesc_useFingerprint" msgid="9165097460730684114">"Ivumela uhlelo lokusebenza ukuthi lusebenzise izingxenyekazi zekhompyutha zezigxivizo zeminwe ukuze kuqinisekiswe"</string>
+ <!-- no translation found for permlab_audioRead (6617225220728465565) -->
+ <skip />
+ <!-- no translation found for permdesc_audioRead (5034032570243484805) -->
+ <skip />
+ <!-- no translation found for permlab_audioWrite (2661772059799779292) -->
+ <skip />
+ <!-- no translation found for permdesc_audioWrite (8888544708166230494) -->
+ <skip />
+ <!-- no translation found for permlab_videoRead (9182618678674737229) -->
+ <skip />
+ <!-- no translation found for permdesc_videoRead (7045676429859396194) -->
+ <skip />
+ <!-- no translation found for permlab_videoWrite (128769316366746446) -->
+ <skip />
+ <!-- no translation found for permdesc_videoWrite (5448565757490640841) -->
+ <skip />
+ <!-- no translation found for permlab_imagesRead (3015078545742665304) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesRead (3144263806038695580) -->
+ <skip />
+ <!-- no translation found for permlab_imagesWrite (3391306186247235510) -->
+ <skip />
+ <!-- no translation found for permdesc_imagesWrite (7073662756617474375) -->
+ <skip />
+ <!-- no translation found for permlab_mediaLocation (8675148183726247864) -->
+ <skip />
+ <!-- no translation found for permdesc_mediaLocation (2237023389178865130) -->
+ <skip />
<string name="fingerprint_acquired_partial" msgid="735082772341716043">"Izigxivizo zeminwe ezincane zitholiwe. Sicela uzame futhi."</string>
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Ayikwazanga ukucubungula izigxivizo zeminwe. Sicela uzame futhi."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Inzwa yezigxivizo zeminwe ingcolile. Sicela uyihlanze uphinde uzame futhi."</string>
@@ -1872,8 +1912,18 @@
<string name="autofill_save_title_with_type" msgid="8637809388029313305">"Londoloza i-<xliff:g id="TYPE">%1$s</xliff:g> ku-<b><xliff:g id="LABEL">%2$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Londoloza i-<xliff:g id="TYPE_0">%1$s</xliff:g> ne-<xliff:g id="TYPE_1">%2$s</xliff:g> ku-<b><xliff:g id="LABEL">%3$s</xliff:g></b>?"</string>
<string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Londoloza i-<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, ne-<xliff:g id="TYPE_2">%3$s</xliff:g> ku-<b><xliff:g id="LABEL">%4$s</xliff:g></b>?"</string>
+ <!-- no translation found for autofill_update_title (4879673117448810818) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_type (339733442087186755) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_2types (6321714204167424745) -->
+ <skip />
+ <!-- no translation found for autofill_update_title_with_3types (5866735124066629287) -->
+ <skip />
<string name="autofill_save_yes" msgid="6398026094049005921">"Londoloza"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Cha ngiyabonga"</string>
+ <!-- no translation found for autofill_update_yes (310358413273276958) -->
+ <skip />
<string name="autofill_save_type_password" msgid="5288448918465971568">"iphasiwedi"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ikheli"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ikhadi lesikweletu"</string>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index b15c9c5..c6931aa 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -2988,6 +2988,10 @@
-->
<bool name="config_fillMainBuiltInDisplayCutout">false</bool>
+ <!-- If true, and there is a cutout on the main built in display, the cutout will be masked
+ by shrinking the display such that it does not overlap the cutout area. -->
+ <bool name="config_maskMainBuiltInDisplayCutout">false</bool>
+
<!-- Ultrasound support for Mic/speaker path -->
<!-- Whether the default microphone audio source supports near-ultrasound frequencies
(range of 18 - 21 kHz). -->
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 471170b..73cb59e 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -61,6 +61,15 @@
<!-- Margin at the edge of the screen to ignore touch events for in the windowshade. -->
<dimen name="status_bar_edge_ignore">5dp</dimen>
+ <!-- Default radius of the software rounded corners. -->
+ <dimen name="rounded_corner_radius">0dp</dimen>
+ <!-- Radius of the software rounded corners at the top of the display in its natural
+ orientation. If zero, the value of rounded_corner_radius is used. -->
+ <dimen name="rounded_corner_radius_top">0dp</dimen>
+ <!-- Radius of the software rounded corners at the bottom of the display in its natural
+ orientation. If zero, the value of rounded_corner_radius is used. -->
+ <dimen name="rounded_corner_radius_bottom">0dp</dimen>
+
<!-- Width of the window of the divider bar used to resize docked stacks. -->
<dimen name="docked_stack_divider_thickness">48dp</dimen>
diff --git a/core/res/res/values/styles_package_installer.xml b/core/res/res/values/styles_permission_controller.xml
similarity index 100%
rename from core/res/res/values/styles_package_installer.xml
rename to core/res/res/values/styles_permission_controller.xml
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 2271baa..7fbad16 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3442,6 +3442,8 @@
<java-symbol type="integer" name="config_defaultHapticFeedbackIntensity" />
<java-symbol type="integer" name="config_defaultNotificationVibrationIntensity" />
+ <java-symbol type="bool" name="config_maskMainBuiltInDisplayCutout" />
+
<java-symbol type="array" name="config_disableApksUnlessMatchedSku_apk_list" />
<java-symbol type="array" name="config_disableApkUnlessMatchedSku_skus_list" />
</resources>
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 4833816..090f9af 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -306,6 +306,7 @@
<item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.QuickContactBadgeSmall.WindowLarge</item>
<item name="listPopupWindowStyle">@style/Widget.ListPopupWindow</item>
<item name="popupMenuStyle">@style/Widget.PopupMenu</item>
+ <item name="popupTheme">@null</item>
<item name="activityChooserViewStyle">@style/Widget.ActivityChooserView</item>
<item name="fragmentBreadCrumbsStyle">@style/Widget.FragmentBreadCrumbs</item>
<item name="contextPopupMenuStyle">?attr/popupMenuStyle</item>
diff --git a/core/res/res/values/themes_holo.xml b/core/res/res/values/themes_holo.xml
index cb5b93d..33832d4 100644
--- a/core/res/res/values/themes_holo.xml
+++ b/core/res/res/values/themes_holo.xml
@@ -296,6 +296,7 @@
<item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.Holo.QuickContactBadgeSmall.WindowLarge</item>
<item name="listPopupWindowStyle">@style/Widget.Holo.ListPopupWindow</item>
<item name="popupMenuStyle">@style/Widget.Holo.PopupMenu</item>
+ <item name="popupTheme">@null</item>
<item name="stackViewStyle">@style/Widget.Holo.StackView</item>
<item name="activityChooserViewStyle">@style/Widget.Holo.ActivityChooserView</item>
<item name="fragmentBreadCrumbsStyle">@style/Widget.Holo.FragmentBreadCrumbs</item>
@@ -658,9 +659,11 @@
<item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.Holo.QuickContactBadgeSmall.WindowLarge</item>
<item name="listPopupWindowStyle">@style/Widget.Holo.Light.ListPopupWindow</item>
<item name="popupMenuStyle">@style/Widget.Holo.Light.PopupMenu</item>
+ <item name="popupTheme">@null</item>
<item name="stackViewStyle">@style/Widget.Holo.StackView</item>
<item name="activityChooserViewStyle">@style/Widget.Holo.Light.ActivityChooserView</item>
<item name="fragmentBreadCrumbsStyle">@style/Widget.Holo.Light.FragmentBreadCrumbs</item>
+ <item name="contextPopupMenuStyle">?attr/popupMenuStyle</item>
<!-- Preference styles -->
<item name="preferenceScreenStyle">@style/Preference.Holo.PreferenceScreen</item>
diff --git a/core/res/res/values/themes_package_installer.xml b/core/res/res/values/themes_permission_controller.xml
similarity index 100%
rename from core/res/res/values/themes_package_installer.xml
rename to core/res/res/values/themes_permission_controller.xml
diff --git a/core/tests/coretests/src/android/view/DisplayCutoutTest.java b/core/tests/coretests/src/android/view/DisplayCutoutTest.java
index 6ee74cb..fe45fe7 100644
--- a/core/tests/coretests/src/android/view/DisplayCutoutTest.java
+++ b/core/tests/coretests/src/android/view/DisplayCutoutTest.java
@@ -19,6 +19,7 @@
import static android.view.DisplayCutout.NO_CUTOUT;
import static android.view.DisplayCutout.fromSpec;
+import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.sameInstance;
import static org.junit.Assert.assertEquals;
@@ -220,6 +221,19 @@
}
@Test
+ public void fromSpec_setsSafeInsets_top() {
+ DisplayCutout cutout = fromSpec("M -50,0 v 20 h 100 v -20 z", 200, 400, 2f);
+ assertThat(cutout.getSafeInsets(), equalTo(new Rect(0, 20, 0, 0)));
+ }
+
+ @Test
+ public void fromSpec_setsSafeInsets_top_and_bottom() {
+ DisplayCutout cutout = fromSpec("M -50,0 v 20 h 100 v -20 z"
+ + "@bottom M -50,0 v -10,0 h 100 v 20 z", 200, 400, 2f);
+ assertThat(cutout.getSafeInsets(), equalTo(new Rect(0, 20, 0, 10)));
+ }
+
+ @Test
public void parcel_unparcel_nocutout() {
Parcel p = Parcel.obtain();
diff --git a/graphics/java/android/graphics/fonts/Font.java b/graphics/java/android/graphics/fonts/Font.java
index 9d94a64..f0c5199 100644
--- a/graphics/java/android/graphics/fonts/Font.java
+++ b/graphics/java/android/graphics/fonts/Font.java
@@ -36,11 +36,13 @@
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
+import java.util.Arrays;
+import java.util.Objects;
/**
* A font class can be used for creating FontFamily.
*/
-public class Font {
+public final class Font {
private static final String TAG = "Font";
private static final int NOT_SPECIFIED = -1;
@@ -109,6 +111,7 @@
private @IntRange(from = -1, to = 1) int mItalic = NOT_SPECIFIED;
private @IntRange(from = 0) int mTtcIndex = 0;
private @Nullable FontVariationAxis[] mAxes = null;
+ private @Nullable IOException mException;
/**
* Constructs a builder with a byte buffer.
@@ -132,11 +135,13 @@
*
* @param path a file path to the font file
*/
- public Builder(@NonNull File path) throws IOException {
+ public Builder(@NonNull File path) {
Preconditions.checkNotNull(path, "path can not be null");
try (FileInputStream fis = new FileInputStream(path)) {
final FileChannel fc = fis.getChannel();
mBuffer = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
+ } catch (IOException e) {
+ mException = e;
}
}
@@ -145,7 +150,7 @@
*
* @param fd a file descriptor
*/
- public Builder(@NonNull FileDescriptor fd) throws IOException {
+ public Builder(@NonNull FileDescriptor fd) {
this(fd, 0, -1);
}
@@ -157,11 +162,13 @@
* @param size a size of the font data. If -1 is passed, use until end of the file.
*/
public Builder(@NonNull FileDescriptor fd, @IntRange(from = 0) long offset,
- @IntRange(from = -1) long size) throws IOException {
+ @IntRange(from = -1) long size) {
try (FileInputStream fis = new FileInputStream(fd)) {
final FileChannel fc = fis.getChannel();
size = (size == -1) ? fc.size() - offset : size;
mBuffer = fc.map(FileChannel.MapMode.READ_ONLY, offset, size);
+ } catch (IOException e) {
+ mException = e;
}
}
@@ -171,15 +178,17 @@
* @param am the application's asset manager
* @param path the file name of the font data in the asset directory
*/
- public Builder(@NonNull AssetManager am, @NonNull String path) throws IOException {
+ public Builder(@NonNull AssetManager am, @NonNull String path) {
final long nativeAsset = nGetNativeAsset(am, path, true /* is asset */, 0 /* cookie */);
if (nativeAsset == 0) {
- throw new FileNotFoundException("Unable to open " + path);
+ mException = new FileNotFoundException("Unable to open " + path);
+ return;
}
final ByteBuffer b = nGetAssetBuffer(nativeAsset);
sAssetByteBufferRegistroy.registerNativeAllocation(b, nativeAsset);
if (b == null) {
- throw new FileNotFoundException(path + " not found");
+ mException = new FileNotFoundException(path + " not found");
+ return;
}
mBuffer = b;
}
@@ -192,25 +201,29 @@
* @param res the resource of this application.
* @param resId the resource ID of font file.
*/
- public Builder(@NonNull Resources res, int resId) throws IOException {
+ public Builder(@NonNull Resources res, int resId) {
final TypedValue value = new TypedValue();
res.getValue(resId, value, true);
if (value.string == null) {
- throw new FileNotFoundException(resId + " not found");
+ mException = new FileNotFoundException(resId + " not found");
+ return;
}
final String str = value.string.toString();
if (str.toLowerCase().endsWith(".xml")) {
- throw new FileNotFoundException(resId + " must be font file.");
+ mException = new FileNotFoundException(resId + " must be font file.");
+ return;
}
final long nativeAsset = nGetNativeAsset(res.getAssets(), str, false /* is asset */,
value.assetCookie);
if (nativeAsset == 0) {
- throw new FileNotFoundException("Unable to open " + str);
+ mException = new FileNotFoundException("Unable to open " + str);
+ return;
}
final ByteBuffer b = nGetAssetBuffer(nativeAsset);
sAssetByteBufferRegistroy.registerNativeAllocation(b, nativeAsset);
if (b == null) {
- throw new FileNotFoundException(str + " not found");
+ mException = new FileNotFoundException(str + " not found");
+ return;
}
mBuffer = b;
}
@@ -347,7 +360,7 @@
* @return this builder
*/
public @NonNull Builder setFontVariationSettings(@Nullable FontVariationAxis[] axes) {
- mAxes = axes;
+ mAxes = axes == null ? null : axes.clone();
return this;
}
@@ -355,7 +368,10 @@
* Creates the font based on the configured values.
* @return the Font object
*/
- public @Nullable Font build() {
+ public @Nullable Font build() throws IOException {
+ if (mException != null) {
+ throw new IOException("Failed to read font contents", mException);
+ }
if (mWeight == NOT_SPECIFIED || mItalic == NOT_SPECIFIED) {
final int packed = FontFileUtil.analyzeStyle(mBuffer, mTtcIndex, mAxes);
if (FontFileUtil.isSuccess(packed)) {
@@ -378,7 +394,7 @@
}
}
final long ptr = nBuild(builderPtr, mBuffer, mWeight, italic, mTtcIndex);
- final Font font = new Font(ptr, mWeight, italic, mTtcIndex, mAxes);
+ final Font font = new Font(ptr, mBuffer, mWeight, italic, mTtcIndex, mAxes);
sFontRegistory.registerNativeAllocation(font, ptr);
return font;
}
@@ -405,6 +421,7 @@
}
private final long mNativePtr; // address of the shared ptr of minikin::Font
+ private final @NonNull ByteBuffer mBuffer;
private final @IntRange(from = 0, to = 1000) int mWeight;
private final boolean mItalic;
private final @IntRange(from = 0) int mTtcIndex;
@@ -413,8 +430,10 @@
/**
* Use Builder instead
*/
- private Font(long nativePtr, @IntRange(from = 0, to = 1000) int weight, boolean italic,
+ private Font(long nativePtr, @NonNull ByteBuffer buffer,
+ @IntRange(from = 0, to = 1000) int weight, boolean italic,
@IntRange(from = 0) int ttcIndex, @Nullable FontVariationAxis[] axes) {
+ mBuffer = buffer;
mWeight = weight;
mItalic = italic;
mNativePtr = nativePtr;
@@ -462,7 +481,7 @@
* @return font variation settings
*/
public @Nullable FontVariationAxis[] getAxes() {
- return mAxes;
+ return mAxes == null ? null : mAxes.clone();
}
/** @hide */
@@ -471,6 +490,24 @@
}
@Override
+ public boolean equals(@Nullable Object o) {
+ if (o == this) {
+ return true;
+ }
+ if (o == null || !(o instanceof Font)) {
+ return false;
+ }
+ Font f = (Font) o;
+ return f.mWeight == mWeight && f.mItalic == mItalic && f.mTtcIndex == mTtcIndex
+ && Arrays.equals(f.mAxes, mAxes) && f.mBuffer.equals(mBuffer);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mWeight, mItalic, mTtcIndex, mAxes, mBuffer);
+ }
+
+ @Override
public String toString() {
return "Font {weight=" + mWeight + ", italic=" + mItalic + "}";
}
diff --git a/graphics/java/android/graphics/fonts/FontFamily.java b/graphics/java/android/graphics/fonts/FontFamily.java
index dc213ea..c914ece 100644
--- a/graphics/java/android/graphics/fonts/FontFamily.java
+++ b/graphics/java/android/graphics/fonts/FontFamily.java
@@ -57,7 +57,7 @@
* </p>
*
*/
-public class FontFamily {
+public final class FontFamily {
private static final String TAG = "FontFamily";
/**
@@ -170,7 +170,7 @@
*
* @return the number of fonts registered in this family.
*/
- public int getFontCount() {
+ public int getSize() {
return mFonts.size();
}
diff --git a/graphics/java/android/graphics/fonts/FontVariationAxis.java b/graphics/java/android/graphics/fonts/FontVariationAxis.java
index 2a902c5..242cbb8 100644
--- a/graphics/java/android/graphics/fonts/FontVariationAxis.java
+++ b/graphics/java/android/graphics/fonts/FontVariationAxis.java
@@ -22,6 +22,7 @@
import android.text.TextUtils;
import java.util.ArrayList;
+import java.util.Objects;
import java.util.regex.Pattern;
/**
@@ -186,5 +187,22 @@
}
return TextUtils.join(",", axes);
}
+
+ @Override
+ public boolean equals(@Nullable Object o) {
+ if (o == this) {
+ return true;
+ }
+ if (o == null || !(o instanceof FontVariationAxis)) {
+ return false;
+ }
+ FontVariationAxis axis = (FontVariationAxis) o;
+ return axis.mTag == mTag && axis.mStyleValue == mStyleValue;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mTag, mStyleValue);
+ }
}
diff --git a/graphics/java/android/graphics/fonts/SystemFonts.java b/graphics/java/android/graphics/fonts/SystemFonts.java
index bd49130..26b4ec5 100644
--- a/graphics/java/android/graphics/fonts/SystemFonts.java
+++ b/graphics/java/android/graphics/fonts/SystemFonts.java
@@ -24,6 +24,7 @@
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ArrayUtils;
import org.xmlpull.v1.XmlPullParserException;
@@ -169,12 +170,17 @@
}
}
- final Font font = new Font.Builder(buffer)
- .setWeight(fontConfig.getWeight())
- .setItalic(fontConfig.isItalic())
- .setTtcIndex(fontConfig.getTtcIndex())
- .setFontVariationSettings(fontConfig.getAxes())
- .build();
+ final Font font;
+ try {
+ font = new Font.Builder(buffer)
+ .setWeight(fontConfig.getWeight())
+ .setItalic(fontConfig.isItalic())
+ .setTtcIndex(fontConfig.getTtcIndex())
+ .setFontVariationSettings(fontConfig.getAxes())
+ .build();
+ } catch (IOException e) {
+ throw new RuntimeException(e); // Never reaches here
+ }
if (b == null) {
b = new FontFamily.Builder(font);
@@ -246,7 +252,7 @@
return fontConfig.getAliases();
} catch (IOException | XmlPullParserException e) {
Log.e(TAG, "Failed initialize system fallbacks.", e);
- return null;
+ return ArrayUtils.emptyArray(FontConfig.Alias.class);
}
}
diff --git a/libs/hwui/hwui/AnimatedImageDrawable.cpp b/libs/hwui/hwui/AnimatedImageDrawable.cpp
index 007961a..8d4e7e0 100644
--- a/libs/hwui/hwui/AnimatedImageDrawable.cpp
+++ b/libs/hwui/hwui/AnimatedImageDrawable.cpp
@@ -21,7 +21,8 @@
#include <SkPicture.h>
#include <SkRefCnt.h>
-#include <SkTLazy.h>
+
+#include <optional>
namespace android {
@@ -126,13 +127,13 @@
// Only called on the RenderThread.
void AnimatedImageDrawable::onDraw(SkCanvas* canvas) {
- SkTLazy<SkPaint> lazyPaint;
+ std::optional<SkPaint> lazyPaint;
SkAutoCanvasRestore acr(canvas, false);
if (mProperties.mAlpha != SK_AlphaOPAQUE || mProperties.mColorFilter.get()) {
- lazyPaint.init();
- lazyPaint.get()->setAlpha(mProperties.mAlpha);
- lazyPaint.get()->setColorFilter(mProperties.mColorFilter);
- lazyPaint.get()->setFilterQuality(kLow_SkFilterQuality);
+ lazyPaint.emplace();
+ lazyPaint->setAlpha(mProperties.mAlpha);
+ lazyPaint->setColorFilter(mProperties.mColorFilter);
+ lazyPaint->setFilterQuality(kLow_SkFilterQuality);
}
if (mProperties.mMirrored) {
canvas->save();
@@ -147,8 +148,8 @@
if (drawDirectly) {
// The image is not animating, and never was. Draw directly from
// mSkAnimatedImage.
- if (lazyPaint.isValid()) {
- canvas->saveLayer(mSkAnimatedImage->getBounds(), lazyPaint.get());
+ if (lazyPaint) {
+ canvas->saveLayer(mSkAnimatedImage->getBounds(), &*lazyPaint);
}
std::unique_lock lock{mImageLock};
@@ -193,7 +194,7 @@
if (!drawDirectly) {
// No other thread will modify mCurrentSnap so this should be safe to
// use without locking.
- canvas->drawPicture(mSnapshot.mPic, nullptr, lazyPaint.getMaybeNull());
+ canvas->drawPicture(mSnapshot.mPic, nullptr, lazyPaint ? &*lazyPaint : nullptr);
}
if (finalFrame) {
diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
index 85fdc103..ea14d11 100644
--- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
+++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
@@ -21,6 +21,8 @@
#include "SkiaPipeline.h"
#include "utils/TraceUtils.h"
+#include <optional>
+
namespace android {
namespace uirenderer {
namespace skiapipeline {
@@ -171,9 +173,9 @@
protected:
bool onFilter(SkTCopyOnFirstWrite<SkPaint>* paint, Type t) const override {
- SkTLazy<SkPaint> defaultPaint;
+ std::optional<SkPaint> defaultPaint;
if (!*paint) {
- paint->init(*defaultPaint.init());
+ paint->init(defaultPaint.emplace());
}
paint->writable()->setAlpha((uint8_t)(*paint)->getAlpha() * mAlpha);
return true;
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index a19edae..1517f57 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -25,6 +25,8 @@
#include <GrBackendSurface.h>
#include <GrContext.h>
#include <GrTypes.h>
+#include <GrTypes.h>
+#include <vk/GrVkExtensions.h>
#include <vk/GrVkTypes.h>
namespace android {
@@ -62,7 +64,7 @@
mInstance = VK_NULL_HANDLE;
}
-bool VulkanManager::setupDevice(VkPhysicalDeviceFeatures& deviceFeatures) {
+bool VulkanManager::setupDevice(GrVkExtensions& grExtensions, VkPhysicalDeviceFeatures2& features) {
VkResult err;
constexpr VkApplicationInfo app_info = {
@@ -128,7 +130,7 @@
GET_INST_PROC(DestroyInstance);
GET_INST_PROC(EnumeratePhysicalDevices);
GET_INST_PROC(GetPhysicalDeviceQueueFamilyProperties);
- GET_INST_PROC(GetPhysicalDeviceFeatures);
+ GET_INST_PROC(GetPhysicalDeviceFeatures2);
GET_INST_PROC(CreateDevice);
GET_INST_PROC(EnumerateDeviceExtensionProperties);
GET_INST_PROC(CreateAndroidSurfaceKHR);
@@ -217,11 +219,38 @@
}
}
- // query to get the physical device properties
- mGetPhysicalDeviceFeatures(mPhysicalDevice, &deviceFeatures);
+ auto getProc = [] (const char* proc_name, VkInstance instance, VkDevice device) {
+ if (device != VK_NULL_HANDLE) {
+ return vkGetDeviceProcAddr(device, proc_name);
+ }
+ return vkGetInstanceProcAddr(instance, proc_name);
+ };
+ grExtensions.init(getProc, mInstance, mPhysicalDevice, instanceExtensions.size(),
+ instanceExtensions.data(), deviceExtensions.size(), deviceExtensions.data());
+
+ memset(&features, 0, sizeof(VkPhysicalDeviceFeatures2));
+ features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+ features.pNext = nullptr;
+
+ // Setup all extension feature structs we may want to use.
+ void** tailPNext = &features.pNext;
+
+ if (grExtensions.hasExtension(VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, 2)) {
+ VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* blend;
+ blend = (VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*) malloc(
+ sizeof(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT));
+ LOG_ALWAYS_FATAL_IF(!blend);
+ blend->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT;
+ blend->pNext = nullptr;
+ *tailPNext = blend;
+ tailPNext = &blend->pNext;
+ }
+
+ // query to get the physical device features
+ mGetPhysicalDeviceFeatures2(mPhysicalDevice, &features);
// this looks like it would slow things down,
// and we can't depend on it on all platforms
- deviceFeatures.robustBufferAccess = VK_FALSE;
+ features.features.robustBufferAccess = VK_FALSE;
float queuePriorities[1] = { 0.0 };
@@ -247,7 +276,7 @@
const VkDeviceCreateInfo deviceInfo = {
VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // sType
- nullptr, // pNext
+ &features, // pNext
0, // VkDeviceCreateFlags
queueInfoCount, // queueCreateInfoCount
queueInfo, // pQueueCreateInfos
@@ -255,7 +284,7 @@
nullptr, // ppEnabledLayerNames
(uint32_t) deviceExtensions.size(), // extensionCount
deviceExtensions.data(), // ppEnabledExtensionNames
- &deviceFeatures // ppEnabledFeatures
+ nullptr, // ppEnabledFeatures
};
err = mCreateDevice(mPhysicalDevice, &deviceInfo, nullptr, &mDevice);
@@ -294,33 +323,39 @@
return true;
}
+static void free_features_extensions_structs(const VkPhysicalDeviceFeatures2& features) {
+ // All Vulkan structs that could be part of the features chain will start with the
+ // structure type followed by the pNext pointer. We cast to the CommonVulkanHeader
+ // so we can get access to the pNext for the next struct.
+ struct CommonVulkanHeader {
+ VkStructureType sType;
+ void* pNext;
+ };
+
+ void* pNext = features.pNext;
+ while (pNext) {
+ void* current = pNext;
+ pNext = static_cast<CommonVulkanHeader*>(current)->pNext;
+ free(current);
+ }
+}
+
void VulkanManager::initialize() {
if (mDevice != VK_NULL_HANDLE) {
return;
}
- std::vector<const char*> instanceExtensions;
- std::vector<const char*> deviceExtensions;
- VkPhysicalDeviceFeatures deviceFeatures;
- LOG_ALWAYS_FATAL_IF(!this->setupDevice(deviceFeatures));
+ GET_PROC(EnumerateInstanceVersion);
+ uint32_t instanceVersion = 0;
+ LOG_ALWAYS_FATAL_IF(mEnumerateInstanceVersion(&instanceVersion));
+ LOG_ALWAYS_FATAL_IF(instanceVersion < VK_MAKE_VERSION(1, 1, 0));
+
+ GrVkExtensions extensions;
+ VkPhysicalDeviceFeatures2 features;
+ LOG_ALWAYS_FATAL_IF(!this->setupDevice(extensions, features));
mGetDeviceQueue(mDevice, mGraphicsQueueIndex, 0, &mGraphicsQueue);
- uint32_t extensionFlags = kKHR_surface_GrVkExtensionFlag |
- kKHR_android_surface_GrVkExtensionFlag |
- kKHR_swapchain_GrVkExtensionFlag;
-
- uint32_t featureFlags = 0;
- if (deviceFeatures.geometryShader) {
- featureFlags |= kGeometryShader_GrVkFeatureFlag;
- }
- if (deviceFeatures.dualSrcBlend) {
- featureFlags |= kDualSrcBlend_GrVkFeatureFlag;
- }
- if (deviceFeatures.sampleRateShading) {
- featureFlags |= kSampleRateShading_GrVkFeatureFlag;
- }
-
auto getProc = [] (const char* proc_name, VkInstance instance, VkDevice device) {
if (device != VK_NULL_HANDLE) {
return vkGetDeviceProcAddr(device, proc_name);
@@ -334,11 +369,10 @@
backendContext.fDevice = mDevice;
backendContext.fQueue = mGraphicsQueue;
backendContext.fGraphicsQueueIndex = mGraphicsQueueIndex;
- backendContext.fMinAPIVersion = VK_MAKE_VERSION(1, 0, 0);
- backendContext.fExtensions = extensionFlags;
- backendContext.fFeatures = featureFlags;
+ backendContext.fInstanceVersion = instanceVersion;
+ backendContext.fVkExtensions = &extensions;
+ backendContext.fDeviceFeatures2 = &features;
backendContext.fGetProc = std::move(getProc);
- backendContext.fOwnsInstanceAndDevice = false;
// create the command pool for the command buffers
if (VK_NULL_HANDLE == mCommandPool) {
@@ -361,6 +395,9 @@
sk_sp<GrContext> grContext(GrContext::MakeVulkan(backendContext, options));
LOG_ALWAYS_FATAL_IF(!grContext.get());
mRenderThread.setGrContext(grContext);
+
+ free_features_extensions_structs(features);
+
DeviceInfo::initialize(mRenderThread.getGrContext()->maxRenderTargetSize());
if (Properties::enablePartialUpdates && Properties::useBufferAge) {
diff --git a/libs/hwui/renderthread/VulkanManager.h b/libs/hwui/renderthread/VulkanManager.h
index 69641d5..5524c39 100644
--- a/libs/hwui/renderthread/VulkanManager.h
+++ b/libs/hwui/renderthread/VulkanManager.h
@@ -25,6 +25,8 @@
#include <SkSurface.h>
#include <vk/GrVkBackendContext.h>
+class GrVkExtensions;
+
namespace android {
namespace uirenderer {
namespace renderthread {
@@ -116,7 +118,7 @@
// Sets up the VkInstance and VkDevice objects. Also fills out the passed in
// VkPhysicalDeviceFeatures struct.
- bool setupDevice(VkPhysicalDeviceFeatures& deviceFeatures);
+ bool setupDevice(GrVkExtensions&, VkPhysicalDeviceFeatures2&);
void destroyBuffers(VulkanSurface* surface);
@@ -156,13 +158,14 @@
VkPtr<PFN_vkCreateSharedSwapchainsKHR> mCreateSharedSwapchainsKHR;
// Instance Functions
+ VkPtr<PFN_vkEnumerateInstanceVersion> mEnumerateInstanceVersion;
VkPtr<PFN_vkEnumerateInstanceExtensionProperties> mEnumerateInstanceExtensionProperties;
VkPtr<PFN_vkCreateInstance> mCreateInstance;
VkPtr<PFN_vkDestroyInstance> mDestroyInstance;
VkPtr<PFN_vkEnumeratePhysicalDevices> mEnumeratePhysicalDevices;
VkPtr<PFN_vkGetPhysicalDeviceQueueFamilyProperties> mGetPhysicalDeviceQueueFamilyProperties;
- VkPtr<PFN_vkGetPhysicalDeviceFeatures> mGetPhysicalDeviceFeatures;
+ VkPtr<PFN_vkGetPhysicalDeviceFeatures2> mGetPhysicalDeviceFeatures2;
VkPtr<PFN_vkCreateDevice> mCreateDevice;
VkPtr<PFN_vkEnumerateDeviceExtensionProperties> mEnumerateDeviceExtensionProperties;
diff --git a/location/java/com/android/internal/location/ProviderRequest.java b/location/java/com/android/internal/location/ProviderRequest.java
index 45fdb76..88919f6 100644
--- a/location/java/com/android/internal/location/ProviderRequest.java
+++ b/location/java/com/android/internal/location/ProviderRequest.java
@@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.util.List;
+import android.annotation.UnsupportedAppUsage;
import android.location.LocationRequest;
import android.os.Parcel;
import android.os.Parcelable;
@@ -27,9 +28,11 @@
/** @hide */
public final class ProviderRequest implements Parcelable {
/** Location reporting is requested (true) */
+ @UnsupportedAppUsage
public boolean reportLocation = false;
/** The smallest requested interval */
+ @UnsupportedAppUsage
public long interval = Long.MAX_VALUE;
/**
@@ -45,8 +48,10 @@
* is a high power slow interval request and a
* low power fast interval request.
*/
+ @UnsupportedAppUsage
public List<LocationRequest> locationRequests = new ArrayList<LocationRequest>();
+ @UnsupportedAppUsage
public ProviderRequest() {
}
diff --git a/media/OWNERS b/media/OWNERS
index 182f661..1ae2a7b 100644
--- a/media/OWNERS
+++ b/media/OWNERS
@@ -1,5 +1,8 @@
elaurent@google.com
etalvala@google.com
+gkasten@google.com
+hunga@google.com
+jmtrivi@google.com
lajos@google.com
marcone@google.com
sungsoo@google.com
diff --git a/media/java/android/media/AmrInputStream.java b/media/java/android/media/AmrInputStream.java
index efaf224..5088798 100644
--- a/media/java/android/media/AmrInputStream.java
+++ b/media/java/android/media/AmrInputStream.java
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.nio.ByteBuffer;
+import android.annotation.UnsupportedAppUsage;
import android.media.MediaCodec.BufferInfo;
import android.util.Log;
@@ -53,6 +54,7 @@
/**
* DO NOT USE - use MediaCodec instead
*/
+ @UnsupportedAppUsage
public AmrInputStream(InputStream inputStream) {
Log.w(TAG, "@@@@ AmrInputStream is not a public API @@@@");
mInputStream = inputStream;
diff --git a/media/java/android/media/AsyncPlayer.java b/media/java/android/media/AsyncPlayer.java
index c1a178a..8ac2655 100644
--- a/media/java/android/media/AsyncPlayer.java
+++ b/media/java/android/media/AsyncPlayer.java
@@ -17,6 +17,7 @@
package android.media;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.media.PlayerBase;
import android.net.Uri;
@@ -248,6 +249,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setUsesWakeLock(Context context) {
if (mWakeLock != null || mThread != null) {
// if either of these has happened, we've already played something.
diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java
index 9152ff2..e8bc622 100644
--- a/media/java/android/media/AudioAttributes.java
+++ b/media/java/android/media/AudioAttributes.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -372,11 +373,16 @@
private final static int FLAG_ALL_PUBLIC = FLAG_AUDIBILITY_ENFORCED |
FLAG_HW_AV_SYNC | FLAG_LOW_LATENCY;
+ @UnsupportedAppUsage
private int mUsage = USAGE_UNKNOWN;
+ @UnsupportedAppUsage
private int mContentType = CONTENT_TYPE_UNKNOWN;
+ @UnsupportedAppUsage
private int mSource = MediaRecorder.AudioSource.AUDIO_SOURCE_INVALID;
+ @UnsupportedAppUsage
private int mFlags = 0x0;
private HashSet<String> mTags;
+ @UnsupportedAppUsage
private String mFormattedTags;
private Bundle mBundle; // lazy-initialized, may be null
@@ -646,6 +652,7 @@
* @param tag
* @return the same Builder instance.
*/
+ @UnsupportedAppUsage
public Builder addTag(String tag) {
mTags.add(tag);
return this;
@@ -675,6 +682,7 @@
* @param streamType
* @return the same Builder instance.
*/
+ @UnsupportedAppUsage
public Builder setInternalLegacyStreamType(int streamType) {
switch(streamType) {
case AudioSystem.STREAM_VOICE_CALL:
@@ -1016,6 +1024,7 @@
* @param aa non-null AudioAttributes.
* @return a valid stream type for volume control that matches the attributes.
*/
+ @UnsupportedAppUsage
public static int toLegacyStreamType(@NonNull AudioAttributes aa) {
return toVolumeStreamType(false /*fromGetVolumeControlStream*/, aa);
}
diff --git a/media/java/android/media/AudioDevicePort.java b/media/java/android/media/AudioDevicePort.java
index aea39a3..62b18cb 100644
--- a/media/java/android/media/AudioDevicePort.java
+++ b/media/java/android/media/AudioDevicePort.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.media.AudioSystem;
/**
@@ -36,6 +37,7 @@
private final int mType;
private final String mAddress;
+ @UnsupportedAppUsage
AudioDevicePort(AudioHandle handle, String deviceName,
int[] samplingRates, int[] channelMasks, int[] channelIndexMasks,
int[] formats, AudioGain[] gains, int type, String address) {
@@ -50,6 +52,7 @@
/**
* Get the device type (e.g AudioManager.DEVICE_OUT_SPEAKER)
*/
+ @UnsupportedAppUsage
public int type() {
return mType;
}
diff --git a/media/java/android/media/AudioDevicePortConfig.java b/media/java/android/media/AudioDevicePortConfig.java
index e468a53..0c647ea 100644
--- a/media/java/android/media/AudioDevicePortConfig.java
+++ b/media/java/android/media/AudioDevicePortConfig.java
@@ -16,6 +16,8 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
+
/**
* An AudioDevicePortConfig describes a possible configuration of an output or input device
* (speaker, headphone, microphone ...).
@@ -26,6 +28,7 @@
*/
public class AudioDevicePortConfig extends AudioPortConfig {
+ @UnsupportedAppUsage
AudioDevicePortConfig(AudioDevicePort devicePort, int samplingRate, int channelMask,
int format, AudioGainConfig gain) {
super((AudioPort)devicePort, samplingRate, channelMask, format, gain);
diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java
index 1030d9d..38204a5 100644
--- a/media/java/android/media/AudioFormat.java
+++ b/media/java/android/media/AudioFormat.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -663,6 +664,7 @@
*/
// Update sound trigger JNI in core/jni/android_hardware_SoundTrigger.cpp when modifying this
// constructor
+ @UnsupportedAppUsage
private AudioFormat(int encoding, int sampleRate, int channelMask, int channelIndexMask) {
mEncoding = encoding;
mSampleRate = sampleRate;
@@ -685,8 +687,11 @@
/** @hide */
public final static int AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_INDEX_MASK = 0x1 << 3;
+ @UnsupportedAppUsage
private int mEncoding;
+ @UnsupportedAppUsage
private int mSampleRate;
+ @UnsupportedAppUsage
private int mChannelMask;
private int mChannelIndexMask;
private int mPropertySetMask;
diff --git a/media/java/android/media/AudioGain.java b/media/java/android/media/AudioGain.java
index 57709d5..dd129a2 100644
--- a/media/java/android/media/AudioGain.java
+++ b/media/java/android/media/AudioGain.java
@@ -16,6 +16,8 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
+
/**
* The AudioGain describes a gain controller. Gain controllers are exposed by
* audio ports when the gain is configurable at this port's input or output.
@@ -69,6 +71,7 @@
// The channel mask passed to the constructor is as specified in AudioFormat
// (e.g. AudioFormat.CHANNEL_OUT_STEREO)
+ @UnsupportedAppUsage
AudioGain(int index, int mode, int channelMask,
int minValue, int maxValue, int defaultValue, int stepValue,
int rampDurationMinMs, int rampDurationMaxMs) {
diff --git a/media/java/android/media/AudioGainConfig.java b/media/java/android/media/AudioGainConfig.java
index ea61679..f5ebef8 100644
--- a/media/java/android/media/AudioGainConfig.java
+++ b/media/java/android/media/AudioGainConfig.java
@@ -16,6 +16,8 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
+
/**
* The AudioGainConfig is used by APIs setting or getting values on a given gain
* controller. It contains a valid configuration (value, channels...) for a gain controller
@@ -26,12 +28,18 @@
*/
public class AudioGainConfig {
AudioGain mGain;
+ @UnsupportedAppUsage
private final int mIndex;
+ @UnsupportedAppUsage
private final int mMode;
+ @UnsupportedAppUsage
private final int mChannelMask;
+ @UnsupportedAppUsage
private final int mValues[];
+ @UnsupportedAppUsage
private final int mRampDurationMs;
+ @UnsupportedAppUsage
AudioGainConfig(int index, AudioGain gain, int mode, int channelMask,
int[] values, int rampDurationMs) {
mIndex = index;
diff --git a/media/java/android/media/AudioHandle.java b/media/java/android/media/AudioHandle.java
index 6493dac..24f81f9 100644
--- a/media/java/android/media/AudioHandle.java
+++ b/media/java/android/media/AudioHandle.java
@@ -16,6 +16,8 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
+
/**
* The AudioHandle is used by the audio framework implementation to
* uniquely identify a particular component of the routing topology
@@ -23,8 +25,10 @@
* It is not visible or used at the API.
*/
class AudioHandle {
+ @UnsupportedAppUsage
private final int mId;
+ @UnsupportedAppUsage
AudioHandle(int id) {
mId = id;
}
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 1a282b2..85eac4b 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -25,6 +25,7 @@
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.bluetooth.BluetoothDevice;
@@ -154,6 +155,7 @@
* @see #EXTRA_PREV_VOLUME_STREAM_VALUE
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ @UnsupportedAppUsage
public static final String VOLUME_CHANGED_ACTION = "android.media.VOLUME_CHANGED_ACTION";
/**
@@ -220,6 +222,7 @@
/**
* @hide The stream type for the volume changed intent.
*/
+ @UnsupportedAppUsage
public static final String EXTRA_VOLUME_STREAM_TYPE = "android.media.EXTRA_VOLUME_STREAM_TYPE";
/**
@@ -236,6 +239,7 @@
/**
* @hide The volume associated with the stream for the volume changed intent.
*/
+ @UnsupportedAppUsage
public static final String EXTRA_VOLUME_STREAM_VALUE =
"android.media.EXTRA_VOLUME_STREAM_VALUE";
@@ -342,14 +346,17 @@
public static final int STREAM_NOTIFICATION = AudioSystem.STREAM_NOTIFICATION;
/** @hide Used to identify the volume of audio streams for phone calls when connected
* to bluetooth */
+ @UnsupportedAppUsage
public static final int STREAM_BLUETOOTH_SCO = AudioSystem.STREAM_BLUETOOTH_SCO;
/** @hide Used to identify the volume of audio streams for enforced system sounds
* in certain countries (e.g camera in Japan) */
+ @UnsupportedAppUsage
public static final int STREAM_SYSTEM_ENFORCED = AudioSystem.STREAM_SYSTEM_ENFORCED;
/** Used to identify the volume of audio streams for DTMF Tones */
public static final int STREAM_DTMF = AudioSystem.STREAM_DTMF;
/** @hide Used to identify the volume of audio streams exclusively transmitted through the
* speaker (TTS) of the device */
+ @UnsupportedAppUsage
public static final int STREAM_TTS = AudioSystem.STREAM_TTS;
/** Used to identify the volume of audio streams for accessibility prompts */
public static final int STREAM_ACCESSIBILITY = AudioSystem.STREAM_ACCESSIBILITY;
@@ -675,6 +682,7 @@
* @hide
* For test purposes only, will throw NPE with some methods that require a Context.
*/
+ @UnsupportedAppUsage
public AudioManager() {
mUseVolumeKeySounds = true;
mUseFixedVolume = false;
@@ -683,6 +691,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public AudioManager(Context context) {
setContext(context);
mUseVolumeKeySounds = getContext().getResources().getBoolean(
@@ -710,6 +719,7 @@
}
}
+ @UnsupportedAppUsage
private static IAudioService getService()
{
if (sService != null) {
@@ -880,6 +890,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void setMasterMute(boolean mute, int flags) {
final IAudioService service = getService();
try {
@@ -914,6 +925,7 @@
* @see #setRingerMode(int)
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isValidRingerMode(int ringerMode) {
if (ringerMode < 0 || ringerMode > RINGER_MODE_MAX) {
return false;
@@ -1062,6 +1074,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getLastAudibleStreamVolume(int streamType) {
final IAudioService service = getService();
try {
@@ -1222,6 +1235,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isMasterMute() {
final IAudioService service = getService();
try {
@@ -1239,6 +1253,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
+ @UnsupportedAppUsage
public void forceVolumeControlStream(int streamType) {
final IAudioService service = getService();
try {
@@ -1531,6 +1546,7 @@
* @see #stopBluetoothSco()
* @see #ACTION_SCO_AUDIO_STATE_UPDATED
*/
+ @UnsupportedAppUsage
public void startBluetoothScoVirtualCall() {
final IAudioService service = getService();
try {
@@ -1854,6 +1870,7 @@
* display). Note that BT audio sinks are not considered remote devices.
* @return true if {@link AudioManager#STREAM_MUSIC} is active on a remote device
*/
+ @UnsupportedAppUsage
public boolean isMusicActiveRemotely() {
return AudioSystem.isStreamActiveRemotely(STREAM_MUSIC, 0);
}
@@ -2004,6 +2021,7 @@
/**
* @hide Number of sound effects
*/
+ @UnsupportedAppUsage
public static final int NUM_SOUND_EFFECTS = 10;
/**
@@ -2234,6 +2252,7 @@
* Map to convert focus event listener IDs, as used in the AudioService audio focus stack,
* to actual listener objects.
*/
+ @UnsupportedAppUsage
private final ConcurrentHashMap<String, FocusRequestInfo> mAudioFocusIdListenerMap =
new ConcurrentHashMap<String, FocusRequestInfo>();
@@ -2810,6 +2829,7 @@
* @param durationHint the type of focus request. AUDIOFOCUS_GAIN_TRANSIENT is recommended so
* media applications resume after a call
*/
+ @UnsupportedAppUsage
public void requestAudioFocusForCall(int streamType, int durationHint) {
final IAudioService service = getService();
try {
@@ -2913,6 +2933,7 @@
* when ringing ends and the call is rejected or not answered.
* Should match one or more calls to {@link #requestAudioFocusForCall(int, int)}.
*/
+ @UnsupportedAppUsage
public void abandonAudioFocusForCall() {
final IAudioService service = getService();
try {
@@ -3582,6 +3603,7 @@
* agent when audio settings are restored and causes the AudioService
* to read and apply restored settings.
*/
+ @UnsupportedAppUsage
public void reloadAudioSettings() {
final IAudioService service = getService();
try {
@@ -3620,6 +3642,7 @@
*
* @hide pending API Council approval
*/
+ @UnsupportedAppUsage
public boolean isSilentMode() {
int ringerMode = getRingerMode();
boolean silentMode =
@@ -3641,15 +3664,19 @@
* such as earbuds, earphones, or in-ear monitors (IEM). Those would be handled as a
* {@link #DEVICE_OUT_WIRED_HEADPHONE}.
*/
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_EARPIECE = AudioSystem.DEVICE_OUT_EARPIECE;
/** @hide
* The audio output device code for the built-in speaker */
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_SPEAKER = AudioSystem.DEVICE_OUT_SPEAKER;
/** @hide
* The audio output device code for a wired headset with attached microphone */
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_WIRED_HEADSET = AudioSystem.DEVICE_OUT_WIRED_HEADSET;
/** @hide
* The audio output device code for a wired headphone without attached microphone */
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_WIRED_HEADPHONE = AudioSystem.DEVICE_OUT_WIRED_HEADPHONE;
/** @hide
* The audio output device code for a USB headphone with attached microphone */
@@ -3661,6 +3688,7 @@
* The audio output device code for Bluetooth SCO Headset Profile (HSP) and
* Hands-Free Profile (HFP), for voice
*/
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_BLUETOOTH_SCO_HEADSET =
AudioSystem.DEVICE_OUT_BLUETOOTH_SCO_HEADSET;
/** @hide
@@ -3669,13 +3697,16 @@
AudioSystem.DEVICE_OUT_BLUETOOTH_SCO_CARKIT;
/** @hide
* The audio output device code for generic Bluetooth A2DP, for music */
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_BLUETOOTH_A2DP = AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP;
/** @hide
* The audio output device code for Bluetooth A2DP headphones, for music */
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES =
AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES;
/** @hide
* The audio output device code for Bluetooth A2DP external speaker, for music */
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER =
AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER;
/** @hide
@@ -3684,16 +3715,19 @@
public static final int DEVICE_OUT_AUX_DIGITAL = AudioSystem.DEVICE_OUT_AUX_DIGITAL;
/** @hide
* The audio output device code for HDMI */
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_HDMI = AudioSystem.DEVICE_OUT_HDMI;
/** @hide
* The audio output device code for an analog wired headset attached via a
* docking station
*/
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_ANLG_DOCK_HEADSET = AudioSystem.DEVICE_OUT_ANLG_DOCK_HEADSET;
/** @hide
* The audio output device code for a digital wired headset attached via a
* docking station
*/
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_DGTL_DOCK_HEADSET = AudioSystem.DEVICE_OUT_DGTL_DOCK_HEADSET;
/** @hide
* The audio output device code for a USB audio accessory. The accessory is in USB host
@@ -3872,6 +3906,7 @@
*
* {@hide}
*/
+ @UnsupportedAppUsage
public int getDevicesForStream(int streamType) {
switch (streamType) {
case STREAM_VOICE_CALL:
@@ -3895,6 +3930,7 @@
* @param name device name
* {@hide}
*/
+ @UnsupportedAppUsage
public void setWiredDeviceConnectionState(int type, int state, String address, String name) {
final IAudioService service = getService();
try {
@@ -4079,6 +4115,7 @@
* a better solution.
* @hide
*/
+ @UnsupportedAppUsage
public int getOutputLatency(int streamType) {
return AudioSystem.getOutputLatency(streamType);
}
@@ -4150,6 +4187,7 @@
* Only useful for volume controllers.
* @hide
*/
+ @UnsupportedAppUsage
public void setRingerModeInternal(int ringerMode) {
try {
getService().setRingerModeInternal(ringerMode, getContext().getOpPackageName());
@@ -4162,6 +4200,7 @@
* Only useful for volume controllers.
* @hide
*/
+ @UnsupportedAppUsage
public int getRingerModeInternal() {
try {
return getService().getRingerModeInternal();
@@ -4251,6 +4290,7 @@
* @param ports An AudioPort ArrayList where the list will be returned.
* @hide
*/
+ @UnsupportedAppUsage
public static int listAudioPorts(ArrayList<AudioPort> ports) {
return updateAudioPortCache(ports, null, null);
}
@@ -4332,6 +4372,7 @@
* patch[0] contains the newly created patch
* @hide
*/
+ @UnsupportedAppUsage
public static int createAudioPatch(AudioPatch[] patch,
AudioPortConfig[] sources,
AudioPortConfig[] sinks) {
@@ -4349,6 +4390,7 @@
* - {@link #ERROR} if patch cannot be released for any other reason.
* @hide
*/
+ @UnsupportedAppUsage
public static int releaseAudioPatch(AudioPatch patch) {
return AudioSystem.releaseAudioPatch(patch);
}
@@ -4358,6 +4400,7 @@
* @param patches An AudioPatch array where the list will be returned.
* @hide
*/
+ @UnsupportedAppUsage
public static int listAudioPatches(ArrayList<AudioPatch> patches) {
return updateAudioPortCache(null, patches, null);
}
@@ -4406,6 +4449,7 @@
* Register an audio port list update listener.
* @hide
*/
+ @UnsupportedAppUsage
public void registerAudioPortUpdateListener(OnAudioPortUpdateListener l) {
sAudioPortEventHandler.init();
sAudioPortEventHandler.registerListener(l);
@@ -4415,6 +4459,7 @@
* Unregister an audio port list update listener.
* @hide
*/
+ @UnsupportedAppUsage
public void unregisterAudioPortUpdateListener(OnAudioPortUpdateListener l) {
sAudioPortEventHandler.unregisterListener(l);
}
diff --git a/media/java/android/media/AudioMixPort.java b/media/java/android/media/AudioMixPort.java
index ba144bf..c4a5c4d 100644
--- a/media/java/android/media/AudioMixPort.java
+++ b/media/java/android/media/AudioMixPort.java
@@ -16,6 +16,8 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
+
/**
* The AudioMixPort is a specialized type of AudioPort
* describing an audio mix or stream at an input or output stream of the audio
@@ -30,6 +32,7 @@
private final int mIoHandle;
+ @UnsupportedAppUsage
AudioMixPort(AudioHandle handle, int ioHandle, int role, String deviceName,
int[] samplingRates, int[] channelMasks, int[] channelIndexMasks,
int[] formats, AudioGain[] gains) {
@@ -50,6 +53,7 @@
/**
* Get the device type (e.g AudioManager.DEVICE_OUT_SPEAKER)
*/
+ @UnsupportedAppUsage
public int ioHandle() {
return mIoHandle;
}
diff --git a/media/java/android/media/AudioMixPortConfig.java b/media/java/android/media/AudioMixPortConfig.java
index 8eb9ef46..315e46b 100644
--- a/media/java/android/media/AudioMixPortConfig.java
+++ b/media/java/android/media/AudioMixPortConfig.java
@@ -16,6 +16,8 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
+
/**
* An AudioMixPortConfig describes a possible configuration of an output or input mixer.
* It is used to specify a sink or source when creating a connection with
@@ -26,6 +28,7 @@
public class AudioMixPortConfig extends AudioPortConfig {
+ @UnsupportedAppUsage
AudioMixPortConfig(AudioMixPort mixPort, int samplingRate, int channelMask, int format,
AudioGainConfig gain) {
super((AudioPort)mixPort, samplingRate, channelMask, format, gain);
diff --git a/media/java/android/media/AudioPatch.java b/media/java/android/media/AudioPatch.java
index 6c70213..d1f8006 100644
--- a/media/java/android/media/AudioPatch.java
+++ b/media/java/android/media/AudioPatch.java
@@ -16,6 +16,8 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
+
/**
* An AudioPatch describes a connection between audio sources and audio sinks.
@@ -29,10 +31,12 @@
*/
public class AudioPatch {
+ @UnsupportedAppUsage
private final AudioHandle mHandle;
private final AudioPortConfig[] mSources;
private final AudioPortConfig[] mSinks;
+ @UnsupportedAppUsage
AudioPatch(AudioHandle patchHandle, AudioPortConfig[] sources, AudioPortConfig[] sinks) {
mHandle = patchHandle;
mSources = sources;
@@ -42,6 +46,7 @@
/**
* Retrieve the list of sources of this audio patch.
*/
+ @UnsupportedAppUsage
public AudioPortConfig[] sources() {
return mSources;
}
@@ -49,6 +54,7 @@
/**
* Retreive the list of sinks of this audio patch.
*/
+ @UnsupportedAppUsage
public AudioPortConfig[] sinks() {
return mSinks;
}
diff --git a/media/java/android/media/AudioPort.java b/media/java/android/media/AudioPort.java
index 047db19..83eb240 100644
--- a/media/java/android/media/AudioPort.java
+++ b/media/java/android/media/AudioPort.java
@@ -16,6 +16,8 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
+
/**
* An audio port is a node of the audio framework or hardware that can be connected to or
* disconnect from another audio node to create a specific audio routing configuration.
@@ -66,16 +68,21 @@
public static final int TYPE_SESSION = 3;
+ @UnsupportedAppUsage
AudioHandle mHandle;
+ @UnsupportedAppUsage
protected final int mRole;
private final String mName;
private final int[] mSamplingRates;
private final int[] mChannelMasks;
private final int[] mChannelIndexMasks;
private final int[] mFormats;
+ @UnsupportedAppUsage
private final AudioGain[] mGains;
+ @UnsupportedAppUsage
private AudioPortConfig mActiveConfig;
+ @UnsupportedAppUsage
AudioPort(AudioHandle handle, int role, String name,
int[] samplingRates, int[] channelMasks, int[] channelIndexMasks,
int[] formats, AudioGain[] gains) {
@@ -97,6 +104,7 @@
/**
* Get the system unique device ID.
*/
+ @UnsupportedAppUsage
public int id() {
return mHandle.id();
}
@@ -105,6 +113,7 @@
/**
* Get the audio port role
*/
+ @UnsupportedAppUsage
public int role() {
return mRole;
}
diff --git a/media/java/android/media/AudioPortConfig.java b/media/java/android/media/AudioPortConfig.java
index f937cc2..45e49a7 100644
--- a/media/java/android/media/AudioPortConfig.java
+++ b/media/java/android/media/AudioPortConfig.java
@@ -16,6 +16,8 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
+
/**
* An AudioPortConfig contains a possible configuration of an audio port chosen
* among all possible attributes described by an AudioPort.
@@ -30,10 +32,15 @@
*/
public class AudioPortConfig {
+ @UnsupportedAppUsage
final AudioPort mPort;
+ @UnsupportedAppUsage
private final int mSamplingRate;
+ @UnsupportedAppUsage
private final int mChannelMask;
+ @UnsupportedAppUsage
private final int mFormat;
+ @UnsupportedAppUsage
private final AudioGainConfig mGain;
// mConfigMask indicates which fields in this configuration should be
@@ -43,8 +50,10 @@
static final int CHANNEL_MASK = 0x2;
static final int FORMAT = 0x4;
static final int GAIN = 0x8;
+ @UnsupportedAppUsage
int mConfigMask;
+ @UnsupportedAppUsage
AudioPortConfig(AudioPort port, int samplingRate, int channelMask, int format,
AudioGainConfig gain) {
mPort = port;
@@ -58,6 +67,7 @@
/**
* Returns the audio port this AudioPortConfig is issued from.
*/
+ @UnsupportedAppUsage
public AudioPort port() {
return mPort;
}
diff --git a/media/java/android/media/AudioPortEventHandler.java b/media/java/android/media/AudioPortEventHandler.java
index ac3904a..f9a4b1e 100644
--- a/media/java/android/media/AudioPortEventHandler.java
+++ b/media/java/android/media/AudioPortEventHandler.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
@@ -48,6 +49,7 @@
* Accessed by native methods: JNI Callback context.
*/
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private long mJniCallback;
void init() {
@@ -170,6 +172,7 @@
}
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private static void postEventFromNative(Object module_ref,
int what, int arg1, int arg2, Object obj) {
AudioPortEventHandler eventHandler =
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index 54800ae..452ba0f 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -29,6 +29,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.os.Binder;
import android.os.Handler;
@@ -157,18 +158,21 @@
* Accessed by native methods: provides access to C++ AudioRecord object
*/
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private long mNativeRecorderInJavaObj;
/**
* Accessed by native methods: provides access to the callback data.
*/
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private long mNativeCallbackCookie;
/**
* Accessed by native methods: provides access to the JNIDeviceCallback instance.
*/
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private long mNativeDeviceCallback;
@@ -233,6 +237,7 @@
/**
* Looper associated with the thread that creates the AudioRecord instance
*/
+ @UnsupportedAppUsage
private Looper mInitializationLooper = null;
/**
* Size of the native audio buffer.
@@ -245,6 +250,7 @@
/**
* AudioAttributes
*/
+ @UnsupportedAppUsage
private AudioAttributes mAudioAttributes;
private boolean mIsSubmixFullVolume = false;
@@ -1720,6 +1726,7 @@
// Java methods called from the native side
//--------------------
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private static void postEventFromNative(Object audiorecord_ref,
int what, int arg1, int arg2, Object obj) {
//logd("Event posted from the native side: event="+ what + " args="+ arg1+" "+arg2);
@@ -1746,6 +1753,7 @@
// Native methods called from the Java side
//--------------------
+ @UnsupportedAppUsage
private native final int native_setup(Object audiorecord_this,
Object /*AudioAttributes*/ attributes,
int[] sampleRate, int channelMask, int channelIndexMask, int audioFormat,
@@ -1758,6 +1766,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public native final void native_release();
private native final int native_start(int syncEvent, int sessionId);
diff --git a/media/java/android/media/AudioRecordingConfiguration.java b/media/java/android/media/AudioRecordingConfiguration.java
index 984c554..9ada216 100644
--- a/media/java/android/media/AudioRecordingConfiguration.java
+++ b/media/java/android/media/AudioRecordingConfiguration.java
@@ -18,6 +18,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
@@ -173,6 +174,7 @@
* <br>When called without the permission, the result is an empty string.
* @return the package name
*/
+ @UnsupportedAppUsage
public String getClientPackageName() { return mClientPackageName; }
/**
@@ -184,6 +186,7 @@
* <br>The result is -1 without the permission.
* @return the user id
*/
+ @UnsupportedAppUsage
public int getClientUid() { return mClientUid; }
/**
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 7c893d0..39f3b31 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -17,6 +17,7 @@
package android.media;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.pm.PackageManager;
import android.media.audiopolicy.AudioMix;
@@ -59,6 +60,7 @@
public static final int STREAM_BLUETOOTH_SCO = 6;
/** Used to identify the volume of audio streams for enforced system sounds in certain
* countries (e.g camera in Japan) */
+ @UnsupportedAppUsage
public static final int STREAM_SYSTEM_ENFORCED = 7;
/** Used to identify the volume of audio streams for DTMF tones */
public static final int STREAM_DTMF = 8;
@@ -74,6 +76,7 @@
// Expose only the getter method publicly so we can change it in the future
private static final int NUM_STREAM_TYPES = 11;
+ @UnsupportedAppUsage
public static final int getNumStreamTypes() { return NUM_STREAM_TYPES; }
public static final String[] STREAM_NAMES = new String[] {
@@ -97,6 +100,7 @@
* <var>false</var> to turn mute off
* @return command completion status see AUDIO_STATUS_OK, see AUDIO_STATUS_ERROR
*/
+ @UnsupportedAppUsage
public static native int muteMicrophone(boolean on);
/*
@@ -104,6 +108,7 @@
*
* @return true if microphone is muted, false if it's not
*/
+ @UnsupportedAppUsage
public static native boolean isMicrophoneMuted();
/* modes for setPhoneState, must match AudioSystem.h audio_mode */
@@ -151,6 +156,7 @@
*
* return true if any track playing on this stream is active.
*/
+ @UnsupportedAppUsage
public static native boolean isStreamActive(int stream, int inPastMs);
/*
@@ -166,6 +172,7 @@
*
* return true if any recorder using this source is currently recording
*/
+ @UnsupportedAppUsage
public static native boolean isSourceActive(int source);
/*
@@ -186,6 +193,7 @@
* param keyValuePairs list of parameters key value pairs in the form:
* key1=value1;key2=value2;...
*/
+ @UnsupportedAppUsage
public static native int setParameters(String keyValuePairs);
/*
@@ -196,6 +204,7 @@
* return value: list of parameters key value pairs in the form:
* key1=value1;key2=value2;...
*/
+ @UnsupportedAppUsage
public static native String getParameters(String keys);
// These match the enum AudioError in frameworks/base/core/jni/android_media_AudioSystem.cpp
@@ -227,6 +236,7 @@
* Registers a callback to be invoked when an error occurs.
* @param cb the callback to run
*/
+ @UnsupportedAppUsage
public static void setErrorCallback(ErrorCallback cb)
{
synchronized (AudioSystem.class) {
@@ -237,6 +247,7 @@
}
}
+ @UnsupportedAppUsage
private static void errorCallbackFromNative(int error)
{
ErrorCallback errorCallback = null;
@@ -272,6 +283,7 @@
}
}
+ @UnsupportedAppUsage
private static void dynamicPolicyCallbackFromNative(int event, String regId, int val)
{
DynamicPolicyCallback cb = null;
@@ -336,6 +348,7 @@
* {@link AudioRecordingCallback#onRecordingConfigurationChanged(int, int, int, int, int[])}
* for the description of the record format.
*/
+ @UnsupportedAppUsage
private static void recordingCallbackFromNative(int event, int uid, int session, int source,
int[] recordingFormat) {
AudioRecordingCallback cb = null;
@@ -374,27 +387,45 @@
public static final int DEVICE_BIT_IN = 0x80000000;
public static final int DEVICE_BIT_DEFAULT = 0x40000000;
// output devices, be sure to update AudioManager.java also
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_EARPIECE = 0x1;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_SPEAKER = 0x2;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_WIRED_HEADSET = 0x4;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_WIRED_HEADPHONE = 0x8;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_BLUETOOTH_SCO = 0x10;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_BLUETOOTH_A2DP = 0x80;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_AUX_DIGITAL = 0x400;
public static final int DEVICE_OUT_HDMI = DEVICE_OUT_AUX_DIGITAL;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_USB_ACCESSORY = 0x2000;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_USB_DEVICE = 0x4000;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_REMOTE_SUBMIX = 0x8000;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_TELEPHONY_TX = 0x10000;
public static final int DEVICE_OUT_LINE = 0x20000;
public static final int DEVICE_OUT_HDMI_ARC = 0x40000;
public static final int DEVICE_OUT_SPDIF = 0x80000;
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_FM = 0x100000;
public static final int DEVICE_OUT_AUX_LINE = 0x200000;
public static final int DEVICE_OUT_SPEAKER_SAFE = 0x400000;
@@ -441,6 +472,7 @@
public static final int DEVICE_OUT_ALL_SCO = (DEVICE_OUT_BLUETOOTH_SCO |
DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
DEVICE_OUT_BLUETOOTH_SCO_CARKIT);
+ @UnsupportedAppUsage
public static final int DEVICE_OUT_ALL_USB = (DEVICE_OUT_USB_ACCESSORY |
DEVICE_OUT_USB_DEVICE |
DEVICE_OUT_USB_HEADSET);
@@ -452,31 +484,46 @@
DEVICE_OUT_SPEAKER);
// input devices
+ @UnsupportedAppUsage
public static final int DEVICE_IN_COMMUNICATION = DEVICE_BIT_IN | 0x1;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_AMBIENT = DEVICE_BIT_IN | 0x2;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_BUILTIN_MIC = DEVICE_BIT_IN | 0x4;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_BLUETOOTH_SCO_HEADSET = DEVICE_BIT_IN | 0x8;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_WIRED_HEADSET = DEVICE_BIT_IN | 0x10;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_AUX_DIGITAL = DEVICE_BIT_IN | 0x20;
public static final int DEVICE_IN_HDMI = DEVICE_IN_AUX_DIGITAL;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_VOICE_CALL = DEVICE_BIT_IN | 0x40;
public static final int DEVICE_IN_TELEPHONY_RX = DEVICE_IN_VOICE_CALL;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_BACK_MIC = DEVICE_BIT_IN | 0x80;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_REMOTE_SUBMIX = DEVICE_BIT_IN | 0x100;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_ANLG_DOCK_HEADSET = DEVICE_BIT_IN | 0x200;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_DGTL_DOCK_HEADSET = DEVICE_BIT_IN | 0x400;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_USB_ACCESSORY = DEVICE_BIT_IN | 0x800;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_USB_DEVICE = DEVICE_BIT_IN | 0x1000;
public static final int DEVICE_IN_FM_TUNER = DEVICE_BIT_IN | 0x2000;
public static final int DEVICE_IN_TV_TUNER = DEVICE_BIT_IN | 0x4000;
public static final int DEVICE_IN_LINE = DEVICE_BIT_IN | 0x8000;
public static final int DEVICE_IN_SPDIF = DEVICE_BIT_IN | 0x10000;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_BLUETOOTH_A2DP = DEVICE_BIT_IN | 0x20000;
public static final int DEVICE_IN_LOOPBACK = DEVICE_BIT_IN | 0x40000;
public static final int DEVICE_IN_IP = DEVICE_BIT_IN | 0x80000;
public static final int DEVICE_IN_BUS = DEVICE_BIT_IN | 0x100000;
public static final int DEVICE_IN_PROXY = DEVICE_BIT_IN | 0x1000000;
public static final int DEVICE_IN_USB_HEADSET = DEVICE_BIT_IN | 0x2000000;
+ @UnsupportedAppUsage
public static final int DEVICE_IN_DEFAULT = DEVICE_BIT_IN | DEVICE_BIT_DEFAULT;
public static final int DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION |
@@ -509,7 +556,9 @@
DEVICE_IN_USB_HEADSET);
// device states, must match AudioSystem::device_connection_state
+ @UnsupportedAppUsage
public static final int DEVICE_STATE_UNAVAILABLE = 0;
+ @UnsupportedAppUsage
public static final int DEVICE_STATE_AVAILABLE = 1;
private static final int NUM_DEVICE_STATES = 1;
@@ -575,6 +624,7 @@
public static final String DEVICE_IN_PROXY_NAME = "proxy";
public static final String DEVICE_IN_USB_HEADSET_NAME = "usb_headset";
+ @UnsupportedAppUsage
public static String getOutputDeviceName(int device)
{
switch(device) {
@@ -701,15 +751,20 @@
public static final int PHONE_STATE_INCALL = 2;
// device categories config for setForceUse, must match audio_policy_forced_cfg_t
+ @UnsupportedAppUsage
public static final int FORCE_NONE = 0;
public static final int FORCE_SPEAKER = 1;
public static final int FORCE_HEADPHONES = 2;
public static final int FORCE_BT_SCO = 3;
public static final int FORCE_BT_A2DP = 4;
public static final int FORCE_WIRED_ACCESSORY = 5;
+ @UnsupportedAppUsage
public static final int FORCE_BT_CAR_DOCK = 6;
+ @UnsupportedAppUsage
public static final int FORCE_BT_DESK_DOCK = 7;
+ @UnsupportedAppUsage
public static final int FORCE_ANALOG_DOCK = 8;
+ @UnsupportedAppUsage
public static final int FORCE_DIGITAL_DOCK = 9;
public static final int FORCE_NO_BT_A2DP = 10;
public static final int FORCE_SYSTEM_ENFORCED = 11;
@@ -775,22 +830,32 @@
* @return command completion status, one of {@link #AUDIO_STATUS_OK},
* {@link #AUDIO_STATUS_ERROR} or {@link #AUDIO_STATUS_SERVER_DIED}
*/
+ @UnsupportedAppUsage
public static native int setDeviceConnectionState(int device, int state,
String device_address, String device_name);
+ @UnsupportedAppUsage
public static native int getDeviceConnectionState(int device, String device_address);
public static native int handleDeviceConfigChange(int device,
String device_address,
String device_name);
+ @UnsupportedAppUsage
public static native int setPhoneState(int state);
+ @UnsupportedAppUsage
public static native int setForceUse(int usage, int config);
+ @UnsupportedAppUsage
public static native int getForceUse(int usage);
+ @UnsupportedAppUsage
public static native int initStreamVolume(int stream, int indexMin, int indexMax);
+ @UnsupportedAppUsage
public static native int setStreamVolumeIndex(int stream, int index, int device);
public static native int getStreamVolumeIndex(int stream, int device);
public static native int setMasterVolume(float value);
public static native float getMasterVolume();
+ @UnsupportedAppUsage
public static native int setMasterMute(boolean mute);
+ @UnsupportedAppUsage
public static native boolean getMasterMute();
+ @UnsupportedAppUsage
public static native int getDevicesForStream(int stream);
/** @hide returns true if master mono is enabled. */
@@ -799,11 +864,15 @@
public static native int setMasterMono(boolean mono);
// helpers for android.media.AudioManager.getProperty(), see description there for meaning
+ @UnsupportedAppUsage
public static native int getPrimaryOutputSamplingRate();
+ @UnsupportedAppUsage
public static native int getPrimaryOutputFrameCount();
+ @UnsupportedAppUsage
public static native int getOutputLatency(int stream);
public static native int setLowRamDevice(boolean isLowRamDevice, long totalMemory);
+ @UnsupportedAppUsage
public static native int checkAudioFlinger();
public static native int listAudioPorts(ArrayList<AudioPort> ports, int[] generation);
diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java
index 87b5d43..aaf7dd7 100644
--- a/media/java/android/media/AudioTrack.java
+++ b/media/java/android/media/AudioTrack.java
@@ -30,6 +30,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.content.Context;
import android.os.Handler;
@@ -351,6 +352,7 @@
* {@link AudioManager#STREAM_ALARM}, {@link AudioManager#STREAM_NOTIFICATION}, and
* {@link AudioManager#STREAM_DTMF}.
*/
+ @UnsupportedAppUsage
private int mStreamType = AudioManager.STREAM_MUSIC;
/**
@@ -399,12 +401,14 @@
* Accessed by native methods: provides access to C++ AudioTrack object.
*/
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
protected long mNativeTrackInJavaObj;
/**
* Accessed by native methods: provides access to the JNI data (i.e. resources used by
* the native AudioTrack object, but not stored in it).
*/
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private long mJniData;
@@ -692,6 +696,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
/* package */ void deferred_connect(long nativeTrackInJavaObj) {
if (mState != STATE_INITIALIZED) {
// Note that for this native_setup, we are providing an already created/initialized
@@ -1501,6 +1506,7 @@
* a better solution.
* @hide
*/
+ @UnsupportedAppUsage
public int getLatency() {
return native_get_latency();
}
@@ -3125,6 +3131,7 @@
// Java methods called from the native side
//--------------------
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private static void postEventFromNative(Object audiotrack_ref,
int what, int arg1, int arg2, Object obj) {
//logd("Event posted from the native side: event="+ what + " args="+ arg1+" "+arg2);
@@ -3192,6 +3199,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public native final void native_release();
private native final void native_start();
diff --git a/media/java/android/media/CamcorderProfile.java b/media/java/android/media/CamcorderProfile.java
index d303a2e..aa123bd 100644
--- a/media/java/android/media/CamcorderProfile.java
+++ b/media/java/android/media/CamcorderProfile.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
@@ -495,7 +496,9 @@
}
// Methods implemented by JNI
+ @UnsupportedAppUsage
private static native final void native_init();
+ @UnsupportedAppUsage
private static native final CamcorderProfile native_get_camcorder_profile(
int cameraId, int quality);
private static native final boolean native_has_camcorder_profile(
diff --git a/media/java/android/media/DecoderCapabilities.java b/media/java/android/media/DecoderCapabilities.java
index f16cccf..df5e918 100644
--- a/media/java/android/media/DecoderCapabilities.java
+++ b/media/java/android/media/DecoderCapabilities.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import java.util.List;
import java.util.ArrayList;
@@ -32,6 +33,7 @@
*
*/
public enum VideoDecoder {
+ @UnsupportedAppUsage
VIDEO_DECODER_WMV,
};
@@ -39,6 +41,7 @@
* The AudioDecoder class represents the type of an audio decoder
*/
public enum AudioDecoder {
+ @UnsupportedAppUsage
AUDIO_DECODER_WMA,
};
@@ -51,6 +54,7 @@
* Returns the list of video decoder types
* @see android.media.DecoderCapabilities.VideoDecoder
*/
+ @UnsupportedAppUsage
public static List<VideoDecoder> getVideoDecoders() {
List<VideoDecoder> decoderList = new ArrayList<VideoDecoder>();
int nDecoders = native_get_num_video_decoders();
@@ -64,6 +68,7 @@
* Returns the list of audio decoder types
* @see android.media.DecoderCapabilities.AudioDecoder
*/
+ @UnsupportedAppUsage
public static List<AudioDecoder> getAudioDecoders() {
List<AudioDecoder> decoderList = new ArrayList<AudioDecoder>();
int nDecoders = native_get_num_audio_decoders();
diff --git a/media/java/android/media/EncoderCapabilities.java b/media/java/android/media/EncoderCapabilities.java
index 59c9b82..c09c5fa 100644
--- a/media/java/android/media/EncoderCapabilities.java
+++ b/media/java/android/media/EncoderCapabilities.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import java.util.List;
import java.util.ArrayList;
@@ -42,14 +43,19 @@
*/
static public class VideoEncoderCap {
// These are not modifiable externally, thus are public accessible
+ @UnsupportedAppUsage
public final int mCodec; // @see android.media.MediaRecorder.VideoEncoder
public final int mMinBitRate; // min bit rate (bps)
public final int mMaxBitRate; // max bit rate (bps)
public final int mMinFrameRate; // min frame rate (fps)
public final int mMaxFrameRate; // max frame rate (fps)
+ @UnsupportedAppUsage
public final int mMinFrameWidth; // min frame width (pixel)
+ @UnsupportedAppUsage
public final int mMaxFrameWidth; // max frame width (pixel)
+ @UnsupportedAppUsage
public final int mMinFrameHeight; // min frame height (pixel)
+ @UnsupportedAppUsage
public final int mMaxFrameHeight; // max frame height (pixel)
// Private constructor called by JNI
@@ -127,6 +133,7 @@
* Returns the capabilities of the supported video encoders.
* @see android.media.EncoderCapabilities.VideoEncoderCap
*/
+ @UnsupportedAppUsage
public static List<VideoEncoderCap> getVideoEncoders() {
int nEncoders = native_get_num_video_encoders();
if (nEncoders == 0) return null;
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 450a656..2395b24 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -17,6 +17,7 @@
package android.media;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -468,6 +469,7 @@
// See http://www.exiv2.org/makernote.html#R11
private static final int PEF_MAKER_NOTE_SKIP_SIZE = 6;
+ @UnsupportedAppUsage
private static SimpleDateFormat sFormatter;
// See Exchangeable image file format for digital still cameras: Exif version 2.2.
@@ -1293,14 +1295,17 @@
sExifPointerTagMap.put(EXIF_POINTER_TAGS[5].number, IFD_TYPE_ORF_IMAGE_PROCESSING); // 8256
}
+ @UnsupportedAppUsage
private final String mFilename;
private final FileDescriptor mSeekableFileDescriptor;
private final AssetManager.AssetInputStream mAssetInputStream;
private final boolean mIsInputStream;
private int mMimeType;
+ @UnsupportedAppUsage
private final HashMap[] mAttributes = new HashMap[EXIF_TAGS.length];
private Set<Integer> mAttributesOffsets = new HashSet<>(EXIF_TAGS.length);
private ByteOrder mExifByteOrder = ByteOrder.BIG_ENDIAN;
+ @UnsupportedAppUsage
private boolean mHasThumbnail;
// The following values used for indicating a thumbnail position.
private int mThumbnailOffset;
@@ -2022,6 +2027,7 @@
* Returns -1 if the date time information if not available.
* @hide
*/
+ @UnsupportedAppUsage
public long getDateTime() {
String dateTimeString = getAttribute(TAG_DATETIME);
if (dateTimeString == null
@@ -2058,6 +2064,7 @@
* Returns -1 if the date time information if not available.
* @hide
*/
+ @UnsupportedAppUsage
public long getGpsDateTime() {
String date = getAttribute(TAG_GPS_DATESTAMP);
String time = getAttribute(TAG_GPS_TIMESTAMP);
@@ -2080,6 +2087,7 @@
}
/** {@hide} */
+ @UnsupportedAppUsage
public static float convertRationalLatLonToFloat(String rationalString, String ref) {
try {
String [] parts = rationalString.split(",");
diff --git a/media/java/android/media/Image.java b/media/java/android/media/Image.java
index a768dd3..dff5e9a 100644
--- a/media/java/android/media/Image.java
+++ b/media/java/android/media/Image.java
@@ -20,6 +20,7 @@
import java.lang.AutoCloseable;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Rect;
import android.hardware.HardwareBuffer;
@@ -57,6 +58,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
protected Image() {
}
@@ -378,6 +380,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
protected Plane() {
}
diff --git a/media/java/android/media/JetPlayer.java b/media/java/android/media/JetPlayer.java
index 7735e78..b12e647 100644
--- a/media/java/android/media/JetPlayer.java
+++ b/media/java/android/media/JetPlayer.java
@@ -21,6 +21,7 @@
import java.lang.ref.WeakReference;
import java.lang.CloneNotSupportedException;
+import android.annotation.UnsupportedAppUsage;
import android.content.res.AssetFileDescriptor;
import android.os.Looper;
import android.os.Handler;
@@ -127,6 +128,7 @@
* Accessed by native methods: provides access to C++ JetPlayer object
*/
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private long mNativePlayerInJavaObj;
@@ -560,6 +562,7 @@
// Called exclusively by native code
//--------------------
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private static void postEventFromNative(Object jetplayer_ref,
int what, int arg1, int arg2) {
//logd("Event posted from the native side: event="+ what + " args="+ arg1+" "+arg2);
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index 2207a2a..76fc9e3 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.ImageFormat;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
@@ -2137,6 +2138,7 @@
* Thrown when an internal codec error occurs.
*/
public final static class CodecException extends IllegalStateException {
+ @UnsupportedAppUsage
CodecException(int errorCode, int actionCode, @Nullable String detailMessage) {
super(detailMessage);
mErrorCode = errorCode;
@@ -2805,6 +2807,7 @@
index, true /* render */, true /* updatePTS */, renderTimestampNs);
}
+ @UnsupportedAppUsage
private native final void releaseOutputBuffer(
int index, boolean render, boolean updatePTS, long timeNs);
@@ -3525,6 +3528,7 @@
}
}
+ @UnsupportedAppUsage
private native final void setParameters(@NonNull String[] keys, @NonNull Object[] values);
/**
@@ -3555,6 +3559,7 @@
private native final MediaCodecInfo getOwnCodecInfo();
@NonNull
+ @UnsupportedAppUsage
private native final ByteBuffer[] getBuffers(boolean input);
@Nullable
@@ -3575,6 +3580,7 @@
native_init();
}
+ @UnsupportedAppUsage
private long mNativeContext;
/** @hide */
diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java
index 62d3dea..ef312d1 100644
--- a/media/java/android/media/MediaCodecInfo.java
+++ b/media/java/android/media/MediaCodecInfo.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.util.Log;
import android.util.Pair;
import android.util.Range;
@@ -1588,6 +1589,7 @@
private VideoCapabilities() { }
/** @hide */
+ @UnsupportedAppUsage
public static VideoCapabilities create(
MediaFormat info, CodecCapabilities parent) {
VideoCapabilities caps = new VideoCapabilities();
diff --git a/media/java/android/media/MediaDrm.java b/media/java/android/media/MediaDrm.java
index 60cad90..850be78 100644
--- a/media/java/android/media/MediaDrm.java
+++ b/media/java/android/media/MediaDrm.java
@@ -21,6 +21,7 @@
import android.annotation.Nullable;
import android.annotation.StringDef;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.os.Handler;
import android.os.Looper;
@@ -1473,6 +1474,7 @@
* Get the opaque message data
*/
@NonNull
+ @UnsupportedAppUsage
public byte[] getData() { return mData; }
/**
@@ -1481,6 +1483,7 @@
* certificate server URL obtained from other sources.
*/
@NonNull
+ @UnsupportedAppUsage
public String getDefaultUrl() { return mDefaultUrl; }
}
@@ -1497,6 +1500,7 @@
* @hide - not part of the public API at this time
*/
@NonNull
+ @UnsupportedAppUsage
public CertificateRequest getCertificateRequest(
@CertificateType int certType, @NonNull String certAuthority)
{
@@ -1518,6 +1522,7 @@
* Get the wrapped private key data
*/
@NonNull
+ @UnsupportedAppUsage
public byte[] getWrappedPrivateKey() {
if (mWrappedKey == null) {
// this should never happen as mWrappedKey is initialized in
@@ -1532,6 +1537,7 @@
* Get the PEM-encoded certificate chain
*/
@NonNull
+ @UnsupportedAppUsage
public byte[] getContent() {
if (mCertificateData == null) {
// this should never happen as mCertificateData is initialized in
@@ -1565,6 +1571,7 @@
* @hide - not part of the public API at this time
*/
@NonNull
+ @UnsupportedAppUsage
public Certificate provideCertificateResponse(@NonNull byte[] response)
throws DeniedByServerException {
return provideProvisionResponseNative(response);
@@ -1587,6 +1594,7 @@
* @hide - not part of the public API at this time
*/
@NonNull
+ @UnsupportedAppUsage
public byte[] signRSA(
@NonNull byte[] sessionId, @NonNull String algorithm,
@NonNull byte[] wrappedKey, @NonNull byte[] message) {
diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java
index 35937de..3b9b6dd 100644
--- a/media/java/android/media/MediaFile.java
+++ b/media/java/android/media/MediaFile.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.media.DecoderCapabilities;
import android.media.DecoderCapabilities.VideoDecoder;
import android.media.DecoderCapabilities.AudioDecoder;
@@ -43,7 +44,9 @@
public static final int FILE_TYPE_AAC = 8;
public static final int FILE_TYPE_MKA = 9;
public static final int FILE_TYPE_FLAC = 10;
+ @UnsupportedAppUsage
private static final int FIRST_AUDIO_FILE_TYPE = FILE_TYPE_MP3;
+ @UnsupportedAppUsage
private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_FLAC;
// MIDI file types
@@ -123,7 +126,9 @@
public static final int FILE_TYPE_ZIP = 107;
public static class MediaFileType {
+ @UnsupportedAppUsage
public final int fileType;
+ @UnsupportedAppUsage
public final String mimeType;
MediaFileType(int fileType, String mimeType) {
@@ -132,20 +137,25 @@
}
}
+ @UnsupportedAppUsage
private static final HashMap<String, MediaFileType> sFileTypeMap
= new HashMap<String, MediaFileType>();
private static final HashMap<String, Integer> sMimeTypeMap
= new HashMap<String, Integer>();
// maps file extension to MTP format code
+ @UnsupportedAppUsage
private static final HashMap<String, Integer> sFileTypeToFormatMap
= new HashMap<String, Integer>();
// maps mime type to MTP format code
+ @UnsupportedAppUsage
private static final HashMap<String, Integer> sMimeTypeToFormatMap
= new HashMap<String, Integer>();
// maps MTP format code to mime type
+ @UnsupportedAppUsage
private static final HashMap<Integer, String> sFormatToMimeTypeMap
= new HashMap<Integer, String>();
+ @UnsupportedAppUsage
static void addFileType(String extension, int fileType, String mimeType) {
sFileTypeMap.put(extension, new MediaFileType(fileType, mimeType));
sMimeTypeMap.put(mimeType, Integer.valueOf(fileType));
@@ -277,6 +287,7 @@
addFileType("MPEG", FILE_TYPE_MP2PS, "video/mp2p");
}
+ @UnsupportedAppUsage
public static boolean isAudioFileType(int fileType) {
return ((fileType >= FIRST_AUDIO_FILE_TYPE &&
fileType <= LAST_AUDIO_FILE_TYPE) ||
@@ -284,6 +295,7 @@
fileType <= LAST_MIDI_FILE_TYPE));
}
+ @UnsupportedAppUsage
public static boolean isVideoFileType(int fileType) {
return (fileType >= FIRST_VIDEO_FILE_TYPE &&
fileType <= LAST_VIDEO_FILE_TYPE)
@@ -291,6 +303,7 @@
fileType <= LAST_VIDEO_FILE_TYPE2);
}
+ @UnsupportedAppUsage
public static boolean isImageFileType(int fileType) {
return (fileType >= FIRST_IMAGE_FILE_TYPE &&
fileType <= LAST_IMAGE_FILE_TYPE)
@@ -303,16 +316,19 @@
fileType <= LAST_RAW_IMAGE_FILE_TYPE);
}
+ @UnsupportedAppUsage
public static boolean isPlayListFileType(int fileType) {
return (fileType >= FIRST_PLAYLIST_FILE_TYPE &&
fileType <= LAST_PLAYLIST_FILE_TYPE);
}
+ @UnsupportedAppUsage
public static boolean isDrmFileType(int fileType) {
return (fileType >= FIRST_DRM_FILE_TYPE &&
fileType <= LAST_DRM_FILE_TYPE);
}
+ @UnsupportedAppUsage
public static MediaFileType getFileType(String path) {
int lastDot = path.lastIndexOf('.');
if (lastDot < 0)
@@ -327,6 +343,7 @@
}
// generates a title based on file name
+ @UnsupportedAppUsage
public static String getFileTitle(String path) {
// extract file name after last slash
int lastSlash = path.lastIndexOf('/');
@@ -344,11 +361,13 @@
return path;
}
+ @UnsupportedAppUsage
public static int getFileTypeForMimeType(String mimeType) {
Integer value = sMimeTypeMap.get(mimeType);
return (value == null ? 0 : value.intValue());
}
+ @UnsupportedAppUsage
public static String getMimeTypeForFile(String path) {
MediaFileType mediaFileType = getFileType(path);
return (mediaFileType == null ? null : mediaFileType.mimeType);
diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java
index 2a2f4fe..d10cbbc 100644
--- a/media/java/android/media/MediaFormat.java
+++ b/media/java/android/media/MediaFormat.java
@@ -17,6 +17,7 @@
package android.media;
import android.annotation.IntDef;
+import android.annotation.UnsupportedAppUsage;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -188,6 +189,7 @@
*/
public static final String MIMETYPE_TEXT_CEA_708 = "text/cea-708";
+ @UnsupportedAppUsage
private Map<String, Object> mMap;
/**
@@ -946,6 +948,7 @@
mMap = new HashMap();
}
+ @UnsupportedAppUsage
/* package private */ Map<String, Object> getMap() {
return mMap;
}
diff --git a/media/java/android/media/MediaHTTPConnection.java b/media/java/android/media/MediaHTTPConnection.java
index 6bf52bd..ad25a06 100644
--- a/media/java/android/media/MediaHTTPConnection.java
+++ b/media/java/android/media/MediaHTTPConnection.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.net.NetworkUtils;
import android.os.IBinder;
import android.os.StrictMode;
@@ -46,20 +47,28 @@
// connection timeout - 30 sec
private static final int CONNECT_TIMEOUT_MS = 30 * 1000;
+ @UnsupportedAppUsage
private long mCurrentOffset = -1;
+ @UnsupportedAppUsage
private URL mURL = null;
+ @UnsupportedAppUsage
private Map<String, String> mHeaders = null;
+ @UnsupportedAppUsage
private HttpURLConnection mConnection = null;
+ @UnsupportedAppUsage
private long mTotalSize = -1;
private InputStream mInputStream = null;
+ @UnsupportedAppUsage
private boolean mAllowCrossDomainRedirect = true;
+ @UnsupportedAppUsage
private boolean mAllowCrossProtocolRedirect = true;
// from com.squareup.okhttp.internal.http
private final static int HTTP_TEMP_REDIRECT = 307;
private final static int MAX_REDIRECTS = 20;
+ @UnsupportedAppUsage
public MediaHTTPConnection() {
CookieHandler cookieHandler = CookieHandler.getDefault();
if (cookieHandler == null) {
@@ -70,6 +79,7 @@
}
@Override
+ @UnsupportedAppUsage
public IBinder connect(String uri, String headers) {
if (VERBOSE) {
Log.d(TAG, "connect: uri=" + uri + ", headers=" + headers);
@@ -128,6 +138,7 @@
}
@Override
+ @UnsupportedAppUsage
public void disconnect() {
teardownConnection();
mHeaders = null;
@@ -312,6 +323,7 @@
}
@Override
+ @UnsupportedAppUsage
public int readAt(long offset, int size) {
return native_readAt(offset, size);
}
@@ -381,6 +393,7 @@
}
@Override
+ @UnsupportedAppUsage
public synchronized String getMIMEType() {
if (mConnection == null) {
try {
@@ -394,6 +407,7 @@
}
@Override
+ @UnsupportedAppUsage
public String getUri() {
return mURL.toString();
}
diff --git a/media/java/android/media/MediaHTTPService.java b/media/java/android/media/MediaHTTPService.java
index 98517d1..97a0df7 100644
--- a/media/java/android/media/MediaHTTPService.java
+++ b/media/java/android/media/MediaHTTPService.java
@@ -17,6 +17,7 @@
package android.media;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.os.IBinder;
import android.util.Log;
@@ -83,6 +84,7 @@
return new MediaHTTPConnection();
}
+ @UnsupportedAppUsage
/* package private */static IBinder createHttpServiceBinderIfNecessary(
String path) {
return createHttpServiceBinderIfNecessary(path, null);
diff --git a/media/java/android/media/MediaInserter.java b/media/java/android/media/MediaInserter.java
index dd06921..0749f58 100644
--- a/media/java/android/media/MediaInserter.java
+++ b/media/java/android/media/MediaInserter.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.content.ContentProviderClient;
import android.content.ContentValues;
import android.net.Uri;
@@ -67,6 +68,7 @@
}
}
+ @UnsupportedAppUsage
public void flushAll() throws RemoteException {
flushAllPriority();
for (Uri tableUri : mRowMap.keySet()){
diff --git a/media/java/android/media/MediaMetadata.java b/media/java/android/media/MediaMetadata.java
index 94d4d55..2721ad1 100644
--- a/media/java/android/media/MediaMetadata.java
+++ b/media/java/android/media/MediaMetadata.java
@@ -17,6 +17,7 @@
import android.annotation.NonNull;
import android.annotation.StringDef;
+import android.annotation.UnsupportedAppUsage;
import android.content.ContentResolver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -626,6 +627,7 @@
* @return The key used by this class or null if no mapping exists
* @hide
*/
+ @UnsupportedAppUsage
public static String getKeyFromMetadataEditorKey(int editorKey) {
return EDITOR_KEY_MAPPING.get(editorKey, null);
}
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
index f9a47a6..57b648e 100644
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ b/media/java/android/media/MediaMetadataRetriever.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
@@ -668,6 +669,7 @@
return getEmbeddedPicture(EMBEDDED_PICTURE_TYPE_ANY);
}
+ @UnsupportedAppUsage
private native byte[] getEmbeddedPicture(int pictureType);
/**
@@ -675,9 +677,12 @@
* allocated internally.
*/
public native void release();
+ @UnsupportedAppUsage
private native void native_setup();
+ @UnsupportedAppUsage
private static native void native_init();
+ @UnsupportedAppUsage
private native final void native_finalize();
@Override
diff --git a/media/java/android/media/MediaMuxer.java b/media/java/android/media/MediaMuxer.java
index 205ce8d..c91d4d3 100644
--- a/media/java/android/media/MediaMuxer.java
+++ b/media/java/android/media/MediaMuxer.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.media.MediaCodec;
import android.media.MediaCodec.BufferInfo;
import dalvik.system.CloseGuard;
@@ -283,8 +284,10 @@
public @interface Format {}
// All the native functions are listed here.
+ @UnsupportedAppUsage
private static native long nativeSetup(@NonNull FileDescriptor fd, int format)
throws IllegalArgumentException, IOException;
+ @UnsupportedAppUsage
private static native void nativeRelease(long nativeObject);
private static native void nativeStart(long nativeObject);
private static native void nativeStop(long nativeObject);
@@ -298,16 +301,22 @@
int offset, int size, long presentationTimeUs, @MediaCodec.BufferFlag int flags);
// Muxer internal states.
+ @UnsupportedAppUsage
private static final int MUXER_STATE_UNINITIALIZED = -1;
private static final int MUXER_STATE_INITIALIZED = 0;
+ @UnsupportedAppUsage
private static final int MUXER_STATE_STARTED = 1;
+ @UnsupportedAppUsage
private static final int MUXER_STATE_STOPPED = 2;
+ @UnsupportedAppUsage
private int mState = MUXER_STATE_UNINITIALIZED;
+ @UnsupportedAppUsage
private final CloseGuard mCloseGuard = CloseGuard.get();
private int mLastTrackIndex = -1;
+ @UnsupportedAppUsage
private long mNativeObject;
/**
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index d532e52..ed4da22 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -20,6 +20,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.content.ContentProvider;
import android.content.ContentResolver;
@@ -597,6 +598,7 @@
// FIXME: add link to getMetadata(boolean, boolean)
{@hide}
*/
+ @UnsupportedAppUsage
public static final boolean METADATA_ALL = false;
/**
@@ -613,6 +615,7 @@
// FIXME: add link to getMetadata(boolean, boolean)
{@hide}
*/
+ @UnsupportedAppUsage
public static final boolean BYPASS_METADATA_FILTER = false;
static {
@@ -630,6 +633,7 @@
private long mNativeSurfaceTexture; // accessed by native methods
private int mListenerContext; // accessed by native methods
private SurfaceHolder mSurfaceHolder;
+ @UnsupportedAppUsage
private EventHandler mEventHandler;
private PowerManager.WakeLock mWakeLock = null;
private boolean mScreenOnWhilePlaying;
@@ -710,6 +714,7 @@
* player.
* {@hide}
*/
+ @UnsupportedAppUsage
public Parcel newRequest() {
Parcel parcel = Parcel.obtain();
parcel.writeInterfaceToken(IMEDIA_PLAYER);
@@ -730,6 +735,7 @@
* native player.
* {@hide}
*/
+ @UnsupportedAppUsage
public void invoke(Parcel request, Parcel reply) {
int retcode = native_invoke(request, reply);
reply.setDataPosition(0);
@@ -1139,11 +1145,13 @@
* @throws IllegalStateException if it is called in an invalid state
* @hide pending API council
*/
+ @UnsupportedAppUsage
public void setDataSource(String path, Map<String, String> headers)
throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
setDataSource(path, headers, null);
}
+ @UnsupportedAppUsage
private void setDataSource(String path, Map<String, String> headers, List<HttpCookie> cookies)
throws IOException, IllegalArgumentException, SecurityException, IllegalStateException
{
@@ -1164,6 +1172,7 @@
setDataSource(path, keys, values, cookies);
}
+ @UnsupportedAppUsage
private void setDataSource(String path, String[] keys, String[] values,
List<HttpCookie> cookies)
throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
@@ -2010,6 +2019,7 @@
// FIXME: unhide.
* {@hide}
*/
+ @UnsupportedAppUsage
public Metadata getMetadata(final boolean update_only,
final boolean apply_filter) {
Parcel reply = Parcel.obtain();
@@ -2234,6 +2244,7 @@
* @return true if the parameter is set successfully, false otherwise
* {@hide}
*/
+ @UnsupportedAppUsage
private native boolean setParameter(int key, Parcel value);
/**
@@ -2550,6 +2561,7 @@
/**
* Used to read a TrackInfo from a Parcel.
*/
+ @UnsupportedAppUsage
static final Parcelable.Creator<TrackInfo> CREATOR
= new Parcelable.Creator<TrackInfo>() {
@Override
@@ -2660,6 +2672,7 @@
private SubtitleController mSubtitleController;
/** @hide */
+ @UnsupportedAppUsage
public void setSubtitleAnchor(
SubtitleController controller,
SubtitleController.Anchor anchor) {
@@ -2764,6 +2777,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void addSubtitleSource(InputStream is, MediaFormat format)
throws IllegalStateException
{
@@ -3276,6 +3290,7 @@
*
* {@hide} pending API council
*/
+ @UnsupportedAppUsage
public void setRetransmitEndpoint(InetSocketAddress endpoint)
throws IllegalStateException, IllegalArgumentException
{
@@ -3327,6 +3342,7 @@
private TimeProvider mTimeProvider;
/** @hide */
+ @UnsupportedAppUsage
public MediaTimeProvider getMediaTimeProvider() {
if (mTimeProvider == null) {
mTimeProvider = new TimeProvider(this);
@@ -3723,6 +3739,7 @@
mOnPreparedListener = listener;
}
+ @UnsupportedAppUsage
private OnPreparedListener mOnPreparedListener;
/**
@@ -3750,6 +3767,7 @@
mOnCompletionListener = listener;
}
+ @UnsupportedAppUsage
private OnCompletionListener mOnCompletionListener;
/**
@@ -3822,6 +3840,7 @@
mOnSeekCompleteListener = listener;
}
+ @UnsupportedAppUsage
private OnSeekCompleteListener mOnSeekCompleteListener;
/**
@@ -3883,6 +3902,7 @@
mOnTimedTextListener = listener;
}
+ @UnsupportedAppUsage
private OnTimedTextListener mOnTimedTextListener;
/**
@@ -4162,6 +4182,7 @@
mOnErrorListener = listener;
}
+ @UnsupportedAppUsage
private OnErrorListener mOnErrorListener;
@@ -4231,6 +4252,7 @@
* JAVA framework to avoid triggering track scanning.
* @hide
*/
+ @UnsupportedAppUsage
public static final int MEDIA_INFO_EXTERNAL_METADATA_UPDATE = 803;
/** Informs that audio is not playing. Note that playback of the video
@@ -4250,6 +4272,7 @@
*
* {@hide}
*/
+ @UnsupportedAppUsage
public static final int MEDIA_INFO_TIMED_TEXT_ERROR = 900;
/** Subtitle track was not supported by the media framework.
@@ -4306,6 +4329,7 @@
mOnInfoListener = listener;
}
+ @UnsupportedAppUsage
private OnInfoListener mOnInfoListener;
// Modular DRM begin
diff --git a/media/java/android/media/MediaPlayer2.java b/media/java/android/media/MediaPlayer2.java
index 37a0424..e183a6b 100644
--- a/media/java/android/media/MediaPlayer2.java
+++ b/media/java/android/media/MediaPlayer2.java
@@ -20,6 +20,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.net.Uri;
@@ -1385,6 +1386,7 @@
* Gets the track type.
* @return TrackType which indicates if the track is video, audio, timed text.
*/
+ @UnsupportedAppUsage
public abstract int getTrackType();
/**
@@ -1393,6 +1395,7 @@
* When the language is unknown or could not be determined,
* ISO-639-2 language code, "und", is returned.
*/
+ @UnsupportedAppUsage
public abstract String getLanguage();
/**
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index b47b4cd..d4bfd61 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -19,6 +19,7 @@
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.hardware.Camera;
import android.os.Bundle;
@@ -97,13 +98,19 @@
private long mNativeContext;
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private Surface mSurface;
+ @UnsupportedAppUsage
private String mPath;
+ @UnsupportedAppUsage
private FileDescriptor mFd;
private File mFile;
+ @UnsupportedAppUsage
private EventHandler mEventHandler;
+ @UnsupportedAppUsage
private OnErrorListener mOnErrorListener;
+ @UnsupportedAppUsage
private OnInfoListener mOnInfoListener;
private int mChannelCount;
@@ -942,6 +949,7 @@
// native implementation
private native void _setOutputFile(FileDescriptor fd) throws IllegalStateException, IOException;
private native void _setNextOutputFile(FileDescriptor fd) throws IllegalStateException, IOException;
+ @UnsupportedAppUsage
private native void _prepare() throws IllegalStateException, IOException;
/**
@@ -1043,6 +1051,7 @@
mEventHandler.removeCallbacksAndMessages(null);
}
+ @UnsupportedAppUsage
private native void native_reset();
/**
@@ -1500,13 +1509,17 @@
*/
public native void release();
+ @UnsupportedAppUsage
private static native final void native_init();
+ @UnsupportedAppUsage
private native final void native_setup(Object mediarecorder_this,
String clientName, String opPackageName) throws IllegalStateException;
+ @UnsupportedAppUsage
private native final void native_finalize();
+ @UnsupportedAppUsage
private native void setParameter(String nameValuePair);
/**
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index d5afd9a..43bee85 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -21,6 +21,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -786,6 +787,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public RouteInfo getSelectedRoute() {
return getSelectedRoute(ROUTE_TYPE_ANY);
}
@@ -939,6 +941,7 @@
/**
* @hide internal use
*/
+ @UnsupportedAppUsage
public void selectRouteInt(int types, RouteInfo route, boolean explicit) {
selectRouteStatic(types, route, explicit);
}
@@ -1527,6 +1530,7 @@
*/
public static class RouteInfo {
CharSequence mName;
+ @UnsupportedAppUsage
int mNameResId;
CharSequence mDescription;
private CharSequence mStatus;
@@ -1558,7 +1562,9 @@
/** @hide */ public static final int STATUS_NONE = 0;
/** @hide */ public static final int STATUS_SCANNING = 1;
- /** @hide */ public static final int STATUS_CONNECTING = 2;
+ /** @hide */
+ @UnsupportedAppUsage
+ public static final int STATUS_CONNECTING = 2;
/** @hide */ public static final int STATUS_AVAILABLE = 3;
/** @hide */ public static final int STATUS_NOT_AVAILABLE = 4;
/** @hide */ public static final int STATUS_IN_USE = 5;
@@ -1675,6 +1681,7 @@
return getName(context.getResources());
}
+ @UnsupportedAppUsage
CharSequence getName(Resources res) {
if (mNameResId != 0) {
return res.getText(mNameResId);
@@ -1770,6 +1777,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public int getStatusCode() {
return mResolvedStatusCode;
}
@@ -1794,6 +1802,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public boolean matchesTypes(int types) {
return (mSupportedTypes & types) != 0;
}
@@ -2024,6 +2033,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public String getDeviceAddress() {
return mDeviceAddress;
}
@@ -2048,11 +2058,13 @@
}
/** @hide */
+ @UnsupportedAppUsage
public boolean isSelected() {
return this == sStatic.mSelectedRoute;
}
/** @hide */
+ @UnsupportedAppUsage
public boolean isDefault() {
return this == sStatic.mDefaultAudioVideo;
}
@@ -2063,6 +2075,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void select() {
selectRouteStatic(mSupportedTypes, this, true);
}
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index a746e6a..dcacb92 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.ContentUris;
@@ -124,6 +125,7 @@
private final static String TAG = "MediaScanner";
+ @UnsupportedAppUsage
private static final String[] FILES_PRESCAN_PROJECTION = new String[] {
Files.FileColumns._ID, // 0
Files.FileColumns.DATA, // 1
@@ -318,14 +320,18 @@
};
private long mNativeContext;
+ @UnsupportedAppUsage
private final Context mContext;
+ @UnsupportedAppUsage
private final String mPackageName;
private final String mVolumeName;
private final ContentProviderClient mMediaProvider;
+ @UnsupportedAppUsage
private final Uri mAudioUri;
private final Uri mVideoUri;
private final Uri mImagesUri;
private final Uri mPlaylistsUri;
+ @UnsupportedAppUsage
private final Uri mFilesUri;
private final Uri mFilesUriNoNotify;
private final boolean mProcessPlaylists;
@@ -348,10 +354,13 @@
/** Whether the scanner has set a default sound for the alarm ringtone. */
private boolean mDefaultAlarmSet;
/** The filename for the default sound for the ringer ringtone. */
+ @UnsupportedAppUsage
private String mDefaultRingtoneFilename;
/** The filename for the default sound for the notification ringtone. */
+ @UnsupportedAppUsage
private String mDefaultNotificationFilename;
/** The filename for the default sound for the alarm ringtone. */
+ @UnsupportedAppUsage
private String mDefaultAlarmAlertFilename;
/**
* The prefix for system properties that define the default sound for
@@ -363,15 +372,18 @@
private final BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options();
private static class FileEntry {
+ @UnsupportedAppUsage
long mRowId;
String mPath;
long mLastModified;
int mFormat;
int mMediaType;
+ @UnsupportedAppUsage
boolean mLastModifiedChanged;
/** @deprecated kept intact for lame apps using reflection */
@Deprecated
+ @UnsupportedAppUsage
FileEntry(long rowId, String path, long lastModified, int format) {
this(rowId, path, lastModified, format, FileColumns.MEDIA_TYPE_NONE);
}
@@ -400,10 +412,12 @@
private final ArrayList<PlaylistEntry> mPlaylistEntries = new ArrayList<>();
private final ArrayList<FileEntry> mPlayLists = new ArrayList<>();
+ @UnsupportedAppUsage
private MediaInserter mMediaInserter;
private DrmManagerClient mDrmManagerClient = null;
+ @UnsupportedAppUsage
public MediaScanner(Context c, String volumeName) {
native_setup();
mContext = c;
@@ -467,8 +481,10 @@
+ Settings.System.ALARM_ALERT);
}
+ @UnsupportedAppUsage
private final MyMediaScannerClient mClient = new MyMediaScannerClient();
+ @UnsupportedAppUsage
private boolean isDrmEnabled() {
String prop = SystemProperties.get("drm.service.enabled");
return prop != null && prop.equals("true");
@@ -484,18 +500,23 @@
private String mTitle;
private String mComposer;
private String mGenre;
+ @UnsupportedAppUsage
private String mMimeType;
+ @UnsupportedAppUsage
private int mFileType;
private int mTrack;
private int mYear;
private int mDuration;
+ @UnsupportedAppUsage
private String mPath;
private long mDate;
private long mLastModified;
private long mFileSize;
private String mWriter;
private int mCompilation;
+ @UnsupportedAppUsage
private boolean mIsDrm;
+ @UnsupportedAppUsage
private boolean mNoMedia; // flag to suppress file from appearing in media tables
private boolean mScanSuccess;
private int mWidth;
@@ -506,6 +527,7 @@
mDateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
}
+ @UnsupportedAppUsage
public FileEntry beginFile(String path, String mimeType, long lastModified,
long fileSize, boolean isDirectory, boolean noMedia) {
mMimeType = mimeType;
@@ -584,6 +606,7 @@
}
@Override
+ @UnsupportedAppUsage
public void scanFile(String path, long lastModified, long fileSize,
boolean isDirectory, boolean noMedia) {
// This is the callback funtion from native codes.
@@ -591,6 +614,7 @@
doScanFile(path, null, lastModified, fileSize, isDirectory, false, noMedia);
}
+ @UnsupportedAppUsage
public Uri doScanFile(String path, String mimeType, long lastModified,
long fileSize, boolean isDirectory, boolean scanAlways, boolean noMedia) {
Uri result = null;
@@ -699,6 +723,7 @@
return result;
}
+ @UnsupportedAppUsage
public void handleStringTag(String name, String value) {
if (name.equalsIgnoreCase("title") || name.startsWith("title;")) {
// Don't trim() here, to preserve the special \001 character
@@ -843,6 +868,7 @@
return false;
}
+ @UnsupportedAppUsage
public void setMimeType(String mimeType) {
if ("audio/mp4".equals(mMimeType) &&
mimeType.startsWith("video")) {
@@ -861,6 +887,7 @@
*
* @return a map of values
*/
+ @UnsupportedAppUsage
private ContentValues toValues() {
ContentValues map = new ContentValues();
@@ -917,6 +944,7 @@
return map;
}
+ @UnsupportedAppUsage
private Uri endFile(FileEntry entry, boolean ringtones, boolean notifications,
boolean alarms, boolean music, boolean podcasts)
throws RemoteException {
@@ -1148,6 +1176,7 @@
Settings.System.putInt(cr, settingSetIndicatorName(settingName), 1);
}
+ @UnsupportedAppUsage
private int getFileTypeFromDrm(String path) {
if (!isDrmEnabled()) {
return 0;
@@ -1198,6 +1227,7 @@
}
}
+ @UnsupportedAppUsage
private void prescan(String filePath, boolean prescanFiles) throws RemoteException {
Cursor c = null;
String where = null;
@@ -1344,6 +1374,7 @@
}
}
+ @UnsupportedAppUsage
private void postscan(final String[] directories) throws RemoteException {
// handle playlists last, after we know what media files are on the storage.
@@ -1408,6 +1439,7 @@
}
// this function is used to scan a single file
+ @UnsupportedAppUsage
public Uri scanSingleFile(String path, String mimeType) {
try {
prescan(path, true);
@@ -1480,6 +1512,7 @@
}
}
+ @UnsupportedAppUsage
public static boolean isNoMediaPath(String path) {
if (path == null) {
return false;
@@ -1578,6 +1611,7 @@
}
}
+ @UnsupportedAppUsage
FileEntry makeEntryFor(String path) {
String where;
String[] selectionArgs;
@@ -1914,6 +1948,7 @@
private native void processDirectory(String path, MediaScannerClient client);
private native boolean processFile(String path, String mimeType, MediaScannerClient client);
+ @UnsupportedAppUsage
private native void setLocale(String locale);
public native byte[] extractAlbumArt(FileDescriptor fd);
diff --git a/media/java/android/media/Metadata.java b/media/java/android/media/Metadata.java
index 4b8f81e..792a2ba 100644
--- a/media/java/android/media/Metadata.java
+++ b/media/java/android/media/Metadata.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.util.Log;
import android.util.MathUtils;
@@ -68,18 +69,22 @@
/**
* Indicate whether the media can be paused
*/
+ @UnsupportedAppUsage
public static final int PAUSE_AVAILABLE = 1; // Boolean
/**
* Indicate whether the media can be backward seeked
*/
+ @UnsupportedAppUsage
public static final int SEEK_BACKWARD_AVAILABLE = 2; // Boolean
/**
* Indicate whether the media can be forward seeked
*/
+ @UnsupportedAppUsage
public static final int SEEK_FORWARD_AVAILABLE = 3; // Boolean
/**
* Indicate whether the media can be seeked
*/
+ @UnsupportedAppUsage
public static final int SEEK_AVAILABLE = 4; // Boolean
// TODO: Should we use numbers compatible with the metadata retriever?
@@ -264,6 +269,7 @@
/**
* {@hide}
*/
+ @UnsupportedAppUsage
public Metadata() { }
/**
@@ -382,6 +388,7 @@
* @return false if an error occurred.
* {@hide}
*/
+ @UnsupportedAppUsage
public boolean parse(Parcel parcel) {
if (parcel.dataAvail() < kMetaHeaderSize) {
Log.e(TAG, "Not enough data " + parcel.dataAvail());
@@ -418,6 +425,7 @@
/**
* @return The set of metadata ID found.
*/
+ @UnsupportedAppUsage
public Set<Integer> keySet() {
return mKeyToPosMap.keySet();
}
@@ -425,6 +433,7 @@
/**
* @return true if a value is present for the given key.
*/
+ @UnsupportedAppUsage
public boolean has(final int metadataId) {
if (!checkMetadataId(metadataId)) {
throw new IllegalArgumentException("Invalid key: " + metadataId);
@@ -439,6 +448,7 @@
/**
* {@hide}
*/
+ @UnsupportedAppUsage
public String getString(final int key) {
checkType(key, STRING_VAL);
return mParcel.readString();
@@ -447,6 +457,7 @@
/**
* {@hide}
*/
+ @UnsupportedAppUsage
public int getInt(final int key) {
checkType(key, INTEGER_VAL);
return mParcel.readInt();
@@ -455,6 +466,7 @@
/**
* Get the boolean value indicated by key
*/
+ @UnsupportedAppUsage
public boolean getBoolean(final int key) {
checkType(key, BOOLEAN_VAL);
return mParcel.readInt() == 1;
@@ -463,6 +475,7 @@
/**
* {@hide}
*/
+ @UnsupportedAppUsage
public long getLong(final int key) {
checkType(key, LONG_VAL); /**
* {@hide}
@@ -473,6 +486,7 @@
/**
* {@hide}
*/
+ @UnsupportedAppUsage
public double getDouble(final int key) {
checkType(key, DOUBLE_VAL);
return mParcel.readDouble();
@@ -481,6 +495,7 @@
/**
* {@hide}
*/
+ @UnsupportedAppUsage
public byte[] getByteArray(final int key) {
checkType(key, BYTE_ARRAY_VAL);
return mParcel.createByteArray();
@@ -489,6 +504,7 @@
/**
* {@hide}
*/
+ @UnsupportedAppUsage
public Date getDate(final int key) {
checkType(key, DATE_VAL);
final long timeSinceEpoch = mParcel.readLong();
diff --git a/media/java/android/media/MicrophoneInfo.java b/media/java/android/media/MicrophoneInfo.java
index d6399a4..f805975 100644
--- a/media/java/android/media/MicrophoneInfo.java
+++ b/media/java/android/media/MicrophoneInfo.java
@@ -18,6 +18,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.util.Pair;
import java.lang.annotation.Retention;
@@ -163,6 +164,7 @@
private int mType;
private int mDirectionality;
+ @UnsupportedAppUsage
MicrophoneInfo(String deviceId, int type, String address, int location,
int group, int indexInTheGroup, Coordinate3F position,
Coordinate3F orientation, List<Pair<Float, Float>> frequencyResponse,
diff --git a/media/java/android/media/MiniThumbFile.java b/media/java/android/media/MiniThumbFile.java
index 9899367..716e0cb 100644
--- a/media/java/android/media/MiniThumbFile.java
+++ b/media/java/android/media/MiniThumbFile.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
@@ -59,6 +60,7 @@
* We store different types of thumbnails in different files. To remain backward compatibility,
* we should hashcode of content://media/external/images/media remains the same.
*/
+ @UnsupportedAppUsage
public static synchronized void reset() {
for (MiniThumbFile file : sThumbFiles.values()) {
file.deactivate();
diff --git a/media/java/android/media/PlaybackParams.java b/media/java/android/media/PlaybackParams.java
index b85e4d0..6594dd7 100644
--- a/media/java/android/media/PlaybackParams.java
+++ b/media/java/android/media/PlaybackParams.java
@@ -18,6 +18,7 @@
import android.annotation.IntDef;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -85,16 +86,25 @@
public static final int AUDIO_STRETCH_MODE_VOICE = 1;
// flags to indicate which params are actually set
+ @UnsupportedAppUsage
private static final int SET_SPEED = 1 << 0;
+ @UnsupportedAppUsage
private static final int SET_PITCH = 1 << 1;
+ @UnsupportedAppUsage
private static final int SET_AUDIO_FALLBACK_MODE = 1 << 2;
+ @UnsupportedAppUsage
private static final int SET_AUDIO_STRETCH_MODE = 1 << 3;
+ @UnsupportedAppUsage
private int mSet = 0;
// params
+ @UnsupportedAppUsage
private int mAudioFallbackMode = AUDIO_FALLBACK_MODE_DEFAULT;
+ @UnsupportedAppUsage
private int mAudioStretchMode = AUDIO_STRETCH_MODE_DEFAULT;
+ @UnsupportedAppUsage
private float mPitch = 1.0f;
+ @UnsupportedAppUsage
private float mSpeed = 1.0f;
public PlaybackParams() {
diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java
index 6d32eff..3b51c82 100644
--- a/media/java/android/media/RemoteControlClient.java
+++ b/media/java/android/media/RemoteControlClient.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Intent;
@@ -820,6 +821,7 @@
* position updates. The playback position being "readable" is considered from the application's
* point of view.
*/
+ @UnsupportedAppUsage
public static int MEDIA_POSITION_READABLE = 1 << 0;
/**
* @hide
@@ -827,6 +829,7 @@
* playback position updates. The playback position being "writable"
* is considered from the application's point of view.
*/
+ @UnsupportedAppUsage
public static int MEDIA_POSITION_WRITABLE = 1 << 1;
/** @hide */
diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java
index 90f2163..b6e3276 100644
--- a/media/java/android/media/RemoteController.java
+++ b/media/java/android/media/RemoteController.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
@@ -79,6 +80,7 @@
private int mArtworkHeight = -1;
private boolean mEnabled = true;
// synchronized on mInfoLock, for USE_SESSION apis.
+ @UnsupportedAppUsage
private MediaController mCurrentSession;
/**
@@ -292,6 +294,7 @@
* @return true if successful
* @throws IllegalArgumentException
*/
+ @UnsupportedAppUsage
public boolean setArtworkConfiguration(boolean wantBitmap, int width, int height)
throws IllegalArgumentException {
synchronized (mInfoLock) {
@@ -689,6 +692,7 @@
* Used by AudioManager to access user listener receiving the client update notifications
* @return
*/
+ @UnsupportedAppUsage
OnClientUpdateListener getUpdateListener() {
return mOnClientUpdateListener;
}
diff --git a/media/java/android/media/RemoteDisplay.java b/media/java/android/media/RemoteDisplay.java
index 5add65a..2be206f 100644
--- a/media/java/android/media/RemoteDisplay.java
+++ b/media/java/android/media/RemoteDisplay.java
@@ -18,6 +18,7 @@
import dalvik.system.CloseGuard;
+import android.annotation.UnsupportedAppUsage;
import android.os.Handler;
import android.view.Surface;
@@ -88,6 +89,7 @@
/**
* Disconnects the remote display and stops listening for new connections.
*/
+ @UnsupportedAppUsage
public void dispose() {
dispose(false);
}
@@ -125,6 +127,7 @@
}
// Called from native.
+ @UnsupportedAppUsage
private void notifyDisplayConnected(final Surface surface,
final int width, final int height, final int flags, final int session) {
mHandler.post(new Runnable() {
@@ -136,6 +139,7 @@
}
// Called from native.
+ @UnsupportedAppUsage
private void notifyDisplayDisconnected() {
mHandler.post(new Runnable() {
@Override
@@ -146,6 +150,7 @@
}
// Called from native.
+ @UnsupportedAppUsage
private void notifyDisplayError(final int error) {
mHandler.post(new Runnable() {
@Override
diff --git a/media/java/android/media/RemoteDisplayState.java b/media/java/android/media/RemoteDisplayState.java
index 1197f65..f8a4605 100644
--- a/media/java/android/media/RemoteDisplayState.java
+++ b/media/java/android/media/RemoteDisplayState.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
@@ -40,8 +41,10 @@
/**
* A list of all remote displays.
*/
+ @UnsupportedAppUsage
public final ArrayList<RemoteDisplayInfo> displays;
+ @UnsupportedAppUsage
public RemoteDisplayState() {
displays = new ArrayList<RemoteDisplayInfo>();
}
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index c0468dc9..32aba7f 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.Context;
@@ -71,9 +72,11 @@
private final IRingtonePlayer mRemotePlayer;
private final Binder mRemoteToken;
+ @UnsupportedAppUsage
private MediaPlayer mLocalPlayer;
private final MyOnCompletionListener mCompletionListener = new MyOnCompletionListener();
+ @UnsupportedAppUsage
private Uri mUri;
private String mTitle;
@@ -87,6 +90,7 @@
private final Object mPlaybackSettingsLock = new Object();
/** {@hide} */
+ @UnsupportedAppUsage
public Ringtone(Context context, boolean allowRemote) {
mContext = context;
mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
@@ -298,6 +302,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setUri(Uri uri) {
destroyLocalPlayer();
@@ -335,6 +340,7 @@
}
/** {@hide} */
+ @UnsupportedAppUsage
public Uri getUri() {
return mUri;
}
diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java
index 0dddaf5..66feb1d 100644
--- a/media/java/android/media/RingtoneManager.java
+++ b/media/java/android/media/RingtoneManager.java
@@ -21,6 +21,7 @@
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.WorkerThread;
import android.app.Activity;
import android.content.ContentProvider;
@@ -244,6 +245,7 @@
private final Activity mActivity;
private final Context mContext;
+ @UnsupportedAppUsage
private Cursor mCursor;
private int mType = TYPE_RINGTONE;
@@ -602,6 +604,7 @@
}
}
+ @UnsupportedAppUsage
private Cursor getInternalRingtones() {
return query(
MediaStore.Audio.Media.INTERNAL_CONTENT_URI, INTERNAL_COLUMNS,
@@ -613,6 +616,7 @@
return getMediaRingtones(mContext);
}
+ @UnsupportedAppUsage
private Cursor getMediaRingtones(Context context) {
if (PackageManager.PERMISSION_GRANTED != context.checkPermission(
android.Manifest.permission.READ_EXTERNAL_STORAGE,
@@ -727,6 +731,7 @@
* not be set (and the default used instead).
* @see #getRingtone(Context, Uri)
*/
+ @UnsupportedAppUsage
private static Ringtone getRingtone(final Context context, Uri ringtoneUri, int streamType) {
try {
final Ringtone r = new Ringtone(context, true);
diff --git a/media/java/android/media/SubtitleController.java b/media/java/android/media/SubtitleController.java
index fd72b39..1a241af 100644
--- a/media/java/android/media/SubtitleController.java
+++ b/media/java/android/media/SubtitleController.java
@@ -19,6 +19,7 @@
import java.util.Locale;
import java.util.Vector;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.media.MediaPlayer.TrackInfo;
import android.media.SubtitleTrack.RenderingWidget;
@@ -41,6 +42,7 @@
private SubtitleTrack mSelectedTrack;
private boolean mShowing;
private CaptioningManager mCaptioningManager;
+ @UnsupportedAppUsage
private Handler mHandler;
private static final int WHAT_SHOW = 1;
@@ -91,6 +93,7 @@
*
* @param timeProvider
*/
+ @UnsupportedAppUsage
public SubtitleController(
Context context,
MediaTimeProvider timeProvider,
@@ -300,6 +303,7 @@
}
/** @hide - must be called from anchor thread */
+ @UnsupportedAppUsage
public void reset() {
checkAnchorLooper();
hide();
@@ -344,6 +348,7 @@
*
* Should be called from the anchor's (UI) thread. {@see #Anchor.getSubtitleLooper}
*/
+ @UnsupportedAppUsage
public void show() {
processOnAnchor(mHandler.obtainMessage(WHAT_SHOW));
}
@@ -361,6 +366,7 @@
*
* Should be called from the anchor's (UI) thread. {@see #Anchor.getSubtitleLooper}
*/
+ @UnsupportedAppUsage
public void hide() {
processOnAnchor(mHandler.obtainMessage(WHAT_HIDE));
}
@@ -412,6 +418,7 @@
* @param renderer a {@link SubtitleController.Renderer} object that adds
* support for a subtitle format.
*/
+ @UnsupportedAppUsage
public void registerRenderer(Renderer renderer) {
synchronized(mRenderers) {
// TODO how to get available renderers in the system
diff --git a/media/java/android/media/SubtitleTrack.java b/media/java/android/media/SubtitleTrack.java
index 6c8e323..5596c32 100644
--- a/media/java/android/media/SubtitleTrack.java
+++ b/media/java/android/media/SubtitleTrack.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Canvas;
import android.media.MediaPlayer.TrackInfo;
import android.os.Handler;
@@ -677,6 +678,7 @@
*
* @param callback update callback
*/
+ @UnsupportedAppUsage
public void setOnChangedListener(OnChangedListener callback);
/**
@@ -685,6 +687,7 @@
* @param width width in pixels
* @param height height in pixels
*/
+ @UnsupportedAppUsage
public void setSize(int width, int height);
/**
@@ -699,16 +702,19 @@
*
* @param c canvas on which to render subtitles
*/
+ @UnsupportedAppUsage
public void draw(Canvas c);
/**
* Called when the widget is attached to a window.
*/
+ @UnsupportedAppUsage
public void onAttachedToWindow();
/**
* Called when the widget is detached from a window.
*/
+ @UnsupportedAppUsage
public void onDetachedFromWindow();
/**
diff --git a/media/java/android/media/ThumbnailUtils.java b/media/java/android/media/ThumbnailUtils.java
index 429ef29..07ab069 100644
--- a/media/java/android/media/ThumbnailUtils.java
+++ b/media/java/android/media/ThumbnailUtils.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.content.ContentResolver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -65,6 +66,7 @@
* Constant used to indicate the dimension of micro thumbnail.
* @hide Only used by media framework and media provider internally.
*/
+ @UnsupportedAppUsage
public static final int TARGET_SIZE_MICRO_THUMBNAIL = 96;
/**
@@ -81,6 +83,7 @@
*
* @hide This method is only used by media framework and media provider internally.
*/
+ @UnsupportedAppUsage
public static Bitmap createImageThumbnail(String filePath, int kind) {
boolean wantMini = (kind == Images.Thumbnails.MINI_KIND);
int targetSize = wantMini
@@ -252,6 +255,7 @@
* For example, BitmapFactory downsamples an image by 2 even though the
* request is 3. So we round up the sample size to avoid OOM.
*/
+ @UnsupportedAppUsage
private static int computeSampleSize(BitmapFactory.Options options,
int minSideLength, int maxNumOfPixels) {
int initialSize = computeInitialSampleSize(options, minSideLength,
@@ -270,6 +274,7 @@
return roundedSize;
}
+ @UnsupportedAppUsage
private static int computeInitialSampleSize(BitmapFactory.Options options,
int minSideLength, int maxNumOfPixels) {
double w = options.outWidth;
@@ -337,6 +342,7 @@
return b;
}
+ @UnsupportedAppUsage
private static void closeSilently(ParcelFileDescriptor c) {
if (c == null) return;
try {
@@ -346,6 +352,7 @@
}
}
+ @UnsupportedAppUsage
private static ParcelFileDescriptor makeInputStream(
Uri uri, ContentResolver cr) {
try {
@@ -358,6 +365,7 @@
/**
* Transform source Bitmap to targeted width and height.
*/
+ @UnsupportedAppUsage
private static Bitmap transform(Matrix scaler,
Bitmap source,
int targetWidth,
@@ -474,6 +482,7 @@
* The functions returns a SizedThumbnailBitmap,
* which contains a downsampled bitmap and the thumbnail data in EXIF if exists.
*/
+ @UnsupportedAppUsage
private static void createThumbnailFromEXIF(String filePath, int targetSize,
int maxPixels, SizedThumbnailBitmap sizedThumbBitmap) {
if (filePath == null) return;
diff --git a/media/java/android/media/TimedText.java b/media/java/android/media/TimedText.java
index e6a7e13..ebcea19 100644
--- a/media/java/android/media/TimedText.java
+++ b/media/java/android/media/TimedText.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Rect;
import android.os.Parcel;
import android.util.Log;
@@ -724,6 +725,7 @@
* List of CharPos, Karaoke, Font, Style, and HyperText, or 3) an instance of
* Justification.
*/
+ @UnsupportedAppUsage
private Object getObject(final int key) {
if (containsKey(key)) {
return mKeyObjectMap.get(key);
diff --git a/media/java/android/media/ToneGenerator.java b/media/java/android/media/ToneGenerator.java
index 4661226..c6d5ba3 100644
--- a/media/java/android/media/ToneGenerator.java
+++ b/media/java/android/media/ToneGenerator.java
@@ -16,6 +16,8 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
+
/**
@@ -893,5 +895,6 @@
protected void finalize() { native_finalize(); }
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private long mNativeContext; // accessed by native methods
}
diff --git a/media/java/android/media/TtmlRenderer.java b/media/java/android/media/TtmlRenderer.java
index 9d587b9..34154ce 100644
--- a/media/java/android/media/TtmlRenderer.java
+++ b/media/java/android/media/TtmlRenderer.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
@@ -48,6 +49,7 @@
private TtmlRenderingWidget mRenderingWidget;
+ @UnsupportedAppUsage
public TtmlRenderer(Context context) {
mContext = context;
}
diff --git a/media/java/android/media/VolumeShaper.java b/media/java/android/media/VolumeShaper.java
index b654214..2f33e75 100644
--- a/media/java/android/media/VolumeShaper.java
+++ b/media/java/android/media/VolumeShaper.java
@@ -19,6 +19,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -413,16 +414,23 @@
*/
// type of VolumeShaper
+ @UnsupportedAppUsage
private final int mType;
// valid when mType is TYPE_ID
+ @UnsupportedAppUsage
private final int mId;
// valid when mType is TYPE_SCALE
+ @UnsupportedAppUsage
private final int mOptionFlags;
+ @UnsupportedAppUsage
private final double mDurationMs;
+ @UnsupportedAppUsage
private final int mInterpolatorType;
+ @UnsupportedAppUsage
private final float[] mTimes;
+ @UnsupportedAppUsage
private final float[] mVolumes;
@Override
@@ -565,6 +573,7 @@
* Direct constructor for VolumeShaper.
* Use the Builder instead.
*/
+ @UnsupportedAppUsage
private Configuration(@Type int type,
int id,
@OptionFlag int optionFlags,
@@ -1124,8 +1133,11 @@
private static final int FLAG_PUBLIC_ALL = FLAG_REVERSE | FLAG_TERMINATE;
+ @UnsupportedAppUsage
private final int mFlags;
+ @UnsupportedAppUsage
private final int mReplaceId;
+ @UnsupportedAppUsage
private final float mXOffset;
@Override
@@ -1187,6 +1199,7 @@
}
};
+ @UnsupportedAppUsage
private Operation(@Flag int flags, int replaceId, float xOffset) {
mFlags = flags;
mReplaceId = replaceId;
@@ -1346,7 +1359,9 @@
* Not for public use.
*/
public static final class State implements Parcelable {
+ @UnsupportedAppUsage
private float mVolume;
+ @UnsupportedAppUsage
private float mXOffset;
@Override
@@ -1397,6 +1412,7 @@
}
};
+ @UnsupportedAppUsage
/* package */ State(float volume, float xOffset) {
mVolume = volume;
mXOffset = xOffset;
diff --git a/media/java/android/media/WebVttRenderer.java b/media/java/android/media/WebVttRenderer.java
index 91c53fa..36458d7 100644
--- a/media/java/android/media/WebVttRenderer.java
+++ b/media/java/android/media/WebVttRenderer.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.text.Layout.Alignment;
import android.text.SpannableStringBuilder;
@@ -44,6 +45,7 @@
private WebVttRenderingWidget mRenderingWidget;
+ @UnsupportedAppUsage
public WebVttRenderer(Context context) {
mContext = context;
}
diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java
index 24c595f..1a456f6 100644
--- a/media/java/android/media/audiofx/AudioEffect.java
+++ b/media/java/android/media/audiofx/AudioEffect.java
@@ -19,6 +19,7 @@
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.os.Handler;
import android.os.Looper;
@@ -400,6 +401,7 @@
* @hide
*/
+ @UnsupportedAppUsage
public AudioEffect(UUID type, UUID uuid, int priority, int audioSession)
throws IllegalArgumentException, UnsupportedOperationException,
RuntimeException {
@@ -629,6 +631,7 @@
* @see #setParameter(byte[], byte[])
* @hide
*/
+ @UnsupportedAppUsage
public int setParameter(int[] param, short[] value)
throws IllegalStateException {
if (param.length > 2 || value.length > 2) {
@@ -778,6 +781,7 @@
* In case of success, the returns the number of meaningful integers in value array.
* @hide
*/
+ @UnsupportedAppUsage
public int getParameter(int[] param, int[] value)
throws IllegalStateException {
if (param.length > 2 || value.length > 2) {
@@ -846,6 +850,7 @@
* @see #getParameter(byte[], byte[])
* @hide
*/
+ @UnsupportedAppUsage
public int getParameter(int[] param, byte[] value)
throws IllegalStateException {
if (param.length > 2) {
@@ -867,6 +872,7 @@
* In case of failure, the returned value is negative and implementation specific.
* @hide
*/
+ @UnsupportedAppUsage
public int command(int cmdCode, byte[] command, byte[] reply)
throws IllegalStateException {
checkState("command()");
@@ -1277,6 +1283,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public void checkState(String methodName) throws IllegalStateException {
synchronized (mStateLock) {
if (mState != STATE_INITIALIZED) {
diff --git a/media/java/android/media/audiofx/DefaultEffect.java b/media/java/android/media/audiofx/DefaultEffect.java
index a919868..ce087ad 100644
--- a/media/java/android/media/audiofx/DefaultEffect.java
+++ b/media/java/android/media/audiofx/DefaultEffect.java
@@ -24,6 +24,7 @@
* <p>Applications should not use the DefaultEffect class directly but one of its derived classes
* to control specific types of defaults:
* <ul>
+ * <li> {@link android.media.audiofx.SourceDefaultEffect}</li>
* <li> {@link android.media.audiofx.StreamDefaultEffect}</li>
* </ul>
* <p>Creating a DefaultEffect object will register the corresponding effect engine as a default
diff --git a/media/java/android/media/audiofx/SourceDefaultEffect.java b/media/java/android/media/audiofx/SourceDefaultEffect.java
new file mode 100644
index 0000000..d7a292e
--- /dev/null
+++ b/media/java/android/media/audiofx/SourceDefaultEffect.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media.audiofx;
+
+import android.annotation.RequiresPermission;
+import android.app.ActivityThread;
+import android.util.Log;
+import java.util.UUID;
+
+/**
+ * SourceDefaultEffect is a default effect that attaches automatically to all AudioRecord and
+ * MediaRecorder instances of a given source type.
+ * <p>see {@link android.media.audiofx.DefaultEffect} class for more details on default effects.
+ * @hide
+ */
+
+public class SourceDefaultEffect extends DefaultEffect {
+ static {
+ System.loadLibrary("audioeffect_jni");
+ }
+
+ private final static String TAG = "SourceDefaultEffect-JAVA";
+
+ /**
+ * Class constructor.
+ *
+ * @param type type of effect engine to be default. This parameter is ignored if uuid is set,
+ * and can be set to {@link android.media.audiofx.AudioEffect#EFFECT_TYPE_NULL}
+ * in that case.
+ * @param uuid unique identifier of a particular effect implementation to be default. This
+ * parameter can be set to
+ * {@link android.media.audiofx.AudioEffect#EFFECT_TYPE_NULL}, in which case only
+ * the type will be used to select the effect.
+ * @param priority the priority level requested by the application for controlling the effect
+ * engine. As the same engine can be shared by several applications, this parameter
+ * indicates how much the requesting application needs control of effect parameters.
+ * The normal priority is 0, above normal is a positive number, below normal a
+ * negative number.
+ * @param source a MediaRecorder.AudioSource.* constant from
+ * {@link android.media.MediaRecorder.AudioSource} indicating
+ * what sources the given effect should attach to by default. Note that similar
+ * sources may share defaults.
+ *
+ * @throws java.lang.IllegalArgumentException
+ * @throws java.lang.UnsupportedOperationException
+ * @throws java.lang.RuntimeException
+ */
+ @RequiresPermission(value = android.Manifest.permission.MODIFY_DEFAULT_AUDIO_EFFECTS,
+ conditional = true) // Android Things uses an alternate permission.
+ public SourceDefaultEffect(UUID type, UUID uuid, int priority, int source) {
+ int[] id = new int[1];
+ int initResult = native_setup(type.toString(),
+ uuid.toString(),
+ priority,
+ source,
+ ActivityThread.currentOpPackageName(),
+ id);
+ if (initResult != AudioEffect.SUCCESS) {
+ Log.e(TAG, "Error code " + initResult + " when initializing SourceDefaultEffect");
+ switch (initResult) {
+ case AudioEffect.ERROR_BAD_VALUE:
+ throw (new IllegalArgumentException(
+ "Source, type uuid, or implementation uuid not supported."));
+ case AudioEffect.ERROR_INVALID_OPERATION:
+ throw (new UnsupportedOperationException(
+ "Effect library not loaded"));
+ default:
+ throw (new RuntimeException(
+ "Cannot initialize effect engine for type: " + type
+ + " Error: " + initResult));
+ }
+ }
+
+ mId = id[0];
+ }
+
+
+ /**
+ * Releases the native SourceDefaultEffect resources. It is a good practice to
+ * release the default effect when done with use as control can be returned to
+ * other applications or the native resources released.
+ */
+ public void release() {
+ native_release(mId);
+ }
+
+ @Override
+ protected void finalize() {
+ release();
+ }
+
+ // ---------------------------------------------------------
+ // Native methods called from the Java side
+ // --------------------
+
+ private native final int native_setup(String type,
+ String uuid,
+ int priority,
+ int source,
+ String opPackageName,
+ int[] id);
+
+ private native final void native_release(int id);
+}
diff --git a/media/java/android/media/audiofx/Visualizer.java b/media/java/android/media/audiofx/Visualizer.java
index f2b4fe0..a7bdf4f 100644
--- a/media/java/android/media/audiofx/Visualizer.java
+++ b/media/java/android/media/audiofx/Visualizer.java
@@ -16,6 +16,7 @@
package android.media.audiofx;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.util.Log;
import java.lang.ref.WeakReference;
@@ -164,6 +165,7 @@
/**
* System wide unique Identifier of the visualizer engine used by this Visualizer instance
*/
+ @UnsupportedAppUsage
private int mId;
/**
diff --git a/media/java/android/media/audiopolicy/AudioMix.java b/media/java/android/media/audiopolicy/AudioMix.java
index fca0cc7..8bc1d35 100644
--- a/media/java/android/media/audiopolicy/AudioMix.java
+++ b/media/java/android/media/audiopolicy/AudioMix.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.media.AudioDeviceInfo;
import android.media.AudioFormat;
import android.media.AudioSystem;
@@ -33,17 +34,24 @@
@SystemApi
public class AudioMix {
+ @UnsupportedAppUsage
private AudioMixingRule mRule;
+ @UnsupportedAppUsage
private AudioFormat mFormat;
+ @UnsupportedAppUsage
private int mRouteFlags;
+ @UnsupportedAppUsage
private int mMixType = MIX_TYPE_INVALID;
// written by AudioPolicy
int mMixState = MIX_STATE_DISABLED;
+ @UnsupportedAppUsage
int mCallbackFlags;
+ @UnsupportedAppUsage
String mDeviceAddress;
// initialized in constructor, read by AudioPolicyConfig
+ @UnsupportedAppUsage
final int mDeviceSystemType; // an AudioSystem.DEVICE_* value, not AudioDeviceInfo.TYPE_*
/**
diff --git a/media/java/android/media/audiopolicy/AudioMixingRule.java b/media/java/android/media/audiopolicy/AudioMixingRule.java
index 749a45e..fbee62a 100644
--- a/media/java/android/media/audiopolicy/AudioMixingRule.java
+++ b/media/java/android/media/audiopolicy/AudioMixingRule.java
@@ -17,6 +17,7 @@
package android.media.audiopolicy;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.media.AudioAttributes;
import android.os.Parcel;
import android.util.Log;
@@ -92,8 +93,11 @@
RULE_EXCLUSION_MASK | RULE_MATCH_UID;
static final class AudioMixMatchCriterion {
+ @UnsupportedAppUsage
final AudioAttributes mAttr;
+ @UnsupportedAppUsage
final int mIntProp;
+ @UnsupportedAppUsage
final int mRule;
/** input parameters must be valid */
@@ -157,6 +161,7 @@
private final int mTargetMixType;
int getTargetMixType() { return mTargetMixType; }
+ @UnsupportedAppUsage
private final ArrayList<AudioMixMatchCriterion> mCriteria;
ArrayList<AudioMixMatchCriterion> getCriteria() { return mCriteria; }
diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java
index 3f8bab5..c4b82c3 100644
--- a/media/java/android/media/session/MediaController.java
+++ b/media/java/android/media/session/MediaController.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.content.Context;
import android.content.pm.ParceledListSlice;
@@ -503,6 +504,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public boolean controlsSameSession(MediaController other) {
if (other == null) return false;
return mSessionBinder.asBinder() == other.getSessionBinder().asBinder();
diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java
index fad7e3f..d43cd30 100644
--- a/media/java/android/media/session/MediaSession.java
+++ b/media/java/android/media/session/MediaSession.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
@@ -132,6 +133,7 @@
private final CallbackStub mCbStub;
// Do not change the name of mCallback. Support lib accesses this by using reflection.
+ @UnsupportedAppUsage
private CallbackMessageHandler mCallback;
private VolumeProvider mVolumeProvider;
private PlaybackState mPlaybackState;
@@ -555,6 +557,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public String getCallingPackage() {
if (mCallback != null && mCallback.mCurrentControllerInfo != null) {
return mCallback.mCurrentControllerInfo.getPackageName();
@@ -1304,6 +1307,7 @@
public static final int UNKNOWN_ID = -1;
private final MediaDescription mDescription;
+ @UnsupportedAppUsage
private final long mId;
/**
diff --git a/media/java/android/media/session/MediaSessionLegacyHelper.java b/media/java/android/media/session/MediaSessionLegacyHelper.java
index 7c3af31..123c4f7 100644
--- a/media/java/android/media/session/MediaSessionLegacyHelper.java
+++ b/media/java/android/media/session/MediaSessionLegacyHelper.java
@@ -16,6 +16,7 @@
package android.media.session;
+import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.content.ComponentName;
@@ -65,6 +66,7 @@
.getSystemService(Context.MEDIA_SESSION_SERVICE);
}
+ @UnsupportedAppUsage
public static MediaSessionLegacyHelper getHelper(Context context) {
synchronized (sLock) {
if (sInstance == null) {
diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java
index 98fb573..5ade4dd 100644
--- a/media/java/android/media/session/MediaSessionManager.java
+++ b/media/java/android/media/session/MediaSessionManager.java
@@ -22,6 +22,7 @@
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
import android.media.AudioManager;
@@ -144,6 +145,7 @@
* @return A list of controllers for ongoing sessions.
* @hide
*/
+ @UnsupportedAppUsage
public @NonNull List<MediaController> getActiveSessionsForUser(
@Nullable ComponentName notificationListener, int userId) {
ArrayList<MediaController> controllers = new ArrayList<MediaController>();
diff --git a/media/java/android/media/soundtrigger/SoundTriggerDetector.java b/media/java/android/media/soundtrigger/SoundTriggerDetector.java
index 7969ee7..56e5566 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerDetector.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerDetector.java
@@ -22,6 +22,7 @@
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.hardware.soundtrigger.IRecognitionStatusCallback;
import android.hardware.soundtrigger.SoundTrigger;
import android.hardware.soundtrigger.SoundTrigger.RecognitionConfig;
@@ -164,6 +165,7 @@
* @hide
*/
@Nullable
+ @UnsupportedAppUsage
public byte[] getData() {
if (!mTriggerAvailable) {
return mData;
@@ -191,6 +193,7 @@
* @hide
*/
@Nullable
+ @UnsupportedAppUsage
public Integer getCaptureSession() {
if (mCaptureAvailable) {
return mCaptureSession;
diff --git a/media/java/android/media/soundtrigger/SoundTriggerManager.java b/media/java/android/media/soundtrigger/SoundTriggerManager.java
index 107ce8e..9eb0c6d 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerManager.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerManager.java
@@ -23,6 +23,7 @@
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
@@ -239,6 +240,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER)
+ @UnsupportedAppUsage
public int loadSoundModel(SoundModel soundModel) {
if (soundModel == null) {
return STATUS_ERROR;
@@ -281,6 +283,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER)
+ @UnsupportedAppUsage
public int startRecognition(@NonNull UUID soundModelId, @Nullable Bundle params,
@NonNull ComponentName detectionService, @NonNull RecognitionConfig config) {
Preconditions.checkNotNull(soundModelId);
@@ -300,6 +303,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER)
+ @UnsupportedAppUsage
public int stopRecognition(UUID soundModelId) {
if (soundModelId == null) {
return STATUS_ERROR;
@@ -316,6 +320,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER)
+ @UnsupportedAppUsage
public int unloadSoundModel(UUID soundModelId) {
if (soundModelId == null) {
return STATUS_ERROR;
@@ -333,6 +338,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER)
+ @UnsupportedAppUsage
public boolean isRecognitionActive(UUID soundModelId) {
if (soundModelId == null) {
return false;
diff --git a/media/java/android/media/tv/TvInputInfo.java b/media/java/android/media/tv/TvInputInfo.java
index 74085d3..5cb8fb8 100644
--- a/media/java/android/media/tv/TvInputInfo.java
+++ b/media/java/android/media/tv/TvInputInfo.java
@@ -20,6 +20,7 @@
import android.annotation.NonNull;
import android.annotation.StringRes;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -318,6 +319,7 @@
* Returns the component of the service that implements this TV input.
* @hide
*/
+ @UnsupportedAppUsage
public ComponentName getComponent() {
return new ComponentName(mService.serviceInfo.packageName, mService.serviceInfo.name);
}
diff --git a/media/java/android/media/tv/TvInputService.java b/media/java/android/media/tv/TvInputService.java
index e24124d..d9017b4 100644
--- a/media/java/android/media/tv/TvInputService.java
+++ b/media/java/android/media/tv/TvInputService.java
@@ -22,6 +22,7 @@
import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.app.Service;
import android.content.Context;
@@ -283,6 +284,7 @@
private OverlayViewCleanUpTask mOverlayViewCleanUpTask;
private boolean mOverlayViewEnabled;
private IBinder mWindowToken;
+ @UnsupportedAppUsage
private Rect mOverlayFrame;
private long mStartPositionMs = TvInputManager.TIME_SHIFT_INVALID_TIME;
private long mCurrentPositionMs = TvInputManager.TIME_SHIFT_INVALID_TIME;
diff --git a/media/jni/audioeffect/Android.bp b/media/jni/audioeffect/Android.bp
index 0063c11..09c546a 100644
--- a/media/jni/audioeffect/Android.bp
+++ b/media/jni/audioeffect/Android.bp
@@ -3,6 +3,7 @@
srcs: [
"android_media_AudioEffect.cpp",
+ "android_media_SourceDefaultEffect.cpp",
"android_media_StreamDefaultEffect.cpp",
"android_media_Visualizer.cpp",
],
diff --git a/media/jni/audioeffect/android_media_AudioEffect.cpp b/media/jni/audioeffect/android_media_AudioEffect.cpp
index d3ba9f2..693bd8b 100644
--- a/media/jni/audioeffect/android_media_AudioEffect.cpp
+++ b/media/jni/audioeffect/android_media_AudioEffect.cpp
@@ -824,21 +824,19 @@
android_media_AudioEffect_native_queryPreProcessings(JNIEnv *env, jclass clazz __unused,
jint audioSession)
{
- effect_descriptor_t *descriptors = new effect_descriptor_t[AudioEffect::kMaxPreProcessing];
+ auto descriptors = std::make_unique<effect_descriptor_t[]>(AudioEffect::kMaxPreProcessing);
uint32_t numEffects = AudioEffect::kMaxPreProcessing;
status_t status = AudioEffect::queryDefaultPreProcessing((audio_session_t) audioSession,
- descriptors,
+ descriptors.get(),
&numEffects);
if (status != NO_ERROR || numEffects == 0) {
- delete[] descriptors;
return NULL;
}
ALOGV("queryDefaultPreProcessing() got %d effects", numEffects);
jobjectArray ret = env->NewObjectArray(numEffects, fields.clazzDesc, NULL);
if (ret == NULL) {
- delete[] descriptors;
return ret;
}
@@ -875,7 +873,7 @@
if (jdesc == NULL) {
ALOGE("env->NewObject(fields.clazzDesc, fields.midDescCstor)");
env->DeleteLocalRef(ret);
- return NULL;;
+ return NULL;
}
env->SetObjectArrayElement(ret, i, jdesc);
@@ -907,6 +905,7 @@
// ----------------------------------------------------------------------------
+extern int register_android_media_SourceDefaultEffect(JNIEnv *env);
extern int register_android_media_StreamDefaultEffect(JNIEnv *env);
extern int register_android_media_visualizer(JNIEnv *env);
@@ -932,6 +931,11 @@
goto bail;
}
+ if (register_android_media_SourceDefaultEffect(env) < 0) {
+ ALOGE("ERROR: SourceDefaultEffect native registration failed\n");
+ goto bail;
+ }
+
if (register_android_media_StreamDefaultEffect(env) < 0) {
ALOGE("ERROR: StreamDefaultEffect native registration failed\n");
goto bail;
diff --git a/media/jni/audioeffect/android_media_SourceDefaultEffect.cpp b/media/jni/audioeffect/android_media_SourceDefaultEffect.cpp
new file mode 100644
index 0000000..d244bcb7
--- /dev/null
+++ b/media/jni/audioeffect/android_media_SourceDefaultEffect.cpp
@@ -0,0 +1,142 @@
+/*
+ * 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.
+ */
+
+//#define LOG_NDEBUG 0
+#define LOG_TAG "SourceDefaultEffect-JNI"
+
+#include <utils/Errors.h>
+#include <utils/Log.h>
+#include <jni.h>
+#include <nativehelper/JNIHelp.h>
+#include <android_runtime/AndroidRuntime.h>
+#include "media/AudioEffect.h"
+
+#include <nativehelper/ScopedUtfChars.h>
+
+#include "android_media_AudioEffect.h"
+
+using namespace android;
+
+static const char* const kClassPathName = "android/media/audiofx/SourceDefaultEffect";
+
+static jint android_media_SourceDefaultEffect_native_setup(JNIEnv *env,
+ jobject /*thiz*/,
+ jstring type,
+ jstring uuid,
+ jint priority,
+ jint source,
+ jstring opPackageName,
+ jintArray jId)
+{
+ ALOGV("android_media_SourceDefaultEffect_native_setup");
+ status_t lStatus = NO_ERROR;
+ jint* nId = NULL;
+ const char *typeStr = NULL;
+ const char *uuidStr = NULL;
+
+ ScopedUtfChars opPackageNameStr(env, opPackageName);
+
+ if (type != NULL) {
+ typeStr = env->GetStringUTFChars(type, NULL);
+ if (typeStr == NULL) { // Out of memory
+ lStatus = NO_MEMORY;
+ jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
+ goto setup_exit;
+ }
+ }
+
+ if (uuid != NULL) {
+ uuidStr = env->GetStringUTFChars(uuid, NULL);
+ if (uuidStr == NULL) { // Out of memory
+ lStatus = NO_MEMORY;
+ jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
+ goto setup_exit;
+ }
+ }
+
+ if (typeStr == NULL && uuidStr == NULL) {
+ lStatus = BAD_VALUE;
+ goto setup_exit;
+ }
+
+ nId = reinterpret_cast<jint *>(env->GetPrimitiveArrayCritical(jId, NULL));
+ if (nId == NULL) {
+ ALOGE("setup: Error retrieving id pointer");
+ lStatus = BAD_VALUE;
+ goto setup_exit;
+ }
+
+ // create the native SourceDefaultEffect.
+ audio_unique_id_t id;
+ lStatus = AudioEffect::addSourceDefaultEffect(typeStr,
+ String16(opPackageNameStr.c_str()),
+ uuidStr,
+ priority,
+ static_cast<audio_source_t>(source),
+ &id);
+ if (lStatus != NO_ERROR) {
+ ALOGE("setup: Error adding SourceDefaultEffect");
+ goto setup_exit;
+ }
+
+ nId[0] = static_cast<jint>(id);
+
+setup_exit:
+ // Final cleanup and return.
+
+ if (nId != NULL) {
+ env->ReleasePrimitiveArrayCritical(jId, nId, 0);
+ nId = NULL;
+ }
+
+ if (uuidStr != NULL) {
+ env->ReleaseStringUTFChars(uuid, uuidStr);
+ uuidStr = NULL;
+ }
+
+ if (typeStr != NULL) {
+ env->ReleaseStringUTFChars(type, typeStr);
+ typeStr = NULL;
+ }
+
+ return AudioEffectJni::translateNativeErrorToJava(lStatus);
+}
+
+static void android_media_SourceDefaultEffect_native_release(JNIEnv */*env*/,
+ jobject /*thiz*/,
+ jint id) {
+ status_t lStatus = AudioEffect::removeSourceDefaultEffect(id);
+ if (lStatus != NO_ERROR) {
+ ALOGW("Error releasing SourceDefaultEffect: %d", lStatus);
+ }
+}
+
+// ----------------------------------------------------------------------------
+
+// Dalvik VM type signatures
+static const JNINativeMethod gMethods[] = {
+ {"native_setup", "(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;[I)I",
+ (void *)android_media_SourceDefaultEffect_native_setup},
+ {"native_release", "(I)V", (void *)android_media_SourceDefaultEffect_native_release},
+};
+
+
+// ----------------------------------------------------------------------------
+
+int register_android_media_SourceDefaultEffect(JNIEnv *env)
+{
+ return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
+}
diff --git a/opengl/java/javax/microedition/khronos/egl/EGL10.java b/opengl/java/javax/microedition/khronos/egl/EGL10.java
index 612d59c..8a25170 100644
--- a/opengl/java/javax/microedition/khronos/egl/EGL10.java
+++ b/opengl/java/javax/microedition/khronos/egl/EGL10.java
@@ -16,6 +16,7 @@
package javax.microedition.khronos.egl;
+import android.annotation.UnsupportedAppUsage;
import java.lang.String;
public interface EGL10 extends EGL {
@@ -116,6 +117,7 @@
String eglQueryString(EGLDisplay display, int name);
boolean eglQuerySurface(EGLDisplay display, EGLSurface surface, int attribute, int[] value);
/** @hide **/
+ @UnsupportedAppUsage
boolean eglReleaseThread();
boolean eglSwapBuffers(EGLDisplay display, EGLSurface surface);
boolean eglTerminate(EGLDisplay display);
diff --git a/packages/ExtServices/src/android/ext/services/notification/AgingHelper.java b/packages/ExtServices/src/android/ext/services/notification/AgingHelper.java
new file mode 100644
index 0000000..5782ea1
--- /dev/null
+++ b/packages/ExtServices/src/android/ext/services/notification/AgingHelper.java
@@ -0,0 +1,172 @@
+/**
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.ext.services.notification;
+
+import static android.app.NotificationManager.IMPORTANCE_MIN;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.ext.services.notification.NotificationCategorizer.Category;
+import android.net.Uri;
+import android.util.ArraySet;
+import android.util.Slog;
+
+import java.util.Set;
+
+public class AgingHelper {
+ private final static String TAG = "AgingHelper";
+ private final boolean DEBUG = false;
+
+ private static final String AGING_ACTION = AgingHelper.class.getSimpleName() + ".EVALUATE";
+ private static final int REQUEST_CODE_AGING = 1;
+ private static final String AGING_SCHEME = "aging";
+ private static final String EXTRA_KEY = "key";
+ private static final String EXTRA_CATEGORY = "category";
+
+ private static final int HOUR_MS = 1000 * 60 * 60;
+ private static final int TWO_HOURS_MS = 2 * HOUR_MS;
+
+ private Context mContext;
+ private NotificationCategorizer mNotificationCategorizer;
+ private AlarmManager mAm;
+ private Callback mCallback;
+
+ // The set of keys we've scheduled alarms for
+ private Set<String> mAging = new ArraySet<>();
+
+ public AgingHelper(Context context, NotificationCategorizer categorizer, Callback callback) {
+ mNotificationCategorizer = categorizer;
+ mContext = context;
+ mAm = mContext.getSystemService(AlarmManager.class);
+ mCallback = callback;
+
+ IntentFilter filter = new IntentFilter(AGING_ACTION);
+ filter.addDataScheme(AGING_SCHEME);
+ mContext.registerReceiver(mBroadcastReceiver, filter);
+ }
+
+ // NAS lifecycle methods
+
+ public void onNotificationSeen(NotificationEntry entry) {
+ // user has strong opinions about this notification. we can't down rank it, so don't bother.
+ if (entry.getChannel().isImportanceLocked()) {
+ return;
+ }
+
+ @Category int category = mNotificationCategorizer.getCategory(entry);
+
+ // already very low
+ if (category == NotificationCategorizer.CATEGORY_MIN) {
+ return;
+ }
+
+ if (entry.hasSeen()) {
+ if (category == NotificationCategorizer.CATEGORY_ONGOING
+ || category > NotificationCategorizer.CATEGORY_REMINDER) {
+ scheduleAging(entry.getSbn().getKey(), category, TWO_HOURS_MS);
+ } else {
+ scheduleAging(entry.getSbn().getKey(), category, HOUR_MS);
+ }
+
+ mAging.add(entry.getSbn().getKey());
+ }
+ }
+
+ public void onNotificationPosted(NotificationEntry entry) {
+ cancelAging(entry.getSbn().getKey());
+ }
+
+ public void onNotificationRemoved(String key) {
+ cancelAging(key);
+ }
+
+ public void onDestroy() {
+ mContext.unregisterReceiver(mBroadcastReceiver);
+ }
+
+ // Aging
+
+ private void scheduleAging(String key, @Category int category, long duration) {
+ if (mAging.contains(key)) {
+ // already scheduled. Don't reset aging just because the user saw the noti again.
+ return;
+ }
+ final PendingIntent pi = createPendingIntent(key, category);
+ long time = System.currentTimeMillis() + duration;
+ if (DEBUG) Slog.d(TAG, "Scheduling evaluate for " + key + " in ms: " + duration);
+ mAm.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pi);
+ }
+
+ private void cancelAging(String key) {
+ final PendingIntent pi = createPendingIntent(key);
+ mAm.cancel(pi);
+ mAging.remove(key);
+ }
+
+ private Intent createBaseIntent(String key) {
+ return new Intent(AGING_ACTION)
+ .setData(new Uri.Builder().scheme(AGING_SCHEME).appendPath(key).build());
+ }
+
+ private Intent createAgingIntent(String key, @Category int category) {
+ Intent intent = createBaseIntent(key);
+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
+ .putExtra(EXTRA_CATEGORY, category)
+ .putExtra(EXTRA_KEY, key);
+ return intent;
+ }
+
+ private PendingIntent createPendingIntent(String key, @Category int category) {
+ return PendingIntent.getBroadcast(mContext,
+ REQUEST_CODE_AGING,
+ createAgingIntent(key, category),
+ PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+
+ private PendingIntent createPendingIntent(String key) {
+ return PendingIntent.getBroadcast(mContext,
+ REQUEST_CODE_AGING,
+ createBaseIntent(key),
+ PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+
+ private void demote(String key, @Category int category) {
+ int newImportance = IMPORTANCE_MIN;
+ // TODO: Change "aged" importance based on category
+ mCallback.sendAdjustment(key, newImportance);
+ }
+
+ protected interface Callback {
+ void sendAdjustment(String key, int newImportance);
+ }
+
+ private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (DEBUG) {
+ Slog.d(TAG, "Reposting notification");
+ }
+ if (AGING_ACTION.equals(intent.getAction())) {
+ demote(intent.getStringExtra(EXTRA_KEY), intent.getIntExtra(EXTRA_CATEGORY,
+ NotificationCategorizer.CATEGORY_EVERYTHING_ELSE));
+ }
+ }
+ };
+}
diff --git a/packages/ExtServices/src/android/ext/services/notification/Assistant.java b/packages/ExtServices/src/android/ext/services/notification/Assistant.java
index a8ecec3..3333e15 100644
--- a/packages/ExtServices/src/android/ext/services/notification/Assistant.java
+++ b/packages/ExtServices/src/android/ext/services/notification/Assistant.java
@@ -18,23 +18,28 @@
import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_MIN;
+import static android.service.notification.Adjustment.KEY_IMPORTANCE;
import static android.service.notification.NotificationListenerService.Ranking
.USER_SENTIMENT_NEGATIVE;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityThread;
+import android.app.AlarmManager;
import android.app.INotificationManager;
import android.app.Notification;
import android.app.NotificationChannel;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.pm.IPackageManager;
import android.database.ContentObserver;
+import android.ext.services.notification.AgingHelper.Callback;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
+import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.provider.Settings;
import android.service.notification.Adjustment;
@@ -64,6 +69,7 @@
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
/**
@@ -89,15 +95,17 @@
private int mStreakLimit;
private SmartActionsHelper mSmartActionsHelper;
private NotificationCategorizer mNotificationCategorizer;
+ private AgingHelper mAgingHelper;
// key : impressions tracker
// TODO: prune deleted channels and apps
- final ArrayMap<String, ChannelImpressions> mkeyToImpressions = new ArrayMap<>();
- // SBN key : channel id
- ArrayMap<String, String> mLiveNotifications = new ArrayMap<>();
+ private final ArrayMap<String, ChannelImpressions> mkeyToImpressions = new ArrayMap<>();
+ // SBN key : entry
+ protected ArrayMap<String, NotificationEntry> mLiveNotifications = new ArrayMap<>();
private Ranking mFakeRanking = null;
private AtomicFile mFile = null;
+ private IPackageManager mPackageManager;
protected SettingsObserver mSettingsObserver;
public Assistant() {
@@ -108,9 +116,13 @@
super.onCreate();
// Contexts are correctly hooked up by the creation step, which is required for the observer
// to be hooked up/initialized.
+ mPackageManager = ActivityThread.getPackageManager();
mSettingsObserver = new SettingsObserver(mHandler);
mSmartActionsHelper = new SmartActionsHelper();
mNotificationCategorizer = new NotificationCategorizer();
+ mAgingHelper = new AgingHelper(getContext(),
+ mNotificationCategorizer,
+ new AgingCallback());
}
private void loadFile() {
@@ -157,7 +169,7 @@
}
}
- private void saveFile() throws IOException {
+ private void saveFile() {
AsyncTask.execute(() -> {
final FileOutputStream stream;
try {
@@ -200,6 +212,9 @@
public Adjustment onNotificationEnqueued(StatusBarNotification sbn,
NotificationChannel channel) {
if (DEBUG) Log.i(TAG, "ENQUEUED " + sbn.getKey() + " on " + channel.getId());
+ if (!isForCurrentUser(sbn)) {
+ return null;
+ }
NotificationEntry entry = new NotificationEntry(
ActivityThread.getPackageManager(), sbn, channel);
ArrayList<Notification.Action> actions =
@@ -222,7 +237,7 @@
signals.putCharSequenceArrayList(Adjustment.KEY_SMART_REPLIES, smartReplies);
}
if (mNotificationCategorizer.shouldSilence(entry)) {
- signals.putInt(Adjustment.KEY_IMPORTANCE, IMPORTANCE_LOW);
+ signals.putInt(KEY_IMPORTANCE, IMPORTANCE_LOW);
}
return new Adjustment(
@@ -237,8 +252,13 @@
public void onNotificationPosted(StatusBarNotification sbn, RankingMap rankingMap) {
if (DEBUG) Log.i(TAG, "POSTED " + sbn.getKey());
try {
+ if (!isForCurrentUser(sbn)) {
+ return;
+ }
Ranking ranking = getRanking(sbn.getKey(), rankingMap);
if (ranking != null && ranking.getChannel() != null) {
+ NotificationEntry entry = new NotificationEntry(mPackageManager,
+ sbn, ranking.getChannel());
String key = getKey(
sbn.getPackageName(), sbn.getUserId(), ranking.getChannel().getId());
ChannelImpressions ci = mkeyToImpressions.getOrDefault(key,
@@ -248,7 +268,8 @@
sbn.getPackageName(), sbn.getKey(), sbn.getUserId()));
}
mkeyToImpressions.put(key, ci);
- mLiveNotifications.put(sbn.getKey(), ranking.getChannel().getId());
+ mLiveNotifications.put(sbn.getKey(), entry);
+ mAgingHelper.onNotificationPosted(entry);
}
} catch (Throwable e) {
Log.e(TAG, "Error occurred processing post", e);
@@ -259,8 +280,11 @@
public void onNotificationRemoved(StatusBarNotification sbn, RankingMap rankingMap,
NotificationStats stats, int reason) {
try {
+ if (!isForCurrentUser(sbn)) {
+ return;
+ }
boolean updatedImpressions = false;
- String channelId = mLiveNotifications.remove(sbn.getKey());
+ String channelId = mLiveNotifications.remove(sbn.getKey()).getChannel().getId();
String key = getKey(sbn.getPackageName(), sbn.getUserId(), channelId);
synchronized (mkeyToImpressions) {
ChannelImpressions ci = mkeyToImpressions.getOrDefault(key,
@@ -292,7 +316,7 @@
saveFile();
}
} catch (Throwable e) {
- Slog.e(TAG, "Error occurred processing removal", e);
+ Slog.e(TAG, "Error occurred processing removal of " + sbn, e);
}
}
@@ -302,6 +326,26 @@
}
@Override
+ public void onNotificationsSeen(List<String> keys) {
+ try {
+ if (keys == null) {
+ return;
+ }
+
+ for (String key : keys) {
+ NotificationEntry entry = mLiveNotifications.get(key);
+
+ if (entry != null) {
+ entry.setSeen();
+ mAgingHelper.onNotificationSeen(entry);
+ }
+ }
+ } catch (Throwable e) {
+ Slog.e(TAG, "Error occurred processing seen", e);
+ }
+ }
+
+ @Override
public void onListenerConnected() {
if (DEBUG) Log.i(TAG, "CONNECTED");
try {
@@ -318,6 +362,17 @@
}
}
+ @Override
+ public void onListenerDisconnected() {
+ if (mAgingHelper != null) {
+ mAgingHelper.onDestroy();
+ }
+ }
+
+ private boolean isForCurrentUser(StatusBarNotification sbn) {
+ return sbn != null && sbn.getUserId() == UserHandle.myUserId();
+ }
+
protected String getKey(String pkg, int userId, String channelId) {
return pkg + "|" + userId + "|" + channelId;
}
@@ -361,6 +416,11 @@
}
@VisibleForTesting
+ public void setPackageManager(IPackageManager pm) {
+ mPackageManager = pm;
+ }
+
+ @VisibleForTesting
public ChannelImpressions getImpressions(String key) {
synchronized (mkeyToImpressions) {
return mkeyToImpressions.get(key);
@@ -380,6 +440,20 @@
return impressions;
}
+ protected final class AgingCallback implements Callback {
+ @Override
+ public void sendAdjustment(String key, int newImportance) {
+ NotificationEntry entry = mLiveNotifications.get(key);
+ if (entry != null) {
+ Bundle bundle = new Bundle();
+ bundle.putInt(KEY_IMPORTANCE, newImportance);
+ Adjustment adjustment = new Adjustment(entry.getSbn().getPackageName(), key, bundle,
+ "aging", entry.getSbn().getUserId());
+ adjustNotification(adjustment);
+ }
+ }
+ }
+
/**
* Observer for updates on blocking helper threshold values.
*/
diff --git a/packages/ExtServices/src/android/ext/services/notification/NotificationEntry.java b/packages/ExtServices/src/android/ext/services/notification/NotificationEntry.java
index cdc0990..8fee822 100644
--- a/packages/ExtServices/src/android/ext/services/notification/NotificationEntry.java
+++ b/packages/ExtServices/src/android/ext/services/notification/NotificationEntry.java
@@ -50,6 +50,7 @@
private AudioAttributes mAttributes;
private NotificationChannel mChannel;
private int mImportance;
+ private boolean mSeen;
public NotificationEntry(IPackageManager packageManager, StatusBarNotification sbn,
NotificationChannel channel) {
@@ -198,6 +199,14 @@
return false;
}
+ public void setSeen() {
+ mSeen = true;
+ }
+
+ public boolean hasSeen() {
+ return mSeen;
+ }
+
public StatusBarNotification getSbn() {
return mSbn;
}
diff --git a/packages/ExtServices/tests/AndroidTest.xml b/packages/ExtServices/tests/AndroidTest.xml
new file mode 100644
index 0000000..c3d32de
--- /dev/null
+++ b/packages/ExtServices/tests/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?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.
+-->
+<configuration description="Runs Tests for ExtServices">
+ <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+ <option name="test-file-name" value="ExtServicesUnitTests.apk" />
+ </target_preparer>
+
+ <option name="test-suite-tag" value="apct" />
+ <option name="test-suite-tag" value="framework-base-presubmit" />
+ <option name="test-tag" value="ExtServicesUnitTests" />
+ <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+ <option name="package" value="android.ext.services.tests.unit" />
+ <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
+ <option name="hidden-api-checks" value="false"/>
+ </test>
+</configuration>
\ No newline at end of file
diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/AgingHelperTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/AgingHelperTest.java
new file mode 100644
index 0000000..b023b36
--- /dev/null
+++ b/packages/ExtServices/tests/src/android/ext/services/notification/AgingHelperTest.java
@@ -0,0 +1,153 @@
+/**
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.ext.services.notification;
+
+import static android.app.NotificationManager.IMPORTANCE_HIGH;
+import static android.app.NotificationManager.IMPORTANCE_MIN;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.AlarmManager;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.PendingIntent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.os.Build;
+import android.os.Process;
+import android.os.UserHandle;
+import android.service.notification.StatusBarNotification;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+import android.testing.TestableContext;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class AgingHelperTest {
+ private String mPkg = "pkg";
+ private int mUid = 2018;
+
+ @Rule
+ public final TestableContext mContext =
+ new TestableContext(InstrumentationRegistry.getTargetContext(), null);
+
+ @Mock
+ private NotificationCategorizer mCategorizer;
+ @Mock
+ private AlarmManager mAlarmManager;
+ @Mock
+ private IPackageManager mPackageManager;
+ @Mock
+ private AgingHelper.Callback mCallback;
+
+ private AgingHelper mAgingHelper;
+
+ private StatusBarNotification generateSbn(String channelId) {
+ Notification n = new Notification.Builder(mContext, channelId)
+ .setContentTitle("foo")
+ .build();
+
+ return new StatusBarNotification(mPkg, mPkg, 0, "tag", mUid, mUid, n,
+ UserHandle.SYSTEM, null, 0);
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ mPkg = mContext.getPackageName();
+ mUid = Process.myUid();
+
+ ApplicationInfo info = mock(ApplicationInfo.class);
+ when(mPackageManager.getApplicationInfo(anyString(), anyInt(), anyInt()))
+ .thenReturn(info);
+ info.targetSdkVersion = Build.VERSION_CODES.P;
+
+ mContext.addMockSystemService(AlarmManager.class, mAlarmManager);
+
+ mAgingHelper = new AgingHelper(mContext, mCategorizer, mCallback);
+ }
+
+ @Test
+ public void testNoSnoozingOnPost() {
+ NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH);
+ StatusBarNotification sbn = generateSbn(channel.getId());
+ NotificationEntry entry = new NotificationEntry(mPackageManager, sbn, channel);
+
+
+ mAgingHelper.onNotificationPosted(entry);
+ verify(mAlarmManager, never()).setExactAndAllowWhileIdle(anyInt(), anyLong(), any());
+ }
+
+ @Test
+ public void testPostResetsSnooze() {
+ NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH);
+ StatusBarNotification sbn = generateSbn(channel.getId());
+ NotificationEntry entry = new NotificationEntry(mPackageManager, sbn, channel);
+
+
+ mAgingHelper.onNotificationPosted(entry);
+ verify(mAlarmManager, times(1)).cancel(any(PendingIntent.class));
+ }
+
+ @Test
+ public void testSnoozingOnSeen() {
+ NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH);
+ StatusBarNotification sbn = generateSbn(channel.getId());
+ NotificationEntry entry = new NotificationEntry(mPackageManager, sbn, channel);
+ entry.setSeen();
+ when(mCategorizer.getCategory(entry)).thenReturn(NotificationCategorizer.CATEGORY_PEOPLE);
+
+ mAgingHelper.onNotificationSeen(entry);
+ verify(mAlarmManager, times(1)).setExactAndAllowWhileIdle(anyInt(), anyLong(), any());
+ }
+
+ @Test
+ public void testNoSnoozingOnSeenUserLocked() {
+ NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH);
+ channel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
+ StatusBarNotification sbn = generateSbn(channel.getId());
+ NotificationEntry entry = new NotificationEntry(mPackageManager, sbn, channel);
+ when(mCategorizer.getCategory(entry)).thenReturn(NotificationCategorizer.CATEGORY_PEOPLE);
+
+ mAgingHelper.onNotificationSeen(entry);
+ verify(mAlarmManager, never()).setExactAndAllowWhileIdle(anyInt(), anyLong(), any());
+ }
+
+ @Test
+ public void testNoSnoozingOnSeenAlreadyLow() {
+ NotificationEntry entry = mock(NotificationEntry.class);
+ when(entry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_HIGH));
+ when(entry.getImportance()).thenReturn(IMPORTANCE_MIN);
+
+ mAgingHelper.onNotificationSeen(entry);
+ verify(mAlarmManager, never()).setExactAndAllowWhileIdle(anyInt(), anyLong(), any());
+ }
+}
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 bb68bc2..2820232 100644
--- a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java
+++ b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java
@@ -21,6 +21,8 @@
import static android.app.NotificationManager.IMPORTANCE_MIN;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
@@ -33,6 +35,9 @@
import android.app.NotificationChannel;
import android.content.ContentResolver;
import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.os.Build;
import android.os.UserHandle;
import android.provider.Settings;
import android.service.notification.Adjustment;
@@ -80,6 +85,8 @@
@Mock INotificationManager mNoMan;
@Mock AtomicFile mFile;
+ @Mock
+ IPackageManager mPackageManager;
Assistant mAssistant;
Application mApplication;
@@ -113,6 +120,11 @@
mAssistant = getService();
mAssistant.setNoMan(mNoMan);
mAssistant.setFile(mFile);
+ mAssistant.setPackageManager(mPackageManager);
+ ApplicationInfo info = mock(ApplicationInfo.class);
+ when(mPackageManager.getApplicationInfo(anyString(), anyInt(), anyInt()))
+ .thenReturn(info);
+ info.targetSdkVersion = Build.VERSION_CODES.P;
when(mFile.startWrite()).thenReturn(mock(FileOutputStream.class));
}
@@ -439,4 +451,19 @@
// With the new threshold, the blocking helper should be triggered.
assertEquals(true, ci.shouldTriggerBlock());
}
+
+ @Test
+ public void testTrimLiveNotifications() {
+ StatusBarNotification sbn = generateSbn(PKG1, UID1, P1C1, "no", null);
+ mAssistant.setFakeRanking(generateRanking(sbn, P1C1));
+
+ mAssistant.onNotificationPosted(sbn, mock(RankingMap.class));
+
+ assertTrue(mAssistant.mLiveNotifications.containsKey(sbn.getKey()));
+
+ mAssistant.onNotificationRemoved(
+ sbn, mock(RankingMap.class), new NotificationStats(), 0);
+
+ assertFalse(mAssistant.mLiveNotifications.containsKey(sbn.getKey()));
+ }
}
diff --git a/packages/OsuLogin/Android.mk b/packages/OsuLogin/Android.mk
new file mode 100644
index 0000000..f04227b
--- /dev/null
+++ b/packages/OsuLogin/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_USE_AAPT2 := true
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := OsuLogin
+LOCAL_PRIVATE_PLATFORM_APIS := true
+LOCAL_CERTIFICATE := platform
+
+include $(BUILD_PACKAGE)
diff --git a/packages/OsuLogin/AndroidManifest.xml b/packages/OsuLogin/AndroidManifest.xml
new file mode 100644
index 0000000..bc32d10
--- /dev/null
+++ b/packages/OsuLogin/AndroidManifest.xml
@@ -0,0 +1,38 @@
+<?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.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.hotspot2">
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+ <uses-permission android:name="android.permission.INTERNET" />
+
+ <application
+ android:networkSecurityConfig="@xml/network_security_config"
+ android:enabled="true"
+ android:label="@string/app_name"
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:supportsRtl="true">
+ <activity android:name="com.android.hotspot2.osu.OsuLoginActivity">
+ <intent-filter>
+ <action android:name="android.net.wifi.action.PASSPOINT_LAUNCH_OSU_VIEW"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/packages/OsuLogin/OWNERS b/packages/OsuLogin/OWNERS
new file mode 100644
index 0000000..aa7c3e6
--- /dev/null
+++ b/packages/OsuLogin/OWNERS
@@ -0,0 +1,2 @@
+satk@google.com
+etancohen@google.com
diff --git a/packages/OsuLogin/res/layout/osu_web_view.xml b/packages/OsuLogin/res/layout/osu_web_view.xml
new file mode 100644
index 0000000..4eafb39
--- /dev/null
+++ b/packages/OsuLogin/res/layout/osu_web_view.xml
@@ -0,0 +1,13 @@
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <WebView
+ android:id="@+id/webview"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentRight="true" />
+
+</FrameLayout>
diff --git a/packages/OsuLogin/res/values/dimens.xml b/packages/OsuLogin/res/values/dimens.xml
new file mode 100644
index 0000000..47c8224
--- /dev/null
+++ b/packages/OsuLogin/res/values/dimens.xml
@@ -0,0 +1,5 @@
+<resources>
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+</resources>
diff --git a/packages/OsuLogin/res/values/strings.xml b/packages/OsuLogin/res/values/strings.xml
new file mode 100644
index 0000000..9fafeef
--- /dev/null
+++ b/packages/OsuLogin/res/values/strings.xml
@@ -0,0 +1,4 @@
+<resources>
+ <!-- application name [CHAR LIMIT=32] -->
+ <string name="app_name">OsuLogin</string>
+</resources>
diff --git a/packages/OsuLogin/res/values/styles.xml b/packages/OsuLogin/res/values/styles.xml
new file mode 100644
index 0000000..f6c2339
--- /dev/null
+++ b/packages/OsuLogin/res/values/styles.xml
@@ -0,0 +1,19 @@
+<resources>
+
+ <!--
+ Base application theme, dependent on API level. This theme is replaced
+ by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+ -->
+ <style name="AppBaseTheme" parent="@android:style/Theme.DeviceDefault.Settings">
+ <!--
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+ -->
+ </style>
+
+ <!-- Application theme. -->
+ <style name="AppTheme" parent="AppBaseTheme">
+ <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+ </style>
+</resources>
diff --git a/packages/OsuLogin/res/xml/network_security_config.xml b/packages/OsuLogin/res/xml/network_security_config.xml
new file mode 100644
index 0000000..3ef4b84
--- /dev/null
+++ b/packages/OsuLogin/res/xml/network_security_config.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+<base-config cleartextTrafficPermitted="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="wfa" />
+ </trust-anchors>
+</base-config>
+</network-security-config>
diff --git a/packages/OsuLogin/src/com/android/hotspot2/osu/OsuLoginActivity.java b/packages/OsuLogin/src/com/android/hotspot2/osu/OsuLoginActivity.java
new file mode 100644
index 0000000..6a48904
--- /dev/null
+++ b/packages/OsuLogin/src/com/android/hotspot2/osu/OsuLoginActivity.java
@@ -0,0 +1,216 @@
+/*
+ * 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.hotspot2.osu;
+
+import android.annotation.Nullable;
+import android.app.Activity;
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkRequest;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.webkit.WebResourceError;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+import com.android.hotspot2.R;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * Online Sign Up Login Web View launched during Provision Process of Hotspot 2.0 rel2.
+ */
+public class OsuLoginActivity extends Activity {
+ private static final String TAG = "OsuLogin";
+ private static final boolean DBG = true;
+
+ private String mUrl;
+ private String mHostName;
+ private Network mNetwork;
+ private ConnectivityManager mCm;
+ private ConnectivityManager.NetworkCallback mNetworkCallback;
+ private WifiManager mWifiManager;
+ private WebView mWebView;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (DBG) {
+ Log.d(TAG, "onCreate: Opening OSU Web View");
+ }
+
+ mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+ if (mWifiManager == null) {
+ Log.e(TAG, "Cannot get wifi service");
+ finishAndRemoveTask();
+ return;
+ }
+
+ if (getIntent() == null) {
+ Log.e(TAG, "Intent is null");
+ finishAndRemoveTask();
+ return;
+ }
+
+ mNetwork = getIntent().getParcelableExtra(WifiManager.EXTRA_OSU_NETWORK);
+ if (mNetwork == null) {
+ Log.e(TAG, "Cannot get the network instance for OSU from intent");
+ finishAndRemoveTask();
+ return;
+ }
+
+ mUrl = getIntent().getStringExtra(WifiManager.EXTRA_URL);
+ if (mUrl == null) {
+ Log.e(TAG, "Cannot get OSU server url from intent");
+ finishAndRemoveTask();
+ return;
+ }
+
+ mHostName = getHost(mUrl);
+ if (mHostName == null) {
+ Log.e(TAG, "Cannot get host from the url");
+ finishAndRemoveTask();
+ return;
+ }
+
+ mCm = (ConnectivityManager) getApplicationContext().getSystemService(
+ Context.CONNECTIVITY_SERVICE);
+ if (mCm == null) {
+ Log.e(TAG, "Cannot get connectivity service");
+ finishAndRemoveTask();
+ return;
+ }
+
+ if (!mCm.bindProcessToNetwork(mNetwork)) {
+ Log.e(TAG, "Network is no longer valid");
+ finishAndRemoveTask();
+ return;
+ }
+
+ final NetworkCapabilities networkCapabilities = mCm.getNetworkCapabilities(mNetwork);
+ if (networkCapabilities == null || !networkCapabilities.hasTransport(
+ NetworkCapabilities.TRANSPORT_WIFI)) {
+ Log.e(TAG, "WiFi is not supported for the Network");
+ finishAndRemoveTask();
+ return;
+ }
+
+ getActionBar().setDisplayShowHomeEnabled(false);
+ setContentView(R.layout.osu_web_view);
+
+ // Exit this app if network disappeared.
+ mNetworkCallback = new ConnectivityManager.NetworkCallback() {
+ @Override
+ public void onLost(Network network) {
+ if (DBG) {
+ Log.d(TAG, "Lost for the current Network, close the browser");
+ }
+ if (mNetwork.equals(network)) {
+ finishAndRemoveTask();
+ }
+ }
+ };
+
+ mCm.registerNetworkCallback(
+ new NetworkRequest.Builder().addTransportType(
+ NetworkCapabilities.TRANSPORT_WIFI).build(),
+ mNetworkCallback);
+
+ mWebView = findViewById(R.id.webview);
+ mWebView.clearCache(true);
+ WebSettings webSettings = mWebView.getSettings();
+ webSettings.setJavaScriptEnabled(true);
+ webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
+ webSettings.setUseWideViewPort(true);
+ webSettings.setLoadWithOverviewMode(true);
+ webSettings.setSupportZoom(true);
+ webSettings.setBuiltInZoomControls(true);
+ webSettings.setDisplayZoomControls(false);
+
+ mWebView.setWebViewClient(new OsuWebViewClient());
+ if (DBG) {
+ Log.d(TAG, "OSU Web View to " + mUrl);
+ }
+ mWebView.loadUrl(mUrl);
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // Check if the key event was the Back button.
+ if ((keyCode == KeyEvent.KEYCODE_BACK)) {
+ // If there is a history to move back
+ if (mWebView.canGoBack()){
+ mWebView.goBack();
+ return true;
+ }
+
+ // In case of back key, it needs to disconnect current connection with OSU AP to
+ // abort current Provisioning flow.
+ if (mWifiManager != null) {
+ mWifiManager.disconnect();
+ }
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
+ @Override
+ protected void onDestroy() {
+ if (mNetworkCallback != null) {
+ mCm.unregisterNetworkCallback(mNetworkCallback);
+ }
+ super.onDestroy();
+ }
+
+ private String getHost(String url) {
+ try {
+ return new URL(url).getHost();
+ } catch (MalformedURLException e) {
+ Log.e(TAG, "Invalid URL " + url);
+ }
+ return null;
+ }
+
+ private class OsuWebViewClient extends WebViewClient {
+ boolean mPageError = false;
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ // Do not show the page error on UI.
+ if (mPageError) {
+ finishAndRemoveTask();
+ }
+ }
+
+ @Override
+ public void onReceivedError(WebView view, WebResourceRequest request,
+ WebResourceError error) {
+ if (request.isForMainFrame()) {
+ // This happens right after getting HTTP redirect response from an OSU server
+ // since no more Http request is allowed to send to the OSU server.
+ mPageError = true;
+ Log.e(TAG, "onReceived Error for MainFrame: " + error.getErrorCode());
+ }
+ }
+ }
+}
diff --git a/packages/PackageInstaller/AndroidManifest.xml b/packages/PackageInstaller/AndroidManifest.xml
index 513c862..2be9311 100644
--- a/packages/PackageInstaller/AndroidManifest.xml
+++ b/packages/PackageInstaller/AndroidManifest.xml
@@ -19,7 +19,7 @@
android:label="@string/app_name"
android:icon="@drawable/ic_app_icon"
android:allowBackup="false"
- android:theme="@style/DialogWhenLarge"
+ android:theme="@style/Theme.AlertDialogActivity"
android:supportsRtl="true"
android:defaultToDeviceProtectedStorage="true"
android:directBootAware="true">
@@ -32,6 +32,7 @@
</receiver>
<activity android:name=".InstallStart"
+ android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:excludeFromRecents="true">
<intent-filter android:priority="1">
@@ -59,13 +60,14 @@
android:exported="false" />
<activity android:name=".DeleteStagedFileOnResult"
+ android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="false" />
<activity android:name=".PackageInstallerActivity"
android:exported="false" />
<activity android:name=".InstallInstalling"
- android:theme="@style/DialogWhenLargeNoAnimation"
+ android:theme="@style/Theme.AlertDialogActivity.NoAnimation"
android:exported="false" />
<receiver android:name=".InstallEventReceiver"
@@ -77,18 +79,17 @@
</receiver>
<activity android:name=".InstallSuccess"
- android:theme="@style/DialogWhenLargeNoAnimation"
+ android:theme="@style/Theme.AlertDialogActivity.NoAnimation"
android:exported="false" />
<activity android:name=".InstallFailed"
- android:theme="@style/DialogWhenLargeNoAnimation"
+ android:theme="@style/Theme.AlertDialogActivity.NoAnimation"
android:exported="false" />
<activity android:name=".UninstallerActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:excludeFromRecents="true"
- android:noHistory="true"
- android:theme="@style/AlertDialogActivity">
+ android:noHistory="true">
<intent-filter android:priority="1">
<action android:name="android.intent.action.DELETE" />
<action android:name="android.intent.action.UNINSTALL_PACKAGE" />
@@ -107,7 +108,6 @@
<activity android:name=".UninstallUninstalling"
android:excludeFromRecents="true"
- android:theme="@style/AlertDialogActivity"
android:exported="false" />
<receiver android:name=".UninstallFinish"
diff --git a/packages/PackageInstaller/res/layout/install_confirm.xml b/packages/PackageInstaller/res/layout/install_confirm.xml
deleted file mode 100644
index 6be46fc..0000000
--- a/packages/PackageInstaller/res/layout/install_confirm.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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:orientation="vertical">
-
- <LinearLayout android:id="@+id/app_snippet"
- android:background="?android:attr/colorPrimary"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:orientation="horizontal"
- android:elevation="@dimen/headerElevation"
- android:gravity="center_vertical">
-
- <ImageView android:id="@+id/app_icon"
- android:layout_marginStart="16dp"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:scaleType="fitCenter"
- android:src="@drawable/ic_file_download" />
-
- <TextView android:id="@+id/app_name"
- android:layout_marginStart="32dp"
- android:layout_marginEnd="16dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/titleTextStyle"
- android:singleLine="true"
- android:text="@string/app_name_unknown"
- android:ellipsize="end" />
-
- </LinearLayout>
-
- <ScrollView android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:padding="16dip">
-
- <TextView android:id="@+id/install_confirm_question"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium" />
-
- </ScrollView>
-
- <LinearLayout style="?android:attr/buttonBarStyle"
- android:background="?android:attr/colorBackground"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="8dp"
- android:measureWithLargestChild="true">
-
- <!-- spacer to push buttons to the right -->
- <View android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- <Button android:id="@+id/cancel_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/cancel"
- android:maxLines="2"
- style="?android:attr/buttonBarButtonStyle" />
-
- <Button android:id="@+id/ok_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/install"
- android:maxLines="2"
- style="?android:attr/buttonBarButtonStyle" />
-
- </LinearLayout>
-
-</LinearLayout>
diff --git a/packages/PackageInstaller/res/layout/install_content_view.xml b/packages/PackageInstaller/res/layout/install_content_view.xml
new file mode 100644
index 0000000..5e94a29
--- /dev/null
+++ b/packages/PackageInstaller/res/layout/install_content_view.xml
@@ -0,0 +1,144 @@
+<?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.
+ -->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:theme="?android:attr/alertDialogTheme"
+ android:paddingTop="8dp"
+ android:paddingLeft="?android:attr/dialogPreferredPadding"
+ android:paddingRight="?android:attr/dialogPreferredPadding">
+
+ <LinearLayout
+ android:id="@+id/staging"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:visibility="invisible">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/message_staging" />
+
+ <ProgressBar
+ android:id="@+id/progress_indeterminate"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="8dp"
+ style="?android:attr/progressBarStyleHorizontal"
+ android:indeterminate="true" />
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/installing"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:visibility="invisible">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/installing" />
+
+ <ProgressBar
+ android:id="@+id/progress"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="8dp"
+ style="?android:attr/progressBarStyleHorizontal" />
+
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/install_confirm_question"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/install_confirm_question"
+ android:visibility="invisible" />
+
+ <TextView
+ android:id="@+id/install_confirm_question_update"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/install_confirm_question_update"
+ android:visibility="invisible" />
+
+ <TextView
+ android:id="@+id/install_confirm_question_update_system"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/install_confirm_question_update_system"
+ android:visibility="invisible" />
+
+ <TextView
+ android:id="@+id/install_success"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/install_done"
+ android:visibility="invisible" />
+
+ <TextView
+ android:id="@+id/install_failed"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/install_failed"
+ android:visibility="invisible" />
+
+ <TextView
+ android:id="@+id/install_failed_blocked"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/install_failed_blocked"
+ android:visibility="invisible" />
+
+ <TextView
+ android:id="@+id/install_failed_conflict"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/install_failed_conflict"
+ android:visibility="invisible" />
+
+ <TextView
+ android:id="@+id/install_failed_incompatible"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/install_failed_incompatible"
+ android:visibility="invisible" />
+
+ <TextView
+ android:id="@+id/install_failed_invalid_apk"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/TextAppearance.Material.Subhead"
+ android:text="@string/install_failed_invalid_apk"
+ android:visibility="invisible" />
+
+</FrameLayout>
diff --git a/packages/PackageInstaller/res/layout/install_failed.xml b/packages/PackageInstaller/res/layout/install_failed.xml
deleted file mode 100644
index d000ee9..0000000
--- a/packages/PackageInstaller/res/layout/install_failed.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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:orientation="vertical">
-
- <LinearLayout android:id="@+id/app_snippet"
- android:background="?android:attr/colorPrimary"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:orientation="horizontal"
- android:elevation="@dimen/headerElevation"
- android:gravity="center_vertical">
-
- <ImageView android:id="@+id/app_icon"
- android:layout_marginStart="16dp"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:scaleType="fitCenter" />
-
- <TextView android:id="@+id/app_name"
- android:layout_marginStart="32dp"
- android:layout_marginEnd="16dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/titleTextStyle"
- android:singleLine="true"
- android:ellipsize="end" />
-
- </LinearLayout>
-
- <LinearLayout android:id="@+id/simple_status_view"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:gravity="center"
- android:orientation="vertical"
- android:paddingLeft="16dip"
- android:paddingRight="16dip">
-
- <ImageView android:id="@+id/center_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="12dp"
- android:src="@drawable/ic_report_problem_92"
- android:tint="@color/bigIconColor"
- android:contentDescription="@null" />
-
- <TextView android:id="@+id/simple_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium" />
-
- </LinearLayout>
-
- <LinearLayout android:id="@+id/buttons_panel"
- style="?android:attr/buttonBarStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:measureWithLargestChild="true"
- android:padding="8dip">
-
- <!-- spacer to push button to the right -->
- <View android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- <Button android:id="@+id/done_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/done"
- android:maxLines="2"
- style="?android:attr/buttonBarButtonStyle" />
-
- </LinearLayout>
-
-</LinearLayout>
-
-
diff --git a/packages/PackageInstaller/res/layout/install_installing.xml b/packages/PackageInstaller/res/layout/install_installing.xml
deleted file mode 100644
index a043a01..0000000
--- a/packages/PackageInstaller/res/layout/install_installing.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!-- Copyright (C) 2016 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:orientation="vertical">
-
- <LinearLayout android:id="@+id/app_snippet"
- android:background="?android:attr/colorPrimary"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:orientation="horizontal"
- android:elevation="@dimen/headerElevation"
- android:gravity="center_vertical">
-
- <ImageView
- android:id="@+id/app_icon"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_marginStart="16dp"
- android:scaleType="fitCenter" />
-
- <TextView
- android:id="@+id/app_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="32dp"
- android:layout_marginEnd="16dp"
- android:ellipsize="end"
- android:singleLine="true"
- android:textAppearance="?android:attr/titleTextStyle" />
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:gravity="center"
- android:orientation="vertical"
- android:paddingLeft="16dip"
- android:paddingRight="16dip">
-
- <ImageView
- android:layout_width="92dp"
- android:layout_height="92dp"
- android:layout_marginBottom="12dp"
- android:contentDescription="@null"
- android:tint="@color/bigIconColor"
- android:src="@drawable/ic_file_download" />
-
- <ProgressBar
- android:id="@+id/progress_bar"
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="250dp"
- android:layout_height="wrap_content"
- android:indeterminate="false" />
-
- <TextView
- android:id="@+id/center_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:text="@string/installing"
- android:textAppearance="?android:attr/textAppearanceMedium" />
-
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/buttons_panel"
- style="?android:attr/buttonBarStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:measureWithLargestChild="true"
- android:orientation="horizontal"
- android:padding="8dip">
-
- <View
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- <Button
- android:id="@+id/cancel_button"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:maxLines="2"
- android:text="@string/cancel" />
-
- </LinearLayout>
-
-</LinearLayout>
diff --git a/packages/PackageInstaller/res/layout/install_staging.xml b/packages/PackageInstaller/res/layout/install_staging.xml
deleted file mode 100644
index e3022e7..0000000
--- a/packages/PackageInstaller/res/layout/install_staging.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 the layout of the splash screen that displays the security
- settings required for an application and requests the confirmation of the
- user before it is installed.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <!-- title bar -->
- <LinearLayout android:id="@+id/app_snippet"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:background="?android:attr/colorPrimary"
- android:elevation="@dimen/headerElevation"
- android:gravity="center_vertical"
- android:orientation="horizontal">
-
- <ImageView android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_marginLeft="16dp"
- android:scaleType="fitCenter"
- android:src="@drawable/ic_file_download"
- android:tint="?android:attr/colorAccent" />
-
- <TextView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="32dp"
- android:layout_marginRight="16dp"
- android:ellipsize="end"
- android:singleLine="true"
- android:text="@string/app_name_unknown"
- android:textAppearance="?android:attr/titleTextStyle" />
-
- </LinearLayout>
-
- <!-- content -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:gravity="center"
- android:orientation="vertical"
- android:paddingLeft="16dip"
- android:paddingRight="16dip">
-
- <ImageView
- android:layout_width="92dp"
- android:layout_height="92dp"
- android:scaleType="fitCenter"
- android:layout_marginBottom="12dp"
- android:contentDescription="@null"
- android:tint="@color/bigIconColor"
- android:src="@drawable/ic_file_download" />
-
- <ProgressBar
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="250dp"
- android:layout_height="wrap_content"
- android:indeterminate="true" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:text="@string/message_staging"
- android:textAppearance="?android:attr/textAppearanceMedium" />
-
- </LinearLayout>
-
- <!-- Bottom buttons -->
- <LinearLayout style="?android:attr/buttonBarStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="8dp">
-
- <!-- spacer to push button to the right -->
- <View android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- <Button android:id="@+id/cancel_button"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:maxLines="2"
- android:text="@string/cancel" />
-
- </LinearLayout>
-
-</LinearLayout>
-
-
diff --git a/packages/PackageInstaller/res/layout/install_success.xml b/packages/PackageInstaller/res/layout/install_success.xml
deleted file mode 100644
index fee6bed..0000000
--- a/packages/PackageInstaller/res/layout/install_success.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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:orientation="vertical">
-
- <LinearLayout android:id="@+id/app_snippet"
- android:background="?android:attr/colorPrimary"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:orientation="horizontal"
- android:elevation="@dimen/headerElevation"
- android:gravity="center_vertical">
-
- <ImageView android:id="@+id/app_icon"
- android:layout_marginStart="16dp"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:scaleType="fitCenter" />
-
- <TextView android:id="@+id/app_name"
- android:layout_marginStart="32dp"
- android:layout_marginEnd="16dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/titleTextStyle"
- android:singleLine="true"
- android:ellipsize="end" />
-
- </LinearLayout>
-
- <LinearLayout android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:gravity="center"
- android:orientation="vertical"
- android:paddingLeft="16dip"
- android:paddingRight="16dip">
-
- <ImageView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="12dp"
- android:src="@drawable/ic_done_92"
- android:tint="@color/bigIconColor"
- android:contentDescription="@null" />
-
- <TextView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:text="@string/install_done"
- android:textAppearance="?android:attr/textAppearanceMedium" />
-
- </LinearLayout>
-
- <LinearLayout style="?android:attr/buttonBarStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:measureWithLargestChild="true"
- android:padding="8dip">
-
- <!-- spacer to push buttons to the right -->
- <View android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- <Button android:id="@+id/done_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/done"
- android:maxLines="2"
- style="?android:attr/buttonBarButtonStyle" />
-
- <Button android:id="@+id/launch_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/launch"
- android:maxLines="2"
- style="?android:attr/buttonBarButtonStyle" />
-
- </LinearLayout>
-
-</LinearLayout>
-
-
diff --git a/packages/PackageInstaller/res/values-night/themes.xml b/packages/PackageInstaller/res/values-night/themes.xml
new file mode 100644
index 0000000..483b0cf
--- /dev/null
+++ b/packages/PackageInstaller/res/values-night/themes.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources>
+
+ <style name="Theme.AlertDialogActivity"
+ parent="@android:style/Theme.DeviceDefault.Dialog.Alert" />
+
+</resources>
diff --git a/packages/PackageInstaller/res/values/strings.xml b/packages/PackageInstaller/res/values/strings.xml
index 6c7160f..ba81278 100644
--- a/packages/PackageInstaller/res/values/strings.xml
+++ b/packages/PackageInstaller/res/values/strings.xml
@@ -36,11 +36,11 @@
<!-- Message for updating an existing app [CHAR LIMIT=NONE] -->
<string name="install_confirm_question_update">Do you want to install an update
to this existing application? Your existing data will not
- be lost. The updated application will get access to:</string>
+ be lost.</string>
<!-- Message for updating an existing system app [CHAR LIMIT=NONE] -->
<string name="install_confirm_question_update_system">Do you want to install an update
to this built-in application? Your existing data will not
- be lost. The updated application will get access to:</string>
+ be lost.</string>
<!-- [CHAR LIMIT=100] -->
<string name="install_failed">App not installed.</string>
<!-- Reason displayed when installation fails because the package was blocked
diff --git a/packages/PackageInstaller/res/values/styles.xml b/packages/PackageInstaller/res/values/styles.xml
deleted file mode 100755
index f79f98f..0000000
--- a/packages/PackageInstaller/res/values/styles.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
-
- <style name="MediumText"
- parent="@android:style/TextAppearance.Medium">
- <item name="android:textColor">?android:attr/textColorPrimary</item>
- </style>
-
- <style name="SmallText"
- parent="@android:style/TextAppearance.Small">
- <item name="android:textColor">?android:attr/textColorPrimary</item>
- </style>
-
- <style name="TitleText">
- <item name="android:fontFamily">sans-serif-medium</item>
- <item name="android:textSize">20dp</item>
- <item name="android:textColor">?android:attr/textColorPrimary</item>
- </style>
-
- <style name="ActionBar" parent="@android:style/Widget.Material.ActionBar.Solid">
- <item name="android:contentInsetStart">72dp</item>
- </style>
-
-</resources>
diff --git a/packages/PackageInstaller/res/values/themes.xml b/packages/PackageInstaller/res/values/themes.xml
index 6df6246..6c8e4c5 100644
--- a/packages/PackageInstaller/res/values/themes.xml
+++ b/packages/PackageInstaller/res/values/themes.xml
@@ -17,25 +17,11 @@
<resources>
- <style name="DialogWhenLarge"
- parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
- <item name="android:textAppearanceMedium">@style/MediumText</item>
- <item name="android:textAppearanceSmall">@style/SmallText</item>
- <item name="android:titleTextStyle">@style/TitleText</item>
- </style>
-
- <style name="DialogWhenLargeNoAnimation" parent="DialogWhenLarge">
+ <style name="Theme.AlertDialogActivity.NoAnimation">
<item name="android:windowAnimationStyle">@null</item>
</style>
- <style name="AlertDialogActivity"
- parent="@android:style/Theme.DeviceDefault.Light.Panel">
- <item name="android:backgroundDimEnabled">true</item>
- </style>
-
- <style name="Header.Settings"
- parent="@android:style/Theme.DeviceDefault.Settings">
- </style>
-
+ <style name="Theme.AlertDialogActivity"
+ parent="@android:style/Theme.DeviceDefault.Light.Dialog.Alert" />
</resources>
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java
index 5ba2d32..54105bb 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java
@@ -30,41 +30,49 @@
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
-import android.widget.TextView;
+import android.view.View;
+
+import com.android.internal.app.AlertActivity;
import java.io.File;
/**
* Installation failed: Return status code to the caller or display failure UI to user
*/
-public class InstallFailed extends Activity {
+public class InstallFailed extends AlertActivity {
private static final String LOG_TAG = InstallFailed.class.getSimpleName();
/** Label of the app that failed to install */
private CharSequence mLabel;
/**
- * Convert an package installer status code into the user friendly label.
+ * Unhide the appropriate label for the statusCode.
*
* @param statusCode The status code from the package installer.
- *
- * @return The user friendly label for the status code
*/
- private int getExplanationFromErrorCode(int statusCode) {
+ private void setExplanationFromErrorCode(int statusCode) {
Log.d(LOG_TAG, "Installation status code: " + statusCode);
+ View viewToEnable;
switch (statusCode) {
case PackageInstaller.STATUS_FAILURE_BLOCKED:
- return R.string.install_failed_blocked;
+ viewToEnable = requireViewById(R.id.install_failed_blocked);
+ break;
case PackageInstaller.STATUS_FAILURE_CONFLICT:
- return R.string.install_failed_conflict;
+ viewToEnable = requireViewById(R.id.install_failed_conflict);
+ break;
case PackageInstaller.STATUS_FAILURE_INCOMPATIBLE:
- return R.string.install_failed_incompatible;
+ viewToEnable = requireViewById(R.id.install_failed_incompatible);
+ break;
case PackageInstaller.STATUS_FAILURE_INVALID:
- return R.string.install_failed_invalid_apk;
+ viewToEnable = requireViewById(R.id.install_failed_invalid_apk);
+ break;
default:
- return R.string.install_failed;
+ viewToEnable = requireViewById(R.id.install_failed);
+ break;
}
+
+ viewToEnable.setVisibility(View.VISIBLE);
}
@Override
@@ -89,8 +97,6 @@
.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
Uri packageURI = intent.getData();
- setContentView(R.layout.install_failed);
-
// Set header icon and title
PackageUtil.AppSnippet as;
PackageManager pm = getPackageManager();
@@ -106,7 +112,12 @@
// Store label for dialog
mLabel = as.label;
- PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet);
+ mAlert.setIcon(as.icon);
+ mAlert.setTitle(as.label);
+ mAlert.setView(R.layout.install_content_view);
+ mAlert.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.done),
+ (ignored, ignored2) -> finish(), null);
+ setupAlert();
// Show out of space dialog if needed
if (statusCode == PackageInstaller.STATUS_FAILURE_STORAGE) {
@@ -114,11 +125,7 @@
}
// Get status messages
- ((TextView) findViewById(R.id.simple_status)).setText(
- getExplanationFromErrorCode(statusCode));
-
- // Set up "done" button
- findViewById(R.id.done_button).setOnClickListener(view -> finish());
+ setExplanationFromErrorCode(statusCode);
}
}
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
index c2dd740..deb6163 100755
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
@@ -19,8 +19,8 @@
import static android.content.pm.PackageInstaller.SessionParams.UID_UNKNOWN;
import android.annotation.Nullable;
-import android.app.Activity;
import android.app.PendingIntent;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInstaller;
@@ -30,9 +30,11 @@
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
+import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
+import com.android.internal.app.AlertActivity;
import com.android.internal.content.PackageHelper;
import java.io.File;
@@ -47,7 +49,7 @@
* <p>This has two phases: First send the data to the package manager, then wait until the package
* manager processed the result.</p>
*/
-public class InstallInstalling extends Activity {
+public class InstallInstalling extends AlertActivity {
private static final String LOG_TAG = InstallInstalling.class.getSimpleName();
private static final String SESSION_ID = "com.android.packageinstaller.SESSION_ID";
@@ -78,11 +80,31 @@
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.install_installing);
-
ApplicationInfo appInfo = getIntent()
.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
mPackageURI = getIntent().getData();
+ final File sourceFile = new File(mPackageURI.getPath());
+ PackageUtil.AppSnippet as = PackageUtil.getAppSnippet(this, appInfo, sourceFile);
+
+ mAlert.setIcon(as.icon);
+ mAlert.setTitle(as.label);
+ mAlert.setView(R.layout.install_content_view);
+ mAlert.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel),
+ (ignored, ignored2) -> {
+ if (mInstallingTask != null) {
+ mInstallingTask.cancel(true);
+ }
+
+ if (mSessionId > 0) {
+ getPackageManager().getPackageInstaller().abandonSession(mSessionId);
+ mSessionId = 0;
+ }
+
+ setResult(RESULT_CANCELED);
+ finish();
+ }, null);
+ setupAlert();
+ requireViewById(R.id.installing).setVisibility(View.VISIBLE);
if ("package".equals(mPackageURI.getScheme())) {
try {
@@ -92,10 +114,6 @@
launchFailure(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, null);
}
} else {
- final File sourceFile = new File(mPackageURI.getPath());
- PackageUtil.initSnippetForNewApp(this, PackageUtil.getAppSnippet(this, appInfo,
- sourceFile), R.id.app_snippet);
-
if (savedInstanceState != null) {
mSessionId = savedInstanceState.getInt(SESSION_ID);
mInstallId = savedInstanceState.getInt(INSTALL_ID);
@@ -153,21 +171,7 @@
}
}
- mCancelButton = (Button) findViewById(R.id.cancel_button);
-
- mCancelButton.setOnClickListener(view -> {
- if (mInstallingTask != null) {
- mInstallingTask.cancel(true);
- }
-
- if (mSessionId > 0) {
- getPackageManager().getPackageInstaller().abandonSession(mSessionId);
- mSessionId = 0;
- }
-
- setResult(RESULT_CANCELED);
- finish();
- });
+ mCancelButton = mAlert.getButton(DialogInterface.BUTTON_NEGATIVE);
mSessionCallback = new InstallSessionCallback();
}
@@ -307,7 +311,7 @@
@Override
public void onProgressChanged(int sessionId, float progress) {
if (sessionId == mSessionId) {
- ProgressBar progressBar = (ProgressBar)findViewById(R.id.progress_bar);
+ ProgressBar progressBar = requireViewById(R.id.progress);
progressBar.setMax(Integer.MAX_VALUE);
progressBar.setProgress((int) (Integer.MAX_VALUE * progress));
}
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStaging.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStaging.java
index 1bc9dbd..98438cd 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStaging.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStaging.java
@@ -29,6 +29,9 @@
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
+import android.view.View;
+
+import com.android.internal.app.AlertActivity;
import java.io.File;
import java.io.FileOutputStream;
@@ -40,7 +43,7 @@
* If a package gets installed from an content URI this step loads the package and turns it into
* and installation from a file. Then it re-starts the installation as usual.
*/
-public class InstallStaging extends Activity {
+public class InstallStaging extends AlertActivity {
private static final String LOG_TAG = InstallStaging.class.getSimpleName();
private static final String STAGED_FILE = "STAGED_FILE";
@@ -55,7 +58,19 @@
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.install_staging);
+ mAlert.setIcon(R.drawable.ic_file_download);
+ mAlert.setTitle(getString(R.string.app_name_unknown));
+ mAlert.setView(R.layout.install_content_view);
+ mAlert.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel),
+ (ignored, ignored2) -> {
+ if (mStagingTask != null) {
+ mStagingTask.cancel(true);
+ }
+ setResult(RESULT_CANCELED);
+ finish();
+ }, null);
+ setupAlert();
+ requireViewById(R.id.staging).setVisibility(View.VISIBLE);
if (savedInstanceState != null) {
mStagedFile = new File(savedInstanceState.getString(STAGED_FILE));
@@ -64,14 +79,6 @@
mStagedFile = null;
}
}
-
- findViewById(R.id.cancel_button).setOnClickListener(view -> {
- if (mStagingTask != null) {
- mStagingTask.cancel(true);
- }
- setResult(RESULT_CANCELED);
- finish();
- });
}
@Override
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
index 94f6b31..705d3f4 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
@@ -19,6 +19,7 @@
import android.annotation.Nullable;
import android.app.Activity;
import android.content.ActivityNotFoundException;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -26,15 +27,18 @@
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
+import android.view.View;
import android.widget.Button;
+import com.android.internal.app.AlertActivity;
+
import java.io.File;
import java.util.List;
/**
* Finish installation: Return status code to the caller or display "success" UI to user
*/
-public class InstallSuccess extends Activity {
+public class InstallSuccess extends AlertActivity {
private static final String LOG_TAG = InstallSuccess.class.getSimpleName();
@Override
@@ -53,8 +57,6 @@
intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
Uri packageURI = intent.getData();
- setContentView(R.layout.install_success);
-
// Set header icon and title
PackageUtil.AppSnippet as;
PackageManager pm = getPackageManager();
@@ -67,16 +69,20 @@
as = PackageUtil.getAppSnippet(this, appInfo, sourceFile);
}
- PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet);
-
- // Set up "done" button
- findViewById(R.id.done_button).setOnClickListener(view -> {
- if (appInfo.packageName != null) {
- Log.i(LOG_TAG, "Finished installing " + appInfo.packageName);
- }
- finish();
- });
-
+ mAlert.setIcon(as.icon);
+ mAlert.setTitle(as.label);
+ mAlert.setView(R.layout.install_content_view);
+ mAlert.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.launch), null,
+ null);
+ mAlert.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.done),
+ (ignored, ignored2) -> {
+ if (appInfo.packageName != null) {
+ Log.i(LOG_TAG, "Finished installing " + appInfo.packageName);
+ }
+ finish();
+ }, null);
+ setupAlert();
+ requireViewById(R.id.install_success).setVisibility(View.VISIBLE);
// Enable or disable "launch" button
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(
appInfo.packageName);
@@ -89,7 +95,7 @@
}
}
- Button launchButton = (Button)findViewById(R.id.launch_button);
+ Button launchButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
if (enabled) {
launchButton.setOnClickListener(view -> {
try {
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/OverlayTouchActivity.java b/packages/PackageInstaller/src/com/android/packageinstaller/OverlayTouchActivity.java
deleted file mode 100644
index 1fdbd97..0000000
--- a/packages/PackageInstaller/src/com/android/packageinstaller/OverlayTouchActivity.java
+++ /dev/null
@@ -1,29 +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.
- */
-package com.android.packageinstaller;
-
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-class OverlayTouchActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
- super.onCreate(savedInstanceState);
- }
-}
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
index 97bafe7..580308a 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -16,6 +16,8 @@
*/
package com.android.packageinstaller;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.StringRes;
@@ -45,9 +47,9 @@
import android.provider.Settings;
import android.util.Log;
import android.view.View;
-import android.view.View.OnClickListener;
import android.widget.Button;
-import android.widget.TextView;
+
+import com.android.internal.app.AlertActivity;
import java.io.File;
@@ -61,7 +63,7 @@
* Based on the user response the package is then installed by launching InstallAppConfirm
* sub activity. All state transitions are handled in this activity
*/
-public class PackageInstallerActivity extends OverlayTouchActivity implements OnClickListener {
+public class PackageInstallerActivity extends AlertActivity {
private static final String TAG = "PackageInstaller";
private static final int REQUEST_TRUST_EXTERNAL_SOURCE = 1;
@@ -95,7 +97,6 @@
// Buttons to indicate user acceptance
private Button mOk;
- private Button mCancel;
private PackageUtil.AppSnippet mAppSnippet;
@@ -119,18 +120,18 @@
private boolean mEnableOk = false;
private void startInstallConfirm() {
- int msg;
+ View viewToEnable;
if (mAppInfo != null) {
- msg = (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
- ? R.string.install_confirm_question_update_system
- : R.string.install_confirm_question_update;
+ viewToEnable = (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
+ ? requireViewById(R.id.install_confirm_question_update_system)
+ : requireViewById(R.id.install_confirm_question_update);
} else {
// This is a new application with no permissions.
- msg = R.string.install_confirm_question;
+ viewToEnable = requireViewById(R.id.install_confirm_question);
}
- ((TextView) findViewById(R.id.install_confirm_question)).setText(msg);
+ viewToEnable.setVisibility(View.VISIBLE);
mEnableOk = true;
mOk.setEnabled(true);
@@ -280,6 +281,8 @@
@Override
protected void onCreate(Bundle icicle) {
+ getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+
super.onCreate(null);
if (icicle != null) {
@@ -344,7 +347,7 @@
// load dummy layout with OK button disabled until we override this layout in
// startInstallConfirm
- bindUi(R.layout.install_confirm);
+ bindUi();
checkIfAllowedAndInitiateInstall();
}
@@ -374,17 +377,34 @@
outState.putBoolean(ALLOW_UNKNOWN_SOURCES_KEY, mAllowUnknownSources);
}
- private void bindUi(int layout) {
- setContentView(layout);
+ private void bindUi() {
+ mAlert.setIcon(mAppSnippet.icon);
+ mAlert.setTitle(mAppSnippet.label);
+ mAlert.setView(R.layout.install_content_view);
+ mAlert.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.install),
+ (ignored, ignored2) -> {
+ if (mOk.isEnabled()) {
+ if (mSessionId != -1) {
+ mInstaller.setPermissionsResult(mSessionId, true);
+ finish();
+ } else {
+ startInstall();
+ }
+ }
+ }, null);
+ mAlert.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel),
+ (ignored, ignored2) -> {
+ // Cancel and finish
+ setResult(RESULT_CANCELED);
+ if (mSessionId != -1) {
+ mInstaller.setPermissionsResult(mSessionId, false);
+ }
+ finish();
+ }, null);
+ setupAlert();
- mOk = (Button) findViewById(R.id.ok_button);
- mCancel = (Button)findViewById(R.id.cancel_button);
- mOk.setOnClickListener(this);
- mCancel.setOnClickListener(this);
-
+ mOk = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
mOk.setEnabled(false);
-
- PackageUtil.initSnippetForNewApp(this, mAppSnippet, R.id.app_snippet);
}
/**
@@ -525,26 +545,6 @@
super.onBackPressed();
}
- public void onClick(View v) {
- if (v == mOk) {
- if (mOk.isEnabled()) {
- if (mSessionId != -1) {
- mInstaller.setPermissionsResult(mSessionId, true);
- finish();
- } else {
- startInstall();
- }
- }
- } else if (v == mCancel) {
- // Cancel and finish
- setResult(RESULT_CANCELED);
- if (mSessionId != -1) {
- mInstaller.setPermissionsResult(mSessionId, false);
- }
- finish();
- }
- }
-
private void startInstall() {
// Start subactivity to actually install the application
Intent newIntent = new Intent();
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java b/packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
index ba4bf8a..0e89f56 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
@@ -108,26 +108,6 @@
icon);
}
- /**
- * Utility method to display application snippet of a new package.
- * The content view should have been set on context before invoking this method.
- * appSnippet view should include R.id.app_icon and R.id.app_name
- * defined on it.
- *
- * @param pContext context of package that can load the resources
- * @param as The resources to be loaded
- * @param snippetId view id of app snippet view
- */
- @NonNull public static View initSnippetForNewApp(@NonNull Activity pContext,
- @NonNull AppSnippet as, int snippetId) {
- View appSnippet = pContext.findViewById(snippetId);
- if (as.icon != null) {
- ((ImageView) appSnippet.findViewById(R.id.app_icon)).setImageDrawable(as.icon);
- }
- ((TextView)appSnippet.findViewById(R.id.app_name)).setText(as.label);
- return appSnippet;
- }
-
static public class AppSnippet {
@NonNull public CharSequence label;
@Nullable public Drawable icon;
diff --git a/packages/PrintRecommendationService/src/com/android/printservice/recommendation/RemotePrintServicePlugin.java b/packages/PrintRecommendationService/src/com/android/printservice/recommendation/RemotePrintServicePlugin.java
index ef93d4a..3cfb865 100644
--- a/packages/PrintRecommendationService/src/com/android/printservice/recommendation/RemotePrintServicePlugin.java
+++ b/packages/PrintRecommendationService/src/com/android/printservice/recommendation/RemotePrintServicePlugin.java
@@ -19,7 +19,8 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
-import androidx.core.util.Preconditions;
+
+import com.android.printservice.recommendation.util.Preconditions;
import java.net.InetAddress;
import java.util.Collections;
diff --git a/packages/PrintRecommendationService/src/com/android/printservice/recommendation/plugin/mdnsFilter/VendorConfig.java b/packages/PrintRecommendationService/src/com/android/printservice/recommendation/plugin/mdnsFilter/VendorConfig.java
index 5d735a8..dece2d4 100644
--- a/packages/PrintRecommendationService/src/com/android/printservice/recommendation/plugin/mdnsFilter/VendorConfig.java
+++ b/packages/PrintRecommendationService/src/com/android/printservice/recommendation/plugin/mdnsFilter/VendorConfig.java
@@ -22,9 +22,9 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.core.util.Preconditions;
import com.android.printservice.recommendation.R;
+import com.android.printservice.recommendation.util.Preconditions;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
diff --git a/packages/PrintRecommendationService/src/com/android/printservice/recommendation/util/MDNSFilteredDiscovery.java b/packages/PrintRecommendationService/src/com/android/printservice/recommendation/util/MDNSFilteredDiscovery.java
index 65cef94..a6d59cb 100644
--- a/packages/PrintRecommendationService/src/com/android/printservice/recommendation/util/MDNSFilteredDiscovery.java
+++ b/packages/PrintRecommendationService/src/com/android/printservice/recommendation/util/MDNSFilteredDiscovery.java
@@ -24,7 +24,6 @@
import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.core.util.Preconditions;
import com.android.printservice.recommendation.PrintServicePlugin;
diff --git a/packages/PrintRecommendationService/src/com/android/printservice/recommendation/util/Preconditions.java b/packages/PrintRecommendationService/src/com/android/printservice/recommendation/util/Preconditions.java
new file mode 100644
index 0000000..9bba66c
--- /dev/null
+++ b/packages/PrintRecommendationService/src/com/android/printservice/recommendation/util/Preconditions.java
@@ -0,0 +1,532 @@
+/*
+ * Copyright (C) 2011 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.printservice.recommendation.util;
+
+import android.text.TextUtils;
+
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
+import java.util.Collection;
+
+/**
+ * Simple static methods to be called at the start of your own methods to verify
+ * correct arguments and state.
+ */
+public class Preconditions {
+
+ public static void checkArgument(boolean expression) {
+ if (!expression) {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ /**
+ * Ensures that an expression checking an argument is true.
+ *
+ * @param expression the expression to check
+ * @param errorMessage the exception message to use if the check fails; will
+ * be converted to a string using {@link String#valueOf(Object)}
+ * @throws IllegalArgumentException if {@code expression} is false
+ */
+ public static void checkArgument(boolean expression, final Object errorMessage) {
+ if (!expression) {
+ throw new IllegalArgumentException(String.valueOf(errorMessage));
+ }
+ }
+
+ /**
+ * Ensures that an expression checking an argument is true.
+ *
+ * @param expression the expression to check
+ * @param messageTemplate a printf-style message template to use if the check fails; will
+ * be converted to a string using {@link String#format(String, Object...)}
+ * @param messageArgs arguments for {@code messageTemplate}
+ * @throws IllegalArgumentException if {@code expression} is false
+ */
+ public static void checkArgument(boolean expression,
+ final String messageTemplate,
+ final Object... messageArgs) {
+ if (!expression) {
+ throw new IllegalArgumentException(String.format(messageTemplate, messageArgs));
+ }
+ }
+
+ /**
+ * Ensures that an string reference passed as a parameter to the calling
+ * method is not empty.
+ *
+ * @param string an string reference
+ * @return the string reference that was validated
+ * @throws IllegalArgumentException if {@code string} is empty
+ */
+ public static @NonNull <T extends CharSequence> T checkStringNotEmpty(final T string) {
+ if (TextUtils.isEmpty(string)) {
+ throw new IllegalArgumentException();
+ }
+ return string;
+ }
+
+ /**
+ * Ensures that an string reference passed as a parameter to the calling
+ * method is not empty.
+ *
+ * @param string an string reference
+ * @param errorMessage the exception message to use if the check fails; will
+ * be converted to a string using {@link String#valueOf(Object)}
+ * @return the string reference that was validated
+ * @throws IllegalArgumentException if {@code string} is empty
+ */
+ public static @NonNull <T extends CharSequence> T checkStringNotEmpty(final T string,
+ final Object errorMessage) {
+ if (TextUtils.isEmpty(string)) {
+ throw new IllegalArgumentException(String.valueOf(errorMessage));
+ }
+ return string;
+ }
+
+ /**
+ * Ensures that an object reference passed as a parameter to the calling
+ * method is not null.
+ *
+ * @param reference an object reference
+ * @return the non-null reference that was validated
+ * @throws NullPointerException if {@code reference} is null
+ */
+ public static @NonNull <T> T checkNotNull(final T reference) {
+ if (reference == null) {
+ throw new NullPointerException();
+ }
+ return reference;
+ }
+
+ /**
+ * Ensures that an object reference passed as a parameter to the calling
+ * method is not null.
+ *
+ * @param reference an object reference
+ * @param errorMessage the exception message to use if the check fails; will
+ * be converted to a string using {@link String#valueOf(Object)}
+ * @return the non-null reference that was validated
+ * @throws NullPointerException if {@code reference} is null
+ */
+ public static @NonNull <T> T checkNotNull(final T reference, final Object errorMessage) {
+ if (reference == null) {
+ throw new NullPointerException(String.valueOf(errorMessage));
+ }
+ return reference;
+ }
+
+ /**
+ * Ensures that an object reference passed as a parameter to the calling
+ * method is not null.
+ *
+ * @param reference an object reference
+ * @param messageTemplate a printf-style message template to use if the check fails; will
+ * be converted to a string using {@link String#format(String, Object...)}
+ * @param messageArgs arguments for {@code messageTemplate}
+ * @return the non-null reference that was validated
+ * @throws NullPointerException if {@code reference} is null
+ */
+ public static @NonNull <T> T checkNotNull(final T reference,
+ final String messageTemplate,
+ final Object... messageArgs) {
+ if (reference == null) {
+ throw new NullPointerException(String.format(messageTemplate, messageArgs));
+ }
+ return reference;
+ }
+
+ /**
+ * Ensures the truth of an expression involving the state of the calling
+ * instance, but not involving any parameters to the calling method.
+ *
+ * @param expression a boolean expression
+ * @param message exception message
+ * @throws IllegalStateException if {@code expression} is false
+ */
+ public static void checkState(final boolean expression, String message) {
+ if (!expression) {
+ throw new IllegalStateException(message);
+ }
+ }
+
+ /**
+ * Ensures the truth of an expression involving the state of the calling
+ * instance, but not involving any parameters to the calling method.
+ *
+ * @param expression a boolean expression
+ * @throws IllegalStateException if {@code expression} is false
+ */
+ public static void checkState(final boolean expression) {
+ checkState(expression, null);
+ }
+
+ /**
+ * Check the requested flags, throwing if any requested flags are outside
+ * the allowed set.
+ *
+ * @return the validated requested flags.
+ */
+ public static int checkFlagsArgument(final int requestedFlags, final int allowedFlags) {
+ if ((requestedFlags & allowedFlags) != requestedFlags) {
+ throw new IllegalArgumentException("Requested flags 0x"
+ + Integer.toHexString(requestedFlags) + ", but only 0x"
+ + Integer.toHexString(allowedFlags) + " are allowed");
+ }
+
+ return requestedFlags;
+ }
+
+ /**
+ * Ensures that that the argument numeric value is non-negative.
+ *
+ * @param value a numeric int value
+ * @param errorMessage the exception message to use if the check fails
+ * @return the validated numeric value
+ * @throws IllegalArgumentException if {@code value} was negative
+ */
+ public static @IntRange(from = 0) int checkArgumentNonnegative(final int value,
+ final String errorMessage) {
+ if (value < 0) {
+ throw new IllegalArgumentException(errorMessage);
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that that the argument numeric value is non-negative.
+ *
+ * @param value a numeric int value
+ *
+ * @return the validated numeric value
+ * @throws IllegalArgumentException if {@code value} was negative
+ */
+ public static @IntRange(from = 0) int checkArgumentNonnegative(final int value) {
+ if (value < 0) {
+ throw new IllegalArgumentException();
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that that the argument numeric value is non-negative.
+ *
+ * @param value a numeric long value
+ * @return the validated numeric value
+ * @throws IllegalArgumentException if {@code value} was negative
+ */
+ public static long checkArgumentNonnegative(final long value) {
+ if (value < 0) {
+ throw new IllegalArgumentException();
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that that the argument numeric value is non-negative.
+ *
+ * @param value a numeric long value
+ * @param errorMessage the exception message to use if the check fails
+ * @return the validated numeric value
+ * @throws IllegalArgumentException if {@code value} was negative
+ */
+ public static long checkArgumentNonnegative(final long value, final String errorMessage) {
+ if (value < 0) {
+ throw new IllegalArgumentException(errorMessage);
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that that the argument numeric value is positive.
+ *
+ * @param value a numeric int value
+ * @param errorMessage the exception message to use if the check fails
+ * @return the validated numeric value
+ * @throws IllegalArgumentException if {@code value} was not positive
+ */
+ public static int checkArgumentPositive(final int value, final String errorMessage) {
+ if (value <= 0) {
+ throw new IllegalArgumentException(errorMessage);
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that the argument floating point value is a finite number.
+ *
+ * <p>A finite number is defined to be both representable (that is, not NaN) and
+ * not infinite (that is neither positive or negative infinity).</p>
+ *
+ * @param value a floating point value
+ * @param valueName the name of the argument to use if the check fails
+ *
+ * @return the validated floating point value
+ *
+ * @throws IllegalArgumentException if {@code value} was not finite
+ */
+ public static float checkArgumentFinite(final float value, final String valueName) {
+ if (Float.isNaN(value)) {
+ throw new IllegalArgumentException(valueName + " must not be NaN");
+ } else if (Float.isInfinite(value)) {
+ throw new IllegalArgumentException(valueName + " must not be infinite");
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that the argument floating point value is within the inclusive range.
+ *
+ * <p>While this can be used to range check against +/- infinity, note that all NaN numbers
+ * will always be out of range.</p>
+ *
+ * @param value a floating point value
+ * @param lower the lower endpoint of the inclusive range
+ * @param upper the upper endpoint of the inclusive range
+ * @param valueName the name of the argument to use if the check fails
+ *
+ * @return the validated floating point value
+ *
+ * @throws IllegalArgumentException if {@code value} was not within the range
+ */
+ public static float checkArgumentInRange(float value, float lower, float upper,
+ String valueName) {
+ if (Float.isNaN(value)) {
+ throw new IllegalArgumentException(valueName + " must not be NaN");
+ } else if (value < lower) {
+ throw new IllegalArgumentException(
+ String.format(
+ "%s is out of range of [%f, %f] (too low)", valueName, lower, upper));
+ } else if (value > upper) {
+ throw new IllegalArgumentException(
+ String.format(
+ "%s is out of range of [%f, %f] (too high)", valueName, lower, upper));
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that the argument int value is within the inclusive range.
+ *
+ * @param value a int value
+ * @param lower the lower endpoint of the inclusive range
+ * @param upper the upper endpoint of the inclusive range
+ * @param valueName the name of the argument to use if the check fails
+ *
+ * @return the validated int value
+ *
+ * @throws IllegalArgumentException if {@code value} was not within the range
+ */
+ public static int checkArgumentInRange(int value, int lower, int upper,
+ String valueName) {
+ if (value < lower) {
+ throw new IllegalArgumentException(
+ String.format(
+ "%s is out of range of [%d, %d] (too low)", valueName, lower, upper));
+ } else if (value > upper) {
+ throw new IllegalArgumentException(
+ String.format(
+ "%s is out of range of [%d, %d] (too high)", valueName, lower, upper));
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that the argument long value is within the inclusive range.
+ *
+ * @param value a long value
+ * @param lower the lower endpoint of the inclusive range
+ * @param upper the upper endpoint of the inclusive range
+ * @param valueName the name of the argument to use if the check fails
+ *
+ * @return the validated long value
+ *
+ * @throws IllegalArgumentException if {@code value} was not within the range
+ */
+ public static long checkArgumentInRange(long value, long lower, long upper,
+ String valueName) {
+ if (value < lower) {
+ throw new IllegalArgumentException(
+ String.format(
+ "%s is out of range of [%d, %d] (too low)", valueName, lower, upper));
+ } else if (value > upper) {
+ throw new IllegalArgumentException(
+ String.format(
+ "%s is out of range of [%d, %d] (too high)", valueName, lower, upper));
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that the array is not {@code null}, and none of its elements are {@code null}.
+ *
+ * @param value an array of boxed objects
+ * @param valueName the name of the argument to use if the check fails
+ *
+ * @return the validated array
+ *
+ * @throws NullPointerException if the {@code value} or any of its elements were {@code null}
+ */
+ public static <T> T[] checkArrayElementsNotNull(final T[] value, final String valueName) {
+ if (value == null) {
+ throw new NullPointerException(valueName + " must not be null");
+ }
+
+ for (int i = 0; i < value.length; ++i) {
+ if (value[i] == null) {
+ throw new NullPointerException(
+ String.format("%s[%d] must not be null", valueName, i));
+ }
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that the {@link Collection} is not {@code null}, and none of its elements are
+ * {@code null}.
+ *
+ * @param value a {@link Collection} of boxed objects
+ * @param valueName the name of the argument to use if the check fails
+ *
+ * @return the validated {@link Collection}
+ *
+ * @throws NullPointerException if the {@code value} or any of its elements were {@code null}
+ */
+ public static @NonNull <C extends Collection<T>, T> C checkCollectionElementsNotNull(
+ final C value, final String valueName) {
+ if (value == null) {
+ throw new NullPointerException(valueName + " must not be null");
+ }
+
+ long ctr = 0;
+ for (T elem : value) {
+ if (elem == null) {
+ throw new NullPointerException(
+ String.format("%s[%d] must not be null", valueName, ctr));
+ }
+ ++ctr;
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that the {@link Collection} is not {@code null}, and contains at least one element.
+ *
+ * @param value a {@link Collection} of boxed elements.
+ * @param valueName the name of the argument to use if the check fails.
+
+ * @return the validated {@link Collection}
+ *
+ * @throws NullPointerException if the {@code value} was {@code null}
+ * @throws IllegalArgumentException if the {@code value} was empty
+ */
+ public static <T> Collection<T> checkCollectionNotEmpty(final Collection<T> value,
+ final String valueName) {
+ if (value == null) {
+ throw new NullPointerException(valueName + " must not be null");
+ }
+ if (value.isEmpty()) {
+ throw new IllegalArgumentException(valueName + " is empty");
+ }
+ return value;
+ }
+
+ /**
+ * Ensures that all elements in the argument floating point array are within the inclusive range
+ *
+ * <p>While this can be used to range check against +/- infinity, note that all NaN numbers
+ * will always be out of range.</p>
+ *
+ * @param value a floating point array of values
+ * @param lower the lower endpoint of the inclusive range
+ * @param upper the upper endpoint of the inclusive range
+ * @param valueName the name of the argument to use if the check fails
+ *
+ * @return the validated floating point value
+ *
+ * @throws IllegalArgumentException if any of the elements in {@code value} were out of range
+ * @throws NullPointerException if the {@code value} was {@code null}
+ */
+ public static float[] checkArrayElementsInRange(float[] value, float lower, float upper,
+ String valueName) {
+ checkNotNull(value, valueName + " must not be null");
+
+ for (int i = 0; i < value.length; ++i) {
+ float v = value[i];
+
+ if (Float.isNaN(v)) {
+ throw new IllegalArgumentException(valueName + "[" + i + "] must not be NaN");
+ } else if (v < lower) {
+ throw new IllegalArgumentException(
+ String.format("%s[%d] is out of range of [%f, %f] (too low)",
+ valueName, i, lower, upper));
+ } else if (v > upper) {
+ throw new IllegalArgumentException(
+ String.format("%s[%d] is out of range of [%f, %f] (too high)",
+ valueName, i, lower, upper));
+ }
+ }
+
+ return value;
+ }
+
+ /**
+ * Ensures that all elements in the argument integer array are within the inclusive range
+ *
+ * @param value an integer array of values
+ * @param lower the lower endpoint of the inclusive range
+ * @param upper the upper endpoint of the inclusive range
+ * @param valueName the name of the argument to use if the check fails
+ *
+ * @return the validated integer array
+ *
+ * @throws IllegalArgumentException if any of the elements in {@code value} were out of range
+ * @throws NullPointerException if the {@code value} was {@code null}
+ */
+ public static int[] checkArrayElementsInRange(int[] value, int lower, int upper,
+ String valueName) {
+ checkNotNull(value, valueName + " must not be null");
+
+ for (int i = 0; i < value.length; ++i) {
+ int v = value[i];
+
+ if (v < lower) {
+ throw new IllegalArgumentException(
+ String.format("%s[%d] is out of range of [%d, %d] (too low)",
+ valueName, i, lower, upper));
+ } else if (v > upper) {
+ throw new IllegalArgumentException(
+ String.format("%s[%d] is out of range of [%d, %d] (too high)",
+ valueName, i, lower, upper));
+ }
+ }
+
+ return value;
+ }
+}
diff --git a/packages/SettingsLib/OWNERS b/packages/SettingsLib/OWNERS
index 4211c27..d188c65 100644
--- a/packages/SettingsLib/OWNERS
+++ b/packages/SettingsLib/OWNERS
@@ -8,8 +8,8 @@
evanlaird@google.com
jackqdyulei@google.com
jmonk@google.com
+leifhendrik@google.com
mfritze@google.com
-nicoya@google.com
rogerxue@google.com
virgild@google.com
zhfan@google.com
@@ -18,4 +18,4 @@
miket@google.com
# Exempt resource files (because they are in a flat directory and too hard to manage via OWNERS)
-per-file *.xml=*
\ No newline at end of file
+per-file *.xml=*
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
index 5ecbe80..c511589 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
@@ -1189,7 +1189,7 @@
/**
* @return {@code true} if {@code cachedBluetoothDevice} is a2dp device
*/
- public boolean isA2dpDevice() {
+ public boolean isConnectedA2dpDevice() {
A2dpProfile a2dpProfile = mProfileManager.getA2dpProfile();
return a2dpProfile != null && a2dpProfile.getConnectionStatus(mDevice) ==
BluetoothProfile.STATE_CONNECTED;
@@ -1198,7 +1198,7 @@
/**
* @return {@code true} if {@code cachedBluetoothDevice} is HFP device
*/
- public boolean isHfpDevice() {
+ public boolean isConnectedHfpDevice() {
HeadsetProfile headsetProfile = mProfileManager.getHeadsetProfile();
return headsetProfile != null && headsetProfile.getConnectionStatus(mDevice) ==
BluetoothProfile.STATE_CONNECTED;
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java b/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java
index 84c8b21..6d60a09 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java
@@ -21,6 +21,9 @@
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE;
import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL;
import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY;
@@ -29,16 +32,19 @@
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.UserHandle;
import android.text.TextUtils;
+import android.util.Log;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
+import java.util.Objects;
/**
* Description of a single dashboard tile that the user can select.
@@ -48,20 +54,6 @@
private static final String TAG = "Tile";
/**
- * Title of the tile that is shown to the user.
- *
- * @attr ref android.R.styleable#PreferenceHeader_title
- */
- public CharSequence title;
-
- /**
- * Optional summary describing what this tile controls.
- *
- * @attr ref android.R.styleable#PreferenceHeader_summary
- */
- public CharSequence summary;
-
- /**
* Optional list of user handles which the intent should be launched on.
*/
public ArrayList<UserHandle> userHandle = new ArrayList<>();
@@ -70,11 +62,13 @@
* The metaData from the activity that defines this tile.
*/
private final Bundle mMetaData;
+
private final String mActivityPackage;
private final String mActivityName;
private final Intent mIntent;
-
private ActivityInfo mActivityInfo;
+ private CharSequence mSummaryOverride;
+
private String mCategory;
public Tile(ActivityInfo activityInfo, String category) {
@@ -90,8 +84,6 @@
mActivityPackage = in.readString();
mActivityName = in.readString();
mIntent = new Intent().setClassName(mActivityPackage, mActivityName);
- title = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
- summary = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
final int N = in.readInt();
for (int i = 0; i < N; i++) {
userHandle.add(UserHandle.CREATOR.createFromParcel(in));
@@ -109,8 +101,6 @@
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mActivityPackage);
dest.writeString(mActivityName);
- TextUtils.writeToParcel(title, dest, flags);
- TextUtils.writeToParcel(summary, dest, flags);
final int N = userHandle.size();
dest.writeInt(N);
for (int i = 0; i < N; i++) {
@@ -120,6 +110,14 @@
dest.writeBundle(mMetaData);
}
+ public int getId() {
+ return Objects.hash(mActivityPackage, mActivityName);
+ }
+
+ public String getDescription() {
+ return mActivityPackage + "/" + mActivityName;
+ }
+
public String getPackageName() {
return mActivityPackage;
}
@@ -158,6 +156,84 @@
&& mMetaData.get(META_DATA_KEY_ORDER) instanceof Integer;
}
+ /**
+ * Title of the tile that is shown to the user.
+ */
+ public CharSequence getTitle(Context context) {
+ CharSequence title = null;
+ final PackageManager packageManager = context.getPackageManager();
+ if (mMetaData.containsKey(META_DATA_PREFERENCE_TITLE)) {
+ if (mMetaData.get(META_DATA_PREFERENCE_TITLE) instanceof Integer) {
+ try {
+ final Resources res =
+ packageManager.getResourcesForApplication(mActivityPackage);
+ title = res.getString(mMetaData.getInt(META_DATA_PREFERENCE_TITLE));
+ } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
+ Log.d(TAG, "Couldn't find info", e);
+ }
+ } else {
+ title = mMetaData.getString(META_DATA_PREFERENCE_TITLE);
+ }
+ }
+ // Set the preference title to the activity's label if no
+ // meta-data is found
+ if (title == null) {
+ title = getActivityInfo(context).loadLabel(packageManager);
+ }
+ return title;
+ }
+
+ /**
+ * Returns the raw metadata for summary, this is used for comparing 2 summary text without
+ * loading the real string.
+ */
+ public String getSummaryReference() {
+ if (mSummaryOverride != null) {
+ return mSummaryOverride.toString();
+ }
+ if (mMetaData != null && mMetaData.containsKey(META_DATA_PREFERENCE_SUMMARY)) {
+ return mMetaData.get(META_DATA_PREFERENCE_SUMMARY).toString();
+ }
+ return null;
+ }
+
+ /**
+ * Overrides the summary. This can happen when injected tile wants to provide dynamic summary.
+ */
+ public void overrideSummary(CharSequence summaryOverride) {
+ mSummaryOverride = summaryOverride;
+ }
+
+ /**
+ * Optional summary describing what this tile controls.
+ */
+ public CharSequence getSummary(Context context) {
+ if (mSummaryOverride != null) {
+ return mSummaryOverride;
+ }
+ CharSequence summary = null;
+ final PackageManager packageManager = context.getPackageManager();
+ if (mMetaData != null) {
+ if (mMetaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) {
+ return null;
+ }
+ if (mMetaData.containsKey(META_DATA_PREFERENCE_SUMMARY)) {
+ if (mMetaData.get(META_DATA_PREFERENCE_SUMMARY) instanceof Integer) {
+ try {
+ final Resources res =
+ packageManager.getResourcesForApplication(mActivityPackage);
+ summary = res.getString(mMetaData.getInt(META_DATA_PREFERENCE_SUMMARY));
+ } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
+ Log.d(TAG, "Couldn't find info", e);
+ }
+ } else {
+ summary = mMetaData.getString(META_DATA_PREFERENCE_SUMMARY);
+ }
+ }
+ }
+ return summary;
+ }
+
public Bundle getMetaData() {
return mMetaData;
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
index e2c8ecd..f222592 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
@@ -20,10 +20,8 @@
import android.content.IContentProvider;
import android.content.Intent;
import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
@@ -43,7 +41,6 @@
public class TileUtils {
- private static final boolean DEBUG = false;
private static final boolean DEBUG_TIMING = false;
private static final String LOG_TAG = "TileUtils";
@@ -70,7 +67,7 @@
/**
* @See {@link #EXTRA_SETTINGS_ACTION}.
*/
- private static final String IA_SETTINGS_ACTION = "com.android.settings.action.IA_SETTINGS";
+ public static final String IA_SETTINGS_ACTION = "com.android.settings.action.IA_SETTINGS";
/**
* Same as #EXTRA_SETTINGS_ACTION but used for the platform Settings activities.
@@ -205,12 +202,9 @@
/**
* Build a list of DashboardCategory.
- *
- * @param extraAction additional intent filter action to be usetileutild to build the dashboard
- * categories
*/
public static List<DashboardCategory> getCategories(Context context,
- Map<Pair<String, String>, Tile> cache, String extraAction) {
+ Map<Pair<String, String>, Tile> cache) {
final long startTime = System.currentTimeMillis();
boolean setup = Global.getInt(context.getContentResolver(), Global.DEVICE_PROVISIONED, 0)
!= 0;
@@ -222,16 +216,13 @@
// Only add Settings for this user.
getTilesForAction(context, user, SETTINGS_ACTION, cache, null, tiles, true);
getTilesForAction(context, user, OPERATOR_SETTINGS, cache,
- OPERATOR_DEFAULT_CATEGORY, tiles, false, true);
+ OPERATOR_DEFAULT_CATEGORY, tiles, false);
getTilesForAction(context, user, MANUFACTURER_SETTINGS, cache,
- MANUFACTURER_DEFAULT_CATEGORY, tiles, false, true);
+ MANUFACTURER_DEFAULT_CATEGORY, tiles, false);
}
if (setup) {
getTilesForAction(context, user, EXTRA_SETTINGS_ACTION, cache, null, tiles, false);
getTilesForAction(context, user, IA_SETTINGS_ACTION, cache, null, tiles, false);
- if (extraAction != null) {
- getTilesForAction(context, user, extraAction, cache, null, tiles, false);
- }
}
}
@@ -262,30 +253,15 @@
return categories;
}
- private static void getTilesForAction(Context context,
+ @VisibleForTesting
+ static void getTilesForAction(Context context,
UserHandle user, String action, Map<Pair<String, String>, Tile> addedCache,
- String defaultCategory, ArrayList<Tile> outTiles, boolean requireSettings) {
- getTilesForAction(context, user, action, addedCache, defaultCategory, outTiles,
- requireSettings, requireSettings);
- }
-
- private static void getTilesForAction(Context context,
- UserHandle user, String action, Map<Pair<String, String>, Tile> addedCache,
- String defaultCategory, ArrayList<Tile> outTiles, boolean requireSettings,
- boolean usePriority) {
- Intent intent = new Intent(action);
+ String defaultCategory, List<Tile> outTiles, boolean requireSettings) {
+ final Intent intent = new Intent(action);
if (requireSettings) {
intent.setPackage(SETTING_PKG);
}
- getTilesForIntent(context, user, intent, addedCache, defaultCategory, outTiles,
- usePriority);
- }
-
- public static void getTilesForIntent(
- Context context, UserHandle user, Intent intent,
- Map<Pair<String, String>, Tile> addedCache, String defaultCategory, List<Tile> outTiles,
- boolean usePriority) {
- PackageManager pm = context.getPackageManager();
+ final PackageManager pm = context.getPackageManager();
List<ResolveInfo> results = pm.queryIntentActivitiesAsUser(intent,
PackageManager.GET_META_DATA, user.getIdentifier());
for (ResolveInfo resolved : results) {
@@ -312,8 +288,6 @@
Tile tile = addedCache.get(key);
if (tile == null) {
tile = new Tile(activityInfo, categoryKey);
- updateTileData(context, tile, activityInfo, activityInfo.applicationInfo, pm);
- if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title);
addedCache.put(key, tile);
}
@@ -326,52 +300,6 @@
}
}
- private static boolean updateTileData(Context context, Tile tile,
- ActivityInfo activityInfo, ApplicationInfo applicationInfo, PackageManager pm) {
- if (applicationInfo.isSystemApp()) {
- CharSequence title = null;
- String summary = null;
-
- // Get the activity's meta-data
- try {
- Resources res = pm.getResourcesForApplication(applicationInfo.packageName);
- Bundle metaData = activityInfo.metaData;
-
- if (res != null && metaData != null) {
- if (metaData.containsKey(META_DATA_PREFERENCE_TITLE)) {
- if (metaData.get(META_DATA_PREFERENCE_TITLE) instanceof Integer) {
- title = res.getString(metaData.getInt(META_DATA_PREFERENCE_TITLE));
- } else {
- title = metaData.getString(META_DATA_PREFERENCE_TITLE);
- }
- }
- if (metaData.containsKey(META_DATA_PREFERENCE_SUMMARY)) {
- if (metaData.get(META_DATA_PREFERENCE_SUMMARY) instanceof Integer) {
- summary = res.getString(metaData.getInt(META_DATA_PREFERENCE_SUMMARY));
- } else {
- summary = metaData.getString(META_DATA_PREFERENCE_SUMMARY);
- }
- }
- }
- } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
- if (DEBUG) Log.d(LOG_TAG, "Couldn't find info", e);
- }
-
- // Set the preference title to the activity's label if no
- // meta-data is found
- if (TextUtils.isEmpty(title)) {
- title = activityInfo.loadLabel(pm).toString();
- }
-
- // Set title and summary for the preference
- tile.title = title;
- tile.summary = summary;
- return true;
- }
-
- return false;
- }
-
/**
* Gets the icon package name and resource id from content provider.
*
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java
index 2d34f23..7baded8 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java
@@ -50,7 +50,6 @@
private final static String DEVICE_ADDRESS_3 = "AA:BB:CC:DD:EE:33";
private final static String DEVICE_SUMMARY_1 = "summary 1";
private final static String DEVICE_SUMMARY_2 = "summary 2";
- private final static String DEVICE_SUMMARY_3 = "summary 3";
private final static long HISYNCID1 = 10;
private final static long HISYNCID2 = 11;
private final BluetoothClass DEVICE_CLASS_1 =
@@ -82,11 +81,6 @@
private CachedBluetoothDevice mCachedDevice3;
private CachedBluetoothDeviceManager mCachedDeviceManager;
private Context mContext;
- private String[] mActiveDeviceStringsArray;
- private String mActiveDeviceStringNone;
- private String mActiveDeviceStringAll;
- private String mActiveDeviceStringMedia;
- private String mActiveDeviceStringPhone;
@Before
public void setUp() {
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
index 034574f..5e417c3 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
@@ -538,7 +538,7 @@
when(mA2dpProfile.getConnectionStatus(mDevice)).
thenReturn(BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.isA2dpDevice()).isTrue();
+ assertThat(mCachedDevice.isConnectedA2dpDevice()).isTrue();
}
@Test
@@ -547,7 +547,7 @@
when(mA2dpProfile.getConnectionStatus(mDevice)).
thenReturn(BluetoothProfile.STATE_DISCONNECTING);
- assertThat(mCachedDevice.isA2dpDevice()).isFalse();
+ assertThat(mCachedDevice.isConnectedA2dpDevice()).isFalse();
}
@Test
@@ -556,7 +556,7 @@
when(mHfpProfile.getConnectionStatus(mDevice)).
thenReturn(BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.isHfpDevice()).isTrue();
+ assertThat(mCachedDevice.isConnectedHfpDevice()).isTrue();
}
@Test
@@ -565,7 +565,7 @@
when(mHfpProfile.getConnectionStatus(mDevice)).
thenReturn(BluetoothProfile.STATE_DISCONNECTING);
- assertThat(mCachedDevice.isHfpDevice()).isFalse();
+ assertThat(mCachedDevice.isConnectedHfpDevice()).isFalse();
}
@Test
@@ -590,14 +590,14 @@
public void isConnectedHfpDevice_profileIsNull_returnFalse() {
when(mProfileManager.getHeadsetProfile()).thenReturn(null);
- assertThat(mCachedDevice.isHfpDevice()).isFalse();
+ assertThat(mCachedDevice.isConnectedHfpDevice()).isFalse();
}
@Test
public void isConnectedA2dpDevice_profileIsNull_returnFalse() {
when(mProfileManager.getA2dpProfile()).thenReturn(null);
- assertThat(mCachedDevice.isA2dpDevice()).isFalse();
+ assertThat(mCachedDevice.isConnectedA2dpDevice()).isFalse();
}
@Test
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
index 9f097d8..8e06f157 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
@@ -16,6 +16,7 @@
package com.android.settingslib.drawer;
+import static com.android.settingslib.drawer.TileUtils.IA_SETTINGS_ACTION;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
@@ -39,7 +40,6 @@
import android.app.ActivityManager;
import android.content.ContentResolver;
import android.content.Context;
-import android.content.IContentProvider;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
@@ -47,9 +47,7 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
-import android.net.Uri;
import android.os.Bundle;
-import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings.Global;
@@ -80,8 +78,6 @@
@Mock
private UserManager mUserManager;
@Mock
- private IContentProvider mIContentProvider;
- @Mock
private ContentResolver mContentResolver;
private static final String URI_GET_SUMMARY = "content://authority/text/summary";
@@ -104,15 +100,14 @@
@Test
public void getTilesForIntent_shouldParseCategory() {
final String testCategory = "category1";
- Intent intent = new Intent();
Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
List<Tile> outTiles = new ArrayList<>();
List<ResolveInfo> info = new ArrayList<>();
info.add(newInfo(true, testCategory));
- when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
+ when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
.thenReturn(info);
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
+ TileUtils.getTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, addedCache,
null /* defaultCategory */, outTiles, false /* usePriority */);
assertThat(outTiles.size()).isEqualTo(1);
@@ -122,60 +117,37 @@
@Test
public void getTilesForIntent_shouldParseKeyHintForSystemApp() {
String keyHint = "key";
- Intent intent = new Intent();
Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
List<Tile> outTiles = new ArrayList<>();
List<ResolveInfo> info = new ArrayList<>();
ResolveInfo resolveInfo = newInfo(true, null /* category */, keyHint);
info.add(resolveInfo);
- when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
+ when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
.thenReturn(info);
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
- null /* defaultCategory */, outTiles, false /* usePriority */);
+ TileUtils.getTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, addedCache,
+ null /* defaultCategory */, outTiles, false /* requiresSettings */);
- assertThat(outTiles.size()).isEqualTo(1);
+ assertThat(outTiles).hasSize(1);
assertThat(outTiles.get(0).getKey(mContext)).isEqualTo(keyHint);
}
@Test
public void getTilesForIntent_shouldSkipNonSystemApp() {
final String testCategory = "category1";
- Intent intent = new Intent();
Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
List<Tile> outTiles = new ArrayList<>();
List<ResolveInfo> info = new ArrayList<>();
info.add(newInfo(false, testCategory));
- when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
+ when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
.thenReturn(info);
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
- null /* defaultCategory */, outTiles, false /* usePriority */);
+ TileUtils.getTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION,
+ addedCache, null /* defaultCategory */, outTiles, false /* requiresSettings */);
- assertThat(outTiles.isEmpty()).isTrue();
- }
-
- @Test
- public void getCategories_shouldHandleExtraIntentAction() {
- final String testCategory = "category1";
- final String testAction = "action1";
- Map<Pair<String, String>, Tile> cache = new ArrayMap<>();
- List<ResolveInfo> info = new ArrayList<>();
- info.add(newInfo(true, testCategory));
- Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 1);
- when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
- List<UserHandle> userHandleList = new ArrayList<>();
- userHandleList.add(UserHandle.CURRENT);
- when(mUserManager.getUserProfiles()).thenReturn(userHandleList);
-
- when(mPackageManager.queryIntentActivitiesAsUser(argThat(
- event -> testAction.equals(event.getAction())), anyInt(), anyInt()))
- .thenReturn(info);
-
- List<DashboardCategory> categoryList = TileUtils.getCategories(mContext, cache, testAction);
- assertThat(categoryList.get(0).getTile(0).getCategory()).isEqualTo(testCategory);
+ assertThat(outTiles).isEmpty();
}
@Test
@@ -189,7 +161,7 @@
userHandleList.add(new UserHandle(ActivityManager.getCurrentUser()));
when(mUserManager.getUserProfiles()).thenReturn(userHandleList);
- TileUtils.getCategories(mContext, cache, null /* action */);
+ TileUtils.getCategories(mContext, cache);
verify(mPackageManager, atLeastOnce()).queryIntentActivitiesAsUser(
intentCaptor.capture(), anyInt(), anyInt());
@@ -199,7 +171,6 @@
@Test
public void getTilesForIntent_shouldReadMetadataTitleAsString() {
- Intent intent = new Intent();
Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
List<Tile> outTiles = new ArrayList<>();
List<ResolveInfo> info = new ArrayList<>();
@@ -207,19 +178,18 @@
URI_GET_SUMMARY, "my title", 0);
info.add(resolveInfo);
- when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
+ when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
.thenReturn(info);
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
+ TileUtils.getTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, addedCache,
null /* defaultCategory */, outTiles, false /* usePriority */);
assertThat(outTiles.size()).isEqualTo(1);
- assertThat(outTiles.get(0).title).isEqualTo("my title");
+ assertThat(outTiles.get(0).getTitle(mContext)).isEqualTo("my title");
}
@Test
public void getTilesForIntent_shouldReadMetadataTitleFromResource() {
- Intent intent = new Intent();
Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
List<Tile> outTiles = new ArrayList<>();
List<ResolveInfo> info = new ArrayList<>();
@@ -227,16 +197,16 @@
URI_GET_SUMMARY, null, 123);
info.add(resolveInfo);
- when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
+ when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
.thenReturn(info);
when(mResources.getString(eq(123)))
.thenReturn("my localized title");
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
+ TileUtils.getTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, addedCache,
null /* defaultCategory */, outTiles, false /* usePriority */);
assertThat(outTiles.size()).isEqualTo(1);
- assertThat(outTiles.get(0).title).isEqualTo("my localized title");
+ assertThat(outTiles.get(0).getTitle(mContext)).isEqualTo("my localized title");
// Icon should be tintable because the tile is not from settings package, and
// "forceTintExternalIcon" is set
@@ -245,7 +215,6 @@
@Test
public void getTilesForIntent_shouldNotTintIconIfInSettingsPackage() {
- Intent intent = new Intent();
Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
List<Tile> outTiles = new ArrayList<>();
List<ResolveInfo> info = new ArrayList<>();
@@ -255,10 +224,10 @@
resolveInfo.activityInfo.applicationInfo.packageName = "com.android.settings";
info.add(resolveInfo);
- when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
+ when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
.thenReturn(info);
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
+ TileUtils.getTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, addedCache,
null /* defaultCategory */, outTiles, false /* usePriority */);
assertThat(outTiles.get(0).isIconTintable(mContext)).isFalse();
@@ -266,7 +235,6 @@
@Test
public void getTilesForIntent_shouldMarkIconTintableIfMetadataSet() {
- Intent intent = new Intent();
Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
List<Tile> outTiles = new ArrayList<>();
List<ResolveInfo> info = new ArrayList<>();
@@ -276,57 +244,17 @@
.putBoolean(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE, true);
info.add(resolveInfo);
- when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
+ when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
.thenReturn(info);
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
+ TileUtils.getTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, addedCache,
null /* defaultCategory */, outTiles, false /* usePriority */);
assertThat(outTiles.get(0).isIconTintable(mContext)).isTrue();
}
@Test
- public void getTilesForIntent_shouldNotProcessInvalidUriContentSystemApp()
- throws RemoteException {
- Intent intent = new Intent();
- Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
- List<Tile> outTiles = new ArrayList<>();
- List<ResolveInfo> info = new ArrayList<>();
- ResolveInfo resolveInfo = newInfo(true, null /* category */, null, null, URI_GET_SUMMARY);
- info.add(resolveInfo);
-
- when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
- .thenReturn(info);
-
- // Case 1: No provider associated with the uri specified.
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
- null /* defaultCategory */, outTiles, false /* usePriority */);
-
- assertThat(outTiles.size()).isEqualTo(1);
- assertThat(outTiles.get(0).getIcon(mContext).getResId()).isEqualTo(314159);
- assertThat(outTiles.get(0).summary).isEqualTo("static-summary");
-
- // Case 2: Empty bundle.
- Bundle bundle = new Bundle();
- when(mIContentProvider.call(anyString(),
- eq(TileUtils.getMethodFromUri(Uri.parse(URI_GET_SUMMARY))), eq(URI_GET_SUMMARY),
- any())).thenReturn(bundle);
- when(mContentResolver.acquireUnstableProvider(anyString()))
- .thenReturn(mIContentProvider);
- when(mContentResolver.acquireUnstableProvider(any(Uri.class)))
- .thenReturn(mIContentProvider);
-
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
- null /* defaultCategory */, outTiles, false /* usePriority */);
-
- assertThat(outTiles.size()).isEqualTo(1);
- assertThat(outTiles.get(0).getIcon(mContext).getResId()).isEqualTo(314159);
- assertThat(outTiles.get(0).summary).isEqualTo("static-summary");
- }
-
- @Test
public void getTilesForIntent_shouldProcessUriContentForSystemApp() {
- Intent intent = new Intent();
Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
List<Tile> outTiles = new ArrayList<>();
List<ResolveInfo> info = new ArrayList<>();
@@ -334,10 +262,10 @@
URI_GET_SUMMARY);
info.add(resolveInfo);
- when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
+ when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
.thenReturn(info);
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
+ TileUtils.getTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, addedCache,
null /* defaultCategory */, outTiles, false /* usePriority */);
assertThat(outTiles.size()).isEqualTo(1);
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_carmode.png
deleted file mode 100644
index 95e5778..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_carmode.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_carmode.png
deleted file mode 100644
index 6421146..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_carmode.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_carmode.png
deleted file mode 100644
index 151d5fe..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back_carmode.png
deleted file mode 100644
index b954aa7..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back_carmode.png
deleted file mode 100644
index 61d5db6..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back_carmode.png
deleted file mode 100644
index 7b98c1f..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_sysbar_back_carmode.png
deleted file mode 100644
index aad1320..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_sysbar_back_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl/ic_sysbar_back_carmode.xml b/packages/SystemUI/res/drawable-ldrtl/ic_sysbar_back_carmode.xml
new file mode 100644
index 0000000..f91190b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl/ic_sysbar_back_carmode.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="44dp"
+ android:height="44dp"
+ android:viewportWidth="44.0"
+ android:viewportHeight="44.0">
+ <path
+ android:pathData="M35,21.94C35,22.78 34.49,23.58 33.64,24.05L12.44,36.13C11.43,36.7 10.58,36.51 10.11,36.25C9.08,35.67 9,34.56 9,34.09L9,9.91C9,9.35 9.08,8.31 10.09,7.75C10.54,7.49 11.34,7.31 12.33,7.86L33.74,19.95C34.51,20.39 35,21.13 35,21.94L35,21.94ZM12.5,32L30.5,21.96L12.5,12L12.5,32Z"
+ android:strokeColor="#00000000"
+ android:fillType="evenOdd"
+ android:fillColor="#F8F9FA"
+ android:strokeWidth="1"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_carmode.png
deleted file mode 100644
index 754b2d9..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_carmode.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_carmode.png
deleted file mode 100644
index 873ed7f..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_carmode.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_carmode.png
deleted file mode 100644
index 7696d87..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_carmode.png
deleted file mode 100644
index c98f55e..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_carmode.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_carmode.png
deleted file mode 100644
index 187a566..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_carmode.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_carmode.png
deleted file mode 100644
index c66f8be..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_carmode.png
deleted file mode 100644
index 3a3a119..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_ime_carmode.png b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_ime_carmode.png
deleted file mode 100644
index 7198c82..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_ime_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_home_carmode.png b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_home_carmode.png
deleted file mode 100644
index b1fc02e..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_home_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_carmode.png
deleted file mode 100644
index c06bfda..0000000
--- a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_ime_carmode.png b/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_ime_carmode.png
deleted file mode 100644
index a8c76bf..0000000
--- a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_ime_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_home_carmode.png b/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_home_carmode.png
deleted file mode 100644
index b798e3d..0000000
--- a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_home_carmode.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable/ic_sysbar_back_carmode.xml b/packages/SystemUI/res/drawable/ic_sysbar_back_carmode.xml
new file mode 100644
index 0000000..5844b2e
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_sysbar_back_carmode.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="44dp"
+ android:height="44dp"
+ android:viewportWidth="44.0"
+ android:viewportHeight="44.0">
+ <path
+ android:pathData="M9,22.06C9,21.22 9.51,20.42 10.36,19.95L31.56,7.87C32.57,7.3 33.42,7.49 33.89,7.75C34.92,8.33 35,9.44 35,9.91L35,34.09C35,34.65 34.92,35.69 33.91,36.25C33.46,36.51 32.66,36.69 31.67,36.14L10.26,24.05C9.49,23.61 9,22.87 9,22.06L9,22.06ZM31.5,12L13.5,22.04L31.5,32L31.5,12Z"
+ android:strokeColor="#00000000"
+ android:fillType="evenOdd"
+ android:fillColor="#F8F9FA"
+ android:strokeWidth="1"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_sysbar_back_ime_carmode.xml b/packages/SystemUI/res/drawable/ic_sysbar_back_ime_carmode.xml
new file mode 100644
index 0000000..542ba9b
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_sysbar_back_ime_carmode.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="44dp"
+ android:height="44dp"
+ android:viewportWidth="44.0"
+ android:viewportHeight="44.0">
+ <path
+ android:pathData="M22.06,35C21.22,35 20.42,34.49 19.95,33.64L7.87,12.44C7.3,11.43 7.49,10.58 7.75,10.11C8.33,9.08 9.44,9 9.91,9L34.09,9C34.65,9 35.69,9.08 36.25,10.09C36.51,10.54 36.69,11.34 36.14,12.33L24.05,33.74C23.61,34.51 22.87,35 22.06,35L22.06,35ZM12,12.5L22.04,30.5L32,12.5L12,12.5Z"
+ android:strokeColor="#00000000"
+ android:fillType="evenOdd"
+ android:fillColor="#F8F9FA"
+ android:strokeWidth="1"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_sysbar_home_carmode.xml b/packages/SystemUI/res/drawable/ic_sysbar_home_carmode.xml
new file mode 100644
index 0000000..e07bf6f
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_sysbar_home_carmode.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="44dp"
+ android:height="44dp"
+ android:viewportWidth="44.0"
+ android:viewportHeight="44.0">
+ <path
+ android:pathData="M22.39,22.39m-14.54,0a14.54,14.54 0,1 1,29.07 0a14.54,14.54 0,1 1,-29.07 0"
+ android:fillType="evenOdd"
+ android:strokeColor="#F8F9FA"
+ android:fillColor="#00000000"
+ android:strokeWidth="4"/>
+</vector>
diff --git a/packages/SystemUI/res/layout/notification_snooze.xml b/packages/SystemUI/res/layout/notification_snooze.xml
index fae759a..ffe2eee 100644
--- a/packages/SystemUI/res/layout/notification_snooze.xml
+++ b/packages/SystemUI/res/layout/notification_snooze.xml
@@ -22,7 +22,7 @@
android:orientation="vertical"
android:clickable="true"
android:background="@color/notification_guts_bg_color"
- android:theme="@*android:style/Theme.DeviceDefault.Light">
+ android:theme="@style/Theme.SystemUI">
<RelativeLayout
android:id="@+id/notification_snooze"
@@ -36,7 +36,7 @@
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:paddingStart="@*android:dimen/notification_content_margin_start"
- android:textColor="@color/notification_primary_text_color"
+ android:textColor="?android:attr/textColorPrimary"
android:paddingEnd="4dp"/>
<ImageView
diff --git a/packages/SystemUI/res/layout/notification_snooze_option.xml b/packages/SystemUI/res/layout/notification_snooze_option.xml
index aaf45f3..f203839 100644
--- a/packages/SystemUI/res/layout/notification_snooze_option.xml
+++ b/packages/SystemUI/res/layout/notification_snooze_option.xml
@@ -22,4 +22,4 @@
android:layout_marginEnd="@*android:dimen/notification_content_margin_end"
android:gravity="center_vertical"
android:textSize="14sp"
- android:textColor="#DD000000"/>
\ No newline at end of file
+ android:textColor="?android:attr/textColorSecondary"/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/values-television/styles.xml b/packages/SystemUI/res/values-television/styles.xml
index 53dc4aa..b59f007 100644
--- a/packages/SystemUI/res/values-television/styles.xml
+++ b/packages/SystemUI/res/values-television/styles.xml
@@ -15,5 +15,6 @@
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
+ <style name="Theme.SystemUI.Dialog" parent="@android:style/Theme.DeviceDefault.Dialog" />
<style name="Theme.SystemUI.Dialog.Alert" parent="@*android:style/Theme.DeviceDefault.Dialog.Alert" />
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index ca6b2d9..412e89a 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -945,9 +945,9 @@
<dimen name="bottom_padding">48dp</dimen>
<dimen name="edge_margin">8dp</dimen>
- <dimen name="rounded_corner_radius">0dp</dimen>
- <dimen name="rounded_corner_radius_top">0dp</dimen>
- <dimen name="rounded_corner_radius_bottom">0dp</dimen>
+ <dimen name="rounded_corner_radius">@*android:dimen/rounded_corner_radius</dimen>
+ <dimen name="rounded_corner_radius_top">@*android:dimen/rounded_corner_radius_top</dimen>
+ <dimen name="rounded_corner_radius_bottom">@*android:dimen/rounded_corner_radius_bottom</dimen>
<dimen name="rounded_corner_content_padding">0dp</dimen>
<dimen name="nav_content_padding">0dp</dimen>
<dimen name="nav_quick_scrub_track_edge_padding">24dp</dimen>
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
index 9603562..7479152 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
@@ -16,6 +16,8 @@
package com.android.keyguard;
+import static android.app.slice.Slice.HINT_LIST_ITEM;
+
import android.animation.LayoutTransition;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
@@ -64,6 +66,7 @@
import androidx.slice.core.SliceQuery;
import androidx.slice.widget.ListContent;
import androidx.slice.widget.RowContent;
+import androidx.slice.widget.SliceContent;
import androidx.slice.widget.SliceLiveData;
/**
@@ -159,12 +162,13 @@
return;
}
- ListContent lc = new ListContent(getContext(), mSlice, null, 0, 0);
- mHasHeader = lc.hasHeader();
- List<SliceItem> subItems = new ArrayList<SliceItem>();
+ ListContent lc = new ListContent(getContext(), mSlice);
+ SliceContent headerContent = lc.getHeader();
+ mHasHeader = headerContent != null && !headerContent.getSliceItem().hasHint(HINT_LIST_ITEM);
+ List<SliceContent> subItems = new ArrayList<SliceContent>();
for (int i = 0; i < lc.getRowItems().size(); i++) {
- SliceItem subItem = lc.getRowItems().get(i);
- String itemUri = subItem.getSlice().getUri().toString();
+ SliceContent subItem = lc.getRowItems().get(i);
+ String itemUri = subItem.getSliceItem().getSlice().getUri().toString();
// Filter out the action row
if (!KeyguardSliceProvider.KEYGUARD_ACTION_URI.equals(itemUri)) {
subItems.add(subItem);
@@ -175,9 +179,7 @@
} else {
mTitle.setVisibility(VISIBLE);
- // If there's a header it'll be the first subitem
- RowContent header = new RowContent(getContext(), subItems.get(0),
- true /* showStartItem */);
+ RowContent header = lc.getHeader();
SliceItem mainTitle = header.getTitleItem();
CharSequence title = mainTitle != null ? mainTitle.getText() : null;
mTitle.setText(title);
@@ -189,8 +191,8 @@
final int startIndex = mHasHeader ? 1 : 0; // First item is header; skip it
mRow.setVisibility(subItemsCount > 0 ? VISIBLE : GONE);
for (int i = startIndex; i < subItemsCount; i++) {
- SliceItem item = subItems.get(i);
- RowContent rc = new RowContent(getContext(), item, true /* showStartItem */);
+ RowContent rc = (RowContent) subItems.get(i);
+ SliceItem item = rc.getSliceItem();
final Uri itemTag = item.getSlice().getUri();
// Try to reuse the view if already exists in the layout
KeyguardSliceButton button = mRow.findViewWithTag(itemTag);
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index 86e0e1f..e7fc3c9 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -55,7 +55,7 @@
import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl;
-import com.android.systemui.statusbar.phone.StatusBarWindowManager;
+import com.android.systemui.statusbar.phone.StatusBarWindowController;
import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -258,8 +258,8 @@
mProviders.put(TunerService.class, () ->
new TunerServiceImpl(mContext));
- mProviders.put(StatusBarWindowManager.class, () ->
- new StatusBarWindowManager(mContext));
+ mProviders.put(StatusBarWindowController.class, () ->
+ new StatusBarWindowController(mContext));
mProviders.put(DarkIconDispatcher.class, () ->
new DarkIconDispatcherImpl(mContext));
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 50d862d..39e3155 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -30,6 +30,7 @@
import android.util.Log;
import android.view.Display;
import android.view.DisplayInfo;
+import android.view.DisplayListCanvas;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.WindowManager;
@@ -366,7 +367,12 @@
protected Bitmap doInBackground(Void... params) {
Throwable exception;
try {
- return mWallpaperManager.getBitmap(true /* hardware */);
+ Bitmap wallpaper = mWallpaperManager.getBitmap(true /* hardware */);
+ if (wallpaper != null
+ && wallpaper.getByteCount() > DisplayListCanvas.MAX_BITMAP_SIZE) {
+ throw new RuntimeException("Wallpaper is too large to draw!");
+ }
+ return wallpaper;
} catch (RuntimeException | OutOfMemoryError e) {
exception = e;
}
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
index 9bbcfbc..044cc5c 100644
--- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
+++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
@@ -94,9 +94,9 @@
private DisplayManager mDisplayManager;
private DisplayManager.DisplayListener mDisplayListener;
- private int mRoundedDefault;
- private int mRoundedDefaultTop;
- private int mRoundedDefaultBottom;
+ @VisibleForTesting protected int mRoundedDefault;
+ @VisibleForTesting protected int mRoundedDefaultTop;
+ @VisibleForTesting protected int mRoundedDefaultBottom;
private View mOverlay;
private View mBottomOverlay;
private float mDensity;
@@ -125,12 +125,7 @@
private void startOnScreenDecorationsThread() {
mRotation = RotationUtils.getExactRotation(mContext);
mWindowManager = mContext.getSystemService(WindowManager.class);
- mRoundedDefault = mContext.getResources().getDimensionPixelSize(
- R.dimen.rounded_corner_radius);
- mRoundedDefaultTop = mContext.getResources().getDimensionPixelSize(
- R.dimen.rounded_corner_radius_top);
- mRoundedDefaultBottom = mContext.getResources().getDimensionPixelSize(
- R.dimen.rounded_corner_radius_bottom);
+ updateRoundedCornerRadii();
if (hasRoundedCorners() || shouldDrawCutout()) {
setupDecorations();
}
@@ -277,6 +272,7 @@
int oldRotation = mRotation;
mPendingRotationChange = false;
updateOrientation();
+ updateRoundedCornerRadii();
if (DEBUG) Log.i(TAG, "onConfigChanged from rot " + oldRotation + " to " + mRotation);
if (shouldDrawCutout() && mOverlay == null) {
setupDecorations();
@@ -309,6 +305,26 @@
}
}
+ private void updateRoundedCornerRadii() {
+ final int newRoundedDefault = mContext.getResources().getDimensionPixelSize(
+ R.dimen.rounded_corner_radius);
+ final int newRoundedDefaultTop = mContext.getResources().getDimensionPixelSize(
+ R.dimen.rounded_corner_radius_top);
+ final int newRoundedDefaultBottom = mContext.getResources().getDimensionPixelSize(
+ R.dimen.rounded_corner_radius_bottom);
+
+ final boolean roundedCornersChanged = mRoundedDefault != newRoundedDefault
+ || mRoundedDefaultBottom != newRoundedDefaultBottom
+ || mRoundedDefaultTop != newRoundedDefaultTop;
+
+ if (roundedCornersChanged) {
+ mRoundedDefault = newRoundedDefault;
+ mRoundedDefaultTop = newRoundedDefaultTop;
+ mRoundedDefaultBottom = newRoundedDefaultBottom;
+ onTuningChanged(SIZE, null);
+ }
+ }
+
private void updateViews() {
View topLeft = mOverlay.findViewById(R.id.left);
View topRight = mOverlay.findViewById(R.id.right);
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
index 4e7c3ab..b96a604 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -36,7 +36,7 @@
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.plugins.PluginManager;
import com.android.systemui.statusbar.phone.StatusBar;
-import com.android.systemui.statusbar.phone.StatusBarWindowManager;
+import com.android.systemui.statusbar.phone.StatusBarWindowController;
import com.android.systemui.util.NotificationChannels;
import java.util.HashMap;
@@ -210,9 +210,9 @@
if (mOverlays == null) mOverlays = new ArraySet<>();
if (plugin.holdStatusBarOpen()) {
mOverlays.add(plugin);
- Dependency.get(StatusBarWindowManager.class).setStateListener(b ->
+ Dependency.get(StatusBarWindowController.class).setStateListener(b ->
mOverlays.forEach(o -> o.setCollapseDesired(b)));
- Dependency.get(StatusBarWindowManager.class).setForcePluginOpen(
+ Dependency.get(StatusBarWindowController.class).setForcePluginOpen(
mOverlays.size() != 0);
}
@@ -221,7 +221,7 @@
@Override
public void onPluginDisconnected(OverlayPlugin plugin) {
mOverlays.remove(plugin);
- Dependency.get(StatusBarWindowManager.class).setForcePluginOpen(
+ Dependency.get(StatusBarWindowController.class).setForcePluginOpen(
mOverlays.size() != 0);
}
}, OverlayPlugin.class, true /* Allow multiple plugins */);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/AutoAddTracker.java b/packages/SystemUI/src/com/android/systemui/qs/AutoAddTracker.java
index 2a2bc09..dfd3f73 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/AutoAddTracker.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/AutoAddTracker.java
@@ -72,6 +72,12 @@
}
}
+ public void setTileRemoved(String tile) {
+ if (mAutoAdded.remove(tile)) {
+ saveTiles();
+ }
+ }
+
public void destroy() {
mContext.getContentResolver().unregisterContentObserver(mObserver);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java
index 84524a6..84fa700 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java
@@ -32,6 +32,7 @@
void removeCallback(Callback callback);
TileServices getTileServices();
void removeTile(String tileSpec);
+ void unmarkTileAsAutoAdded(String tileSpec);
int indexOf(String tileSpec);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
index bb69b7a..86e69e3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
@@ -231,6 +231,11 @@
changeTileSpecs(tileSpecs-> tileSpecs.remove(spec));
}
+ @Override
+ public void unmarkTileAsAutoAdded(String spec) {
+ mAutoTiles.unmarkTileAsAutoAdded(spec);
+ }
+
public void addTile(String spec) {
changeTileSpecs(tileSpecs-> tileSpecs.add(spec));
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
index f523196..50c8698 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -145,7 +145,9 @@
int zenDuration = Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.ZEN_DURATION, 0);
boolean showOnboarding = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 0) != 0;
+ Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 0) != 0
+ && Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ZEN_SETTINGS_UPDATED, 0) != 1;
if (showOnboarding) {
// don't show on-boarding again or notification ever
Settings.Secure.putInt(mContext.getContentResolver(),
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
index 5bab3e8..3109dea 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
@@ -78,6 +78,7 @@
@Override
public void onManagedProfileRemoved() {
mHost.removeTile(getTileSpec());
+ mHost.unmarkTileAsAutoAdded(getTileSpec());
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
index 6920d10..6c9ca70 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
@@ -18,6 +18,7 @@
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
+import android.car.user.CarUserManagerHelper;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.util.Log;
@@ -28,7 +29,6 @@
import android.view.WindowManager;
import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.settingslib.users.UserManagerHelper;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.Dependency;
import com.android.systemui.Prefs;
@@ -506,7 +506,7 @@
@Override
public void updateKeyguardState(boolean goingToFullShade, boolean fromShadeLocked) {
super.updateKeyguardState(goingToFullShade, fromShadeLocked);
- UserManagerHelper helper = new UserManagerHelper(mContext);
+ CarUserManagerHelper helper = new CarUserManagerHelper(mContext);
if (!helper.isHeadlessSystemUser()) {
showUserSwitcher();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java
index 506d697..67a76fd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java
@@ -18,15 +18,13 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
+import android.car.user.CarUserManagerHelper;
import android.content.Context;
-import android.content.pm.UserInfo;
-import android.util.Log;
import android.view.View;
import android.view.ViewStub;
import androidx.recyclerview.widget.GridLayoutManager;
-import com.android.settingslib.users.UserManagerHelper;
import com.android.systemui.R;
import com.android.systemui.statusbar.phone.StatusBar;
@@ -39,7 +37,7 @@
private final UserGridRecyclerView mUserGridView;
private final int mShortAnimDuration;
private final StatusBar mStatusBar;
- private final UserManagerHelper mUserManagerHelper;
+ private final CarUserManagerHelper mCarUserManagerHelper;
private boolean mShowing;
public FullscreenUserSwitcher(StatusBar statusBar, ViewStub containerStub, Context context) {
@@ -53,14 +51,14 @@
mUserGridView.buildAdapter();
mUserGridView.setUserSelectionListener(this::onUserSelected);
- mUserManagerHelper = new UserManagerHelper(context);
+ mCarUserManagerHelper = new CarUserManagerHelper(context);
mShortAnimDuration = mContainer.getResources()
.getInteger(android.R.integer.config_shortAnimTime);
}
public void show() {
- if (mUserManagerHelper.isHeadlessSystemUser()) {
+ if (mCarUserManagerHelper.isHeadlessSystemUser()) {
showUserGrid();
}
if (mShowing) {
@@ -81,12 +79,12 @@
}
private void onUserSelected(UserGridRecyclerView.UserRecord record) {
- if (mUserManagerHelper.isHeadlessSystemUser()) {
+ if (mCarUserManagerHelper.isHeadlessSystemUser()) {
hideUserGrid();
}
if (record.mIsForeground || (record.mIsStartGuestSession
- && mUserManagerHelper.foregroundUserIsGuestUser())) {
+ && mCarUserManagerHelper.isForegroundUserGuest())) {
dismissKeyguard();
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java
index ee10d34..b376c00 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java
@@ -22,6 +22,7 @@
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
+import android.car.user.CarUserManagerHelper;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.UserInfo;
@@ -42,7 +43,6 @@
import androidx.recyclerview.widget.RecyclerView;
import com.android.internal.util.UserIcons;
-import com.android.settingslib.users.UserManagerHelper;
import com.android.systemui.R;
import com.android.systemui.statusbar.phone.SystemUIDialog;
@@ -54,16 +54,16 @@
* One of the uses of this is for the lock screen in auto.
*/
public class UserGridRecyclerView extends PagedListView implements
- UserManagerHelper.OnUsersUpdateListener {
+ CarUserManagerHelper.OnUsersUpdateListener {
private UserSelectionListener mUserSelectionListener;
private UserAdapter mAdapter;
- private UserManagerHelper mUserManagerHelper;
+ private CarUserManagerHelper mCarUserManagerHelper;
private Context mContext;
public UserGridRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
- mUserManagerHelper = new UserManagerHelper(mContext);
+ mCarUserManagerHelper = new CarUserManagerHelper(mContext);
}
/**
@@ -72,7 +72,7 @@
@Override
public void onFinishInflate() {
super.onFinishInflate();
- mUserManagerHelper.registerOnUsersUpdateListener(this);
+ mCarUserManagerHelper.registerOnUsersUpdateListener(this);
}
/**
@@ -81,7 +81,7 @@
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
- mUserManagerHelper.unregisterOnUsersUpdateListener();
+ mCarUserManagerHelper.unregisterOnUsersUpdateListener(this);
}
/**
@@ -90,7 +90,7 @@
* @return the adapter
*/
public void buildAdapter() {
- List<UserRecord> userRecords = createUserRecords(mUserManagerHelper
+ List<UserRecord> userRecords = createUserRecords(mCarUserManagerHelper
.getAllUsers());
mAdapter = new UserAdapter(mContext, userRecords);
super.setAdapter(mAdapter);
@@ -103,7 +103,9 @@
// Don't display guests in the switcher.
continue;
}
- boolean isForeground = mUserManagerHelper.getForegroundUserId() == userInfo.id;
+
+ boolean isForeground =
+ mCarUserManagerHelper.getCurrentForegroundUserId() == userInfo.id;
UserRecord record = new UserRecord(userInfo, false /* isStartGuestSession */,
false /* isAddUser */, isForeground);
userRecords.add(record);
@@ -113,7 +115,7 @@
userRecords.add(createStartGuestUserRecord());
// Add add user record if the foreground user can add users
- if (mUserManagerHelper.foregroundUserCanAddUsers()) {
+ if (mCarUserManagerHelper.canForegroundUserAddUsers()) {
userRecords.add(createAddUserRecord());
}
@@ -147,7 +149,7 @@
@Override
public void onUsersUpdate() {
mAdapter.clearUsers();
- mAdapter.updateUsers(createUserRecords(mUserManagerHelper.getAllUsers()));
+ mAdapter.updateUsers(createUserRecords(mCarUserManagerHelper.getAllUsers()));
mAdapter.notifyDataSetChanged();
}
@@ -210,7 +212,7 @@
if (userRecord.mIsStartGuestSession) {
notifyUserSelected(userRecord);
- mUserManagerHelper.startNewGuestSession(mGuestName);
+ mCarUserManagerHelper.startNewGuestSession(mGuestName);
return;
}
@@ -240,7 +242,7 @@
}
// If the user doesn't want to be a guest or add a user, switch to the user selected
notifyUserSelected(userRecord);
- mUserManagerHelper.switchToUser(userRecord.mInfo);
+ mCarUserManagerHelper.switchToUser(userRecord.mInfo);
});
}
@@ -254,7 +256,7 @@
private Bitmap getUserRecordIcon(UserRecord userRecord) {
if (userRecord.mIsStartGuestSession) {
- return mUserManagerHelper.getGuestDefaultIcon();
+ return mCarUserManagerHelper.getGuestDefaultIcon();
}
if (userRecord.mIsAddUser) {
@@ -262,7 +264,7 @@
.getDrawable(R.drawable.car_add_circle_round));
}
- return mUserManagerHelper.getUserIcon(userRecord.mInfo);
+ return mCarUserManagerHelper.getUserIcon(userRecord.mInfo);
}
@Override
@@ -290,7 +292,7 @@
@Override
protected UserInfo doInBackground(String... userNames) {
- return mUserManagerHelper.createNewUser(userNames[0]);
+ return mCarUserManagerHelper.createNewNonAdminUser(userNames[0]);
}
@Override
@@ -300,7 +302,7 @@
@Override
protected void onPostExecute(UserInfo user) {
if (user != null) {
- mUserManagerHelper.switchToUser(user);
+ mCarUserManagerHelper.switchToUser(user);
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
index 0ab71382..b655a6b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
@@ -414,7 +414,9 @@
} else if (mListContainer.hasPulsingNotifications()) {
dismissalSurface = NotificationStats.DISMISSAL_AOD;
}
- mBarService.onNotificationClear(pkg, tag, id, userId, n.getKey(), dismissalSurface, nv);
+ int dismissalSentiment = NotificationStats.DISMISS_SENTIMENT_NEUTRAL;
+ mBarService.onNotificationClear(pkg, tag, id, userId, n.getKey(), dismissalSurface,
+ dismissalSentiment, nv);
removeNotification(n.getKey(), null);
} catch (RemoteException ex) {
@@ -678,9 +680,15 @@
entry.row.getNotificationChildren();
for (int i = 0; i < notificationChildren.size(); i++) {
ExpandableNotificationRow row = notificationChildren.get(i);
- if ((row.getStatusBarNotification().getNotification().flags
- & Notification.FLAG_FOREGROUND_SERVICE) != 0) {
- // the child is a foreground service notification which we can't remove!
+ NotificationData.Entry childEntry = row.getEntry();
+ boolean isForeground = (row.getStatusBarNotification().getNotification().flags
+ & Notification.FLAG_FOREGROUND_SERVICE) != 0;
+ boolean keepForReply = FORCE_REMOTE_INPUT_HISTORY
+ && (shouldKeepForRemoteInput(childEntry)
+ || shouldKeepForSmartReply(childEntry));
+ if (isForeground || keepForReply) {
+ // the child is a foreground service notification which we can't remove or it's
+ // a child we're keeping around for reply!
continue;
}
row.setKeepInParent(true);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
index 767b07f..e96e176 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
@@ -62,6 +62,8 @@
protected IStatusBarService mBarService;
private long mLastVisibilityReportUptimeMs;
private NotificationListContainer mListContainer;
+ private Object mDozingLock = new Object();
+ private boolean mDozing;
protected final OnChildLocationsChangedListener mNotificationLocationsChangedListener =
new OnChildLocationsChangedListener() {
@@ -174,6 +176,12 @@
mNotificationLocationsChangedListener.onChildLocationsChanged();
}
+ public void setDozing(boolean dozing) {
+ synchronized (mDozingLock) {
+ mDozing = dozing;
+ }
+ }
+
private void logNotificationVisibilityChanges(
Collection<NotificationVisibility> newlyVisible,
Collection<NotificationVisibility> noLongerVisible) {
@@ -190,19 +198,25 @@
// Ignore.
}
- final int N = newlyVisible.size();
+ final int N = newlyVisibleAr.length;
if (N > 0) {
String[] newlyVisibleKeyAr = new String[N];
for (int i = 0; i < N; i++) {
newlyVisibleKeyAr[i] = newlyVisibleAr[i].key;
}
- // TODO: Call NotificationEntryManager to do this, once it exists.
- // TODO: Consider not catching all runtime exceptions here.
- try {
- mNotificationListener.setNotificationsShown(newlyVisibleKeyAr);
- } catch (RuntimeException e) {
- Log.d(TAG, "failed setNotificationsShown: ", e);
+ synchronized (mDozingLock) {
+ // setNotificationsShown should only be called if we are confident that
+ // the user has seen the notification, aka not when ambient display is on
+ if (!mDozing) {
+ // TODO: Call NotificationEntryManager to do this, once it exists.
+ // TODO: Consider not catching all runtime exceptions here.
+ try {
+ mNotificationListener.setNotificationsShown(newlyVisibleKeyAr);
+ } catch (RuntimeException e) {
+ Log.d(TAG, "failed setNotificationsShown: ", e);
+ }
+ }
}
}
recycleAllVisibilityObjects(newlyVisibleAr);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index 094912b..67db68d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -1307,6 +1307,7 @@
}
setDismissed(fromAccessibility);
if (isClearable()) {
+ // TODO: track dismiss sentiment
if (mOnDismissRunnable != null) {
mOnDismissRunnable.run();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
index ef0be880..ab47d33 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
@@ -280,6 +280,7 @@
mCheckSaveListener,
onSettingsClick,
onAppSettingsClick,
+ mPresenter.isDeviceProvisioned(),
row.getIsNonblockable(),
isForBlockingHelper,
row.getEntry().userSentiment == USER_SENTIMENT_NEGATIVE);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java
index 3e380d1..9e2331f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java
@@ -81,6 +81,7 @@
private StatusBarNotification mSbn;
private AnimatorSet mExpandAnimation;
private boolean mIsForeground;
+ private boolean mIsDeviceProvisioned;
private CheckSaveListener mCheckSaveListener;
private OnSettingsClickListener mOnSettingsClickListener;
@@ -143,12 +144,13 @@
final CheckSaveListener checkSaveListener,
final OnSettingsClickListener onSettingsClick,
final OnAppSettingsClickListener onAppSettingsClick,
+ boolean isDeviceProvisioned,
boolean isNonblockable)
throws RemoteException {
bindNotification(pm, iNotificationManager, pkg, notificationChannel,
numUniqueChannelsInRow, sbn, checkSaveListener, onSettingsClick,
- onAppSettingsClick, isNonblockable, false /* isBlockingHelper */,
- false /* isUserSentimentNegative */);
+ onAppSettingsClick, isDeviceProvisioned, isNonblockable,
+ false /* isBlockingHelper */, false /* isUserSentimentNegative */);
}
public void bindNotification(
@@ -161,6 +163,7 @@
CheckSaveListener checkSaveListener,
OnSettingsClickListener onSettingsClick,
OnAppSettingsClickListener onAppSettingsClick,
+ boolean isDeviceProvisioned,
boolean isNonblockable,
boolean isForBlockingHelper,
boolean isUserSentimentNegative)
@@ -183,6 +186,7 @@
(mSbn.getNotification().flags & Notification.FLAG_FOREGROUND_SERVICE) != 0;
mIsForBlockingHelper = isForBlockingHelper;
mAppUid = mSbn.getUid();
+ mIsDeviceProvisioned = isDeviceProvisioned;
int numTotalChannels = mINotificationManager.getNumNotificationChannelsForPackage(
pkg, mAppUid, false /* includeDeleted */);
@@ -246,7 +250,7 @@
// Settings button.
final View settingsButton = findViewById(R.id.info);
- if (mAppUid >= 0 && mOnSettingsClickListener != null) {
+ if (mAppUid >= 0 && mOnSettingsClickListener != null && mIsDeviceProvisioned) {
settingsButton.setVisibility(View.VISIBLE);
final int appUidF = mAppUid;
settingsButton.setOnClickListener(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
index 446a1d4..ab58660 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
@@ -96,6 +96,10 @@
Dependency.get(ColorDisplayController.class).setListener(null);
}
+ public void unmarkTileAsAutoAdded(String tabSpec) {
+ mAutoTracker.setTileRemoved(tabSpec);
+ }
+
private final ManagedProfileController.Callback mProfileCallback =
new ManagedProfileController.Callback() {
@Override
@@ -104,8 +108,6 @@
if (Dependency.get(ManagedProfileController.class).hasActiveProfile()) {
mHost.addTile(WORK);
mAutoTracker.setTileAdded(WORK);
- mHandler.post(() -> Dependency.get(ManagedProfileController.class)
- .removeCallback(mProfileCallback));
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
index 2087a16..b57a366 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
@@ -101,7 +101,7 @@
private KeyguardUpdateMonitor mUpdateMonitor;
private int mMode;
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
- private StatusBarWindowManager mStatusBarWindowManager;
+ private StatusBarWindowController mStatusBarWindowController;
private DozeScrimController mDozeScrimController;
private KeyguardViewMediator mKeyguardViewMediator;
private ScrimController mScrimController;
@@ -125,7 +125,7 @@
mUpdateMonitor.registerCallback(this);
Dependency.get(WakefulnessLifecycle.class).addObserver(mWakefulnessObserver);
Dependency.get(ScreenLifecycle.class).addObserver(mScreenObserver);
- mStatusBarWindowManager = Dependency.get(StatusBarWindowManager.class);
+ mStatusBarWindowController = Dependency.get(StatusBarWindowController.class);
mDozeScrimController = dozeScrimController;
mKeyguardViewMediator = keyguardViewMediator;
mScrimController = scrimController;
@@ -214,7 +214,7 @@
// notifications would light up first, creating an unpleasant animation.
// Defer changing the screen brightness by forcing doze brightness on our window
// until the clock and the notifications are faded out.
- mStatusBarWindowManager.setForceDozeBrightness(true);
+ mStatusBarWindowController.setForceDozeBrightness(true);
}
// During wake and unlock, we need to draw black before waking up to avoid abrupt
// brightness changes due to display state transitions.
@@ -269,7 +269,7 @@
Trace.beginSection("MODE_WAKE_AND_UNLOCK_FROM_DREAM");
mUpdateMonitor.awakenFromDream();
}
- mStatusBarWindowManager.setStatusBarFocusable(false);
+ mStatusBarWindowController.setStatusBarFocusable(false);
if (delayWakeUp) {
mHandler.postDelayed(wakeUp, 50);
} else {
@@ -384,7 +384,7 @@
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
- mStatusBarWindowManager.setForceDozeBrightness(false);
+ mStatusBarWindowController.setForceDozeBrightness(false);
}
}, StatusBar.FADE_KEYGUARD_DURATION_PULSING);
}
@@ -395,7 +395,7 @@
private void resetMode() {
mMode = MODE_NONE;
- mStatusBarWindowManager.setForceDozeBrightness(false);
+ mStatusBarWindowController.setForceDozeBrightness(false);
if (mStatusBar.getNavigationBarView() != null) {
mStatusBar.getNavigationBarView().setWakeAndUnlocking(false);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
index f3e100d..40c8fde 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -181,6 +181,9 @@
public void onQuickStepStarted() {
// Use navbar dragging as a signal to hide the rotate button
setRotateSuggestionButtonState(false);
+
+ // Hide the notifications panel when quick step starts
+ mStatusBar.collapsePanel(true /* animate */);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java
index ed1ae10..8c02e1f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java
@@ -75,7 +75,6 @@
private int mTouchDownY;
private boolean mDownOnRecents;
private VelocityTracker mVelocityTracker;
- private boolean mNotificationsVisibleOnDown;
private boolean mDockWindowEnabled;
private boolean mDockWindowTouchSlopExceeded;
@@ -108,9 +107,6 @@
}
public boolean onInterceptTouchEvent(MotionEvent event) {
- if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
- mNotificationsVisibleOnDown = !mStatusBar.isPresenterFullyCollapsed();
- }
if (!canHandleGestures()) {
return false;
}
@@ -275,7 +271,7 @@
}
private boolean canHandleGestures() {
- return !mStatusBar.isKeyguardShowing() && !mNotificationsVisibleOnDown;
+ return !mStatusBar.isKeyguardShowing();
}
private int calculateDragMode() {
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 3837fbc..3e41cd2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -791,8 +791,19 @@
showSwipeUpUI ? mQuickStepAccessibilityDelegate : null);
}
+ public boolean isNotificationsFullyCollapsed() {
+ return mPanelView.isFullyCollapsed();
+ }
+
+ /**
+ * Updates the {@link WindowManager.LayoutParams.FLAG_SLIPPERY} state dependent on if swipe up
+ * is enabled, or the notifications is fully opened without being in an animated state. If
+ * slippery is enabled, touch events will leave the nav bar window and enter into the fullscreen
+ * app/home window, if not nav bar will receive a cancelled touch event once gesture leaves bar.
+ */
public void updateSlippery() {
- setSlippery(!isQuickStepSwipeUpEnabled() || mPanelView.isFullyExpanded());
+ setSlippery(!isQuickStepSwipeUpEnabled() ||
+ (mPanelView.isFullyExpanded() && !mPanelView.isCollapsing()));
}
private void setSlippery(boolean slippery) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
index 6cc88bb..a13bebd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
@@ -45,9 +45,6 @@
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManagerGlobal;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.Interpolator;
-import androidx.annotation.DimenRes;
import com.android.systemui.Dependency;
import com.android.systemui.OverviewProxyService;
import com.android.systemui.R;
@@ -72,6 +69,7 @@
private boolean mQuickScrubActive;
private boolean mAllowGestureDetection;
private boolean mQuickStepStarted;
+ private boolean mNotificationsVisibleOnDown;
private int mTouchDownX;
private int mTouchDownY;
private boolean mDragPositive;
@@ -190,7 +188,7 @@
mNavigationBarView.getDownHitTarget() == HIT_TARGET_DEAD_ZONE;
if (mOverviewEventSender.getProxy() == null || (!mNavigationBarView.isQuickScrubEnabled()
&& !mNavigationBarView.isQuickStepSwipeUpEnabled())) {
- return false;
+ return deadZoneConsumed;
}
mNavigationBarView.requestUnbufferedDispatch(event);
@@ -221,6 +219,7 @@
mNavigationBarView.transformMatrixToLocal(mTransformLocalMatrix);
mQuickStepStarted = false;
mAllowGestureDetection = true;
+ mNotificationsVisibleOnDown = !mNavigationBarView.isNotificationsFullyCollapsed();
break;
}
case MotionEvent.ACTION_MOVE: {
@@ -257,7 +256,8 @@
// Decide to start quickstep if dragging away from the navigation bar, otherwise in
// the parallel direction, decide to start quickscrub. Only one may run.
if (!mQuickScrubActive && exceededSwipeUpTouchSlop) {
- if (mNavigationBarView.isQuickStepSwipeUpEnabled()) {
+ if (mNavigationBarView.isQuickStepSwipeUpEnabled()
+ && !mNotificationsVisibleOnDown) {
startQuickStep(event);
}
break;
@@ -303,15 +303,28 @@
break;
}
- // Proxy motion events to launcher if not handled by quick scrub
- // Proxy motion events up/cancel that would be sent after long press on any nav button
- if (!mQuickScrubActive && !mIsInScreenPinning && (mAllowGestureDetection
- || action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP)) {
+ if (shouldProxyEvents(action)) {
proxyMotionEvents(event);
}
return mQuickScrubActive || mQuickStepStarted || deadZoneConsumed;
}
+ private boolean shouldProxyEvents(int action) {
+ if (!mQuickScrubActive && !mIsInScreenPinning) {
+ // Allow down, cancel and up events, move and other events are passed if notifications
+ // are not showing and disabled gestures (such as long press) are not executed
+ switch (action) {
+ case MotionEvent.ACTION_DOWN:
+ case MotionEvent.ACTION_CANCEL:
+ case MotionEvent.ACTION_UP:
+ return true;
+ default:
+ return !mNotificationsVisibleOnDown && mAllowGestureDetection;
+ }
+ }
+ return false;
+ }
+
@Override
public void onDraw(Canvas canvas) {
if (!mNavigationBarView.isQuickScrubEnabled()) {
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 cd0255b..dcd794d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -370,7 +370,7 @@
protected StatusBarWindowView mStatusBarWindow;
protected PhoneStatusBarView mStatusBarView;
private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
- protected StatusBarWindowManager mStatusBarWindowManager;
+ protected StatusBarWindowController mStatusBarWindowController;
protected UnlockMethodCache mUnlockMethodCache;
private DozeServiceHost mDozeServiceHost = new DozeServiceHost();
private boolean mWakeUpComingFromTouch;
@@ -515,7 +515,7 @@
final boolean supportsAmbientMode = info != null &&
info.supportsAmbientMode();
- mStatusBarWindowManager.setWallpaperSupportsAmbientMode(supportsAmbientMode);
+ mStatusBarWindowController.setWallpaperSupportsAmbientMode(supportsAmbientMode);
mScrimController.setWallpaperSupportsAmbientMode(supportsAmbientMode);
}
};
@@ -957,8 +957,8 @@
scrimBehind, scrimInFront, mLockscreenWallpaper,
(state, alpha, color) -> mLightBarController.setScrimState(state, alpha, color),
scrimsVisible -> {
- if (mStatusBarWindowManager != null) {
- mStatusBarWindowManager.setScrimsVisibility(scrimsVisible);
+ if (mStatusBarWindowController != null) {
+ mStatusBarWindowController.setScrimsVisibility(scrimsVisible);
}
}, DozeParameters.getInstance(mContext),
mContext.getSystemService(AlarmManager.class));
@@ -1702,7 +1702,7 @@
mBackdrop.animate().cancel();
mBackdrop.setAlpha(1f);
}
- mStatusBarWindowManager.setBackdropShowing(true);
+ mStatusBarWindowController.setBackdropShowing(true);
metaDataChanged = true;
if (DEBUG_MEDIA) {
Log.v(TAG, "DEBUG_MEDIA: Fading in album artwork");
@@ -1762,9 +1762,9 @@
// We are unlocking directly - no animation!
mBackdrop.setVisibility(View.GONE);
mBackdropBack.setImageDrawable(null);
- mStatusBarWindowManager.setBackdropShowing(false);
+ mStatusBarWindowController.setBackdropShowing(false);
} else {
- mStatusBarWindowManager.setBackdropShowing(false);
+ mStatusBarWindowController.setBackdropShowing(false);
mBackdrop.animate()
.alpha(SRC_MIN_ALPHA)
.setInterpolator(Interpolators.ACCELERATE_DECELERATE)
@@ -1918,7 +1918,7 @@
}
public void setQsExpanded(boolean expanded) {
- mStatusBarWindowManager.setQsExpanded(expanded);
+ mStatusBarWindowController.setQsExpanded(expanded);
mNotificationPanel.setStatusAccessibilityImportance(expanded
? View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
: View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
@@ -2001,31 +2001,31 @@
@Override
public void onHeadsUpPinnedModeChanged(boolean inPinnedMode) {
if (inPinnedMode) {
- mStatusBarWindowManager.setHeadsUpShowing(true);
- mStatusBarWindowManager.setForceStatusBarVisible(true);
+ mStatusBarWindowController.setHeadsUpShowing(true);
+ mStatusBarWindowController.setForceStatusBarVisible(true);
if (mNotificationPanel.isFullyCollapsed()) {
// We need to ensure that the touchable region is updated before the window will be
// resized, in order to not catch any touches. A layout will ensure that
// onComputeInternalInsets will be called and after that we can resize the layout. Let's
// make sure that the window stays small for one frame until the touchableRegion is set.
mNotificationPanel.requestLayout();
- mStatusBarWindowManager.setForceWindowCollapsed(true);
+ mStatusBarWindowController.setForceWindowCollapsed(true);
mNotificationPanel.post(() -> {
- mStatusBarWindowManager.setForceWindowCollapsed(false);
+ mStatusBarWindowController.setForceWindowCollapsed(false);
});
}
} else {
if (!mNotificationPanel.isFullyCollapsed() || mNotificationPanel.isTracking()) {
// We are currently tracking or is open and the shade doesn't need to be kept
// open artificially.
- mStatusBarWindowManager.setHeadsUpShowing(false);
+ mStatusBarWindowController.setHeadsUpShowing(false);
} else {
// we need to keep the panel open artificially, let's wait until the animation
// is finished.
mHeadsUpManager.setHeadsUpGoingAway(true);
mStackScroller.runAfterAnimationFinished(() -> {
if (!mHeadsUpManager.hasPinnedHeadsUp()) {
- mStatusBarWindowManager.setHeadsUpShowing(false);
+ mStatusBarWindowController.setHeadsUpShowing(false);
mHeadsUpManager.setHeadsUpGoingAway(false);
}
mRemoteInputManager.removeRemoteInputEntriesKeptUntilCollapsed();
@@ -2065,7 +2065,7 @@
public void setPanelExpanded(boolean isExpanded) {
mPanelExpanded = isExpanded;
updateHideIconsForBouncer(false /* animate */);
- mStatusBarWindowManager.setPanelExpanded(isExpanded);
+ mStatusBarWindowController.setPanelExpanded(isExpanded);
mVisualStabilityManager.setPanelExpanded(isExpanded);
if (isExpanded && getBarState() != StatusBarState.KEYGUARD) {
if (DEBUG) {
@@ -2274,7 +2274,7 @@
// Expand the window to encompass the full screen in anticipation of the drag.
// This is only possible to do atomically because the status bar is at the top of the screen!
- mStatusBarWindowManager.setPanelVisible(true);
+ mStatusBarWindowController.setPanelVisible(true);
visibilityChanged(true);
recomputeDisableFlags(!force /* animate */);
@@ -2348,7 +2348,7 @@
+ mNotificationPanel.canPanelBeCollapsed());
if (mStatusBarWindow != null && mNotificationPanel.canPanelBeCollapsed()) {
// release focus immediately to kick off focus change transition
- mStatusBarWindowManager.setStatusBarFocusable(false);
+ mStatusBarWindowController.setStatusBarFocusable(false);
mStatusBarWindow.cancelExpandHelper();
mStatusBarView.collapsePanel(true /* animate */, delayed, speedUpFactor);
@@ -2420,8 +2420,8 @@
visibilityChanged(false);
// Shrink the window to the size of the status bar only
- mStatusBarWindowManager.setPanelVisible(false);
- mStatusBarWindowManager.setForceStatusBarVisible(false);
+ mStatusBarWindowController.setPanelVisible(false);
+ mStatusBarWindowController.setForceStatusBarVisible(false);
// Close any guts that might be visible
mGutsManager.closeAndSaveGuts(true /* removeLeavebehind */, true /* force */,
@@ -2894,7 +2894,7 @@
private void addStatusBarWindow() {
makeStatusBarView();
- mStatusBarWindowManager = Dependency.get(StatusBarWindowManager.class);
+ mStatusBarWindowController = Dependency.get(StatusBarWindowController.class);
mRemoteInputManager.setUpWithPresenter(this, mEntryManager, this,
new RemoteInputController.Delegate() {
public void setRemoteInputActive(NotificationData.Entry entry,
@@ -2911,8 +2911,8 @@
mStackScroller.requestDisallowDismiss();
}
});
- mRemoteInputManager.getController().addCallback(mStatusBarWindowManager);
- mStatusBarWindowManager.add(mStatusBarWindow, getStatusBarHeight());
+ mRemoteInputManager.getController().addCallback(mStatusBarWindowController);
+ mStatusBarWindowController.add(mStatusBarWindow, getStatusBarHeight());
}
// called by makeStatusbar and also by PhoneStatusBarView
@@ -3222,8 +3222,8 @@
int oldBarHeight = mNaturalBarHeight;
mNaturalBarHeight = res.getDimensionPixelSize(
com.android.internal.R.dimen.status_bar_height);
- if (mStatusBarWindowManager != null && mNaturalBarHeight != oldBarHeight) {
- mStatusBarWindowManager.setBarHeight(mNaturalBarHeight);
+ if (mStatusBarWindowController != null && mNaturalBarHeight != oldBarHeight) {
+ mStatusBarWindowController.setBarHeight(mNaturalBarHeight);
}
mMaxAllowedKeyguardNotifications = res.getInteger(
R.integer.keyguard_max_notification_count);
@@ -3881,7 +3881,7 @@
* Switches theme from light to dark and vice-versa.
*/
protected void updateTheme() {
- final boolean inflated = mStackScroller != null && mStatusBarWindowManager != null;
+ final boolean inflated = mStackScroller != null && mStatusBarWindowController != null;
// Lock wallpaper defines the color of the majority of the views, hence we'll use it
// to set our default theme.
@@ -3907,7 +3907,7 @@
mStackScroller.updateDecorViews(useDarkText);
// Make sure we have the correct navbar/statusbar colors.
- mStatusBarWindowManager.setKeyguardDark(useDarkText);
+ mStatusBarWindowController.setKeyguardDark(useDarkText);
}
}
@@ -3924,6 +3924,7 @@
mDozeScrimController.setDozing(mDozing);
mKeyguardIndicationController.setDozing(mDozing);
mNotificationPanel.setDozing(mDozing, animate);
+ mNotificationLogger.setDozing(mDozing);
updateQsExpansionEnabled();
Trace.endSection();
}
@@ -4070,7 +4071,7 @@
mGroupManager.setStatusBarState(state);
mHeadsUpManager.setStatusBarState(state);
mFalsingManager.setStatusBarState(state);
- mStatusBarWindowManager.setStatusBarState(state);
+ mStatusBarWindowController.setStatusBarState(state);
mStackScroller.setStatusBarState(state);
updateReportRejectedTouchVisibility();
updateDozing();
@@ -4100,7 +4101,7 @@
if (!isPresenterFullyCollapsed()) {
// if we set it not to be focusable when collapsing, we have to undo it when we aborted
// the closing
- mStatusBarWindowManager.setStatusBarFocusable(true);
+ mStatusBarWindowController.setStatusBarFocusable(true);
}
}
@@ -4717,7 +4718,7 @@
if (mDozing != dozing) {
mDozing = dozing;
mKeyguardViewMediator.setAodShowing(mDozing);
- mStatusBarWindowManager.setDozing(mDozing);
+ mStatusBarWindowController.setDozing(mDozing);
mStatusBarKeyguardViewManager.setDozing(mDozing);
if (mAmbientIndicationContainer instanceof DozeReceiver) {
((DozeReceiver) mAmbientIndicationContainer).setDozing(mDozing);
@@ -4947,7 +4948,7 @@
@Override
public void setDozeScreenBrightness(int value) {
- mStatusBarWindowManager.setDozeScreenBrightness(value);
+ mStatusBarWindowController.setDozeScreenBrightness(value);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index c4424d8..9bc0252 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -74,7 +74,7 @@
private static String TAG = "StatusBarKeyguardViewManager";
protected final Context mContext;
- private final StatusBarWindowManager mStatusBarWindowManager;
+ private final StatusBarWindowController mStatusBarWindowController;
private final BouncerExpansionCallback mExpansionCallback = new BouncerExpansionCallback() {
@Override
public void onFullyShown() {
@@ -135,7 +135,7 @@
mContext = context;
mViewMediatorCallback = callback;
mLockPatternUtils = lockPatternUtils;
- mStatusBarWindowManager = Dependency.get(StatusBarWindowManager.class);
+ mStatusBarWindowController = Dependency.get(StatusBarWindowController.class);
KeyguardUpdateMonitor.getInstance(context).registerCallback(mUpdateMonitorCallback);
}
@@ -190,7 +190,7 @@
*/
public void show(Bundle options) {
mShowing = true;
- mStatusBarWindowManager.setKeyguardShowing(true);
+ mStatusBarWindowController.setKeyguardShowing(true);
reset(true /* hideBouncerWhenShowing */);
StatsLog.write(StatsLog.KEYGUARD_STATE_CHANGED,
StatsLog.KEYGUARD_STATE_CHANGED__STATE__SHOWN);
@@ -342,11 +342,11 @@
}
public void setNeedsInput(boolean needsInput) {
- mStatusBarWindowManager.setKeyguardNeedsInput(needsInput);
+ mStatusBarWindowController.setKeyguardNeedsInput(needsInput);
}
public boolean isUnlockWithWallpaper() {
- return mStatusBarWindowManager.isShowingWallpaper();
+ return mStatusBarWindowController.isShowingWallpaper();
}
public void setOccluded(boolean occluded, boolean animate) {
@@ -360,7 +360,7 @@
new Runnable() {
@Override
public void run() {
- mStatusBarWindowManager.setKeyguardOccluded(mOccluded);
+ mStatusBarWindowController.setKeyguardOccluded(mOccluded);
reset(true /* hideBouncerWhenShowing */);
}
});
@@ -375,7 +375,7 @@
if (mShowing) {
mStatusBar.updateMediaMetaData(false, animate && !occluded);
}
- mStatusBarWindowManager.setKeyguardOccluded(occluded);
+ mStatusBarWindowController.setKeyguardOccluded(occluded);
// setDozing(false) will call reset once we stop dozing.
if (!mDozing) {
@@ -425,8 +425,8 @@
mStatusBar.fadeKeyguardAfterLaunchTransition(new Runnable() {
@Override
public void run() {
- mStatusBarWindowManager.setKeyguardShowing(false);
- mStatusBarWindowManager.setKeyguardFadingAway(true);
+ mStatusBarWindowController.setKeyguardShowing(false);
+ mStatusBarWindowController.setKeyguardFadingAway(true);
hideBouncer(true /* destroyView */);
updateStates();
}
@@ -434,7 +434,7 @@
@Override
public void run() {
mStatusBar.hideKeyguard();
- mStatusBarWindowManager.setKeyguardFadingAway(false);
+ mStatusBarWindowController.setKeyguardFadingAway(false);
mViewMediatorCallback.keyguardGone();
executeAfterKeyguardGoneAction();
}
@@ -456,7 +456,7 @@
} else {
boolean staying = mStatusBar.hideKeyguard();
if (!staying) {
- mStatusBarWindowManager.setKeyguardFadingAway(true);
+ mStatusBarWindowController.setKeyguardFadingAway(true);
wakeAndUnlockDejank();
} else {
mStatusBar.finishKeyguardFadingAway();
@@ -464,7 +464,7 @@
}
}
updateStates();
- mStatusBarWindowManager.setKeyguardShowing(false);
+ mStatusBarWindowController.setKeyguardShowing(false);
mViewMediatorCallback.keyguardGone();
}
StatsLog.write(StatsLog.KEYGUARD_STATE_CHANGED,
@@ -481,7 +481,7 @@
}
public void onKeyguardFadedAway() {
- mContainer.postDelayed(() -> mStatusBarWindowManager.setKeyguardFadingAway(false),
+ mContainer.postDelayed(() -> mStatusBarWindowController.setKeyguardFadingAway(false),
100);
mStatusBar.finishKeyguardFadingAway();
mBiometricUnlockController.finishKeyguardFadingAway();
@@ -599,7 +599,7 @@
}
if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) {
- mStatusBarWindowManager.setBouncerShowing(bouncerShowing);
+ mStatusBarWindowController.setBouncerShowing(bouncerShowing);
mStatusBar.setBouncerShowing(bouncerShowing);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java
similarity index 94%
rename from packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
rename to packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java
index a5716f2..4d60121 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java
@@ -36,6 +36,7 @@
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.keyguard.R;
import com.android.systemui.Dumpable;
import com.android.systemui.keyguard.KeyguardViewMediator;
@@ -49,9 +50,9 @@
/**
* Encapsulates all logic for the status bar window state management.
*/
-public class StatusBarWindowManager implements RemoteInputController.Callback, Dumpable {
+public class StatusBarWindowController implements RemoteInputController.Callback, Dumpable {
- private static final String TAG = "StatusBarWindowManager";
+ private static final String TAG = "StatusBarWindowController";
private final Context mContext;
private final WindowManager mWindowManager;
@@ -68,12 +69,19 @@
private final State mCurrentState = new State();
private OtherwisedCollapsedListener mListener;
- public StatusBarWindowManager(Context context) {
+ public StatusBarWindowController(Context context) {
+ this(context, context.getSystemService(WindowManager.class), ActivityManager.getService(),
+ DozeParameters.getInstance(context));
+ }
+
+ @VisibleForTesting
+ StatusBarWindowController(Context context, WindowManager windowManager,
+ IActivityManager activityManager, DozeParameters dozeParameters) {
mContext = context;
- mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
- mActivityManager = ActivityManager.getService();
+ mWindowManager = windowManager;
+ mActivityManager = activityManager;
mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation();
- mDozeParameters = DozeParameters.getInstance(mContext);
+ mDozeParameters = dozeParameters;
mScreenBrightnessDoze = mDozeParameters.getScreenBrightnessDoze();
}
@@ -149,6 +157,12 @@
} else {
mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
}
+
+ if (state.dozing) {
+ mLpChanged.privateFlags |= LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+ } else {
+ mLpChanged.privateFlags &= ~LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+ }
}
private void adjustScreenOrientation(State state) {
@@ -433,7 +447,7 @@
}
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- pw.println("StatusBarWindowManager state:");
+ pw.println("StatusBarWindowController state:");
pw.println(mCurrentState);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java
index 2bf62bb..533bd86 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java
@@ -30,6 +30,7 @@
import android.util.ArraySet;
import android.util.Log;
+import com.android.internal.annotations.GuardedBy;
import com.android.systemui.R;
import java.io.FileDescriptor;
@@ -41,12 +42,16 @@
import static android.media.MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY;
+import androidx.annotation.VisibleForTesting;
+
+
/** Platform implementation of the cast controller. **/
public class CastControllerImpl implements CastController {
private static final String TAG = "CastController";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private final Context mContext;
+ @GuardedBy("mCallbacks")
private final ArrayList<Callback> mCallbacks = new ArrayList<Callback>();
private final MediaRouter mMediaRouter;
private final ArrayMap<String, RouteInfo> mRoutes = new ArrayMap<>();
@@ -72,7 +77,7 @@
pw.println("CastController state:");
pw.print(" mDiscovering="); pw.println(mDiscovering);
pw.print(" mCallbackRegistered="); pw.println(mCallbackRegistered);
- pw.print(" mCallbacks.size="); pw.println(mCallbacks.size());
+ pw.print(" mCallbacks.size="); synchronized (mCallbacks) {pw.println(mCallbacks.size());}
pw.print(" mRoutes.size="); pw.println(mRoutes.size());
for (int i = 0; i < mRoutes.size(); i++) {
final RouteInfo route = mRoutes.valueAt(i);
@@ -83,7 +88,9 @@
@Override
public void addCallback(Callback callback) {
- mCallbacks.add(callback);
+ synchronized (mCallbacks) {
+ mCallbacks.add(callback);
+ }
fireOnCastDevicesChanged(callback);
synchronized (mDiscoveringLock) {
handleDiscoveryChangeLocked();
@@ -92,7 +99,9 @@
@Override
public void removeCallback(Callback callback) {
- mCallbacks.remove(callback);
+ synchronized (mCallbacks) {
+ mCallbacks.remove(callback);
+ }
synchronized (mDiscoveringLock) {
handleDiscoveryChangeLocked();
}
@@ -117,10 +126,16 @@
mMediaRouter.addCallback(ROUTE_TYPE_REMOTE_DISPLAY, mMediaCallback,
MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
mCallbackRegistered = true;
- } else if (mCallbacks.size() != 0) {
- mMediaRouter.addCallback(ROUTE_TYPE_REMOTE_DISPLAY, mMediaCallback,
- MediaRouter.CALLBACK_FLAG_PASSIVE_DISCOVERY);
- mCallbackRegistered = true;
+ } else {
+ boolean hasCallbacks = false;
+ synchronized (mCallbacks) {
+ hasCallbacks = mCallbacks.isEmpty();
+ }
+ if (!hasCallbacks) {
+ mMediaRouter.addCallback(ROUTE_TYPE_REMOTE_DISPLAY, mMediaCallback,
+ MediaRouter.CALLBACK_FLAG_PASSIVE_DISCOVERY);
+ mCallbackRegistered = true;
+ }
}
}
@@ -248,12 +263,17 @@
}
}
- private void fireOnCastDevicesChanged() {
- for (Callback callback : mCallbacks) {
- fireOnCastDevicesChanged(callback);
+ @VisibleForTesting
+ void fireOnCastDevicesChanged() {
+ synchronized (mCallbacks) {
+ for (Callback callback : mCallbacks) {
+ fireOnCastDevicesChanged(callback);
+ }
+
}
}
+
private void fireOnCastDevicesChanged(Callback callback) {
callback.onCastDevicesChanged();
}
diff --git a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
index 6792bc0..7f83ed6 100644
--- a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
+++ b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
@@ -19,6 +19,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
+import android.content.pm.PackageManager;
import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
import android.support.test.filters.SmallTest;
@@ -115,6 +116,13 @@
filter.add(new ExternalClassNameFilter());
filter.add(s -> s.startsWith("com.android.systemui")
|| s.startsWith("com.android.keyguard"));
+
+
+ if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+ // If it's not automotive target, exclude automotive classes from the test.
+ excludeAutomotiveClasses(filter);
+ }
+
try {
return scanner.getClassPathEntries(filter);
} catch (IOException e) {
@@ -123,6 +131,13 @@
return Collections.emptyList();
}
+ private void excludeAutomotiveClasses(ChainedClassNameFilter filter) {
+ // Modifies the passed in filter.
+ filter.add(s -> !s.startsWith("com.android.systemui.statusbar.car."));
+ filter.add(s -> !s.startsWith("com.android.systemui.qs.car."));
+ filter.add(s -> !s.startsWith("com.android.systemui.car."));
+ }
+
private String getClsStr() {
return TextUtils.join(",", Arrays.asList(BASE_CLS_WHITELIST)
.stream().map(cls -> cls.getSimpleName()).toArray());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
index 644c0b3..cc96917 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
@@ -21,6 +21,7 @@
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
@@ -226,4 +227,17 @@
verify(padding).destroy();
}
+ @Test
+ public void testUpdateRoundedCorners() {
+ mContext.getOrCreateTestableResources().addOverride(
+ com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, false);
+ mContext.getOrCreateTestableResources().addOverride(dimen.rounded_corner_radius, 20);
+
+ mScreenDecorations.start();
+ assertEquals(mScreenDecorations.mRoundedDefault, 20);
+
+ mContext.getOrCreateTestableResources().addOverride(dimen.rounded_corner_radius, 5);
+ mScreenDecorations.onConfigurationChanged(null);
+ assertEquals(mScreenDecorations.mRoundedDefault, 5);
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
index 9121473..8129b01 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
@@ -33,7 +33,7 @@
import com.android.systemui.statusbar.notification.row.NotificationInfo;
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
import com.android.systemui.statusbar.phone.NotificationGroupManager;
-import com.android.systemui.statusbar.phone.StatusBarWindowManager;
+import com.android.systemui.statusbar.phone.StatusBarWindowController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import org.junit.Before;
@@ -96,6 +96,6 @@
viewHierarchyManager.setUpWithPresenter(mPresenter, entryManager, mListContainer);
notificationListener.setUpWithPresenter(mPresenter, entryManager);
- assertFalse(mDependency.hasInstantiatedDependency(StatusBarWindowManager.class));
+ assertFalse(mDependency.hasInstantiatedDependency(StatusBarWindowController.class));
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
index e56ccef..676cb61 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
@@ -286,6 +286,7 @@
any(NotificationInfo.OnSettingsClickListener.class),
any(NotificationInfo.OnAppSettingsClickListener.class),
eq(false),
+ eq(false),
eq(true) /* isForBlockingHelper */,
eq(true) /* isUserSentimentNegative */);
}
@@ -312,6 +313,35 @@
any(NotificationInfo.OnSettingsClickListener.class),
any(NotificationInfo.OnAppSettingsClickListener.class),
eq(false),
+ eq(false),
+ eq(false) /* isForBlockingHelper */,
+ eq(true) /* isUserSentimentNegative */);
+ }
+
+ @Test
+ public void testInitializeNotificationInfoView_PassesAlongProvisionedState() throws Exception {
+ NotificationInfo notificationInfoView = mock(NotificationInfo.class);
+ ExpandableNotificationRow row = spy(mHelper.createRow());
+ row.setBlockingHelperShowing(false);
+ row.getEntry().userSentiment = USER_SENTIMENT_NEGATIVE;
+ when(row.getIsNonblockable()).thenReturn(false);
+ StatusBarNotification statusBarNotification = row.getStatusBarNotification();
+ when(mPresenter.isDeviceProvisioned()).thenReturn(true);
+
+ mGutsManager.initializeNotificationInfo(row, notificationInfoView);
+
+ verify(notificationInfoView).bindNotification(
+ any(PackageManager.class),
+ any(INotificationManager.class),
+ eq(statusBarNotification.getPackageName()),
+ any(NotificationChannel.class),
+ anyInt(),
+ eq(statusBarNotification),
+ any(NotificationInfo.CheckSaveListener.class),
+ any(NotificationInfo.OnSettingsClickListener.class),
+ any(NotificationInfo.OnAppSettingsClickListener.class),
+ eq(true),
+ eq(false),
eq(false) /* isForBlockingHelper */,
eq(true) /* isUserSentimentNegative */);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java
index 5ce53cf..c236fbe 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java
@@ -167,7 +167,7 @@
public void testBindNotification_SetsTextApplicationName() throws Exception {
when(mMockPackageManager.getApplicationLabel(any())).thenReturn("App Name");
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
final TextView textView = mNotificationInfo.findViewById(R.id.pkgname);
assertTrue(textView.getText().toString().contains("App Name"));
assertEquals(VISIBLE, mNotificationInfo.findViewById(R.id.header).getVisibility());
@@ -179,7 +179,7 @@
when(mMockPackageManager.getApplicationIcon(any(ApplicationInfo.class)))
.thenReturn(iconDrawable);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
final ImageView iconView = mNotificationInfo.findViewById(R.id.pkgicon);
assertEquals(iconDrawable, iconView.getDrawable());
}
@@ -187,7 +187,7 @@
@Test
public void testBindNotification_GroupNameHiddenIfNoGroup() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
final TextView groupNameView = mNotificationInfo.findViewById(R.id.group_name);
assertEquals(GONE, groupNameView.getVisibility());
final TextView groupDividerView = mNotificationInfo.findViewById(R.id.pkg_group_divider);
@@ -203,7 +203,7 @@
eq("test_group_id"), eq(TEST_PACKAGE_NAME), eq(TEST_UID)))
.thenReturn(notificationChannelGroup);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
final TextView groupNameView = mNotificationInfo.findViewById(R.id.group_name);
assertEquals(View.VISIBLE, groupNameView.getVisibility());
assertEquals("Test Group Name", groupNameView.getText());
@@ -214,7 +214,7 @@
@Test
public void testBindNotification_SetsTextChannelName() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
final TextView textView = mNotificationInfo.findViewById(R.id.channel_name);
assertEquals(TEST_CHANNEL_NAME, textView.getText());
}
@@ -222,7 +222,8 @@
@Test
public void testBindNotification_DefaultChannelDoesNotUseChannelName() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mDefaultNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mDefaultNotificationChannel, 1, mSbn, null, null, null, true,
+ false);
final TextView textView = mNotificationInfo.findViewById(R.id.channel_name);
assertEquals(GONE, textView.getVisibility());
}
@@ -234,7 +235,8 @@
when(mMockINotificationManager.getNumNotificationChannelsForPackage(
eq(TEST_PACKAGE_NAME), eq(TEST_UID), anyBoolean())).thenReturn(10);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mDefaultNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mDefaultNotificationChannel, 1, mSbn, null, null, null, true,
+ false);
final TextView textView = mNotificationInfo.findViewById(R.id.channel_name);
assertEquals(VISIBLE, textView.getVisibility());
}
@@ -242,7 +244,7 @@
@Test
public void testBindNotification_UnblockablePackageUsesChannelName() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true);
final TextView textView = mNotificationInfo.findViewById(R.id.channel_name);
assertEquals(VISIBLE, textView.getVisibility());
}
@@ -250,7 +252,7 @@
@Test
public void testBindNotification_BlockButton() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
final View block = mNotificationInfo.findViewById(R.id.block);
final View minimize = mNotificationInfo.findViewById(R.id.minimize);
assertEquals(VISIBLE, block.getVisibility());
@@ -261,7 +263,7 @@
public void testBindNotification_MinButton() throws Exception {
mSbn.getNotification().flags = Notification.FLAG_FOREGROUND_SERVICE;
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
final View block = mNotificationInfo.findViewById(R.id.block);
final View minimize = mNotificationInfo.findViewById(R.id.minimize);
assertEquals(GONE, block.getVisibility());
@@ -276,7 +278,7 @@
(View v, NotificationChannel c, int appUid) -> {
assertEquals(mNotificationChannel, c);
latch.countDown();
- }, null, false);
+ }, null, true, false);
final View settingsButton = mNotificationInfo.findViewById(R.id.info);
settingsButton.performClick();
@@ -287,7 +289,19 @@
@Test
public void testBindNotification_SettingsButtonInvisibleWhenNoClickListener() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
+ final View settingsButton = mNotificationInfo.findViewById(R.id.info);
+ assertTrue(settingsButton.getVisibility() != View.VISIBLE);
+ }
+
+ @Test
+ public void testBindNotification_SettingsButtonInvisibleWhenDeviceUnprovisioned()
+ throws Exception {
+ mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null,
+ (View v, NotificationChannel c, int appUid) -> {
+ assertEquals(mNotificationChannel, c);
+ }, null, false, false);
final View settingsButton = mNotificationInfo.findViewById(R.id.info);
assertTrue(settingsButton.getVisibility() != View.VISIBLE);
}
@@ -295,11 +309,11 @@
@Test
public void testBindNotification_SettingsButtonReappearsAfterSecondBind() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null,
(View v, NotificationChannel c, int appUid) -> {
- }, null, false);
+ }, null, true, false);
final View settingsButton = mNotificationInfo.findViewById(R.id.info);
assertEquals(View.VISIBLE, settingsButton.getVisibility());
}
@@ -307,7 +321,7 @@
@Test
public void testLogBlockingHelperCounter_doesntLogForNormalGutsView() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.logBlockingHelperCounter("HowCanNotifsBeRealIfAppsArent");
verify(mMetricsLogger, times(0)).count(anyString(), anyInt());
}
@@ -316,7 +330,7 @@
public void testLogBlockingHelperCounter_logsForBlockingHelper() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false, true,
- true);
+ true, true);
mNotificationInfo.logBlockingHelperCounter("HowCanNotifsBeRealIfAppsArent");
verify(mMetricsLogger, times(1)).count(anyString(), anyInt());
}
@@ -329,7 +343,7 @@
(View v, NotificationChannel c, int appUid) -> {
assertEquals(null, c);
latch.countDown();
- }, null, true);
+ }, null, true, true);
mNotificationInfo.findViewById(R.id.info).performClick();
// Verify that listener was triggered.
@@ -342,7 +356,7 @@
throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, mSbn, null, null,
- null, true);
+ null, true, true);
final TextView channelNameView =
mNotificationInfo.findViewById(R.id.channel_name);
assertEquals(GONE, channelNameView.getVisibility());
@@ -353,7 +367,7 @@
public void testStopInvisibleIfBundleFromDifferentChannels() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, mSbn, null, null,
- null, true);
+ null, true, true);
final TextView blockView = mNotificationInfo.findViewById(R.id.block);
assertEquals(GONE, blockView.getVisibility());
}
@@ -362,7 +376,7 @@
public void testbindNotification_BlockingHelper() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false, false,
- true);
+ true, true);
final TextView view = mNotificationInfo.findViewById(R.id.block_prompt);
assertEquals(View.VISIBLE, view.getVisibility());
assertEquals(mContext.getString(R.string.inline_blocking_helper), view.getText());
@@ -371,7 +385,7 @@
@Test
public void testbindNotification_UnblockableTextVisibleWhenAppUnblockable() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true);
final TextView view = mNotificationInfo.findViewById(R.id.block_prompt);
assertEquals(View.VISIBLE, view.getVisibility());
assertEquals(mContext.getString(R.string.notification_unblockable_desc),
@@ -381,7 +395,7 @@
@Test
public void testBindNotification_DoesNotUpdateNotificationChannel() throws Exception {
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mTestableLooper.processAllMessages();
verify(mMockINotificationManager, never()).updateNotificationChannelForPackage(
anyString(), eq(TEST_UID), any());
@@ -391,7 +405,7 @@
public void testDoesNotUpdateNotificationChannelAfterImportanceChanged() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.findViewById(R.id.block).performClick();
mTestableLooper.processAllMessages();
@@ -404,7 +418,7 @@
throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.findViewById(R.id.minimize).performClick();
mTestableLooper.processAllMessages();
@@ -417,7 +431,7 @@
throws Exception {
int originalImportance = mNotificationChannel.getImportance();
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.handleCloseControls(true, false);
mTestableLooper.processAllMessages();
@@ -431,7 +445,7 @@
throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_UNSPECIFIED);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.handleCloseControls(true, false);
@@ -449,7 +463,7 @@
TEST_PACKAGE_NAME, mNotificationChannel /* notificationChannel */,
10 /* numUniqueChannelsInRow */, mSbn, null /* checkSaveListener */,
null /* onSettingsClick */, null /* onAppSettingsClick */ ,
- false /* isNonblockable */);
+ true, false /* isNonblockable */);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
@@ -470,7 +484,7 @@
TEST_PACKAGE_NAME, mNotificationChannel /* notificationChannel */,
10 /* numUniqueChannelsInRow */, mSbn, null /* checkSaveListener */,
null /* onSettingsClick */, null /* onAppSettingsClick */ ,
- false /* isNonblockable */);
+ true, false /* isNonblockable */);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
@@ -489,6 +503,7 @@
TEST_PACKAGE_NAME, mNotificationChannel /* notificationChannel */,
10 /* numUniqueChannelsInRow */, mSbn, null /* checkSaveListener */,
null /* onSettingsClick */, null /* onAppSettingsClick */ ,
+ true /* provisioned */,
false /* isNonblockable */, true /* isForBlockingHelper */,
true /* isUserSentimentNegative */);
@@ -516,7 +531,7 @@
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
TEST_PACKAGE_NAME, mNotificationChannel /* notificationChannel */,
10 /* numUniqueChannelsInRow */, mSbn, listener /* checkSaveListener */,
- null /* onSettingsClick */, null /* onAppSettingsClick */ ,
+ null /* onSettingsClick */, null /* onAppSettingsClick */ , true /* provisioned */,
false /* isNonblockable */, true /* isForBlockingHelper */,
true /* isUserSentimentNegative */);
@@ -546,7 +561,7 @@
10 /* numUniqueChannelsInRow */, mSbn, listener /* checkSaveListener */,
null /* onSettingsClick */, null /* onAppSettingsClick */ ,
false /* isNonblockable */, true /* isForBlockingHelper */,
- true /* isUserSentimentNegative */);
+ true, true /* isUserSentimentNegative */);
mNotificationInfo.handleCloseControls(true /* save */, false /* force */);
@@ -562,7 +577,8 @@
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
TEST_PACKAGE_NAME, mNotificationChannel /* notificationChannel */,
10 /* numUniqueChannelsInRow */, mSbn, listener /* checkSaveListener */,
- null /* onSettingsClick */, null /* onAppSettingsClick */ ,
+ null /* onSettingsClick */, null /* onAppSettingsClick */,
+ true /* provisioned */,
false /* isNonblockable */, true /* isForBlockingHelper */,
true /* isUserSentimentNegative */);
@@ -588,6 +604,7 @@
null /* onAppSettingsClick */,
false /* isNonblockable */,
true /* isForBlockingHelper */,
+ true,
false /* isUserSentimentNegative */);
NotificationGuts guts = mock(NotificationGuts.class);
doCallRealMethod().when(guts).closeControls(anyInt(), anyInt(), anyBoolean(), anyBoolean());
@@ -602,7 +619,7 @@
public void testNonBlockableAppDoesNotBecomeBlocked() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
@@ -615,7 +632,7 @@
public void testBlockChangedCallsUpdateNotificationChannel() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
@@ -644,6 +661,7 @@
null /* checkSaveListener */,
null /* onSettingsClick */,
null /* onAppSettingsClick */,
+ true /*provisioned */,
false /* isNonblockable */,
true /* isForBlockingHelper */,
true /* isUserSentimentNegative */);
@@ -667,7 +685,7 @@
public void testNonBlockableAppDoesNotBecomeMin() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true);
mNotificationInfo.findViewById(R.id.minimize).performClick();
waitForUndoButton();
@@ -681,7 +699,7 @@
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mSbn.getNotification().flags = Notification.FLAG_FOREGROUND_SERVICE;
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.findViewById(R.id.minimize).performClick();
waitForUndoButton();
@@ -701,7 +719,7 @@
public void testKeepUpdatesNotificationChannel() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.handleCloseControls(true, false);
@@ -718,7 +736,7 @@
public void testBlockUndoDoesNotBlockNotificationChannel() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
@@ -739,7 +757,7 @@
public void testMinUndoDoesNotMinNotificationChannel() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false);
mNotificationInfo.findViewById(R.id.minimize).performClick();
waitForUndoButton();
@@ -760,7 +778,7 @@
public void testCloseControlsDoesNotUpdateiMinIfSaveIsFalse() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true);
mNotificationInfo.findViewById(R.id.minimize).performClick();
waitForUndoButton();
@@ -775,7 +793,7 @@
public void testCloseControlsDoesNotUpdateIfSaveIsFalse() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
@@ -792,7 +810,7 @@
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn,
(Runnable saveImportance, StatusBarNotification sbn) -> {
- }, null, null, true);
+ }, null, null, true, true);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
@@ -810,7 +828,7 @@
TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn,
(Runnable saveImportance, StatusBarNotification sbn) -> {
saveImportance.run();
- }, null, null, false);
+ }, null, null, true, false);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
@@ -842,7 +860,7 @@
TEST_PACKAGE_NAME, mNotificationChannel, 1, sbn, null, null,
(View v, Intent intent) -> {
latch.countDown();
- }, false);
+ }, true, false);
final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings);
assertEquals(View.VISIBLE, settingsLink.getVisibility());
settingsLink.performClick();
@@ -870,7 +888,7 @@
TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, sbn, null, null,
(View v, Intent intent) -> {
latch.countDown();
- }, false);
+ }, true, false);
final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings);
assertEquals(View.VISIBLE, settingsLink.getVisibility());
settingsLink.performClick();
@@ -889,7 +907,7 @@
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, sbn, null, null,
- null, false);
+ null, true, false);
final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings);
assertEquals(GONE, settingsLink.getVisibility());
}
@@ -909,7 +927,7 @@
0, null, 0, 0, n, UserHandle.CURRENT, null, 0);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, sbn, null, null, null, false);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, sbn, null, null, null, true, false);
final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings);
assertEquals(GONE, settingsLink.getVisibility());
}
@@ -932,7 +950,7 @@
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
TEST_PACKAGE_NAME, mNotificationChannel, 1, sbn, null, null, null, false, true,
- true);
+ true, true);
final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings);
assertEquals(GONE, settingsLink.getVisibility());
}
@@ -948,7 +966,7 @@
mSbn.getNotification().flags = Notification.FLAG_FOREGROUND_SERVICE;
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true);
mNotificationInfo.findViewById(R.id.minimize).performClick();
waitForUndoButton();
@@ -960,7 +978,7 @@
public void testUndoText_block() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
@@ -972,7 +990,7 @@
public void testNoHeaderOnConfirmation() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
@@ -983,7 +1001,7 @@
public void testHeaderOnUndo() throws Exception {
mNotificationChannel.setImportance(IMPORTANCE_LOW);
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
- TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true);
+ TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true);
mNotificationInfo.findViewById(R.id.block).performClick();
waitForUndoButton();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
index 6933328..be4560b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
@@ -68,7 +68,7 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mDependency.injectMockDependency(StatusBarWindowManager.class);
+ mDependency.injectMockDependency(StatusBarWindowController.class);
mStatusBarKeyguardViewManager = new TestableStatusBarKeyguardViewManager(getContext(),
mViewMediatorCallback, mLockPatternUtils);
mStatusBarKeyguardViewManager.registerStatusBar(mStatusBar, mContainer,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
index e39238d..a90346b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
@@ -204,7 +204,7 @@
mEntryManager, mScrimController, mBiometricUnlockController,
mock(ActivityLaunchAnimator.class), mKeyguardViewMediator,
mRemoteInputManager, mock(NotificationGroupManager.class),
- mock(FalsingManager.class), mock(StatusBarWindowManager.class),
+ mock(FalsingManager.class), mock(StatusBarWindowController.class),
mock(NotificationIconAreaController.class), mock(DozeScrimController.class),
mock(NotificationShelf.class), mLockscreenUserManager,
mock(CommandQueue.class));
@@ -716,7 +716,7 @@
NotificationRemoteInputManager notificationRemoteInputManager,
NotificationGroupManager notificationGroupManager,
FalsingManager falsingManager,
- StatusBarWindowManager statusBarWindowManager,
+ StatusBarWindowController statusBarWindowController,
NotificationIconAreaController notificationIconAreaController,
DozeScrimController dozeScrimController,
NotificationShelf notificationShelf,
@@ -744,7 +744,7 @@
mRemoteInputManager = notificationRemoteInputManager;
mGroupManager = notificationGroupManager;
mFalsingManager = falsingManager;
- mStatusBarWindowManager = statusBarWindowManager;
+ mStatusBarWindowController = statusBarWindowController;
mNotificationIconAreaController = notificationIconAreaController;
mDozeScrimController = dozeScrimController;
mNotificationShelf = notificationShelf;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java
new file mode 100644
index 0000000..f8223f6
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.IActivityManager;
+import android.support.test.filters.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper.RunWithLooper;
+import android.view.View;
+import android.view.WindowManager;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper
+@SmallTest
+public class StatusBarWindowControllerTest extends SysuiTestCase {
+
+ @Mock
+ private WindowManager mWindowManager;
+ @Mock
+ private DozeParameters mDozeParameters;
+ @Mock
+ private View mStatusBarView;
+ @Mock
+ private IActivityManager mActivityManager;
+
+ private StatusBarWindowController mStatusBarWindowController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ when(mDozeParameters.getAlwaysOn()).thenReturn(true);
+
+ mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager,
+ mActivityManager, mDozeParameters);
+ mStatusBarWindowController.add(mStatusBarView, 100 /* height */);
+ }
+
+ @Test
+ public void testSetDozing_hidesSystemOverlays() {
+ mStatusBarWindowController.setDozing(true);
+ ArgumentCaptor<WindowManager.LayoutParams> captor =
+ ArgumentCaptor.forClass(WindowManager.LayoutParams.class);
+ verify(mWindowManager).updateViewLayout(any(), captor.capture());
+ int flag = captor.getValue().privateFlags
+ & WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+ assertThat(flag).isNotEqualTo(0);
+
+ reset(mWindowManager);
+ mStatusBarWindowController.setDozing(false);
+ verify(mWindowManager).updateViewLayout(any(), captor.capture());
+ flag = captor.getValue().privateFlags
+ & WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+ assertThat(flag).isEqualTo(0);
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java
new file mode 100644
index 0000000..1ee7094
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java
@@ -0,0 +1,126 @@
+package com.android.systemui.statusbar.policy;
+
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.junit.Assert.fail;
+
+import android.media.MediaRouter;
+import android.media.projection.MediaProjectionInfo;
+import android.media.projection.MediaProjectionManager;
+import android.support.test.filters.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.policy.CastController.Callback;
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.junit.Test;
+
+import java.util.ConcurrentModificationException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+public class CastControllerImplTest extends SysuiTestCase {
+
+ @Mock
+ MediaRouter mMediaRouter;
+ @Mock
+ MediaProjectionManager mMediaProjectionManager;
+ @Mock
+ MediaProjectionInfo mProjection;
+
+ private CastControllerImpl mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext.addMockSystemService(MediaRouter.class, mMediaRouter);
+ mContext.addMockSystemService(MediaProjectionManager.class, mMediaProjectionManager);
+ when(mMediaProjectionManager.getActiveProjectionInfo()).thenReturn(mProjection);
+
+ mController = new CastControllerImpl(mContext);
+ }
+
+ @Test
+ public void testAddCallback() {
+ Callback mockCallback = mock(Callback.class);
+
+ mController.addCallback(mockCallback);
+ verify(mockCallback, times(1)).onCastDevicesChanged();
+ }
+
+ @Test
+ public void testRemoveCallback() {
+ Callback mockCallback = mock(Callback.class);
+
+ mController.addCallback(mockCallback);
+ verify(mockCallback, times(1)).onCastDevicesChanged();
+
+ mController.removeCallback(mockCallback);
+ verify(mockCallback, times(1)).onCastDevicesChanged();
+ }
+
+ @Test
+ public void testRemoveCallbackFromEmptyList() {
+ Callback mockCallback = mock(Callback.class);
+
+ mController.removeCallback(mockCallback);
+ verify(mockCallback, never()).onCastDevicesChanged();
+ }
+
+ @Test
+ public void testAddCallbackRemoveCallback_concurrently() throws InterruptedException {
+ int callbackCount = 20;
+ int numThreads = 2 * callbackCount;
+ CountDownLatch startThreadsLatch = new CountDownLatch(1);
+ CountDownLatch threadsDone = new CountDownLatch(numThreads);
+ Callback[] callbackList = new Callback[callbackCount];
+ mController.setDiscovering(true);
+ AtomicBoolean error = new AtomicBoolean(false);
+ for (int cbIndex = 0; cbIndex < callbackCount; cbIndex++) {
+ callbackList[cbIndex] = mock(Callback.class);
+ }
+ for (int i = 0; i < numThreads; i++) {
+ final Callback mCallback = callbackList[i / 2];
+ final boolean shouldAdd = (i % 2 == 0);
+ new Thread() {
+ public void run() {
+ try {
+ startThreadsLatch.await(10, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ try {
+ if (shouldAdd) {
+ mController.addCallback(mCallback);
+ } else {
+ mController.removeCallback(mCallback);
+ }
+ mController.fireOnCastDevicesChanged();
+ } catch (ConcurrentModificationException exc) {
+ error.compareAndSet(false, true);
+ } finally {
+ threadsDone.countDown();
+ }
+ }
+ }.start();
+ }
+ startThreadsLatch.countDown();
+ threadsDone.await(10, TimeUnit.SECONDS);
+ if (error.get()) {
+ fail("Concurrent modification exception");
+ }
+ }
+}
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values/strings.xml
index 754ba72..b08924b 100644
--- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values/strings.xml
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values/strings.xml
@@ -16,7 +16,7 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="display_cutout_emulation_overlay">Corner display cutout</string>
+ <string name="display_cutout_emulation_overlay">Corner cutout</string>
</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values/strings.xml
index 68c2dcb..0a106fa 100644
--- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values/strings.xml
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values/strings.xml
@@ -16,7 +16,7 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="display_cutout_emulation_overlay">Double display cutout</string>
+ <string name="display_cutout_emulation_overlay">Double cutout</string>
</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values/strings.xml
index 4989677..0bf8330 100644
--- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values/strings.xml
+++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values/strings.xml
@@ -18,7 +18,7 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="display_cutout_emulation_overlay">Narrow display cutout</string>
+ <string name="display_cutout_emulation_overlay">Narrow cutout</string>
</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values/strings.xml
index 6dcbbd9..bcc7c97 100644
--- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values/strings.xml
+++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values/strings.xml
@@ -16,7 +16,7 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="display_cutout_emulation_overlay">Tall display cutout</string>
+ <string name="display_cutout_emulation_overlay">Tall cutout</string>
</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values/strings.xml
index f4b9f7e..0fcbdebb 100644
--- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values/strings.xml
+++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values/strings.xml
@@ -16,7 +16,7 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="display_cutout_emulation_overlay">Wide display cutout</string>
+ <string name="display_cutout_emulation_overlay">Wide cutout</string>
</resources>
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index acbb67c..6be9550 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -1567,8 +1567,9 @@
}
final long identity = Binder.clearCallingIdentity();
try {
+ final String settingValue = builder.toString();
Settings.Secure.putStringForUser(mContext.getContentResolver(),
- settingName, builder.toString(), userId);
+ settingName, TextUtils.isEmpty(settingValue) ? null : settingValue, userId);
} finally {
Binder.restoreCallingIdentity(identity);
}
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
index 6f03b76..5771748 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
@@ -438,8 +438,13 @@
Slog.i(TAG, "setLogLevel(): " + level);
mContext.enforceCallingPermission(MANAGE_AUTO_FILL, TAG);
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.AUTOFILL_LOGGING_LEVEL, level);
+ final long token = Binder.clearCallingIdentity();
+ try {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.AUTOFILL_LOGGING_LEVEL, level);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
private void setLogLevelFromSettings() {
@@ -492,8 +497,13 @@
mContext.enforceCallingPermission(MANAGE_AUTO_FILL, TAG);
Slog.i(TAG, "setMaxPartitions(): " + max);
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.AUTOFILL_MAX_PARTITIONS_SIZE, max);
+ final long token = Binder.clearCallingIdentity();
+ try {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.AUTOFILL_MAX_PARTITIONS_SIZE, max);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
private void setMaxPartitionsFromSettings() {
@@ -521,8 +531,13 @@
mContext.enforceCallingPermission(MANAGE_AUTO_FILL, TAG);
Slog.i(TAG, "setMaxVisibleDatasets(): " + max);
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.AUTOFILL_MAX_VISIBLE_DATASETS, max);
+ final long token = Binder.clearCallingIdentity();
+ try {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.AUTOFILL_MAX_VISIBLE_DATASETS, max);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
private void setMaxVisibleDatasetsFromSettings() {
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 0812cb9..9d3d3cb 100644
--- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
@@ -35,6 +35,7 @@
import android.os.RemoteException;
import android.service.autofill.BatchUpdates;
import android.service.autofill.CustomDescription;
+import android.service.autofill.InternalOnClickAction;
import android.service.autofill.InternalTransformation;
import android.service.autofill.InternalValidator;
import android.service.autofill.SaveInfo;
@@ -43,6 +44,7 @@
import android.util.ArraySet;
import android.util.Pair;
import android.util.Slog;
+import android.util.SparseArray;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -82,18 +84,19 @@
}
/**
- * Wrapper that guarantees that only one callback is triggered by ignoring further calls after
+ * Wrapper that guarantees that only one callback action (either {@link #onSave()} or
+ * {@link #onCancel(IntentSender)}) is triggered by ignoring further calls after
* it's destroyed.
*
* <p>It's needed becase {@link #onCancel(IntentSender)} is always called when the Save UI
* dialog is dismissed.
*/
- private class OneTimeListener implements OnSaveListener {
+ private class OneActionThenDestroyListener implements OnSaveListener {
private final OnSaveListener mRealListener;
private boolean mDone;
- OneTimeListener(OnSaveListener realListener) {
+ OneActionThenDestroyListener(OnSaveListener realListener) {
mRealListener = realListener;
}
@@ -131,7 +134,7 @@
private final @NonNull Dialog mDialog;
- private final @NonNull OneTimeListener mListener;
+ private final @NonNull OneActionThenDestroyListener mListener;
private final @NonNull OverlayControl mOverlayControl;
@@ -151,7 +154,7 @@
@NonNull OverlayControl overlayControl, @NonNull OnSaveListener listener,
boolean isUpdate, boolean compatMode) {
mPendingUi= pendingUi;
- mListener = new OneTimeListener(listener);
+ mListener = new OneActionThenDestroyListener(listener);
mOverlayControl = overlayControl;
mServicePackageName = servicePackageName;
mComponentName = componentName;
@@ -337,7 +340,7 @@
template.setApplyTheme(THEME_ID);
final View customSubtitleView = template.apply(context, null, handler);
- // And apply batch updates (if any).
+ // Apply batch updates (if any).
final ArrayList<Pair<InternalValidator, BatchUpdates>> updates =
customDescription.getUpdates();
if (updates != null) {
@@ -376,6 +379,35 @@
}
}
+ // Apply click actions (if any).
+ final SparseArray<InternalOnClickAction> actions = customDescription.getActions();
+ if (actions != null) {
+ final int size = actions.size();
+ if (sDebug) Slog.d(TAG, "custom description has " + size + " actions");
+ if (!(customSubtitleView instanceof ViewGroup)) {
+ Slog.w(TAG, "cannot apply actions because custom description root is not a "
+ + "ViewGroup: " + customSubtitleView);
+ } else {
+ final ViewGroup rootView = (ViewGroup) customSubtitleView;
+ for (int i = 0; i < size; i++) {
+ final int id = actions.keyAt(i);
+ final InternalOnClickAction action = actions.valueAt(i);
+ final View child = rootView.findViewById(id);
+ if (child == null) {
+ Slog.w(TAG, "Ignoring action " + action + " for view " + id
+ + " because it's not on " + rootView);
+ continue;
+ }
+ child.setOnClickListener((v) -> {
+ if (sVerbose) {
+ Slog.v(TAG, "Applying " + action + " after " + v + " was clicked");
+ }
+ action.onClick(rootView);
+ });
+ }
+ }
+ }
+
// Finally, add the custom description to the save UI.
final ViewGroup subtitleContainer =
saveUiView.findViewById(R.id.autofill_save_custom_subtitle);
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index f81541e..a07939e 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -1171,6 +1171,26 @@
}
private boolean bindService() {
+ int state = BluetoothAdapter.STATE_OFF;
+ try {
+ mBluetoothLock.readLock().lock();
+ if (mBluetooth != null) {
+ state = mBluetooth.getState();
+ }
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Unable to call getState", e);
+ return false;
+ } finally {
+ mBluetoothLock.readLock().unlock();
+ }
+
+ if (!mEnable || state != BluetoothAdapter.STATE_ON) {
+ if (DBG) {
+ Slog.d(TAG, "Unable to bindService while Bluetooth is disabled");
+ }
+ return false;
+ }
+
if (mIntent != null && mService == null && doBind(mIntent, this, 0,
UserHandle.CURRENT_OR_SELF)) {
Message msg = mHandler.obtainMessage(MESSAGE_BIND_PROFILE_SERVICE);
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 784dfb4..02a62ff 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -1714,10 +1714,9 @@
}
@Override
- public void addClient(IInputMethodClient client,
- IInputContext inputContext, int uid, int pid) {
- if (!calledFromValidUser()) {
- return;
+ public void addClient(IInputMethodClient client, IInputContext inputContext, int uid, int pid) {
+ if (Binder.getCallingUid() != Process.SYSTEM_UID) {
+ throw new SecurityException("Only system process can call this method.");
}
synchronized (mMethodMap) {
mClients.put(client.asBinder(), new ClientState(client,
@@ -1727,8 +1726,8 @@
@Override
public void removeClient(IInputMethodClient client) {
- if (!calledFromValidUser()) {
- return;
+ if (Binder.getCallingUid() != Process.SYSTEM_UID) {
+ throw new SecurityException("Only system process can call this method.");
}
synchronized (mMethodMap) {
ClientState cs = mClients.remove(client.asBinder());
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index ad9fa40..566ce4f 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -36,6 +36,7 @@
import android.telephony.CellLocation;
import android.telephony.DisconnectCause;
import android.telephony.LocationAccessPolicy;
+import android.telephony.PhoneCapability;
import android.telephony.PhoneStateListener;
import android.telephony.PhysicalChannelConfig;
import android.telephony.PreciseCallState;
@@ -47,7 +48,6 @@
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.VoLteServiceState;
-import android.text.TextUtils;
import android.util.LocalLog;
import com.android.internal.app.IBatteryStats;
@@ -200,6 +200,8 @@
private boolean mCarrierNetworkChangeState = false;
+ private PhoneCapability mPhoneCapability = null;
+
private final LocalLog mLocalLog = new LocalLog(100);
private PreciseDataConnectionState mPreciseDataConnectionState =
@@ -658,6 +660,13 @@
remove(r.binder);
}
}
+ if ((events & PhoneStateListener.LISTEN_PHONE_CAPABILITY_CHANGE) != 0) {
+ try {
+ r.callback.onPhoneCapabilityChanged(mPhoneCapability);
+ } catch (RemoteException ex) {
+ remove(r.binder);
+ }
+ }
}
}
} else {
@@ -1453,6 +1462,33 @@
}
}
+ public void notifyPhoneCapabilityChanged(PhoneCapability capability) {
+ if (!checkNotifyPermission("notifyPhoneCapabilityChanged()")) {
+ return;
+ }
+
+ if (VDBG) {
+ log("notifyPhoneCapabilityChanged: capability=" + capability);
+ }
+
+ synchronized (mRecords) {
+ mPhoneCapability = capability;
+
+ for (Record r : mRecords) {
+ if (r.matchPhoneStateListenerEvent(
+ PhoneStateListener.LISTEN_PHONE_CAPABILITY_CHANGE)) {
+ try {
+ r.callback.onPhoneCapabilityChanged(capability);
+ } catch (RemoteException ex) {
+ mRemoveList.add(r.binder);
+ }
+ }
+ }
+ handleRemoveListLocked();
+ }
+ }
+
+
@Override
public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
@@ -1488,6 +1524,7 @@
pw.println("mForegroundCallState=" + mForegroundCallState);
pw.println("mBackgroundCallState=" + mBackgroundCallState);
pw.println("mVoLteServiceState=" + mVoLteServiceState);
+ pw.println("mPhoneCapability=" + mPhoneCapability);
pw.decreaseIndent();
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
index 081d6f9..9de6875 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -16,6 +16,14 @@
package com.android.server.am;
+import static android.app.ActivityTaskManager.RESIZE_MODE_SYSTEM;
+import static android.app.ActivityTaskManager.RESIZE_MODE_USER;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
+import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+import static android.view.Display.INVALID_DISPLAY;
+
+import static com.android.server.am.TaskRecord.INVALID_TASK_ID;
+
import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.ActivityTaskManager;
@@ -102,15 +110,6 @@
import javax.microedition.khronos.egl.EGLDisplay;
import javax.microedition.khronos.egl.EGLSurface;
-import static android.app.ActivityTaskManager.RESIZE_MODE_SYSTEM;
-import static android.app.ActivityTaskManager.RESIZE_MODE_USER;
-import static android.app.ActivityTaskManager.INVALID_STACK_ID;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-import static android.view.Display.INVALID_DISPLAY;
-
-import static com.android.server.am.TaskRecord.INVALID_TASK_ID;
-
final class ActivityManagerShellCommand extends ShellCommand {
public static final String NO_CLASS_ERROR_CODE = "Error type 3";
private static final String SHELL_PACKAGE_NAME = "com.android.shell";
@@ -2850,6 +2849,7 @@
pw.println(" --checkin: output checkin format, resetting data.");
pw.println(" --C: output checkin format, not resetting data.");
pw.println(" --proto: output dump in protocol buffer format.");
+ pw.println(" --autofill: dump just the autofill-related state of an activity");
} else {
pw.println("Activity manager (activity) commands:");
pw.println(" help");
diff --git a/services/core/java/com/android/server/biometrics/common/AuthenticationClient.java b/services/core/java/com/android/server/biometrics/common/AuthenticationClient.java
index 10a1b90..a9cf963 100644
--- a/services/core/java/com/android/server/biometrics/common/AuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/common/AuthenticationClient.java
@@ -21,10 +21,11 @@
import android.hardware.biometrics.BiometricConstants;
import android.hardware.biometrics.BiometricPrompt;
import android.hardware.biometrics.IBiometricPromptReceiver;
-import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import android.os.Handler;
import android.os.IBinder;
+import android.os.Looper;
import android.os.RemoteException;
import android.util.Slog;
@@ -35,6 +36,7 @@
*/
public abstract class AuthenticationClient extends ClientMonitor {
private long mOpId;
+ private Handler mHandler;
public abstract int handleFailedAttempt();
public abstract void resetFailedAttempts();
@@ -97,6 +99,7 @@
mStatusBarService = statusBarService;
mFingerprintManager = (FingerprintManager) getContext()
.getSystemService(Context.FINGERPRINT_SERVICE);
+ mHandler = new Handler(Looper.getMainLooper());
}
@Override
@@ -217,15 +220,19 @@
BiometricConstants.BIOMETRIC_ERROR_LOCKOUT :
BiometricConstants.BIOMETRIC_ERROR_LOCKOUT_PERMANENT;
- // TODO: if the dialog is showing, this error should be delayed. On a similar
- // note, AuthenticationClient should override onError and delay all other errors
- // as well, if the dialog is showing
- listener.onError(getHalDeviceId(), errorCode, 0 /* vendorCode */);
-
// Send the lockout message to the system dialog
if (mBundle != null) {
mStatusBarService.onBiometricError(
mFingerprintManager.getErrorString(errorCode, 0 /* vendorCode */));
+ mHandler.postDelayed(() -> {
+ try {
+ listener.onError(getHalDeviceId(), errorCode, 0 /* vendorCode */);
+ } catch (RemoteException e) {
+ Slog.w(getLogTag(), "RemoteException while sending error");
+ }
+ }, BiometricPrompt.HIDE_DIALOG_DELAY);
+ } else {
+ listener.onError(getHalDeviceId(), errorCode, 0 /* vendorCode */);
}
} catch (RemoteException e) {
Slog.w(getLogTag(), "Failed to notify lockout:", e);
diff --git a/services/core/java/com/android/server/biometrics/common/BiometricService.java b/services/core/java/com/android/server/biometrics/common/BiometricService.java
index f54baef..5603f2f 100644
--- a/services/core/java/com/android/server/biometrics/common/BiometricService.java
+++ b/services/core/java/com/android/server/biometrics/common/BiometricService.java
@@ -58,7 +58,6 @@
import com.android.internal.logging.MetricsLogger;
import com.android.internal.statusbar.IStatusBarService;
import com.android.server.SystemService;
-import com.android.server.biometrics.face.FaceService;
import com.android.server.biometrics.fingerprint.FingerprintService;
import java.util.ArrayList;
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index e2ad5f5..c80c0f1 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -47,12 +47,14 @@
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
+import android.provider.Settings;
import android.util.Slog;
import android.util.SparseArray;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.uri.UriGrantsManagerInternal;
+import com.android.server.wm.WindowManagerInternal;
import java.io.IOException;
import java.io.RandomAccessFile;
@@ -149,6 +151,7 @@
private final IActivityManager mAm;
private final IUriGrantsManager mUgm;
private final UriGrantsManagerInternal mUgmInternal;
+ private final WindowManagerInternal mWm;
private final IUserManager mUm;
private final PackageManager mPm;
private final AppOpsManager mAppOps;
@@ -167,6 +170,7 @@
mAm = ActivityManager.getService();
mUgm = UriGrantsManager.getService();
mUgmInternal = LocalServices.getService(UriGrantsManagerInternal.class);
+ mWm = LocalServices.getService(WindowManagerInternal.class);
mPm = getContext().getPackageManager();
mUm = (IUserManager) ServiceManager.getService(Context.USER_SERVICE);
mAppOps = (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE);
@@ -623,18 +627,19 @@
if (mAppOps.noteOp(op, callingUid, callingPackage) != AppOpsManager.MODE_ALLOWED) {
return false;
}
- try {
- // Installed apps can access the clipboard at any time.
- if (!AppGlobals.getPackageManager().isInstantApp(callingPackage,
- UserHandle.getUserId(callingUid))) {
- return true;
- }
- // Instant apps can only access the clipboard if they are in the foreground.
- return mAm.isAppForeground(callingUid);
- } catch (RemoteException e) {
- Slog.e("clipboard", "Failed to get Instant App status for package " + callingPackage,
- e);
- return false;
+ // The default IME is always allowed to access the clipboard.
+ String defaultIme = Settings.Secure.getStringForUser(getContext().getContentResolver(),
+ Settings.Secure.DEFAULT_INPUT_METHOD, UserHandle.getUserId(callingUid));
+ if (defaultIme != null && defaultIme.equals(callingPackage)) {
+ return true;
}
+
+ // Otherwise only focused applications can access the clipboard.
+ boolean uidFocused = mWm.isUidFocused(callingUid);
+ if (!uidFocused) {
+ Slog.e(TAG, "Denying clipboard access to " + callingPackage
+ + ", application is not in focus.");
+ }
+ return uidFocused;
}
}
diff --git a/services/core/java/com/android/server/display/DisplayDeviceInfo.java b/services/core/java/com/android/server/display/DisplayDeviceInfo.java
index 349e1c8..512e851 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceInfo.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceInfo.java
@@ -104,6 +104,12 @@
public static final int FLAG_DESTROY_CONTENT_ON_REMOVAL = 1 << 10;
/**
+ * Flag: The display cutout of this display is masked.
+ * @hide
+ */
+ public static final int FLAG_MASK_DISPLAY_CUTOUT = 1 << 11;
+
+ /**
* Touch attachment: Display does not receive touch.
*/
public static final int TOUCH_NONE = 0;
@@ -453,6 +459,9 @@
if ((flags & FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD) != 0) {
msg.append(", FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD");
}
+ if ((flags & FLAG_MASK_DISPLAY_CUTOUT) != 0) {
+ msg.append(", FLAG_MASK_DISPLAY_CUTOUT");
+ }
return msg.toString();
}
}
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index 21ae048..16d82df 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -402,6 +402,10 @@
&& SystemProperties.getBoolean(PROPERTY_EMULATOR_CIRCULAR, false))) {
mInfo.flags |= DisplayDeviceInfo.FLAG_ROUND;
}
+ if (res.getBoolean(
+ com.android.internal.R.bool.config_maskMainBuiltInDisplayCutout)) {
+ mInfo.flags |= DisplayDeviceInfo.FLAG_MASK_DISPLAY_CUTOUT;
+ }
mInfo.displayCutout = DisplayCutout.fromResourcesRectApproximation(res,
mInfo.width, mInfo.height);
mInfo.type = Display.TYPE_BUILT_IN;
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index 23ee56b..373de63 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -23,6 +23,8 @@
import android.view.Surface;
import android.view.SurfaceControl;
+import com.android.server.wm.utils.InsetUtils;
+
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.List;
@@ -251,14 +253,18 @@
if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD) != 0) {
mBaseDisplayInfo.flags |= Display.FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD;
}
+ Rect maskingInsets = getMaskingInsets(deviceInfo);
+ int maskedWidth = deviceInfo.width - maskingInsets.left - maskingInsets.right;
+ int maskedHeight = deviceInfo.height - maskingInsets.top - maskingInsets.bottom;
+
mBaseDisplayInfo.type = deviceInfo.type;
mBaseDisplayInfo.address = deviceInfo.address;
mBaseDisplayInfo.name = deviceInfo.name;
mBaseDisplayInfo.uniqueId = deviceInfo.uniqueId;
- mBaseDisplayInfo.appWidth = deviceInfo.width;
- mBaseDisplayInfo.appHeight = deviceInfo.height;
- mBaseDisplayInfo.logicalWidth = deviceInfo.width;
- mBaseDisplayInfo.logicalHeight = deviceInfo.height;
+ mBaseDisplayInfo.appWidth = maskedWidth;
+ mBaseDisplayInfo.appHeight = maskedHeight;
+ mBaseDisplayInfo.logicalWidth = maskedWidth;
+ mBaseDisplayInfo.logicalHeight = maskedHeight;
mBaseDisplayInfo.rotation = Surface.ROTATION_0;
mBaseDisplayInfo.modeId = deviceInfo.modeId;
mBaseDisplayInfo.defaultModeId = deviceInfo.defaultModeId;
@@ -275,13 +281,15 @@
mBaseDisplayInfo.appVsyncOffsetNanos = deviceInfo.appVsyncOffsetNanos;
mBaseDisplayInfo.presentationDeadlineNanos = deviceInfo.presentationDeadlineNanos;
mBaseDisplayInfo.state = deviceInfo.state;
- mBaseDisplayInfo.smallestNominalAppWidth = deviceInfo.width;
- mBaseDisplayInfo.smallestNominalAppHeight = deviceInfo.height;
- mBaseDisplayInfo.largestNominalAppWidth = deviceInfo.width;
- mBaseDisplayInfo.largestNominalAppHeight = deviceInfo.height;
+ mBaseDisplayInfo.smallestNominalAppWidth = maskedWidth;
+ mBaseDisplayInfo.smallestNominalAppHeight = maskedHeight;
+ mBaseDisplayInfo.largestNominalAppWidth = maskedWidth;
+ mBaseDisplayInfo.largestNominalAppHeight = maskedHeight;
mBaseDisplayInfo.ownerUid = deviceInfo.ownerUid;
mBaseDisplayInfo.ownerPackageName = deviceInfo.ownerPackageName;
- mBaseDisplayInfo.displayCutout = deviceInfo.displayCutout;
+ boolean maskCutout =
+ (deviceInfo.flags & DisplayDeviceInfo.FLAG_MASK_DISPLAY_CUTOUT) != 0;
+ mBaseDisplayInfo.displayCutout = maskCutout ? null : deviceInfo.displayCutout;
mPrimaryDisplayDeviceInfo = deviceInfo;
mInfo = null;
@@ -289,6 +297,18 @@
}
/**
+ * Returns insets in ROTATION_0 for areas that are masked.
+ */
+ private static Rect getMaskingInsets(DisplayDeviceInfo deviceInfo) {
+ boolean maskCutout = (deviceInfo.flags & DisplayDeviceInfo.FLAG_MASK_DISPLAY_CUTOUT) != 0;
+ if (maskCutout && deviceInfo.displayCutout != null) {
+ return deviceInfo.displayCutout.getSafeInsets();
+ } else {
+ return new Rect();
+ }
+ }
+
+ /**
* Applies the layer stack and transformation to the given display device
* so that it shows the contents of this logical display.
*
@@ -349,6 +369,12 @@
int physWidth = rotated ? displayDeviceInfo.height : displayDeviceInfo.width;
int physHeight = rotated ? displayDeviceInfo.width : displayDeviceInfo.height;
+ Rect maskingInsets = getMaskingInsets(displayDeviceInfo);
+ InsetUtils.rotateInsets(maskingInsets, orientation);
+ // Don't consider the masked area as available when calculating the scaling below.
+ physWidth -= maskingInsets.left + maskingInsets.right;
+ physHeight -= maskingInsets.top + maskingInsets.bottom;
+
// Determine whether the width or height is more constrained to be scaled.
// physWidth / displayInfo.logicalWidth => letter box
// or physHeight / displayInfo.logicalHeight => pillar box
@@ -375,6 +401,9 @@
mTempDisplayRect.set(displayRectLeft, displayRectTop,
displayRectLeft + displayRectWidth, displayRectTop + displayRectHeight);
+ // Now add back the offset for the masked area.
+ mTempDisplayRect.offset(maskingInsets.left, maskingInsets.top);
+
mTempDisplayRect.left += mDisplayOffsetX;
mTempDisplayRect.right += mDisplayOffsetX;
mTempDisplayRect.top += mDisplayOffsetY;
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index a2eb1c1..c16d3cd 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -402,6 +402,8 @@
if (mCecController != null) {
if (mHdmiControlEnabled) {
initializeCec(INITIATED_BY_BOOT_UP);
+ } else {
+ mCecController.setOption(OptionKey.ENABLE_CEC, false);
}
} else {
Slog.i(TAG, "Device does not support HDMI-CEC.");
@@ -2384,6 +2386,7 @@
@ServiceThreadOnly
private void enableHdmiControlService() {
+ mCecController.setOption(OptionKey.ENABLE_CEC, true);
mCecController.setOption(OptionKey.SYSTEM_CEC_CONTROL, true);
mMhlController.setOption(OPTION_MHL_ENABLE, ENABLED);
@@ -2400,6 +2403,7 @@
@Override
public void run() {
mCecController.setOption(OptionKey.ENABLE_CEC, false);
+ mCecController.setOption(OptionKey.SYSTEM_CEC_CONTROL, false);
mMhlController.setOption(OPTION_MHL_ENABLE, DISABLED);
clearLocalDevices();
}
diff --git a/services/core/java/com/android/server/notification/NotificationDelegate.java b/services/core/java/com/android/server/notification/NotificationDelegate.java
index 8be8450..decdac6 100644
--- a/services/core/java/com/android/server/notification/NotificationDelegate.java
+++ b/services/core/java/com/android/server/notification/NotificationDelegate.java
@@ -30,6 +30,7 @@
void onNotificationClear(int callingUid, int callingPid,
String pkg, String tag, int id, int userId, String key,
@NotificationStats.DismissalSurface int dismissalSurface,
+ @NotificationStats.DismissalSentiment int dismissalSentiment,
NotificationVisibility nv);
void onNotificationError(int callingUid, int callingPid,
String pkg, String tag, int id,
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index f074319..ce71dd2 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -72,7 +72,6 @@
import static android.service.notification.NotificationListenerService.REASON_USER_STOPPED;
import static android.service.notification.NotificationListenerService.TRIM_FULL;
import static android.service.notification.NotificationListenerService.TRIM_LIGHT;
-import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import static com.android.server.utils.PriorityDump.PRIORITY_ARG;
@@ -701,7 +700,8 @@
}
@Override
- public void onNotificationClick(int callingUid, int callingPid, String key, NotificationVisibility nv) {
+ public void onNotificationClick(int callingUid, int callingPid, String key,
+ NotificationVisibility nv) {
exitIdle();
synchronized (mNotificationLock) {
NotificationRecord r = mNotificationsByKey.get(key);
@@ -758,11 +758,13 @@
public void onNotificationClear(int callingUid, int callingPid,
String pkg, String tag, int id, int userId, String key,
@NotificationStats.DismissalSurface int dismissalSurface,
+ @NotificationStats.DismissalSentiment int dismissalSentiment,
NotificationVisibility nv) {
synchronized (mNotificationLock) {
NotificationRecord r = mNotificationsByKey.get(key);
if (r != null) {
r.recordDismissalSurface(dismissalSurface);
+ r.recordDismissalSentiment(dismissalSentiment);
}
}
cancelNotification(callingUid, callingPid, pkg, tag, id, 0,
@@ -798,8 +800,8 @@
}
@Override
- public void onNotificationError(int callingUid, int callingPid, String pkg, String tag, int id,
- int uid, int initialPid, String message, int userId) {
+ public void onNotificationError(int callingUid, int callingPid, String pkg, String tag,
+ int id, int uid, int initialPid, String message, int userId) {
cancelNotification(callingUid, callingPid, pkg, tag, id, 0, 0, false, userId,
REASON_ERROR, null);
}
@@ -1041,10 +1043,12 @@
uidList = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST);
} else if (action.equals(Intent.ACTION_PACKAGES_SUSPENDED)) {
pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
+ uidList = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST);
cancelNotifications = false;
hideNotifications = true;
} else if (action.equals(Intent.ACTION_PACKAGES_UNSUSPENDED)) {
pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
+ uidList = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST);
cancelNotifications = false;
unhideNotifications = true;
} else if (queryRestart) {
@@ -2694,24 +2698,30 @@
try {
synchronized (mNotificationLock) {
final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token);
- if (keys != null) {
- final int N = keys.length;
- for (int i = 0; i < N; i++) {
- NotificationRecord r = mNotificationsByKey.get(keys[i]);
- if (r == null) continue;
- final int userId = r.sbn.getUserId();
- if (userId != info.userid && userId != UserHandle.USER_ALL &&
- !mUserProfiles.isCurrentProfile(userId)) {
- throw new SecurityException("Disallowed call from listener: "
- + info.service);
- }
- if (!r.isSeen()) {
- if (DBG) Slog.d(TAG, "Marking notification as seen " + keys[i]);
- reportSeen(r);
- r.setSeen();
- maybeRecordInterruptionLocked(r);
- }
+ if (keys == null) {
+ return;
+ }
+ ArrayList<NotificationRecord> seen = new ArrayList<>();
+ final int n = keys.length;
+ for (int i = 0; i < n; i++) {
+ NotificationRecord r = mNotificationsByKey.get(keys[i]);
+ if (r == null) continue;
+ final int userId = r.sbn.getUserId();
+ if (userId != info.userid && userId != UserHandle.USER_ALL
+ && !mUserProfiles.isCurrentProfile(userId)) {
+ throw new SecurityException("Disallowed call from listener: "
+ + info.service);
}
+ seen.add(r);
+ if (!r.isSeen()) {
+ if (DBG) Slog.d(TAG, "Marking notification as seen " + keys[i]);
+ reportSeen(r);
+ r.setSeen();
+ maybeRecordInterruptionLocked(r);
+ }
+ }
+ if (!seen.isEmpty()) {
+ mAssistants.onNotificationsSeenLocked(seen);
}
}
} finally {
@@ -5959,6 +5969,7 @@
}
notificationList.remove(i);
mNotificationsByKey.remove(r.getKey());
+ r.recordDismissalSentiment(NotificationStats.DISMISS_SENTIMENT_NEUTRAL);
canceledNotifications.add(r);
cancelNotificationLocked(r, sendDelete, reason, wasPosted, listenerName);
}
@@ -6556,6 +6567,35 @@
rebindServices(true);
}
+ protected void onNotificationsSeenLocked(ArrayList<NotificationRecord> records) {
+ // There should be only one, but it's a list, so while we enforce
+ // singularity elsewhere, we keep it general here, to avoid surprises.
+ for (final ManagedServiceInfo info : NotificationAssistants.this.getServices()) {
+ ArrayList<String> keys = new ArrayList<>(records.size());
+ for (NotificationRecord r : records) {
+ boolean sbnVisible = isVisibleToListener(r.sbn, info)
+ && info.isSameUser(r.getUserId());
+ if (sbnVisible) {
+ keys.add(r.getKey());
+ }
+ }
+
+ if (!keys.isEmpty()) {
+ mHandler.post(() -> notifySeen(info, keys));
+ }
+ }
+ }
+
+ private void notifySeen(final ManagedServiceInfo info,
+ final ArrayList<String> keys) {
+ final INotificationListener assistant = (INotificationListener) info.service;
+ try {
+ assistant.onNotificationsSeen(keys);
+ } catch (RemoteException ex) {
+ Log.e(TAG, "unable to notify assistant (seen): " + assistant, ex);
+ }
+ }
+
public void onNotificationEnqueued(final NotificationRecord r) {
final StatusBarNotification sbn = r.sbn;
TrimCache trimCache = new TrimCache(sbn);
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index a6d8615..fbb42ea 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -1065,6 +1065,10 @@
mStats.setDismissalSurface(surface);
}
+ public void recordDismissalSentiment(@NotificationStats.DismissalSentiment int sentiment) {
+ mStats.setDismissalSentiment(sentiment);
+ }
+
public void recordSnoozed() {
mStats.setSnoozed();
}
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 6e5c5bf..6ac72d3 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -1199,7 +1199,9 @@
&& zen != Global.ZEN_MODE_OFF
&& !isWatch
&& Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 0) != 0;
+ Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 0) != 0
+ && Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Secure.ZEN_SETTINGS_UPDATED, 0) != 1;
if (isWatch) {
Settings.Global.putInt(mContext.getContentResolver(),
diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java
index 320affb..cf47d4e 100644
--- a/services/core/java/com/android/server/pm/OtaDexoptService.java
+++ b/services/core/java/com/android/server/pm/OtaDexoptService.java
@@ -365,10 +365,12 @@
continue;
}
- // If the path is in /system, /vendor or /product, ignore. It will have been
- // ota-dexopted into /data/ota and moved into the dalvik-cache already.
- if (pkg.codePath.startsWith("/system") || pkg.codePath.startsWith("/vendor")
- || pkg.codePath.startsWith("/product")) {
+ // If the path is in /system, /vendor, /product or /product_services, ignore. It will
+ // have been ota-dexopted into /data/ota and moved into the dalvik-cache already.
+ if (pkg.codePath.startsWith("/system")
+ || pkg.codePath.startsWith("/vendor")
+ || pkg.codePath.startsWith("/product")
+ || pkg.codePath.startsWith("/product_services")) {
continue;
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index f3d333b..fba4be2 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -254,6 +254,7 @@
import android.util.DisplayMetrics;
import android.util.EventLog;
import android.util.ExceptionUtils;
+import android.util.IntArray;
import android.util.Log;
import android.util.LogPrinter;
import android.util.LongSparseArray;
@@ -449,26 +450,27 @@
private static final int SHELL_UID = Process.SHELL_UID;
private static final int SE_UID = Process.SE_UID;
- static final int SCAN_NO_DEX = 1<<0;
- static final int SCAN_UPDATE_SIGNATURE = 1<<1;
- static final int SCAN_NEW_INSTALL = 1<<2;
- static final int SCAN_UPDATE_TIME = 1<<3;
- static final int SCAN_BOOTING = 1<<4;
- static final int SCAN_REQUIRE_KNOWN = 1<<7;
- static final int SCAN_MOVE = 1<<8;
- static final int SCAN_INITIAL = 1<<9;
- static final int SCAN_CHECK_ONLY = 1<<10;
- static final int SCAN_DONT_KILL_APP = 1<<11;
- static final int SCAN_IGNORE_FROZEN = 1<<12;
- static final int SCAN_FIRST_BOOT_OR_UPGRADE = 1<<13;
- static final int SCAN_AS_INSTANT_APP = 1<<14;
- static final int SCAN_AS_FULL_APP = 1<<15;
- static final int SCAN_AS_VIRTUAL_PRELOAD = 1<<16;
- static final int SCAN_AS_SYSTEM = 1<<17;
- static final int SCAN_AS_PRIVILEGED = 1<<18;
- static final int SCAN_AS_OEM = 1<<19;
- static final int SCAN_AS_VENDOR = 1<<20;
- static final int SCAN_AS_PRODUCT = 1<<21;
+ static final int SCAN_NO_DEX = 1 << 0;
+ static final int SCAN_UPDATE_SIGNATURE = 1 << 1;
+ static final int SCAN_NEW_INSTALL = 1 << 2;
+ static final int SCAN_UPDATE_TIME = 1 << 3;
+ static final int SCAN_BOOTING = 1 << 4;
+ static final int SCAN_REQUIRE_KNOWN = 1 << 7;
+ static final int SCAN_MOVE = 1 << 8;
+ static final int SCAN_INITIAL = 1 << 9;
+ static final int SCAN_CHECK_ONLY = 1 << 10;
+ static final int SCAN_DONT_KILL_APP = 1 << 11;
+ static final int SCAN_IGNORE_FROZEN = 1 << 12;
+ static final int SCAN_FIRST_BOOT_OR_UPGRADE = 1 << 13;
+ static final int SCAN_AS_INSTANT_APP = 1 << 14;
+ static final int SCAN_AS_FULL_APP = 1 << 15;
+ static final int SCAN_AS_VIRTUAL_PRELOAD = 1 << 16;
+ static final int SCAN_AS_SYSTEM = 1 << 17;
+ static final int SCAN_AS_PRIVILEGED = 1 << 18;
+ static final int SCAN_AS_OEM = 1 << 19;
+ static final int SCAN_AS_VENDOR = 1 << 20;
+ static final int SCAN_AS_PRODUCT = 1 << 21;
+ static final int SCAN_AS_PRODUCT_SERVICES = 1 << 22;
@IntDef(flag = true, prefix = { "SCAN_" }, value = {
SCAN_NO_DEX,
@@ -574,6 +576,8 @@
private static final String PRODUCT_OVERLAY_DIR = "/product/overlay";
+ private static final String PRODUCT_SERVICES_OVERLAY_DIR = "/product_services/overlay";
+
/** Canonical intent used to identify what counts as a "web browser" app */
private static final Intent sBrowserIntent;
static {
@@ -2589,9 +2593,10 @@
scanFlags = scanFlags | SCAN_FIRST_BOOT_OR_UPGRADE;
}
- // Collect vendor/product overlay packages. (Do this before scanning any apps.)
- // For security and version matching reason, only consider
- // overlay packages if they reside in the right directory.
+ // Collect vendor/product/product_services overlay packages. (Do this before scanning
+ // any apps.)
+ // For security and version matching reason, only consider overlay packages if they
+ // reside in the right directory.
scanDirTracedLI(new File(VENDOR_OVERLAY_DIR),
mDefParseFlags
| PackageParser.PARSE_IS_SYSTEM_DIR,
@@ -2606,6 +2611,13 @@
| SCAN_AS_SYSTEM
| SCAN_AS_PRODUCT,
0);
+ scanDirTracedLI(new File(PRODUCT_SERVICES_OVERLAY_DIR),
+ mDefParseFlags
+ | PackageParser.PARSE_IS_SYSTEM_DIR,
+ scanFlags
+ | SCAN_AS_SYSTEM
+ | SCAN_AS_PRODUCT_SERVICES,
+ 0);
mParallelPackageParserCallback.findStaticOverlayPackages();
@@ -2717,7 +2729,7 @@
| SCAN_AS_OEM,
0);
- // Collected privileged product packages.
+ // Collected privileged /product packages.
File privilegedProductAppDir = new File(Environment.getProductDirectory(), "priv-app");
try {
privilegedProductAppDir = privilegedProductAppDir.getCanonicalFile();
@@ -2733,7 +2745,7 @@
| SCAN_AS_PRIVILEGED,
0);
- // Collect ordinary product packages.
+ // Collect ordinary /product packages.
File productAppDir = new File(Environment.getProductDirectory(), "app");
try {
productAppDir = productAppDir.getCanonicalFile();
@@ -2748,6 +2760,39 @@
| SCAN_AS_PRODUCT,
0);
+ // Collected privileged /product_services packages.
+ File privilegedProductServicesAppDir =
+ new File(Environment.getProductServicesDirectory(), "priv-app");
+ try {
+ privilegedProductServicesAppDir =
+ privilegedProductServicesAppDir.getCanonicalFile();
+ } catch (IOException e) {
+ // failed to look up canonical path, continue with original one
+ }
+ scanDirTracedLI(privilegedProductServicesAppDir,
+ mDefParseFlags
+ | PackageParser.PARSE_IS_SYSTEM_DIR,
+ scanFlags
+ | SCAN_AS_SYSTEM
+ | SCAN_AS_PRODUCT_SERVICES
+ | SCAN_AS_PRIVILEGED,
+ 0);
+
+ // Collect ordinary /product_services packages.
+ File productServicesAppDir = new File(Environment.getProductServicesDirectory(), "app");
+ try {
+ productServicesAppDir = productServicesAppDir.getCanonicalFile();
+ } catch (IOException e) {
+ // failed to look up canonical path, continue with original one
+ }
+ scanDirTracedLI(productServicesAppDir,
+ mDefParseFlags
+ | PackageParser.PARSE_IS_SYSTEM_DIR,
+ scanFlags
+ | SCAN_AS_SYSTEM
+ | SCAN_AS_PRODUCT_SERVICES,
+ 0);
+
// Prune any system packages that no longer exist.
final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<>();
// Stub packages must either be replaced with full versions in the /data
@@ -2952,6 +2997,23 @@
scanFlags
| SCAN_AS_SYSTEM
| SCAN_AS_PRODUCT;
+ } else if (FileUtils.contains(privilegedProductServicesAppDir, scanFile)) {
+ reparseFlags =
+ mDefParseFlags |
+ PackageParser.PARSE_IS_SYSTEM_DIR;
+ rescanFlags =
+ scanFlags
+ | SCAN_AS_SYSTEM
+ | SCAN_AS_PRODUCT_SERVICES
+ | SCAN_AS_PRIVILEGED;
+ } else if (FileUtils.contains(productServicesAppDir, scanFile)) {
+ reparseFlags =
+ mDefParseFlags |
+ PackageParser.PARSE_IS_SYSTEM_DIR;
+ rescanFlags =
+ scanFlags
+ | SCAN_AS_SYSTEM
+ | SCAN_AS_PRODUCT_SERVICES;
} else {
Slog.e(TAG, "Ignoring unexpected fallback path " + scanFile);
continue;
@@ -10166,6 +10228,7 @@
* <li>{@link #SCAN_AS_OEM}</li>
* <li>{@link #SCAN_AS_VENDOR}</li>
* <li>{@link #SCAN_AS_PRODUCT}</li>
+ * <li>{@link #SCAN_AS_PRODUCT_SERVICES}</li>
* <li>{@link #SCAN_AS_INSTANT_APP}</li>
* <li>{@link #SCAN_AS_VIRTUAL_PRELOAD}</li>
* </ul>
@@ -10192,6 +10255,10 @@
& ApplicationInfo.PRIVATE_FLAG_PRODUCT) != 0) {
scanFlags |= SCAN_AS_PRODUCT;
}
+ if ((disabledPkgSetting.pkgPrivateFlags
+ & ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES) != 0) {
+ scanFlags |= SCAN_AS_PRODUCT_SERVICES;
+ }
}
if (pkgSetting != null) {
final int userId = ((user == null) ? 0 : user.getIdentifier());
@@ -11034,6 +11101,10 @@
pkg.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_PRODUCT;
}
+ if ((scanFlags & SCAN_AS_PRODUCT_SERVICES) != 0) {
+ pkg.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES;
+ }
+
// Check if the package is signed with the same key as the platform package.
if (PLATFORM_PACKAGE_NAME.equals(pkg.packageName) ||
(platformPkg != null && compareSignatures(
@@ -12127,6 +12198,8 @@
codeRoot = Environment.getOdmDirectory();
} else if (FileUtils.contains(Environment.getProductDirectory(), codePath)) {
codeRoot = Environment.getProductDirectory();
+ } else if (FileUtils.contains(Environment.getProductServicesDirectory(), codePath)) {
+ codeRoot = Environment.getProductServicesDirectory();
} else {
// Unrecognized code path; take its top real segment as the apk root:
// e.g. /something/app/blah.apk => /something
@@ -14169,11 +14242,12 @@
info.sendPackageRemovedBroadcasts(true /*killApp*/);
}
- private void sendPackagesSuspendedForUser(String[] pkgList, int userId, boolean suspended,
- PersistableBundle launcherExtras) {
+ private void sendPackagesSuspendedForUser(String[] pkgList, int[] uidList, int userId,
+ boolean suspended, PersistableBundle launcherExtras) {
if (pkgList.length > 0) {
Bundle extras = new Bundle(1);
extras.putStringArray(Intent.EXTRA_CHANGED_PACKAGE_LIST, pkgList);
+ extras.putIntArray(Intent.EXTRA_CHANGED_UID_LIST, uidList);
if (launcherExtras != null) {
extras.putBundle(Intent.EXTRA_LAUNCHER_EXTRAS,
new Bundle(launcherExtras.deepCopy()));
@@ -14355,6 +14429,7 @@
}
final List<String> changedPackagesList = new ArrayList<>(packageNames.length);
+ final IntArray changedUids = new IntArray(packageNames.length);
final List<String> unactionedPackages = new ArrayList<>(packageNames.length);
final long callingId = Binder.clearCallingIdentity();
try {
@@ -14382,6 +14457,7 @@
pkgSetting.setSuspended(suspended, callingPackage, dialogMessage, appExtras,
launcherExtras, userId);
changedPackagesList.add(packageName);
+ changedUids.add(UserHandle.getUid(userId, pkgSetting.appId));
}
}
} finally {
@@ -14390,7 +14466,8 @@
if (!changedPackagesList.isEmpty()) {
final String[] changedPackages = changedPackagesList.toArray(
new String[changedPackagesList.size()]);
- sendPackagesSuspendedForUser(changedPackages, userId, suspended, launcherExtras);
+ sendPackagesSuspendedForUser(
+ changedPackages, changedUids.toArray(), userId, suspended, launcherExtras);
sendMyPackageSuspendedOrUnsuspended(changedPackages, suspended, appExtras, userId);
synchronized (mPackages) {
scheduleWritePackageRestrictionsLocked(userId);
@@ -14505,12 +14582,14 @@
private void unsuspendForSuspendingPackages(Predicate<String> packagePredicate, int userId) {
final List<String> affectedPackages = new ArrayList<>();
+ final IntArray affectedUids = new IntArray();
synchronized (mPackages) {
for (PackageSetting ps : mSettings.mPackages.values()) {
final PackageUserState pus = ps.readUserState(userId);
if (pus.suspended && packagePredicate.test(pus.suspendingPackage)) {
ps.setSuspended(false, null, null, null, null, userId);
affectedPackages.add(ps.name);
+ affectedUids.add(UserHandle.getUid(userId, ps.getAppId()));
}
}
}
@@ -14518,7 +14597,8 @@
final String[] packageArray = affectedPackages.toArray(
new String[affectedPackages.size()]);
sendMyPackageSuspendedOrUnsuspended(packageArray, false, null, userId);
- sendPackagesSuspendedForUser(packageArray, userId, false, null);
+ sendPackagesSuspendedForUser(
+ packageArray, affectedUids.toArray(), userId, false, null);
// Write package restrictions immediately to avoid an inconsistent state.
mSettings.writePackageRestrictionsLPr(userId);
}
@@ -16667,13 +16747,16 @@
final boolean oem = isOemApp(oldPackage);
final boolean vendor = isVendorApp(oldPackage);
final boolean product = isProductApp(oldPackage);
+ final boolean productServices = isProductServicesApp(oldPackage);
+
final @ParseFlags int systemParseFlags = parseFlags;
final @ScanFlags int systemScanFlags = scanFlags
| SCAN_AS_SYSTEM
| (privileged ? SCAN_AS_PRIVILEGED : 0)
| (oem ? SCAN_AS_OEM : 0)
| (vendor ? SCAN_AS_VENDOR : 0)
- | (product ? SCAN_AS_PRODUCT : 0);
+ | (product ? SCAN_AS_PRODUCT : 0)
+ | (productServices ? SCAN_AS_PRODUCT_SERVICES : 0);
replaceSystemPackageLIF(oldPackage, pkg, systemParseFlags, systemScanFlags,
user, allUsers, installerPackageName, res, installReason);
@@ -17982,6 +18065,11 @@
return (pkg.applicationInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT) != 0;
}
+ private static boolean isProductServicesApp(PackageParser.Package pkg) {
+ return (pkg.applicationInfo.privateFlags
+ & ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES) != 0;
+ }
+
private static boolean hasDomainURLs(PackageParser.Package pkg) {
return (pkg.applicationInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS) != 0;
}
@@ -18721,10 +18809,13 @@
final File privilegedVendorAppDir = new File(Environment.getVendorDirectory(), "priv-app");
final File privilegedOdmAppDir = new File(Environment.getOdmDirectory(), "priv-app");
final File privilegedProductAppDir = new File(Environment.getProductDirectory(), "priv-app");
+ final File privilegedProductServicesAppDir =
+ new File(Environment.getProductServicesDirectory(), "priv-app");
return path.startsWith(privilegedAppDir.getCanonicalPath())
|| path.startsWith(privilegedVendorAppDir.getCanonicalPath())
|| path.startsWith(privilegedOdmAppDir.getCanonicalPath())
- || path.startsWith(privilegedProductAppDir.getCanonicalPath());
+ || path.startsWith(privilegedProductAppDir.getCanonicalPath())
+ || path.startsWith(privilegedProductServicesAppDir.getCanonicalPath());
} catch (IOException e) {
Slog.e(TAG, "Unable to access code path " + path);
}
@@ -18759,6 +18850,15 @@
return false;
}
+ static boolean locationIsProductServices(String path) {
+ try {
+ return path.startsWith(Environment.getProductServicesDirectory().getCanonicalPath());
+ } catch (IOException e) {
+ Slog.e(TAG, "Unable to access code path " + path);
+ }
+ return false;
+ }
+
/*
* Tries to delete system package.
*/
@@ -18886,6 +18986,9 @@
if (locationIsProduct(codePathString)) {
scanFlags |= SCAN_AS_PRODUCT;
}
+ if (locationIsProductServices(codePathString)) {
+ scanFlags |= SCAN_AS_PRODUCT_SERVICES;
+ }
final File codePath = new File(codePathString);
final PackageParser.Package pkg =
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 3834a88..f2c0395 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -25,7 +25,6 @@
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;
@@ -67,7 +66,6 @@
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;
@@ -84,11 +82,17 @@
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 libcore.io.Streams;
+
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -96,10 +100,6 @@
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URISyntaxException;
-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;
@@ -110,10 +110,7 @@
import java.util.WeakHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.LinkedBlockingQueue;
-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 */
@@ -1777,6 +1774,15 @@
}
}
+ private boolean isProductServicesApp(String pkg) {
+ try {
+ final PackageInfo info = mInterface.getPackageInfo(pkg, 0, UserHandle.USER_SYSTEM);
+ return info != null && info.applicationInfo.isProductServices();
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
private int runGetPrivappPermissions() {
final String pkg = getNextArg();
if (pkg == null) {
@@ -1789,6 +1795,9 @@
privAppPermissions = SystemConfig.getInstance().getVendorPrivAppPermissions(pkg);
} else if (isProductApp(pkg)) {
privAppPermissions = SystemConfig.getInstance().getProductPrivAppPermissions(pkg);
+ } else if (isProductServicesApp(pkg)) {
+ privAppPermissions = SystemConfig.getInstance()
+ .getProductServicesPrivAppPermissions(pkg);
} else {
privAppPermissions = SystemConfig.getInstance().getPrivAppPermissions(pkg);
}
@@ -1810,6 +1819,9 @@
privAppPermissions = SystemConfig.getInstance().getVendorPrivAppDenyPermissions(pkg);
} else if (isProductApp(pkg)) {
privAppPermissions = SystemConfig.getInstance().getProductPrivAppDenyPermissions(pkg);
+ } else if (isProductServicesApp(pkg)) {
+ privAppPermissions = SystemConfig.getInstance()
+ .getProductServicesPrivAppDenyPermissions(pkg);
} else {
privAppPermissions = SystemConfig.getInstance().getPrivAppDenyPermissions(pkg);
}
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index ea05b74..727fb15 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -148,6 +148,10 @@
return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT) != 0;
}
+ public boolean isProductServices() {
+ return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES) != 0;
+ }
+
public boolean isForwardLocked() {
return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0;
}
diff --git a/services/core/java/com/android/server/pm/SettingBase.java b/services/core/java/com/android/server/pm/SettingBase.java
index 7c92045..239dc99 100644
--- a/services/core/java/com/android/server/pm/SettingBase.java
+++ b/services/core/java/com/android/server/pm/SettingBase.java
@@ -63,6 +63,7 @@
| ApplicationInfo.PRIVATE_FLAG_OEM
| ApplicationInfo.PRIVATE_FLAG_VENDOR
| ApplicationInfo.PRIVATE_FLAG_PRODUCT
+ | ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES
| ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK
| ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER);
}
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index e9cd707..ed56a32 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -850,7 +850,8 @@
pkgSetting.pkgPrivateFlags &= ~(ApplicationInfo.PRIVATE_FLAG_PRIVILEGED
| ApplicationInfo.PRIVATE_FLAG_OEM
| ApplicationInfo.PRIVATE_FLAG_VENDOR
- | ApplicationInfo.PRIVATE_FLAG_PRODUCT);
+ | ApplicationInfo.PRIVATE_FLAG_PRODUCT
+ | ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES);
pkgSetting.pkgFlags |= pkgFlags & ApplicationInfo.FLAG_SYSTEM;
pkgSetting.pkgPrivateFlags |=
pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED;
@@ -860,6 +861,8 @@
pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_VENDOR;
pkgSetting.pkgPrivateFlags |=
pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT;
+ pkgSetting.pkgPrivateFlags |=
+ pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES;
pkgSetting.primaryCpuAbiString = primaryCpuAbi;
pkgSetting.secondaryCpuAbiString = secondaryCpuAbi;
if (childPkgNames != null) {
@@ -4445,6 +4448,7 @@
ApplicationInfo.PRIVATE_FLAG_STATIC_SHARED_LIBRARY, "STATIC_SHARED_LIBRARY",
ApplicationInfo.PRIVATE_FLAG_VENDOR, "VENDOR",
ApplicationInfo.PRIVATE_FLAG_PRODUCT, "PRODUCT",
+ ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES, "PRODUCT_SERVICES",
ApplicationInfo.PRIVATE_FLAG_VIRTUAL_PRELOAD, "VIRTUAL_PRELOAD",
};
diff --git a/services/core/java/com/android/server/pm/permission/BasePermission.java b/services/core/java/com/android/server/pm/permission/BasePermission.java
index 1d002ef..8202580 100644
--- a/services/core/java/com/android/server/pm/permission/BasePermission.java
+++ b/services/core/java/com/android/server/pm/permission/BasePermission.java
@@ -39,6 +39,7 @@
import com.android.server.pm.DumpState;
import com.android.server.pm.PackageManagerService;
+import com.android.server.pm.PackageSetting;
import com.android.server.pm.PackageSettingBase;
import org.xmlpull.v1.XmlPullParser;
@@ -374,8 +375,10 @@
}
public void enforceDeclaredUsedAndRuntimeOrDevelopment(PackageParser.Package pkg) {
+ final PackageSetting pkgSetting = (PackageSetting) pkg.mExtras;
+ final PermissionsState permsState = pkgSetting.getPermissionsState();
int index = pkg.requestedPermissions.indexOf(name);
- if (index == -1) {
+ if (!permsState.hasRequestedPermission(name) && index == -1) {
throw new SecurityException("Package " + pkg.packageName
+ " has not requested permission " + name);
}
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 9dc0b29..c4f90a12 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -1097,6 +1097,10 @@
} else if (pkg.isProduct()) {
wlPermissions =
SystemConfig.getInstance().getProductPrivAppPermissions(pkg.packageName);
+ } else if (pkg.isProductServices()) {
+ wlPermissions =
+ SystemConfig.getInstance().getProductServicesPrivAppPermissions(
+ pkg.packageName);
} else {
wlPermissions = SystemConfig.getInstance().getPrivAppPermissions(pkg.packageName);
}
@@ -1129,6 +1133,9 @@
} else if (pkg.isProduct()) {
deniedPermissions = SystemConfig.getInstance()
.getProductPrivAppDenyPermissions(pkg.packageName);
+ } else if (pkg.isProductServices()) {
+ deniedPermissions = SystemConfig.getInstance()
+ .getProductServicesPrivAppDenyPermissions(pkg.packageName);
} else {
deniedPermissions = SystemConfig.getInstance()
.getPrivAppDenyPermissions(pkg.packageName);
diff --git a/services/core/java/com/android/server/pm/permission/PermissionsState.java b/services/core/java/com/android/server/pm/permission/PermissionsState.java
index 11df380..5e66bfc3 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionsState.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionsState.java
@@ -20,9 +20,9 @@
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArraySet;
-
import android.util.SparseArray;
import android.util.SparseBooleanArray;
+
import com.android.internal.util.ArrayUtils;
import java.util.ArrayList;
@@ -291,6 +291,13 @@
}
/**
+ * Returns whether the state has any known request for the given permission name,
+ * whether or not it has been granted.
+ */
+ public boolean hasRequestedPermission(String name) {
+ return mPermissions != null && (mPermissions.get(name) != null);
+ }
+ /**
* Gets all permissions for a given device user id regardless if they
* are install time or runtime permissions.
*
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 13800b6..91d4717 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -288,6 +288,9 @@
private long mLastWakeTime;
private long mLastSleepTime;
+ // Last reason the device went to sleep.
+ private int mLastSleepReason;
+
// Timestamp of the last call to user activity.
private long mLastUserActivityTime;
private long mLastUserActivityTimeNoChangeLights;
@@ -1433,6 +1436,7 @@
}
mLastSleepTime = eventTime;
+ mLastSleepReason = reason;
mSandmanSummoned = true;
setWakefulnessLocked(WAKEFULNESS_DOZING, reason);
@@ -3266,6 +3270,7 @@
pw.println(" mDeviceIdleTempWhitelist=" + Arrays.toString(mDeviceIdleTempWhitelist));
pw.println(" mLastWakeTime=" + TimeUtils.formatUptime(mLastWakeTime));
pw.println(" mLastSleepTime=" + TimeUtils.formatUptime(mLastSleepTime));
+ pw.println(" mLastSleepReason=" + PowerManager.sleepReasonToString(mLastSleepReason));
pw.println(" mLastUserActivityTime=" + TimeUtils.formatUptime(mLastUserActivityTime));
pw.println(" mLastUserActivityTimeNoChangeLights="
+ TimeUtils.formatUptime(mLastUserActivityTimeNoChangeLights));
@@ -4404,6 +4409,19 @@
}
}
+ @Override // Binder call
+ public int getLastSleepReason() {
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.DEVICE_POWER, null);
+
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ return getLastSleepReasonInternal();
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
/**
* Reboots the device.
*
@@ -4619,6 +4637,12 @@
}
}
+ private int getLastSleepReasonInternal() {
+ synchronized (mLock) {
+ return mLastSleepReason;
+ }
+ }
+
private final class LocalService extends PowerManagerInternal {
@Override
public void setScreenBrightnessOverrideFromWindowManager(int screenBrightness) {
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 519881e..b8c9be7 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -80,6 +80,7 @@
private int mDisabled2 = 0;
private final Object mLock = new Object();
+ private final DeathRecipient mDeathRecipient = new DeathRecipient();
// encompasses lights-out mode and other flags defined on View
private int mSystemUiVisibility = 0;
private int mFullscreenStackSysUiVisibility;
@@ -93,6 +94,23 @@
private IBinder mImeToken = null;
private int mCurrentUserId;
+ private class DeathRecipient implements IBinder.DeathRecipient {
+ public void binderDied() {
+ mBar.asBinder().unlinkToDeath(this,0);
+ mBar = null;
+ notifyBarAttachChanged();
+ }
+
+ public void linkToDeath() {
+ try {
+ mBar.asBinder().linkToDeath(mDeathRecipient,0);
+ } catch (RemoteException e) {
+ Slog.e(TAG,"Unable to register Death Recipient for status bar", e);
+ }
+ }
+
+ }
+
private class DisableRecord implements IBinder.DeathRecipient {
int userId;
String pkg;
@@ -859,16 +877,7 @@
Slog.i(TAG, "registerStatusBar bar=" + bar);
mBar = bar;
- try {
- mBar.asBinder().linkToDeath(new DeathRecipient() {
- @Override
- public void binderDied() {
- mBar = null;
- notifyBarAttachChanged();
- }
- }, 0);
- } catch (RemoteException e) {
- }
+ mDeathRecipient.linkToDeath();
notifyBarAttachChanged();
synchronized (mIcons) {
for (String slot : mIcons.keySet()) {
@@ -1044,14 +1053,16 @@
@Override
public void onNotificationClear(String pkg, String tag, int id, int userId, String key,
- @NotificationStats.DismissalSurface int dismissalSurface, NotificationVisibility nv) {
+ @NotificationStats.DismissalSurface int dismissalSurface,
+ @NotificationStats.DismissalSentiment int dismissalSentiment,
+ NotificationVisibility nv) {
enforceStatusBarService();
final int callingUid = Binder.getCallingUid();
final int callingPid = Binder.getCallingPid();
long identity = Binder.clearCallingIdentity();
try {
mNotificationDelegate.onNotificationClear(callingUid, callingPid, pkg, tag, id, userId,
- key, dismissalSurface, nv);
+ key, dismissalSurface, dismissalSentiment, nv);
} finally {
Binder.restoreCallingIdentity(identity);
}
diff --git a/services/core/java/com/android/server/uri/UriGrantsManagerService.java b/services/core/java/com/android/server/uri/UriGrantsManagerService.java
index a731e9b..9a7e75e 100644
--- a/services/core/java/com/android/server/uri/UriGrantsManagerService.java
+++ b/services/core/java/com/android/server/uri/UriGrantsManagerService.java
@@ -30,6 +30,7 @@
import static android.os.Process.ROOT_UID;
import static android.os.Process.SYSTEM_UID;
import static android.os.Process.myUid;
+
import static com.android.internal.util.XmlUtils.readBooleanAttribute;
import static com.android.internal.util.XmlUtils.readIntAttribute;
import static com.android.internal.util.XmlUtils.readLongAttribute;
@@ -37,6 +38,7 @@
import static com.android.internal.util.XmlUtils.writeIntAttribute;
import static com.android.internal.util.XmlUtils.writeLongAttribute;
import static com.android.server.uri.UriGrantsManagerService.H.PERSIST_URI_GRANTS_MSG;
+
import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
import static org.xmlpull.v1.XmlPullParser.START_TAG;
@@ -73,15 +75,19 @@
import android.util.Slog;
import android.util.SparseArray;
import android.util.Xml;
+
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.Preconditions;
import com.android.server.IoThread;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.SystemServiceManager;
+
import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
+import libcore.io.IoUtils;
+
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
@@ -98,8 +104,6 @@
import java.util.Iterator;
import java.util.List;
-import libcore.io.IoUtils;
-
/** Manages uri grants. */
public class UriGrantsManagerService extends IUriGrantsManager.Stub {
private static final boolean DEBUG = false;
@@ -150,7 +154,6 @@
void onActivityManagerInternalAdded() {
mAmInternal = LocalServices.getService(ActivityManagerInternal.class);
- mPmInternal = LocalServices.getService(PackageManagerInternal.class);
}
public static final class Lifecycle extends SystemService {
@@ -296,7 +299,7 @@
if (toPackage != null) {
mAmInternal.enforceCallingPermission(FORCE_PERSISTABLE_URI_PERMISSIONS,
"takePersistableUriPermission");
- uid = mPmInternal.getPackageUid(toPackage, 0, userId);
+ uid = getPmInternal().getPackageUid(toPackage, 0, userId);
} else {
enforceNotIsolatedCaller("takePersistableUriPermission");
uid = Binder.getCallingUid();
@@ -361,7 +364,7 @@
if (toPackage != null) {
mAmInternal.enforceCallingPermission(FORCE_PERSISTABLE_URI_PERMISSIONS,
"releasePersistableUriPermission");
- uid = mPmInternal.getPackageUid(toPackage, 0, userId);
+ uid = getPmInternal().getPackageUid(toPackage, 0, userId);
} else {
enforceNotIsolatedCaller("releasePersistableUriPermission");
uid = Binder.getCallingUid();
@@ -1266,6 +1269,14 @@
}
}
+ private PackageManagerInternal getPmInternal() {
+ // Don't need to synchonize; worst-case scenario LocalServices will be called twice.
+ if (mPmInternal == null) {
+ mPmInternal = LocalServices.getService(PackageManagerInternal.class);
+ }
+ return mPmInternal;
+ }
+
final class H extends Handler {
static final int PERSIST_URI_GRANTS_MSG = 1;
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index a6bda37..d8cbb26 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -16,9 +16,46 @@
package com.android.server.wm;
+import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE;
+import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
+import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
+
+import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM;
+import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
+import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
+import static com.android.server.wm.RootWindowContainerProto.DISPLAYS;
+import static com.android.server.wm.RootWindowContainerProto.WINDOWS;
+import static com.android.server.wm.RootWindowContainerProto.WINDOW_CONTAINER;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_KEEP_SCREEN_ON;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT_REPEATS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_KEEP_SCREEN_ON;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+import static com.android.server.wm.WindowManagerService.H.REPORT_LOSING_FOCUS;
+import static com.android.server.wm.WindowManagerService.H.SEND_NEW_CONFIGURATION;
+import static com.android.server.wm.WindowManagerService.H.WINDOW_FREEZE_TIMEOUT;
+import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_PLACING_SURFACES;
+import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES;
+import static com.android.server.wm.WindowManagerService.WINDOWS_FREEZING_SCREENS_NONE;
+import static com.android.server.wm.WindowManagerService.logSurface;
+import static com.android.server.wm.WindowSurfacePlacer.SET_FORCE_HIDING_CHANGED;
+import static com.android.server.wm.WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE;
+import static com.android.server.wm.WindowSurfacePlacer.SET_UPDATE_ROTATION;
+import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_ACTION_PENDING;
+import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_MAY_CHANGE;
+
import android.annotation.CallSuper;
import android.content.res.Configuration;
-import android.graphics.Rect;
import android.hardware.power.V1_0.PowerHint;
import android.os.Binder;
import android.os.Debug;
@@ -26,7 +63,6 @@
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
-import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.UserHandle;
@@ -43,51 +79,11 @@
import com.android.internal.util.ArrayUtils;
import com.android.server.EventLogTags;
-import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
-import static android.view.Display.DEFAULT_DISPLAY;
-import static android.view.Display.INVALID_DISPLAY;
-import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE;
-import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
-import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
-
-import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM;
-import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
-import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_KEEP_SCREEN_ON;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT_REPEATS;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_TRACE;
-import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
-import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC;
-import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_KEEP_SCREEN_ON;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-import static com.android.server.wm.WindowManagerService.H.REPORT_LOSING_FOCUS;
-import static com.android.server.wm.WindowManagerService.H.SEND_NEW_CONFIGURATION;
-import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_PLACING_SURFACES;
-import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES;
-import static com.android.server.wm.WindowManagerService.WINDOWS_FREEZING_SCREENS_NONE;
-import static com.android.server.wm.WindowManagerService.H.WINDOW_FREEZE_TIMEOUT;
-import static com.android.server.wm.WindowManagerService.logSurface;
-import static com.android.server.wm.WindowSurfacePlacer.SET_FORCE_HIDING_CHANGED;
-import static com.android.server.wm.WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE;
-import static com.android.server.wm.WindowSurfacePlacer.SET_UPDATE_ROTATION;
-import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_ACTION_PENDING;
-import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_MAY_CHANGE;
-import static com.android.server.wm.RootWindowContainerProto.DISPLAYS;
-import static com.android.server.wm.RootWindowContainerProto.WINDOWS;
-import static com.android.server.wm.RootWindowContainerProto.WINDOW_CONTAINER;
-
/** Root {@link WindowContainer} for the device. */
class RootWindowContainer extends WindowContainer<DisplayContent> {
private static final String TAG = TAG_WITH_CLASS_NAME ? "RootWindowContainer" : TAG_WM;
@@ -301,6 +297,18 @@
return null;
}
+ /** Returns the window token for the input binder if it exist in the system. */
+ WindowToken getWindowToken(IBinder binder) {
+ for (int i = mChildren.size() - 1; i >= 0; --i) {
+ final DisplayContent dc = mChildren.get(i);
+ final WindowToken wtoken = dc.getWindowToken(binder);
+ if (wtoken != null) {
+ return wtoken;
+ }
+ }
+ return null;
+ }
+
/** Returns the display object the input window token is currently mapped on. */
DisplayContent getWindowTokenDisplay(WindowToken token) {
if (token == null) {
diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java
index 90a763d..44783f8 100644
--- a/services/core/java/com/android/server/wm/WindowManagerInternal.java
+++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java
@@ -436,4 +436,9 @@
* the window token is not found.
*/
public abstract int getWindowOwnerUserId(IBinder windowToken);
+
+ /**
+ * Returns {@code true} if a Window owned by {@code uid} has focus.
+ */
+ public abstract boolean isUidFocused(int uid);
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index e18d564..158d09a 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -1151,7 +1151,7 @@
throw new IllegalStateException("Display has not been initialialized");
}
- final DisplayContent displayContent = getDisplayContentOrCreate(displayId);
+ final DisplayContent displayContent = getDisplayContentOrCreate(displayId, attrs.token);
if (displayContent == null) {
Slog.w(TAG_WM, "Attempted to add window to a display that does not exist: "
@@ -1540,9 +1540,20 @@
* that corresponds to a display just added to DisplayManager has not yet been created. This
* usually means that the call of this method was initiated from outside of Activity or Window
* Manager. In most cases the regular getter should be used.
+ * @param displayId The preferred display Id.
+ * @param token The window token associated with the window we are trying to get display for.
+ * if not null then the display of the window token will be returned. Set to null
+ * is there isn't an a token associated with the request.
* @see RootWindowContainer#getDisplayContent(int)
*/
- private DisplayContent getDisplayContentOrCreate(int displayId) {
+ private DisplayContent getDisplayContentOrCreate(int displayId, IBinder token) {
+ if (token != null) {
+ final WindowToken wToken = mRoot.getWindowToken(token);
+ if (wToken != null) {
+ return wToken.getDisplayContent();
+ }
+ }
+
DisplayContent displayContent = mRoot.getDisplayContent(displayId);
// Create an instance if possible instead of waiting for the ActivityManagerService to drive
@@ -2092,12 +2103,9 @@
}
if (focusMayChange) {
- //System.out.println("Focus may change: " + win.mAttrs.getTitle());
- if (updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
- false /*updateInputWindows*/)) {
+ if (updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /*updateInputWindows*/)) {
imMayMove = false;
}
- //System.out.println("Relayout " + win + ": focus=" + mCurrentFocus);
}
// updateFocusedWindowLocked() already assigned layers so we only need to
@@ -2341,6 +2349,12 @@
synchronized(mWindowMap) {
final DisplayContent dc = mRoot.getDisplayContent(displayId);
+ if (dc == null) {
+ Slog.w(TAG_WM, "addWindowToken: Attempted to add token: " + binder
+ + " for non-exiting displayId=" + displayId);
+ return;
+ }
+
WindowToken token = dc.getWindowToken(binder);
if (token != null) {
Slog.w(TAG_WM, "addWindowToken: Attempted to add binder token: " + binder
@@ -7064,7 +7078,7 @@
final long token = Binder.clearCallingIdentity();
try {
synchronized (mWindowMap) {
- final DisplayContent dc = getDisplayContentOrCreate(displayId);
+ final DisplayContent dc = getDisplayContentOrCreate(displayId, null);
if (dc == null) {
throw new IllegalArgumentException(
"Trying to register a non existent display.");
@@ -7422,6 +7436,13 @@
return UserHandle.USER_NULL;
}
}
+
+ @Override
+ public boolean isUidFocused(int uid) {
+ synchronized (mWindowMap) {
+ return mCurrentFocus != null ? uid == mCurrentFocus.getOwningUid() : false;
+ }
+ }
}
void registerAppFreezeListener(AppFreezeListener listener) {
diff --git a/services/core/java/com/android/server/wm/utils/InsetUtils.java b/services/core/java/com/android/server/wm/utils/InsetUtils.java
index c5b103f..f5cc0d5 100644
--- a/services/core/java/com/android/server/wm/utils/InsetUtils.java
+++ b/services/core/java/com/android/server/wm/utils/InsetUtils.java
@@ -19,6 +19,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.graphics.Rect;
+import android.view.Surface;
/**
@@ -30,6 +31,32 @@
}
/**
+ * Transforms insets given in one rotation into insets in a different rotation.
+ *
+ * @param inOutInsets the insets to transform, is set to the transformed insets
+ * @param rotationDelta the delta between the new and old rotation.
+ * Must be one of Surface.ROTATION_0/90/180/270.
+ */
+ public static void rotateInsets(Rect inOutInsets, int rotationDelta) {
+ final Rect r = inOutInsets;
+ switch (rotationDelta) {
+ case Surface.ROTATION_0:
+ return;
+ case Surface.ROTATION_90:
+ r.set(r.top, r.right, r.bottom, r.left);
+ break;
+ case Surface.ROTATION_180:
+ r.set(r.right, r.bottom, r.left, r.top);
+ break;
+ case Surface.ROTATION_270:
+ r.set(r.bottom, r.left, r.top, r.right);
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown rotation: " + rotationDelta);
+ }
+ }
+
+ /**
* Adds {@code insetsToAdd} to {@code inOutInsets}.
*/
public static void addInsets(Rect inOutInsets, Rect insetsToAdd) {
diff --git a/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java
index f383fda..7125246 100644
--- a/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java
@@ -23,6 +23,7 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -56,7 +57,7 @@
/**
* Tests for the {@link DragDropController} class.
*
- * atest com.android.server.wm.DragDropControllerTests
+ * atest FrameworksServicesTests:com.android.server.wm.DragDropControllerTests
*/
@SmallTest
@RunWith(AndroidJUnit4.class)
@@ -118,7 +119,7 @@
mTarget = new TestDragDropController(sWm, sWm.mH.getLooper());
mDisplayContent = spy(mDisplayContent);
mWindow = createDropTargetWindow("Drag test window", 0);
- when(mDisplayContent.getTouchableWinAtPointLocked(0, 0)).thenReturn(mWindow);
+ doReturn(mWindow).when(mDisplayContent).getTouchableWinAtPointLocked(0, 0);
when(sWm.mInputManager.transferTouchFocus(any(), any())).thenReturn(true);
synchronized (sWm.mWindowMap) {
@@ -159,8 +160,7 @@
public void testPerformDrag_NullDataToOtherUser() throws Exception {
final WindowState otherUsersWindow =
createDropTargetWindow("Other user's window", 1 * UserHandle.PER_USER_RANGE);
- when(mDisplayContent.getTouchableWinAtPointLocked(10, 10))
- .thenReturn(otherUsersWindow);
+ doReturn(otherUsersWindow).when(mDisplayContent).getTouchableWinAtPointLocked(10, 10);
dragFlow(0, null, 10, 10);
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java b/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java
index 75b4d2f..3364aef 100644
--- a/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java
@@ -16,6 +16,11 @@
package com.android.server.wm.utils;
+import static android.hardware.camera2.params.OutputConfiguration.ROTATION_90;
+import static android.view.Surface.ROTATION_0;
+import static android.view.Surface.ROTATION_180;
+import static android.view.Surface.ROTATION_270;
+
import static junit.framework.Assert.assertEquals;
import android.graphics.Rect;
@@ -39,5 +44,29 @@
InsetUtils.addInsets(rect1, rect2);
assertEquals(new Rect(60, 80, 100, 120), rect1);
}
+
+ @Test
+ public void rotate() {
+ final Rect original = new Rect(1, 2, 3, 4);
+
+ assertEquals("rot0", original, rotateCopy(original, ROTATION_0));
+
+ final Rect rot90 = rotateCopy(original, ROTATION_90);
+ assertEquals("rot90", new Rect(2, 3, 4, 1), rot90);
+
+ final Rect rot180 = rotateCopy(original, ROTATION_180);
+ assertEquals("rot180", new Rect(3, 4, 1, 2), rot180);
+ assertEquals("rot90(rot90)=rot180", rotateCopy(rot90, ROTATION_90), rot180);
+
+ final Rect rot270 = rotateCopy(original, ROTATION_270);
+ assertEquals("rot270", new Rect(4, 1, 2, 3), rot270);
+ assertEquals("rot90(rot180)=rot270", rotateCopy(rot180, ROTATION_90), rot270);
+ }
+
+ private static Rect rotateCopy(Rect insets, int rotationDelta) {
+ final Rect copy = new Rect(insets);
+ InsetUtils.rotateInsets(copy, rotationDelta);
+ return copy;
+ }
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index 4dcb8cf..0ff124e 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -2483,13 +2483,29 @@
final NotificationVisibility nv = NotificationVisibility.obtain(r.getKey(), 0, 1, true);
mService.mNotificationDelegate.onNotificationClear(mUid, 0, PKG, r.sbn.getTag(),
- r.sbn.getId(), r.getUserId(), r.getKey(), NotificationStats.DISMISSAL_AOD, nv);
+ r.sbn.getId(), r.getUserId(), r.getKey(), NotificationStats.DISMISSAL_AOD,
+ NotificationStats.DISMISS_SENTIMENT_POSITIVE, nv);
waitForIdle();
assertEquals(NotificationStats.DISMISSAL_AOD, r.getStats().getDismissalSurface());
}
@Test
+ public void testStats_dismissalSentiment() throws Exception {
+ final NotificationRecord r = generateNotificationRecord(mTestNotificationChannel);
+ mService.addNotification(r);
+
+ final NotificationVisibility nv = NotificationVisibility.obtain(r.getKey(), 0, 1, true);
+ mService.mNotificationDelegate.onNotificationClear(mUid, 0, PKG, r.sbn.getTag(),
+ r.sbn.getId(), r.getUserId(), r.getKey(), NotificationStats.DISMISSAL_AOD,
+ NotificationStats.DISMISS_SENTIMENT_NEGATIVE, nv);
+ waitForIdle();
+
+ assertEquals(NotificationStats.DISMISS_SENTIMENT_NEGATIVE,
+ r.getStats().getDismissalSentiment());
+ }
+
+ @Test
public void testApplyAdjustmentMultiUser() throws Exception {
final NotificationRecord r = generateNotificationRecord(mTestNotificationChannel);
mService.addNotification(r);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java
index 0a630f4..bae8564 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java
@@ -16,6 +16,8 @@
package com.android.server.notification;
import static android.service.notification.NotificationStats.DISMISSAL_PEEK;
+import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEGATIVE;
+import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_POSITIVE;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
@@ -46,6 +48,7 @@
assertFalse(stats.hasViewedSettings());
assertFalse(stats.hasSnoozed());
assertEquals(NotificationStats.DISMISSAL_NOT_DISMISSED, stats.getDismissalSurface());
+ assertEquals(NotificationStats.DISMISS_SENTIMENT_UNKNOWN, stats.getDismissalSentiment());
}
@Test
@@ -97,10 +100,19 @@
}
@Test
+ public void testDismissalSentiment() {
+ NotificationStats stats = new NotificationStats();
+ stats.setDismissalSentiment(DISMISS_SENTIMENT_NEGATIVE);
+ assertEquals(DISMISS_SENTIMENT_NEGATIVE, stats.getDismissalSentiment());
+ assertFalse(stats.hasInteracted());
+ }
+
+ @Test
public void testWriteToParcel() {
NotificationStats stats = new NotificationStats();
stats.setViewedSettings();
stats.setDismissalSurface(NotificationStats.DISMISSAL_AOD);
+ stats.setDismissalSentiment(NotificationStats.DISMISS_SENTIMENT_POSITIVE);
Parcel parcel = Parcel.obtain();
stats.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
index a032f70..91f4bc8 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
@@ -296,23 +296,39 @@
@Test
public void testZenUpgradeNotification() {
- // shows zen upgrade notification if stored settings says to shows, boot is completed
+ // shows zen upgrade notification if stored settings says to shows,
+ // zen has not been updated, boot is completed
// and we're setting zen mode on
- Settings.Global.putInt(mContentResolver, Settings.Global.SHOW_ZEN_UPGRADE_NOTIFICATION, 1);
+ Settings.Secure.putInt(mContentResolver, Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 1);
+ Settings.Secure.putInt(mContentResolver, Settings.Secure.ZEN_SETTINGS_UPDATED, 0);
mZenModeHelperSpy.mIsBootComplete = true;
mZenModeHelperSpy.setZenModeSetting(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
verify(mZenModeHelperSpy, times(1)).createZenUpgradeNotification();
verify(mNotificationManager, times(1)).notify(eq(ZenModeHelper.TAG),
eq(SystemMessage.NOTE_ZEN_UPGRADE), any());
- assertEquals(0, Settings.Global.getInt(mContentResolver,
- Settings.Global.SHOW_ZEN_UPGRADE_NOTIFICATION, -1));
+ assertEquals(0, Settings.Secure.getInt(mContentResolver,
+ Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, -1));
}
@Test
public void testNoZenUpgradeNotification() {
// doesn't show upgrade notification if stored settings says don't show
- Settings.Global.putInt(mContentResolver, Settings.Global.SHOW_ZEN_UPGRADE_NOTIFICATION, 0);
+ Settings.Secure.putInt(mContentResolver, Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 0);
+ Settings.Secure.putInt(mContentResolver, Settings.Secure.ZEN_SETTINGS_UPDATED, 0);
+ mZenModeHelperSpy.mIsBootComplete = true;
+ mZenModeHelperSpy.setZenModeSetting(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
+
+ verify(mZenModeHelperSpy, never()).createZenUpgradeNotification();
+ verify(mNotificationManager, never()).notify(eq(ZenModeHelper.TAG),
+ eq(SystemMessage.NOTE_ZEN_UPGRADE), any());
+ }
+
+ @Test
+ public void testNoZenUpgradeNotificationZenUpdated() {
+ // doesn't show upgrade notification since zen was already updated
+ Settings.Secure.putInt(mContentResolver, Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 0);
+ Settings.Secure.putInt(mContentResolver, Settings.Secure.ZEN_SETTINGS_UPDATED, 1);
mZenModeHelperSpy.mIsBootComplete = true;
mZenModeHelperSpy.setZenModeSetting(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index ab94093..a45d70b 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -22,6 +22,7 @@
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.os.PersistableBundle;
import android.os.RemoteException;
@@ -1212,6 +1213,7 @@
* disable_metered_apns}
* @hide
*/
+ @UnsupportedAppUsage
public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY =
"carrier_default_actions_on_redirection_string_array";
@@ -1824,6 +1826,7 @@
* Key identifying if voice call barring notification is required to be shown to the user.
* @hide
*/
+ @UnsupportedAppUsage
public static final String KEY_DISABLE_VOICE_BARRING_NOTIFICATION_BOOL =
"disable_voice_barring_notification_bool";
diff --git a/telephony/java/android/telephony/CellIdentityCdma.java b/telephony/java/android/telephony/CellIdentityCdma.java
index 2809066..5b67dc4 100644
--- a/telephony/java/android/telephony/CellIdentityCdma.java
+++ b/telephony/java/android/telephony/CellIdentityCdma.java
@@ -17,6 +17,7 @@
package android.telephony;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.text.TextUtils;
@@ -74,6 +75,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public CellIdentityCdma(int nid, int sid, int bid, int lon, int lat) {
this(nid, sid, bid, lon, lat, null, null);
}
diff --git a/telephony/java/android/telephony/CellIdentityGsm.java b/telephony/java/android/telephony/CellIdentityGsm.java
index 4031254..5c84791 100644
--- a/telephony/java/android/telephony/CellIdentityGsm.java
+++ b/telephony/java/android/telephony/CellIdentityGsm.java
@@ -17,6 +17,7 @@
package android.telephony;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.text.TextUtils;
@@ -34,13 +35,16 @@
// 16-bit GSM Cell Identity described in TS 27.007, 0..65535
private final int mCid;
// 16-bit GSM Absolute RF Channel Number
+ @UnsupportedAppUsage
private final int mArfcn;
// 6-bit Base Station Identity Code
+ @UnsupportedAppUsage
private final int mBsic;
/**
* @hide
*/
+ @UnsupportedAppUsage
public CellIdentityGsm() {
super(TAG, CellInfo.TYPE_GSM, null, null, null, null);
mLac = Integer.MAX_VALUE;
diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java
index 5257372..65c904b 100644
--- a/telephony/java/android/telephony/CellIdentityLte.java
+++ b/telephony/java/android/telephony/CellIdentityLte.java
@@ -17,6 +17,7 @@
package android.telephony;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.text.TextUtils;
@@ -36,6 +37,7 @@
// 16-bit tracking area code
private final int mTac;
// 18-bit Absolute RF Channel Number
+ @UnsupportedAppUsage
private final int mEarfcn;
// cell bandwidth, in kHz
private final int mBandwidth;
@@ -43,6 +45,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public CellIdentityLte() {
super(TAG, CellInfo.TYPE_LTE, null, null, null, null);
mCi = Integer.MAX_VALUE;
@@ -62,6 +65,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public CellIdentityLte(int mcc, int mnc, int ci, int pci, int tac) {
this(ci, pci, tac, Integer.MAX_VALUE, Integer.MAX_VALUE, String.valueOf(mcc),
String.valueOf(mnc), null, null);
diff --git a/telephony/java/android/telephony/CellIdentityWcdma.java b/telephony/java/android/telephony/CellIdentityWcdma.java
index a4ac8e3..e26fcb3 100644
--- a/telephony/java/android/telephony/CellIdentityWcdma.java
+++ b/telephony/java/android/telephony/CellIdentityWcdma.java
@@ -17,6 +17,7 @@
package android.telephony;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.text.TextUtils;
@@ -36,6 +37,7 @@
// 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511
private final int mPsc;
// 16-bit UMTS Absolute RF Channel Number described in TS 25.101 sec. 5.4.4
+ @UnsupportedAppUsage
private final int mUarfcn;
/**
diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java
index 6b320f4..4fe1b01 100644
--- a/telephony/java/android/telephony/CellInfo.java
+++ b/telephony/java/android/telephony/CellInfo.java
@@ -18,6 +18,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -70,14 +71,19 @@
// Type to distinguish where time stamp gets recorded.
/** @hide */
+ @UnsupportedAppUsage
public static final int TIMESTAMP_TYPE_UNKNOWN = 0;
/** @hide */
+ @UnsupportedAppUsage
public static final int TIMESTAMP_TYPE_ANTENNA = 1;
/** @hide */
+ @UnsupportedAppUsage
public static final int TIMESTAMP_TYPE_MODEM = 2;
/** @hide */
+ @UnsupportedAppUsage
public static final int TIMESTAMP_TYPE_OEM_RIL = 3;
/** @hide */
+ @UnsupportedAppUsage
public static final int TIMESTAMP_TYPE_JAVA_RIL = 4;
/** @hide */
@@ -184,6 +190,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getTimeStampType() {
return mTimeStampType;
}
@@ -223,6 +230,7 @@
}
}
+ @UnsupportedAppUsage
private static String timeStampTypeToString(int type) {
switch (type) {
case 1:
diff --git a/telephony/java/android/telephony/CellInfoCdma.java b/telephony/java/android/telephony/CellInfoCdma.java
index 8b8d1bb..f67733d 100644
--- a/telephony/java/android/telephony/CellInfoCdma.java
+++ b/telephony/java/android/telephony/CellInfoCdma.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.Rlog;
@@ -32,6 +33,7 @@
private CellSignalStrengthCdma mCellSignalStrengthCdma;
/** @hide */
+ @UnsupportedAppUsage
public CellInfoCdma() {
super();
mCellIdentityCdma = new CellIdentityCdma();
@@ -39,6 +41,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public CellInfoCdma(CellInfoCdma ci) {
super(ci);
this.mCellIdentityCdma = ci.mCellIdentityCdma.copy();
@@ -50,6 +53,7 @@
return mCellIdentityCdma;
}
/** @hide */
+ @UnsupportedAppUsage
public void setCellIdentity(CellIdentityCdma cid) {
mCellIdentityCdma = cid;
}
diff --git a/telephony/java/android/telephony/CellInfoGsm.java b/telephony/java/android/telephony/CellInfoGsm.java
index f7af1b2..7211de1 100644
--- a/telephony/java/android/telephony/CellInfoGsm.java
+++ b/telephony/java/android/telephony/CellInfoGsm.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.Rlog;
@@ -32,6 +33,7 @@
private CellSignalStrengthGsm mCellSignalStrengthGsm;
/** @hide */
+ @UnsupportedAppUsage
public CellInfoGsm() {
super();
mCellIdentityGsm = new CellIdentityGsm();
diff --git a/telephony/java/android/telephony/CellInfoLte.java b/telephony/java/android/telephony/CellInfoLte.java
index 97d856e..389f643 100644
--- a/telephony/java/android/telephony/CellInfoLte.java
+++ b/telephony/java/android/telephony/CellInfoLte.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.Rlog;
@@ -32,6 +33,7 @@
private CellSignalStrengthLte mCellSignalStrengthLte;
/** @hide */
+ @UnsupportedAppUsage
public CellInfoLte() {
super();
mCellIdentityLte = new CellIdentityLte();
@@ -51,6 +53,7 @@
return mCellIdentityLte;
}
/** @hide */
+ @UnsupportedAppUsage
public void setCellIdentity(CellIdentityLte cid) {
if (DBG) log("setCellIdentity: " + cid);
mCellIdentityLte = cid;
@@ -62,6 +65,7 @@
return mCellSignalStrengthLte;
}
/** @hide */
+ @UnsupportedAppUsage
public void setCellSignalStrength(CellSignalStrengthLte css) {
if (DBG) log("setCellSignalStrength: " + css);
mCellSignalStrengthLte = css;
diff --git a/telephony/java/android/telephony/CellLocation.java b/telephony/java/android/telephony/CellLocation.java
index 5bcaa6e..0133153 100644
--- a/telephony/java/android/telephony/CellLocation.java
+++ b/telephony/java/android/telephony/CellLocation.java
@@ -20,6 +20,7 @@
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.annotation.UnsupportedAppUsage;
import android.telephony.cdma.CdmaCellLocation;
import android.telephony.gsm.GsmCellLocation;
import com.android.internal.telephony.ITelephony;
@@ -57,6 +58,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static CellLocation newFromBundle(Bundle bundle) {
// TelephonyManager.getDefault().getCurrentPhoneType() handles the case when
// ITelephony interface is not up yet.
@@ -73,11 +75,13 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public abstract void fillInNotifierBundle(Bundle bundle);
/**
* @hide
*/
+ @UnsupportedAppUsage
public abstract boolean isEmpty();
/**
diff --git a/telephony/java/android/telephony/CellSignalStrengthGsm.java b/telephony/java/android/telephony/CellSignalStrengthGsm.java
index cff159b..1e8d119 100644
--- a/telephony/java/android/telephony/CellSignalStrengthGsm.java
+++ b/telephony/java/android/telephony/CellSignalStrengthGsm.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.Rlog;
@@ -34,11 +35,15 @@
private static final int GSM_SIGNAL_STRENGTH_GOOD = 8;
private static final int GSM_SIGNAL_STRENGTH_MODERATE = 5;
+ @UnsupportedAppUsage
private int mSignalStrength; // in ASU; Valid values are (0-31, 99) as defined in TS 27.007 8.5
+ @UnsupportedAppUsage
private int mBitErrorRate; // bit error rate (0-7, 99) as defined in TS 27.007 8.5
+ @UnsupportedAppUsage
private int mTimingAdvance; // range from 0-219 or Integer.MAX_VALUE if unknown
/** @hide */
+ @UnsupportedAppUsage
public CellSignalStrengthGsm() {
setDefaultValues();
}
diff --git a/telephony/java/android/telephony/CellSignalStrengthLte.java b/telephony/java/android/telephony/CellSignalStrengthLte.java
index 2f059f4..ed7d4b2 100644
--- a/telephony/java/android/telephony/CellSignalStrengthLte.java
+++ b/telephony/java/android/telephony/CellSignalStrengthLte.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.Rlog;
@@ -30,14 +31,21 @@
private static final String LOG_TAG = "CellSignalStrengthLte";
private static final boolean DBG = false;
+ @UnsupportedAppUsage
private int mSignalStrength;
+ @UnsupportedAppUsage
private int mRsrp;
+ @UnsupportedAppUsage
private int mRsrq;
+ @UnsupportedAppUsage
private int mRssnr;
+ @UnsupportedAppUsage
private int mCqi;
+ @UnsupportedAppUsage
private int mTimingAdvance;
/** @hide */
+ @UnsupportedAppUsage
public CellSignalStrengthLte() {
setDefaultValues();
}
diff --git a/telephony/java/android/telephony/CellSignalStrengthWcdma.java b/telephony/java/android/telephony/CellSignalStrengthWcdma.java
index 21cf0be..66e0882 100644
--- a/telephony/java/android/telephony/CellSignalStrengthWcdma.java
+++ b/telephony/java/android/telephony/CellSignalStrengthWcdma.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.Rlog;
@@ -34,8 +35,10 @@
private static final int WCDMA_SIGNAL_STRENGTH_GOOD = 8;
private static final int WCDMA_SIGNAL_STRENGTH_MODERATE = 5;
+ @UnsupportedAppUsage
private int mSignalStrength; // in ASU; Valid values are (0-31, 99) as defined in TS 27.007 8.5
// or Integer.MAX_VALUE if unknown
+ @UnsupportedAppUsage
private int mBitErrorRate; // bit error rate (0-7, 99) as defined in TS 27.007 8.5 or
// Integer.MAX_VALUE if unknown
private int mRscp; // bit error rate (0-96, 255) as defined in TS 27.007 8.69 or
diff --git a/telephony/java/android/telephony/DisconnectCause.java b/telephony/java/android/telephony/DisconnectCause.java
index 4fa304a..ee5cdc2 100644
--- a/telephony/java/android/telephony/DisconnectCause.java
+++ b/telephony/java/android/telephony/DisconnectCause.java
@@ -16,6 +16,8 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
+
/**
* Contains disconnect call causes generated by the framework and the RIL.
* @hide
@@ -329,6 +331,7 @@
}
/** Returns descriptive string for the specified disconnect cause. */
+ @UnsupportedAppUsage
public static String toString(int cause) {
switch (cause) {
case NOT_DISCONNECTED:
diff --git a/telephony/java/android/telephony/ModemInfo.java b/telephony/java/android/telephony/ModemInfo.java
new file mode 100644
index 0000000..564effe
--- /dev/null
+++ b/telephony/java/android/telephony/ModemInfo.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.telephony;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * Information of a single logical modem indicating
+ * its id, supported rats and whether it supports voice or data, etc.
+ * @hide
+ */
+public class ModemInfo implements Parcelable {
+ public final int modemId;
+ public final int rat; /* bitset */
+ public final boolean isVoiceSupported;
+ public final boolean isDataSupported;
+
+ public ModemInfo(int modemId, int rat, boolean isVoiceSupported, boolean isDataSupported) {
+ this.modemId = modemId;
+ this.rat = rat;
+ this.isVoiceSupported = isVoiceSupported;
+ this.isDataSupported = isDataSupported;
+ }
+
+ public ModemInfo(Parcel in) {
+ modemId = in.readInt();
+ rat = in.readInt();
+ isVoiceSupported = in.readBoolean();
+ isDataSupported = in.readBoolean();
+ }
+
+ @Override
+ public String toString() {
+ return "modemId=" + modemId + " rat=" + rat + " isVoiceSupported:" + isVoiceSupported
+ + " isDataSupported:" + isDataSupported;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(modemId, rat, isVoiceSupported, isDataSupported);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == null || !(o instanceof ModemInfo) || hashCode() != o.hashCode()) {
+ return false;
+ }
+
+ if (this == o) {
+ return true;
+ }
+
+ ModemInfo s = (ModemInfo) o;
+
+ return (modemId == s.modemId
+ && rat == s.rat
+ && isVoiceSupported == s.isVoiceSupported
+ && isDataSupported == s.isDataSupported);
+ }
+
+ /**
+ * {@link Parcelable#describeContents}
+ */
+ public @ContentsFlags int describeContents() {
+ return 0;
+ }
+
+ /**
+ * {@link Parcelable#writeToParcel}
+ */
+ public void writeToParcel(Parcel dest, @WriteFlags int flags) {
+ dest.writeInt(modemId);
+ dest.writeInt(rat);
+ dest.writeBoolean(isVoiceSupported);
+ dest.writeBoolean(isDataSupported);
+ }
+
+ public static final Parcelable.Creator<ModemInfo> CREATOR = new Parcelable.Creator() {
+ public ModemInfo createFromParcel(Parcel in) {
+ return new ModemInfo(in);
+ }
+
+ public ModemInfo[] newArray(int size) {
+ return new ModemInfo[size];
+ }
+ };
+}
diff --git a/telephony/java/android/telephony/NeighboringCellInfo.java b/telephony/java/android/telephony/NeighboringCellInfo.java
index b7ccee5..8e99518 100644
--- a/telephony/java/android/telephony/NeighboringCellInfo.java
+++ b/telephony/java/android/telephony/NeighboringCellInfo.java
@@ -24,6 +24,7 @@
import static android.telephony.TelephonyManager.NETWORK_TYPE_UMTS;
import static android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -47,24 +48,29 @@
* In GSM, mRssi is the Received RSSI;
* In UMTS, mRssi is the Level index of CPICH Received Signal Code Power
*/
+ @UnsupportedAppUsage
private int mRssi;
/**
* CID in 16 bits format in GSM. Return UNKNOWN_CID in UMTS and CMDA.
*/
+ @UnsupportedAppUsage
private int mCid;
/**
* LAC in 16 bits format in GSM. Return UNKNOWN_CID in UMTS and CMDA.
*/
+ @UnsupportedAppUsage
private int mLac;
/**
* Primary Scrambling Code in 9 bits format in UMTS
* Return UNKNOWN_CID in GSM and CMDA.
*/
+ @UnsupportedAppUsage
private int mPsc;
/**
* Radio network type, value is one of following
* TelephonyManager.NETWORK_TYPE_XXXXXX.
*/
+ @UnsupportedAppUsage
private int mNetworkType;
/**
diff --git a/telephony/java/android/telephony/PhoneCapability.aidl b/telephony/java/android/telephony/PhoneCapability.aidl
new file mode 100644
index 0000000..5de8d4a
--- /dev/null
+++ b/telephony/java/android/telephony/PhoneCapability.aidl
@@ -0,0 +1,20 @@
+/*
+**
+** 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.
+*/
+
+package android.telephony;
+
+parcelable PhoneCapability;
\ No newline at end of file
diff --git a/telephony/java/android/telephony/PhoneCapability.java b/telephony/java/android/telephony/PhoneCapability.java
new file mode 100644
index 0000000..2ebfa53
--- /dev/null
+++ b/telephony/java/android/telephony/PhoneCapability.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.telephony;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Define capability of a modem group. That is, the capabilities
+ * are shared between those modems defined by list of modem IDs.
+ * @hide
+ */
+public class PhoneCapability implements Parcelable {
+ public final int maxActiveVoiceCalls;
+ public final int maxActiveData;
+ public final int max5G;
+ public final List<ModemInfo> logicalModemList;
+
+ public PhoneCapability(int maxActiveVoiceCalls, int maxActiveData, int max5G,
+ List<ModemInfo> logicalModemList) {
+ this.maxActiveVoiceCalls = maxActiveVoiceCalls;
+ this.maxActiveData = maxActiveData;
+ this.max5G = max5G;
+ // Make sure it's not null.
+ this.logicalModemList = logicalModemList == null ? new ArrayList<>() : logicalModemList;
+ }
+
+ @Override
+ public String toString() {
+ return "maxActiveVoiceCalls=" + maxActiveVoiceCalls + " maxActiveData=" + maxActiveData
+ + " max5G=" + max5G + "logicalModemList:"
+ + Arrays.toString(logicalModemList.toArray());
+ }
+
+ private PhoneCapability(Parcel in) {
+ maxActiveVoiceCalls = in.readInt();
+ maxActiveData = in.readInt();
+ max5G = in.readInt();
+ logicalModemList = new ArrayList<>();
+ in.readList(logicalModemList, ModemInfo.class.getClassLoader());
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(maxActiveVoiceCalls, maxActiveData, max5G, logicalModemList);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == null || !(o instanceof PhoneCapability) || hashCode() != o.hashCode()) {
+ return false;
+ }
+
+ if (this == o) {
+ return true;
+ }
+
+ PhoneCapability s = (PhoneCapability) o;
+
+ return (maxActiveVoiceCalls == s.maxActiveVoiceCalls
+ && maxActiveData == s.maxActiveData
+ && max5G == s.max5G
+ && logicalModemList.equals(s.logicalModemList));
+ }
+
+ /**
+ * {@link Parcelable#describeContents}
+ */
+ public @Parcelable.ContentsFlags int describeContents() {
+ return 0;
+ }
+
+ /**
+ * {@link Parcelable#writeToParcel}
+ */
+ public void writeToParcel(Parcel dest, @Parcelable.WriteFlags int flags) {
+ dest.writeInt(maxActiveVoiceCalls);
+ dest.writeInt(maxActiveData);
+ dest.writeInt(max5G);
+ dest.writeList(logicalModemList);
+ }
+
+ public static final Parcelable.Creator<PhoneCapability> CREATOR = new Parcelable.Creator() {
+ public PhoneCapability createFromParcel(Parcel in) {
+ return new PhoneCapability(in);
+ }
+
+ public PhoneCapability[] newArray(int size) {
+ return new PhoneCapability[size];
+ }
+ };
+}
diff --git a/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java b/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java
index f7dee99..ac6bcaa 100644
--- a/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java
+++ b/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java
@@ -19,6 +19,7 @@
import com.android.i18n.phonenumbers.AsYouTypeFormatter;
import com.android.i18n.phonenumbers.PhoneNumberUtil;
+import android.annotation.UnsupportedAppUsage;
import android.telephony.PhoneNumberUtils;
import android.text.Editable;
import android.text.Selection;
@@ -50,6 +51,7 @@
*/
private boolean mStopFormatting;
+ @UnsupportedAppUsage
private AsYouTypeFormatter mFormatter;
/**
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index fadfc91..f6e8d34 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -23,6 +23,7 @@
import com.android.i18n.phonenumbers.ShortNumberInfo;
import android.annotation.IntDef;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
@@ -279,6 +280,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static String extractNetworkPortionAlt(String phoneNumber) {
if (phoneNumber == null) {
return null;
@@ -352,6 +354,7 @@
* RFC 3601 says pause is 'p' and tonewait is 'w'.
* @hide
*/
+ @UnsupportedAppUsage
public static String convertPreDial(String phoneNumber) {
if (phoneNumber == null) {
return null;
@@ -464,6 +467,7 @@
/**
* @hide only for testing.
*/
+ @UnsupportedAppUsage
public static boolean compare(String a, String b, boolean useStrictComparation) {
return (useStrictComparation ? compareStrictly(a, b) : compareLoosely(a, b));
}
@@ -482,6 +486,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static boolean
compareLoosely(String a, String b) {
int ia, ib;
@@ -579,6 +584,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public static boolean
compareStrictly(String a, String b) {
return compareStrictly(a, b, true);
@@ -587,6 +593,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public static boolean
compareStrictly(String a, String b, boolean acceptInvalidCCCPrefix) {
if (a == null || b == null) {
@@ -1260,6 +1267,7 @@
* @deprecated Use link #formatNumber(String phoneNumber, String defaultCountryIso) instead
*/
@Deprecated
+ @UnsupportedAppUsage
public static String formatNumber(String source, int defaultFormattingType) {
SpannableStringBuilder text = new SpannableStringBuilder(source);
formatNumber(text, defaultFormattingType);
@@ -1720,6 +1728,7 @@
//
// However, in order to loose match 650-555-1212 and 555-1212, we need to set the min match
// to 7.
+ @UnsupportedAppUsage
static final int MIN_MATCH = 7;
/**
@@ -1744,6 +1753,7 @@
* listed in the RIL / SIM, otherwise return false.
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isEmergencyNumber(int subId, String number) {
// Return true only if the specified number *exactly* matches
// one of the emergency numbers listed by the RIL / SIM.
@@ -1794,6 +1804,7 @@
* same digits as any of those emergency numbers.
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isPotentialEmergencyNumber(int subId, String number) {
// Check against the emergency numbers listed by the RIL / SIM,
// and *don't* require an exact match.
@@ -1858,6 +1869,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isEmergencyNumber(String number, String defaultCountryIso) {
return isEmergencyNumber(getDefaultVoiceSubId(), number, defaultCountryIso);
}
@@ -2081,6 +2093,7 @@
* is currently in.
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isLocalEmergencyNumber(Context context, int subId, String number) {
return isLocalEmergencyNumberInternal(subId, number,
context,
@@ -2109,6 +2122,7 @@
* @see android.location.CountryDetector
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isPotentialLocalEmergencyNumber(Context context, String number) {
return isPotentialLocalEmergencyNumber(context, getDefaultVoiceSubId(), number);
}
@@ -2135,6 +2149,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isPotentialLocalEmergencyNumber(Context context, int subId,
String number) {
return isLocalEmergencyNumberInternal(subId, number,
@@ -2244,6 +2259,7 @@
* to read the VM number.
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isVoiceMailNumber(Context context, int subId, String number) {
String vmNumber, mdn;
try {
@@ -2390,6 +2406,7 @@
*
* @hide TODO: pending API Council approval
*/
+ @UnsupportedAppUsage
public static String cdmaCheckAndProcessPlusCode(String dialStr) {
if (!TextUtils.isEmpty(dialStr)) {
if (isReallyDialable(dialStr.charAt(0)) &&
@@ -2569,6 +2586,7 @@
* @hide
*/
@Deprecated
+ @UnsupportedAppUsage
public static CharSequence ttsSpanAsPhoneNumber(CharSequence phoneNumber) {
return createTtsSpannable(phoneNumber);
}
@@ -2680,6 +2698,7 @@
* i.e. NXX-NXX-XXXX, N is any digit 2-9 and X is any digit 0-9
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isNanp (String dialStr) {
boolean retVal = false;
if (dialStr != null) {
@@ -2727,6 +2746,7 @@
* @param number
* @return true if number contains @
*/
+ @UnsupportedAppUsage
public static boolean isUriNumber(String number) {
// Note we allow either "@" or "%40" to indicate a URI, in case
// the passed-in string is URI-escaped. (Neither "@" nor "%40"
@@ -2744,6 +2764,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static String getUsernameFromUriNumber(String number) {
// The delimiter between username and domain name can be
// either "@" or "%40" (the URI-escaped equivalent.)
diff --git a/telephony/java/android/telephony/PhoneStateListener.java b/telephony/java/android/telephony/PhoneStateListener.java
index 8420165..bd6a59d 100644
--- a/telephony/java/android/telephony/PhoneStateListener.java
+++ b/telephony/java/android/telephony/PhoneStateListener.java
@@ -17,16 +17,16 @@
package android.telephony;
import android.annotation.NonNull;
+import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
-import android.telecom.TelecomManager;
import com.android.internal.telephony.IPhoneStateListener;
-import java.util.List;
import java.lang.ref.WeakReference;
+import java.util.List;
/**
* A listener class for monitoring changes in specific telephony states
@@ -171,6 +171,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static final int LISTEN_PRECISE_CALL_STATE = 0x00000800;
/**
@@ -271,11 +272,20 @@
*/
public static final int LISTEN_PHYSICAL_CHANNEL_CONFIGURATION = 0x00100000;
+ /**
+ * Listen for changes to the phone capability.
+ *
+ * @see #onPhoneCapabilityChanged
+ * @hide
+ */
+ public static final int LISTEN_PHONE_CAPABILITY_CHANGE = 0x00200000;
+
/*
* Subscription used to listen to the phone state changes
* @hide
*/
/** @hide */
+ @UnsupportedAppUsage
protected Integer mSubId;
private final Handler mHandler;
@@ -293,6 +303,7 @@
* using a particular non-null Looper.
* @hide
*/
+ @UnsupportedAppUsage
public PhoneStateListener(Looper looper) {
this(null, looper);
}
@@ -303,6 +314,7 @@
* own non-null Looper use PhoneStateListener(int subId, Looper looper) below.
* @hide
*/
+ @UnsupportedAppUsage
public PhoneStateListener(Integer subId) {
this(subId, Looper.myLooper());
}
@@ -312,6 +324,7 @@
* and non-null Looper.
* @hide
*/
+ @UnsupportedAppUsage
public PhoneStateListener(Integer subId, Looper looper) {
if (DBG) log("ctor: subId=" + subId + " looper=" + looper);
mSubId = subId;
@@ -389,6 +402,10 @@
PhoneStateListener.this.onPhysicalChannelConfigurationChanged(
(List<PhysicalChannelConfig>)msg.obj);
break;
+ case LISTEN_PHONE_CAPABILITY_CHANGE:
+ PhoneStateListener.this.onPhoneCapabilityChanged(
+ (PhoneCapability) msg.obj);
+ break;
}
}
};
@@ -515,6 +532,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void onOtaspChanged(int otaspMode) {
// default implementation empty
}
@@ -532,6 +550,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void onPreciseCallStateChanged(PreciseCallState callState) {
// default implementation empty
}
@@ -541,6 +560,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void onPreciseDataConnectionStateChanged(
PreciseDataConnectionState dataConnectionState) {
// default implementation empty
@@ -551,6 +571,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void onDataConnectionRealTimeInfoChanged(
DataConnectionRealTimeInfo dcRtInfo) {
// default implementation empty
@@ -562,6 +583,7 @@
* @param stateInfo is the current LTE network information
* @hide
*/
+ @UnsupportedAppUsage
public void onVoLteServiceStateChanged(VoLteServiceState stateInfo) {
}
@@ -608,11 +630,22 @@
* @param rawData is the byte array of the OEM hook raw data.
* @hide
*/
+ @UnsupportedAppUsage
public void onOemHookRawEvent(byte[] rawData) {
// default implementation empty
}
/**
+ * Callback invoked when phone capability changes. Requires
+ * the READ_PRIVILEGED_PHONE_STATE permission.
+ * @param capability the new phone capability
+ * @hide
+ */
+ public void onPhoneCapabilityChanged(PhoneCapability capability) {
+ // default implementation empty
+ }
+
+ /**
* Callback invoked when telephony has received notice from a carrier
* app that a network action that could result in connectivity loss
* has been requested by an app using
@@ -739,8 +772,13 @@
public void onPhysicalChannelConfigurationChanged(List<PhysicalChannelConfig> configs) {
send(LISTEN_PHYSICAL_CHANNEL_CONFIGURATION, 0, 0, configs);
}
+
+ public void onPhoneCapabilityChanged(PhoneCapability capability) {
+ send(LISTEN_PHONE_CAPABILITY_CHANGE, 0, 0, capability);
+ }
}
+ @UnsupportedAppUsage
IPhoneStateListener callback = new IPhoneStateListenerStub(this);
private void log(String s) {
diff --git a/telephony/java/android/telephony/PreciseCallState.java b/telephony/java/android/telephony/PreciseCallState.java
index f246416..ed5c26a 100644
--- a/telephony/java/android/telephony/PreciseCallState.java
+++ b/telephony/java/android/telephony/PreciseCallState.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.DisconnectCause;
@@ -71,6 +72,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public PreciseCallState(int ringingCall, int foregroundCall, int backgroundCall,
int disconnectCause, int preciseDisconnectCause) {
mRingingCallState = ringingCall;
@@ -113,6 +115,7 @@
* @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTED
* @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTING
*/
+ @UnsupportedAppUsage
public int getRingingCallState() {
return mRingingCallState;
}
@@ -131,6 +134,7 @@
* @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTED
* @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTING
*/
+ @UnsupportedAppUsage
public int getForegroundCallState() {
return mForegroundCallState;
}
@@ -149,6 +153,7 @@
* @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTED
* @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTING
*/
+ @UnsupportedAppUsage
public int getBackgroundCallState() {
return mBackgroundCallState;
}
@@ -195,6 +200,7 @@
* @see DisconnectCause#CDMA_ACCESS_BLOCKED
* @see DisconnectCause#ERROR_UNSPECIFIED
*/
+ @UnsupportedAppUsage
public int getDisconnectCause() {
return mDisconnectCause;
}
@@ -233,6 +239,7 @@
* @see PreciseDisconnectCause#CDMA_ACCESS_BLOCKED
* @see PreciseDisconnectCause#ERROR_UNSPECIFIED
*/
+ @UnsupportedAppUsage
public int getPreciseDisconnectCause() {
return mPreciseDisconnectCause;
}
diff --git a/telephony/java/android/telephony/PreciseDataConnectionState.java b/telephony/java/android/telephony/PreciseDataConnectionState.java
index 31c9a9e..b258f52 100644
--- a/telephony/java/android/telephony/PreciseDataConnectionState.java
+++ b/telephony/java/android/telephony/PreciseDataConnectionState.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.TelephonyManager;
@@ -53,6 +54,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public PreciseDataConnectionState(int state, int networkType,
String apnType, String apn, String reason,
LinkProperties linkProperties, String failCause) {
@@ -95,6 +97,7 @@
* @see TelephonyManager#DATA_CONNECTED
* @see TelephonyManager#DATA_SUSPENDED
*/
+ @UnsupportedAppUsage
public int getDataConnectionState() {
return mState;
}
@@ -119,6 +122,7 @@
* @see TelephonyManager#NETWORK_TYPE_EHRPD
* @see TelephonyManager#NETWORK_TYPE_HSPAP
*/
+ @UnsupportedAppUsage
public int getDataConnectionNetworkType() {
return mNetworkType;
}
@@ -126,6 +130,7 @@
/**
* Get data connection APN type
*/
+ @UnsupportedAppUsage
public String getDataConnectionAPNType() {
return mAPNType;
}
@@ -133,6 +138,7 @@
/**
* Get data connection APN.
*/
+ @UnsupportedAppUsage
public String getDataConnectionAPN() {
return mAPN;
}
@@ -140,6 +146,7 @@
/**
* Get data connection change reason.
*/
+ @UnsupportedAppUsage
public String getDataConnectionChangeReason() {
return mReason;
}
@@ -147,6 +154,7 @@
/**
* Get the properties of the network link.
*/
+ @UnsupportedAppUsage
public LinkProperties getDataConnectionLinkProperties() {
return mLinkProperties;
}
@@ -154,6 +162,7 @@
/**
* Get data connection fail cause, in case there was a failure.
*/
+ @UnsupportedAppUsage
public String getDataConnectionFailCause() {
return mFailCause;
}
diff --git a/telephony/java/android/telephony/RadioAccessFamily.java b/telephony/java/android/telephony/RadioAccessFamily.java
index d657bae..1d79988 100644
--- a/telephony/java/android/telephony/RadioAccessFamily.java
+++ b/telephony/java/android/telephony/RadioAccessFamily.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -77,6 +78,7 @@
* in RadioAccessFamily. It's a bit mask value to represent
* the support type.
*/
+ @UnsupportedAppUsage
public RadioAccessFamily(int phoneId, int radioAccessFamily) {
mPhoneId = phoneId;
mRadioAccessFamily = radioAccessFamily;
@@ -87,6 +89,7 @@
*
* @return phone ID
*/
+ @UnsupportedAppUsage
public int getPhoneId() {
return mPhoneId;
}
@@ -96,6 +99,7 @@
*
* @return radio access family
*/
+ @UnsupportedAppUsage
public int getRadioAccessFamily() {
return mRadioAccessFamily;
}
@@ -150,6 +154,7 @@
}
};
+ @UnsupportedAppUsage
public static int getRafFromNetworkType(int type) {
int raf;
@@ -263,6 +268,7 @@
return TelephonyManager.NETWORK_CLASS_UNKNOWN;
}
+ @UnsupportedAppUsage
public static int getNetworkTypeFromRaf(int raf) {
int type;
diff --git a/telephony/java/android/telephony/Rlog.java b/telephony/java/android/telephony/Rlog.java
index e0b46e1..5f2fa33 100644
--- a/telephony/java/android/telephony/Rlog.java
+++ b/telephony/java/android/telephony/Rlog.java
@@ -20,6 +20,7 @@
import android.text.TextUtils;
import android.util.Log;
+import android.annotation.UnsupportedAppUsage;
import android.util.Base64;
import java.security.MessageDigest;
@@ -38,6 +39,7 @@
private Rlog() {
}
+ @UnsupportedAppUsage
public static int v(String tag, String msg) {
return Log.println_native(Log.LOG_ID_RADIO, Log.VERBOSE, tag, msg);
}
@@ -47,28 +49,34 @@
msg + '\n' + Log.getStackTraceString(tr));
}
+ @UnsupportedAppUsage
public static int d(String tag, String msg) {
return Log.println_native(Log.LOG_ID_RADIO, Log.DEBUG, tag, msg);
}
+ @UnsupportedAppUsage
public static int d(String tag, String msg, Throwable tr) {
return Log.println_native(Log.LOG_ID_RADIO, Log.DEBUG, tag,
msg + '\n' + Log.getStackTraceString(tr));
}
+ @UnsupportedAppUsage
public static int i(String tag, String msg) {
return Log.println_native(Log.LOG_ID_RADIO, Log.INFO, tag, msg);
}
+ @UnsupportedAppUsage
public static int i(String tag, String msg, Throwable tr) {
return Log.println_native(Log.LOG_ID_RADIO, Log.INFO, tag,
msg + '\n' + Log.getStackTraceString(tr));
}
+ @UnsupportedAppUsage
public static int w(String tag, String msg) {
return Log.println_native(Log.LOG_ID_RADIO, Log.WARN, tag, msg);
}
+ @UnsupportedAppUsage
public static int w(String tag, String msg, Throwable tr) {
return Log.println_native(Log.LOG_ID_RADIO, Log.WARN, tag,
msg + '\n' + Log.getStackTraceString(tr));
@@ -78,10 +86,12 @@
return Log.println_native(Log.LOG_ID_RADIO, Log.WARN, tag, Log.getStackTraceString(tr));
}
+ @UnsupportedAppUsage
public static int e(String tag, String msg) {
return Log.println_native(Log.LOG_ID_RADIO, Log.ERROR, tag, msg);
}
+ @UnsupportedAppUsage
public static int e(String tag, String msg, Throwable tr) {
return Log.println_native(Log.LOG_ID_RADIO, Log.ERROR, tag,
msg + '\n' + Log.getStackTraceString(tr));
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index 9e8529e..2ee1a09 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.annotation.SystemApi;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -169,6 +170,7 @@
* IWLAN
* @hide
*/
+ @UnsupportedAppUsage
public static final int RIL_RADIO_TECHNOLOGY_IWLAN = 18;
/**
@@ -233,6 +235,7 @@
private String mDataOperatorAlphaLong;
private String mDataOperatorAlphaShort;
private String mDataOperatorNumeric;
+ @UnsupportedAppUsage
private boolean mIsManualNetworkSelection;
private boolean mIsEmergencyOnly;
@@ -240,16 +243,24 @@
private int mRilVoiceRadioTechnology;
private int mRilDataRadioTechnology;
+ @UnsupportedAppUsage
private boolean mCssIndicator;
+ @UnsupportedAppUsage
private int mNetworkId;
+ @UnsupportedAppUsage
private int mSystemId;
+ @UnsupportedAppUsage
private int mCdmaRoamingIndicator;
+ @UnsupportedAppUsage
private int mCdmaDefaultRoamingIndicator;
+ @UnsupportedAppUsage
private int mCdmaEriIconIndex;
+ @UnsupportedAppUsage
private int mCdmaEriIconMode;
private boolean mIsDataRoamingFromRegistration;
+ @UnsupportedAppUsage
private boolean mIsUsingCarrierAggregation;
private int mChannelNumber;
@@ -294,6 +305,7 @@
* @return newly created ServiceState
* @hide
*/
+ @UnsupportedAppUsage
public static ServiceState newFromBundle(Bundle m) {
ServiceState ret;
ret = new ServiceState();
@@ -442,6 +454,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getVoiceRegState() {
return mVoiceRegState;
}
@@ -456,6 +469,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getDataRegState() {
return mDataRegState;
}
@@ -516,6 +530,7 @@
* @return roaming status
* @hide
*/
+ @UnsupportedAppUsage
public boolean getVoiceRoaming() {
return mVoiceRoamingType != ROAMING_TYPE_NOT_ROAMING;
}
@@ -525,6 +540,7 @@
* @return roaming type
* @hide
*/
+ @UnsupportedAppUsage
public int getVoiceRoamingType() {
return mVoiceRoamingType;
}
@@ -534,6 +550,7 @@
* @return roaming type
* @hide
*/
+ @UnsupportedAppUsage
public boolean getDataRoaming() {
return mDataRoamingType != ROAMING_TYPE_NOT_ROAMING;
}
@@ -545,6 +562,7 @@
* once the data registration phase has completed.
* @hide
*/
+ @UnsupportedAppUsage
public void setDataRoamingFromRegistration(boolean dataRoaming) {
mIsDataRoamingFromRegistration = dataRoaming;
}
@@ -563,6 +581,7 @@
* @return roaming type
* @hide
*/
+ @UnsupportedAppUsage
public int getDataRoamingType() {
return mDataRoamingType;
}
@@ -570,6 +589,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public boolean isEmergencyOnly() {
return mIsEmergencyOnly;
}
@@ -577,6 +597,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public int getCdmaRoamingIndicator(){
return this.mCdmaRoamingIndicator;
}
@@ -584,6 +605,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public int getCdmaDefaultRoamingIndicator(){
return this.mCdmaDefaultRoamingIndicator;
}
@@ -591,6 +613,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public int getCdmaEriIconIndex() {
return this.mCdmaEriIconIndex;
}
@@ -598,6 +621,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public int getCdmaEriIconMode() {
return this.mCdmaEriIconMode;
}
@@ -619,6 +643,7 @@
* @return long name of operator
* @hide
*/
+ @UnsupportedAppUsage
public String getVoiceOperatorAlphaLong() {
return mVoiceOperatorAlphaLong;
}
@@ -648,6 +673,7 @@
* @return short name of operator, null if unregistered or unknown
* @hide
*/
+ @UnsupportedAppUsage
public String getVoiceOperatorAlphaShort() {
return mVoiceOperatorAlphaShort;
}
@@ -657,6 +683,7 @@
* @return short name of operator, null if unregistered or unknown
* @hide
*/
+ @UnsupportedAppUsage
public String getDataOperatorAlphaShort() {
return mDataOperatorAlphaShort;
}
@@ -700,6 +727,7 @@
* @return numeric format of operator, null if unregistered or unknown
* @hide
*/
+ @UnsupportedAppUsage
public String getVoiceOperatorNumeric() {
return mVoiceOperatorNumeric;
}
@@ -709,6 +737,7 @@
* @return numeric format of operator, null if unregistered or unknown
* @hide
*/
+ @UnsupportedAppUsage
public String getDataOperatorNumeric() {
return mDataOperatorNumeric;
}
@@ -794,6 +823,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static String rilRadioTechnologyToString(int rt) {
String rtString;
@@ -968,12 +998,14 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void setVoiceRegState(int state) {
mVoiceRegState = state;
if (DBG) Rlog.d(LOG_TAG, "[ServiceState] setVoiceRegState=" + mVoiceRegState);
}
/** @hide */
+ @UnsupportedAppUsage
public void setDataRegState(int state) {
mDataRegState = state;
if (VDBG) Rlog.d(LOG_TAG, "[ServiceState] setDataRegState=" + mDataRegState);
@@ -997,21 +1029,25 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void setVoiceRoaming(boolean roaming) {
mVoiceRoamingType = (roaming ? ROAMING_TYPE_UNKNOWN : ROAMING_TYPE_NOT_ROAMING);
}
/** @hide */
+ @UnsupportedAppUsage
public void setVoiceRoamingType(int type) {
mVoiceRoamingType = type;
}
/** @hide */
+ @UnsupportedAppUsage
public void setDataRoaming(boolean dataRoaming) {
mDataRoamingType = (dataRoaming ? ROAMING_TYPE_UNKNOWN : ROAMING_TYPE_NOT_ROAMING);
}
/** @hide */
+ @UnsupportedAppUsage
public void setDataRoamingType(int type) {
mDataRoamingType = type;
}
@@ -1019,6 +1055,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public void setEmergencyOnly(boolean emergencyOnly) {
mIsEmergencyOnly = emergencyOnly;
}
@@ -1026,6 +1063,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public void setCdmaRoamingIndicator(int roaming) {
this.mCdmaRoamingIndicator = roaming;
}
@@ -1033,6 +1071,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public void setCdmaDefaultRoamingIndicator (int roaming) {
this.mCdmaDefaultRoamingIndicator = roaming;
}
@@ -1040,6 +1079,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public void setCdmaEriIconIndex(int index) {
this.mCdmaEriIconIndex = index;
}
@@ -1047,6 +1087,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
public void setCdmaEriIconMode(int mode) {
this.mCdmaEriIconMode = mode;
}
@@ -1080,6 +1121,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setOperatorAlphaLong(String longName) {
mVoiceOperatorAlphaLong = longName;
mDataOperatorAlphaLong = longName;
@@ -1106,6 +1148,7 @@
* @param b second obj
* @return true if two objects equal or both are null
*/
+ @UnsupportedAppUsage
private static boolean equalsHandlesNulls (Object a, Object b) {
return (a == null) ? (b == null) : a.equals (b);
}
@@ -1116,6 +1159,7 @@
* @param m intent notifier map
* @hide
*/
+ @UnsupportedAppUsage
private void setFromNotifierBundle(Bundle m) {
mVoiceRegState = m.getInt("voiceRegState");
mDataRegState = m.getInt("dataRegState");
@@ -1149,6 +1193,7 @@
* @param m intent notifier Bundle
* @hide
*/
+ @UnsupportedAppUsage
public void fillInNotifierBundle(Bundle m) {
m.putInt("voiceRegState", mVoiceRegState);
m.putInt("dataRegState", mDataRegState);
@@ -1221,6 +1266,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void setCssIndicator(int css) {
this.mCssIndicator = (css != 0);
}
@@ -1233,10 +1279,12 @@
}
/** @hide */
+ @UnsupportedAppUsage
public int getRilVoiceRadioTechnology() {
return this.mRilVoiceRadioTechnology;
}
/** @hide */
+ @UnsupportedAppUsage
public int getRilDataRadioTechnology() {
return this.mRilDataRadioTechnology;
}
@@ -1245,6 +1293,7 @@
* @Deprecated to be removed Q3 2013 use {@link #getRilDataRadioTechnology} or
* {@link #getRilVoiceRadioTechnology}
*/
+ @UnsupportedAppUsage
public int getRadioTechnology() {
Rlog.e(LOG_TAG, "ServiceState.getRadioTechnology() DEPRECATED will be removed *******");
return getRilDataRadioTechnology();
@@ -1374,16 +1423,19 @@
/** @hide */
+ @UnsupportedAppUsage
public int getDataNetworkType() {
return rilRadioTechnologyToNetworkType(mRilDataRadioTechnology);
}
/** @hide */
+ @UnsupportedAppUsage
public int getVoiceNetworkType() {
return rilRadioTechnologyToNetworkType(mRilVoiceRadioTechnology);
}
/** @hide */
+ @UnsupportedAppUsage
public int getCssIndicator() {
return this.mCssIndicator ? 1 : 0;
}
@@ -1407,6 +1459,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public static boolean isGsm(int radioTechnology) {
return radioTechnology == RIL_RADIO_TECHNOLOGY_GPRS
|| radioTechnology == RIL_RADIO_TECHNOLOGY_EDGE
@@ -1424,6 +1477,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public static boolean isCdma(int radioTechnology) {
return radioTechnology == RIL_RADIO_TECHNOLOGY_IS95A
|| radioTechnology == RIL_RADIO_TECHNOLOGY_IS95B
@@ -1441,11 +1495,13 @@
}
/** @hide */
+ @UnsupportedAppUsage
public static boolean bearerBitmapHasCdma(int radioTechnologyBitmap) {
return (RIL_RADIO_CDMA_TECHNOLOGY_BITMASK & radioTechnologyBitmap) != 0;
}
/** @hide */
+ @UnsupportedAppUsage
public static boolean bitmaskHasTech(int bearerBitmask, int radioTech) {
if (bearerBitmask == 0) {
return true;
@@ -1517,6 +1573,7 @@
* voice SS. The voice SS is only used if it is IN_SERVICE (otherwise the base SS is returned).
* @hide
* */
+ @UnsupportedAppUsage
public static ServiceState mergeServiceStates(ServiceState baseSs, ServiceState voiceSs) {
if (voiceSs.mVoiceRegState != STATE_IN_SERVICE) {
return baseSs;
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java
index 95abb91..ed758a9 100644
--- a/telephony/java/android/telephony/SignalStrength.java
+++ b/telephony/java/android/telephony/SignalStrength.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -36,21 +37,27 @@
private static final boolean DBG = false;
/** @hide */
+ @UnsupportedAppUsage
public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN
= TelephonyProtoEnums.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; // = 0
/** @hide */
+ @UnsupportedAppUsage
public static final int SIGNAL_STRENGTH_POOR
= TelephonyProtoEnums.SIGNAL_STRENGTH_POOR; // = 1
/** @hide */
+ @UnsupportedAppUsage
public static final int SIGNAL_STRENGTH_MODERATE
= TelephonyProtoEnums.SIGNAL_STRENGTH_MODERATE; // = 2
/** @hide */
+ @UnsupportedAppUsage
public static final int SIGNAL_STRENGTH_GOOD
= TelephonyProtoEnums.SIGNAL_STRENGTH_GOOD; // = 3
/** @hide */
+ @UnsupportedAppUsage
public static final int SIGNAL_STRENGTH_GREAT
= TelephonyProtoEnums.SIGNAL_STRENGTH_GREAT; // = 4
/** @hide */
+ @UnsupportedAppUsage
public static final int NUM_SIGNAL_STRENGTH_BINS = 5;
/** @hide */
public static final String[] SIGNAL_STRENGTH_NAMES = {
@@ -75,24 +82,39 @@
private static final String MEASUMENT_TYPE_RSCP = "rscp";
/** Parameters reported by the Radio */
+ @UnsupportedAppUsage
private int mGsmSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5
+ @UnsupportedAppUsage
private int mGsmBitErrorRate; // bit error rate (0-7, 99) as defined in TS 27.007 8.5
+ @UnsupportedAppUsage
private int mCdmaDbm; // This value is the RSSI value
+ @UnsupportedAppUsage
private int mCdmaEcio; // This value is the Ec/Io
+ @UnsupportedAppUsage
private int mEvdoDbm; // This value is the EVDO RSSI value
+ @UnsupportedAppUsage
private int mEvdoEcio; // This value is the EVDO Ec/Io
+ @UnsupportedAppUsage
private int mEvdoSnr; // Valid values are 0-8. 8 is the highest signal to noise ratio
+ @UnsupportedAppUsage
private int mLteSignalStrength;
+ @UnsupportedAppUsage
private int mLteRsrp;
+ @UnsupportedAppUsage
private int mLteRsrq;
+ @UnsupportedAppUsage
private int mLteRssnr;
+ @UnsupportedAppUsage
private int mLteCqi;
+ @UnsupportedAppUsage
private int mTdScdmaRscp; // Valid values are -24...-120dBm or INVALID if unknown
private int mWcdmaSignalStrength;
private int mWcdmaRscpAsu; // the WCDMA RSCP in ASU as reported from the HAL
+ @UnsupportedAppUsage
private int mWcdmaRscp; // the WCDMA RSCP in dBm
/** Parameters from the framework */
+ @UnsupportedAppUsage
private int mLteRsrpBoost; // offset to be reduced from the rsrp threshold while calculating
// signal strength level
private boolean mIsGsm; // This value is set by the ServiceStateTracker
@@ -121,6 +143,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static SignalStrength newFromBundle(Bundle m) {
SignalStrength ret;
ret = new SignalStrength();
@@ -133,6 +156,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public SignalStrength() {
this(true);
}
@@ -145,6 +169,7 @@
* @return newly created SignalStrength
* @hide
*/
+ @UnsupportedAppUsage
public SignalStrength(boolean gsmFlag) {
mGsmSignalStrength = 99;
mGsmBitErrorRate = -1;
@@ -247,6 +272,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public SignalStrength(SignalStrength s) {
copyFrom(s);
}
@@ -254,6 +280,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
protected void copyFrom(SignalStrength s) {
mGsmSignalStrength = s.mGsmSignalStrength;
mGsmBitErrorRate = s.mGsmBitErrorRate;
@@ -284,6 +311,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public SignalStrength(Parcel in) {
if (DBG) log("Size of signalstrength parcel:" + in.dataSize());
@@ -351,6 +379,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static final Parcelable.Creator<SignalStrength> CREATOR = new Parcelable.Creator() {
public SignalStrength createFromParcel(Parcel in) {
return new SignalStrength(in);
@@ -372,6 +401,7 @@
* Valid values for all signalstrength fields
* @hide
*/
+ @UnsupportedAppUsage
public void validateInput() {
if (DBG) log("Signal before validate=" + this);
// TS 27.007 8.5
@@ -546,26 +576,31 @@
}
/** @hide */
+ @UnsupportedAppUsage
public int getLteSignalStrength() {
return mLteSignalStrength;
}
/** @hide */
+ @UnsupportedAppUsage
public int getLteRsrp() {
return mLteRsrp;
}
/** @hide */
+ @UnsupportedAppUsage
public int getLteRsrq() {
return mLteRsrq;
}
/** @hide */
+ @UnsupportedAppUsage
public int getLteRssnr() {
return mLteRssnr;
}
/** @hide */
+ @UnsupportedAppUsage
public int getLteCqi() {
return mLteCqi;
}
@@ -594,6 +629,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getAsuLevel() {
int asuLevel = 0;
if (mIsGsm) {
@@ -629,6 +665,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getDbm() {
int dBm = INVALID;
@@ -661,6 +698,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getGsmDbm() {
int dBm;
@@ -680,6 +718,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getGsmLevel() {
int level;
@@ -702,6 +741,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getGsmAsuLevel() {
// ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
// asu = 0 (-113dB or less) is very weak
@@ -717,6 +757,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getCdmaLevel() {
final int cdmaDbm = getCdmaDbm();
final int cdmaEcio = getCdmaEcio();
@@ -746,6 +787,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getCdmaAsuLevel() {
final int cdmaDbm = getCdmaDbm();
final int cdmaEcio = getCdmaEcio();
@@ -777,6 +819,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getEvdoLevel() {
int evdoDbm = getEvdoDbm();
int evdoSnr = getEvdoSnr();
@@ -805,6 +848,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getEvdoAsuLevel() {
int evdoDbm = getEvdoDbm();
int evdoSnr = getEvdoSnr();
@@ -835,6 +879,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getLteDbm() {
return mLteRsrp;
}
@@ -844,6 +889,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getLteLevel() {
/*
* TS 36.214 Physical Layer Section 5.1.3
@@ -930,6 +976,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getLteAsuLevel() {
int lteAsuLevel = 99;
int lteDbm = getLteDbm();
@@ -973,6 +1020,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getTdScdmaDbm() {
return this.mTdScdmaRscp;
}
@@ -985,6 +1033,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getTdScdmaLevel() {
final int tdScdmaDbm = getTdScdmaDbm();
int level;
@@ -1006,6 +1055,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getTdScdmaAsuLevel() {
final int tdScdmaDbm = getTdScdmaDbm();
int tdScdmaAsuLevel;
@@ -1245,6 +1295,7 @@
* @param m intent notifier map
* @hide
*/
+ @UnsupportedAppUsage
private void setFromNotifierBundle(Bundle m) {
mGsmSignalStrength = m.getInt("GsmSignalStrength");
mGsmBitErrorRate = m.getInt("GsmBitErrorRate");
@@ -1282,6 +1333,7 @@
* @param m intent notifier Bundle
* @hide
*/
+ @UnsupportedAppUsage
public void fillInNotifierBundle(Bundle m) {
m.putInt("GsmSignalStrength", mGsmSignalStrength);
m.putInt("GsmBitErrorRate", mGsmBitErrorRate);
diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java
index 38bc640..ea408bf 100644
--- a/telephony/java/android/telephony/SmsManager.java
+++ b/telephony/java/android/telephony/SmsManager.java
@@ -19,6 +19,7 @@
import android.annotation.RequiresPermission;
import android.annotation.SuppressAutoDoc;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.ActivityThread;
import android.app.PendingIntent;
import android.content.ActivityNotFoundException;
@@ -88,6 +89,7 @@
new ArrayMap<Integer, SmsManager>();
/** A concrete subscription id, or the pseudo DEFAULT_SUBSCRIPTION_ID */
+ @UnsupportedAppUsage
private int mSubId;
/*
@@ -272,6 +274,17 @@
private static final int SMS_PICK = 2;
/**
+ * 3gpp2 SMS priority is not specified
+ * @hide
+ */
+ public static final int SMS_MESSAGE_PRIORITY_NOT_SPECIFIED = -1;
+ /**
+ * 3gpp SMS period is not specified
+ * @hide
+ */
+ public static final int SMS_MESSAGE_PERIOD_NOT_SPECIFIED = -1;
+
+ /**
* Send a text based SMS.
*
* <p class="note"><strong>Note:</strong> Using this method requires that your app has the
@@ -440,6 +453,7 @@
* @throws IllegalArgumentException if destinationAddress or text are empty
* {@hide}
*/
+ @UnsupportedAppUsage
public void sendTextMessage(
String destinationAddress, String scAddress, String text,
PendingIntent sentIntent, PendingIntent deliveryIntent,
@@ -461,11 +475,11 @@
}
if (priority < 0x00 || priority > 0x03) {
- throw new IllegalArgumentException("Invalid priority");
+ priority = SMS_MESSAGE_PRIORITY_NOT_SPECIFIED;
}
if (validityPeriod < 0x05 || validityPeriod > 0x09b0a0) {
- throw new IllegalArgumentException("Invalid validity period");
+ validityPeriod = SMS_MESSAGE_PERIOD_NOT_SPECIFIED;
}
try {
@@ -493,6 +507,7 @@
* PendingIntent, int, boolean, int)
* @hide
*/
+ @UnsupportedAppUsage
public void sendTextMessageWithoutPersisting(
String destinationAddress, String scAddress, String text,
PendingIntent sentIntent, PendingIntent deliveryIntent, int priority,
@@ -718,12 +733,14 @@
* @throws IllegalArgumentException if destinationAddress or data are empty
* {@hide}
*/
+ @UnsupportedAppUsage
public void sendMultipartTextMessage(
String destinationAddress, String scAddress, ArrayList<String> parts,
ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents,
int priority, boolean expectMore, int validityPeriod) {
sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sentIntents,
- deliveryIntents, true /* persistMessage*/);
+ deliveryIntents, true /* persistMessage*/, priority, expectMore,
+ validityPeriod);
}
private void sendMultipartTextMessageInternal(
@@ -738,11 +755,11 @@
}
if (priority < 0x00 || priority > 0x03) {
- throw new IllegalArgumentException("Invalid priority");
+ priority = SMS_MESSAGE_PRIORITY_NOT_SPECIFIED;
}
if (validityPeriod < 0x05 || validityPeriod > 0x09b0a0) {
- throw new IllegalArgumentException("Invalid validity period");
+ validityPeriod = SMS_MESSAGE_PERIOD_NOT_SPECIFIED;
}
if (parts.size() > 1) {
@@ -985,6 +1002,7 @@
* @throws IllegalArgumentException if pdu is NULL
* {@hide}
*/
+ @UnsupportedAppUsage
public boolean copyMessageToIcc(byte[] smsc, byte[] pdu,int status) {
boolean success = false;
@@ -1015,6 +1033,7 @@
*
* {@hide}
*/
+ @UnsupportedAppUsage
public boolean
deleteMessageFromIcc(int messageIndex) {
boolean success = false;
@@ -1049,6 +1068,7 @@
*
* {@hide}
*/
+ @UnsupportedAppUsage
public boolean updateMessageOnIcc(int messageIndex, int newStatus, byte[] pdu) {
boolean success = false;
@@ -1075,6 +1095,7 @@
*
* {@hide}
*/
+ @UnsupportedAppUsage
public ArrayList<SmsMessage> getAllMessagesFromIcc() {
List<SmsRawData> records = null;
@@ -1187,6 +1208,7 @@
* @throws IllegalArgumentException if endMessageId < startMessageId
* {@hide}
*/
+ @UnsupportedAppUsage
public boolean enableCellBroadcastRange(int startMessageId, int endMessageId, int ranType) {
boolean success = false;
@@ -1229,6 +1251,7 @@
* @throws IllegalArgumentException if endMessageId < startMessageId
* {@hide}
*/
+ @UnsupportedAppUsage
public boolean disableCellBroadcastRange(int startMessageId, int endMessageId, int ranType) {
boolean success = false;
@@ -1346,6 +1369,7 @@
* @return true if enabled, false otherwise
* @hide
*/
+ @UnsupportedAppUsage
public boolean isSMSPromptEnabled() {
ISms iccISms = null;
try {
diff --git a/telephony/java/android/telephony/SmsMessage.java b/telephony/java/android/telephony/SmsMessage.java
index 57f89e3..91e24a9 100644
--- a/telephony/java/android/telephony/SmsMessage.java
+++ b/telephony/java/android/telephony/SmsMessage.java
@@ -20,6 +20,7 @@
import android.annotation.Nullable;
import android.annotation.StringDef;
+import android.annotation.UnsupportedAppUsage;
import android.content.res.Resources;
import android.os.Binder;
import android.text.TextUtils;
@@ -107,18 +108,21 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public SmsMessageBase mWrappedSmsMessage;
/** Indicates the subId
*
* @hide
*/
+ @UnsupportedAppUsage
private int mSubId = 0;
/** set Subscription information
*
* @hide
*/
+ @UnsupportedAppUsage
public void setSubId(int subId) {
mSubId = subId;
}
@@ -127,6 +131,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public int getSubId() {
return mSubId;
}
@@ -368,6 +373,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static ArrayList<String> fragmentText(String text) {
// This function is for MO SMS
TextEncodingDetails ted = (useCdmaFormatForMoSms()) ?
@@ -822,6 +828,7 @@
*
* @return true if Cdma format should be used for MO SMS, false otherwise.
*/
+ @UnsupportedAppUsage
private static boolean useCdmaFormatForMoSms() {
// IMS is registered with SMS support, check the SMS format supported
return useCdmaFormatForMoSms(SubscriptionManager.getDefaultSmsSubscriptionId());
@@ -836,6 +843,7 @@
*
* @return true if Cdma format should be used for MO SMS, false otherwise.
*/
+ @UnsupportedAppUsage
private static boolean useCdmaFormatForMoSms(int subId) {
SmsManager smsManager = SmsManager.getSmsManagerForSubscriptionId(subId);
if (!smsManager.isImsSmsSupported()) {
diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java
index 2bc43d4..ec26622 100644
--- a/telephony/java/android/telephony/SubscriptionInfo.java
+++ b/telephony/java/android/telephony/SubscriptionInfo.java
@@ -18,6 +18,7 @@
import android.annotation.Nullable;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -216,6 +217,7 @@
* Sets the name displayed to the user that identifies this subscription
* @hide
*/
+ @UnsupportedAppUsage
public void setDisplayName(CharSequence name) {
this.mDisplayName = name;
}
@@ -240,6 +242,7 @@
* NAME_SOURCE_SIM_SOURCE or NAME_SOURCE_USER_INPUT.
* @hide
*/
+ @UnsupportedAppUsage
public int getNameSource() {
return this.mNameSource;
}
@@ -298,6 +301,7 @@
* Sets the color displayed to the user that identifies this subscription
* @hide
*/
+ @UnsupportedAppUsage
public void setIconTint(int iconTint) {
this.mIconTint = iconTint;
}
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index 151b936..119733e 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -28,6 +28,7 @@
import android.annotation.SuppressAutoDoc;
import android.annotation.SystemApi;
import android.annotation.SystemService;
+import android.annotation.UnsupportedAppUsage;
import android.app.BroadcastOptions;
import android.app.PendingIntent;
import android.content.Context;
@@ -86,6 +87,7 @@
/** Indicates the caller wants the default sub id. */
/** @hide */
+ @UnsupportedAppUsage
public static final int DEFAULT_SUBSCRIPTION_ID = Integer.MAX_VALUE;
/**
@@ -108,6 +110,7 @@
public static final int MAX_SUBSCRIPTION_ID_VALUE = DEFAULT_SUBSCRIPTION_ID - 1;
/** @hide */
+ @UnsupportedAppUsage
public static final Uri CONTENT_URI = Uri.parse("content://telephony/siminfo");
/**
@@ -185,6 +188,7 @@
* The name_source is from the user
* @hide
*/
+ @UnsupportedAppUsage
public static final int NAME_SOURCE_USER_INPUT = 2;
/**
@@ -615,6 +619,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public SubscriptionManager(Context context) {
if (DBG) logd("SubscriptionManager created");
mContext = context;
@@ -793,6 +798,7 @@
* include those that were inserted before, maybe empty but not null.
* @hide
*/
+ @UnsupportedAppUsage
public List<SubscriptionInfo> getAllSubscriptionInfoList() {
if (VDBG) logd("[getAllSubscriptionInfoList]+");
@@ -964,6 +970,7 @@
* all subscriptions that have been seen.
* @hide
*/
+ @UnsupportedAppUsage
public int getAllSubscriptionInfoCount() {
if (VDBG) logd("[getAllSubscriptionInfoCount]+");
@@ -1069,6 +1076,7 @@
* @return the number of records updated
* @hide
*/
+ @UnsupportedAppUsage
public int setIconTint(int tint, int subId) {
if (VDBG) logd("[setIconTint]+ tint:" + tint + " subId:" + subId);
return setSubscriptionPropertyHelper(subId, "setIconTint",
@@ -1096,6 +1104,7 @@
* @return the number of records updated or < 0 if invalid subId
* @hide
*/
+ @UnsupportedAppUsage
public int setDisplayName(String displayName, int subId, long nameSource) {
if (VDBG) {
logd("[setDisplayName]+ displayName:" + displayName + " subId:" + subId
@@ -1113,6 +1122,7 @@
* @return the number of records updated
* @hide
*/
+ @UnsupportedAppUsage
public int setDisplayNumber(String number, int subId) {
if (number == null) {
logd("[setDisplayNumber]- fail");
@@ -1130,6 +1140,7 @@
* @return the number of records updated
* @hide
*/
+ @UnsupportedAppUsage
public int setDataRoaming(int roaming, int subId) {
if (VDBG) logd("[setDataRoaming]+ roaming:" + roaming + " subId:" + subId);
return setSubscriptionPropertyHelper(subId, "setDataRoaming",
@@ -1143,6 +1154,7 @@
* SIM_NOT_INSERTED or < 0 if an invalid slot index
* @hide
*/
+ @UnsupportedAppUsage
public static int getSlotIndex(int subId) {
if (!isValidSubscriptionId(subId)) {
if (DBG) {
@@ -1166,6 +1178,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public static int[] getSubId(int slotIndex) {
if (!isValidSlotIndex(slotIndex)) {
logd("[getSubId]- fail");
@@ -1187,6 +1200,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public static int getPhoneId(int subId) {
if (!isValidSubscriptionId(subId)) {
if (DBG) {
@@ -1284,11 +1298,13 @@
* @return the SubscriptionInfo for the default voice subscription.
* @hide
*/
+ @UnsupportedAppUsage
public SubscriptionInfo getDefaultVoiceSubscriptionInfo() {
return getActiveSubscriptionInfo(getDefaultVoiceSubscriptionId());
}
/** @hide */
+ @UnsupportedAppUsage
public static int getDefaultVoicePhoneId() {
return getPhoneId(getDefaultVoiceSubscriptionId());
}
@@ -1317,6 +1333,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void setDefaultSmsSubId(int subId) {
if (VDBG) logd("setDefaultSmsSubId sub id = " + subId);
try {
@@ -1342,6 +1359,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public int getDefaultSmsPhoneId() {
return getPhoneId(getDefaultSmsSubscriptionId());
}
@@ -1370,6 +1388,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public void setDefaultDataSubId(int subId) {
if (VDBG) logd("setDataSubscription sub id = " + subId);
try {
@@ -1390,11 +1409,13 @@
* @return the SubscriptionInfo for the default data subscription.
* @hide
*/
+ @UnsupportedAppUsage
public SubscriptionInfo getDefaultDataSubscriptionInfo() {
return getActiveSubscriptionInfo(getDefaultDataSubscriptionId());
}
/** @hide */
+ @UnsupportedAppUsage
public int getDefaultDataPhoneId() {
return getPhoneId(getDefaultDataSubscriptionId());
}
@@ -1433,6 +1454,7 @@
* an invalid subscription id, i.e. < 0.
* @hide
*/
+ @UnsupportedAppUsage
public void clearDefaultsForInactiveSubIds() {
if (VDBG) logd("clearDefaultsForInactiveSubIds");
try {
@@ -1449,6 +1471,7 @@
* @return true if a valid subId else false
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isValidSubscriptionId(int subId) {
return subId > INVALID_SUBSCRIPTION_ID ;
}
@@ -1458,21 +1481,25 @@
* usable subId means its neither a INVALID_SUBSCRIPTION_ID nor a DEFAULT_SUB_ID.
* @hide
*/
+ @UnsupportedAppUsage
public static boolean isUsableSubIdValue(int subId) {
return subId >= MIN_SUBSCRIPTION_ID_VALUE && subId <= MAX_SUBSCRIPTION_ID_VALUE;
}
/** @hide */
+ @UnsupportedAppUsage
public static boolean isValidSlotIndex(int slotIndex) {
return slotIndex >= 0 && slotIndex < TelephonyManager.getDefault().getSimCount();
}
/** @hide */
+ @UnsupportedAppUsage
public static boolean isValidPhoneId(int phoneId) {
return phoneId >= 0 && phoneId < TelephonyManager.getDefault().getPhoneCount();
}
/** @hide */
+ @UnsupportedAppUsage
public static void putPhoneIdAndSubIdExtra(Intent intent, int phoneId) {
int[] subIds = SubscriptionManager.getSubId(phoneId);
if (subIds != null && subIds.length > 0) {
@@ -1483,6 +1510,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public static void putPhoneIdAndSubIdExtra(Intent intent, int phoneId, int subId) {
if (VDBG) logd("putPhoneIdAndSubIdExtra: phoneId=" + phoneId + " subId=" + subId);
intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
@@ -1498,6 +1526,7 @@
* is never null but the length maybe 0.
* @hide
*/
+ @UnsupportedAppUsage
public @NonNull int[] getActiveSubscriptionIdList() {
int[] subId = null;
@@ -1656,6 +1685,7 @@
* @return Resources associated with Subscription.
* @hide
*/
+ @UnsupportedAppUsage
public static Resources getResourcesForSubId(Context context, int subId) {
final SubscriptionInfo subInfo =
SubscriptionManager.from(context).getActiveSubscriptionInfo(subId);
@@ -1679,6 +1709,7 @@
* and the SIM providing the subscription is present in a slot and in "LOADED" state.
* @hide
*/
+ @UnsupportedAppUsage
public boolean isActiveSubId(int subId) {
try {
ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index ae3f7a2..81d0d68 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -28,6 +28,7 @@
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.TestApi;
+import android.annotation.UnsupportedAppUsage;
import android.annotation.WorkerThread;
import android.app.ActivityThread;
import android.app.PendingIntent;
@@ -155,6 +156,7 @@
private final Context mContext;
private final int mSubId;
+ @UnsupportedAppUsage
private SubscriptionManager mSubscriptionManager;
private TelephonyScanManager mTelephonyScanManager;
@@ -168,18 +170,24 @@
**/
/** @hide */
public enum MultiSimVariants {
+ @UnsupportedAppUsage
DSDS,
+ @UnsupportedAppUsage
DSDA,
+ @UnsupportedAppUsage
TSTS,
+ @UnsupportedAppUsage
UNKNOWN
};
/** @hide */
+ @UnsupportedAppUsage
public TelephonyManager(Context context) {
this(context, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
}
/** @hide */
+ @UnsupportedAppUsage
public TelephonyManager(Context context, int subId) {
mSubId = subId;
Context appContext = context.getApplicationContext();
@@ -192,6 +200,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
private TelephonyManager() {
mContext = null;
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
@@ -201,6 +210,7 @@
/** @hide
/* @deprecated - use getSystemService as described above */
+ @UnsupportedAppUsage
public static TelephonyManager getDefault() {
return sInstance;
}
@@ -228,6 +238,7 @@
* Returns UNKNOWN for others
*/
/** {@hide} */
+ @UnsupportedAppUsage
public MultiSimVariants getMultiSimConfiguration() {
String mSimConfig =
SystemProperties.get(TelephonyProperties.PROPERTY_MULTI_SIM_CONFIG);
@@ -288,6 +299,7 @@
}
/** {@hide} */
+ @UnsupportedAppUsage
public static TelephonyManager from(Context context) {
return (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
}
@@ -319,6 +331,7 @@
}
/** {@hide} */
+ @UnsupportedAppUsage
public boolean isMultiSimEnabled() {
return (multiSimConfig.equals("dsds") || multiSimConfig.equals("dsda") ||
multiSimConfig.equals("tsts"));
@@ -672,6 +685,7 @@
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
@Deprecated
+ @UnsupportedAppUsage
public static final String ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED =
"android.intent.action.PRECISE_DATA_CONNECTION_STATE_CHANGED";
@@ -1206,6 +1220,7 @@
*/
/** {@hide} */
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public String getDeviceSoftwareVersion(int slotIndex) {
ITelephony telephony = getITelephony();
if (telephony == null) return null;
@@ -1418,6 +1433,7 @@
* @param slotIndex of which Nai is returned
*/
/** {@hide}*/
+ @UnsupportedAppUsage
public String getNai(int slotIndex) {
int[] subId = SubscriptionManager.getSubId(slotIndex);
if (subId == null) {
@@ -1657,6 +1673,7 @@
}
/** {@hide} */
+ @UnsupportedAppUsage
private int getPhoneTypeFromProperty(int phoneId) {
String type = getTelephonyProperty(phoneId,
TelephonyProperties.CURRENT_ACTIVE_PHONE, null);
@@ -1691,6 +1708,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static int getPhoneType(int networkMode) {
switch(networkMode) {
case RILConstants.NETWORK_MODE_CDMA:
@@ -1736,6 +1754,7 @@
/**
* The contents of the /proc/cmdline file
*/
+ @UnsupportedAppUsage
private static String getProcCmdLine()
{
String cmdline = "";
@@ -1782,6 +1801,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static int getLteOnCdmaModeStatic() {
int retVal;
int curVal;
@@ -1837,6 +1857,7 @@
* @param subId
* @hide
*/
+ @UnsupportedAppUsage
public String getNetworkOperatorName(int subId) {
int phoneId = SubscriptionManager.getPhoneId(subId);
return getTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_ALPHA, "");
@@ -1864,6 +1885,7 @@
* @param subId
* @hide
*/
+ @UnsupportedAppUsage
public String getNetworkOperator(int subId) {
int phoneId = SubscriptionManager.getPhoneId(subId);
return getNetworkOperatorForPhone(phoneId);
@@ -1880,6 +1902,7 @@
* @param phoneId
* @hide
**/
+ @UnsupportedAppUsage
public String getNetworkOperatorForPhone(int phoneId) {
return getTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, "");
}
@@ -1942,6 +1965,7 @@
* @param subId
* @hide
*/
+ @UnsupportedAppUsage
public boolean isNetworkRoaming(int subId) {
int phoneId = SubscriptionManager.getPhoneId(subId);
return Boolean.parseBoolean(getTelephonyProperty(phoneId,
@@ -1970,6 +1994,7 @@
* @param subId for which Network CountryIso is returned
* @hide
*/
+ @UnsupportedAppUsage
public String getNetworkCountryIso(int subId) {
return getNetworkCountryIsoForPhone(getPhoneId(subId));
}
@@ -1985,6 +2010,7 @@
* @param phoneId for which Network CountryIso is returned
*/
/** {@hide} */
+ @UnsupportedAppUsage
public String getNetworkCountryIsoForPhone(int phoneId) {
try {
ITelephony telephony = getITelephony();
@@ -2040,6 +2066,7 @@
/** Current network is IWLAN */
public static final int NETWORK_TYPE_IWLAN = TelephonyProtoEnums.NETWORK_TYPE_IWLAN; // = 18.
/** Current network is LTE_CA {@hide} */
+ @UnsupportedAppUsage
public static final int NETWORK_TYPE_LTE_CA = TelephonyProtoEnums.NETWORK_TYPE_LTE_CA; // = 19.
/** Max network type number. Update as new types are added. Don't add negative types. {@hide} */
@@ -2092,6 +2119,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public int getNetworkType(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -2154,6 +2182,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public int getDataNetworkType(int subId) {
try{
ITelephony telephony = getITelephony();
@@ -2189,6 +2218,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public int getVoiceNetworkType(int subId) {
try{
ITelephony telephony = getITelephony();
@@ -2216,10 +2246,13 @@
/** Unknown network class. {@hide} */
public static final int NETWORK_CLASS_UNKNOWN = 0;
/** Class of broadly defined "2G" networks. {@hide} */
+ @UnsupportedAppUsage
public static final int NETWORK_CLASS_2_G = 1;
/** Class of broadly defined "3G" networks. {@hide} */
+ @UnsupportedAppUsage
public static final int NETWORK_CLASS_3_G = 2;
/** Class of broadly defined "4G" networks. {@hide} */
+ @UnsupportedAppUsage
public static final int NETWORK_CLASS_4_G = 3;
/**
@@ -2228,6 +2261,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static int getNetworkClass(int networkType) {
switch (networkType) {
case NETWORK_TYPE_GPRS:
@@ -2264,6 +2298,7 @@
*
* @hide pending API council review
*/
+ @UnsupportedAppUsage
public String getNetworkTypeName() {
return getNetworkTypeName(getNetworkType());
}
@@ -2276,6 +2311,7 @@
*
*/
/** {@hide} */
+ @UnsupportedAppUsage
public static String getNetworkTypeName(int type) {
switch (type) {
case NETWORK_TYPE_GPRS:
@@ -2475,6 +2511,7 @@
*/
/** {@hide} */
// FIXME Input argument slotIndex should be of type int
+ @UnsupportedAppUsage
public boolean hasIccCard(int slotIndex) {
try {
@@ -2638,6 +2675,7 @@
* @param subId for which SimOperator is returned
* @hide
*/
+ @UnsupportedAppUsage
public String getSimOperator(int subId) {
return getSimOperatorNumeric(subId);
}
@@ -2651,6 +2689,7 @@
* @see #getSimState
* @hide
*/
+ @UnsupportedAppUsage
public String getSimOperatorNumeric() {
int subId = mSubId;
if (!SubscriptionManager.isUsableSubIdValue(subId)) {
@@ -2679,6 +2718,7 @@
* @param subId for which SimOperator is returned
* @hide
*/
+ @UnsupportedAppUsage
public String getSimOperatorNumeric(int subId) {
int phoneId = SubscriptionManager.getPhoneId(subId);
return getSimOperatorNumericForPhone(phoneId);
@@ -2692,6 +2732,7 @@
* @param phoneId for which SimOperator is returned
* @hide
*/
+ @UnsupportedAppUsage
public String getSimOperatorNumericForPhone(int phoneId) {
return getTelephonyProperty(phoneId,
TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC, "");
@@ -2718,6 +2759,7 @@
* @param subId for which SimOperatorName is returned
* @hide
*/
+ @UnsupportedAppUsage
public String getSimOperatorName(int subId) {
int phoneId = SubscriptionManager.getPhoneId(subId);
return getSimOperatorNameForPhone(phoneId);
@@ -2728,6 +2770,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public String getSimOperatorNameForPhone(int phoneId) {
return getTelephonyProperty(phoneId,
TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA, "");
@@ -2746,6 +2789,7 @@
* @param subId for which SimCountryIso is returned
* @hide
*/
+ @UnsupportedAppUsage
public String getSimCountryIso(int subId) {
int phoneId = SubscriptionManager.getPhoneId(subId);
return getSimCountryIsoForPhone(phoneId);
@@ -2756,6 +2800,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public String getSimCountryIsoForPhone(int phoneId) {
return getTelephonyProperty(phoneId,
TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY, "");
@@ -2782,6 +2827,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public String getSimSerialNumber(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -2807,6 +2853,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public int getLteOnCdmaMode() {
return getLteOnCdmaMode(getSubId());
}
@@ -2822,6 +2869,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public int getLteOnCdmaMode(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -2929,6 +2977,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public String getSubscriberId(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -3109,6 +3158,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public String getGroupIdLevel1(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -3158,6 +3208,7 @@
android.Manifest.permission.READ_SMS,
android.Manifest.permission.READ_PHONE_NUMBERS
})
+ @UnsupportedAppUsage
public String getLine1Number(int subId) {
String number = null;
try {
@@ -3244,6 +3295,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public String getLine1AlphaTag(int subId) {
String alphaTag = null;
try {
@@ -3278,6 +3330,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public @Nullable String[] getMergedSubscriberIds() {
try {
ITelephony telephony = getITelephony();
@@ -3296,6 +3349,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public String getMsisdn() {
return getMsisdn(getSubId());
}
@@ -3308,6 +3362,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public String getMsisdn(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -3341,6 +3396,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public String getVoiceMailNumber(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -3900,6 +3956,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public int getVoiceMessageCount() {
return getVoiceMessageCount(getSubId());
}
@@ -3910,6 +3967,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public int getVoiceMessageCount(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -3945,6 +4003,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public String getVoiceMailAlphaTag(int subId) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -3991,6 +4050,7 @@
* @return the IMPI, or null if not present or not loaded
* @hide
*/
+ @UnsupportedAppUsage
public String getIsimImpi() {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -4011,6 +4071,7 @@
* @return the IMS domain name, or null if not present or not loaded
* @hide
*/
+ @UnsupportedAppUsage
public String getIsimDomain() {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -4032,6 +4093,7 @@
* not present or not loaded
* @hide
*/
+ @UnsupportedAppUsage
public String[] getIsimImpu() {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -4050,6 +4112,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
private IPhoneSubInfo getSubscriberInfo() {
// get it each time because that process crashes a lot
return IPhoneSubInfo.Stub.asInterface(ServiceManager.getService("iphonesubinfo"));
@@ -4115,6 +4178,7 @@
* @param subId the subscription to check call state for.
* @hide
*/
+ @UnsupportedAppUsage
public @CallState int getCallState(int subId) {
int phoneId = SubscriptionManager.getPhoneId(subId);
return getCallStateForSlot(phoneId);
@@ -4226,6 +4290,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
private ITelephony getITelephony() {
return ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
}
@@ -4310,6 +4375,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public int getCdmaEriIconIndex(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -4344,6 +4410,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public int getCdmaEriIconMode(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -4374,6 +4441,7 @@
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ @UnsupportedAppUsage
public String getCdmaEriText(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -4846,6 +4914,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public String nvReadItem(int itemID) {
try {
ITelephony telephony = getITelephony();
@@ -4926,6 +4995,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean nvResetConfig(int resetType) {
try {
ITelephony telephony = getITelephony();
@@ -4962,6 +5032,7 @@
* {@see SubscriptionManager#getDefaultVoiceSubscriptionId()}
* {@see SubscriptionManager#getDefaultSmsSubscriptionId()}
*/
+ @UnsupportedAppUsage
private int getSubId(int preferredSubId) {
if (SubscriptionManager.isUsableSubIdValue(mSubId)) {
return mSubId;
@@ -4990,6 +5061,7 @@
* {@see SubscriptionManager#getDefaultVoiceSubscriptionId()}
* {@see SubscriptionManager#getDefaultSmsSubscriptionId()}
*/
+ @UnsupportedAppUsage
private int getPhoneId(int preferredSubId) {
return SubscriptionManager.getPhoneId(getSubId(preferredSubId));
}
@@ -5005,6 +5077,7 @@
* {@hide}
*/
@VisibleForTesting
+ @UnsupportedAppUsage
public int getSlotIndex() {
int slotIndex = SubscriptionManager.getSlotIndex(getSubId());
if (slotIndex == SubscriptionManager.SIM_NOT_INSERTED) {
@@ -5018,6 +5091,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static void setTelephonyProperty(int phoneId, String property, String value) {
String propVal = "";
String p[] = null;
@@ -5095,6 +5169,7 @@
* @return The value at the given index of settings.
* @hide
*/
+ @UnsupportedAppUsage
public static int getIntAtIndex(android.content.ContentResolver cr,
String name, int index)
throws android.provider.Settings.SettingNotFoundException {
@@ -5127,6 +5202,7 @@
* @return true if the value was set, false on database errors
* @hide
*/
+ @UnsupportedAppUsage
public static boolean putIntAtIndex(android.content.ContentResolver cr,
String name, int index, int value) {
String data = "";
@@ -5168,6 +5244,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static String getTelephonyProperty(int phoneId, String property, String defaultVal) {
String propVal = null;
String prop = SystemProperties.get(property);
@@ -5188,12 +5265,14 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public static String getTelephonyProperty(String property, String defaultVal) {
String propVal = SystemProperties.get(property);
return propVal == null ? defaultVal : propVal;
}
/** @hide */
+ @UnsupportedAppUsage
public int getSimCount() {
// FIXME Need to get it from Telephony Dev Controller when that gets implemented!
// and then this method shouldn't be used at all!
@@ -5230,6 +5309,7 @@
* not present or not loaded
* @hide
*/
+ @UnsupportedAppUsage
public String[] getIsimPcscf() {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -5310,6 +5390,7 @@
* Authentication error, no memory space available in EFMUK
* @hide
*/
+ @UnsupportedAppUsage
public String getIccAuthentication(int subId, int appType, int authType, String data) {
try {
IPhoneSubInfo info = getSubscriberInfo();
@@ -5472,6 +5553,7 @@
* Corresponds to features defined in ImsFeature.
* @hide
*/
+ @UnsupportedAppUsage
public @Nullable IImsRegistration getImsRegistration(int slotIndex, int feature) {
try {
ITelephony telephony = getITelephony();
@@ -5491,6 +5573,7 @@
* Corresponds to features defined in ImsFeature.
* @hide
*/
+ @UnsupportedAppUsage
public @Nullable IImsConfig getImsConfig(int slotIndex, int feature) {
try {
ITelephony telephony = getITelephony();
@@ -5509,6 +5592,7 @@
* @param Registration state
* @hide
*/
+ @UnsupportedAppUsage
public void setImsRegistrationState(boolean registered) {
try {
ITelephony telephony = getITelephony();
@@ -5529,6 +5613,7 @@
* @return the preferred network type, defined in RILConstants.java.
* @hide
*/
+ @UnsupportedAppUsage
public int getPreferredNetworkType(int subId) {
try {
ITelephony telephony = getITelephony();
@@ -5677,6 +5762,7 @@
* @return true on success; false on any failure.
* @hide
*/
+ @UnsupportedAppUsage
public boolean setPreferredNetworkType(int subId, int networkType) {
try {
ITelephony telephony = getITelephony();
@@ -5851,6 +5937,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean setRoamingOverride(List<String> gsmRoamingList,
List<String> gsmNonRoamingList, List<String> cdmaRoamingList,
List<String> cdmaNonRoamingList) {
@@ -6705,6 +6792,7 @@
* @see SubscriptionManager#getDefaultSubscriptionId()
* @hide
*/
+ @UnsupportedAppUsage
public boolean isImsRegistered() {
try {
return getITelephony().isImsRegistered(getSubId());
@@ -6721,6 +6809,7 @@
* @see SubscriptionManager#getDefaultSubscriptionId()
* @hide
*/
+ @UnsupportedAppUsage
public boolean isVolteAvailable() {
try {
return getITelephony().isVolteAvailable(getSubId());
@@ -6737,6 +6826,7 @@
* @return true if VT is available, or false if it is unavailable or unknown.
* @hide
*/
+ @UnsupportedAppUsage
public boolean isVideoTelephonyAvailable() {
try {
return getITelephony().isVideoTelephonyAvailable(getSubId());
@@ -6751,6 +6841,7 @@
* @return true if VoWiFi is available, or false if it is unavailable or unknown.
* @hide
*/
+ @UnsupportedAppUsage
public boolean isWifiCallingAvailable() {
try {
return getITelephony().isWifiCallingAvailable(getSubId());
@@ -6793,6 +6884,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setSimOperatorNumericForPhone(int phoneId, String numeric) {
setTelephonyProperty(phoneId,
TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC, numeric);
@@ -6813,6 +6905,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setSimOperatorNameForPhone(int phoneId, String name) {
setTelephonyProperty(phoneId,
TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA, name);
@@ -6833,6 +6926,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setSimCountryIsoForPhone(int phoneId, String iso) {
setTelephonyProperty(phoneId,
TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY, iso);
@@ -6853,6 +6947,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setSimStateForPhone(int phoneId, String state) {
setTelephonyProperty(phoneId,
TelephonyProperties.PROPERTY_SIM_STATE, state);
@@ -6958,6 +7053,7 @@
* @param version baseband version
* @hide
*/
+ @UnsupportedAppUsage
public void setBasebandVersionForPhone(int phoneId, String version) {
setTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_BASEBAND_VERSION, version);
}
@@ -7023,6 +7119,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public void setPhoneType(int phoneId, int type) {
if (SubscriptionManager.isValidPhoneId(phoneId)) {
TelephonyManager.setTelephonyProperty(phoneId,
@@ -7052,6 +7149,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public String getOtaSpNumberSchemaForPhone(int phoneId, String defaultValue) {
if (SubscriptionManager.isValidPhoneId(phoneId)) {
return TelephonyManager.getTelephonyProperty(phoneId,
@@ -7139,6 +7237,7 @@
* @param name the alphabetic name of current registered operator.
* @hide
*/
+ @UnsupportedAppUsage
public void setNetworkOperatorNameForPhone(int phoneId, String name) {
if (SubscriptionManager.isValidPhoneId(phoneId)) {
setTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_ALPHA, name);
@@ -7161,6 +7260,7 @@
* @param operator the numeric name (MCC+MNC) of current registered operator
* @hide
*/
+ @UnsupportedAppUsage
public void setNetworkOperatorNumericForPhone(int phoneId, String numeric) {
setTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, numeric);
}
@@ -7181,6 +7281,7 @@
* @param isRoaming is network in romaing state or not
* @hide
*/
+ @UnsupportedAppUsage
public void setNetworkRoamingForPhone(int phoneId, boolean isRoaming) {
if (SubscriptionManager.isValidPhoneId(phoneId)) {
setTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_ISROAMING,
@@ -7208,6 +7309,7 @@
* @param type the network type currently in use on the device for data transmission
* @hide
*/
+ @UnsupportedAppUsage
public void setDataNetworkTypeForPhone(int phoneId, int type) {
if (SubscriptionManager.isValidPhoneId(phoneId)) {
setTelephonyProperty(phoneId,
@@ -7220,6 +7322,7 @@
* Returns the subscription ID for the given phone account.
* @hide
*/
+ @UnsupportedAppUsage
public int getSubIdForPhoneAccount(PhoneAccount phoneAccount) {
int retval = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
try {
@@ -7311,6 +7414,7 @@
* either READ_PRIVILEGED_PHONE_STATE or READ_PHONE_STATE to retrieve the information.
* @hide
*/
+ @UnsupportedAppUsage
public ServiceState getServiceStateForSubscriber(int subId) {
try {
ITelephony service = getITelephony();
@@ -7971,4 +8075,23 @@
}
return UNKNOWN_CARRIER_ID_LIST_VERSION;
}
+
+
+ /**
+ * How many modems can have simultaneous data connections.
+ * @hide
+ */
+ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+ public int getNumberOfModemsWithSimultaneousDataConnections() {
+ try {
+ ITelephony telephony = getITelephony();
+ if (telephony != null) {
+ return telephony.getNumberOfModemsWithSimultaneousDataConnections(
+ getSubId(), mContext.getOpPackageName());
+ }
+ } catch (RemoteException ex) {
+ // This could happen if binder process crashes.
+ }
+ return 0;
+ }
}
diff --git a/telephony/java/android/telephony/VoLteServiceState.java b/telephony/java/android/telephony/VoLteServiceState.java
index afef601b..25bb8b4 100644
--- a/telephony/java/android/telephony/VoLteServiceState.java
+++ b/telephony/java/android/telephony/VoLteServiceState.java
@@ -16,6 +16,7 @@
package android.telephony;
+import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -77,6 +78,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
public VoLteServiceState(int srvccState) {
initialize();
diff --git a/telephony/java/android/telephony/cdma/CdmaCellLocation.java b/telephony/java/android/telephony/cdma/CdmaCellLocation.java
index 7c10569..ee602c0 100644
--- a/telephony/java/android/telephony/cdma/CdmaCellLocation.java
+++ b/telephony/java/android/telephony/cdma/CdmaCellLocation.java
@@ -16,6 +16,7 @@
package android.telephony.cdma;
+import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.telephony.CellLocation;
@@ -23,6 +24,7 @@
* Represents the cell location on a CDMA phone.
*/
public class CdmaCellLocation extends CellLocation {
+ @UnsupportedAppUsage
private int mBaseStationId = -1;
/**
@@ -36,6 +38,7 @@
* to 1296000, both values inclusive (corresponding to a range of -90
* to +90 degrees). Integer.MAX_VALUE is considered invalid value.
*/
+ @UnsupportedAppUsage
private int mBaseStationLatitude = INVALID_LAT_LONG;
/**
@@ -44,9 +47,12 @@
* to 2592000, both values inclusive (corresponding to a range of -180
* to +180 degrees). Integer.MAX_VALUE is considered invalid value.
*/
+ @UnsupportedAppUsage
private int mBaseStationLongitude = INVALID_LAT_LONG;
+ @UnsupportedAppUsage
private int mSystemId = -1;
+ @UnsupportedAppUsage
private int mNetworkId = -1;
/**
@@ -200,6 +206,7 @@
* @param b second obj
* @return true if two objects equal or both are null
*/
+ @UnsupportedAppUsage
private static boolean equalsHandlesNulls(Object a, Object b) {
return (a == null) ? (b == null) : a.equals (b);
}
diff --git a/telephony/java/android/telephony/euicc/DownloadableSubscription.java b/telephony/java/android/telephony/euicc/DownloadableSubscription.java
index edf3b08..f1d5bdd 100644
--- a/telephony/java/android/telephony/euicc/DownloadableSubscription.java
+++ b/telephony/java/android/telephony/euicc/DownloadableSubscription.java
@@ -17,6 +17,7 @@
import android.annotation.Nullable;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.os.Parcel;
import android.os.Parcelable;
@@ -59,6 +60,7 @@
*/
@Nullable
@Deprecated
+ @UnsupportedAppUsage
public final String encodedActivationCode;
@Nullable private String confirmationCode;
@@ -188,6 +190,7 @@
* @deprecated - Do not use.
*/
@Deprecated
+ @UnsupportedAppUsage
public void setCarrierName(String carrierName) {
this.carrierName = carrierName;
}
@@ -234,6 +237,7 @@
* @deprecated - Do not use.
*/
@Deprecated
+ @UnsupportedAppUsage
public void setAccessRules(UiccAccessRule[] accessRules) {
this.accessRules = Arrays.asList(accessRules);
}
diff --git a/telephony/java/android/telephony/euicc/EuiccInfo.java b/telephony/java/android/telephony/euicc/EuiccInfo.java
index a4adf05..28855b2 100644
--- a/telephony/java/android/telephony/euicc/EuiccInfo.java
+++ b/telephony/java/android/telephony/euicc/EuiccInfo.java
@@ -16,6 +16,7 @@
package android.telephony.euicc;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -43,6 +44,7 @@
};
@Nullable
+ @UnsupportedAppUsage
private final String osVersion;
/**
diff --git a/telephony/java/android/telephony/gsm/GsmCellLocation.java b/telephony/java/android/telephony/gsm/GsmCellLocation.java
index 1717802..98ce333 100644
--- a/telephony/java/android/telephony/gsm/GsmCellLocation.java
+++ b/telephony/java/android/telephony/gsm/GsmCellLocation.java
@@ -16,6 +16,7 @@
package android.telephony.gsm;
+import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.telephony.CellLocation;
@@ -91,6 +92,7 @@
* Set the primary scrambling code.
* @hide
*/
+ @UnsupportedAppUsage
public void setPsc(int psc) {
mPsc = psc;
}
diff --git a/telephony/java/android/telephony/ims/ImsCallForwardInfo.java b/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
index 2831127..34b8884 100644
--- a/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
+++ b/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
@@ -17,6 +17,7 @@
package android.telephony.ims;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -30,30 +31,37 @@
// Refer to ImsUtInterface#CDIV_CF_XXX
/** @hide */
// TODO: Make private, do not modify this field directly, use getter.
+ @UnsupportedAppUsage
public int mCondition;
// 0: disabled, 1: enabled
/** @hide */
// TODO: Make private, do not modify this field directly, use getter.
+ @UnsupportedAppUsage
public int mStatus;
// 0x91: International, 0x81: Unknown
/** @hide */
// TODO: Make private, do not modify this field directly, use getter.
+ @UnsupportedAppUsage
public int mToA;
// Service class
/** @hide */
// TODO: Make private, do not modify this field directly, use getter.
+ @UnsupportedAppUsage
public int mServiceClass;
// Number (it will not include the "sip" or "tel" URI scheme)
/** @hide */
// TODO: Make private, do not modify this field directly, use getter.
+ @UnsupportedAppUsage
public String mNumber;
// No reply timer for CF
/** @hide */
// TODO: Make private, do not modify this field directly, use getter.
+ @UnsupportedAppUsage
public int mTimeSeconds;
/** @hide */
// TODO: Will be removed in the future, use public constructor instead.
+ @UnsupportedAppUsage
public ImsCallForwardInfo() {
}
diff --git a/telephony/java/android/telephony/ims/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java
index 350dfe3..f0d3c89 100644
--- a/telephony/java/android/telephony/ims/ImsCallProfile.java
+++ b/telephony/java/android/telephony/ims/ImsCallProfile.java
@@ -17,6 +17,7 @@
package android.telephony.ims;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -260,8 +261,10 @@
/** @hide */
public int mServiceType;
/** @hide */
+ @UnsupportedAppUsage
public int mCallType;
/** @hide */
+ @UnsupportedAppUsage
public int mRestrictCause = CALL_RESTRICT_CAUSE_NONE;
/**
@@ -287,8 +290,10 @@
* a {@link android.os.Binder}.
*/
/** @hide */
+ @UnsupportedAppUsage
public Bundle mCallExtras;
/** @hide */
+ @UnsupportedAppUsage
public ImsStreamMediaProfile mMediaProfile;
/** @hide */
@@ -568,6 +573,7 @@
* See {@link #presentationToOir(int)}.
* @hide
*/
+ @UnsupportedAppUsage
public static int presentationToOIR(int presentation) {
switch (presentation) {
case PhoneConstants.PRESENTATION_RESTRICTED:
diff --git a/telephony/java/android/telephony/ims/ImsExternalCallState.java b/telephony/java/android/telephony/ims/ImsExternalCallState.java
index e158fa8..8d18ae8 100644
--- a/telephony/java/android/telephony/ims/ImsExternalCallState.java
+++ b/telephony/java/android/telephony/ims/ImsExternalCallState.java
@@ -17,6 +17,7 @@
package android.telephony.ims;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
@@ -58,6 +59,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public ImsExternalCallState(int callId, Uri address, boolean isPullable, int callState,
int callType, boolean isCallheld) {
mCallId = callId;
diff --git a/telephony/java/android/telephony/ims/ImsReasonInfo.java b/telephony/java/android/telephony/ims/ImsReasonInfo.java
index 662cc7a6..b981f05 100644
--- a/telephony/java/android/telephony/ims/ImsReasonInfo.java
+++ b/telephony/java/android/telephony/ims/ImsReasonInfo.java
@@ -17,6 +17,7 @@
package android.telephony.ims;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -583,12 +584,15 @@
// For main reason code
/** @hide */
+ @UnsupportedAppUsage
public int mCode;
// For the extra code value; it depends on the code value.
/** @hide */
+ @UnsupportedAppUsage
public int mExtraCode;
// For the additional message of the reason info.
/** @hide */
+ @UnsupportedAppUsage
public String mExtraMessage;
/** @hide */
@@ -605,6 +609,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public ImsReasonInfo(int code, int extraCode) {
mCode = code;
mExtraCode = extraCode;
diff --git a/telephony/java/android/telephony/ims/ImsSsInfo.java b/telephony/java/android/telephony/ims/ImsSsInfo.java
index e924a25..3a784c1 100644
--- a/telephony/java/android/telephony/ims/ImsSsInfo.java
+++ b/telephony/java/android/telephony/ims/ImsSsInfo.java
@@ -18,6 +18,7 @@
import android.annotation.IntDef;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -65,15 +66,18 @@
// 0: disabled, 1: enabled
/** @hide */
// TODO: Make private, do not modify this field directly, use getter!
+ @UnsupportedAppUsage
public int mStatus;
/** @hide */
// TODO: Make private, do not modify this field directly, use getter!
+ @UnsupportedAppUsage
public String mIcbNum;
/** @hide */
public int mProvisionStatus = SERVICE_PROVISIONING_UNKNOWN;
/**@hide*/
// TODO: Remove! Do not use this constructor, instead use public version.
+ @UnsupportedAppUsage
public ImsSsInfo() {
}
diff --git a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
index 137106a..52d72b5 100644
--- a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
+++ b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
@@ -17,6 +17,7 @@
package android.telephony.ims;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -82,13 +83,16 @@
// Audio related information
/** @hide */
+ @UnsupportedAppUsage
public int mAudioQuality;
/** @hide */
+ @UnsupportedAppUsage
public int mAudioDirection;
// Video related information
/** @hide */
public int mVideoQuality;
/** @hide */
+ @UnsupportedAppUsage
public int mVideoDirection;
// Rtt related information
/** @hide */
@@ -156,6 +160,7 @@
}
/** @hide */
+ @UnsupportedAppUsage
public ImsStreamMediaProfile() {
mAudioQuality = AUDIO_QUALITY_NONE;
mAudioDirection = DIRECTION_SEND_RECEIVE;
diff --git a/telephony/java/android/telephony/ims/ImsVideoCallProvider.java b/telephony/java/android/telephony/ims/ImsVideoCallProvider.java
index b4f60b9..1772401 100644
--- a/telephony/java/android/telephony/ims/ImsVideoCallProvider.java
+++ b/telephony/java/android/telephony/ims/ImsVideoCallProvider.java
@@ -17,6 +17,7 @@
package android.telephony.ims;
import android.annotation.SystemApi;
+import android.annotation.UnsupportedAppUsage;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
@@ -179,6 +180,7 @@
* Returns binder object which can be used across IPC methods.
* @hide
*/
+ @UnsupportedAppUsage
public final IImsVideoCallProvider getInterface() {
return mBinder;
}
diff --git a/telephony/java/android/telephony/ims/compat/ImsService.java b/telephony/java/android/telephony/ims/compat/ImsService.java
index cf1efb3..2750e51 100644
--- a/telephony/java/android/telephony/ims/compat/ImsService.java
+++ b/telephony/java/android/telephony/ims/compat/ImsService.java
@@ -17,6 +17,7 @@
package android.telephony.ims.compat;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
@@ -86,6 +87,7 @@
/**
* @hide
*/
+ @UnsupportedAppUsage
protected final IBinder mImsServiceController = new IImsServiceController.Stub() {
@Override
diff --git a/telephony/java/android/telephony/ims/compat/feature/ImsFeature.java b/telephony/java/android/telephony/ims/compat/feature/ImsFeature.java
index 0a12cae..e8fcac1 100644
--- a/telephony/java/android/telephony/ims/compat/feature/ImsFeature.java
+++ b/telephony/java/android/telephony/ims/compat/feature/ImsFeature.java
@@ -17,6 +17,7 @@
package android.telephony.ims.compat.feature;
import android.annotation.IntDef;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.os.IInterface;
@@ -104,10 +105,12 @@
mSlotId = slotId;
}
+ @UnsupportedAppUsage
public int getFeatureState() {
return mState;
}
+ @UnsupportedAppUsage
protected final void setFeatureState(@ImsState int state) {
if (mState != state) {
mState = state;
diff --git a/telephony/java/android/telephony/ims/compat/feature/MMTelFeature.java b/telephony/java/android/telephony/ims/compat/feature/MMTelFeature.java
index d3d17f4..40ea208 100644
--- a/telephony/java/android/telephony/ims/compat/feature/MMTelFeature.java
+++ b/telephony/java/android/telephony/ims/compat/feature/MMTelFeature.java
@@ -20,6 +20,7 @@
import android.os.Message;
import android.os.RemoteException;
+import android.annotation.UnsupportedAppUsage;
import android.telephony.ims.ImsCallProfile;
import com.android.ims.internal.IImsCallSession;
import com.android.ims.internal.IImsCallSessionListener;
diff --git a/telephony/java/android/telephony/ims/compat/stub/ImsCallSessionImplBase.java b/telephony/java/android/telephony/ims/compat/stub/ImsCallSessionImplBase.java
index e5ed825..23de2fd 100644
--- a/telephony/java/android/telephony/ims/compat/stub/ImsCallSessionImplBase.java
+++ b/telephony/java/android/telephony/ims/compat/stub/ImsCallSessionImplBase.java
@@ -28,6 +28,7 @@
import com.android.ims.internal.IImsCallSession;
import com.android.ims.internal.IImsVideoCallProvider;
+import android.annotation.UnsupportedAppUsage;
import android.telephony.ims.ImsCallSession;
/**
diff --git a/telephony/java/android/telephony/ims/compat/stub/ImsConfigImplBase.java b/telephony/java/android/telephony/ims/compat/stub/ImsConfigImplBase.java
index 2c325ba8..e55c3d0 100644
--- a/telephony/java/android/telephony/ims/compat/stub/ImsConfigImplBase.java
+++ b/telephony/java/android/telephony/ims/compat/stub/ImsConfigImplBase.java
@@ -16,6 +16,7 @@
package android.telephony.ims.compat.stub;
+import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.os.RemoteException;
@@ -58,6 +59,7 @@
ImsConfigStub mImsConfigStub;
+ @UnsupportedAppUsage
public ImsConfigImplBase(Context context) {
mImsConfigStub = new ImsConfigStub(this, context);
}
@@ -162,6 +164,7 @@
public void setVideoQuality(int quality, ImsConfigListener listener) throws RemoteException {
}
+ @UnsupportedAppUsage
public IImsConfig getIImsConfig() { return mImsConfigStub; }
/**
diff --git a/telephony/java/android/telephony/ims/compat/stub/ImsUtListenerImplBase.java b/telephony/java/android/telephony/ims/compat/stub/ImsUtListenerImplBase.java
index b2aa080..976c2be 100644
--- a/telephony/java/android/telephony/ims/compat/stub/ImsUtListenerImplBase.java
+++ b/telephony/java/android/telephony/ims/compat/stub/ImsUtListenerImplBase.java
@@ -19,6 +19,7 @@
import android.os.Bundle;
import android.os.RemoteException;
+import android.annotation.UnsupportedAppUsage;
import android.telephony.ims.ImsCallForwardInfo;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsSsData;
diff --git a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
index 0d315e5..1ebb697 100644
--- a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
+++ b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
@@ -21,6 +21,7 @@
import android.telephony.SignalStrength;
import android.telephony.CellInfo;
import android.telephony.DataConnectionRealTimeInfo;
+import android.telephony.PhoneCapability;
import android.telephony.PhysicalChannelConfig;
import android.telephony.PreciseCallState;
import android.telephony.PreciseDataConnectionState;
@@ -50,5 +51,6 @@
void onOemHookRawEvent(in byte[] rawData);
void onCarrierNetworkChange(in boolean active);
void onUserMobileDataStateChanged(in boolean enabled);
+ void onPhoneCapabilityChanged(in PhoneCapability capability);
}
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index f9c3940..c59a739 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -1531,4 +1531,10 @@
* @hide
*/
void refreshUiccProfile(int subId);
+
+ /**
+ * How many modems can have simultaneous data connections.
+ * @hide
+ */
+ int getNumberOfModemsWithSimultaneousDataConnections(int subId, String callingPackage);
}
diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
index 0127db9..e0e1a7b 100644
--- a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
@@ -21,6 +21,7 @@
import android.net.NetworkCapabilities;
import android.os.Bundle;
import android.telephony.CellInfo;
+import android.telephony.PhoneCapability;
import android.telephony.PhysicalChannelConfig;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
@@ -74,4 +75,5 @@
void notifySubscriptionInfoChanged();
void notifyCarrierNetworkChange(in boolean active);
void notifyUserMobileDataStateChangedForPhoneId(in int phoneId, in int subId, in boolean state);
+ void notifyPhoneCapabilityChanged(in PhoneCapability capability);
}
diff --git a/telephony/java/com/android/internal/telephony/SmsConstants.java b/telephony/java/com/android/internal/telephony/SmsConstants.java
index 2449108..0aba468 100644
--- a/telephony/java/com/android/internal/telephony/SmsConstants.java
+++ b/telephony/java/com/android/internal/telephony/SmsConstants.java
@@ -58,7 +58,11 @@
* See TS 23.038.
*/
public enum MessageClass{
- UNKNOWN, CLASS_0, CLASS_1, CLASS_2, CLASS_3;
+ UNKNOWN,
+ CLASS_0,
+ CLASS_1,
+ CLASS_2,
+ CLASS_3;
}
/**
diff --git a/tests/libs-permissions/Android.mk b/tests/libs-permissions/Android.mk
index eb38623..f4250c8 100644
--- a/tests/libs-permissions/Android.mk
+++ b/tests/libs-permissions/Android.mk
@@ -13,3 +13,17 @@
LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/permissions
LOCAL_SRC_FILES:= product/com.android.test.libs.product.xml
include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := com.android.test.libs.product_services
+LOCAL_PRODUCT_SERVICES_MODULE := true
+LOCAL_SRC_FILES := $(call all-java-files-under, product_services/java)
+LOCAL_REQUIRED_MODULES := com.android.test.libs.product_services.xml
+include $(BUILD_JAVA_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := com.android.test.libs.product_services.xml
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_SERVICES_ETC)/permissions
+LOCAL_SRC_FILES:= product_services/com.android.test.libs.product_services.xml
+include $(BUILD_PREBUILT)
diff --git a/vr/com.google.vr.platform.xml b/tests/libs-permissions/product_services/com.android.test.libs.product_services.xml
similarity index 74%
rename from vr/com.google.vr.platform.xml
rename to tests/libs-permissions/product_services/com.android.test.libs.product_services.xml
index 952b476..082a9be 100644
--- a/vr/com.google.vr.platform.xml
+++ b/tests/libs-permissions/product_services/com.android.test.libs.product_services.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 The Android Open Source Project
+<!-- 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.
@@ -15,6 +15,6 @@
-->
<permissions>
- <library name="com.google.vr.platform"
- file="/system/framework/com.google.vr.platform.jar" />
+ <library name="com.android.test.libs.product_services"
+ file="/product_services/framework/com.android.test.libs.product_services.jar" />
</permissions>
diff --git a/tests/libs-permissions/product_services/java/com/android/test/libs/product_services/LibsProductServicesTest.java b/tests/libs-permissions/product_services/java/com/android/test/libs/product_services/LibsProductServicesTest.java
new file mode 100644
index 0000000..dcbdae8
--- /dev/null
+++ b/tests/libs-permissions/product_services/java/com/android/test/libs/product_services/LibsProductServicesTest.java
@@ -0,0 +1,29 @@
+/*
+ * 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.test.libs.product_services;
+
+/**
+ * Test class for product_services libs.
+ */
+public class LibsProductServicesTest {
+
+ /**
+ * Dummy method for testing.
+ */
+ public static void test() {
+ }
+}
diff --git a/tests/privapp-permissions/Android.mk b/tests/privapp-permissions/Android.mk
index 9795188..1149b8a 100644
--- a/tests/privapp-permissions/Android.mk
+++ b/tests/privapp-permissions/Android.mk
@@ -46,3 +46,19 @@
LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/permissions
LOCAL_SRC_FILES:= product/privapp-permissions-test.xml
include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_PACKAGE_NAME := ProductServicesPrivAppPermissionTest
+LOCAL_SDK_VERSION := current
+LOCAL_PRIVILEGED_MODULE := true
+LOCAL_MANIFEST_FILE := product_services/AndroidManifest.xml
+LOCAL_PRODUCT_SERVICES_MODULE := true
+LOCAL_REQUIRED_MODULES := product_servicesprivapp-permissions-test.xml
+include $(BUILD_PACKAGE)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := product_servicesprivapp-permissions-test.xml
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_SERVICES_ETC)/permissions
+LOCAL_SRC_FILES:= product_services/privapp-permissions-test.xml
+include $(BUILD_PREBUILT)
diff --git a/tests/privapp-permissions/product_services/AndroidManifest.xml b/tests/privapp-permissions/product_services/AndroidManifest.xml
new file mode 100644
index 0000000..511ddee
--- /dev/null
+++ b/tests/privapp-permissions/product_services/AndroidManifest.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.framework.permission.privapp.tests.product_services">
+
+ <!-- MANAGE_USB is signature|privileged -->
+ <uses-permission android:name="android.permission.MANAGE_USB"/>
+</manifest>
diff --git a/tests/privapp-permissions/product_services/privapp-permissions-test.xml b/tests/privapp-permissions/product_services/privapp-permissions-test.xml
new file mode 100644
index 0000000..43baebb
--- /dev/null
+++ b/tests/privapp-permissions/product_services/privapp-permissions-test.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<permissions>
+ <privapp-permissions package="com.android.framework.permission.privapp.tests.product_services">
+ <permission name="android.permission.MANAGE_USB"/>
+ </privapp-permissions>
+</permissions>
diff --git a/tests/utils/testutils/Android.bp b/tests/utils/testutils/Android.bp
new file mode 100644
index 0000000..4be6534
--- /dev/null
+++ b/tests/utils/testutils/Android.bp
@@ -0,0 +1,30 @@
+//
+// Copyright (C) 2016 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.
+//
+
+java_library {
+ name: "frameworks-base-testutils",
+
+ srcs: ["java/**/*.java"],
+
+ static_libs: ["android-support-test"],
+
+ libs: [
+ "android.test.runner",
+ "android.test.base",
+ "android.test.mock",
+ "mockito-target-minus-junit4",
+ ],
+}
diff --git a/tests/utils/testutils/Android.mk b/tests/utils/testutils/Android.mk
deleted file mode 100644
index a76616f..0000000
--- a/tests/utils/testutils/Android.mk
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Copyright (C) 2016 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := frameworks-base-testutils
-LOCAL_MODULE_TAG := tests
-
-LOCAL_SRC_FILES := $(call all-java-files-under,java)
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
- android-support-test
-
-LOCAL_JAVA_LIBRARIES := \
- android.test.runner \
- android.test.base \
- android.test.mock \
- mockito-target-minus-junit4 \
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/tools/aapt2/format/Container.cpp b/tools/aapt2/format/Container.cpp
index 739555c..d4b4571 100644
--- a/tools/aapt2/format/Container.cpp
+++ b/tools/aapt2/format/Container.cpp
@@ -270,7 +270,8 @@
}
if (magic != kContainerFormatMagic) {
- error_ = "magic value doesn't match AAPT";
+ error_ =
+ StringPrintf("magic value is 0x%08x but AAPT expects 0x%08x", magic, kContainerFormatMagic);
return;
}
diff --git a/tools/aapt2/format/binary/TableFlattener.cpp b/tools/aapt2/format/binary/TableFlattener.cpp
index 6fd4c8d..8641a7c 100644
--- a/tools/aapt2/format/binary/TableFlattener.cpp
+++ b/tools/aapt2/format/binary/TableFlattener.cpp
@@ -133,11 +133,10 @@
}
void Visit(Array* array) override {
- for (auto& item : array->elements) {
- ResTable_map* out_entry = buffer_->NextBlock<ResTable_map>();
- FlattenValue(item.get(), out_entry);
- out_entry->value.size = util::HostToDevice16(sizeof(out_entry->value));
- entry_count_++;
+ const size_t count = array->elements.size();
+ for (size_t i = 0; i < count; i++) {
+ Reference key(android::ResTable_map::ATTR_MIN + i);
+ FlattenEntry(&key, array->elements[i].get());
}
}
diff --git a/tools/aapt2/format/binary/TableFlattener_test.cpp b/tools/aapt2/format/binary/TableFlattener_test.cpp
index bab7010..af19b98 100644
--- a/tools/aapt2/format/binary/TableFlattener_test.cpp
+++ b/tools/aapt2/format/binary/TableFlattener_test.cpp
@@ -17,7 +17,9 @@
#include "format/binary/TableFlattener.h"
#include "android-base/stringprintf.h"
+#include "androidfw/TypeWrappers.h"
+#include "ResChunkPullParser.h"
#include "ResourceUtils.h"
#include "SdkConstants.h"
#include "format/binary/BinaryResourceParser.h"
@@ -236,6 +238,62 @@
EXPECT_EQ(attr.max_int, actual_attr->max_int);
}
+TEST_F(TableFlattenerTest, FlattenArray) {
+ auto array = util::make_unique<Array>();
+ array->elements.push_back(util::make_unique<BinaryPrimitive>(uint8_t(Res_value::TYPE_INT_DEC),
+ 1u));
+ array->elements.push_back(util::make_unique<BinaryPrimitive>(uint8_t(Res_value::TYPE_INT_DEC),
+ 2u));
+ std::unique_ptr<ResourceTable> table =
+ test::ResourceTableBuilder()
+ .SetPackageId("android", 0x01)
+ .AddValue("android:array/foo", ResourceId(0x01010000), std::move(array))
+ .Build();
+
+ std::string result;
+ ASSERT_TRUE(Flatten(context_.get(), {}, table.get(), &result));
+
+ // Parse the flattened resource table
+ ResChunkPullParser parser(result.data(), result.size());
+ ASSERT_TRUE(parser.IsGoodEvent(parser.Next()));
+ ASSERT_EQ(util::DeviceToHost16(parser.chunk()->type), RES_TABLE_TYPE);
+
+ // Retrieve the package of the entry
+ ResChunkPullParser table_parser(GetChunkData(parser.chunk()), GetChunkDataLen(parser.chunk()));
+ const ResChunk_header* package_chunk = nullptr;
+ while (table_parser.IsGoodEvent(table_parser.Next())) {
+ if (util::DeviceToHost16(table_parser.chunk()->type) == RES_TABLE_PACKAGE_TYPE) {
+ package_chunk = table_parser.chunk();
+ break;
+ }
+ }
+
+ // Retrieve the type that proceeds the array entry
+ ASSERT_NE(package_chunk, nullptr);
+ ResChunkPullParser package_parser(GetChunkData(table_parser.chunk()),
+ GetChunkDataLen(table_parser.chunk()));
+ const ResChunk_header* type_chunk = nullptr;
+ while (package_parser.IsGoodEvent(package_parser.Next())) {
+ if (util::DeviceToHost16(package_parser.chunk()->type) == RES_TABLE_TYPE_TYPE) {
+ type_chunk = package_parser.chunk();
+ break;
+ }
+ }
+
+ // Retrieve the array entry
+ ASSERT_NE(type_chunk, nullptr);
+ TypeVariant typeVariant((const ResTable_type*) type_chunk);
+ auto entry = (const ResTable_map_entry*)*typeVariant.beginEntries();
+ ASSERT_EQ(util::DeviceToHost16(entry->count), 2u);
+
+ // Check that the value and name of the array entries are correct
+ auto values = (const ResTable_map*)(((const uint8_t *)entry) + entry->size);
+ ASSERT_EQ(values->value.data, 1u);
+ ASSERT_EQ(values->name.ident, android::ResTable_map::ATTR_MIN);
+ ASSERT_EQ((values+1)->value.data, 2u);
+ ASSERT_EQ((values+1)->name.ident, android::ResTable_map::ATTR_MIN + 1);
+}
+
static std::unique_ptr<ResourceTable> BuildTableWithSparseEntries(
IAaptContext* context, const ConfigDescription& sparse_config, float load) {
std::unique_ptr<ResourceTable> table =
diff --git a/tools/aapt2/process/SymbolTable.cpp b/tools/aapt2/process/SymbolTable.cpp
index fc4c9b5..70efbf5 100644
--- a/tools/aapt2/process/SymbolTable.cpp
+++ b/tools/aapt2/process/SymbolTable.cpp
@@ -194,6 +194,7 @@
if (sr.package->id && sr.type->id && sr.entry->id) {
symbol->id = ResourceId(sr.package->id.value(), sr.type->id.value(), sr.entry->id.value());
+ symbol->is_dynamic = (sr.package->id.value() == 0);
}
if (name.type == ResourceType::kAttr || name.type == ResourceType::kAttrPrivate) {
diff --git a/tools/stats_log_api_gen/Collation.cpp b/tools/stats_log_api_gen/Collation.cpp
index ebdcdfd..40ee490 100644
--- a/tools/stats_log_api_gen/Collation.cpp
+++ b/tools/stats_log_api_gen/Collation.cpp
@@ -116,6 +116,9 @@
if (field->message_type()->full_name() ==
"android.os.statsd.AttributionNode") {
return JAVA_TYPE_ATTRIBUTION_CHAIN;
+ } else if (field->message_type()->full_name() ==
+ "android.os.statsd.KeyValuePair") {
+ return JAVA_TYPE_KEY_VALUE_PAIR;
} else {
return JAVA_TYPE_OBJECT;
}
@@ -181,6 +184,16 @@
expectedNumber++;
}
+ // Skips the key value pair atom.
+ for (map<int, const FieldDescriptor *>::const_iterator it = fields.begin();
+ it != fields.end(); it++) {
+ const FieldDescriptor *field = it->second;
+ java_type_t javaType = java_type(field);
+ if (javaType == JAVA_TYPE_KEY_VALUE_PAIR) {
+ return 0;
+ }
+ }
+
// Check that only allowed types are present. Remove any invalid ones.
for (map<int, const FieldDescriptor *>::const_iterator it = fields.begin();
it != fields.end(); it++) {
diff --git a/tools/stats_log_api_gen/Collation.h b/tools/stats_log_api_gen/Collation.h
index 5d2c302..ccdd145 100644
--- a/tools/stats_log_api_gen/Collation.h
+++ b/tools/stats_log_api_gen/Collation.h
@@ -48,6 +48,7 @@
JAVA_TYPE_DOUBLE = 6,
JAVA_TYPE_STRING = 7,
JAVA_TYPE_ENUM = 8,
+ JAVA_TYPE_KEY_VALUE_PAIR = 9,
JAVA_TYPE_OBJECT = -1,
JAVA_TYPE_BYTE_ARRAY = -2,
diff --git a/vr/Android.bp b/vr/Android.bp
deleted file mode 100644
index 775ec96..0000000
--- a/vr/Android.bp
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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.
-
-// Library to perform dlopen on the actual shared library.
-cc_library_shared {
- name: "libdvr_loader",
- owner: "google",
- srcs: ["dvr_library_loader.cpp"],
- cflags: [
- "-Wall",
- "-Werror",
- ],
-}
-
-// Java platform library for vr stuff.
-java_library {
- name: "com.google.vr.platform",
- installable: true,
- owner: "google",
- required: [
- "libdvr_loader",
- "libdvr",
- ],
- srcs: ["java/**/*.java"],
-}
-
-prebuilt_etc_xml {
- name: "com.google.vr.platform.xml",
- src: "com.google.vr.platform.xml",
-}
diff --git a/vr/dvr_library_loader.cpp b/vr/dvr_library_loader.cpp
deleted file mode 100644
index 0b4298a..0000000
--- a/vr/dvr_library_loader.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <dlfcn.h>
-#include <jni.h>
-
-#include <string>
-
-extern "C" {
-
-JNIEXPORT jlong JNICALL
-Java_com_google_vr_platform_Dvr_nativeLoadLibrary(
- JNIEnv* env, jclass, jstring java_library) {
- if (!java_library)
- return 0;
-
- // Convert the Java String object to a C++ null-terminated string.
- const char* data = env->GetStringUTFChars(java_library, NULL);
- size_t size = env->GetStringUTFLength(java_library);
- std::string library(data, size);
- env->ReleaseStringUTFChars(java_library, data);
-
- // Return the handle to the requested library.
- return reinterpret_cast<jlong>(
- dlopen(library.c_str(), RTLD_NOW | RTLD_LOCAL));
-}
-
-} // extern "C"
diff --git a/vr/java/com/google/vr/platform/DeviceInfo.java b/vr/java/com/google/vr/platform/DeviceInfo.java
deleted file mode 100644
index 6a4617d..0000000
--- a/vr/java/com/google/vr/platform/DeviceInfo.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.google.vr.platform;
-
-import android.annotation.UnsupportedAppUsage;
-import android.os.SystemProperties;
-
-/**
- * Class to get information about the vr device.
- * @hide
- */
-public class DeviceInfo {
-
- private static final String VR_MODE_BOOT = "ro.boot.vr";
-
- /**
- * Returns true if this device boots directly in VR mode.
- */
- @UnsupportedAppUsage
- public static boolean getVrBoot() {
- return SystemProperties.getBoolean(VR_MODE_BOOT, false);
- }
-}
diff --git a/vr/java/com/google/vr/platform/Dvr.java b/vr/java/com/google/vr/platform/Dvr.java
deleted file mode 100644
index 41dcd87..0000000
--- a/vr/java/com/google/vr/platform/Dvr.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.google.vr.platform;
-
-import android.annotation.UnsupportedAppUsage;
-
-/**
- * Class to load the dvr api.
- * @hide
- */
-public class Dvr {
- /**
- * Opens a shared library containing the dvr api and returns the handle to it.
- *
- * @return A Long object describing the handle returned by dlopen.
- */
- @UnsupportedAppUsage
- public static Long loadLibrary() {
- // Load a thin JNI library that runs dlopen on request.
- System.loadLibrary("dvr_loader");
-
- // Performs dlopen on the library and returns the handle.
- return nativeLoadLibrary("libdvr.so");
- }
-
- private static native long nativeLoadLibrary(String library);
-}
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 5631919..12f50c8 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -126,7 +126,7 @@
void acquireMulticastLock(IBinder binder, String tag);
- void releaseMulticastLock();
+ void releaseMulticastLock(String tag);
void updateInterfaceIpState(String ifaceName, int mode);
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index f7de370..b56a758 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -318,6 +318,31 @@
"android.net.wifi.extra.SUBSCRIPTION_REMEDIATION_METHOD";
/**
+ * Activity Action: lunch OSU (Online Sign Up) view.
+ * Included extras:
+ *
+ * {@link #EXTRA_OSU_NETWORK}: {@link Network} instance associated with OSU AP.
+ * {@link #EXTRA_URL}: String representation of a server URL used for OSU process.
+ *
+ * <p>Note: The broadcast is only delivered to registered receivers - no manifest registered
+ * components will be launched.
+ *
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_PASSPOINT_LAUNCH_OSU_VIEW =
+ "android.net.wifi.action.PASSPOINT_LAUNCH_OSU_VIEW";
+
+ /**
+ * The lookup key for a {@link android.net.Network} associated with OSU server.
+ *
+ * Retrieve with {@link android.content.Intent#getParcelableExtra(String)}.
+ *
+ * @hide
+ */
+ public static final String EXTRA_OSU_NETWORK = "android.net.wifi.extra.OSU_NETWORK";
+
+ /**
* Broadcast intent action indicating that Wi-Fi has been enabled, disabled,
* enabling, disabling, or unknown. One extra provides this state as an int.
* Another extra provides the previous state, if available.
@@ -3409,7 +3434,7 @@
mService.acquireMulticastLock(mBinder, mTag);
synchronized (WifiManager.this) {
if (mActiveLockCount >= MAX_ACTIVE_LOCKS) {
- mService.releaseMulticastLock();
+ mService.releaseMulticastLock(mTag);
throw new UnsupportedOperationException(
"Exceeded maximum number of wifi locks");
}
@@ -3451,7 +3476,7 @@
synchronized (mBinder) {
if (mRefCounted ? (--mRefCount == 0) : (mHeld)) {
try {
- mService.releaseMulticastLock();
+ mService.releaseMulticastLock(mTag);
synchronized (WifiManager.this) {
mActiveLockCount--;
}
diff --git a/wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java b/wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java
index 66297fc..ef9c59f 100644
--- a/wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java
+++ b/wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java
@@ -85,6 +85,17 @@
public static final int OSU_FAILURE_SOAP_MESSAGE_EXCHANGE = 11;
/**
+ * The reason code for provisioning failure when a redirect server fails to start.
+ */
+ public static final int OSU_FAILURE_START_REDIRECT_SERVER = 12;
+
+ /**
+ * The reason code for provisioning failure when there is no OSU activity to listen to
+ * {@link WifiManager#ACTION_PASSPOINT_LAUNCH_OSU_VIEW} intent.
+ */
+ public static final int OSU_FAILURE_NO_OSU_ACTIVITY_FOUND = 13;
+
+ /**
* The status code for provisioning flow to indicate connecting to OSU AP
*/
public static final int OSU_STATUS_AP_CONNECTING = 1;
@@ -115,6 +126,16 @@
public static final int OSU_STATUS_INIT_SOAP_EXCHANGE = 6;
/**
+ * The status code for provisioning flow to indicate waiting for a HTTP redirect response.
+ */
+ public static final int OSU_STATUS_WAITING_FOR_REDIRECT_RESPONSE = 7;
+
+ /**
+ * The status code for provisioning flow to indicate a HTTP redirect response is received.
+ */
+ public static final int OSU_STATUS_REDIRECT_RESPONSE_RECEIVED = 8;
+
+ /**
* Provisioning status for OSU failure
*
* @param status indicates error condition