summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.bp34
-rw-r--r--Android.mk30
-rw-r--r--api/test-current.txt13
-rw-r--r--config/hiddenapi-light-greylist.txt684
-rw-r--r--config/hiddenapi-vendor-list.txt33
-rw-r--r--config/preloaded-classes6
-rw-r--r--core/java/android/app/ActivityManager.java15
-rw-r--r--core/java/android/app/ActivityTaskManager.java138
-rw-r--r--core/java/android/app/ResourcesManager.java2
-rw-r--r--core/java/android/app/job/JobSnapshot.java10
-rw-r--r--core/java/android/bluetooth/BluetoothAdapter.java12
-rw-r--r--core/java/android/hardware/biometrics/BiometricPrompt.java1
-rw-r--r--core/java/android/hardware/fingerprint/FingerprintManager.java21
-rw-r--r--core/java/android/os/Debug.java10
-rw-r--r--core/java/android/os/IPowerManager.aidl1
-rw-r--r--core/java/android/os/PowerManager.java33
-rw-r--r--core/java/android/preference/SeekBarVolumizer.java23
-rw-r--r--core/java/android/service/autofill/UserData.java18
-rw-r--r--core/java/android/service/notification/INotificationListener.aidl2
-rw-r--r--core/java/android/service/notification/NotificationAssistantService.java24
-rw-r--r--core/java/android/service/notification/NotificationListenerService.java6
-rw-r--r--core/java/android/view/AccessibilityIterators.java2
-rw-r--r--core/java/android/view/ActionProvider.java3
-rw-r--r--core/java/android/view/AppTransitionAnimationSpec.java2
-rw-r--r--core/java/android/view/BatchedInputEventReceiver.java2
-rw-r--r--core/java/android/view/Choreographer.java14
-rw-r--r--core/java/android/view/ContextThemeWrapper.java7
-rw-r--r--core/java/android/view/Display.java14
-rw-r--r--core/java/android/view/DisplayAdjustments.java4
-rw-r--r--core/java/android/view/DisplayEventReceiver.java8
-rw-r--r--core/java/android/view/DisplayInfo.java6
-rw-r--r--core/java/android/view/DisplayListCanvas.java5
-rw-r--r--core/java/android/view/DragEvent.java4
-rw-r--r--core/java/android/view/FrameMetrics.java2
-rw-r--r--core/java/android/view/FrameMetricsObserver.java4
-rw-r--r--core/java/android/view/GestureDetector.java6
-rw-r--r--core/java/android/view/GhostView.java4
-rw-r--r--core/java/android/view/InputChannel.java4
-rw-r--r--core/java/android/view/InputDevice.java5
-rw-r--r--core/java/android/view/InputEvent.java2
-rw-r--r--core/java/android/view/InputEventConsistencyVerifier.java5
-rw-r--r--core/java/android/view/InputEventReceiver.java4
-rw-r--r--core/java/android/view/InputEventSender.java2
-rw-r--r--core/java/android/view/InputFilter.java3
-rw-r--r--core/java/android/view/InputQueue.java2
-rw-r--r--core/java/android/view/KeyCharacterMap.java4
-rw-r--r--core/java/android/view/KeyEvent.java26
-rw-r--r--core/java/android/view/LayoutInflater.java14
-rw-r--r--core/java/android/view/MotionEvent.java17
-rw-r--r--core/java/android/view/NotificationHeaderView.java2
-rw-r--r--core/java/android/view/PointerIcon.java8
-rw-r--r--core/java/android/view/RemoteAnimationAdapter.java2
-rw-r--r--core/java/android/view/RemoteAnimationDefinition.java4
-rw-r--r--core/java/android/view/RemoteAnimationTarget.java12
-rw-r--r--core/java/android/view/RenderNode.java12
-rw-r--r--core/java/android/view/RenderNodeAnimator.java8
-rw-r--r--core/java/android/view/ScaleGestureDetector.java4
-rw-r--r--core/java/android/view/Surface.java12
-rw-r--r--core/java/android/view/SurfaceControl.java43
-rw-r--r--core/java/android/view/SurfaceSession.java5
-rw-r--r--core/java/android/view/SurfaceView.java19
-rw-r--r--core/java/android/view/TextureView.java12
-rw-r--r--core/java/android/view/ThreadedRenderer.java7
-rw-r--r--core/java/android/view/TouchDelegate.java2
-rw-r--r--core/java/android/view/VelocityTracker.java6
-rw-r--r--core/java/android/view/View.java179
-rw-r--r--core/java/android/view/ViewConfiguration.java11
-rw-r--r--core/java/android/view/ViewDebug.java5
-rw-r--r--core/java/android/view/ViewGroup.java38
-rw-r--r--core/java/android/view/ViewHierarchyEncoder.java5
-rw-r--r--core/java/android/view/ViewOverlay.java3
-rw-r--r--core/java/android/view/ViewRootImpl.java36
-rw-r--r--core/java/android/view/ViewTreeObserver.java19
-rw-r--r--core/java/android/view/Window.java20
-rw-r--r--core/java/android/view/WindowAnimationFrameStats.java2
-rw-r--r--core/java/android/view/WindowContentFrameStats.java2
-rw-r--r--core/java/android/view/WindowInsets.java5
-rw-r--r--core/java/android/view/WindowManager.java17
-rw-r--r--core/java/android/view/WindowManagerGlobal.java19
-rw-r--r--core/java/android/view/WindowManagerImpl.java2
-rw-r--r--core/java/android/view/accessibility/AccessibilityEvent.java3
-rw-r--r--core/java/android/view/accessibility/AccessibilityInteractionClient.java4
-rw-r--r--core/java/android/view/accessibility/AccessibilityManager.java14
-rw-r--r--core/java/android/view/accessibility/AccessibilityNodeInfo.java10
-rw-r--r--core/java/android/view/accessibility/AccessibilityRecord.java4
-rw-r--r--core/java/android/view/accessibility/CaptioningManager.java2
-rw-r--r--core/java/android/view/inputmethod/InputMethodInfo.java3
-rw-r--r--core/java/android/view/inputmethod/InputMethodManager.java30
-rw-r--r--core/java/android/view/inputmethod/InputMethodSubtypeArray.java2
-rw-r--r--core/java/android/view/textclassifier/TextClassificationManager.java2
-rw-r--r--core/java/android/view/textclassifier/TextClassifier.java4
-rw-r--r--core/java/android/view/textclassifier/TextLinks.java2
-rw-r--r--core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java9
-rw-r--r--core/java/android/view/textservice/SpellCheckerSession.java2
-rw-r--r--core/java/android/view/textservice/TextServicesManager.java6
-rw-r--r--core/java/android/widget/MediaController.java3
-rw-r--r--core/java/com/android/internal/app/procstats/ProcessStats.java2
-rw-r--r--core/java/com/android/internal/os/HandlerCaller.java6
-rw-r--r--core/res/AndroidManifest.xml9
-rw-r--r--core/res/res/values-watch/config.xml5
-rw-r--r--graphics/java/android/graphics/fonts/SystemFonts.java3
-rw-r--r--libs/hwui/renderthread/VulkanManager.cpp97
-rw-r--r--libs/hwui/renderthread/VulkanManager.h7
-rw-r--r--media/java/android/media/audiofx/DefaultEffect.java1
-rw-r--r--media/java/android/media/audiofx/SourceDefaultEffect.java118
-rw-r--r--media/jni/audioeffect/Android.bp1
-rw-r--r--media/jni/audioeffect/android_media_AudioEffect.cpp6
-rw-r--r--media/jni/audioeffect/android_media_SourceDefaultEffect.cpp142
-rw-r--r--packages/ExtServices/src/android/ext/services/notification/AgingHelper.java172
-rw-r--r--packages/ExtServices/src/android/ext/services/notification/Assistant.java84
-rw-r--r--packages/ExtServices/src/android/ext/services/notification/NotificationEntry.java9
-rw-r--r--packages/ExtServices/tests/src/android/ext/services/notification/AgingHelperTest.java153
-rw-r--r--packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java27
-rw-r--r--packages/PackageInstaller/AndroidManifest.xml14
-rw-r--r--packages/PackageInstaller/res/layout/install_confirm.xml91
-rw-r--r--packages/PackageInstaller/res/layout/install_content_view.xml144
-rw-r--r--packages/PackageInstaller/res/layout/install_failed.xml96
-rw-r--r--packages/PackageInstaller/res/layout/install_installing.xml108
-rw-r--r--packages/PackageInstaller/res/layout/install_staging.xml113
-rw-r--r--packages/PackageInstaller/res/layout/install_success.xml101
-rw-r--r--packages/PackageInstaller/res/values-night/themes.xml23
-rw-r--r--packages/PackageInstaller/res/values/strings.xml4
-rwxr-xr-xpackages/PackageInstaller/res/values/styles.xml39
-rw-r--r--packages/PackageInstaller/res/values/themes.xml20
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java45
-rwxr-xr-xpackages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java52
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/InstallStaging.java27
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java34
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/OverlayTouchActivity.java29
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java80
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java20
-rw-r--r--packages/SettingsLib/OWNERS4
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java4
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java6
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java12
-rw-r--r--packages/SystemUI/res/layout/notification_snooze.xml4
-rw-r--r--packages/SystemUI/res/layout/notification_snooze_option.xml2
-rw-r--r--packages/SystemUI/res/values-television/styles.xml1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java28
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java31
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java1
-rw-r--r--packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java15
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java77
-rw-r--r--services/core/java/com/android/server/BluetoothManagerService.java20
-rw-r--r--services/core/java/com/android/server/TelephonyRegistry.java39
-rw-r--r--services/core/java/com/android/server/biometrics/common/AuthenticationClient.java19
-rw-r--r--services/core/java/com/android/server/biometrics/common/BiometricService.java1
-rw-r--r--services/core/java/com/android/server/notification/NotificationManagerService.java70
-rw-r--r--services/core/java/com/android/server/pm/permission/BasePermission.java5
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionsState.java9
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java24
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerService.java29
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java8
-rw-r--r--telephony/java/android/telephony/ModemInfo.java104
-rw-r--r--telephony/java/android/telephony/PhoneCapability.aidl20
-rw-r--r--telephony/java/android/telephony/PhoneCapability.java111
-rw-r--r--telephony/java/android/telephony/PhoneStateListener.java29
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java19
-rw-r--r--telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl2
-rw-r--r--telephony/java/com/android/internal/telephony/ITelephony.aidl6
-rw-r--r--telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl2
-rw-r--r--telephony/java/com/android/internal/telephony/SmsConstants.java6
-rw-r--r--tools/aapt2/format/Container.cpp3
-rw-r--r--tools/aapt2/format/binary/TableFlattener.cpp9
-rw-r--r--tools/aapt2/format/binary/TableFlattener_test.cpp58
-rw-r--r--tools/aapt2/process/SymbolTable.cpp1
-rw-r--r--wifi/java/android/net/wifi/IWifiManager.aidl2
-rw-r--r--wifi/java/android/net/wifi/WifiManager.java29
-rw-r--r--wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java21
173 files changed, 2996 insertions, 1663 deletions
diff --git a/Android.bp b/Android.bp
index 028e8a45fd03..a81b7f2000b0 100644
--- a/Android.bp
+++ b/Android.bp
@@ -801,6 +801,40 @@ java_library_host {
},
}
+// ==== 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",
diff --git a/Android.mk b/Android.mk
index edbb94ddb22a..29454e4ae304 100644
--- a/Android.mk
+++ b/Android.mk
@@ -321,36 +321,6 @@ $(OUT_DOCS)/offline-sdk-timestamp: $(OUT_DOCS)/offline-sdk-docs-docs.zip
$(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/test-current.txt b/api/test-current.txt
index 3fa202f14d65..35c6c4802439 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -8,6 +8,8 @@ package android {
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 @@ package android.app {
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 @@ package android.app {
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
@@ -1456,6 +1468,7 @@ package android.view {
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/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt
index 3a917093e116..8da12154cf1e 100644
--- a/config/hiddenapi-light-greylist.txt
+++ b/config/hiddenapi-light-greylist.txt
@@ -1590,37 +1590,6 @@ Landroid/transition/TransitionManager;->getRunningTransitions()Landroid/util/Arr
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
@@ -1629,129 +1598,12 @@ Landroid/view/accessibility/IAccessibilityManager$Stub;-><init>()V
Landroid/view/accessibility/IAccessibilityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/accessibility/IAccessibilityManager;
Landroid/view/accessibility/IAccessibilityManager;->getEnabledAccessibilityServiceList(II)Ljava/util/List;
Landroid/view/AccessibilityIterators$AbstractTextSegmentIterator;-><init>()V
-Landroid/view/AccessibilityIterators$AbstractTextSegmentIterator;->mText:Ljava/lang/String;
-Landroid/view/ActionProvider;->reset()V
-Landroid/view/ActionProvider;->setSubUiVisibilityListener(Landroid/view/ActionProvider$SubUiVisibilityListener;)V
Landroid/view/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
@@ -1808,545 +1660,9 @@ Landroid/view/IWindowSession;->setInTouchMode(Z)V
Landroid/view/IWindowSession;->setTransparentRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V
Landroid/view/IWindowSession;->wallpaperCommandComplete(Landroid/os/IBinder;Landroid/os/Bundle;)V
Landroid/view/IWindowSession;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V
-Landroid/view/KeyCharacterMap$FallbackAction;->keyCode:I
-Landroid/view/KeyCharacterMap$FallbackAction;->metaState:I
-Landroid/view/KeyCharacterMap;-><init>(J)V
-Landroid/view/KeyEvent;->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/IWebViewUpdateService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/webkit/IWebViewUpdateService$Stub$Proxy;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
diff --git a/config/hiddenapi-vendor-list.txt b/config/hiddenapi-vendor-list.txt
index 11f1e8f7c3fa..c51a8d4e8d0c 100644
--- a/config/hiddenapi-vendor-list.txt
+++ b/config/hiddenapi-vendor-list.txt
@@ -148,12 +148,7 @@ Landroid/telephony/mbms/vendor/IMbmsStreamingService;->getPlaybackUri(ILjava/lan
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/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
@@ -171,34 +166,6 @@ Landroid/view/IWindowManager;->getStableInsets(ILandroid/graphics/Rect;)V
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/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
diff --git a/config/preloaded-classes b/config/preloaded-classes
index 001479370fb9..63c583f9264c 100644
--- a/config/preloaded-classes
+++ b/config/preloaded-classes
@@ -6236,9 +6236,9 @@ org.json.JSONObject$1
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/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 63ffa8bc5369..c12d8e21b5e8 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -3360,7 +3360,7 @@ public class ActivityManager {
* @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 @@ public class ActivityManager {
}
/**
+ * @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 2f18b89d9c69..af8aa4e7c3b4 100644
--- a/core/java/android/app/ActivityTaskManager.java
+++ b/core/java/android/app/ActivityTaskManager.java
@@ -29,6 +29,8 @@ import android.os.RemoteException;
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 @@ public class ActivityTaskManager {
&& 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 6d1383ad54ef..2d9fbf974397 100644
--- a/core/java/android/app/ResourcesManager.java
+++ b/core/java/android/app/ResourcesManager.java
@@ -125,7 +125,7 @@ public class ResourcesManager {
}
}
- 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/job/JobSnapshot.java b/core/java/android/app/job/JobSnapshot.java
index d6cc70dc3631..ceeaab7c5e6e 100644
--- a/core/java/android/app/job/JobSnapshot.java
+++ b/core/java/android/app/job/JobSnapshot.java
@@ -50,6 +50,14 @@ public class JobSnapshot implements Parcelable {
}
/**
+ * 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 class JobSnapshot implements Parcelable {
*/
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 3c22905550ca..4c655b5ac027 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -446,6 +446,12 @@ public final class BluetoothAdapter {
*/
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 @@ public final class BluetoothAdapter {
* @hide
*/
@RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @IoCapability
public int getIoCapability() {
if (getState() != STATE_ON) return BluetoothAdapter.IO_CAPABILITY_UNKNOWN;
try {
@@ -1319,7 +1326,7 @@ public final class BluetoothAdapter {
* @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 @@ public final class BluetoothAdapter {
* @hide
*/
@RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @IoCapability
public int getLeIoCapability() {
if (getState() != STATE_ON) return BluetoothAdapter.IO_CAPABILITY_UNKNOWN;
try {
@@ -1369,7 +1377,7 @@ public final class BluetoothAdapter {
* @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/hardware/biometrics/BiometricPrompt.java b/core/java/android/hardware/biometrics/BiometricPrompt.java
index bad418acc653..02bcff546b10 100644
--- a/core/java/android/hardware/biometrics/BiometricPrompt.java
+++ b/core/java/android/hardware/biometrics/BiometricPrompt.java
@@ -69,6 +69,7 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan
* @hide
*/
public static final int HIDE_DIALOG_DELAY = 2000; // ms
+
/**
* @hide
*/
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index bf5ab9060fec..15868f12eb64 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -1162,24 +1162,9 @@ public class FingerprintManager implements BiometricFingerprintConstants {
@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/os/Debug.java b/core/java/android/os/Debug.java
index e6069644caa5..6ddcbe0b3b64 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -1752,13 +1752,13 @@ public final class Debug
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/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 13e4e38df5f6..7ceeb526ffcf 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -56,6 +56,7 @@ interface IPowerManager
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 463a6aa20d04..89a5defd221d 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -397,6 +397,23 @@ public final class PowerManager {
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 @@ public final class PowerManager {
}
/**
+ * 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/SeekBarVolumizer.java b/core/java/android/preference/SeekBarVolumizer.java
index 0efec0ba8274..ad7b103d5e99 100644
--- a/core/java/android/preference/SeekBarVolumizer.java
+++ b/core/java/android/preference/SeekBarVolumizer.java
@@ -89,6 +89,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
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;
@@ -103,6 +104,15 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
@UnsupportedAppUsage
public SeekBarVolumizer(Context context, int streamType, Uri defaultUri, Callback callback) {
+ this(context, streamType, defaultUri, callback, true);
+ }
+
+ public SeekBarVolumizer(
+ Context context,
+ int streamType,
+ Uri defaultUri,
+ Callback callback,
+ boolean playSample) {
mContext = context;
mAudioManager = context.getSystemService(AudioManager.class);
mNotificationManager = context.getSystemService(NotificationManager.class);
@@ -125,6 +135,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
mOriginalStreamVolume = mAudioManager.getStreamVolume(mStreamType);
mLastAudibleStreamVolume = mAudioManager.getLastAudibleStreamVolume(mStreamType);
mMuted = mAudioManager.isStreamMute(mStreamType);
+ mPlaySample = playSample;
if (mCallback != null) {
mCallback.onMuted(mMuted, isZenMuted());
}
@@ -199,13 +210,19 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
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);
diff --git a/core/java/android/service/autofill/UserData.java b/core/java/android/service/autofill/UserData.java
index 55aecddf8365..fccb85b957fa 100644
--- a/core/java/android/service/autofill/UserData.java
+++ b/core/java/android/service/autofill/UserData.java
@@ -145,6 +145,9 @@ public final class UserData implements Parcelable {
// 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 @@ public final class UserData implements Parcelable {
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 @@ public final class UserData implements Parcelable {
* @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 @@ public final class UserData implements Parcelable {
// 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 @@ public final class UserData implements Parcelable {
}
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/notification/INotificationListener.aidl b/core/java/android/service/notification/INotificationListener.aidl
index 2dff7161a068..d8bd00281ba5 100644
--- a/core/java/android/service/notification/INotificationListener.aidl
+++ b/core/java/android/service/notification/INotificationListener.aidl
@@ -18,6 +18,7 @@ package android.service.notification;
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 @@ oneway interface INotificationListener
// 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 3853fc54773f..3b820ca1e165 100644
--- a/core/java/android/service/notification/NotificationAssistantService.java
+++ b/core/java/android/service/notification/NotificationAssistantService.java
@@ -149,6 +149,14 @@ public abstract class NotificationAssistantService extends NotificationListenerS
}
/**
+ * 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 @@ public abstract class NotificationAssistantService extends NotificationListenerS
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 @@ public abstract class NotificationAssistantService extends NotificationListenerS
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 98da5694456d..1b588f470971 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -1332,6 +1332,12 @@ public abstract class NotificationListenerService extends Service {
}
@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/view/AccessibilityIterators.java b/core/java/android/view/AccessibilityIterators.java
index ca54bef1e780..9f7560c79166 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 final class AccessibilityIterators {
*/
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 353b4c26fe50..cd7e67e61b61 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 @@ public abstract class ActionProvider {
/**
* @hide Internal use only
*/
+ @UnsupportedAppUsage
public void setSubUiVisibilityListener(SubUiVisibilityListener listener) {
mSubUiVisibilityListener = listener;
}
@@ -240,6 +242,7 @@ public abstract class ActionProvider {
/**
* @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 86a5fb761355..6585e40c67d1 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 class AppTransitionAnimationSpec implements Parcelable {
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 b1d28e000bc8..61ccac991eea 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 @@ public class BatchedInputEventReceiver extends InputEventReceiver {
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 f8cfd0da4952..ce16ffc82090 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_APP;
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 @@ public final class Choreographer {
};
// 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 final class Choreographer {
public String toString() { return "FRAME_CALLBACK_TOKEN"; }
};
+ @UnsupportedAppUsage
private final Object mLock = new Object();
private final Looper mLooper;
@@ -159,15 +162,19 @@ public final class Choreographer {
// 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 @@ public final class Choreographer {
/**
* @hide
*/
+ @UnsupportedAppUsage
public static Choreographer getSfInstance() {
return sSfThreadInstance.get();
}
@@ -556,6 +564,7 @@ public final class Choreographer {
* @throws IllegalStateException if no frame is in progress.
* @hide
*/
+ @UnsupportedAppUsage
public long getFrameTime() {
return getFrameTimeNanos() / TimeUtils.NANOS_PER_MS;
}
@@ -568,6 +577,7 @@ public final class Choreographer {
* @throws IllegalStateException if no frame is in progress.
* @hide
*/
+ @UnsupportedAppUsage
public long getFrameTimeNanos() {
synchronized (mLock) {
if (!mCallbacksRunning) {
@@ -627,6 +637,7 @@ public final class Choreographer {
ThreadedRenderer.setFPSDivisor(divisor);
}
+ @UnsupportedAppUsage
void doFrame(long frameTimeNanos, int frame) {
final long startNanos;
synchronized (mLock) {
@@ -792,6 +803,7 @@ public final class Choreographer {
}
}
+ @UnsupportedAppUsage
private void scheduleVsyncLocked() {
mDisplayEventReceiver.scheduleVsync();
}
@@ -942,6 +954,7 @@ public final class Choreographer {
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 @@ public final class Choreographer {
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 d3cc175d3e1c..c77500a9fd70 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 @@ import android.content.res.Resources;
* 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 @@ public class ContextThemeWrapper extends ContextWrapper {
/** @hide */
@Override
+ @UnsupportedAppUsage
public int getThemeResId() {
return mThemeResource;
}
@@ -186,6 +192,7 @@ public class ContextThemeWrapper extends ContextWrapper {
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 20f806624fd0..4d96fc3175cd 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -21,6 +21,7 @@ import static android.Manifest.permission.CONFIGURE_DISPLAY_COLOR_MODE;
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 @@ public final class Display {
private final Resources mResources;
private DisplayAdjustments mDisplayAdjustments;
+ @UnsupportedAppUsage
private DisplayInfo mDisplayInfo; // never null
private boolean mIsValid;
@@ -231,6 +233,7 @@ public final class Display {
* Display type: Unknown display type.
* @hide
*/
+ @UnsupportedAppUsage
public static final int TYPE_UNKNOWN = 0;
/**
@@ -243,12 +246,14 @@ public final class Display {
* 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 @@ public final class Display {
* Display type: Virtual display.
* @hide
*/
+ @UnsupportedAppUsage
public static final int TYPE_VIRTUAL = 5;
/**
@@ -459,6 +465,7 @@ public final class Display {
* @return True if the display is still valid.
* @hide
*/
+ @UnsupportedAppUsage
public boolean getDisplayInfo(DisplayInfo outDisplayInfo) {
synchronized (this) {
updateDisplayInfoLocked();
@@ -506,6 +513,7 @@ public final class Display {
* @see #TYPE_VIRTUAL
* @hide
*/
+ @UnsupportedAppUsage
public int getType() {
return mType;
}
@@ -517,6 +525,7 @@ public final class Display {
* @return The display address.
* @hide
*/
+ @UnsupportedAppUsage
public String getAddress() {
return mAddress;
}
@@ -543,6 +552,7 @@ public final class Display {
*
* @hide
*/
+ @UnsupportedAppUsage
public String getOwnerPackageName() {
return mOwnerPackageName;
}
@@ -553,6 +563,7 @@ public final class Display {
* @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 @@ public final class Display {
* mostly for wallpapers.
* @hide
*/
+ @UnsupportedAppUsage
public int getMaximumSizeDimension() {
synchronized (this) {
updateDisplayInfoLocked();
@@ -1184,6 +1196,7 @@ public final class Display {
/**
* @hide
*/
+ @UnsupportedAppUsage
public Mode(int modeId, int width, int height, float refreshRate) {
mModeId = modeId;
mWidth = width;
@@ -1360,6 +1373,7 @@ public final class Display {
/**
* @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 790029b9c09f..da4d92fa0c94 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 @@ public class DisplayAdjustments {
private volatile CompatibilityInfo mCompatInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
private Configuration mConfiguration;
+ @UnsupportedAppUsage
public DisplayAdjustments() {
}
@@ -42,6 +44,7 @@ public class DisplayAdjustments {
? daj.mConfiguration : Configuration.EMPTY);
}
+ @UnsupportedAppUsage
public void setCompatibilityInfo(CompatibilityInfo compatInfo) {
if (this == DEFAULT_DISPLAY_ADJUSTMENTS) {
throw new IllegalArgumentException(
@@ -67,6 +70,7 @@ public class DisplayAdjustments {
mConfiguration.setTo(configuration != null ? configuration : Configuration.EMPTY);
}
+ @UnsupportedAppUsage
public Configuration getConfiguration() {
return mConfiguration;
}
diff --git a/core/java/android/view/DisplayEventReceiver.java b/core/java/android/view/DisplayEventReceiver.java
index cb98c8816281..edd3f1a8de98 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 @@ public abstract class DisplayEventReceiver {
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 @@ public abstract class DisplayEventReceiver {
*
* @param looper The looper to use when invoking callbacks.
*/
+ @UnsupportedAppUsage
public DisplayEventReceiver(Looper looper) {
this(looper, VSYNC_SOURCE_APP);
}
@@ -137,6 +140,7 @@ public abstract class DisplayEventReceiver {
* {@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 @@ public abstract class DisplayEventReceiver {
* {@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 @@ public abstract class DisplayEventReceiver {
* 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 @@ public abstract class DisplayEventReceiver {
// 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 2421ba458403..34bcbdd94041 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -23,6 +23,7 @@ import static android.view.DisplayInfoProto.LOGICAL_WIDTH;
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 @@ public final class DisplayInfo implements Parcelable {
* 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 @@ public final class DisplayInfo implements Parcelable {
* 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 @@ public final class DisplayInfo implements Parcelable {
* @hide
*/
@Nullable
+ @UnsupportedAppUsage
public DisplayCutout displayCutout;
/**
@@ -168,6 +172,7 @@ public final class DisplayInfo implements Parcelable {
* </p>
*/
@Surface.Rotation
+ @UnsupportedAppUsage
public int rotation;
/**
@@ -275,6 +280,7 @@ public final class DisplayInfo implements Parcelable {
}
};
+ @UnsupportedAppUsage
public DisplayInfo() {
}
diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java
index df4d5c415b98..a7755a288530 100644
--- a/core/java/android/view/DisplayListCanvas.java
+++ b/core/java/android/view/DisplayListCanvas.java
@@ -18,6 +18,7 @@ package android.view;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import android.graphics.Bitmap;
import android.graphics.CanvasProperty;
import android.graphics.Paint;
@@ -155,6 +156,7 @@ public final class DisplayListCanvas extends RecordingCanvas {
*
* @param drawGLFunction A native function pointer
*/
+ @UnsupportedAppUsage
public void callDrawGLFunction2(long drawGLFunction) {
nCallDrawGLFunction(mNativeCanvasWrapper, drawGLFunction, null);
}
@@ -171,6 +173,7 @@ public final class DisplayListCanvas extends RecordingCanvas {
* 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 @@ public final class DisplayListCanvas extends RecordingCanvas {
*
* @param renderNode The RenderNode to draw.
*/
+ @UnsupportedAppUsage
public void drawRenderNode(RenderNode renderNode) {
nDrawRenderNode(mNativeCanvasWrapper, renderNode.mNativeRenderNode);
}
@@ -205,6 +209,7 @@ public final class DisplayListCanvas extends RecordingCanvas {
// 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 2c9f87128bca..bd4dda211208 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 @@ public class DragEvent implements Parcelable {
int mAction;
float mX, mY;
+ @UnsupportedAppUsage
ClipDescription mClipDescription;
+ @UnsupportedAppUsage
ClipData mClipData;
IDragAndDropPermissions mDragAndDropPermissions;
@@ -313,6 +316,7 @@ public class DragEvent implements Parcelable {
}
/** @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 358a2d1e70d8..dcdef3eaa275 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 @@ public final class FrameMetrics {
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 9e81de0e09bb..597089b98e1a 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 @@ import java.lang.ref.WeakReference;
* @hide
*/
public class FrameMetricsObserver {
+ @UnsupportedAppUsage
private MessageQueue mMessageQueue;
private WeakReference<Window> mWindow;
+ @UnsupportedAppUsage
private FrameMetrics mFrameMetrics;
/* package */ Window.OnFrameMetricsAvailableListener mListener;
@@ -63,6 +66,7 @@ public class FrameMetricsObserver {
// 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 bc2953e0c0fe..3ee5f1fcc883 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 @@ public class GestureDetector {
}
}
+ @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 @@ public class GestureDetector {
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 @@ public class GestureDetector {
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 d1b96baa6062..fa7b067deb20 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 @@ public class GhostView extends View {
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 @@ public class GhostView extends View {
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 de195ae524c8..b2dd6ac9e971 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 @@ public final class InputChannel implements Parcelable {
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 @@ public final class InputChannel implements Parcelable {
};
@SuppressWarnings("unused")
+ @UnsupportedAppUsage
private long mPtr; // used by native code
private static native InputChannel[] nativeOpenInputChannelPair(String name);
@@ -63,6 +66,7 @@ public final class InputChannel implements Parcelable {
* 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 8405d9ea8c38..7295259a0f89 100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
@@ -18,6 +18,7 @@ package android.view;
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 @@ public final class InputDevice implements Parcelable {
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 @@ public final class InputDevice implements Parcelable {
};
// 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 @@ public final class InputDevice implements Parcelable {
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isExternal() {
return mIsExternal;
}
@@ -739,6 +743,7 @@ public final class InputDevice implements Parcelable {
}
// 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 c25736495b0e..c2848d40e595 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 @@ public abstract class InputEvent implements Parcelable {
* @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 7e8ec0469e56..e4b1a8d855ec 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 @@ public final class InputEventConsistencyVerifier {
* @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 @@ public final class InputEventConsistencyVerifier {
* 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 @@ public final class InputEventConsistencyVerifier {
* 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 @@ public final class InputEventConsistencyVerifier {
* 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 20ab539f52d2..7260a658a027 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 @@ public abstract class InputEventReceiver {
*
* @param event The input event that was received.
*/
+ @UnsupportedAppUsage
public void onInputEvent(InputEvent event) {
finishInputEvent(event, false);
}
@@ -180,6 +182,7 @@ public abstract class InputEventReceiver {
// 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 @@ public abstract class InputEventReceiver {
// 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 b25fb65b654c..c5f4c23b7b15 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 @@ public abstract class InputEventSender {
// 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 0ab4dc026e69..3aaf31ef406f 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 @@ public abstract class InputFilter extends IInputFilter.Stub {
*
* @param looper The looper to run callbacks on.
*/
+ @UnsupportedAppUsage
public InputFilter(Looper looper) {
mH = new H(looper);
}
@@ -186,6 +188,7 @@ public abstract class InputFilter extends IInputFilter.Stub {
* @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 582ae79a743f..69ebc46cb456 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 @@ public final class InputQueue {
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 b7b56e83a3cb..989bf675485f 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 @@ public class KeyCharacterMap implements Parcelable {
}
// Called from native
+ @UnsupportedAppUsage
private KeyCharacterMap(long ptr) {
mPtr = ptr;
}
@@ -748,7 +750,9 @@ public class KeyCharacterMap implements Parcelable {
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 715440c9aa6e..8641d7f3302d 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -20,6 +20,7 @@ import static android.view.Display.INVALID_DISPLAY;
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 @@ public class KeyEvent extends InputEvent implements Parcelable {
// 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 @@ public class KeyEvent extends InputEvent implements Parcelable {
* 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 @@ public class KeyEvent extends InputEvent implements Parcelable {
* 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 @@ public class KeyEvent extends InputEvent implements Parcelable {
* 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 @@ public class KeyEvent extends InputEvent implements Parcelable {
* in its API that is currently being retained for legacy reasons.
* @hide
*/
+ @UnsupportedAppUsage
public static final int META_SELECTING = 0x800;
/**
@@ -1248,17 +1254,28 @@ public class KeyEvent extends InputEvent implements Parcelable {
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 @@ public class KeyEvent extends InputEvent implements Parcelable {
*
* @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 @@ public class KeyEvent extends InputEvent implements Parcelable {
* @hide
*/
@Override
+ @UnsupportedAppUsage
public final void recycle() {
super.recycle();
mCharacters = null;
@@ -1760,6 +1779,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
* @deprecated
* @hide
*/
+ @UnsupportedAppUsage
@Deprecated public final boolean isDown() {
return mAction == ACTION_DOWN;
}
@@ -1821,6 +1841,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
/** 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 @@ public class KeyEvent extends InputEvent implements Parcelable {
}
// 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 @@ public class KeyEvent extends InputEvent implements Parcelable {
| 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 47b8d921da2e..c520a9958687 100644
--- a/core/java/android/view/LayoutInflater.java
+++ b/core/java/android/view/LayoutInflater.java
@@ -19,6 +19,7 @@ package android.view;
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 @@ public abstract class LayoutInflater {
* 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 @@ public abstract class LayoutInflater {
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 @@ public abstract class LayoutInflater {
/**
* @hide for use by framework
*/
+ @UnsupportedAppUsage
public void setPrivateFactory(Factory2 factory) {
if (mPrivateFactory == null) {
mPrivateFactory = factory;
@@ -726,6 +737,7 @@ public abstract class LayoutInflater {
* argument and should be used for everything except {@code &gt;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 @@ public abstract class LayoutInflater {
* 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 @@ public abstract class LayoutInflater {
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 344806aa4d50..29c58dc512fa 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -19,6 +19,7 @@ package android.view;
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 @@ public final class MotionEvent extends InputEvent implements Parcelable {
}
// 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 @@ public final class MotionEvent extends InputEvent implements Parcelable {
}
// Pointer to the native MotionEvent object that contains the actual data.
+ @UnsupportedAppUsage
private long mNativePtr;
private MotionEvent mNext;
@@ -1502,6 +1505,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
@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 @@ public final class MotionEvent extends InputEvent implements Parcelable {
}
}
+ @UnsupportedAppUsage
static private MotionEvent obtain() {
final MotionEvent ev;
synchronized (gRecyclerLock) {
@@ -1886,6 +1891,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
/** @hide */
@Override
+ @UnsupportedAppUsage
public MotionEvent copy() {
return obtain(this);
}
@@ -1918,6 +1924,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
* @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 @@ public final class MotionEvent extends InputEvent implements Parcelable {
}
/** @hide */
+ @TestApi
@Override
public void setDisplayId(int displayId) {
nativeSetDisplayId(mNativePtr, displayId);
@@ -2068,6 +2076,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
*
* @hide
*/
+ @UnsupportedAppUsage
public final void setDownTime(long downTime) {
nativeSetDownTimeNanos(mNativePtr, downTime * NS_PER_MS);
}
@@ -2099,6 +2108,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
* @hide
*/
@Override
+ @UnsupportedAppUsage
public final long getEventTimeNano() {
return nativeGetEventTimeNanos(mNativePtr, HISTORY_CURRENT);
}
@@ -3098,6 +3108,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
* @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 @@ public final class MotionEvent extends InputEvent implements Parcelable {
* 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 @@ public final class MotionEvent extends InputEvent implements Parcelable {
* 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 final class MotionEvent extends InputEvent implements Parcelable {
*/
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 @@ public final class MotionEvent extends InputEvent implements Parcelable {
}
/** @hide */
+ @UnsupportedAppUsage
public static PointerCoords[] createArray(int size) {
PointerCoords[] array = new PointerCoords[size];
for (int i = 0; i < size; i++) {
@@ -3848,6 +3864,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
}
/** @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 a3676ba471ea..81da76d7d0ec 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 @@ public class NotificationHeaderView extends ViewGroup {
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 8cb46b704c18..dc097a155d4d 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 @@ public final class PointerIcon implements Parcelable {
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 @@ public final class PointerIcon implements Parcelable {
* @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 a864e550c256..3c9ce788b706 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 @@ public class RemoteAnimationAdapter implements Parcelable {
* @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 d2240e1f2775..beb1c1d2aa60 100644
--- a/core/java/android/view/RemoteAnimationDefinition.java
+++ b/core/java/android/view/RemoteAnimationDefinition.java
@@ -19,6 +19,7 @@ package android.view;
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 @@ public class RemoteAnimationDefinition implements Parcelable {
private final SparseArray<RemoteAnimationAdapterEntry> mTransitionAnimationMap;
+ @UnsupportedAppUsage
public RemoteAnimationDefinition() {
mTransitionAnimationMap = new SparseArray<>();
}
@@ -48,6 +50,7 @@ public class RemoteAnimationDefinition implements Parcelable {
* 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 @@ public class RemoteAnimationDefinition implements Parcelable {
* @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 1c5c630b1cfb..567b279ead11 100644
--- a/core/java/android/view/RemoteAnimationTarget.java
+++ b/core/java/android/view/RemoteAnimationTarget.java
@@ -28,6 +28,7 @@ import static android.view.RemoteAnimationTargetProto.TASK_ID;
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 @@ public class RemoteAnimationTarget implements Parcelable {
/**
* 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 @@ public class RemoteAnimationTarget implements Parcelable {
* 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 @@ public class RemoteAnimationTarget implements Parcelable {
* 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 @@ public class RemoteAnimationTarget implements Parcelable {
* 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 @@ public class RemoteAnimationTarget implements Parcelable {
* 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 e0df59f57b31..fcea0c3f890a 100644
--- a/core/java/android/view/RenderNode.java
+++ b/core/java/android/view/RenderNode.java
@@ -19,6 +19,7 @@ package android.view;
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 @@ public class RenderNode {
*
* @return A new RenderNode.
*/
+ @UnsupportedAppUsage
public static RenderNode create(String name, @Nullable View owningView) {
return new RenderNode(name, owningView);
}
@@ -211,6 +213,7 @@ public class RenderNode {
* @see #end(DisplayListCanvas)
* @see #isValid()
*/
+ @UnsupportedAppUsage
public DisplayListCanvas start(int width, int height) {
return DisplayListCanvas.obtain(this, width, height);
}
@@ -231,6 +234,7 @@ public class RenderNode {
* @see #start(int, int)
* @see #isValid()
*/
+ @UnsupportedAppUsage
public void end(DisplayListCanvas canvas) {
long displayList = canvas.finishRecording();
nSetDisplayList(mNativeRenderNode, displayList);
@@ -242,6 +246,7 @@ public class RenderNode {
* 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 @@ public class RenderNode {
*
* @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 @@ public class RenderNode {
*
* @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 @@ public class RenderNode {
* @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 @@ public class RenderNode {
* @see android.view.View#hasOverlappingRendering()
* @see #hasOverlappingRendering()
*/
+ @UnsupportedAppUsage
public boolean setHasOverlappingRendering(boolean hasOverlappingRendering) {
return nSetHasOverlappingRendering(mNativeRenderNode, hasOverlappingRendering);
}
@@ -788,6 +797,7 @@ public class RenderNode {
* @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 @@ public class RenderNode {
*
* @see View#offsetLeftAndRight(int)
*/
+ @UnsupportedAppUsage
public boolean offsetLeftAndRight(int offset) {
return nOffsetLeftAndRight(mNativeRenderNode, offset);
}
@@ -820,6 +831,7 @@ public class RenderNode {
* 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 d26a2f643ed4..e48bcfdb7203 100644
--- a/core/java/android/view/RenderNodeAnimator.java
+++ b/core/java/android/view/RenderNodeAnimator.java
@@ -19,6 +19,7 @@ package android.view;
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 @@ public class RenderNodeAnimator extends Animator {
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 @@ public class RenderNodeAnimator extends Animator {
init(nCreateAnimator(property, finalValue));
}
+ @UnsupportedAppUsage
public RenderNodeAnimator(CanvasProperty<Float> property, float finalValue) {
init(nCreateCanvasPropertyFloatAnimator(
property.getNativeContainer(), finalValue));
@@ -128,6 +132,7 @@ public class RenderNodeAnimator extends Animator {
* {@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 @@ public class RenderNodeAnimator extends Animator {
throw new UnsupportedOperationException();
}
+ @UnsupportedAppUsage
public void setTarget(View view) {
mViewTarget = view;
setTarget(mViewTarget.mRenderNode);
@@ -295,6 +301,7 @@ public class RenderNodeAnimator extends Animator {
mTarget.addAnimator(this);
}
+ @UnsupportedAppUsage
public void setStartValue(float startValue) {
checkMutable();
nSetStartValue(mNativePtr.get(), startValue);
@@ -479,6 +486,7 @@ public class RenderNodeAnimator extends Animator {
}
// 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 9787494c5018..c189afefe5f8 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 @@ public class ScaleGestureDetector {
}
private final Context mContext;
+ @UnsupportedAppUsage
private final OnScaleGestureListener mListener;
private float mFocusX;
@@ -141,7 +143,9 @@ public class ScaleGestureDetector {
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 df81a311bb89..427f570b1294 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 @@ public class Surface implements Parcelable {
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 @@ public class Surface implements Parcelable {
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 @@ public class Surface implements Parcelable {
* Create an empty surface, which will later be filled in by readFromParcel().
* @hide
*/
+ @UnsupportedAppUsage
public Surface() {
}
@@ -203,6 +210,7 @@ public class Surface implements Parcelable {
}
/* called from android_view_Surface_createFromIGraphicBufferProducer() */
+ @UnsupportedAppUsage
private Surface(long nativeObject) {
synchronized (mLock) {
setNativeObjectLocked(nativeObject);
@@ -245,6 +253,7 @@ public class Surface implements Parcelable {
* called from the process that created the service.
* @hide
*/
+ @UnsupportedAppUsage
public void destroy() {
release();
}
@@ -293,6 +302,7 @@ public class Surface implements Parcelable {
*
* @hide
*/
+ @UnsupportedAppUsage
public long getNextFrameNumber() {
synchronized (mLock) {
checkNotReleasedLocked();
@@ -485,6 +495,7 @@ public class Surface implements Parcelable {
*
* @hide
*/
+ @UnsupportedAppUsage
public void copyFrom(SurfaceControl other) {
if (other == null) {
throw new IllegalArgumentException("other must not be null");
@@ -544,6 +555,7 @@ public class Surface implements Parcelable {
* @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 ed8b0053e5bf..d9c8f307e865 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -28,6 +28,7 @@ import static android.view.SurfaceControlProto.HASH_CODE;
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 @@ public class SurfaceControl implements Parcelable {
/**
* Surface creation flag: Surface is created hidden
*/
+ @UnsupportedAppUsage
public static final int HIDDEN = 0x00000004;
/**
@@ -720,6 +722,7 @@ public class SurfaceControl implements Parcelable {
*/
/** start a transaction */
+ @UnsupportedAppUsage
public static void openTransaction() {
synchronized (SurfaceControl.class) {
if (sGlobalTransaction == null) {
@@ -756,6 +759,7 @@ public class SurfaceControl implements Parcelable {
}
/** end a transaction */
+ @UnsupportedAppUsage
public static void closeTransaction() {
closeTransaction(false);
}
@@ -811,6 +815,7 @@ public class SurfaceControl implements Parcelable {
}
}
+ @UnsupportedAppUsage
public void setLayer(int zorder) {
checkNotReleased();
synchronized(SurfaceControl.class) {
@@ -825,6 +830,7 @@ public class SurfaceControl implements Parcelable {
}
}
+ @UnsupportedAppUsage
public void setPosition(float x, float y) {
checkNotReleased();
synchronized(SurfaceControl.class) {
@@ -846,6 +852,7 @@ public class SurfaceControl implements Parcelable {
}
}
+ @UnsupportedAppUsage
public void hide() {
checkNotReleased();
synchronized(SurfaceControl.class) {
@@ -853,6 +860,7 @@ public class SurfaceControl implements Parcelable {
}
}
+ @UnsupportedAppUsage
public void show() {
checkNotReleased();
synchronized(SurfaceControl.class) {
@@ -986,16 +994,26 @@ public class SurfaceControl implements Parcelable {
* 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 @@ public class SurfaceControl implements Parcelable {
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 @@ public class SurfaceControl implements Parcelable {
return nativeSetActiveColorMode(displayToken, colorMode);
}
+ @UnsupportedAppUsage
public static void setDisplayProjection(IBinder displayToken,
int orientation, Rect layerStackRect, Rect displayRect) {
synchronized (SurfaceControl.class) {
@@ -1105,12 +1125,14 @@ public class SurfaceControl implements Parcelable {
}
}
+ @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 @@ public class SurfaceControl implements Parcelable {
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 @@ public class SurfaceControl implements Parcelable {
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 @@ public class SurfaceControl implements Parcelable {
nativeDestroyDisplay(displayToken);
}
+ @UnsupportedAppUsage
public static IBinder getBuiltInDisplay(int builtInDisplayId) {
return nativeGetBuiltInDisplay(builtInDisplayId);
}
@@ -1229,6 +1254,7 @@ public class SurfaceControl implements Parcelable {
* 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 @@ public class SurfaceControl implements Parcelable {
* 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 @@ public class SurfaceControl implements Parcelable {
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 @@ public class SurfaceControl implements Parcelable {
private final ArrayMap<SurfaceControl, Point> mResizedSurfaces = new ArrayMap<>();
Runnable mFreeNativeResources;
+ @UnsupportedAppUsage
public Transaction() {
mNativeObject = nativeCreateTransaction();
mFreeNativeResources
@@ -1344,6 +1373,7 @@ public class SurfaceControl implements Parcelable {
* 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 @@ public class SurfaceControl implements Parcelable {
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 @@ public class SurfaceControl implements Parcelable {
return this;
}
+ @UnsupportedAppUsage
public Transaction setLayer(SurfaceControl sc, int z) {
sc.checkNotReleased();
nativeSetLayer(mNativeObject, sc.mNativeObject, z);
@@ -1423,12 +1458,14 @@ public class SurfaceControl implements Parcelable {
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 @@ public class SurfaceControl implements Parcelable {
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 @@ public class SurfaceControl implements Parcelable {
return this;
}
+ @UnsupportedAppUsage
public Transaction setWindowCrop(SurfaceControl sc, Rect crop) {
sc.checkNotReleased();
if (crop != null) {
@@ -1457,6 +1496,7 @@ public class SurfaceControl implements Parcelable {
return this;
}
+ @UnsupportedAppUsage
public Transaction setFinalCrop(SurfaceControl sc, Rect crop) {
sc.checkNotReleased();
if (crop != null) {
@@ -1475,6 +1515,7 @@ public class SurfaceControl implements Parcelable {
return this;
}
+ @UnsupportedAppUsage
public Transaction deferTransactionUntil(SurfaceControl sc, IBinder handle,
long frameNumber) {
if (frameNumber < 0) {
@@ -1485,6 +1526,7 @@ public class SurfaceControl implements Parcelable {
return this;
}
+ @UnsupportedAppUsage
public Transaction deferTransactionUntilSurface(SurfaceControl sc, Surface barrierSurface,
long frameNumber) {
if (frameNumber < 0) {
@@ -1527,6 +1569,7 @@ public class SurfaceControl implements Parcelable {
* 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 ee08bf759511..a4fa12a57e93 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 @@ package android.view;
*/
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 @@ public final class SurfaceSession {
private static native void nativeKill(long ptr);
/** Create a new connection with the surface flinger. */
+ @UnsupportedAppUsage
public SurfaceSession() {
mNativeClient = nativeCreate();
}
@@ -62,6 +66,7 @@ public final class SurfaceSession {
* 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 44c1780d0be5..6319a8f6c66d 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_OVERLA
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 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
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 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
int mSubLayer = APPLICATION_MEDIA_SUBLAYER;
+ @UnsupportedAppUsage
boolean mIsCreating = false;
private volatile boolean mRtHandlingPositionUpdates = false;
@@ -134,6 +140,7 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
}
};
+ @UnsupportedAppUsage
private final ViewTreeObserver.OnPreDrawListener mDrawListener =
new ViewTreeObserver.OnPreDrawListener() {
@Override
@@ -151,15 +158,20 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
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 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
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 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
/** @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 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
* 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 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
* 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 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
* @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 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
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 371794045f85..997e48fe61ac 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 @@ import android.util.Log;
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 @@ public class TextureView extends View {
private final Object[] mLock = new Object[0];
private boolean mUpdateLayer;
+ @UnsupportedAppUsage
private boolean mUpdateSurface;
private Canvas mCanvas;
@@ -125,6 +130,7 @@ public class TextureView extends View {
private final Object[] mNativeWindowLock = new Object[0];
// Set by native code, do not write!
+ @UnsupportedAppUsage
private long mNativeWindow;
/**
@@ -217,6 +223,7 @@ public class TextureView extends View {
/** @hide */
@Override
+ @UnsupportedAppUsage
protected void onDetachedFromWindowInternal() {
destroyHardwareLayer();
releaseSurfaceTexture();
@@ -227,11 +234,13 @@ public class TextureView extends View {
* @hide
*/
@Override
+ @UnsupportedAppUsage
protected void destroyHardwareResources() {
super.destroyHardwareResources();
destroyHardwareLayer();
}
+ @UnsupportedAppUsage
private void destroyHardwareLayer() {
if (mLayer != null) {
mLayer.detachSurfaceTexture();
@@ -786,6 +795,7 @@ public class TextureView extends View {
mListener = listener;
}
+ @UnsupportedAppUsage
private final SurfaceTexture.OnFrameAvailableListener mUpdateListener =
new SurfaceTexture.OnFrameAvailableListener() {
@Override
@@ -839,7 +849,9 @@ public class TextureView extends View {
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 29306993454c..6737839993ed 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -18,6 +18,7 @@ package android.view;
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 @@ public final class ThreadedRenderer {
*
* @hide
*/
+ @UnsupportedAppUsage
public static void setupDiskCache(File cacheDir) {
ThreadedRenderer.setupShadersDiskCache(
new File(cacheDir, CACHE_PATH_SHADERS).getAbsolutePath(),
@@ -719,6 +721,7 @@ public final class ThreadedRenderer {
* @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 @@ public final class ThreadedRenderer {
* 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 @@ public final class ThreadedRenderer {
* 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 @@ public final class ThreadedRenderer {
* @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 @@ public final class ThreadedRenderer {
* 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 d6c43e80390f..b361ab456b2a 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 @@ public class TouchDelegate {
/**
* 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 22b5ccacf43a..7154f2bdee42 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 @@ public final class VelocityTracker {
*
* @hide
*/
+ @UnsupportedAppUsage
public static VelocityTracker obtain(String strategy) {
if (strategy == null) {
return obtain();
@@ -235,21 +237,25 @@ public final class VelocityTracker {
/**
* 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 d9057de98025..9bc53ed5a851 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -35,6 +35,7 @@ import android.annotation.Nullable;
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 @@ import java.util.function.Predicate;
@UiThread
public class View implements Drawable.Callback, KeyEvent.Callback,
AccessibilityEventSource {
+ @UnsupportedAppUsage
private static final boolean DBG = false;
/** @hide */
@@ -799,6 +801,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public static final String DEBUG_LAYOUT_PROPERTY = "debug.layout";
/**
@@ -2157,6 +2160,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* Map used to store views' tags.
*/
+ @UnsupportedAppUsage
private SparseArray<Object> mKeyedTags;
/**
@@ -2175,6 +2179,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "measurement")
+ @UnsupportedAppUsage
int mMeasuredWidth;
/**
@@ -2182,6 +2187,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "measurement")
+ @UnsupportedAppUsage
int mMeasuredHeight;
/**
@@ -2193,6 +2199,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* {@hide}
*/
+ @UnsupportedAppUsage
boolean mRecreateDisplayList = false;
/**
@@ -2219,6 +2226,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @see #setTag(Object)
* @see #getTag()
*/
+ @UnsupportedAppUsage
protected Object mTag = null;
// for mPrivateFlags:
@@ -3522,6 +3531,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @see #getParent()
*/
+ @UnsupportedAppUsage
protected ViewParent mParent;
/**
* {@hide}
*/
+ @UnsupportedAppUsage
AttachInfo mAttachInfo;
/**
@@ -3836,8 +3852,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}, formatToHexString = true)
/* @hide */
+ @UnsupportedAppUsage
public int mPrivateFlags;
+ @UnsupportedAppUsage
int mPrivateFlags2;
+ @UnsupportedAppUsage
int mPrivateFlags3;
/**
@@ -3949,6 +3968,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* laid out.
* {@hide}
*/
+ @UnsupportedAppUsage
protected ViewGroup.LayoutParams mLayoutParams;
/**
@@ -3956,6 +3976,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@hide}
*/
@ViewDebug.ExportedProperty(formatToHexString = true)
+ @UnsupportedAppUsage
int mViewFlags;
static class TransformationInfo {
@@ -3993,6 +4014,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
/** @hide */
+ @UnsupportedAppUsage
public TransformationInfo mTransformationInfo;
/**
@@ -4009,6 +4031,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
protected int mBottom;
/**
@@ -4038,6 +4064,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "scrolling")
+ @UnsupportedAppUsage
protected int mScrollY;
/**
@@ -4053,6 +4081,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "padding")
+ @UnsupportedAppUsage
protected int mPaddingBottom;
/**
@@ -4199,6 +4231,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
private LongSparseLongArray mMeasureCache;
@ViewDebug.ExportedProperty(deepExport = true, prefix = "bg_")
+ @UnsupportedAppUsage
private Drawable mBackground;
private TintInfo mBackgroundTint;
@@ -4216,6 +4249,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*/
private RenderNode mBackgroundRenderNode;
+ @UnsupportedAppUsage
private int mBackgroundResource;
private boolean mBackgroundSizeChanged;
@@ -4266,6 +4300,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected OnFocusChangeListener mOnFocusChangeListener;
/**
@@ -4285,6 +4320,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
public OnClickListener mOnClickListener;
/**
@@ -4292,6 +4328,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected OnLongClickListener mOnLongClickListener;
/**
@@ -4306,16 +4343,22 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
private ArrayList<OnUnhandledKeyEventListener> mUnhandledKeyListeners;
}
+ @UnsupportedAppUsage
ListenerInfo mListenerInfo;
private static class TooltipInfo {
@@ -4405,10 +4449,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* {@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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
boolean mDefaultFocusHighlightEnabled = true;
private CheckForLongPress mPendingCheckForLongPress;
+ @UnsupportedAppUsage
private CheckForTap mPendingCheckForTap = null;
private PerformClick mPerformClick;
private SendViewScrolledAccessibilityEvent mSendViewScrolledAccessibilityEvent;
@@ -4476,6 +4524,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* of this view to at least this amount.
*/
@ViewDebug.ExportedProperty(category = "measurement")
+ @UnsupportedAppUsage
private int mMinHeight;
/**
@@ -4504,6 +4554,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* of this view to at least this amount.
*/
@ViewDebug.ExportedProperty(category = "measurement")
+ @UnsupportedAppUsage
private int mMinWidth;
/**
@@ -4531,6 +4582,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* Object that handles automatic animation of view properties.
*/
+ @UnsupportedAppUsage
private ViewPropertyAnimator mAnimator = null;
/**
@@ -4599,6 +4651,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* Position of the vertical scroll bar.
*/
+ @UnsupportedAppUsage
private int mVerticalScrollbarPosition;
/**
@@ -4692,8 +4745,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean mCachingFailed;
+ @UnsupportedAppUsage
private Bitmap mDrawingCache;
+ @UnsupportedAppUsage
private Bitmap mUnscaledDrawingCache;
/**
@@ -4703,6 +4759,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* of the View content. Its DisplayList content is cleared on temporary detach and reset on
* cleanup.
*/
+ @UnsupportedAppUsage
final RenderNode mRenderNode;
/**
@@ -4714,6 +4771,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* Delegate for injecting accessibility functionality.
*/
+ @UnsupportedAppUsage
AccessibilityDelegate mAccessibilityDelegate;
/**
@@ -4775,6 +4833,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* @hide
*/
+ @UnsupportedAppUsage
String mStartActivityRequestWho;
@Nullable
@@ -5670,6 +5729,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* Non-public constructor for use in testing
*/
+ @UnsupportedAppUsage
View() {
mResources = null;
mRenderNode = RenderNode.create(getClass().getName(), this);
@@ -5993,6 +6053,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @param a the styled attributes set to initialize the scrollbars from
* @hide
*/
+ @UnsupportedAppUsage
protected void initializeScrollbarsInternal(TypedArray a) {
initScrollCache();
@@ -6085,6 +6146,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
}
+ @UnsupportedAppUsage
private ScrollabilityCache getScrollCache() {
initScrollCache();
return mScrollCache;
@@ -6140,6 +6202,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
return false;
}
+ @UnsupportedAppUsage
boolean isOnScrollbarThumb(float x, float y) {
return isOnVerticalScrollbarThumb(x, y) || isOnHorizontalScrollbarThumb(x, y);
}
@@ -6199,6 +6262,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
return false;
}
+ @UnsupportedAppUsage
boolean isDraggingScrollBar() {
return mScrollCache != null
&& mScrollCache.mScrollBarDraggingState != ScrollabilityCache.NOT_DRAGGING;
@@ -6287,6 +6351,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
>>> SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
}
+ @UnsupportedAppUsage
ListenerInfo getListenerInfo() {
if (mListenerInfo != null) {
return mListenerInfo;
@@ -6811,6 +6876,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public void onInitializeAccessibilityEventInternal(AccessibilityEvent event) {
event.setSource(this);
event.setClassName(getAccessibilityClassName());
@@ -7709,6 +7776,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @param outRect The output location
* @hide
*/
+ @UnsupportedAppUsage
public void getBoundsOnScreen(Rect outRect) {
getBoundsOnScreen(outRect, false);
}
@@ -7720,6 +7788,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @param clipToParent Whether to clip child bounds to the parent ones.
* @hide
*/
+ @UnsupportedAppUsage
public void getBoundsOnScreen(Rect outRect, boolean clipToParent) {
if (mAttachInfo == null) {
return;
@@ -8943,6 +9012,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isVisibleToUser() {
return isVisibleToUser(null);
}
@@ -8964,6 +9034,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
protected boolean isVisibleToUser(Rect boundInView) {
if (mAttachInfo != null) {
// Attached to invisible window means this view is not visible.
@@ -9071,6 +9142,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public int getAccessibilityViewId() {
if (mAccessibilityViewId == NO_ID) {
mAccessibilityViewId = sNextAccessibilityViewId++;
@@ -9290,6 +9362,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @hide pending API council approval
*/
@CallSuper
+ @UnsupportedAppUsage
protected void onFocusLost() {
resetPressedState();
}
@@ -9815,6 +9888,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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) {
@@ -9848,6 +9922,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @return
*/
@Deprecated
+ @UnsupportedAppUsage
protected boolean computeFitSystemWindows(Rect inoutInsets, Rect outLocalInsets) {
WindowInsets innerInsets = computeSystemWindowInsets(new WindowInsets(inoutInsets),
outLocalInsets);
@@ -9923,6 +9998,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
/** @hide */
+ @UnsupportedAppUsage
public boolean fitsSystemWindows() {
return getFitsSystemWindows();
}
@@ -9949,6 +10025,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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);
}
@@ -10293,6 +10370,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @hide
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
public boolean isLayoutRtl() {
return (getLayoutDirection() == LAYOUT_DIRECTION_RTL);
}
@@ -10623,6 +10701,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @see #onProvideVirtualStructure
* @attr ref android.R.styleable#View_assistBlocked
*/
+ @UnsupportedAppUsage
public void setAssistBlocked(boolean enabled) {
if (enabled) {
mPrivateFlags3 |= PFLAG3_ASSIST_BLOCKED;
@@ -11312,6 +11391,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean requestAccessibilityFocus() {
AccessibilityManager manager = AccessibilityManager.getInstance(mContext);
if (!manager.isEnabled() || !manager.isTouchExplorationEnabled()) {
@@ -11341,6 +11421,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public void clearAccessibilityFocus() {
clearAccessibilityFocusNoCallbacks(0);
@@ -11855,6 +11936,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean includeForAccessibility() {
if (mAttachInfo != null) {
return (mAttachInfo.mAccessibilityFetchFlags
@@ -11901,6 +11983,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public void notifyViewAccessibilityStateChangedIfNeeded(int changeType) {
if (!AccessibilityManager.getInstance(mContext).isEnabled() || mAttachInfo == null) {
return;
@@ -11960,6 +12043,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public void notifySubtreeAccessibilityStateChangedIfNeeded() {
if (!AccessibilityManager.getInstance(mContext).isEnabled() || mAttachInfo == null) {
return;
@@ -12063,6 +12147,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean performAccessibilityActionInternal(int action, Bundle arguments) {
if (isNestedScrollingEnabled()
&& (action == AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD
@@ -12240,6 +12325,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public CharSequence getIterableTextForAccessibility() {
return getContentDescription();
}
@@ -12303,6 +12389,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* @hide
*/
+ @UnsupportedAppUsage
public TextSegmentIterator getIteratorForGranularity(int granularity) {
switch (granularity) {
case AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER: {
@@ -12749,6 +12836,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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);
@@ -13022,6 +13110,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public void getWindowDisplayFrame(Rect outRect) {
if (mAttachInfo != null) {
try {
@@ -13884,6 +13973,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* @hide
*/
+ @UnsupportedAppUsage
public boolean isInScrollingContainer() {
ViewParent p = getParent();
while (p != null && p instanceof ViewGroup) {
@@ -13907,6 +13997,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* Remove the pending click action
*/
+ @UnsupportedAppUsage
private void removePerformClickCallback() {
if (mPerformClick != null) {
removeCallbacks(mPerformClick);
@@ -14005,6 +14096,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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();
@@ -14543,10 +14635,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @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();
@@ -14561,6 +14655,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @return The inverse of the current matrix of this view.
* @hide
*/
+ @UnsupportedAppUsage
public final Matrix getInverseMatrix() {
ensureTransformationInfo();
if (mTransformationInfo.mInverseMatrix == null) {
@@ -15073,6 +15168,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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) {
@@ -15107,6 +15203,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public void setTransitionAlpha(float alpha) {
ensureTransformationInfo();
if (mTransformationInfo.mTransitionAlpha != alpha) {
@@ -15138,6 +15235,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @hide
*/
@ViewDebug.ExportedProperty(category = "drawing")
+ @UnsupportedAppUsage
public float getTransitionAlpha() {
return mTransformationInfo != null ? mTransformationInfo.mTransitionAlpha : 1;
}
@@ -15623,6 +15721,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
/** @hide */
+ @UnsupportedAppUsage
public void setAnimationMatrix(Matrix matrix) {
invalidateViewProperty(true, false);
mRenderNode.setAnimationMatrix(matrix);
@@ -15897,6 +15996,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean pointInView(float localX, float localY, float slop) {
return localX >= -slop && localY >= -slop && localX < ((mRight - mLeft) + slop) &&
localY < ((mBottom - mTop) + slop);
@@ -16396,6 +16496,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* dimensions have not changed.
* @hide
*/
+ @UnsupportedAppUsage
public void invalidate(boolean invalidateCache) {
invalidateInternal(0, 0, mRight - mLeft, mBottom - mTop, invalidateCache, true);
}
@@ -16485,6 +16586,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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()
@@ -16536,6 +16638,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
protected void invalidateParentCaches() {
if (mParent instanceof View) {
((View) mParent).mPrivateFlags |= PFLAG_INVALIDATED;
@@ -16551,6 +16654,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
protected void invalidateParentIfNeeded() {
if (isHardwareAccelerated() && mParent instanceof View) {
((View) mParent).invalidate(true);
@@ -16587,6 +16691,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* @hide
*/
+ @UnsupportedAppUsage
protected void computeOpaqueFlags() {
// Opaque if:
// - Has a background
@@ -16645,6 +16750,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @return The view root, or null if none.
* @hide
*/
+ @UnsupportedAppUsage
public ViewRootImpl getViewRootImpl() {
if (mAttachInfo != null) {
return mAttachInfo.mViewRootImpl;
@@ -16655,6 +16761,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* @hide
*/
+ @UnsupportedAppUsage
public ThreadedRenderer getThreadedRenderer() {
return mAttachInfo != null ? mAttachInfo.mThreadedRenderer : null;
}
@@ -17145,6 +17252,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* @hide
*/
+ @UnsupportedAppUsage
protected void recomputePadding() {
internalSetPadding(mUserPaddingLeft, mPaddingTop, mUserPaddingRight, mUserPaddingBottom);
}
@@ -17748,6 +17856,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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);
@@ -17767,6 +17876,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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);
@@ -17785,6 +17895,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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;
@@ -17930,6 +18041,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* Return true if the application tag in the AndroidManifest has set "supportRtl" to true
*/
+ @UnsupportedAppUsage
private boolean hasRtlSupport() {
return mContext.getApplicationInfo().hasRtlSupport();
}
@@ -18076,6 +18188,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
boolean isPaddingResolved() {
return (mPrivateFlags2 & PFLAG2_PADDING_RESOLVED) == PFLAG2_PADDING_RESOLVED;
}
@@ -18086,6 +18199,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public void resolvePadding() {
final int resolvedLayoutDirection = getLayoutDirection();
@@ -18183,6 +18297,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @hide
*/
@CallSuper
+ @UnsupportedAppUsage
protected void onDetachedFromWindowInternal() {
mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
mPrivateFlags3 &= ~PFLAG3_IS_LAID_OUT;
@@ -18291,6 +18406,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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;
}
@@ -18316,6 +18432,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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) {
@@ -18380,6 +18497,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
notifyEnterOrExitForAutoFillIfNeeded(true);
}
+ @UnsupportedAppUsage
void dispatchDetachedFromWindow() {
AttachInfo info = mAttachInfo;
if (info != null) {
@@ -18885,6 +19003,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @hide
*/
@CallSuper
+ @UnsupportedAppUsage
protected void destroyHardwareResources() {
if (mOverlay != null) {
mOverlay.getOverlayView().destroyHardwareResources();
@@ -19020,6 +19139,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @hide
*/
@NonNull
+ @UnsupportedAppUsage
public RenderNode updateDisplayListIfDirty() {
final RenderNode renderNode = mRenderNode;
if (!canHaveDisplayList()) {
@@ -19090,6 +19210,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
return renderNode;
}
+ @UnsupportedAppUsage
private void resetDisplayList() {
mRenderNode.discardDisplayList();
if (mBackgroundRenderNode != null) {
@@ -19490,6 +19611,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public Bitmap createSnapshot(ViewDebug.CanvasProvider canvasProvider, boolean skipChildren) {
int width = mRight - mLeft;
int height = mBottom - mTop;
@@ -20378,6 +20500,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @param canvas Canvas on which to draw the background
*/
+ @UnsupportedAppUsage
private void drawBackground(Canvas canvas) {
final Drawable background = mBackground;
if (background == null) {
@@ -20767,6 +20890,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* previous ones
* {@hide}
*/
+ @UnsupportedAppUsage
protected boolean setFrame(int left, int top, int right, int bottom) {
boolean changed = false;
@@ -20834,6 +20958,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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);
}
@@ -22020,6 +22145,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* @hide
*/
+ @UnsupportedAppUsage
protected void internalSetPadding(int left, int top, int right, int bottom) {
mUserPaddingLeft = left;
mUserPaddingRight = right;
@@ -22214,6 +22340,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* @hide
*/
+ @UnsupportedAppUsage
public void resetPaddingToInitialValues() {
if (isRtlCompatibilityMode()) {
mPaddingLeft = mUserPaddingLeftInitial;
@@ -22393,6 +22520,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @return false if the transformation could not be applied
* @hide
*/
+ @UnsupportedAppUsage
public boolean toGlobalMotionEvent(MotionEvent ev) {
final AttachInfo info = mAttachInfo;
if (info == null) {
@@ -22414,6 +22542,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @return false if the transformation could not be applied
* @hide
*/
+ @UnsupportedAppUsage
public boolean toLocalMotionEvent(MotionEvent ev) {
final AttachInfo info = mAttachInfo;
if (info == null) {
@@ -22434,6 +22563,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @param m input matrix to modify
* @hide
*/
+ @UnsupportedAppUsage
public void transformMatrixToGlobal(Matrix m) {
final ViewParent parent = mParent;
if (parent instanceof View) {
@@ -22460,6 +22590,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @param m input matrix to modify
* @hide
*/
+ @UnsupportedAppUsage
public void transformMatrixToLocal(Matrix m) {
final ViewParent parent = mParent;
if (parent instanceof View) {
@@ -22486,6 +22617,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
@ViewDebug.IntToString(from = 0, to = "x"),
@ViewDebug.IntToString(from = 1, to = "y")
})
+ @UnsupportedAppUsage
public int[] getLocationOnScreen() {
int[] location = new int[2];
getLocationOnScreen(location);
@@ -22666,6 +22798,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @param accessibilityId The searched accessibility id.
* @return The found view.
*/
+ @UnsupportedAppUsage
final <T extends View> T findViewByAccessibilityId(int accessibilityId) {
if (accessibilityId < 0) {
return null;
@@ -22816,6 +22949,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @return true if the view belongs to the root namespace, false otherwise
*/
+ @UnsupportedAppUsage
public boolean isRootNamespace() {
return (mPrivateFlags&PFLAG_IS_ROOT_NAMESPACE) != 0;
}
@@ -22919,6 +23053,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public void setTagInternal(int key, Object tag) {
if ((key >>> 24) != 0x1) {
throw new IllegalArgumentException("The key must be a framework-specific "
@@ -22942,6 +23077,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public void debug() {
debug(0);
}
@@ -22955,6 +23091,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
protected void debug(int depth) {
String output = debugIndent(depth - 1);
@@ -23577,6 +23714,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* {@hide}
*/
+ @UnsupportedAppUsage
public boolean gatherTransparentRegion(Region region) {
final AttachInfo attachInfo = mAttachInfo;
if (region != null && attachInfo != null) {
@@ -23804,6 +23942,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
/** @hide */
+ @UnsupportedAppUsage
public void setDisabledSystemUiVisibility(int flags) {
if (mAttachInfo != null) {
if (mAttachInfo.mDisabledSystemUiVisibility != flags) {
@@ -23844,6 +23983,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* </div>
*/
public static class DragShadowBuilder {
+ @UnsupportedAppUsage
private final WeakReference<View> mView;
/**
@@ -24271,6 +24411,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* it is ever exposed at all.
* @hide
*/
+ @UnsupportedAppUsage
public void onCloseSystemDialogs(String reason) {
}
@@ -24289,6 +24430,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* Drawable that are not transparent.
* {@hide}
*/
+ @UnsupportedAppUsage
public void applyDrawableToTransparentRegion(Drawable dr, Region region) {
if (DBG) {
Log.i("View", "Getting transparent region for: " + this);
@@ -24784,6 +24926,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @return The vertical scroll scale factor.
* @hide
*/
+ @UnsupportedAppUsage
protected float getVerticalScrollFactor() {
if (mVerticalScrollFactor == 0) {
TypedValue outValue = new TypedValue();
@@ -24804,6 +24947,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @return The horizontal scroll scale factor.
* @hide
*/
+ @UnsupportedAppUsage
protected float getHorizontalScrollFactor() {
// TODO: Should use something else.
return getVerticalScrollFactor();
@@ -24838,6 +24982,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
@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;
}
@@ -25076,6 +25221,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
@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;
}
@@ -25765,6 +25911,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @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;
@@ -26316,11 +26463,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
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() {
@@ -26334,8 +26486,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
}
+ @UnsupportedAppUsage
final IWindowSession mSession;
+ @UnsupportedAppUsage
final IWindow mWindow;
final IBinder mWindowToken;
@@ -26366,16 +26520,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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;
/**
@@ -26405,6 +26562,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* of the screen decorations, these are the current insets for the
* content of the window.
*/
+ @UnsupportedAppUsage
final Rect mContentInsets = new Rect();
/**
@@ -26412,6 +26570,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* of the screen decorations, these are the current insets for the
* actual visible parts of the window.
*/
+ @UnsupportedAppUsage
final Rect mVisibleInsets = new Rect();
/**
@@ -26419,6 +26578,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* of the screen decorations, these are the current insets for the
* stable system windows.
*/
+ @UnsupportedAppUsage
final Rect mStableInsets = new Rect();
final DisplayCutout.ParcelableWrapper mDisplayCutout =
@@ -26444,6 +26604,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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();
@@ -26457,14 +26618,17 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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;
/**
@@ -26475,11 +26639,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* 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;
/**
@@ -26492,6 +26658,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* Indicates that ViewAncestor should trigger a global layout change
* the next time it performs a traversal
*/
+ @UnsupportedAppUsage
boolean mRecomputeGlobalAttributes;
/**
@@ -26502,6 +26669,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* Set during a traveral if any views want to keep the screen on.
*/
+ @UnsupportedAppUsage
boolean mKeepScreenOn;
/**
@@ -26539,11 +26707,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* Set if the visibility of any views has changed.
*/
+ @UnsupportedAppUsage
boolean mViewVisibilityChanged;
/**
* Set to true if a view has been scrolled.
*/
+ @UnsupportedAppUsage
boolean mViewScrollChanged;
/**
@@ -26579,6 +26749,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* The view tree observer used to dispatch global events like
* layout, pre-draw, touch mode change, etc.
*/
+ @UnsupportedAppUsage
final ViewTreeObserver mTreeObserver;
/**
@@ -26595,6 +26766,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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;
/**
@@ -26757,8 +26929,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
public int scrollBarSize;
public int scrollBarMinTouchTarget;
+ @UnsupportedAppUsage
public ScrollBarDrawable scrollBar;
public float[] interpolatorValues;
+ @UnsupportedAppUsage
public View host;
public final Paint paint;
@@ -26780,6 +26954,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* The current state of the scrollbars: ON, OFF, or FADING
*/
+ @UnsupportedAppUsage
public int state = OFF;
private int mLastColor;
@@ -26898,6 +27073,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* 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);
@@ -27212,6 +27388,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*
* @hide
*/
+ @UnsupportedAppUsage
public AccessibilityNodeInfo createAccessibilityNodeInfo(View host) {
return host.createAccessibilityNodeInfoInternal();
}
@@ -27480,6 +27657,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* @hide Binary compatibility stub. To be removed when we finalize O APIs.
*/
+ @UnsupportedAppUsage
public void setTooltip(@Nullable CharSequence tooltipText) {
setTooltipText(tooltipText);
}
@@ -27529,6 +27707,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
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 075db8e7de59..767cd33c2625 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 @@ public class ViewConfiguration {
/**
* The coefficient of friction applied to flings/scrolls.
*/
+ @UnsupportedAppUsage
private static final float SCROLL_FRICTION = 0.015f;
/**
@@ -299,15 +301,19 @@ public class ViewConfiguration {
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 @@ public class ViewConfiguration {
*
* @hide
*/
+ @UnsupportedAppUsage
public static int getDoubleTapMinTime() {
return DOUBLE_TAP_MIN_TIME;
}
@@ -609,6 +616,7 @@ public class ViewConfiguration {
* to a hover movement gesture.
* @hide
*/
+ @UnsupportedAppUsage
public static int getHoverTapSlop() {
return HOVER_TAP_SLOP;
}
@@ -662,6 +670,7 @@ public class ViewConfiguration {
* potential double tap event
* @hide
*/
+ @UnsupportedAppUsage
public int getScaledDoubleTapTouchSlop() {
return mDoubleTapTouchSlop;
}
@@ -682,6 +691,7 @@ public class ViewConfiguration {
* for clients that still use its deprecated constructor.
*/
@Deprecated
+ @UnsupportedAppUsage
public static int getDoubleTapSlop() {
return DOUBLE_TAP_SLOP;
}
@@ -929,6 +939,7 @@ public class ViewConfiguration {
* @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 e4c595b4f53b..8dd03476a2b8 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 @@ public class ViewDebug {
*
* @hide
*/
+ @UnsupportedAppUsage
public static long getViewInstanceCount() {
return Debug.countInstancesOfClass(View.class);
}
@@ -383,6 +385,7 @@ public class ViewDebug {
*
* @hide
*/
+ @UnsupportedAppUsage
public static long getViewRootImplCount() {
return Debug.countInstancesOfClass(ViewRootImpl.class);
}
@@ -434,6 +437,7 @@ public class ViewDebug {
public static void stopHierarchyTracing() {
}
+ @UnsupportedAppUsage
static void dispatchCommand(View view, String command, String parameters,
OutputStream clientStream) throws IOException {
@@ -803,6 +807,7 @@ public class ViewDebug {
* @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 9f526ccbd656..6268a4a8d9d0 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -24,6 +24,7 @@ import android.annotation.IdRes;
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 @@ import java.util.function.Predicate;
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 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected ArrayList<View> mDisappearingChildren;
/**
@@ -136,9 +139,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* 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 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
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 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
@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 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* @hide
*/
+ @UnsupportedAppUsage
protected static final int FLAG_USE_CHILD_DRAWING_ORDER = 0x400;
/**
@@ -303,6 +311,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* {@hide}
*/
+ @UnsupportedAppUsage
protected static final int FLAG_SUPPORT_STATIC_TRANSFORMATIONS = 0x800;
// UNUSED FLAG VALUE: 0x1000;
@@ -356,6 +365,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* When set, this ViewGroup should not intercept touch events.
* {@hide}
*/
+ @UnsupportedAppUsage
protected static final int FLAG_DISALLOW_INTERCEPT = 0x80000;
/**
@@ -418,6 +428,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
+ @UnsupportedAppUsage
protected int mPersistentDrawingCache;
/**
@@ -530,9 +541,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
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 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* @hide
*/
@Override
+ @UnsupportedAppUsage
public void makeOptionalFitsSystemWindows() {
super.makeOptionalFitsSystemWindows();
final int count = mChildrenCount;
@@ -1508,6 +1522,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* @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 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
}
+ @UnsupportedAppUsage
private void cancelTouchTarget(View view) {
TouchTarget predecessor = null;
TouchTarget target = mFirstTouchTarget;
@@ -2955,6 +2971,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* 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 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
/**
* @hide
*/
+ @UnsupportedAppUsage
public void transformPointToViewLocal(float[] point, View child) {
point[0] += mScrollX - child.mLeft;
point[1] += mScrollY - child.mTop;
@@ -3392,6 +3410,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
@Override
+ @UnsupportedAppUsage
void dispatchAttachedToWindow(AttachInfo info, int visibility) {
mGroupFlags |= FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW;
super.dispatchAttachedToWindow(info, visibility);
@@ -3634,6 +3653,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
/** @hide */
@Override
+ @UnsupportedAppUsage
public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfoInternal(info);
if (getAccessibilityNodeProvider() != null) {
@@ -3740,6 +3760,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
@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 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* @hide
*/
@Override
+ @UnsupportedAppUsage
protected void dispatchGetDisplayList() {
final int count = mChildrenCount;
final View[] children = mChildren;
@@ -4660,6 +4682,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* @hide
*/
+ @UnsupportedAppUsage
public void addTransientView(View view, int index) {
if (index < 0 || view == null) {
return;
@@ -4702,6 +4725,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* @hide
*/
+ @UnsupportedAppUsage
public void removeTransientView(View view) {
if (mTransientViews == null) {
return;
@@ -4731,6 +4755,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* @hide
*/
+ @UnsupportedAppUsage
public int getTransientViewCount() {
return mTransientIndices == null ? 0 : mTransientIndices.size();
}
@@ -4764,6 +4789,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* @hide
*/
+ @UnsupportedAppUsage
public View getTransientView(int position) {
if (mTransientViews == null || position >= mTransientViews.size()) {
return null;
@@ -4922,6 +4948,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
mOnHierarchyChangeListener = listener;
}
+ @UnsupportedAppUsage
void dispatchViewAdded(View child) {
onViewAdded(child);
if (mOnHierarchyChangeListener != null) {
@@ -4938,6 +4965,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
public void onViewAdded(View child) {
}
+ @UnsupportedAppUsage
void dispatchViewRemoved(View child) {
onViewRemoved(child);
if (mOnHierarchyChangeListener != null) {
@@ -6088,6 +6116,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* @hide
*/
+ @UnsupportedAppUsage
public void offsetChildrenTopAndBottom(int offset) {
final int count = mChildrenCount;
final View[] children = mChildren;
@@ -7006,6 +7035,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* @hide
*/
+ @UnsupportedAppUsage
public void suppressLayout(boolean suppress) {
mSuppressLayout = suppress;
if (!suppress) {
@@ -7303,6 +7333,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* @hide
*/
@Override
+ @UnsupportedAppUsage
public void resolvePadding() {
super.resolvePadding();
int count = getChildCount();
@@ -7750,6 +7781,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* Used internally by MarginLayoutParams.
* @hide
*/
+ @UnsupportedAppUsage
LayoutParams() {
}
@@ -7890,6 +7922,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* to this field.
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
private int startMargin = DEFAULT_MARGIN_RELATIVE;
/**
@@ -7898,6 +7931,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* to this field.
*/
@ViewDebug.ExportedProperty(category = "layout")
+ @UnsupportedAppUsage
private int endMargin = DEFAULT_MARGIN_RELATIVE;
/**
@@ -8127,6 +8161,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* @hide
*/
+ @UnsupportedAppUsage
public void setMarginsRelative(int start, int top, int end, int bottom) {
startMargin = start;
topMargin = top;
@@ -8350,6 +8385,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
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 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
// The next target in the target list.
public TouchTarget next;
+ @UnsupportedAppUsage
private TouchTarget() {
}
@@ -8754,6 +8791,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
/** @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 87702161070b..d5716bfaaf00 100644
--- a/core/java/android/view/ViewHierarchyEncoder.java
+++ b/core/java/android/view/ViewHierarchyEncoder.java
@@ -2,6 +2,7 @@ package android.view;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UnsupportedAppUsage;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
@@ -90,6 +91,7 @@ public class ViewHierarchyEncoder {
endPropertyMap();
}
+ @UnsupportedAppUsage
public void addProperty(@NonNull String name, boolean v) {
writeShort(createPropertyIndex(name));
writeBoolean(v);
@@ -100,16 +102,19 @@ public class ViewHierarchyEncoder {
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 21123c167792..e23c687af49b 100644
--- a/core/java/android/view/ViewOverlay.java
+++ b/core/java/android/view/ViewOverlay.java
@@ -17,6 +17,7 @@ package android.view;
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 @@ public class ViewOverlay {
* of the overlay
* @return
*/
+ @UnsupportedAppUsage
ViewGroup getOverlayView() {
return mOverlayViewGroup;
}
@@ -94,6 +96,7 @@ public class ViewOverlay {
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 97a2d795edaa..23fc4d5045a9 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -30,6 +30,7 @@ import android.Manifest;
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 @@ public final class ViewRootImpl implements ViewParent,
*/
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 @@ public final class ViewRootImpl implements ViewParent,
*/
@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 @@ public final class ViewRootImpl implements ViewParent,
int mSeq;
+ @UnsupportedAppUsage
View mView;
View mAccessibilityFocusedHost;
@@ -287,6 +292,7 @@ public final class ViewRootImpl implements ViewParent,
// 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 @@ public final class ViewRootImpl implements ViewParent,
final Region mTransparentRegion;
final Region mPreviousTransparentRegion;
+ @UnsupportedAppUsage
int mWidth;
+ @UnsupportedAppUsage
int mHeight;
+ @UnsupportedAppUsage
Rect mDirty;
public boolean mIsAnimating;
@@ -321,10 +330,12 @@ public final class ViewRootImpl implements ViewParent,
CompatibilityInfo.Translator mTranslator;
+ @UnsupportedAppUsage
final View.AttachInfo mAttachInfo;
InputChannel mInputChannel;
InputQueue.Callback mInputQueueCallback;
InputQueue mInputQueue;
+ @UnsupportedAppUsage
FallbackEventHandler mFallbackEventHandler;
Choreographer mChoreographer;
@@ -389,8 +400,10 @@ public final class ViewRootImpl implements ViewParent,
// 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 @@ public final class ViewRootImpl implements ViewParent,
boolean mScrollMayChange;
@SoftInputModeFlags
int mSoftInputMode;
+ @UnsupportedAppUsage
WeakReference<View> mLastScrolledFocus;
int mScrollY;
int mCurScrollY;
@@ -555,6 +569,7 @@ public final class ViewRootImpl implements ViewParent,
}
/** 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 @@ public final class ViewRootImpl implements ViewParent,
return (mWindowAttributes.flags & WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE) != 0;
}
+ @UnsupportedAppUsage
public int getWindowFlags() {
return mWindowAttributes.flags;
}
@@ -930,6 +946,7 @@ public final class ViewRootImpl implements ViewParent,
}
}
+ @UnsupportedAppUsage
public void detachFunctor(long functor) {
if (mAttachInfo.mThreadedRenderer != null) {
// Fence so that any pending invokeFunctor() messages will be processed
@@ -947,6 +964,7 @@ public final class ViewRootImpl implements ViewParent,
* 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 @@ public final class ViewRootImpl implements ViewParent,
mNextRtFrameCallback = callback;
}
+ @UnsupportedAppUsage
private void enableHardwareAcceleration(WindowManager.LayoutParams attrs) {
mAttachInfo.mHardwareAccelerated = false;
mAttachInfo.mHardwareAccelerationRequested = false;
@@ -1040,6 +1059,7 @@ public final class ViewRootImpl implements ViewParent,
}
}
+ @UnsupportedAppUsage
public View getView() {
return mView;
}
@@ -1241,6 +1261,7 @@ public final class ViewRootImpl implements ViewParent,
invalidate();
}
+ @UnsupportedAppUsage
void invalidate() {
mDirty.set(0, 0, mWidth, mHeight);
if (!mWillDrawSoon) {
@@ -1422,6 +1443,7 @@ public final class ViewRootImpl implements ViewParent,
}
}
+ @UnsupportedAppUsage
void scheduleTraversals() {
if (!mTraversalScheduled) {
mTraversalScheduled = true;
@@ -3657,6 +3679,7 @@ public final class ViewRootImpl implements ViewParent,
/**
* @hide
*/
+ @UnsupportedAppUsage
public View getAccessibilityFocusedHost() {
return mAccessibilityFocusedHost;
}
@@ -3664,6 +3687,7 @@ public final class ViewRootImpl implements ViewParent,
/**
* @hide
*/
+ @UnsupportedAppUsage
public AccessibilityNodeInfo getAccessibilityFocusedVirtualView() {
return mAccessibilityFocusedVirtualView;
}
@@ -4281,6 +4305,7 @@ public final class ViewRootImpl implements ViewParent,
* @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 @@ public final class ViewRootImpl implements ViewParent,
}
/* drag/drop */
+ @UnsupportedAppUsage
void setLocalDragState(Object obj) {
mLocalDragState = obj;
}
@@ -6423,6 +6449,7 @@ public final class ViewRootImpl implements ViewParent,
}
}
+ @UnsupportedAppUsage
public void getLastTouchPoint(Point outLocation) {
outLocation.x = (int) mLastTouchPoint.x;
outLocation.y = (int) mLastTouchPoint.y;
@@ -6821,6 +6848,7 @@ public final class ViewRootImpl implements ViewParent,
}
}
+ @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 @@ public final class ViewRootImpl implements ViewParent,
}
}
+ @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 @@ public final class ViewRootImpl implements ViewParent,
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 @@ public final class ViewRootImpl implements ViewParent,
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 @@ public final class ViewRootImpl implements ViewParent,
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 @@ public final class ViewRootImpl implements ViewParent,
* 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 final class ViewRootImpl implements ViewParent,
}
public static final class CalledFromWrongThreadException extends AndroidRuntimeException {
+ @UnsupportedAppUsage
public CalledFromWrongThreadException(String msg) {
super(msg);
}
diff --git a/core/java/android/view/ViewTreeObserver.java b/core/java/android/view/ViewTreeObserver.java
index efc18072e547..f7c9a0bf0f4b 100644
--- a/core/java/android/view/ViewTreeObserver.java
+++ b/core/java/android/view/ViewTreeObserver.java
@@ -19,6 +19,7 @@ package android.view;
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 @@ public final class ViewTreeObserver {
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 @@ public final class ViewTreeObserver {
* 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 @@ public final class ViewTreeObserver {
* 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 @@ public final class ViewTreeObserver {
* 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 @@ public final class ViewTreeObserver {
* {@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 @@ public final class ViewTreeObserver {
touchableRegion.equals(other.touchableRegion);
}
+ @UnsupportedAppUsage
void set(InternalInsetsInfo other) {
contentInsets.set(other.contentInsets);
visibleInsets.set(other.visibleInsets);
@@ -848,6 +860,7 @@ public final class ViewTreeObserver {
* 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 @@ public final class ViewTreeObserver {
* 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 @@ public final class ViewTreeObserver {
/**
* 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 @@ public final class ViewTreeObserver {
*
* @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 @@ public final class ViewTreeObserver {
/**
* 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 @@ public final class ViewTreeObserver {
/**
* Returns whether there are listeners for computing internal insets.
*/
+ @UnsupportedAppUsage
final boolean hasComputeInternalInsetsListeners() {
final CopyOnWriteArray<OnComputeInternalInsetsListener> listeners =
mOnComputeInternalInsetsListeners;
@@ -1125,6 +1143,7 @@ public final class ViewTreeObserver {
/**
* 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 b9f9e5e89ca8..f436962147eb 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -25,6 +25,7 @@ import android.annotation.LayoutRes;
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 @@ public abstract class Window {
* Max value used as a feature ID
* @hide
*/
+ @UnsupportedAppUsage
public static final int FEATURE_MAX = FEATURE_ACTIVITY_TRANSITIONS;
/**
@@ -267,18 +269,25 @@ public abstract class Window {
*/
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 @@ public abstract class Window {
private boolean mSetCloseOnTouchOutside = false;
private int mForcedWindowFlags = 0;
+ @UnsupportedAppUsage
private int mFeatures;
+ @UnsupportedAppUsage
private int mLocalFeatures;
private boolean mHaveWindowFormat = false;
@@ -297,12 +308,14 @@ public abstract class Window {
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 @@ public abstract class Window {
}
/** @hide */
+ @UnsupportedAppUsage
public final boolean isDestroyed() {
return mDestroyed;
}
@@ -1066,6 +1080,7 @@ public abstract class Window {
}
/** @hide */
+ @UnsupportedAppUsage
public void addPrivateFlags(int flags) {
setPrivateFlags(flags, flags);
}
@@ -1116,6 +1131,7 @@ public abstract class Window {
/**
* {@hide}
*/
+ @UnsupportedAppUsage
protected void setNeedsMenuKey(int value) {
final WindowManager.LayoutParams attrs = getAttributes();
attrs.needsMenuKey = value;
@@ -1236,12 +1252,14 @@ public abstract class Window {
}
/** @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 @@ public abstract class Window {
}
/** @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 c60b96ca76de..0233c862b984 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 @@ public final class WindowAnimationFrameStats extends FrameStats implements Parce
*
* @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 c6da2fb260b9..96878e90925c 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 @@ public final class WindowContentFrameStats extends FrameStats implements Parcela
*
* @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 fbd8141ae27a..8628da374930 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 @@ public final class WindowInsets {
* 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 @@ public final class WindowInsets {
}
/** @hide */
+ @UnsupportedAppUsage
public WindowInsets(Rect systemWindowInsets) {
this(systemWindowInsets, null, null, false, false, null);
}
@@ -124,6 +127,7 @@ public final class WindowInsets {
* to the existing fitSystemWindows method and other similar internals.
* @hide
*/
+ @UnsupportedAppUsage
public Rect getSystemWindowInsets() {
if (mTempRect == null) {
mTempRect = new Rect();
@@ -578,6 +582,7 @@ public final class WindowInsets {
*
* @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 d7a5d68ea404..0404df027a4c 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -50,6 +50,7 @@ import android.annotation.RequiresPermission;
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 @@ public interface WindowManager extends ViewManager {
* is a big ugly hack so:
* @hide
*/
+ @UnsupportedAppUsage
public static final int TYPE_APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW + 4;
/**
@@ -826,6 +828,7 @@ public interface WindowManager extends ViewManager {
* 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 @@ public interface WindowManager extends ViewManager {
* 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 @@ public interface WindowManager extends ViewManager {
*
* {@hide}
*/
+ @UnsupportedAppUsage
public static final int FLAG_SLIPPERY = 0x20000000;
/**
@@ -1554,6 +1559,7 @@ public interface WindowManager extends ViewManager {
* to determine its default behavior.
*
* {@hide} */
+ @UnsupportedAppUsage
public static final int PRIVATE_FLAG_SHOW_FOR_ALL_USERS = 0x00000010;
/**
@@ -1813,6 +1819,7 @@ public interface WindowManager extends ViewManager {
*
* @hide
*/
+ @UnsupportedAppUsage
public static final int NEEDS_MENU_SET_TRUE = 1;
/**
@@ -1821,6 +1828,7 @@ public interface WindowManager extends ViewManager {
*
* @hide
*/
+ @UnsupportedAppUsage
public static final int NEEDS_MENU_SET_FALSE = 2;
/**
@@ -1834,6 +1842,7 @@ public interface WindowManager extends ViewManager {
*
* {@hide}
*/
+ @UnsupportedAppUsage
public int needsMenuKey = NEEDS_MENU_UNSET;
/**
@@ -2238,6 +2247,7 @@ public interface WindowManager extends ViewManager {
* 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 @@ public interface WindowManager extends ViewManager {
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean hasSystemUiListeners;
@@ -2398,6 +2409,7 @@ public interface WindowManager extends ViewManager {
*
* @hide
*/
+ @UnsupportedAppUsage
public static final int INPUT_FEATURE_DISABLE_USER_ACTIVITY = 0x00000004;
/**
@@ -2408,6 +2420,7 @@ public interface WindowManager extends ViewManager {
* @see #INPUT_FEATURE_DISABLE_USER_ACTIVITY
* @hide
*/
+ @UnsupportedAppUsage
public int inputFeatures;
/**
@@ -2423,6 +2436,7 @@ public interface WindowManager extends ViewManager {
*
* @hide
*/
+ @UnsupportedAppUsage
public long userActivityTimeout = -1;
/**
@@ -2454,6 +2468,7 @@ public interface WindowManager extends ViewManager {
*
* @hide
*/
+ @UnsupportedAppUsage
public long hideTimeoutMilliseconds = -1;
/**
@@ -3124,6 +3139,7 @@ public interface WindowManager extends ViewManager {
* Backup the layout parameters used in compatibility mode.
* @see LayoutParams#restore()
*/
+ @UnsupportedAppUsage
void backup() {
int[] backup = mCompatibilityParamsBackup;
if (backup == null) {
@@ -3140,6 +3156,7 @@ public interface WindowManager extends ViewManager {
* 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 08c2d0b7a98c..d810067c38de 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 final class WindowManagerGlobal {
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 @@ public final class WindowManagerGlobal {
private WindowManagerGlobal() {
}
+ @UnsupportedAppUsage
public static void initialize() {
getWindowManagerService();
}
+ @UnsupportedAppUsage
public static WindowManagerGlobal getInstance() {
synchronized (WindowManagerGlobal.class) {
if (sDefaultWindowManager == null) {
@@ -161,6 +171,7 @@ public final class WindowManagerGlobal {
}
}
+ @UnsupportedAppUsage
public static IWindowManager getWindowManagerService() {
synchronized (WindowManagerGlobal.class) {
if (sWindowManagerService == null) {
@@ -179,6 +190,7 @@ public final class WindowManagerGlobal {
}
}
+ @UnsupportedAppUsage
public static IWindowSession getWindowSession() {
synchronized (WindowManagerGlobal.class) {
if (sWindowSession == null) {
@@ -201,12 +213,14 @@ public final class WindowManagerGlobal {
}
}
+ @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 @@ public final class WindowManagerGlobal {
}
}
+ @UnsupportedAppUsage
public ArrayList<ViewRootImpl> getRootViews(IBinder token) {
ArrayList<ViewRootImpl> views = new ArrayList<>();
synchronized (mLock) {
@@ -264,6 +279,7 @@ public final class WindowManagerGlobal {
return null;
}
+ @UnsupportedAppUsage
public View getRootView(String name) {
synchronized (mLock) {
for (int i = mRoots.size() - 1; i >= 0; --i) {
@@ -385,6 +401,7 @@ public final class WindowManagerGlobal {
}
}
+ @UnsupportedAppUsage
public void removeView(View view, boolean immediate) {
if (view == null) {
throw new IllegalArgumentException("view must not be null");
@@ -500,6 +517,7 @@ public final class WindowManagerGlobal {
return false;
}
+ @UnsupportedAppUsage
public void trimMemory(int level) {
if (ThreadedRenderer.isAvailable()) {
if (shouldDestroyEglContext(level)) {
@@ -647,6 +665,7 @@ public final class WindowManagerGlobal {
}
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 a8722f101ef4..2339d35f7317 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 @@ import java.util.List;
* @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 a6b8eb3ebf75..3eca8541d1fe 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 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
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 d60c48198e38..4db6f4f808f2 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 @@ public final class AccessibilityInteractionClient
/**
* @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 @@ public final class AccessibilityInteractionClient
*
* @param message The message.
*/
+ @UnsupportedAppUsage
public void setSameThreadMessage(Message message) {
synchronized (mInstanceLock) {
mSameThreadMessage = message;
@@ -625,6 +628,7 @@ public final class AccessibilityInteractionClient
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 cbb23f1a6c62..c59c491be878 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -25,6 +25,7 @@ import android.annotation.NonNull;
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 final class AccessibilityManager {
public static final int DALTONIZER_DISABLED = -1;
/** @hide */
+ @UnsupportedAppUsage
public static final int DALTONIZER_SIMULATE_MONOCHROMACY = 0;
/** @hide */
@@ -112,30 +114,39 @@ public final class AccessibilityManager {
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 @@ public final class AccessibilityManager {
*
* @hide
*/
+ @UnsupportedAppUsage
public static AccessibilityManager getInstance(Context context) {
synchronized (sInstanceSync) {
if (sInstance == null) {
@@ -430,6 +442,7 @@ public final class AccessibilityManager {
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isHighTextContrastEnabled() {
synchronized (mLock) {
IAccessibilityManager service = getServiceLocked();
@@ -916,6 +929,7 @@ public final class AccessibilityManager {
*
* @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 17bb04f7ef42..a3fa2ceba4d3 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -25,6 +25,7 @@ import android.accessibilityservice.AccessibilityService;
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 @@ public class AccessibilityNodeInfo implements Parcelable {
*
* @hide
*/
+ @UnsupportedAppUsage
public static int getAccessibilityViewId(long accessibilityNodeId) {
return (int) accessibilityNodeId;
}
@@ -665,6 +667,7 @@ public class AccessibilityNodeInfo implements Parcelable {
*
* @hide
*/
+ @UnsupportedAppUsage
public static int getVirtualDescendantId(long accessibilityNodeId) {
return (int) ((accessibilityNodeId & VIRTUAL_DESCENDANT_ID_MASK)
>> VIRTUAL_DESCENDANT_ID_SHIFT);
@@ -692,10 +695,12 @@ public class AccessibilityNodeInfo implements Parcelable {
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 @@ public class AccessibilityNodeInfo implements Parcelable {
private String mViewIdResourceName;
private ArrayList<String> mExtraDataKeys;
+ @UnsupportedAppUsage
private LongArray mChildNodeIds;
private ArrayList<AccessibilityAction> mActions;
@@ -855,6 +861,7 @@ public class AccessibilityNodeInfo implements Parcelable {
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean refresh(Bundle arguments, boolean bypassCache) {
enforceSealed();
if (!canPerformRequestOverConnection(mSourceNodeId)) {
@@ -3021,6 +3028,7 @@ public class AccessibilityNodeInfo implements Parcelable {
*
* @hide
*/
+ @UnsupportedAppUsage
public long getSourceNodeId() {
return mSourceNodeId;
}
@@ -3032,6 +3040,7 @@ public class AccessibilityNodeInfo implements Parcelable {
*
* @hide
*/
+ @UnsupportedAppUsage
public void setSealed(boolean sealed) {
mSealed = sealed;
}
@@ -3043,6 +3052,7 @@ public class AccessibilityNodeInfo implements Parcelable {
*
* @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 c2ddc927b04e..b382a1863af3 100644
--- a/core/java/android/view/accessibility/AccessibilityRecord.java
+++ b/core/java/android/view/accessibility/AccessibilityRecord.java
@@ -19,6 +19,7 @@ package android.view.accessibility;
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 @@ public class AccessibilityRecord {
private AccessibilityRecord mNext;
private boolean mIsInPool;
+ @UnsupportedAppUsage
boolean mSealed;
int mBooleanProperties = 0;
int mCurrentItemIndex = UNDEFINED;
@@ -98,6 +100,7 @@ public class AccessibilityRecord {
int mAddedCount= UNDEFINED;
int mRemovedCount = UNDEFINED;
+ @UnsupportedAppUsage
long mSourceNodeId = AccessibilityNodeInfo.UNDEFINED_NODE_ID;
int mSourceWindowId = AccessibilityWindowInfo.UNDEFINED_WINDOW_ID;
@@ -696,6 +699,7 @@ public class AccessibilityRecord {
*
* @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 d6455e7270a9..c42e9fec91bf 100644
--- a/core/java/android/view/accessibility/CaptioningManager.java
+++ b/core/java/android/view/accessibility/CaptioningManager.java
@@ -19,6 +19,7 @@ package android.view.accessibility;
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 class CaptioningManager {
public static final CaptionStyle DEFAULT;
/** @hide */
+ @UnsupportedAppUsage
public static final CaptionStyle[] PRESETS;
/** @hide */
diff --git a/core/java/android/view/inputmethod/InputMethodInfo.java b/core/java/android/view/inputmethod/InputMethodInfo.java
index 372362fe2a58..04028aeacd53 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 @@ public final class InputMethodInfo implements Parcelable {
/**
* An array-like container of the subtypes.
*/
+ @UnsupportedAppUsage
private final InputMethodSubtypeArray mSubtypes;
private final boolean mIsAuxIme;
@@ -445,6 +447,7 @@ public final class InputMethodInfo implements Parcelable {
* 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 bb93af5c66de..7762ecf51706 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -24,6 +24,7 @@ import android.annotation.RequiresFeature;
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 @@ public final class InputMethodManager {
static final String PENDING_EVENT_COUNTER = "aq:imm";
+ @UnsupportedAppUsage
static InputMethodManager sInstance;
/**
@@ -270,11 +272,13 @@ public final class InputMethodManager {
/** @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 @@ public final class InputMethodManager {
* 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 @@ public final class InputMethodManager {
/**
* 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 @@ public final class InputMethodManager {
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 @@ public final class InputMethodManager {
/**
* 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 @@ public final class InputMethodManager {
* doesn't already exist.
* @hide
*/
+ @UnsupportedAppUsage
public static InputMethodManager getInstance() {
synchronized (InputMethodManager.class) {
if (sInstance == null) {
@@ -695,16 +708,19 @@ public final class InputMethodManager {
* 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 @@ public final class InputMethodManager {
}
/** @hide */
+ @UnsupportedAppUsage
public void registerSuggestionSpansForNotification(SuggestionSpan[] spans) {
try {
mService.registerSuggestionSpansForNotification(spans);
@@ -825,6 +842,7 @@ public final class InputMethodManager {
}
/** @hide */
+ @UnsupportedAppUsage
public void notifySuggestionPicked(SuggestionSpan span, String originalString, int index) {
try {
mService.notifySuggestionPicked(span, originalString, index);
@@ -930,6 +948,7 @@ public final class InputMethodManager {
/**
* Disconnect any existing input connection, clearing the served view.
*/
+ @UnsupportedAppUsage
void finishInputLocked() {
mNextServedView = null;
if (mServedView != null) {
@@ -1094,6 +1113,7 @@ public final class InputMethodManager {
* @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 @@ public final class InputMethodManager {
* input method started before.
* @hide
*/
+ @UnsupportedAppUsage
public void windowDismissed(IBinder appWindowToken) {
checkFocus();
synchronized (mH) {
@@ -1428,6 +1449,7 @@ public final class InputMethodManager {
* Call this when a view receives focus.
* @hide
*/
+ @UnsupportedAppUsage
public void focusIn(View view) {
synchronized (mH) {
focusInLocked(view);
@@ -1458,6 +1480,7 @@ public final class InputMethodManager {
* 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 @@ public final class InputMethodManager {
/**
* @hide
*/
+ @UnsupportedAppUsage
public void checkFocus() {
if (checkFocusNoStartInput(false)) {
startInputInner(InputMethodClient.START_INPUT_REASON_CHECK_FOCUS, null, 0, 0, 0);
@@ -1549,6 +1573,7 @@ public final class InputMethodManager {
return true;
}
+ @UnsupportedAppUsage
void closeCurrentInput() {
try {
mService.hideSoftInput(mClient, HIDE_NOT_ALWAYS, null);
@@ -1616,6 +1641,7 @@ public final class InputMethodManager {
}
/** @hide */
+ @UnsupportedAppUsage
public void onPreWindowFocus(View rootView, boolean hasWindowFocus) {
synchronized (mH) {
if (rootView == null) {
@@ -1719,6 +1745,7 @@ public final class InputMethodManager {
*
* @hide
*/
+ @UnsupportedAppUsage
public boolean isCursorAnchorInfoEnabled() {
synchronized (mH) {
final boolean isImmediate = (mRequestUpdateCursorAnchorInfoMonitorMode &
@@ -1734,6 +1761,7 @@ public final class InputMethodManager {
*
* @hide
*/
+ @UnsupportedAppUsage
public void setUpdateCursorAnchorInfoMode(int flags) {
synchronized (mH) {
mRequestUpdateCursorAnchorInfoMonitorMode = flags;
@@ -2243,6 +2271,7 @@ public final class InputMethodManager {
* Notify that a user took some action with this input method.
* @hide
*/
+ @UnsupportedAppUsage
public void notifyUserAction() {
synchronized (mH) {
if (mLastSentUserActionNotificationSequenceNumber ==
@@ -2311,6 +2340,7 @@ public final class InputMethodManager {
* @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 6a748cedc131..8dd0dcd45a1c 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 @@ public class InputMethodSubtypeArray {
* @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 201218ba86f4..ed862064be67 100644
--- a/core/java/android/view/textclassifier/TextClassificationManager.java
+++ b/core/java/android/view/textclassifier/TextClassificationManager.java
@@ -19,6 +19,7 @@ package android.view.textclassifier;
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 @@ public final class TextClassificationManager {
* @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 1505863ad276..9692579de6ba 100644
--- a/core/java/android/view/textclassifier/TextClassifier.java
+++ b/core/java/android/view/textclassifier/TextClassifier.java
@@ -21,6 +21,7 @@ import android.annotation.IntRange;
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 @@ public interface TextClassifier {
// 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 @@ public interface TextClassifier {
// 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 @@ public interface TextClassifier {
// 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 e7faf142c55d..1cac3ede363a 100644
--- a/core/java/android/view/textclassifier/TextLinks.java
+++ b/core/java/android/view/textclassifier/TextLinks.java
@@ -20,6 +20,7 @@ import android.annotation.FloatRange;
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 @@ public final class TextLinks implements Parcelable {
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 f7d75cd89537..b530ddfe86d6 100644
--- a/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java
+++ b/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java
@@ -19,6 +19,7 @@ package android.view.textclassifier.logging;
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 @@ public final class SmartSelectionEventTracker {
private boolean mSmartSelectionTriggered;
private String mModelName;
+ @UnsupportedAppUsage
public SmartSelectionEventTracker(@NonNull Context context, @WidgetType int widgetType) {
mWidgetType = widgetType;
mWidgetVersion = null;
@@ -117,6 +119,7 @@ public final class SmartSelectionEventTracker {
*
* @param event the selection event
*/
+ @UnsupportedAppUsage
public void logEvent(@NonNull SelectionEvent event) {
Preconditions.checkNotNull(event);
@@ -440,6 +443,7 @@ public final class SmartSelectionEventTracker {
*
* @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 @@ public final class SmartSelectionEventTracker {
* @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 @@ public final class SmartSelectionEventTracker {
* @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 @@ public final class SmartSelectionEventTracker {
* @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 @@ public final class SmartSelectionEventTracker {
* @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 @@ public final class SmartSelectionEventTracker {
* @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 886f5c822fb4..9733701ee0f0 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 @@ public class SpellCheckerSession {
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 6644a85291b7..4c6862c81cf2 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 @@ public final class TextServicesManager {
* 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 @@ public final class TextServicesManager {
/**
* @hide
*/
+ @UnsupportedAppUsage
public SpellCheckerInfo[] getEnabledSpellCheckers() {
try {
final SpellCheckerInfo[] retval = mService.getEnabledSpellCheckers();
@@ -207,6 +210,7 @@ public final class TextServicesManager {
/**
* @hide
*/
+ @UnsupportedAppUsage
public SpellCheckerInfo getCurrentSpellChecker() {
try {
// Passing null as a locale for ICS
@@ -219,6 +223,7 @@ public final class TextServicesManager {
/**
* @hide
*/
+ @UnsupportedAppUsage
public SpellCheckerSubtype getCurrentSpellCheckerSubtype(
boolean allowImplicitlySelectedSubtype) {
try {
@@ -231,6 +236,7 @@ public final class TextServicesManager {
/**
* @hide
*/
+ @UnsupportedAppUsage
public boolean isSpellCheckerEnabled() {
try {
return mService.isSpellCheckerEnabled();
diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java
index 8e04f1cd9f5b..a418fad322d7 100644
--- a/core/java/android/widget/MediaController.java
+++ b/core/java/android/widget/MediaController.java
@@ -77,7 +77,8 @@ public class MediaController extends FrameLayout {
private View mDecor;
private WindowManager.LayoutParams mDecorLayoutParams;
private ProgressBar mProgress;
- private TextView mEndTime, mCurrentTime;
+ private TextView mEndTime;
+ private TextView mCurrentTime;
private boolean mShowing;
private boolean mDragging;
private static final int sDefaultTimeout = 3000;
diff --git a/core/java/com/android/internal/app/procstats/ProcessStats.java b/core/java/com/android/internal/app/procstats/ProcessStats.java
index 14faf66a9424..b6624a2ef4b0 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.ArrayList;
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/os/HandlerCaller.java b/core/java/com/android/internal/os/HandlerCaller.java
index 63ff99012c7e..c8bfa1b02e22 100644
--- a/core/java/com/android/internal/os/HandlerCaller.java
+++ b/core/java/com/android/internal/os/HandlerCaller.java
@@ -22,6 +22,12 @@ 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;
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 5b36d7c3c64b..8f176e803b6e 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-watch/config.xml b/core/res/res/values-watch/config.xml
index 8e824791ef15..a96a96ddaf01 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/graphics/java/android/graphics/fonts/SystemFonts.java b/graphics/java/android/graphics/fonts/SystemFonts.java
index dae48f8b528f..26b4ec530072 100644
--- a/graphics/java/android/graphics/fonts/SystemFonts.java
+++ b/graphics/java/android/graphics/fonts/SystemFonts.java
@@ -24,6 +24,7 @@ import android.util.ArrayMap;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ArrayUtils;
import org.xmlpull.v1.XmlPullParserException;
@@ -251,7 +252,7 @@ public class SystemFonts {
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/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index a19edae26cb3..1517f579a084 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 @@ void VulkanManager::destroy() {
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 @@ bool VulkanManager::setupDevice(VkPhysicalDeviceFeatures& deviceFeatures) {
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 @@ bool VulkanManager::setupDevice(VkPhysicalDeviceFeatures& deviceFeatures) {
}
}
- // 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 @@ bool VulkanManager::setupDevice(VkPhysicalDeviceFeatures& deviceFeatures) {
const VkDeviceCreateInfo deviceInfo = {
VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // sType
- nullptr, // pNext
+ &features, // pNext
0, // VkDeviceCreateFlags
queueInfoCount, // queueCreateInfoCount
queueInfo, // pQueueCreateInfos
@@ -255,7 +284,7 @@ bool VulkanManager::setupDevice(VkPhysicalDeviceFeatures& deviceFeatures) {
nullptr, // ppEnabledLayerNames
(uint32_t) deviceExtensions.size(), // extensionCount
deviceExtensions.data(), // ppEnabledExtensionNames
- &deviceFeatures // ppEnabledFeatures
+ nullptr, // ppEnabledFeatures
};
err = mCreateDevice(mPhysicalDevice, &deviceInfo, nullptr, &mDevice);
@@ -294,32 +323,38 @@ bool VulkanManager::setupDevice(VkPhysicalDeviceFeatures& deviceFeatures) {
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));
-
- mGetDeviceQueue(mDevice, mGraphicsQueueIndex, 0, &mGraphicsQueue);
+ GET_PROC(EnumerateInstanceVersion);
+ uint32_t instanceVersion = 0;
+ LOG_ALWAYS_FATAL_IF(mEnumerateInstanceVersion(&instanceVersion));
+ LOG_ALWAYS_FATAL_IF(instanceVersion < VK_MAKE_VERSION(1, 1, 0));
- uint32_t extensionFlags = kKHR_surface_GrVkExtensionFlag |
- kKHR_android_surface_GrVkExtensionFlag |
- kKHR_swapchain_GrVkExtensionFlag;
+ GrVkExtensions extensions;
+ VkPhysicalDeviceFeatures2 features;
+ LOG_ALWAYS_FATAL_IF(!this->setupDevice(extensions, features));
- uint32_t featureFlags = 0;
- if (deviceFeatures.geometryShader) {
- featureFlags |= kGeometryShader_GrVkFeatureFlag;
- }
- if (deviceFeatures.dualSrcBlend) {
- featureFlags |= kDualSrcBlend_GrVkFeatureFlag;
- }
- if (deviceFeatures.sampleRateShading) {
- featureFlags |= kSampleRateShading_GrVkFeatureFlag;
- }
+ mGetDeviceQueue(mDevice, mGraphicsQueueIndex, 0, &mGraphicsQueue);
auto getProc = [] (const char* proc_name, VkInstance instance, VkDevice device) {
if (device != VK_NULL_HANDLE) {
@@ -334,11 +369,10 @@ void VulkanManager::initialize() {
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 @@ void VulkanManager::initialize() {
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 69641d57ccbb..5524c39d7a0c 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 @@ private:
// 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 @@ private:
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/media/java/android/media/audiofx/DefaultEffect.java b/media/java/android/media/audiofx/DefaultEffect.java
index a919868218f8..ce087adff8c1 100644
--- a/media/java/android/media/audiofx/DefaultEffect.java
+++ b/media/java/android/media/audiofx/DefaultEffect.java
@@ -24,6 +24,7 @@ package android.media.audiofx;
* <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 000000000000..d7a292e7e214
--- /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/jni/audioeffect/Android.bp b/media/jni/audioeffect/Android.bp
index 0063c11a7c64..09c546ab0065 100644
--- a/media/jni/audioeffect/Android.bp
+++ b/media/jni/audioeffect/Android.bp
@@ -3,6 +3,7 @@ cc_library_shared {
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 d3ba9f2076dd..8c9025b85860 100644
--- a/media/jni/audioeffect/android_media_AudioEffect.cpp
+++ b/media/jni/audioeffect/android_media_AudioEffect.cpp
@@ -907,6 +907,7 @@ static const JNINativeMethod gMethods[] = {
// ----------------------------------------------------------------------------
+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 +933,11 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved __unused)
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 000000000000..d244bcb71c62
--- /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/packages/ExtServices/src/android/ext/services/notification/AgingHelper.java b/packages/ExtServices/src/android/ext/services/notification/AgingHelper.java
new file mode 100644
index 000000000000..5782ea100070
--- /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 a8ecec3db213..f0f31fbded6f 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 @@ package android.ext.services.notification;
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.IOException;
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 @@ public class Assistant extends NotificationAssistantService {
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 @@ public class Assistant extends NotificationAssistantService {
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 @@ public class Assistant extends NotificationAssistantService {
}
}
- private void saveFile() throws IOException {
+ private void saveFile() {
AsyncTask.execute(() -> {
final FileOutputStream stream;
try {
@@ -200,6 +212,9 @@ public class Assistant extends NotificationAssistantService {
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 @@ public class Assistant extends NotificationAssistantService {
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 class Assistant extends NotificationAssistantService {
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 @@ public class Assistant extends NotificationAssistantService {
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 class Assistant extends NotificationAssistantService {
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,
@@ -302,6 +326,22 @@ public class Assistant extends NotificationAssistantService {
}
@Override
+ public void onNotificationsSeen(List<String> keys) {
+ if (keys == null) {
+ return;
+ }
+
+ for (String key : keys) {
+ NotificationEntry entry = mLiveNotifications.get(key);
+
+ if (entry != null) {
+ entry.setSeen();
+ mAgingHelper.onNotificationSeen(entry);
+ }
+ }
+ }
+
+ @Override
public void onListenerConnected() {
if (DEBUG) Log.i(TAG, "CONNECTED");
try {
@@ -318,6 +358,17 @@ public class Assistant extends NotificationAssistantService {
}
}
+ @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 +412,11 @@ public class Assistant extends NotificationAssistantService {
}
@VisibleForTesting
+ public void setPackageManager(IPackageManager pm) {
+ mPackageManager = pm;
+ }
+
+ @VisibleForTesting
public ChannelImpressions getImpressions(String key) {
synchronized (mkeyToImpressions) {
return mkeyToImpressions.get(key);
@@ -380,6 +436,20 @@ public class Assistant extends NotificationAssistantService {
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 cdc09906cb82..8fee822f11c0 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 @@ public class NotificationEntry {
private AudioAttributes mAttributes;
private NotificationChannel mChannel;
private int mImportance;
+ private boolean mSeen;
public NotificationEntry(IPackageManager packageManager, StatusBarNotification sbn,
NotificationChannel channel) {
@@ -198,6 +199,14 @@ public class NotificationEntry {
return false;
}
+ public void setSeen() {
+ mSeen = true;
+ }
+
+ public boolean hasSeen() {
+ return mSeen;
+ }
+
public StatusBarNotification getSbn() {
return mSbn;
}
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 000000000000..b023b364a19b
--- /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 bb68bc2b875e..2820232cdb38 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_LOW;
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.Notification;
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 @@ public class AssistantTest extends ServiceTestCase<Assistant> {
@Mock INotificationManager mNoMan;
@Mock AtomicFile mFile;
+ @Mock
+ IPackageManager mPackageManager;
Assistant mAssistant;
Application mApplication;
@@ -113,6 +120,11 @@ public class AssistantTest extends ServiceTestCase<Assistant> {
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 @@ public class AssistantTest extends ServiceTestCase<Assistant> {
// 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/PackageInstaller/AndroidManifest.xml b/packages/PackageInstaller/AndroidManifest.xml
index 513c8624ca71..2be9311d91ea 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 6be46fc88e9b..000000000000
--- 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 000000000000..5e94a29a6399
--- /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 d000ee9aa607..000000000000
--- 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 a043a0146c80..000000000000
--- 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 e3022e7afb20..000000000000
--- 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 fee6bede578a..000000000000
--- 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 000000000000..483b0cf18c56
--- /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 6c7160fc2935..ba81278fd7da 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 f79f98feafdc..000000000000
--- 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 6df6246ff560..6c8e4c551476 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 5ba2d327d7d6..54105bb8432d 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.content.pm.PackageManager;
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 @@ public class InstallFailed extends Activity {
.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 @@ public class InstallFailed extends Activity {
// 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 @@ public class InstallFailed extends Activity {
}
// 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 c2dd740f91e5..deb6163cbf9d 100755
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
@@ -19,8 +19,8 @@ package com.android.packageinstaller;
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.net.Uri;
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 @@ import java.io.OutputStream;
* <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 @@ public class InstallInstalling extends Activity {
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 @@ public class InstallInstalling extends Activity {
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 @@ public class InstallInstalling extends Activity {
}
}
- 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 @@ public class InstallInstalling extends Activity {
@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 1bc9dbd39b0a..98438cde7c68 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.net.Uri;
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 @@ import java.io.OutputStream;
* 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 @@ public class InstallStaging extends Activity {
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 @@ public class InstallStaging extends Activity {
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 94f6b31383bd..705d3f4bdf87 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
@@ -19,6 +19,7 @@ package com.android.packageinstaller;
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.content.pm.ResolveInfo;
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 @@ public class InstallSuccess extends Activity {
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 @@ public class InstallSuccess extends Activity {
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 @@ public class InstallSuccess extends Activity {
}
}
- 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 1fdbd97089a3..000000000000
--- 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 97bafe75be90..580308a4cffd 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.os.UserManager;
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 @@ import java.io.File;
* 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 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On
// Buttons to indicate user acceptance
private Button mOk;
- private Button mCancel;
private PackageUtil.AppSnippet mAppSnippet;
@@ -119,18 +120,18 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On
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 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On
@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 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On
// 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 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On
outState.putBoolean(ALLOW_UNKNOWN_SOURCES_KEY, mAllowUnknownSources);
}
- private void bindUi(int layout) {
- setContentView(layout);
-
- mOk = (Button) findViewById(R.id.ok_button);
- mCancel = (Button)findViewById(R.id.cancel_button);
- mOk.setOnClickListener(this);
- mCancel.setOnClickListener(this);
+ 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 = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
mOk.setEnabled(false);
-
- PackageUtil.initSnippetForNewApp(this, mAppSnippet, R.id.app_snippet);
}
/**
@@ -525,26 +545,6 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On
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 ba4bf8a6b838..0e89f56d2376 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
@@ -108,26 +108,6 @@ public class PackageUtil {
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/SettingsLib/OWNERS b/packages/SettingsLib/OWNERS
index 4211c272b774..d188c65be883 100644
--- a/packages/SettingsLib/OWNERS
+++ b/packages/SettingsLib/OWNERS
@@ -8,8 +8,8 @@ dsandler@google.com
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 @@ zhfan@google.com
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 5ecbe80b9645..c511589bccca 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 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
/**
* @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 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
/**
* @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/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java
index 2d34f237a555..7baded8da1d4 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 @@ public class CachedBluetoothDeviceManagerTest {
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 @@ public class CachedBluetoothDeviceManagerTest {
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 034574faf6db..5e417c34a77a 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 @@ public class CachedBluetoothDeviceTest {
when(mA2dpProfile.getConnectionStatus(mDevice)).
thenReturn(BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.isA2dpDevice()).isTrue();
+ assertThat(mCachedDevice.isConnectedA2dpDevice()).isTrue();
}
@Test
@@ -547,7 +547,7 @@ public class CachedBluetoothDeviceTest {
when(mA2dpProfile.getConnectionStatus(mDevice)).
thenReturn(BluetoothProfile.STATE_DISCONNECTING);
- assertThat(mCachedDevice.isA2dpDevice()).isFalse();
+ assertThat(mCachedDevice.isConnectedA2dpDevice()).isFalse();
}
@Test
@@ -556,7 +556,7 @@ public class CachedBluetoothDeviceTest {
when(mHfpProfile.getConnectionStatus(mDevice)).
thenReturn(BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.isHfpDevice()).isTrue();
+ assertThat(mCachedDevice.isConnectedHfpDevice()).isTrue();
}
@Test
@@ -565,7 +565,7 @@ public class CachedBluetoothDeviceTest {
when(mHfpProfile.getConnectionStatus(mDevice)).
thenReturn(BluetoothProfile.STATE_DISCONNECTING);
- assertThat(mCachedDevice.isHfpDevice()).isFalse();
+ assertThat(mCachedDevice.isConnectedHfpDevice()).isFalse();
}
@Test
@@ -590,14 +590,14 @@ public class CachedBluetoothDeviceTest {
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/SystemUI/res/layout/notification_snooze.xml b/packages/SystemUI/res/layout/notification_snooze.xml
index fae759a7a49e..ffe2eee80447 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 aaf45f34585b..f2038397014f 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 53dc4aa03a12..b59f0072b8c3 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/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
index 0ab713829bf4..1393f8fed2ff 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
@@ -678,9 +678,15 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater.
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 767b07f4e7f3..e96e176cc503 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 @@ public class NotificationLogger {
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 @@ public class NotificationLogger {
mNotificationLocationsChangedListener.onChildLocationsChanged();
}
+ public void setDozing(boolean dozing) {
+ synchronized (mDozingLock) {
+ mDozing = dozing;
+ }
+ }
+
private void logNotificationVisibilityChanges(
Collection<NotificationVisibility> newlyVisible,
Collection<NotificationVisibility> noLongerVisible) {
@@ -190,19 +198,25 @@ public class NotificationLogger {
// 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/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
index f3e100d18eba..40c8fde3f845 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 class NavigationBarFragment extends Fragment implements Callbacks {
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 ed1ae1097542..8c02e1f8220b 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 @@ public class NavigationBarGestureHelper implements TunerService.Tunable, Gesture
private int mTouchDownY;
private boolean mDownOnRecents;
private VelocityTracker mVelocityTracker;
- private boolean mNotificationsVisibleOnDown;
private boolean mDockWindowEnabled;
private boolean mDockWindowTouchSlopExceeded;
@@ -108,9 +107,6 @@ public class NavigationBarGestureHelper implements TunerService.Tunable, Gesture
}
public boolean onInterceptTouchEvent(MotionEvent event) {
- if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
- mNotificationsVisibleOnDown = !mStatusBar.isPresenterFullyCollapsed();
- }
if (!canHandleGestures()) {
return false;
}
@@ -275,7 +271,7 @@ public class NavigationBarGestureHelper implements TunerService.Tunable, Gesture
}
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 3837fbcd547b..3e41cd2b39cc 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 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
showSwipeUpUI ? mQuickStepAccessibilityDelegate : null);
}
+ public boolean isNotificationsFullyCollapsed() {
+ return mPanelView.isFullyCollapsed();
+ }
+
+ /**
+ * Updates the {@link WindowManager.LayoutParams.FLAG_SLIPPERY} state dependent on if swipe up
+ * is enabled, or the notifications is fully opened without being in an animated state. If
+ * 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 6cc88bb4377c..a13bebdcdc0a 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.util.Slog;
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 @@ public class QuickStepController implements GestureHelper {
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 @@ public class QuickStepController implements GestureHelper {
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 @@ public class QuickStepController implements GestureHelper {
mNavigationBarView.transformMatrixToLocal(mTransformLocalMatrix);
mQuickStepStarted = false;
mAllowGestureDetection = true;
+ mNotificationsVisibleOnDown = !mNavigationBarView.isNotificationsFullyCollapsed();
break;
}
case MotionEvent.ACTION_MOVE: {
@@ -257,7 +256,8 @@ public class QuickStepController implements GestureHelper {
// 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 @@ public class QuickStepController implements GestureHelper {
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 cd0255b0edf4..3701eafeb5eb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -3924,6 +3924,7 @@ public class StatusBar extends SystemUI implements DemoMode,
mDozeScrimController.setDozing(mDozing);
mKeyguardIndicationController.setDozing(mDozing);
mNotificationPanel.setDozing(mDozing, animate);
+ mNotificationLogger.setDozing(mDozing);
updateQsExpansionEnabled();
Trace.endSection();
}
diff --git a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
index 6792bc080066..7f83ed6164b9 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.hamcrest.Matchers.is;
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 @@ public class AAAPlusPlusVerifySysuiRequiredTestPropertiesTest extends SysuiTestC
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 @@ public class AAAPlusPlusVerifySysuiRequiredTestPropertiesTest extends SysuiTestC
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/statusbar/policy/CastControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java
new file mode 100644
index 000000000000..1b22f09d35ed
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java
@@ -0,0 +1,77 @@
+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 android.content.Context;
+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;
+
+@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();
+ }
+}
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index f81541e525b2..a07939e86325 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -1171,6 +1171,26 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
}
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/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index ad9fa40e0ab8..566ce4f48e25 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.CellInfo;
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.SignalStrength;
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 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
private boolean mCarrierNetworkChangeState = false;
+ private PhoneCapability mPhoneCapability = null;
+
private final LocalLog mLocalLog = new LocalLog(100);
private PreciseDataConnectionState mPreciseDataConnectionState =
@@ -658,6 +660,13 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
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 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
}
}
+ 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 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
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/biometrics/common/AuthenticationClient.java b/services/core/java/com/android/server/biometrics/common/AuthenticationClient.java
index 10a1b90b9135..a9cf96368a2b 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.BiometricAuthenticator;
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 @@ import com.android.internal.statusbar.IStatusBarService;
*/
public abstract class AuthenticationClient extends ClientMonitor {
private long mOpId;
+ private Handler mHandler;
public abstract int handleFailedAttempt();
public abstract void resetFailedAttempts();
@@ -97,6 +99,7 @@ public abstract class AuthenticationClient extends ClientMonitor {
mStatusBarService = statusBarService;
mFingerprintManager = (FingerprintManager) getContext()
.getSystemService(Context.FINGERPRINT_SERVICE);
+ mHandler = new Handler(Looper.getMainLooper());
}
@Override
@@ -217,15 +220,19 @@ public abstract class AuthenticationClient extends ClientMonitor {
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 f54baefa7161..5603f2f469b7 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 android.util.SparseIntArray;
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/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index f0743192d65e..dd3e2d42ef88 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_UN
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;
@@ -2694,24 +2693,30 @@ public class NotificationManagerService extends SystemService {
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 {
@@ -6556,6 +6561,35 @@ public class NotificationManagerService extends SystemService {
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/pm/permission/BasePermission.java b/services/core/java/com/android/server/pm/permission/BasePermission.java
index 1d002efc546f..820258022fd5 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 android.util.Slog;
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 final class BasePermission {
}
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/PermissionsState.java b/services/core/java/com/android/server/pm/permission/PermissionsState.java
index 11df380427eb..5e66bfc3cd3e 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.content.pm.PackageManager;
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 @@ public final class PermissionsState {
}
/**
+ * 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 13800b692eed..91d4717ac23a 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 @@ public final class PowerManagerService extends SystemService
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 @@ public final class PowerManagerService extends SystemService
}
mLastSleepTime = eventTime;
+ mLastSleepReason = reason;
mSandmanSummoned = true;
setWakefulnessLocked(WAKEFULNESS_DOZING, reason);
@@ -3266,6 +3270,7 @@ public final class PowerManagerService extends SystemService
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 @@ public final class PowerManagerService extends SystemService
}
}
+ @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 @@ public final class PowerManagerService extends SystemService
}
}
+ 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 519881ef8c92..f418ad4bf173 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 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
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 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
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 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
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()) {
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 f383fda0970f..7125246b6a29 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 android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
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 @@ import java.util.concurrent.TimeUnit;
/**
* 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 @@ public class DragDropControllerTests extends WindowTestsBase {
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 class DragDropControllerTests extends WindowTestsBase {
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/telephony/java/android/telephony/ModemInfo.java b/telephony/java/android/telephony/ModemInfo.java
new file mode 100644
index 000000000000..564effe05e38
--- /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/PhoneCapability.aidl b/telephony/java/android/telephony/PhoneCapability.aidl
new file mode 100644
index 000000000000..5de8d4a2c9e5
--- /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 000000000000..2ebfa53ead23
--- /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/PhoneStateListener.java b/telephony/java/android/telephony/PhoneStateListener.java
index 7f7ce8e50735..bd6a59d7492c 100644
--- a/telephony/java/android/telephony/PhoneStateListener.java
+++ b/telephony/java/android/telephony/PhoneStateListener.java
@@ -22,12 +22,11 @@ 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
@@ -273,6 +272,14 @@ public class PhoneStateListener {
*/
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
@@ -395,6 +402,10 @@ public class PhoneStateListener {
PhoneStateListener.this.onPhysicalChannelConfigurationChanged(
(List<PhysicalChannelConfig>)msg.obj);
break;
+ case LISTEN_PHONE_CAPABILITY_CHANGE:
+ PhoneStateListener.this.onPhoneCapabilityChanged(
+ (PhoneCapability) msg.obj);
+ break;
}
}
};
@@ -625,6 +636,16 @@ public class PhoneStateListener {
}
/**
+ * 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
@@ -751,6 +772,10 @@ public class PhoneStateListener {
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
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 3a8dba81c984..81d0d68fd92f 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -8075,4 +8075,23 @@ public class TelephonyManager {
}
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/com/android/internal/telephony/IPhoneStateListener.aidl b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
index 0d315e5e563e..1ebb6976b45e 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.ServiceState;
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 @@ oneway interface IPhoneStateListener {
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 f9c394000c83..c59a7395ebac 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -1531,4 +1531,10 @@ interface ITelephony {
* @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 0127db97963e..e0e1a7b87916 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.LinkProperties;
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 @@ interface ITelephonyRegistry {
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 2449108f22c4..0aba468b5e1f 100644
--- a/telephony/java/com/android/internal/telephony/SmsConstants.java
+++ b/telephony/java/com/android/internal/telephony/SmsConstants.java
@@ -58,7 +58,11 @@ public class SmsConstants {
* 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/tools/aapt2/format/Container.cpp b/tools/aapt2/format/Container.cpp
index 739555c5b15d..d4b45717e015 100644
--- a/tools/aapt2/format/Container.cpp
+++ b/tools/aapt2/format/Container.cpp
@@ -270,7 +270,8 @@ ContainerReader::ContainerReader(io::InputStream* in)
}
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 6fd4c8d2c135..8641a7c93d19 100644
--- a/tools/aapt2/format/binary/TableFlattener.cpp
+++ b/tools/aapt2/format/binary/TableFlattener.cpp
@@ -133,11 +133,10 @@ class MapFlattenVisitor : public ValueVisitor {
}
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 bab70109fc65..af19b98e528b 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 @@ TEST_F(TableFlattenerTest, FlattenMinMaxAttributes) {
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 fc4c9b537e73..70efbf5d17b2 100644
--- a/tools/aapt2/process/SymbolTable.cpp
+++ b/tools/aapt2/process/SymbolTable.cpp
@@ -194,6 +194,7 @@ std::unique_ptr<SymbolTable::Symbol> ResourceTableSymbolSource::FindByName(
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/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 5631919038a2..12f50c8af8a9 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -126,7 +126,7 @@ interface IWifiManager
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 f7de37034860..b56a7581e5fd 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -318,6 +318,31 @@ public class WifiManager {
"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 @@ public class WifiManager {
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 @@ public class WifiManager {
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 66297fc6ab29..ef9c59f1d7fa 100644
--- a/wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java
+++ b/wifi/java/android/net/wifi/hotspot2/ProvisioningCallback.java
@@ -85,6 +85,17 @@ public abstract class ProvisioningCallback {
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 abstract class ProvisioningCallback {
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