diff options
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 >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 |